From cbace641ff9a7a0e9e39b668b6cfab714f0b0966 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Thu, 23 Jun 2016 15:17:59 +0200
Subject: [PATCH] OO-2069: delegate the create controller to the repository
 entry handler with a default implementation

---
 .../qpool/ui/QuestionListController.java      |  6 ++--
 .../ReferencableEntriesSearchController.java  |  6 ++--
 .../handlers/RepositoryHandler.java           | 12 +++++++
 .../ui/author/AuthorListController.java       |  4 +--
 .../ui/author/CreateEntryController.java      | 31 +++++++++++++++++++
 .../CreateRepositoryEntryController.java      |  5 ++-
 6 files changed, 55 insertions(+), 9 deletions(-)
 create mode 100644 src/main/java/org/olat/repository/ui/author/CreateEntryController.java

diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
index b1cb15a20b1..de4aef3bab9 100644
--- a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
@@ -88,7 +88,7 @@ import org.olat.repository.controllers.ReferencableEntriesSearchController;
 import org.olat.repository.controllers.RepositorySearchController.Can;
 import org.olat.repository.handlers.RepositoryHandler;
 import org.olat.repository.handlers.RepositoryHandlerFactory;
-import org.olat.repository.ui.author.CreateRepositoryEntryController;
+import org.olat.repository.ui.author.CreateEntryController;
 import org.olat.search.service.indexer.LifeFullIndexer;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -126,7 +126,7 @@ public class QuestionListController extends AbstractItemListController implement
 	private ImportController importItemCtrl;
 	private CollectionTargetController listTargetCtrl;
 	private ShareTargetController shareTargetCtrl;
-	private CreateRepositoryEntryController addController;
+	private CreateEntryController addController;
 	private QuestionItemDetailsController currentDetailsCtrl;
 	private LayoutMain3ColsController currentMainDetailsCtrl;
 	private MetadataBulkChangeController bulkChangeCtrl;
@@ -760,7 +760,7 @@ public class QuestionListController extends AbstractItemListController implement
 		
 		String type = TestFileResource.TYPE_NAME;
 		RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(type);
-		addController = new CreateRepositoryEntryController(ureq, getWindowControl(), handler);
+		addController = handler.createCreateRepositoryEntryController(ureq, getWindowControl());
 		addController.setCreateObject(new QItemList(items));
 		listenTo(addController);
 		cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent());
diff --git a/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java b/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java
index 88cd42bd6c3..0fada69a54f 100644
--- a/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java
+++ b/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java
@@ -61,7 +61,7 @@ import org.olat.repository.controllers.RepositorySearchController.Can;
 import org.olat.repository.handlers.RepositoryHandler;
 import org.olat.repository.handlers.RepositoryHandlerFactory;
 import org.olat.repository.ui.RepositoryTableModel;
-import org.olat.repository.ui.author.CreateRepositoryEntryController;
+import org.olat.repository.ui.author.CreateEntryController;
 import org.olat.repository.ui.author.ImportRepositoryEntryController;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -95,7 +95,7 @@ public class ReferencableEntriesSearchController extends BasicController {
 	private Component createRessourceCmp;
 	private List<Link> createRessourceButtons;
 	
-	private CreateRepositoryEntryController createController;
+	private CreateEntryController createController;
 	private ImportRepositoryEntryController importController;
 	private CloseableModalController cmc;
 	
@@ -315,7 +315,7 @@ public class ReferencableEntriesSearchController extends BasicController {
 			removeAsListenerAndDispose(cmc);
 			removeAsListenerAndDispose(createController);
 			RepositoryHandler handler = (RepositoryHandler)((Link)source).getUserObject();
-			createController = new CreateRepositoryEntryController(ureq, getWindowControl(), handler);
+			createController = handler.createCreateRepositoryEntryController(ureq, getWindowControl());
 			listenTo(createController);
 			
 			String title = translate(handler.getCreateLabelI18nKey());
diff --git a/src/main/java/org/olat/repository/handlers/RepositoryHandler.java b/src/main/java/org/olat/repository/handlers/RepositoryHandler.java
index 952005bef92..f5e43b0a43d 100644
--- a/src/main/java/org/olat/repository/handlers/RepositoryHandler.java
+++ b/src/main/java/org/olat/repository/handlers/RepositoryHandler.java
@@ -44,6 +44,8 @@ import org.olat.fileresource.types.ResourceEvaluation;
 import org.olat.repository.ErrorList;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.model.RepositoryEntrySecurity;
+import org.olat.repository.ui.author.CreateEntryController;
+import org.olat.repository.ui.author.CreateRepositoryEntryController;
 
 
 /**
@@ -160,6 +162,16 @@ public interface RepositoryHandler {
 	 */
 	public StepsMainRunController createWizardController(OLATResourceable res, UserRequest ureq, WindowControl wControl);
 	
+	/**
+	 * Called if a user wants to open the create repository entry dialog for a Resourceable
+	 * @param ureq
+	 * @param wControl
+	 * @return Controller able to create resourceable.
+	 */
+	default CreateEntryController createCreateRepositoryEntryController(UserRequest ureq, WindowControl wControl) {
+		return new CreateRepositoryEntryController(ureq, wControl, this);
+	}
+	
 	/**
 	 * Called if a user downloads a Resourceable that this handler can handle.
 	 * @param res
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 57bef552e77..05ac91a3bc0 100644
--- a/src/main/java/org/olat/repository/ui/author/AuthorListController.java
+++ b/src/main/java/org/olat/repository/ui/author/AuthorListController.java
@@ -135,7 +135,7 @@ public class AuthorListController extends FormBasicController implements Activat
 	private StepsMainRunController closeCtrl;
 	private ConfirmDeleteController confirmDeleteCtrl;
 	private ImportRepositoryEntryController importCtrl;
-	private CreateRepositoryEntryController createCtrl;
+	private CreateEntryController createCtrl;
 	private CloseableCalloutWindowController toolsCalloutCtrl;
 	
 	private boolean hasAuthorRight;
@@ -597,7 +597,7 @@ public class AuthorListController extends FormBasicController implements Activat
 		if(createCtrl != null) return;
 
 		removeAsListenerAndDispose(createCtrl);
-		createCtrl = new CreateRepositoryEntryController(ureq, getWindowControl(), handler);
+		createCtrl = handler.createCreateRepositoryEntryController(ureq, getWindowControl());
 		listenTo(createCtrl);
 		removeAsListenerAndDispose(cmc);
 		
diff --git a/src/main/java/org/olat/repository/ui/author/CreateEntryController.java b/src/main/java/org/olat/repository/ui/author/CreateEntryController.java
new file mode 100644
index 00000000000..793a31737e0
--- /dev/null
+++ b/src/main/java/org/olat/repository/ui/author/CreateEntryController.java
@@ -0,0 +1,31 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ */
+package org.olat.repository.ui.author;
+
+import org.olat.core.gui.control.Controller;
+import org.olat.repository.RepositoryEntry;
+import org.olat.repository.handlers.RepositoryHandler;
+
+public interface CreateEntryController extends Controller {
+	
+	public RepositoryEntry getAddedEntry();
+	
+	public void setCreateObject(Object userObject);
+	
+	public RepositoryHandler getHandler();
+	
+}
diff --git a/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java b/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java
index 26427307a71..8833c0a3b5e 100644
--- a/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java
+++ b/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java
@@ -52,7 +52,7 @@ import org.springframework.beans.factory.annotation.Autowired;
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  *
  */
-public class CreateRepositoryEntryController extends FormBasicController {
+public class CreateRepositoryEntryController extends FormBasicController implements CreateEntryController {
 	
 	public static final Event CREATION_WIZARD = new Event("start_wizard");
 	
@@ -74,10 +74,12 @@ public class CreateRepositoryEntryController extends FormBasicController {
 		initForm(ureq);
 	}
 
+	@Override
 	public RepositoryHandler getHandler() {
 		return handler;
 	}
 
+	@Override
 	public RepositoryEntry getAddedEntry() {
 		return addedEntry;
 	}
@@ -86,6 +88,7 @@ public class CreateRepositoryEntryController extends FormBasicController {
 		return userObject;
 	}
 
+	@Override
 	public void setCreateObject(Object userObject) {
 		this.userObject = userObject;
 	}
-- 
GitLab