use of org.olat.core.util.resource.OLATResourceableJustBeforeDeletedEvent in project OpenOLAT by OpenOLAT.
the class BusinessGroupServiceImpl method deleteBusinessGroup.
@Override
public void deleteBusinessGroup(BusinessGroup group) {
try {
OLATResourceableJustBeforeDeletedEvent delEv = new OLATResourceableJustBeforeDeletedEvent(group);
// notify all (currently running) BusinessGroupXXXcontrollers
// about the deletion which will occur.
CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(delEv, group);
// refresh object to avoid stale object exceptions
group = loadBusinessGroup(group);
// 0) Loop over all deletableGroupData
Map<String, DeletableGroupData> deleteListeners = CoreSpringFactory.getBeansOfType(DeletableGroupData.class);
for (DeletableGroupData deleteListener : deleteListeners.values()) {
if (log.isDebug()) {
log.debug("deleteBusinessGroup: call deleteListener=" + deleteListener);
}
deleteListener.deleteGroupDataFor(group);
}
// 1) Delete all group properties
CollaborationTools ct = CollaborationToolsFactory.getInstance().getOrCreateCollaborationTools(group);
// deletes everything concerning properties&collabTools
ct.deleteTools(group);
// 1.c)delete user in security groups
// removeFromRepositoryEntrySecurityGroup(group);
// 2) Delete the group areas
areaManager.deleteBGtoAreaRelations(group);
// 3) Delete the relations
businessGroupRelationDAO.deleteRelationsToRepositoryEntry(group);
assessmentModeDao.deleteAssessmentModesToGroup(group);
// 4) delete properties
propertyManager.deleteProperties(null, group, null, null, null);
propertyManager.deleteProperties(null, null, group, null, null);
// 5) delete the publisher attached to this group (e.g. the forum and folder
// publisher)
notificationsManager.deletePublishersOf(group);
// 6) delete info messages and subscription context associated with this group
infoMessageManager.removeInfoMessagesAndSubscriptionContext(group);
// 7) the group
businessGroupDAO.delete(group);
// 8) delete the associated security groups
// TODO group
dbInstance.commit();
log.audit("Deleted Business Group", group.toString());
} catch (DBRuntimeException dbre) {
Throwable th = dbre.getCause();
if ((th instanceof ObjectNotFoundException) && th.getMessage().contains("org.olat.group.BusinessGroupImpl")) {
// group already deleted
return;
}
if ((th instanceof StaleObjectStateException) && (th.getMessage().startsWith("Row was updated or deleted by another transaction"))) {
// known issue OLAT-3654
log.info("Group was deleted by another user in the meantime. Known issue OLAT-3654");
throw new KnownIssueException("Group was deleted by another user in the meantime", 3654);
} else {
throw dbre;
}
}
}
use of org.olat.core.util.resource.OLATResourceableJustBeforeDeletedEvent in project openolat by klemens.
the class NoteController method event.
/**
* @see org.olat.core.util.event.GenericEventListener#event(org.olat.core.gui.control.Event)
*/
public void event(Event event) {
if (event instanceof OLATResourceableJustBeforeDeletedEvent) {
OLATResourceableJustBeforeDeletedEvent bdev = (OLATResourceableJustBeforeDeletedEvent) event;
Long key = n.getKey();
if (key != null) {
// already persisted
if (bdev.getOresId().equals(key)) {
dispose();
}
}
}
}
use of org.olat.core.util.resource.OLATResourceableJustBeforeDeletedEvent in project openolat by klemens.
the class NoteListController method event.
/**
* @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
* org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
*/
@Override
public void event(UserRequest ureq, Controller source, Event event) {
// if row has been clicked
if (source == tableC) {
if (event.getCommand().equals(Table.COMMANDLINK_ROWACTION_CLICKED)) {
TableEvent te = (TableEvent) event;
String actionid = te.getActionId();
int rowid = te.getRowId();
this.chosenN = nLModel.getObject(rowid);
if (actionid.equals("choose")) {
removeAsListenerAndDispose(nc);
nc = new NoteController(ureq, getWindowControl(), chosenN);
listenTo(nc);
removeAsListenerAndDispose(cmc);
cmc = new CloseableModalController(getWindowControl(), translate("close"), nc.getInitialComponent());
listenTo(cmc);
cmc.activate();
} else if (actionid.equals("delete")) {
deleteDialogCtr = activateYesNoDialog(ureq, null, translate("note.delete.confirmation"), deleteDialogCtr);
}
}
} else if (source == deleteDialogCtr) {
if (DialogBoxUIFactory.isYesEvent(event)) {
// delete is ok
nm.deleteNote(chosenN);
// fire local event (for the same user)
// TODO:fj:a make Note (and all persistables) olatresourceables: problem: type is then NoteImpl instead of Note
OLATResourceable ores = OresHelper.createOLATResourceableInstance(Note.class, chosenN.getKey());
ureq.getUserSession().getSingleUserEventCenter().fireEventToListenersOf(new OLATResourceableJustBeforeDeletedEvent(ores), ores);
showInfo("note.delete.successfull");
populateNLTable();
chosenN = null;
} else {
// answer was "no"
chosenN = null;
}
} else if (source == nc) {
if (event == Event.BACK_EVENT) {
cmc.deactivate();
}
}
}
use of org.olat.core.util.resource.OLATResourceableJustBeforeDeletedEvent in project openolat by klemens.
the class FileHandler method cleanupOnDelete.
@Override
public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) {
// notify all current users of this resource (content packaging file resource) that it will be deleted now.
CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(new OLATResourceableJustBeforeDeletedEvent(res), res);
FileResourceManager.getInstance().deleteFileResource(res);
return true;
}
use of org.olat.core.util.resource.OLATResourceableJustBeforeDeletedEvent in project openolat by klemens.
the class SharedFolderHandler method cleanupOnDelete.
@Override
public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) {
// do not need to notify all current users of this resource, since the only
// way to access this resource
CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(new OLATResourceableJustBeforeDeletedEvent(res), res);
DBFactory.getInstance().commitAndCloseSession();
SharedFolderManager.getInstance().deleteSharedFolder(res);
return true;
}
Aggregations