Skip to content
Snippets Groups Projects
Commit 5548660a authored by srosse's avatar srosse
Browse files

OO-147: implement an other method to prevent StaleObjectException while reloading an object

--HG--
branch : 80-patch
parent 693fd8ce
No related branches found
No related tags found
No related merge requests found
...@@ -91,7 +91,7 @@ public class DeadlineController extends FormBasicController { ...@@ -91,7 +91,7 @@ public class DeadlineController extends FormBasicController {
@Override @Override
protected void formOK(UserRequest ureq) { protected void formOK(UserRequest ureq) {
Date newDeadLine = deadlineChooser.getDate(); Date newDeadLine = deadlineChooser.getDate();
map = (EPStructuredMap) ePFMgr.loadPortfolioStructureByKey(map.getKey()); // OLAT-6335: refresh map in case it was changed meanwhile map = (EPStructuredMap) ePFMgr.reloadPortfolioStructure(map); // OLAT-6335: refresh map in case it was changed meanwhile
map.setDeadLine(newDeadLine); map.setDeadLine(newDeadLine);
map.setStatus(StructureStatusEnum.OPEN); map.setStatus(StructureStatusEnum.OPEN);
ePFMgr.savePortfolioStructure(map); ePFMgr.savePortfolioStructure(map);
......
...@@ -61,7 +61,6 @@ import org.olat.modules.webFeed.portfolio.LiveBlogArtefactHandler; ...@@ -61,7 +61,6 @@ import org.olat.modules.webFeed.portfolio.LiveBlogArtefactHandler;
import org.olat.portfolio.PortfolioModule; import org.olat.portfolio.PortfolioModule;
import org.olat.portfolio.model.EPFilterSettings; import org.olat.portfolio.model.EPFilterSettings;
import org.olat.portfolio.model.artefacts.AbstractArtefact; import org.olat.portfolio.model.artefacts.AbstractArtefact;
import org.olat.portfolio.model.structel.EPAbstractMap;
import org.olat.portfolio.model.structel.EPPage; import org.olat.portfolio.model.structel.EPPage;
import org.olat.portfolio.model.structel.EPStructureElement; import org.olat.portfolio.model.structel.EPStructureElement;
import org.olat.portfolio.model.structel.EPStructuredMap; import org.olat.portfolio.model.structel.EPStructuredMap;
...@@ -919,7 +918,9 @@ public class EPFrontendManager extends BasicManager { ...@@ -919,7 +918,9 @@ public class EPFrontendManager extends BasicManager {
} }
/** /**
* Load a portfolio structure by its primary key * Load a portfolio structure by its primary key. DON'T USE THIS METHOD
* TO RELOAD AN OBJECT. If you want do this, use the method
* reloadPortfolioStructure(PortfolioStructure structure)
* @param key cannot be null * @param key cannot be null
* @return The structure element or null if not found * @return The structure element or null if not found
*/ */
...@@ -927,6 +928,15 @@ public class EPFrontendManager extends BasicManager { ...@@ -927,6 +928,15 @@ public class EPFrontendManager extends BasicManager {
return structureManager.loadPortfolioStructureByKey(key); return structureManager.loadPortfolioStructureByKey(key);
} }
/**
* Reload a portfolio structure
* @param structure cannot be null
* @return The reloaded structure element
*/
public PortfolioStructure reloadPortfolioStructure(PortfolioStructure structure){
return structureManager.reloadPortfolioStructure(structure);
}
/** /**
* Load the OLAT resource with the primary of the structure element * Load the OLAT resource with the primary of the structure element
* @param key cannot be null * @param key cannot be null
......
...@@ -27,6 +27,7 @@ import java.util.Date; ...@@ -27,6 +27,7 @@ import java.util.Date;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import org.hibernate.ObjectNotFoundException;
import org.olat.basesecurity.BaseSecurity; import org.olat.basesecurity.BaseSecurity;
import org.olat.basesecurity.Constants; import org.olat.basesecurity.Constants;
import org.olat.basesecurity.NamedGroupImpl; import org.olat.basesecurity.NamedGroupImpl;
...@@ -647,7 +648,7 @@ public class EPStructureManager extends BasicManager { ...@@ -647,7 +648,7 @@ public class EPStructureManager extends BasicManager {
protected Integer[] getRestrictionStatistics(PortfolioStructure structure) { protected Integer[] getRestrictionStatistics(PortfolioStructure structure) {
if (structure instanceof EPStructureElement) { if (structure instanceof EPStructureElement) {
EPStructureElement structEl = (EPStructureElement) structure; EPStructureElement structEl = (EPStructureElement) structure;
structEl = (EPStructureElement) loadPortfolioStructureByKey(structEl.getKey()); structEl = (EPStructureElement) reloadPortfolioStructure(structEl);
final List<CollectRestriction> restrictions = structEl.getCollectRestrictions(); final List<CollectRestriction> restrictions = structEl.getCollectRestrictions();
if (restrictions != null && !restrictions.isEmpty()) { if (restrictions != null && !restrictions.isEmpty()) {
...@@ -1516,9 +1517,23 @@ public class EPStructureManager extends BasicManager { ...@@ -1516,9 +1517,23 @@ public class EPStructureManager extends BasicManager {
return resources.get(0); return resources.get(0);
} }
/**
* Reload an object
* @param structure
* @return The reloaded object or null if not found
*/
public PortfolioStructure reloadPortfolioStructure(PortfolioStructure structure) {
if (structure == null) throw new NullPointerException();
try {
return (PortfolioStructure)dbInstance.loadObject(EPStructureElement.class, structure.getKey());
} catch (ObjectNotFoundException e) {
return null;
}
}
public OLATResource loadOlatResourceFromStructureElByKey(Long key) { public OLATResource loadOlatResourceFromStructureElByKey(Long key) {
if (key == null) throw new NullPointerException(); if (key == null) throw new NullPointerException();
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("select element.olatResource from ").append(EPStructureElement.class.getName()).append(" element") sb.append("select element.olatResource from ").append(EPStructureElement.class.getName()).append(" element")
.append(" where element.key=:key or element.olatResource.resId=:key "); .append(" where element.key=:key or element.olatResource.resId=:key ");
......
...@@ -229,7 +229,7 @@ public class EPMultipleArtefactsAsTableController extends BasicController implem ...@@ -229,7 +229,7 @@ public class EPMultipleArtefactsAsTableController extends BasicController implem
} else if (CMD_CHOOSE.equals(action)){ } else if (CMD_CHOOSE.equals(action)){
fireEvent(ureq, new EPArtefactChoosenEvent(artefact)); fireEvent(ureq, new EPArtefactChoosenEvent(artefact));
} else if (CMD_UNLINK.equals(action)){ } else if (CMD_UNLINK.equals(action)){
struct = ePFMgr.loadPortfolioStructureByKey(struct.getKey()); struct = ePFMgr.reloadPortfolioStructure(struct);
ePFMgr.removeArtefactFromStructure(artefact, struct); ePFMgr.removeArtefactFromStructure(artefact, struct);
artefactListTblCtrl.modelChanged(); artefactListTblCtrl.modelChanged();
fireEvent(ureq, new EPStructureChangeEvent(EPStructureChangeEvent.ADDED, struct)); fireEvent(ureq, new EPStructureChangeEvent(EPStructureChangeEvent.ADDED, struct));
......
...@@ -152,7 +152,7 @@ public class EPPageViewController extends BasicController { ...@@ -152,7 +152,7 @@ public class EPPageViewController extends BasicController {
protected void event(UserRequest ureq, Controller source, Event event) { protected void event(UserRequest ureq, Controller source, Event event) {
super.event(ureq, source, event); super.event(ureq, source, event);
if (event instanceof EPStructureChangeEvent){ if (event instanceof EPStructureChangeEvent){
this.page = (EPPage) ePFMgr.loadPortfolioStructureByKey(page.getKey()); this.page = (EPPage) ePFMgr.reloadPortfolioStructure(page);
init(ureq); init(ureq);
} }
} }
......
...@@ -295,7 +295,7 @@ public class EPStructureDetailsController extends FormBasicController { ...@@ -295,7 +295,7 @@ public class EPStructureDetailsController extends FormBasicController {
*/ */
@Override @Override
protected void formOK(final UserRequest ureq) { protected void formOK(final UserRequest ureq) {
editStructure = ePFMgr.loadPortfolioStructureByKey(editStructure.getKey()); editStructure = ePFMgr.reloadPortfolioStructure(editStructure);
editStructure.setTitle(titleEl.getValue()); editStructure.setTitle(titleEl.getValue());
editStructure.setDescription(descriptionEl.getValue()); editStructure.setDescription(descriptionEl.getValue());
editStructure.setArtefactRepresentationMode(viewRadio.getSelectedKey()); editStructure.setArtefactRepresentationMode(viewRadio.getSelectedKey());
......
...@@ -125,7 +125,7 @@ public class EPStructureTreeAndDetailsEditController extends FormBasicController ...@@ -125,7 +125,7 @@ public class EPStructureTreeAndDetailsEditController extends FormBasicController
if (source == mapStyle){ if (source == mapStyle){
if (!mapStyle.getSelectedKey().equals(mapStyle.getUserObject())){ if (!mapStyle.getSelectedKey().equals(mapStyle.getUserObject())){
String newStyle = mapStyle.getSelectedKey(); String newStyle = mapStyle.getSelectedKey();
rootStructure = ePFMgr.loadPortfolioStructureByKey(rootStructure.getKey()); rootStructure = ePFMgr.reloadPortfolioStructure(rootStructure);
((EPStructureElement)rootStructure).setStyle(newStyle); ((EPStructureElement)rootStructure).setStyle(newStyle);
ePFMgr.savePortfolioStructure(rootStructure); ePFMgr.savePortfolioStructure(rootStructure);
fireEvent(ureq, Event.CHANGED_EVENT); fireEvent(ureq, Event.CHANGED_EVENT);
...@@ -136,7 +136,7 @@ public class EPStructureTreeAndDetailsEditController extends FormBasicController ...@@ -136,7 +136,7 @@ public class EPStructureTreeAndDetailsEditController extends FormBasicController
private void initOrUpdateToc(UserRequest ureq) { private void initOrUpdateToc(UserRequest ureq) {
removeAsListenerAndDispose(tocCtrl); removeAsListenerAndDispose(tocCtrl);
// with new links (pages, sub-elements or artefacts) to map, map gets a new version, therefore needs a refresh! // with new links (pages, sub-elements or artefacts) to map, map gets a new version, therefore needs a refresh!
rootStructure = ePFMgr.loadPortfolioStructureByKey(rootStructure.getKey()); rootStructure = ePFMgr.reloadPortfolioStructure(rootStructure);
tocCtrl = new EPTOCController(ureq, getWindowControl(), selectedStructure, rootStructure, secCallback); tocCtrl = new EPTOCController(ureq, getWindowControl(), selectedStructure, rootStructure, secCallback);
listenTo(tocCtrl); listenTo(tocCtrl);
flc.put("tocCtrl", tocCtrl.getInitialComponent()); flc.put("tocCtrl", tocCtrl.getInitialComponent());
...@@ -192,7 +192,7 @@ public class EPStructureTreeAndDetailsEditController extends FormBasicController ...@@ -192,7 +192,7 @@ public class EPStructureTreeAndDetailsEditController extends FormBasicController
tocCtrl.refreshTree(rootStructure); tocCtrl.refreshTree(rootStructure);
} else if (event instanceof EPStructureChangeEvent && event.getCommand().equals(EPStructureChangeEvent.ADDED)) { } else if (event instanceof EPStructureChangeEvent && event.getCommand().equals(EPStructureChangeEvent.ADDED)) {
// always reload to be on the save side! // always reload to be on the save side!
selectedStructure = ePFMgr.loadPortfolioStructureByKey(((EPStructureChangeEvent)event).getPortfolioStructure().getKey()); selectedStructure = ePFMgr.reloadPortfolioStructure(((EPStructureChangeEvent)event).getPortfolioStructure());
initOrUpdateToc(ureq); initOrUpdateToc(ureq);
initOrUpdateDetailsEditor(ureq); initOrUpdateDetailsEditor(ureq);
} else if (event.equals(Event.CHANGED_EVENT)){ } else if (event.equals(Event.CHANGED_EVENT)){
...@@ -210,7 +210,7 @@ public class EPStructureTreeAndDetailsEditController extends FormBasicController ...@@ -210,7 +210,7 @@ public class EPStructureTreeAndDetailsEditController extends FormBasicController
if(EPStructureEvent.CHANGE.equals(structureEvent.getCommand())) { if(EPStructureEvent.CHANGE.equals(structureEvent.getCommand())) {
PortfolioStructure structure = structureEvent.getStructure(); PortfolioStructure structure = structureEvent.getStructure();
if(rootStructure.equals(structure)) { if(rootStructure.equals(structure)) {
rootStructure = ePFMgr.loadPortfolioStructureByKey(rootStructure.getKey()); rootStructure = ePFMgr.reloadPortfolioStructure(rootStructure);
} }
// refresh the tree on changes! // refresh the tree on changes!
tocCtrl.update(ureq, structure); tocCtrl.update(ureq, structure);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment