From 2fc17485b6983505512c17b28b444cd286ca4391 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 12 Mar 2014 16:39:42 +0100
Subject: [PATCH] OO-1000: springuified project broker with annotations

---
 .../datamodel/ProjectBrokerImpl.java          |  1 +
 .../service/ProjectBrokerMailerImpl.java      | 32 ++++---
 .../service/ProjectBrokerManagerImpl.java     | 90 +++++++++----------
 .../service/ProjectGroupManagerImpl.java      | 64 ++++++-------
 4 files changed, 98 insertions(+), 89 deletions(-)

diff --git a/src/main/java/org/olat/course/nodes/projectbroker/datamodel/ProjectBrokerImpl.java b/src/main/java/org/olat/course/nodes/projectbroker/datamodel/ProjectBrokerImpl.java
index 91a16c6ddca..a55f538f649 100644
--- a/src/main/java/org/olat/course/nodes/projectbroker/datamodel/ProjectBrokerImpl.java
+++ b/src/main/java/org/olat/course/nodes/projectbroker/datamodel/ProjectBrokerImpl.java
@@ -36,6 +36,7 @@ import org.olat.core.util.resource.OresHelper;
  */
 public class ProjectBrokerImpl extends PersistentObject implements ProjectBroker {
 
+	private static final long serialVersionUID = -6007111791449152666L;
 	private List<Project> projectList;
 
 	/* (non-Javadoc)
diff --git a/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectBrokerMailerImpl.java b/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectBrokerMailerImpl.java
index fa73752cd98..f41f6f8630d 100644
--- a/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectBrokerMailerImpl.java
+++ b/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectBrokerMailerImpl.java
@@ -32,7 +32,6 @@ import java.util.UUID;
 
 import org.apache.velocity.VelocityContext;
 import org.olat.basesecurity.GroupRoles;
-import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.Identity;
 import org.olat.core.id.UserConstants;
@@ -52,6 +51,7 @@ import org.olat.course.run.environment.CourseEnvironment;
 import org.olat.group.BusinessGroup;
 import org.olat.group.BusinessGroupService;
 import org.olat.properties.Property;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 
@@ -91,6 +91,10 @@ public class ProjectBrokerMailerImpl implements ProjectBrokerMailer {
 	private static final String KEY_REMOVE_PARTICIPANT_EMAIL_BODY    = "mail.remove.participant.body";
 	
 	private OLog log = Tracing.createLoggerFor(this.getClass()); 
+	@Autowired
+	private MailManager mailManager;
+	@Autowired
+	private BusinessGroupService businessGroupService;
 	
 	
 	// For Enrollment 
@@ -101,7 +105,7 @@ public class ProjectBrokerMailerImpl implements ProjectBrokerMailer {
 	}
 
 	public MailerResult sendEnrolledEmailToManager(Identity enrolledIdentity, Project project, Translator pT) {
-		List<Identity> coaches = CoreSpringFactory.getImpl(BusinessGroupService.class)
+		List<Identity> coaches = businessGroupService
 				.getMembers(project.getProjectGroup(), GroupRoles.coach.name());
 		return sendEmailToGroup(coaches, enrolledIdentity, project, 
 				                    pT.translate(KEY_ENROLLED_EMAIL_TO_MANAGER_SUBJECT), 
@@ -116,7 +120,7 @@ public class ProjectBrokerMailerImpl implements ProjectBrokerMailer {
 	}
 
 	public MailerResult sendCancelEnrollmentEmailToManager(Identity enrolledIdentity, Project project, Translator pT) {
-		List<Identity> coaches = CoreSpringFactory.getImpl(BusinessGroupService.class)
+		List<Identity> coaches = businessGroupService
 				.getMembers(project.getProjectGroup(), GroupRoles.coach.name());
 		return sendEmailToGroup(coaches, enrolledIdentity, project, 
         pT.translate(KEY_CANCEL_ENROLLMENT_EMAIL_TO_MANAGER_SUBJECT), 
@@ -125,7 +129,7 @@ public class ProjectBrokerMailerImpl implements ProjectBrokerMailer {
 
 	// Project change
 	public MailerResult sendProjectChangedEmailToParticipants(Identity changer, Project project, Translator pT) {
-		List<Identity> participants = CoreSpringFactory.getImpl(BusinessGroupService.class)
+		List<Identity> participants = businessGroupService
 				.getMembers(project.getProjectGroup(), GroupRoles.participant.name());
 		return sendEmailProjectChanged(participants, changer, project, 
 				pT.translate(KEY_PROJECT_CHANGED_EMAIL_TO_PARTICIPANT_SUBJECT), 
@@ -133,7 +137,7 @@ public class ProjectBrokerMailerImpl implements ProjectBrokerMailer {
 	}
 
 	public MailerResult sendProjectDeletedEmailToParticipants(Identity changer, Project project, Translator pT) {
-		List<Identity> participants = CoreSpringFactory.getImpl(BusinessGroupService.class)
+		List<Identity> participants = businessGroupService
 			.getMembers(project.getProjectGroup(), GroupRoles.participant.name());
 		return sendEmailProjectChanged(participants, changer, project, 
 				pT.translate(KEY_PROJECT_DELETED_EMAIL_TO_PARTICIPANT_SUBJECT), 
@@ -141,7 +145,7 @@ public class ProjectBrokerMailerImpl implements ProjectBrokerMailer {
 	}
 	
 	public MailerResult sendProjectDeletedEmailToManager(Identity changer, Project project, Translator pT) {
-		List<Identity> coaches = CoreSpringFactory.getImpl(BusinessGroupService.class)
+		List<Identity> coaches = businessGroupService
 				.getMembers(project.getProjectGroup(), GroupRoles.coach.name());
 		return sendEmailProjectChanged(coaches, changer, project, 
         pT.translate(KEY_PROJECT_DELETED_EMAIL_TO_PARTICIPANT_SUBJECT), 
@@ -156,8 +160,8 @@ public class ProjectBrokerMailerImpl implements ProjectBrokerMailer {
 			groupKey = accountManagerGroupProperty.getLongValue();
 		} 
 		if (groupKey != null) {
-			BusinessGroup accountManagerGroup = CoreSpringFactory.getImpl(BusinessGroupService.class).loadBusinessGroup(groupKey);
-			List<Identity> participants = CoreSpringFactory.getImpl(BusinessGroupService.class)
+			BusinessGroup accountManagerGroup = businessGroupService.loadBusinessGroup(groupKey);
+			List<Identity> participants = businessGroupService
 					.getMembers(accountManagerGroup, GroupRoles.participant.name());
 			return sendEmailProjectChanged(participants, changer, project, 
 	        pT.translate(KEY_PROJECT_DELETED_EMAIL_TO_PARTICIPANT_SUBJECT), 
@@ -194,9 +198,9 @@ public class ProjectBrokerMailerImpl implements ProjectBrokerMailer {
 		MailTemplate enrolledMailTemplate = createMailTemplate(project, enrolledIdentity, subject, body, locale );
 		MailContext context = new MailContextImpl(project.getProjectBroker(), null, null);
 		MailerResult result = new MailerResult();
-		MailBundle bundle = CoreSpringFactory.getImpl(MailManager.class).makeMailBundle(context, enrolledIdentity, enrolledMailTemplate, null, null, result);
+		MailBundle bundle = mailManager.makeMailBundle(context, enrolledIdentity, enrolledMailTemplate, null, null, result);
 		if(bundle != null) {
-			CoreSpringFactory.getImpl(MailManager.class).sendMessage(bundle);
+			mailManager.sendMessage(bundle);
 		}
 		log.audit("ProjectBroker: sendEmail to identity.name=" + enrolledIdentity.getName() + " , mailerResult.returnCode=" + result.getReturnCode());
 		return result;
@@ -214,8 +218,8 @@ public class ProjectBrokerMailerImpl implements ProjectBrokerMailer {
 		String metaId = UUID.randomUUID().toString().replace("-", "");
 		
 		MailerResult result = new MailerResult();
-		MailBundle[] bundles = CoreSpringFactory.getImpl(MailManager.class).makeMailBundles(context, group, enrolledMailTemplate, null, metaId, result);
-		result.append(CoreSpringFactory.getImpl(MailManager.class).sendMessage(bundles));
+		MailBundle[] bundles = mailManager.makeMailBundles(context, group, enrolledMailTemplate, null, metaId, result);
+		result.append(mailManager.sendMessage(bundles));
 		log.audit("ProjectBroker: sendEmailToGroup: identities=" + identityNames.toString() + " , mailerResult.returnCode=" + result.getReturnCode());
 		return result;
 	}
@@ -230,8 +234,8 @@ public class ProjectBrokerMailerImpl implements ProjectBrokerMailer {
 		}
 		MailContext context = new MailContextImpl(project.getProjectBroker(), null, null);
 		MailerResult result = new MailerResult();
-		MailBundle[] bundles = CoreSpringFactory.getImpl(MailManager.class).makeMailBundles(context, group, enrolledMailTemplate, null, null, result);
-		result.append(CoreSpringFactory.getImpl(MailManager.class).sendMessage(bundles));
+		MailBundle[] bundles = mailManager.makeMailBundles(context, group, enrolledMailTemplate, null, null, result);
+		result.append(mailManager.sendMessage(bundles));
 		log.audit("ProjectBroker: sendEmailToGroup: identities=" + identityNames.toString() + " , mailerResult.returnCode=" + result.getReturnCode());
 		return result;
 	}
diff --git a/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectBrokerManagerImpl.java b/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectBrokerManagerImpl.java
index 6fcc228ab85..2ad221ba314 100644
--- a/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectBrokerManagerImpl.java
+++ b/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectBrokerManagerImpl.java
@@ -35,13 +35,11 @@ import java.util.List;
 import java.util.StringTokenizer;
 
 import org.hibernate.type.StandardBasicTypes;
-import org.hibernate.type.Type;
-import org.olat.basesecurity.BaseSecurityManager;
+import org.olat.basesecurity.BaseSecurity;
 import org.olat.basesecurity.GroupRoles;
 import org.olat.basesecurity.SecurityGroup;
-import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl;
-import org.olat.core.commons.persistence.DBFactory;
+import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.manager.BasicManager;
@@ -82,8 +80,16 @@ import org.springframework.stereotype.Service;
 @Service
 public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBrokerManager {
 	
+	@Autowired
+	private DB dbInstance;
+	@Autowired
+	private BaseSecurity securityManager;
 	@Autowired
 	private ProjectGroupManager projectGroupManager;
+	@Autowired
+	private BusinessGroupService businessGroupService;
+	@Autowired
+	private BusinessGroupRelationDAO businessGroupRelationDao;
 
 	private static final String ATTACHEMENT_DIR_NAME = "projectbroker_attach";
 	private CacheWrapper<String,ProjectBroker> projectCache;
@@ -122,7 +128,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 
 	public ProjectBroker createAndSaveProjectBroker() {
 		ProjectBroker projectBroker = new ProjectBrokerImpl();
-		DBFactory.getInstance().saveObject(projectBroker);
+		dbInstance.saveObject(projectBroker);
 		return projectBroker;
 	}
 
@@ -131,7 +137,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 		final Project project = new ProjectImpl(title, description, projectGroup, getProjectBroker(projectBrokerId));
 		CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync( projectBrokerOres, new SyncerExecutor() {
 			public void execute() {
-				DBFactory.getInstance().saveObject(project);
+				dbInstance.saveObject(project);
 				ProjectBroker projectBroker = getOrLoadProjectBoker(projectBrokerId);
 				if(!projectBroker.getProjects().contains(project)) {
 					projectBroker.getProjects().add(project);
@@ -143,10 +149,8 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 	}
 
 	public int getSelectedPlaces(Project project) {
-		BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class);
-		
-		return bgs.countMembers(project.getProjectGroup(), GroupRoles.participant.name()) +
-		       BaseSecurityManager.getInstance().countIdentitiesOfSecurityGroup(project.getCandidateGroup());
+		return businessGroupService.countMembers(project.getProjectGroup(), GroupRoles.participant.name()) +
+		       securityManager.countIdentitiesOfSecurityGroup(project.getCandidateGroup());
 	}
 
 
@@ -161,7 +165,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 	}
 	
 	public boolean existsProject(Long projectKey) {
-		return DBFactory.getInstance().findObject(ProjectImpl.class, projectKey) != null;
+		return dbInstance.findObject(ProjectImpl.class, projectKey) != null;
 	}
 
 	public boolean enrollProjectParticipant(final Identity identity, final Project project, final ProjectBrokerModuleConfiguration moduleConfig, final int nbrSelectedProjects, final boolean isParticipantInAnyProject) {
@@ -172,19 +176,18 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 			public Boolean execute() {
 				if ( existsProject( project.getKey() ) ) {
 					// For cluster-safe : reload project object here another node might have changed this in the meantime
-					Project reloadedProject = (Project) DBFactory.getInstance().loadObject(project, true);					
+					Project reloadedProject = (Project) dbInstance.loadObject(project, true);					
 					logDebug("enrollProjectParticipant: project.getMaxMembers()=" + reloadedProject.getMaxMembers());
 					logDebug("enrollProjectParticipant: project.getSelectedPlaces()=" + reloadedProject.getSelectedPlaces());
 					if (canBeProjectSelectedBy(identity, reloadedProject, moduleConfig, nbrSelectedProjects, isParticipantInAnyProject) ) {				
 						
 						if (moduleConfig.isAcceptSelectionManually() ) {
-							BaseSecurityManager.getInstance().addIdentityToSecurityGroup(identity, reloadedProject.getCandidateGroup());
+							securityManager.addIdentityToSecurityGroup(identity, reloadedProject.getCandidateGroup());
 							logAudit("ProjectBroker: Add as candidate identity=" + identity + " to project=" + reloadedProject);
 							if (isLogDebugEnabled()) {
 								logDebug("ProjectBroker: Add as candidate reloadedProject=" + reloadedProject + "  CandidateGroup=" + reloadedProject.getCandidateGroup() );
 							}
 						} else {
-							BusinessGroupRelationDAO businessGroupRelationDao = CoreSpringFactory.getImpl(BusinessGroupRelationDAO.class);
 							businessGroupRelationDao.addRole(identity, reloadedProject.getProjectGroup(), GroupRoles.participant.name());
 							logAudit("ProjectBroker: Add as participant identity=" + identity + " to project=" + reloadedProject);
 							if (isLogDebugEnabled()) {
@@ -217,12 +220,11 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 			public Boolean execute() {
 				if ( existsProject( project.getKey() ) ) {
 					// For cluster-safe : reload project object here another node might have changed this in the meantime
-					Project reloadedProject = (Project) DBFactory.getInstance().loadObject(project, true);					
+					Project reloadedProject = (Project) dbInstance.loadObject(project, true);					
 					// User can only cancel enrollment, when state is 'NOT_ASSIGNED'
 					if (canBeCancelEnrollmentBy(identity, project, moduleConfig)) {
-						BusinessGroupRelationDAO businessGroupRelationDao = CoreSpringFactory.getImpl(BusinessGroupRelationDAO.class);
 						businessGroupRelationDao.removeRole(identity, reloadedProject.getProjectGroup(), GroupRoles.participant.name());
-						BaseSecurityManager.getInstance().removeIdentityFromSecurityGroup(identity, reloadedProject.getCandidateGroup());
+						securityManager.removeIdentityFromSecurityGroup(identity, reloadedProject.getCandidateGroup());
 						logAudit("ProjectBroker: Remove (as participant or waitinglist) identity=" + identity + " from project=" + project);
 						if (isLogDebugEnabled()) {
 							logDebug("ProjectBroker: Remove as participant reloadedProject=" + reloadedProject + "  ParticipantGroup=" + reloadedProject.getProjectGroup() + "  CandidateGroup=" + reloadedProject.getCandidateGroup());
@@ -256,7 +258,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 		OLATResourceable projectBrokerOres = OresHelper.createOLATResourceableInstance(this.getClass(),projectBrokerId);
 		CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync( projectBrokerOres, new SyncerExecutor() {
 			public void execute() {
-				Project reloadedProject = (Project) DBFactory.getInstance().loadObject(project, true);
+				Project reloadedProject = (Project) dbInstance.loadObject(project, true);
 				// delete first candidate-group, project-group will be deleted after deleting project
 				SecurityGroup candidateGroup = reloadedProject.getCandidateGroup();
 				if ( (courseEnv != null) && (cNode != null) ) {
@@ -264,9 +266,9 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 					deleteAllDropboxFilesOfProject(reloadedProject, courseEnv, cNode);
 					deleteAllReturnboxFilesOfProject(reloadedProject, courseEnv, cNode);
 				}
-				DBFactory.getInstance().deleteObject(reloadedProject);
+				dbInstance.deleteObject(reloadedProject);
 				logInfo("deleteSecurityGroup(project.getCandidateGroup())=" + candidateGroup.getKey());
-				BaseSecurityManager.getInstance().deleteSecurityGroup(candidateGroup);
+				securityManager.deleteSecurityGroup(candidateGroup);
 				// invalide with removing from cache
 				projectCache.remove(projectBrokerId.toString());
 			}
@@ -282,9 +284,8 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 		int selectedCounter = 0;
 		for (Iterator<Project> iterator = projectList.iterator(); iterator.hasNext();) {
 			Project project = iterator.next();
-			BusinessGroupService businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class);
 			if (businessGroupService.hasRoles(identity, project.getProjectGroup(), GroupRoles.participant.name()) ||
-					BaseSecurityManager.getInstance().isIdentityInSecurityGroup(identity, project.getCandidateGroup()) ) {
+					securityManager.isIdentityInSecurityGroup(identity, project.getCandidateGroup()) ) {
 				selectedCounter++;
 			}
 		}
@@ -304,16 +305,15 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 			return false;
 		}
 		// 2. check number of max project members
-		BusinessGroupService businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class);
 		int projectMembers = businessGroupService.countMembers(project.getProjectGroup(), GroupRoles.participant.name()) +
-		                     BaseSecurityManager.getInstance().countIdentitiesOfSecurityGroup(project.getCandidateGroup());
+		                     securityManager.countIdentitiesOfSecurityGroup(project.getCandidateGroup());
 		if ( (project.getMaxMembers() != Project.MAX_MEMBERS_UNLIMITED) && (projectMembers >= project.getMaxMembers()) ) {
 			logDebug("canBeSelectedBy: return false because projectMembers >= getMaxMembers()");
 			return false;
 		}
 		// 3. number of selected topic per user
 		int nbrOfParticipantsPerTopicValue = moduleConfig.getNbrParticipantsPerTopic();
-		if ( (nbrOfParticipantsPerTopicValue != moduleConfig.NBR_PARTICIPANTS_UNLIMITED) &&
+		if ( (nbrOfParticipantsPerTopicValue != ProjectBrokerModuleConfiguration.NBR_PARTICIPANTS_UNLIMITED) &&
 				 (nbrSelectedProjects >= nbrOfParticipantsPerTopicValue) ) {
 			logDebug("canBeSelectedBy: return false because number of selected topic per user is " + nbrOfParticipantsPerTopicValue);
 			return false;
@@ -364,7 +364,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 					// loop over all identities
 					for (Iterator<Identity> iterator2 = chosenIdentities.iterator(); iterator2.hasNext();) {
 						Identity identity = iterator2.next();
-						BaseSecurityManager.getInstance().removeIdentityFromSecurityGroup(identity, project.getCandidateGroup());
+						securityManager.removeIdentityFromSecurityGroup(identity, project.getCandidateGroup());
 						logAudit("ProjectBroker: AutoSignOut: identity=" + identity + " from project=" + project);
 					}
 				}
@@ -380,7 +380,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 				if (project.getState().equals(Project.STATE_ASSIGNED)) {
 					return Project.STATE_ASSIGNED_ACCOUNT_MANAGER;
 				} else {
-					if (BaseSecurityManager.getInstance().countIdentitiesOfSecurityGroup(project.getCandidateGroup()) > 0) {
+					if (securityManager.countIdentitiesOfSecurityGroup(project.getCandidateGroup()) > 0) {
 						return Project.STATE_NOT_ASSIGNED_ACCOUNT_MANAGER;
 					} else {
 						return Project.STATE_NOT_ASSIGNED_ACCOUNT_MANAGER_NO_CANDIDATE;
@@ -428,8 +428,8 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 		}
 		logDebug("All projects are deleted for ProjectBroker=" + projectBroker);
 		projectGroupManager.deleteAccountManagerGroup(courseEnvironment.getCoursePropertyManager(), courseNode);
-		ProjectBroker reloadedProjectBroker = (ProjectBroker) DBFactory.getInstance().loadObject(projectBroker, true);		
-		DBFactory.getInstance().deleteObject(reloadedProjectBroker);
+		ProjectBroker reloadedProjectBroker = (ProjectBroker) dbInstance.loadObject(projectBroker, true);		
+		dbInstance.deleteObject(reloadedProjectBroker);
 		// invalide with removing from cache
 		projectCache.remove(projectBrokerId.toString());
 		logAudit("ProjectBroker: Deleted ProjectBroker=" + projectBroker);
@@ -518,7 +518,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 			sb.append("select distinct project from ").append(ProjectImpl.class.getName()).append(" as project ")
 			  .append(" where project.projectBroker.key=:projectBrokerKey");
 
-			List<Project> projectList = DBFactory.getInstance().getCurrentEntityManager().createQuery(sb.toString(), Project.class)
+			List<Project> projectList = dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Project.class)
 					.setParameter("projectBrokerKey", projectBrokerId)
 					.getResultList();
 			projectBroker = getProjectBroker(projectBrokerId);
@@ -529,7 +529,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 	}
 
 	public ProjectBroker getProjectBroker(Long projectBrokerId) {
-		return (ProjectBroker) DBFactory.getInstance().loadObject(ProjectBrokerImpl.class, projectBrokerId);
+		return (ProjectBroker) dbInstance.loadObject(ProjectBrokerImpl.class, projectBrokerId);
 	}
 
 	private boolean isEnrollmentDateOk(Project project, ProjectBrokerModuleConfiguration moduleConfig) {
@@ -561,7 +561,6 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 	 * @return
 	 */
 	public boolean isParticipantInAnyProject(Identity identity, List<Project> projectList) {
-		BusinessGroupService businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class);
 		for (Iterator<Project> iterator = projectList.iterator(); iterator.hasNext();) {
 			Project project = iterator.next();
 			if (businessGroupService.hasRoles(identity, project.getProjectGroup(), GroupRoles.participant.name()) ) {
@@ -573,7 +572,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 
 	@SuppressWarnings("unchecked")
 	public List<Project> getProjectsWith(BusinessGroup group) {
-		List<Project> projectList = DBFactory.getInstance().find(
+		List<Project> projectList = dbInstance.find(
 				"select project from org.olat.course.nodes.projectbroker.datamodel.ProjectImpl as project" +
 				" where project.projectGroup.key = ?", group.getKey(),	StandardBasicTypes.LONG);
 		return projectList;
@@ -586,7 +585,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 		CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync( projectBrokerOres, new SyncerExecutor() {
 			public void execute() {
 				// For cluster-safe : reload project object here another node might have changed this in the meantime
-				Project reloadedProject = (Project) DBFactory.getInstance().loadObject(project, true);		
+				Project reloadedProject = (Project) dbInstance.loadObject(project, true);		
 				reloadedProject.setState(state);
 				updateProjectAndInvalidateCache(reloadedProject);
 			}
@@ -609,12 +608,14 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 	}
 
 	public boolean existProjectName(Long projectBrokerId, String newProjectTitle) {
-		List<Project> projectList = DBFactory.getInstance().find(
-				"select project from org.olat.course.nodes.projectbroker.datamodel.ProjectImpl as project" +
-				" where project.projectBroker = ? and project.title = ?", 
-				new Object[] { projectBrokerId, newProjectTitle }, new Type[] { StandardBasicTypes.LONG, StandardBasicTypes.STRING });
-		logDebug("existProjectName projectList.size=" + projectList.size());
-		return !projectList.isEmpty();
+		StringBuilder sb = new StringBuilder();
+		sb.append("select count(project.key) from ").append(ProjectImpl.class.getName()).append(" as project")
+		  .append(" where project.projectBroker.key=:projectBrokerId and project.title=:title");
+		
+		Number count = dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Number.class)
+			.setParameter("projectBrokerId", projectBrokerId).setParameter("title", newProjectTitle)
+			.getSingleResult();
+		return count == null ? false : count.intValue() > 0;
 	}
 
 	@Override
@@ -622,7 +623,6 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 		List<Project> myProjects = new ArrayList<Project>();
 		List<Project> allProjects = getProjectListBy(projectBrokerId);
 		//TODO: for better performance should be done with sql query instead of a loop
-		BusinessGroupService businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class);
 		for (Iterator<Project> iterator = allProjects.iterator(); iterator.hasNext();) {
 			Project project = iterator.next();
 			if (businessGroupService.hasRoles(identity, project.getProjectGroup(), GroupRoles.participant.name()) ) {
@@ -634,7 +634,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 
 	@Override
 	public Project getProject(Long resourceableId) {
-		return (Project)DBFactory.getInstance().findObject(ProjectImpl.class, resourceableId);
+		return (Project)dbInstance.findObject(ProjectImpl.class, resourceableId);
 	}
 
 	@Override
@@ -644,7 +644,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 		//TODO: for better performance should be done with sql query instead of a loop
 		for (Iterator<Project> iterator = allProjects.iterator(); iterator.hasNext();) {
 			Project project = iterator.next();
-			if (CoreSpringFactory.getImpl(BusinessGroupService.class)
+			if (businessGroupService
 					.hasRoles(identity, project.getProjectGroup(), GroupRoles.coach.name())) {
 				myProjects.add(project);
 			}
@@ -655,7 +655,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 	private void updateProjectAndInvalidateCache(final Project project) {
 		// avoid hibernate exception : object with same identifier already exist in session.
 		// reload object from db, because project is a detached object but could be already in hibernate session
-		Project reloadedProject = (Project) DBFactory.getInstance().loadObject(project, true);
+		Project reloadedProject = (Project) dbInstance.loadObject(project, true);
 		// set all value on reloadedProject with values from updated project
 		reloadedProject.setTitle(project.getTitle());
 		reloadedProject.setState(project.getState());
@@ -669,7 +669,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro
 			reloadedProject.setCustomFieldValue(index, project.getCustomFieldValue(index));
 		}
 		reloadedProject.setAttachedFileName(project.getAttachmentFileName());
-		DBFactory.getInstance().updateObject(reloadedProject);
+		dbInstance.updateObject(reloadedProject);
 		// invalide with removing from cache
 		projectCache.remove(project.getProjectBroker().getKey().toString());
 	}
diff --git a/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectGroupManagerImpl.java b/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectGroupManagerImpl.java
index f0fee56d741..0746611c2ca 100644
--- a/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectGroupManagerImpl.java
+++ b/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectGroupManagerImpl.java
@@ -29,11 +29,10 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
-import org.olat.basesecurity.BaseSecurityManager;
+import org.olat.basesecurity.BaseSecurity;
 import org.olat.basesecurity.GroupRoles;
 import org.olat.basesecurity.SecurityGroup;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.persistence.DBFactory;
+import org.olat.core.commons.persistence.DB;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.id.Identity;
 import org.olat.core.manager.BasicManager;
@@ -67,8 +66,16 @@ import org.springframework.stereotype.Service;
 @Service
 public class ProjectGroupManagerImpl extends BasicManager implements ProjectGroupManager {
 	
+	@Autowired
+	private DB dbInstance;
+	@Autowired
+	private BaseSecurity securityManager;
+	@Autowired
+	private RepositoryManager repositoryManager;
 	@Autowired
 	private ProjectBrokerManager projectBrokerManager;
+	@Autowired
+	private BusinessGroupService businessGroupService;
 	
 	
 	//////////////////////
@@ -85,7 +92,7 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
 		} 
     logDebug("groupKey=" + groupKey);
     if (groupKey != null) {
-			accountManagerGroup = CoreSpringFactory.getImpl(BusinessGroupService.class).loadBusinessGroup(groupKey);
+			accountManagerGroup = businessGroupService.loadBusinessGroup(groupKey);
 			logDebug("load businessgroup=" + accountManagerGroup);
 			if (accountManagerGroup != null) {
 				return accountManagerGroup;
@@ -98,8 +105,7 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
 			}
     } else {
 			logDebug("No group for project-broker exist => create a new one");
-			BusinessGroupService businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class);
-			RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntry(cpm.getCourseResource(), false);
+			RepositoryEntry re = repositoryManager.lookupRepositoryEntry(cpm.getCourseResource(), false);
 			accountManagerGroup = businessGroupService.createBusinessGroup(identity, groupName, groupDescription, -1, -1, false, false, re);
 			int i = 2;
 			while (accountManagerGroup == null) {
@@ -125,7 +131,7 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
   	Property accountManagerGroupProperty = cpm.findCourseNodeProperty(courseNode, null, null, ProjectBrokerCourseNode.CONF_ACCOUNTMANAGER_GROUP_KEY);
   	if (accountManagerGroupProperty != null) {
   	 	Long groupKey = accountManagerGroupProperty.getLongValue();
-  		BusinessGroup accountManagerGroup = CoreSpringFactory.getImpl(BusinessGroupService.class).loadBusinessGroup(groupKey);
+  		BusinessGroup accountManagerGroup = businessGroupService.loadBusinessGroup(groupKey);
   		if (accountManagerGroup != null) {
   			return isAccountManager(identity,  accountManagerGroup);
   		}
@@ -139,9 +145,9 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
   	if (accountManagerGroupProperty != null) {
   		Long groupKey = accountManagerGroupProperty.getLongValue();
   		if (groupKey != null) {
-				BusinessGroup accountManagerGroup = CoreSpringFactory.getImpl(BusinessGroupService.class).loadBusinessGroup(groupKey);
+				BusinessGroup accountManagerGroup = businessGroupService.loadBusinessGroup(groupKey);
 				if (accountManagerGroup != null) {
-					BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class);
+					BusinessGroupService bgs = businessGroupService;
 					bgs.deleteBusinessGroup(accountManagerGroup);
 					logAudit("ProjectBroker: Deleted accountManagerGroup=" + accountManagerGroup);
 				} else {
@@ -159,7 +165,7 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
 	public BusinessGroup updateAccountManagerGroupName(Identity ureqIdentity, String groupName, String groupDescription, BusinessGroup accountManagerGroup) {
 		// group could have been deleted, see FXOLAT-295
 		if (accountManagerGroup != null){
-			BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class);
+			BusinessGroupService bgs = businessGroupService;
 			BusinessGroup reloadedBusinessGroup = bgs.loadBusinessGroup(accountManagerGroup);
 			return bgs.updateBusinessGroup(ureqIdentity, reloadedBusinessGroup, groupName, groupDescription,
 					reloadedBusinessGroup.getExternalId(), reloadedBusinessGroup.getManagedFlagsString(),
@@ -175,9 +181,8 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
 	public BusinessGroup createProjectGroupFor(Long projectBrokerId, Identity identity, String groupName, String groupDescription, Long courseId) {
 		//List<Project> projects = ProjectBrokerManagerFactory.getProjectBrokerManager().getProjectListBy(projectBrokerId);
 		
-		BusinessGroupService businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class);
 		OLATResource resource = CourseFactory.loadCourse(courseId).getCourseEnvironment().getCourseGroupManager().getCourseResource();
-		RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntry(resource, false);
+		RepositoryEntry re = repositoryManager.lookupRepositoryEntry(resource, false);
 
 		//BGContext context = createGroupContext(CourseFactory.loadCourse(courseId));
 		logDebug("createProjectGroupFor groupName=" + groupName);
@@ -195,7 +200,7 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
 	}
 	
 	public void deleteProjectGroupFor(Project project) {
-		BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class);
+		BusinessGroupService bgs = businessGroupService;
 		bgs.deleteBusinessGroup(project.getProjectGroup());
 	}
 	
@@ -206,7 +211,7 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
 	 */
 	@Override
 	public BusinessGroup changeProjectGroupName(Identity ureqIdentity, BusinessGroup projectGroup, String groupName, String groupDescription, OLATResource courseResource) {
-		BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class);
+		BusinessGroupService bgs = businessGroupService;
 		BusinessGroup reloadedBusinessGroup = bgs.loadBusinessGroup(projectGroup);
 		return bgs.updateBusinessGroup(ureqIdentity, reloadedBusinessGroup, groupName, groupDescription,
 				reloadedBusinessGroup.getExternalId(), reloadedBusinessGroup.getManagedFlagsString(),
@@ -220,8 +225,8 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
 			public List<Identity> execute() {
 				List<Identity> addedIdentities = new ArrayList<Identity>();
 				for (Identity identity : addIdentities) {
-					if (!BaseSecurityManager.getInstance().isIdentityInSecurityGroup(identity, project.getCandidateGroup()) ) {
-						BaseSecurityManager.getInstance().addIdentityToSecurityGroup(identity, project.getCandidateGroup());
+					if (!securityManager.isIdentityInSecurityGroup(identity, project.getCandidateGroup()) ) {
+						securityManager.addIdentityToSecurityGroup(identity, project.getCandidateGroup());
 						addedIdentities.add(identity);
 						logAudit("ProjectBroker: Add user as candidate, identity=" + identity);
 					}
@@ -239,9 +244,9 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
 	//TODO gsync
 		CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(project.getProjectGroup(), new SyncerCallback<Boolean>(){
 			public Boolean execute() {
-				Project reloadedProject = (Project) DBFactory.getInstance().loadObject(project, true);
+				Project reloadedProject = (Project) dbInstance.loadObject(project, true);
 				for (Identity identity : addIdentities) {
-					BaseSecurityManager.getInstance().removeIdentityFromSecurityGroup(identity, reloadedProject.getCandidateGroup());
+					securityManager.removeIdentityFromSecurityGroup(identity, reloadedProject.getCandidateGroup());
 					logAudit("ProjectBroker: Remove user as candidate, identity=" + identity);
 					// fireEvents ?
 				}
@@ -253,9 +258,9 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
 
 	public BusinessGroupAddResponse acceptCandidates(final List<Identity> identities, final Project project, final Identity actionIdentity, final boolean autoSignOut, final boolean isAcceptSelectionManually) {
 		Codepoint.codepoint(ProjectBrokerManagerImpl.class, "beforeDoInSync");
-		final Project reloadedProject = (Project) DBFactory.getInstance().loadObject(project, true);
+		final Project reloadedProject = (Project) dbInstance.loadObject(project, true);
 		final BusinessGroupAddResponse response = new BusinessGroupAddResponse();
-		final BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class);
+		final BusinessGroupService bgs = businessGroupService;
 		BusinessGroupAddResponse state = bgs.addParticipants(actionIdentity, null, identities, reloadedProject.getProjectGroup(), null);
 		response.getAddedIdentities().addAll(state.getAddedIdentities());
 		response.getIdentitiesAlreadyInGroup().addAll(state.getAddedIdentities());
@@ -264,7 +269,7 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
 			public Boolean execute() {
 				for (final Identity identity : identities) {
 					if (!bgs.hasRoles(identity, reloadedProject.getProjectGroup(), GroupRoles.participant.name())) {
-						BaseSecurityManager.getInstance().removeIdentityFromSecurityGroup(identity, reloadedProject.getCandidateGroup());
+						securityManager.removeIdentityFromSecurityGroup(identity, reloadedProject.getCandidateGroup());
 						logAudit("ProjectBroker: Accept candidate, identity=" + identity + " project=" + reloadedProject);
 					}		
 				}
@@ -288,13 +293,13 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
 	@Override
 	public void sendGroupChangeEvent(Project project, Long courseResourceableId, Identity identity) {
 		ICourse course = CourseFactory.loadCourse(courseResourceableId);
-		RepositoryEntry ores = RepositoryManager.getInstance().lookupRepositoryEntry(course, true);
+		RepositoryEntry ores = repositoryManager.lookupRepositoryEntry(course, true);
 		MultiUserEvent modifiedEvent = new BusinessGroupModifiedEvent(BusinessGroupModifiedEvent.IDENTITY_ADDED_EVENT, project.getProjectGroup(), identity);
 		CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(modifiedEvent, ores);
 	}
 
 	public boolean isProjectManager(Identity identity, Project project) {
-		return CoreSpringFactory.getImpl(BusinessGroupService.class).hasRoles(identity, project.getProjectGroup(), GroupRoles.coach.name());
+		return businessGroupService.hasRoles(identity, project.getProjectGroup(), GroupRoles.coach.name());
 	}
 
 	public boolean isProjectManagerOrAdministrator(UserRequest ureq, CourseEnvironment courseEnv, Project project) {	
@@ -304,16 +309,16 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
 	}
 	
 	public boolean isProjectParticipant(Identity identity, Project project) {
-		return CoreSpringFactory.getImpl(BusinessGroupService.class).hasRoles(identity, project.getProjectGroup(), GroupRoles.participant.name());
+		return businessGroupService.hasRoles(identity, project.getProjectGroup(), GroupRoles.participant.name());
 	}
 
 	public boolean isProjectCandidate(Identity identity, Project project) {
-		return BaseSecurityManager.getInstance().isIdentityInSecurityGroup(identity, project.getCandidateGroup());
+		return securityManager.isIdentityInSecurityGroup(identity, project.getCandidateGroup());
 	}
 
 	@Override
 	public BusinessGroup setProjectGroupMaxMembers(Identity ureqIdentity, BusinessGroup projectGroup, int maxMembers ) {
-  	 BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class);
+  	 BusinessGroupService bgs = businessGroupService;
   	 BusinessGroup reloadedBusinessGroup = bgs.loadBusinessGroup(projectGroup);
   	 logDebug("ProjectGroup.name=" + reloadedBusinessGroup.getName() + " setMaxParticipants=" + maxMembers);
   	 return bgs.updateBusinessGroup(ureqIdentity, reloadedBusinessGroup, reloadedBusinessGroup.getName(), 
@@ -329,7 +334,6 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
 		if (businessGroup == null) {
 			return false;
 		}
-		BusinessGroupService businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class);
 		return businessGroupService.hasRoles(identity, businessGroup, GroupRoles.participant.name())
 				   || businessGroupService.hasRoles(identity, businessGroup, GroupRoles.coach.name());
 	}
@@ -340,7 +344,7 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
 		List<Project> projectList = projectBrokerManager.getProjectListBy(projectBrokerId);
 		for (Iterator<Project> iterator = projectList.iterator(); iterator.hasNext();) {
 			Project project = iterator.next();
-			List<Identity> candidates = BaseSecurityManager.getInstance().getIdentitiesOfSecurityGroup(project.getCandidateGroup());
+			List<Identity> candidates = securityManager.getIdentitiesOfSecurityGroup(project.getCandidateGroup());
 			if (!candidates.isEmpty()) {
 				logAudit("ProjectBroker: Accept ALL candidates, project=" + project);
 				acceptCandidates(candidates, project, actionIdentity, autoSignOut, isAcceptSelectionManually);
@@ -354,7 +358,7 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
 		List<Project> projectList = projectBrokerManager.getProjectListBy(projectBrokerId);
 		for (Iterator<Project> iterator = projectList.iterator(); iterator.hasNext();) {
 			Project project = iterator.next();
-			List<Identity> candidates = BaseSecurityManager.getInstance().getIdentitiesOfSecurityGroup(project.getCandidateGroup());
+			List<Identity> candidates = securityManager.getIdentitiesOfSecurityGroup(project.getCandidateGroup());
 			if (!candidates.isEmpty()) {
 				return true;
 			}
@@ -364,7 +368,7 @@ public class ProjectGroupManagerImpl extends BasicManager implements ProjectGrou
 
 	@Override
 	public boolean isCandidateListEmpty(SecurityGroup candidateGroup) {
-		List<Identity> candidates = BaseSecurityManager.getInstance().getIdentitiesOfSecurityGroup(candidateGroup);
+		List<Identity> candidates = securityManager.getIdentitiesOfSecurityGroup(candidateGroup);
 		return candidates.isEmpty();
 	}
 
-- 
GitLab