use of org.olat.portfolio.model.structel.EPStructureElement in project OpenOLAT by OpenOLAT.
the class EPStructureManager method removeArtefactFromStructure.
private PortfolioStructure removeArtefactFromStructure(AbstractArtefact artefact, PortfolioStructure structure, boolean updateFirst) {
if (artefact == null || structure == null)
throw new NullPointerException();
// not persisted
if (artefact.getKey() == null)
return null;
if (structure instanceof EPStructureElement) {
// save eventual changes
if (updateFirst) {
dbInstance.updateObject(structure);
}
// reconnect to the session
EPStructureElement structureEl = (EPStructureElement) dbInstance.loadObject((EPStructureElement) structure);
EPStructureToArtefactLink linkToDelete = null;
for (Iterator<EPStructureToArtefactLink> linkIt = structureEl.getInternalArtefacts().iterator(); linkIt.hasNext(); ) {
EPStructureToArtefactLink link = linkIt.next();
if (link.getArtefact().getKey().equals(artefact.getKey())) {
linkIt.remove();
linkToDelete = link;
break;
}
}
// I have not set the cascade all delete
if (linkToDelete != null) {
dbInstance.updateObject(structureEl);
dbInstance.deleteObject(linkToDelete);
}
return structureEl;
}
return null;
}
use of org.olat.portfolio.model.structel.EPStructureElement in project OpenOLAT by OpenOLAT.
the class EPStructureManager method addStructureToStructure.
/**
* Add a child structure to the parent structure.
* @param parentStructure
* @param childStructure
* @param destinationPos set to -1 to append at the end!
*/
public void addStructureToStructure(PortfolioStructure parentStructure, PortfolioStructure childStructure, int destinationPos) {
if (parentStructure == null || childStructure == null)
throw new NullPointerException();
if (childStructure instanceof EPStructureElement) {
// save eventual changes
dbInstance.updateObject(parentStructure);
// reconnect to the session (why reconnect? you update it already)
// parentStructure = (EPStructureElement)dbInstance.loadObject((EPStructureElement)parentStructure);
EPStructureToStructureLink link = new EPStructureToStructureLink();
link.setParent(parentStructure);
link.setChild(childStructure);
// refresh internal link to its root element
((EPStructureElement) childStructure).setRoot((EPStructureElement) parentStructure);
List<EPStructureToStructureLink> internalChildren = ((EPStructureElement) parentStructure).getInternalChildren();
if (destinationPos == -1) {
internalChildren.add(link);
} else if (destinationPos <= internalChildren.size()) {
internalChildren.add(destinationPos, link);
} else {
internalChildren.add(link);
}
}
}
use of org.olat.portfolio.model.structel.EPStructureElement in project OpenOLAT by OpenOLAT.
the class EPStructureManager method instantiateClone.
private EPStructureElement instantiateClone(PortfolioStructure source) {
EPStructureElement targetEl = null;
// don't forget the inheritence
if (source instanceof EPPage) {
targetEl = new EPPage();
targetEl.setTitle(((EPPage) source).getTitle());
targetEl.setDescription(((EPPage) source).getDescription());
} else if (source instanceof EPStructureElement) {
targetEl = new EPStructureElement();
targetEl.setTitle(((EPStructureElement) source).getTitle());
targetEl.setDescription(((EPStructureElement) source).getDescription());
}
return targetEl;
}
use of org.olat.portfolio.model.structel.EPStructureElement in project OpenOLAT by OpenOLAT.
the class EPStructureManager method copy.
/**
* Copy/Import structure elements recursively
* @param refLink
* @param targetEl
* @param withArtefacts Copy the artefacts
* @param importEl Don't load elements from the DB
* @param cloneRestrictions should the collect-restrictions be applied? you could also do this manually by copyCollectRestriction()
*/
private void copy(EPStructureToStructureLink refLink, EPStructureElement targetEl, boolean withArtefacts, boolean importEl, boolean cloneRestrictions) {
EPStructureElement childSourceEl = (EPStructureElement) refLink.getChild();
EPStructureElement clonedChildEl = instantiateClone(refLink.getChild());
if (clonedChildEl == null) {
log.warn("Attempt to clone an unsupported structure type: " + refLink.getChild(), null);
} else {
OLATResource resource = resourceManager.createOLATResourceInstance(clonedChildEl.getClass());
clonedChildEl.setOlatResource(resource);
// set root
if (targetEl.getRoot() == null) {
// it's the root element
clonedChildEl.setRoot(targetEl);
} else {
clonedChildEl.setRoot(targetEl.getRoot());
}
if (targetEl.getRootMap() == null && targetEl instanceof PortfolioStructureMap) {
clonedChildEl.setRootMap((PortfolioStructureMap) targetEl);
} else {
clonedChildEl.setRootMap(targetEl.getRootMap());
}
if (!importEl)
clonedChildEl.setStructureElSource(childSourceEl.getKey());
if (cloneRestrictions)
copyOrUpdateCollectRestriction(childSourceEl, clonedChildEl, true);
if (importEl) {
importEPStructureElementRecursively(childSourceEl, clonedChildEl);
} else {
copyEPStructureElementRecursively(childSourceEl, clonedChildEl, withArtefacts, cloneRestrictions);
}
EPStructureToStructureLink link = new EPStructureToStructureLink();
link.setParent(targetEl);
link.setChild(clonedChildEl);
targetEl.getInternalChildren().add(link);
}
}
use of org.olat.portfolio.model.structel.EPStructureElement in project OpenOLAT by OpenOLAT.
the class EPStructureManager method importEPStructureElementRecursively.
private void importEPStructureElementRecursively(EPStructureElement sourceEl, EPStructureElement targetEl) {
// clone the links
List<EPStructureToStructureLink> childLinks = sourceEl.getInternalChildren();
for (EPStructureToStructureLink childLink : childLinks) {
EPStructureElement childSourceEl = (EPStructureElement) childLink.getChild();
// remove source-info on imports.
childSourceEl.setStructureElSource(null);
copy(childLink, targetEl, false, true, true);
}
savePortfolioStructure(targetEl);
}
Aggregations