From 10048a970ee689f2cad3bace9c2cdb4ed5d4dc49 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Fri, 2 Nov 2012 10:00:58 +0100
Subject: [PATCH] OO-398: copy the groups with the course copy

---
 .../org/olat/course/condition/Condition.java  |  5 ++--
 .../interpreter/ConditionInterpreter.java     |  4 +--
 .../olat/course/nodes/GenericCourseNode.java  |  4 +--
 .../repository/CreateNewCourseController.java | 28 ++++++++++++++++++-
 .../repository/ImportCourseController.java    |  7 +++--
 .../olat/ims/cp/ui/CreateNewCPController.java |  5 ++++
 .../editor/AddNewQTIDocumentController.java   |  5 ++++
 .../glossary/CreateNewGlossaryController.java |  5 ++++
 .../CreateNewSharedFolderController.java      |  5 ++++
 .../webFeed/ui/blog/CreateBlogController.java |  7 ++++-
 .../ui/podcast/CreatePodcastController.java   |  7 ++++-
 .../CreateStructureMapTemplateController.java |  6 +++-
 .../AddFileResourceController.java            |  7 ++++-
 .../controllers/IAddController.java           |  7 +++++
 .../controllers/RepositoryCopyController.java |  1 +
 .../handlers/WikiCreateController.java        |  5 ++++
 16 files changed, 93 insertions(+), 15 deletions(-)

diff --git a/src/main/java/org/olat/course/condition/Condition.java b/src/main/java/org/olat/course/condition/Condition.java
index 6808de4dd7b..30f0c3f511c 100644
--- a/src/main/java/org/olat/course/condition/Condition.java
+++ b/src/main/java/org/olat/course/condition/Condition.java
@@ -38,7 +38,6 @@ import org.olat.core.util.StringHelper;
 public class Condition implements Serializable, Cloneable {
 	transient private String conditionId = null;
 	private String condition = null;
-	private String conditionUpgraded = null;
 	private boolean expertMode = false;
 
 	private String easyModeBeginDate;
@@ -95,11 +94,11 @@ public class Condition implements Serializable, Cloneable {
 	}
 
 	public String getConditionUpgraded() {
-		return conditionUpgraded;
+		return null;
 	}
 
 	public void setConditionUpgraded(String conditionUpgraded) {
-		this.conditionUpgraded = conditionUpgraded;
+		//only for compatibility reason, don't delete these methods
 	}
 
 	/**
diff --git a/src/main/java/org/olat/course/condition/interpreter/ConditionInterpreter.java b/src/main/java/org/olat/course/condition/interpreter/ConditionInterpreter.java
index 320750a2e6d..69fb769a1fb 100644
--- a/src/main/java/org/olat/course/condition/interpreter/ConditionInterpreter.java
+++ b/src/main/java/org/olat/course/condition/interpreter/ConditionInterpreter.java
@@ -272,9 +272,7 @@ public class ConditionInterpreter {
 	 * @return True if evaluation successfull.
 	 */
 	public boolean evaluateCondition(Condition c) {
-		if(c.isExpertMode() && StringHelper.containsNonWhitespace(c.getConditionUpgraded())) {
-			return evaluateCondition(c.getConditionUpgraded());
-		} else if (!c.isExpertMode() && (c.getAttributeConditions() == null || c.getAttributeConditions().isEmpty())) {
+		if (!c.isExpertMode() && (c.getAttributeConditions() == null || c.getAttributeConditions().isEmpty())) {
 			//experimental optimized evaluation of the easy conditions
 			//return evaluateEasyCondition(c);
 		}
diff --git a/src/main/java/org/olat/course/nodes/GenericCourseNode.java b/src/main/java/org/olat/course/nodes/GenericCourseNode.java
index 896afec2968..c418b5dcb06 100644
--- a/src/main/java/org/olat/course/nodes/GenericCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/GenericCourseNode.java
@@ -439,7 +439,7 @@ public abstract class GenericCourseNode extends GenericNode implements CourseNod
 				String processExpression = convertExpressionNameToKey(expression, envMapper);
 				processExpression = convertExpressionKeyToKey(expression, envMapper);
 				if(!expression.equals(processExpression)) {
-					condition.setConditionUpgraded(processExpression);
+					condition.setConditionExpression(processExpression);
 				}
 			}
 		}
@@ -483,7 +483,7 @@ public abstract class GenericCourseNode extends GenericNode implements CourseNod
 		if(backwardsCompatible) {
 			condition.setEasyModeGroupAreaAccessIds(null);
 			condition.setEasyModeGroupAccessIds(null);
-			condition.setConditionUpgraded(null);
+			//condition.setConditionUpgraded(null);
 		}
 	}
 	
diff --git a/src/main/java/org/olat/course/repository/CreateNewCourseController.java b/src/main/java/org/olat/course/repository/CreateNewCourseController.java
index bddafe838a9..509adbbc6e9 100644
--- a/src/main/java/org/olat/course/repository/CreateNewCourseController.java
+++ b/src/main/java/org/olat/course/repository/CreateNewCourseController.java
@@ -25,6 +25,9 @@
 
 package org.olat.course.repository;
 
+import java.io.File;
+import java.util.UUID;
+
 import org.olat.basesecurity.BaseSecurity;
 import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.basesecurity.Constants;
@@ -34,10 +37,14 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
+import org.olat.core.util.CodeHelper;
 import org.olat.core.util.Formatter;
 import org.olat.course.CourseFactory;
 import org.olat.course.CourseModule;
 import org.olat.course.ICourse;
+import org.olat.course.export.CourseEnvironmentMapper;
+import org.olat.course.groupsandrights.CourseGroupManager;
+import org.olat.course.groupsandrights.PersistingCourseGroupManager;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.tree.CourseEditorTreeNode;
 import org.olat.repository.RepositoryEntry;
@@ -144,7 +151,26 @@ public class CreateNewCourseController extends BasicController implements IAddCo
 		CourseFactory.saveCourse(course.getResourceableId());
 		CourseFactory.closeCourseEditSession(course.getResourceableId(), true);
 	}
-	
+
+	@Override
+	public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) {
+		ICourse sourceCourse = CourseFactory.loadCourse(sourceEntry.getOlatResource().getResourceableId());
+		CourseGroupManager sourceCgm = sourceCourse.getCourseEnvironment().getCourseGroupManager();
+		CourseEnvironmentMapper env = PersistingCourseGroupManager.getInstance(sourceCourse).getBusinessGroupEnvironment();
+		
+		File fExportDir = new File(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString());
+		fExportDir.mkdirs();
+		sourceCgm.exportCourseBusinessGroups(fExportDir, env, false);
+
+		course = CourseFactory.loadCourse(newEntry.getOlatResource().getResourceableId());
+		CourseGroupManager cgm = course.getCourseEnvironment().getCourseGroupManager();
+		// import groups
+		CourseEnvironmentMapper envMapper = cgm.importCourseBusinessGroups(fExportDir);
+		//upgrade to the current version of the course
+		course = CourseFactory.loadCourse(cgm.getCourseResource());
+		course.postImport(envMapper);
+	}
+
 	/**
 	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
 	 */
diff --git a/src/main/java/org/olat/course/repository/ImportCourseController.java b/src/main/java/org/olat/course/repository/ImportCourseController.java
index 02bd32174ed..da68f12b1b7 100644
--- a/src/main/java/org/olat/course/repository/ImportCourseController.java
+++ b/src/main/java/org/olat/course/repository/ImportCourseController.java
@@ -35,7 +35,6 @@ import org.olat.basesecurity.BaseSecurity;
 import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.basesecurity.Constants;
 import org.olat.commons.file.filechooser.FileChooserController;
-import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.panel.Panel;
@@ -46,7 +45,6 @@ import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.util.FileUtils;
 import org.olat.core.util.Formatter;
 import org.olat.core.util.vfs.LocalFileImpl;
-import org.olat.core.util.vfs.LocalImpl;
 import org.olat.core.util.vfs.QuotaManager;
 import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.core.util.vfs.filters.VFSItemFileTypeFilter;
@@ -161,6 +159,11 @@ public class ImportCourseController extends BasicController implements IAddContr
 		CourseFactory.saveCourse(course.getResourceableId());
 		CourseFactory.closeCourseEditSession(course.getResourceableId(),true);
 	}
+	
+	@Override
+	public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) {
+		//
+	}
 
 	/**
 	 * @see org.olat.repository.controllers.IAddController#transactionAborted()
diff --git a/src/main/java/org/olat/ims/cp/ui/CreateNewCPController.java b/src/main/java/org/olat/ims/cp/ui/CreateNewCPController.java
index 0344aafe893..cd936263650 100644
--- a/src/main/java/org/olat/ims/cp/ui/CreateNewCPController.java
+++ b/src/main/java/org/olat/ims/cp/ui/CreateNewCPController.java
@@ -89,6 +89,11 @@ public class CreateNewCPController extends BasicController implements IAddContro
 		secMgr.createAndPersistPolicy(re.getOwnerGroup(), Constants.PERMISSION_ADMIN, re.getOlatResource());
 	}
 
+	@Override
+	public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) {
+		//
+	}
+
 	public void transactionAborted() {
 		// Don't do nothing!
 	}
diff --git a/src/main/java/org/olat/ims/qti/editor/AddNewQTIDocumentController.java b/src/main/java/org/olat/ims/qti/editor/AddNewQTIDocumentController.java
index 8dc6b76f7bf..dfc1d37ba28 100644
--- a/src/main/java/org/olat/ims/qti/editor/AddNewQTIDocumentController.java
+++ b/src/main/java/org/olat/ims/qti/editor/AddNewQTIDocumentController.java
@@ -129,6 +129,11 @@ public class AddNewQTIDocumentController extends DefaultController implements IA
 		tmpPackage.cleanupTmpPackageDir();
 	}
 
+	@Override
+	public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) {
+		//
+	}
+
 	/**
 	 * @see org.olat.repository.controllers.IAddController#transactionAborted()
 	 */
diff --git a/src/main/java/org/olat/modules/glossary/CreateNewGlossaryController.java b/src/main/java/org/olat/modules/glossary/CreateNewGlossaryController.java
index ed95d27c6e1..686cc39e3d6 100644
--- a/src/main/java/org/olat/modules/glossary/CreateNewGlossaryController.java
+++ b/src/main/java/org/olat/modules/glossary/CreateNewGlossaryController.java
@@ -105,6 +105,11 @@ public class CreateNewGlossaryController extends DefaultController implements IA
 		return;
 	} // nothing to do here.
 
+	@Override
+	public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) {
+		//
+	}
+
 	/**
 	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
 	 */
diff --git a/src/main/java/org/olat/modules/sharedfolder/CreateNewSharedFolderController.java b/src/main/java/org/olat/modules/sharedfolder/CreateNewSharedFolderController.java
index 7246a6da5e8..0c76ad279d3 100644
--- a/src/main/java/org/olat/modules/sharedfolder/CreateNewSharedFolderController.java
+++ b/src/main/java/org/olat/modules/sharedfolder/CreateNewSharedFolderController.java
@@ -100,6 +100,11 @@ public class CreateNewSharedFolderController extends DefaultController implement
 		return;
 	} // nothing to do here.
 
+	@Override
+	public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) {
+		//
+	}
+
 	/**
 	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
 	 */
diff --git a/src/main/java/org/olat/modules/webFeed/ui/blog/CreateBlogController.java b/src/main/java/org/olat/modules/webFeed/ui/blog/CreateBlogController.java
index 6670ebb34b0..b4b1a0dab84 100644
--- a/src/main/java/org/olat/modules/webFeed/ui/blog/CreateBlogController.java
+++ b/src/main/java/org/olat/modules/webFeed/ui/blog/CreateBlogController.java
@@ -93,10 +93,15 @@ public class CreateBlogController extends DefaultController implements IAddContr
 	/**
 	 * @see org.olat.repository.controllers.IAddController#repositoryEntryCreated(org.olat.repository.RepositoryEntry)
 	 */
-	@SuppressWarnings("unused")
+	@Override
 	public void repositoryEntryCreated(RepositoryEntry re) {
 	// Nothing to do here, but thanks for asking.
 	}
+	
+	@Override
+	public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) {
+		//
+	}
 
 	/**
 	 * @see org.olat.repository.controllers.IAddController#transactionAborted()
diff --git a/src/main/java/org/olat/modules/webFeed/ui/podcast/CreatePodcastController.java b/src/main/java/org/olat/modules/webFeed/ui/podcast/CreatePodcastController.java
index 0d34690fe22..f281c263731 100644
--- a/src/main/java/org/olat/modules/webFeed/ui/podcast/CreatePodcastController.java
+++ b/src/main/java/org/olat/modules/webFeed/ui/podcast/CreatePodcastController.java
@@ -93,10 +93,15 @@ public class CreatePodcastController extends DefaultController implements IAddCo
 	/**
 	 * @see org.olat.repository.controllers.IAddController#repositoryEntryCreated(org.olat.repository.RepositoryEntry)
 	 */
-	@SuppressWarnings("unused")
+	@Override
 	public void repositoryEntryCreated(RepositoryEntry re) {
 	// Nothing to do here, but thanks for asking.
 	}
+	
+	@Override
+	public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) {
+		//
+	}
 
 	/**
 	 * @see org.olat.repository.controllers.IAddController#transactionAborted()
diff --git a/src/main/java/org/olat/portfolio/ui/CreateStructureMapTemplateController.java b/src/main/java/org/olat/portfolio/ui/CreateStructureMapTemplateController.java
index 4e71be74813..987a8606eef 100644
--- a/src/main/java/org/olat/portfolio/ui/CreateStructureMapTemplateController.java
+++ b/src/main/java/org/olat/portfolio/ui/CreateStructureMapTemplateController.java
@@ -85,7 +85,6 @@ public class CreateStructureMapTemplateController extends BasicController implem
 	 *      org.olat.core.gui.control.Event)
 	 */
 	@Override
-	@SuppressWarnings("unused")
 	protected void event(UserRequest ureq, Component source, Event event) {
 		// Nothing to catch
 	}
@@ -111,6 +110,11 @@ public class CreateStructureMapTemplateController extends BasicController implem
 			ePFMgr.createAndPersistPortfolioPage(mapTemp, title, description);
 		}
 	}
+	
+	@Override
+	public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) {
+		//
+	}
 
 	/**
 	 * @see org.olat.repository.controllers.IAddController#transactionAborted()
diff --git a/src/main/java/org/olat/repository/controllers/AddFileResourceController.java b/src/main/java/org/olat/repository/controllers/AddFileResourceController.java
index ecbef0f6400..a091c8aefc3 100644
--- a/src/main/java/org/olat/repository/controllers/AddFileResourceController.java
+++ b/src/main/java/org/olat/repository/controllers/AddFileResourceController.java
@@ -261,7 +261,12 @@ public class AddFileResourceController extends BasicController implements IAddCo
 		// nothing to do here.
 		return;
 	}
-	
+
+	@Override
+	public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) {
+		// nothing to do here.
+	}
+
 	/**
 	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
 	 */
diff --git a/src/main/java/org/olat/repository/controllers/IAddController.java b/src/main/java/org/olat/repository/controllers/IAddController.java
index 543fd8829bb..8163b3eccfa 100644
--- a/src/main/java/org/olat/repository/controllers/IAddController.java
+++ b/src/main/java/org/olat/repository/controllers/IAddController.java
@@ -61,6 +61,13 @@ public interface IAddController extends Disposable {
 	 */
 	public void repositoryEntryCreated(RepositoryEntry re);
 	
+	/**
+	 * Called only if the repository entry is copied
+	 * @param sourceEntry The source of the copy, the original
+	 * @param newEntry The new repository entry
+	 */
+	public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry);
+	
 	/**
 	 * Called if the repository aborts the transaction. Do any cleanup work.
 	 */
diff --git a/src/main/java/org/olat/repository/controllers/RepositoryCopyController.java b/src/main/java/org/olat/repository/controllers/RepositoryCopyController.java
index 53b0dc4bc87..d21ea17b605 100644
--- a/src/main/java/org/olat/repository/controllers/RepositoryCopyController.java
+++ b/src/main/java/org/olat/repository/controllers/RepositoryCopyController.java
@@ -145,6 +145,7 @@ public class RepositoryCopyController extends BasicController {
 			RepositoryHandler typeToCopy = RepositoryHandlerFactory.getInstance().getRepositoryHandler(sourceEntry);			
 			IAddController addController = typeToCopy.createAddController(null, null, ureq, getWindowControl());
 			addController.repositoryEntryCreated(newEntry);
+			addController.repositoryEntryCopied(sourceEntry, newEntry);
 			// dispose immediately (cleanup temp files), not really used 
 			// as a controller, should be in a business logic frontend manager instead!
 			addController.dispose();
diff --git a/src/main/java/org/olat/repository/handlers/WikiCreateController.java b/src/main/java/org/olat/repository/handlers/WikiCreateController.java
index 9aeeab13077..8217e54ef55 100644
--- a/src/main/java/org/olat/repository/handlers/WikiCreateController.java
+++ b/src/main/java/org/olat/repository/handlers/WikiCreateController.java
@@ -101,6 +101,11 @@ public class WikiCreateController extends DefaultController implements IAddContr
 	public void repositoryEntryCreated(RepositoryEntry re) {
 	//
 	}
+	
+	@Override
+	public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) {
+		//
+	}
 
 	/**
 	 * @see org.olat.repository.controllers.IAddController#transactionAborted()
-- 
GitLab