use of org.olat.portfolio.model.structel.EPStructureElement in project openolat by klemens.
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 klemens.
the class EPStructureManager method addCollectRestriction.
/**
* Add or update a restriction to the collection of artefacts for a given structure element
* @param structure
* @param artefactType
* @param restriction
* @param amount
*/
public void addCollectRestriction(PortfolioStructure structure, String artefactType, String restriction, int amount) {
if (structure == null)
throw new NullPointerException("Structure cannot be null");
EPStructureElement structEl = (EPStructureElement) structure;
List<CollectRestriction> restrictions = structEl.getCollectRestrictions();
CollectRestriction cr = new CollectRestriction();
cr.setArtefactType(artefactType);
cr.setRestriction(restriction);
cr.setAmount(amount);
restrictions.add(cr);
}
use of org.olat.portfolio.model.structel.EPStructureElement in project openolat by klemens.
the class EPStructureManager method reOrderStructures.
protected boolean reOrderStructures(PortfolioStructure parent, PortfolioStructure orderSubject, int orderDest) {
EPStructureElement structureEl = (EPStructureElement) dbInstance.loadObject((EPStructureElement) parent);
List<EPStructureToStructureLink> structureLinks = structureEl.getInternalChildren();
int oldPos = indexOf(structureLinks, orderSubject);
if (oldPos != orderDest && oldPos != -1) {
EPStructureToStructureLink link = structureLinks.remove(oldPos);
if (oldPos < orderDest) {
orderDest--;
}
if (orderDest < 0) {
orderDest = 0;
} else if (orderDest > structureLinks.size()) {
// place at end
orderDest = structureLinks.size() - 1;
}
structureLinks.add(orderDest, link);
dbInstance.updateObject(structureEl);
return true;
}
return false;
}
use of org.olat.portfolio.model.structel.EPStructureElement in project openolat by klemens.
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 klemens.
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