WindowControl wControl, boolean exceptIfNoneFound) {
Roles roles = ureq.getUserSession().getRoles();
if (olatResourceable == null) {
// special case after login: guest will get guesthome, other user the
// normal home
if (ureq.getUserSession().getRoles().isGuestOnly()) return new GuestHomeMainController(ureq, wControl);
return new HomeMainController(ureq, wControl);
} else if (OresHelper.isOfType(olatResourceable, BGMainController.class)) {
if (roles.isGuestOnly()) throw new OLATSecurityException("Tried to launch a BuddyGroupMainController, but is in guest group " + roles);
return BGControllerFactory.getInstance().createBuddyGroupMainController(ureq, wControl, initialViewIdentifier);
} else if (OresHelper.isOfType(olatResourceable, BusinessGroup.class)) {
if (roles.isGuestOnly()) throw new OLATSecurityException("Tried to launch a BusinessGroup, but is in guest group " + roles);
BusinessGroupManager bgm = BusinessGroupManagerImpl.getInstance();
BusinessGroup bg = bgm.loadBusinessGroup(olatResourceable.getResourceableId(), exceptIfNoneFound);
boolean isOlatAdmin = ureq.getUserSession().getRoles().isOLATAdmin();
// check if allowed to start (must be member or admin)
if (isOlatAdmin || bgm.isIdentityInBusinessGroup(ureq.getIdentity(), bg)) {
// only olatadmins or admins of this group can administer this group
return BGControllerFactory.getInstance().createRunControllerFor(ureq, wControl, bg, isOlatAdmin,
initialViewIdentifier);
}
// else skip
} else if (OresHelper.isOfType(olatResourceable, RepositoryEntry.class)) {
// it this is a respository type, the resourceableID is the repository
// entry key
RepositoryManager rm = RepositoryManager.getInstance();
RepositoryEntry re = rm.lookupRepositoryEntry(olatResourceable.getResourceableId());
MainLayoutController ctrl = RepositoyUIFactory.createLaunchController(re, initialViewIdentifier, ureq, wControl);
if (ctrl != null) return ctrl;
} else if (OresHelper.isOfType(olatResourceable, CourseModule.class)) {
// gets called by subscription launcher
//FIXME:fj:make it clearer here: subscriptioncontext is always given by
// the surrounding resource, but for launching we always need the
// repoentry
// if it is a course, we also take the repository entry, since a course
// can only be called by a repoentry
RepositoryManager rm = RepositoryManager.getInstance();
RepositoryEntry re = rm.lookupRepositoryEntry(olatResourceable, false);
MainLayoutController ctrl = RepositoyUIFactory.createLaunchController(re, initialViewIdentifier, ureq, wControl);
if (ctrl != null) return ctrl;
} else if (OresHelper.isOfType(olatResourceable, AssessmentManager.class)) {
// gets called by subscription launcher
//FIXME:fj:make it clearer here: subscriptioncontext is always given by
// the surrounding resource, but for launching we always need the
// repoentry
// if it is a course, we also take the repository entry, since a course
// can only be called by a repoentry
RepositoryManager rm = RepositoryManager.getInstance();
// launch course with view identifyer assessment tool. however notifications
// publisher data provides not existing assessmentManager resource
OLATResourceable fakedCourseResource = OresHelper.createOLATResourceableInstance(CourseModule.class, olatResourceable.getResourceableId());
RepositoryEntry re = rm.lookupRepositoryEntry(fakedCourseResource, false);
MainLayoutController ctrl = RepositoyUIFactory.createLaunchController(re, "assessmentTool", ureq, wControl);
if (ctrl != null) return ctrl;
} else if (OresHelper.isOfType(olatResourceable, DropboxController.class)) {
// JumpIn-handling for task-dropbox notification
RepositoryManager rm = RepositoryManager.getInstance();
OLATResourceable fakedCourseResource = OresHelper.createOLATResourceableInstance(CourseModule.class, olatResourceable.getResourceableId());
RepositoryEntry re = rm.lookupRepositoryEntry(fakedCourseResource,false);
if (re == null) {
return null;// found no repositoryEntry => return null
}
MainLayoutController ctrl = RepositoyUIFactory.createLaunchController(re, "assessmentTool:nodeChoose", ureq, wControl);
if (ctrl != null) return ctrl;
} else if (OresHelper.isOfType(olatResourceable, ReturnboxController.class)) {
// JumpIn-handling for task-returnbox notification
RepositoryManager rm = RepositoryManager.getInstance();
OLATResourceable fakedCourseResource = OresHelper.createOLATResourceableInstance(CourseModule.class, olatResourceable.getResourceableId());
RepositoryEntry re = rm.lookupRepositoryEntry(fakedCourseResource, false);
MainLayoutController ctrl = RepositoyUIFactory.createLaunchController(re, initialViewIdentifier, ureq, wControl);
if (ctrl != null) return ctrl;
}
// --- repository ---
else if (OresHelper.isOfType(olatResourceable, RepositoryMainController.class)) {
return new RepositoryMainController(ureq, wControl);
}
// --- home ---
else if (OresHelper.isOfType(olatResourceable, HomeMainController.class)) {
if (roles.isGuestOnly()) throw new OLATSecurityException("Tried to launch a HomeMainController, but is in guest group " + roles);
return new HomeMainController(ureq, wControl);
} else if (OresHelper.isOfType(olatResourceable, SystemAdminMainController.class)) {
if (!roles.isOLATAdmin()) throw new OLATSecurityException("Tried to launch a SystemAdminMainController, but is not in admin group " + roles);
return new SystemAdminMainController(ureq, wControl);
} else if (OresHelper.isOfType(olatResourceable, UserAdminMainController.class)) {
if (!roles.isUserManager()) throw new OLATSecurityException("Tried to launch a UserAdminMainController, but is not in admin group " + roles);
return new UserAdminMainController(ureq, wControl);
} else if (OresHelper.isOfType(olatResourceable, BGContextManagementController.class)) {
if (!roles.isGroupManager()) throw new OLATSecurityException("Tried to launch a BGContextManagementController, but is not in group groupmanager "
+ roles);
return new BGContextManagementController(ureq, wControl);
} else if (OresHelper.isOfType(olatResourceable, GuestHomeMainController.class)) {
if (!roles.isGuestOnly()) throw new OLATSecurityException("Tried to launch a GuestMainController, but is not in guest group " + roles);
return new GuestHomeMainController(ureq, wControl);
} else if (OresHelper.isOfType(olatResourceable, GUIDemoMainController.class)) {
if (!roles.isOLATAdmin()) throw new OLATSecurityException("Tried to launch a GUIDemoMainController, but is not in admin group "
+ roles);
return new GUIDemoMainController(ureq, wControl);
} else { // ask the handlerfactory of the repository if it can handle it