From 3249537ce68348d33d4a7438acc2f9980e3d9f4f Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 14 Jan 2015 14:23:44 +0100
Subject: [PATCH] OO-1386: copy more fields of the source entry to the copy of
 the resource

---
 .../olat/repository/RepositoryService.java    |  2 +-
 .../_i18n/LocalStrings_de.properties          |  1 +
 .../_i18n/LocalStrings_en.properties          |  1 +
 .../_i18n/LocalStrings_fr.properties          |  1 +
 .../manager/RepositoryServiceImpl.java        | 14 +++++-
 .../ui/author/AuthorListController.java       |  3 +-
 .../author/CopyRepositoryEntryController.java | 44 ++-----------------
 7 files changed, 20 insertions(+), 46 deletions(-)

diff --git a/src/main/java/org/olat/repository/RepositoryService.java b/src/main/java/org/olat/repository/RepositoryService.java
index 98ebfdb60f5..e471126db14 100644
--- a/src/main/java/org/olat/repository/RepositoryService.java
+++ b/src/main/java/org/olat/repository/RepositoryService.java
@@ -50,7 +50,7 @@ public interface RepositoryService {
 	public RepositoryEntry create(String initialAuthor, String resourceName,
 			String displayname, String description, OLATResource resource);
 	
-	public RepositoryEntry copy(RepositoryEntry sourceEntry, Identity author, String displayname, String description);
+	public RepositoryEntry copy(RepositoryEntry sourceEntry, Identity author, String displayname);
 	
 	public RepositoryEntry loadByKey(Long key);
 	
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties
index fd10ac1bcef..ff12a475035 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties
@@ -254,6 +254,7 @@ cmd.import.ressource.desc=W\u00E4hlen Sie eine Lernressource f\u00FCr den Import
 comments=Kommentar
 confirmation.no.toolHelp=Aktion abbrechen.
 confirmation.yes.toolHelp=Lernressource l\u00F6schen.
+copy.suffix= (Kopie)
 course.config.changed.text=Sie m\u00F6chten die Kurseinstellungen \u00E4ndern. Wenn Sie 'Ja' klicken, m\u00FCssen {0} Personen im Kurs den Kurs neu starten. Bei 'Nein' werden die \u00C4nderungen verworfen. Wollen Sie fortfahren? 
 course.config.changed.title=\u00C4nderung der Einstellungen
 course.made.by=mit
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties
index 0b0f5bce22a..a72fcb8330d 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties
@@ -253,6 +253,7 @@ cmd.import.ressource.desc=Choose a learning resource to import\:<ul><li>OpenOLAT
 comments=Comments
 confirmation.no.toolHelp=Cancel action.
 confirmation.yes.toolHelp=Delete learning resource.
+copy.suffix= (copy)
 course.config.changed.text=You want to modify your course settings. When clicking on 'Yes' {0} participants will have to restart this course. When clicking on 'No' all modifications will be discarded. Do you wish to proceed?
 course.config.changed.title=Modification of settings
 course.made.by=with
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties
index 0d5c6d78e91..3058d5f7af6 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties
@@ -255,6 +255,7 @@ cmd.import.ressource.desc=Choisissez une ressource didactique \u00E0 importer\:<
 comments=Commentaires
 confirmation.no.toolHelp=Annuler l'op\u00E9ration
 confirmation.yes.toolHelp=Supprimer la ressource
+copy.suffix= (copie)
 course.config.changed.text=Vous voulez modifier les r\u00E9glages du cours. Si vous cliquez 'oui' les personnes utilisant le cours doivent red\u00E9marrer le cours. Si vous cliquez sur 'non', les modifications ne sont pas retenues. Voulez-vous continuer?
 course.config.changed.title=Modification des r\u00E9glages
 course.made.by=avec
diff --git a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
index 505ee181f9c..88d441dd948 100644
--- a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
+++ b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
@@ -186,15 +186,25 @@ public class RepositoryServiceImpl implements RepositoryService {
 	}
 
 	@Override
-	public RepositoryEntry copy(RepositoryEntry sourceEntry, Identity author, String displayname, String description) {
+	public RepositoryEntry copy(RepositoryEntry sourceEntry, Identity author, String displayname) {
 		OLATResource sourceResource = sourceEntry.getOlatResource();
 		OLATResource copyResource = resourceManager.createOLATResourceInstance(sourceResource.getResourceableTypeName());
 		RepositoryEntry copyEntry = create(author, null, sourceEntry.getResourcename(), displayname,
-				description, copyResource, RepositoryEntry.ACC_OWNERS);
+				sourceEntry.getDescription(), copyResource, RepositoryEntry.ACC_OWNERS);
+		
+		//copy all fields
+		copyEntry.setAuthors(sourceEntry.getAuthors());
+		copyEntry.setCredits(sourceEntry.getCredits());
+		copyEntry.setExpenditureOfWork(sourceEntry.getExpenditureOfWork());
+		copyEntry.setMainLanguage(sourceEntry.getMainLanguage());
+		copyEntry.setObjectives(sourceEntry.getObjectives());
+		copyEntry.setRequirements(sourceEntry.getRequirements());
+		copyEntry = dbInstance.getCurrentEntityManager().merge(copyEntry);
 	
 		RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(sourceEntry);
 		copyEntry = handler.copy(sourceEntry, copyEntry);
 		
+		
 		//copy the image
 		RepositoryManager.getInstance().copyImage(sourceEntry, copyEntry);
 
diff --git a/src/main/java/org/olat/repository/ui/author/AuthorListController.java b/src/main/java/org/olat/repository/ui/author/AuthorListController.java
index b355104563b..a63855702d3 100644
--- a/src/main/java/org/olat/repository/ui/author/AuthorListController.java
+++ b/src/main/java/org/olat/repository/ui/author/AuthorListController.java
@@ -721,8 +721,7 @@ public class AuthorListController extends FormBasicController implements Activat
 		for(AuthoringEntryRow row:rows) {
 			RepositoryEntry sourceEntry = repositoryService.loadByKey(row.getKey());
 			String displayname = "Copy of " + sourceEntry.getDisplayname();
-			String description = sourceEntry.getDescription();
-			repositoryService.copy(sourceEntry, getIdentity(), displayname, description);
+			repositoryService.copy(sourceEntry, getIdentity(), displayname);
 		}
 		
 		showInfo("details.copy.success", new String[]{ Integer.toString(rows.size()) });
diff --git a/src/main/java/org/olat/repository/ui/author/CopyRepositoryEntryController.java b/src/main/java/org/olat/repository/ui/author/CopyRepositoryEntryController.java
index 0f20a00b5d1..10de6d58e0d 100644
--- a/src/main/java/org/olat/repository/ui/author/CopyRepositoryEntryController.java
+++ b/src/main/java/org/olat/repository/ui/author/CopyRepositoryEntryController.java
@@ -21,26 +21,18 @@ package org.olat.repository.ui.author;
 
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.RichTextElement;
 import org.olat.core.gui.components.form.flexible.elements.TextElement;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
 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.logging.activity.LearningResourceLoggingAction;
-import org.olat.core.logging.activity.OlatResourceableType;
-import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 import org.olat.repository.RepositoryService;
-import org.olat.repository.handlers.RepositoryHandler;
-import org.olat.repository.handlers.RepositoryHandlerFactory;
-import org.olat.resource.OLATResource;
 import org.olat.resource.OLATResourceManager;
-import org.olat.util.logging.activity.LoggingResourceable;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
@@ -52,7 +44,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 public class CopyRepositoryEntryController extends FormBasicController {
 
 	private TextElement displaynameEl;
-	private RichTextElement descriptionEl;
 	
 	private RepositoryEntry copyEntry;
 	private final RepositoryEntry sourceEntry;
@@ -75,13 +66,10 @@ public class CopyRepositoryEntryController extends FormBasicController {
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		String sourceName = StringHelper.escapeHtml(sourceEntry.getDisplayname());
+		sourceName += " " + translate("copy.suffix");
 		displaynameEl = uifactory.addTextElement("cif.displayname", "cif.displayname", 100, sourceName, formLayout);
 		displaynameEl.setDisplaySize(30);
 		displaynameEl.setMandatory(true);
-
-		descriptionEl = uifactory.addRichTextElementForStringData("cif.description", "cif.description",
-				"", 10, -1, false, null, null, formLayout, ureq.getUserSession(), getWindowControl());
-		descriptionEl.getEditorConfiguration().setFileBrowserUploadRelPath("media");
 		
 		FormLayoutContainer buttonContainer = FormLayoutContainer.createButtonLayout("buttonContainer", getTranslator());
 		formLayout.add("buttonContainer", buttonContainer);
@@ -101,13 +89,13 @@ public class CopyRepositoryEntryController extends FormBasicController {
 	
 	@Override
 	protected void formOK(UserRequest ureq) {
-		doCopy();
+		String displayname = displaynameEl.getValue();
+		copyEntry = repositoryService.copy(sourceEntry, getIdentity(), displayname);
 		fireEvent(ureq, Event.DONE_EVENT);
 	}
 	
 	@Override
 	protected void formCancelled(UserRequest ureq) {
-		doCleanUp();
 		fireEvent(ureq, Event.CANCELLED_EVENT);
 	}
 
@@ -126,30 +114,4 @@ public class CopyRepositoryEntryController extends FormBasicController {
 
 		return allOk & super.validateFormLogic(ureq);
 	}
-	
-	private void doCopy() {
-		String displayname = displaynameEl.getValue();
-		String description = descriptionEl.getValue();
-		
-		OLATResource sourceResource = sourceEntry.getOlatResource();
-		OLATResource copyResource = resourceManager.createOLATResourceInstance(sourceResource.getResourceableTypeName());
-		copyEntry = repositoryService.create(getIdentity(), null, sourceEntry.getResourcename(), displayname,
-				description, copyResource, RepositoryEntry.ACC_OWNERS);
-	
-		RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(sourceEntry);
-		copyEntry = handler.copy(sourceEntry, copyEntry);
-		
-		//copy the image
-		RepositoryManager.getInstance().copyImage(sourceEntry, copyEntry);
-
-		ThreadLocalUserActivityLogger.log(LearningResourceLoggingAction.LEARNING_RESOURCE_CREATE, getClass(),
-				LoggingResourceable.wrap(copyEntry, OlatResourceableType.genRepoEntry));
-		
-		repositoryManager.triggerIndexer(copyEntry);
-	}
-
-	
-	private void doCleanUp() {
-		//remove repo
-	}
 }
\ No newline at end of file
-- 
GitLab