diff --git a/src/main/java/org/olat/_spring/mainContext.xml b/src/main/java/org/olat/_spring/mainContext.xml
index 1a40e3a4b93f709ca8af057624cc3b4363a6c9a9..3cc90eff6ca8888fc08c4053db91968b742dbaa7 100644
--- a/src/main/java/org/olat/_spring/mainContext.xml
+++ b/src/main/java/org/olat/_spring/mainContext.xml
@@ -37,7 +37,6 @@
 	<import resource="classpath:/org/olat/instantMessaging/_spring/instantMessagingContext.xml"/>
 	<import resource="classpath:/org/olat/ldap/_spring/ldapContext.xml"/>
 	<import resource="classpath:/org/olat/login/_spring/loginContext.xml"/>
-	<import resource="classpath:/org/olat/portfolio/_spring/portfolioContext.xml"/>
 	<import resource="classpath:/org/olat/properties/_spring/propertiesContext.xml"/>
 	<import resource="classpath:/org/olat/registration/_spring/registrationContext.xml"/>
 	<import resource="classpath:/org/olat/repository/_spring/repositoryContext.xml"/>
diff --git a/src/main/java/org/olat/basesecurity/AuthHelper.java b/src/main/java/org/olat/basesecurity/AuthHelper.java
index 96ce4fef0f282cb1861297a87ad87680fff4fe48..9e75c4af1eed54cbf348718623092326e2efb270 100644
--- a/src/main/java/org/olat/basesecurity/AuthHelper.java
+++ b/src/main/java/org/olat/basesecurity/AuthHelper.java
@@ -27,7 +27,6 @@ package org.olat.basesecurity;
 
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
@@ -70,7 +69,7 @@ import org.olat.course.assessment.AssessmentModule;
 import org.olat.course.assessment.model.TransientAssessmentMode;
 import org.olat.login.AuthBFWCParts;
 import org.olat.login.GuestBFWCParts;
-import org.olat.portfolio.manager.InvitationDAO;
+import org.olat.modules.portfolio.manager.InvitationDAO;
 import org.olat.user.UserManager;
 import org.olat.util.logging.activity.LoggingResourceable;
 
@@ -238,7 +237,7 @@ public class AuthHelper {
 
 	public static int doInvitationLogin(String invitationToken, UserRequest ureq, Locale locale) {
 		InvitationDAO invitationDao = CoreSpringFactory.getImpl(InvitationDAO.class);
-		boolean hasPolicies = invitationDao.hasInvitations(invitationToken, new Date());
+		boolean hasPolicies = invitationDao.hasInvitations(invitationToken);
 		if(!hasPolicies) {
 			return LOGIN_DENIED;
 		}
diff --git a/src/main/java/org/olat/collaboration/CollaborationTools.java b/src/main/java/org/olat/collaboration/CollaborationTools.java
index 7669eee963dc0baf928cb5448ec4464d1da17dcb..3ab67904d1daf6b069c2e72f48471afa97000205 100644
--- a/src/main/java/org/olat/collaboration/CollaborationTools.java
+++ b/src/main/java/org/olat/collaboration/CollaborationTools.java
@@ -79,6 +79,7 @@ import org.olat.course.CorruptedCourseException;
 import org.olat.course.CourseFactory;
 import org.olat.course.CourseModule;
 import org.olat.course.ICourse;
+import org.olat.course.nodes.portfolio.PortfolioCourseNodeRunController;
 import org.olat.course.run.calendar.CourseLinkProviderController;
 import org.olat.group.BusinessGroup;
 import org.olat.group.BusinessGroupService;
@@ -117,12 +118,6 @@ import org.olat.modules.wiki.WikiManager;
 import org.olat.modules.wiki.WikiSecurityCallback;
 import org.olat.modules.wiki.WikiSecurityCallbackImpl;
 import org.olat.modules.wiki.WikiToZipUtils;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.EPSecurityCallbackImpl;
-import org.olat.portfolio.EPUIFactory;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.ui.structel.EPCreateMapController;
 import org.olat.properties.NarrowedPropertyManager;
 import org.olat.properties.Property;
 import org.olat.properties.PropertyManager;
@@ -544,42 +539,30 @@ public class CollaborationTools implements Serializable {
 		Property mapProperty = npm.findProperty(null, null, PROP_CAT_BG_COLLABTOOLS, KEY_PORTFOLIO);
 		if(mapProperty != null) {
 			return createPortfolioController(ureq, wControl, stackPanel, mapProperty);
-		} else {
-			return coordinatorManager.getCoordinator().getSyncer().doInSync(ores, () -> {
-				Controller ctrl;
-				Property mapKeyProperty = npm.findProperty(null, null, PROP_CAT_BG_COLLABTOOLS, KEY_PORTFOLIO);
-				if (mapKeyProperty == null) {
-					PortfolioV2Module moduleV2 = CoreSpringFactory.getImpl(PortfolioV2Module.class);
-					if(moduleV2.isEnabled()) {
-						PortfolioService portfolioService = CoreSpringFactory.getImpl(PortfolioService.class);
-						Binder binder = portfolioService.createNewBinder(group.getName(), group.getDescription(), null, null);
-						CoreSpringFactory.getImpl(BinderUserInformationsDAO.class).updateBinderUserInformationsInSync(binder, ureq.getIdentity());
-						mapKeyProperty = npm.createPropertyInstance(null, null, PROP_CAT_BG_COLLABTOOLS, KEY_PORTFOLIO, null, binder.getKey(), "2", null);
-						BinderSecurityCallback secCallback = BinderSecurityCallbackFactory.getCallbackForBusinessGroup();
-						BinderController binderCtrl = new BinderController(ureq, wControl, stackPanel, secCallback, binder, BinderConfiguration.createBusinessGroupConfig());					
-						List<ContextEntry> entries = BusinessControlFactory.getInstance().createCEListFromResourceType("Toc");
-						binderCtrl.activate(ureq, entries, null);
-						ctrl = binderCtrl;
-
-						ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrap(binder));
-						ThreadLocalUserActivityLogger.log(PortfolioLoggingAction.PORTFOLIO_BINDER_CREATED, getClass());
-					} else {
-						EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-						PortfolioStructureMap map = ePFMgr.createAndPersistPortfolioDefaultMap(group.getName(), group.getDescription());					
-						Translator pT = Util.createPackageTranslator(EPCreateMapController.class, ureq.getLocale());					
-						// add a page, as each map should have at least one per default!
-						ePFMgr.createAndPersistPortfolioPage(map, pT.translate("new.page.title"), pT.translate("new.page.desc"));
-						mapKeyProperty = npm.createPropertyInstance(null, null, PROP_CAT_BG_COLLABTOOLS, KEY_PORTFOLIO, null, map.getKey(), null, null);
-						EPSecurityCallback secCallback = new EPSecurityCallbackImpl(true, true);
-						ctrl = EPUIFactory.createMapViewController(ureq, wControl, map, secCallback);
-					}
-					npm.saveProperty(mapKeyProperty);
-				} else {
-					ctrl = createPortfolioController(ureq, wControl, stackPanel, mapProperty);
-				}
-				return ctrl;
-			});
 		}
+		return coordinatorManager.getCoordinator().getSyncer().doInSync(ores, () -> {
+			Controller ctrl;
+			Property mapKeyProperty = npm.findProperty(null, null, PROP_CAT_BG_COLLABTOOLS, KEY_PORTFOLIO);
+			PortfolioV2Module moduleV2 = CoreSpringFactory.getImpl(PortfolioV2Module.class);
+			if (mapKeyProperty == null && moduleV2.isEnabled()) {
+				PortfolioService portfolioService = CoreSpringFactory.getImpl(PortfolioService.class);
+				Binder binder = portfolioService.createNewBinder(group.getName(), group.getDescription(), null, null);
+				CoreSpringFactory.getImpl(BinderUserInformationsDAO.class).updateBinderUserInformationsInSync(binder, ureq.getIdentity());
+				mapKeyProperty = npm.createPropertyInstance(null, null, PROP_CAT_BG_COLLABTOOLS, KEY_PORTFOLIO, null, binder.getKey(), "2", null);
+				BinderSecurityCallback secCallback = BinderSecurityCallbackFactory.getCallbackForBusinessGroup();
+				BinderController binderCtrl = new BinderController(ureq, wControl, stackPanel, secCallback, binder, BinderConfiguration.createBusinessGroupConfig());					
+				List<ContextEntry> entries = BusinessControlFactory.getInstance().createCEListFromResourceType("Toc");
+				binderCtrl.activate(ureq, entries, null);
+				ctrl = binderCtrl;
+
+				ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrap(binder));
+				ThreadLocalUserActivityLogger.log(PortfolioLoggingAction.PORTFOLIO_BINDER_CREATED, getClass());
+				npm.saveProperty(mapKeyProperty);
+			} else {
+				ctrl = createPortfolioController(ureq, wControl, stackPanel, mapProperty);
+			}
+			return ctrl;
+		});
 	}
 	
 	/**
@@ -608,16 +591,8 @@ public class CollaborationTools implements Serializable {
 				ctrl = new BinderController(ureq, wControl, stackPanel, secCallback, binder, BinderConfiguration.createBusinessGroupConfig());
 			}
 		} else {
-			PortfolioStructureMap map = (PortfolioStructureMap) CoreSpringFactory.getImpl(EPFrontendManager.class)
-					.loadPortfolioStructureByKey(key);
-			if(map == null) {
-				Translator trans = Util.createPackageTranslator(this.getClass(), ureq.getLocale());
-				String text = trans.translate("error.missing.map");
-				ctrl = MessageUIFactory.createErrorMessage(ureq, wControl, "", text);
-			} else {
-				EPSecurityCallback secCallback = new EPSecurityCallbackImpl(true, true);
-				ctrl = EPUIFactory.createMapViewController(ureq, wControl, map, secCallback);
-			}
+			Translator trans = Util.createPackageTranslator(PortfolioCourseNodeRunController.class, ureq.getLocale());
+			ctrl = MessageUIFactory.createInfoMessage(ureq, wControl, "", trans.translate("error.portfolioV1"));
 		}
 		return ctrl;
 	}
diff --git a/src/main/java/org/olat/collaboration/CollaborationToolsFactory.java b/src/main/java/org/olat/collaboration/CollaborationToolsFactory.java
index 429a4a8697a608a88be706fd4baab3f1c10c9503..97916eb538b24617938a3272115695ea01ad7de6 100644
--- a/src/main/java/org/olat/collaboration/CollaborationToolsFactory.java
+++ b/src/main/java/org/olat/collaboration/CollaborationToolsFactory.java
@@ -48,7 +48,6 @@ import org.olat.modules.bigbluebutton.BigBlueButtonTemplatePermissions;
 import org.olat.modules.openmeetings.OpenMeetingsModule;
 import org.olat.modules.portfolio.PortfolioV2Module;
 import org.olat.modules.wiki.WikiModule;
-import org.olat.portfolio.PortfolioModule;
 
 /**
  * Description:<BR>
@@ -104,9 +103,8 @@ public class CollaborationToolsFactory {
 		if (wikiModule.isWikiEnabled()) {
 			toolArr.add(CollaborationTools.TOOL_WIKI);			
 		}
-		PortfolioModule portfolioModule = CoreSpringFactory.getImpl(PortfolioModule.class);
 		PortfolioV2Module portfolioV2Module = CoreSpringFactory.getImpl(PortfolioV2Module.class);
-		if (portfolioModule.isEnabled() || portfolioV2Module.isEnabled()) {
+		if (portfolioV2Module.isEnabled()) {
 			toolArr.add(CollaborationTools.TOOL_PORTFOLIO);
 		}	
 		OpenMeetingsModule openMeetingsModule = CoreSpringFactory.getImpl(OpenMeetingsModule.class);
diff --git a/src/main/java/org/olat/collaboration/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/collaboration/_i18n/LocalStrings_de.properties
index 433cd6d7fe6b04a685988fa05fc386f648fb666f..7cf5c3324446e3d04278aa39254d131d3bbe5d35 100644
--- a/src/main/java/org/olat/collaboration/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/collaboration/_i18n/LocalStrings_de.properties
@@ -14,7 +14,7 @@ collabtools.named.hasNews=Information an Mitglieder
 collabtools.named.hasOpenMeetings=OpenMeetings
 collabtools.named.hasPortfolio=Portfolio
 collabtools.named.hasWiki=Wiki
-error.missing.map=Die Mappe wurde gelöscht.
+error.missing.map=Die Mappe wurde gel\u00F6scht
 folder=Ordner
 folder.access=Ordner Schreibberechtigung
 folder.access.all=Alle Mitglieder
diff --git a/src/main/java/org/olat/collaboration/_spring/collaborationToolsContext.xml b/src/main/java/org/olat/collaboration/_spring/collaborationToolsContext.xml
index e07076356255e3af4233bbceb30212a61b2ea17f..d99fc13abebd547beb94f7cc38cd288439f7a76e 100644
--- a/src/main/java/org/olat/collaboration/_spring/collaborationToolsContext.xml
+++ b/src/main/java/org/olat/collaboration/_spring/collaborationToolsContext.xml
@@ -6,7 +6,7 @@
   http://www.springframework.org/schema/beans/spring-beans.xsd">
 
 	<bean id="collaborationToolsFactory" class="org.olat.collaboration.CollaborationToolsFactory" 
-		depends-on="instantMessagingModule,baseSecurityModule,portfolioModule,openmeetingsModule">
+		depends-on="instantMessagingModule,baseSecurityModule,openmeetingsModule">
 		<constructor-arg ref="coordinatorManager" />
 	</bean>
 
diff --git a/src/main/java/org/olat/core/commons/services/scheduler/_spring/schedulerContext.xml b/src/main/java/org/olat/core/commons/services/scheduler/_spring/schedulerContext.xml
index e56a737862ce663a7e7214d059c3f13576778a9b..a78577583936bf523b22c9f5bb317e22bc526c35 100644
--- a/src/main/java/org/olat/core/commons/services/scheduler/_spring/schedulerContext.xml
+++ b/src/main/java/org/olat/core/commons/services/scheduler/_spring/schedulerContext.xml
@@ -38,7 +38,6 @@ How to add a new job:
             <ref bean="updateStatisticsTrigger"/>
             <ref bean="searchIndexingTrigger"/>
             <ref bean="invitationCleanupTrigger" />
-            <ref bean="epDeadlineTrigger" />
             <ref bean="restTokenTrigger" />
             <ref bean="taskExecutorTrigger" />
             <ref bean="procSamplerTrigger"/>
diff --git a/src/main/java/org/olat/core/gui/control/_spring/sitedefContext.xml b/src/main/java/org/olat/core/gui/control/_spring/sitedefContext.xml
index 047cf17879208f2b449abe92ef195eca789451c2..d9034f61ed393963f6b48bbb2e2429c91c8ee2e5 100644
--- a/src/main/java/org/olat/core/gui/control/_spring/sitedefContext.xml
+++ b/src/main/java/org/olat/core/gui/control/_spring/sitedefContext.xml
@@ -60,12 +60,6 @@
 		<property name="enabled" value="${sites.enable.library}"/>
 		<property name="defaultSiteSecurityCallbackBeanId" value="registredSiteSecurityCallback"/>
 	</bean>
-	
-	<bean id="olatsites_portfolio" class="org.olat.portfolio.site.EPSiteDef">
-	   <property name="order" value="7" />
-	   <property name="enabled" value="${site.portfolio.enable}"/>
-	   	<property name="defaultSiteSecurityCallbackBeanId" value="registredSiteSecurityCallback"/>
-	</bean>
 
 	<bean id="olatsites_coaching" class="org.olat.modules.coach.site.CoachSiteDef">
 		<property name="order" value="8" />
diff --git a/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefact.hbm.xml b/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefact.hbm.xml
deleted file mode 100644
index 9b23245e92460593ca690d5f4bc9fd54a74234e3..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefact.hbm.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping default-lazy="false">
-	<subclass name="org.olat.course.assessment.portfolio.EfficiencyStatementArtefact" 
-		extends="org.olat.portfolio.model.artefacts.AbstractArtefact" discriminator-value="EfficiencyStatement">
-	
-	</subclass>
-</hibernate-mapping>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefact.java b/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefact.java
deleted file mode 100644
index ecc7ee788a8a224f6ec60dc85270445147ecf003..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefact.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.course.assessment.portfolio;
-
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * Initial Date:  7 oct. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EfficiencyStatementArtefact extends AbstractArtefact {
-
-	private static final long serialVersionUID = 896728271562859702L;
-	public static final String ARTEFACT_TYPE = "EfficiencyStatement";
-	
-	@Override
-	public String getIcon() {
-		return "o_icon_certificate";
-	}
-
-	@Override
-	public String getResourceableTypeName() {
-		return ARTEFACT_TYPE;
-	}
-	
-}
diff --git a/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefactHandler.java b/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefactHandler.java
deleted file mode 100644
index 6cec2b9a9135ee8a21caf1cb63f886c99915af5e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefactHandler.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.course.assessment.portfolio;
-
-import org.apache.logging.log4j.Logger;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.xml.XStreamHelper;
-import org.olat.course.assessment.EfficiencyStatement;
-import org.olat.course.certificate.ui.CertificateAndEfficiencyStatementController;
-import org.olat.portfolio.EPAbstractHandler;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.search.service.SearchResourceContext;
-
-import com.thoughtworks.xstream.XStream;
-
-/**
- * 
- * Description:<br>
- * EvidenceArtefactHandler
- * 
- * <P>
- * Initial Date:  7 oct. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EfficiencyStatementArtefactHandler extends EPAbstractHandler<EfficiencyStatementArtefact> {
-
-	private static final Logger log = Tracing.createLoggerFor(EfficiencyStatementArtefactHandler.class);
-	
-	private final XStream myXStream = XStreamHelper.createXStreamInstance();
-	
-	@Override
-	public String getType() {
-		return EfficiencyStatementArtefact.ARTEFACT_TYPE;
-	}
-
-	@Override
-	public EfficiencyStatementArtefact createArtefact() {
-		return new EfficiencyStatementArtefact();
-	}
-	
-	/**
-	 * @see org.olat.portfolio.EPAbstractHandler#prefillArtefactAccordingToSource(org.olat.portfolio.model.artefacts.AbstractArtefact, java.lang.Object)
-	 */
-	@Override
-	public void prefillArtefactAccordingToSource(AbstractArtefact artefact, Object source) {
-		super.prefillArtefactAccordingToSource(artefact, source);
-
-		if (source instanceof EfficiencyStatement){
-			EfficiencyStatement statement = (EfficiencyStatement) source;
-			if(artefact.getTitle() == null) {
-				artefact.setTitle(statement.getCourseTitle());
-			}
-			String efficiencyStatementX = myXStream.toXML(statement); 
-			artefact.setSource(statement.getCourseTitle());
-			artefact.setFulltextContent(efficiencyStatementX);
-			artefact.setSignature(90);
-		}
-	}
-
-	@Override
-	public Controller createDetailsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, boolean readOnlyMode) {
-		EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-		String statementXml = ePFMgr.getArtefactFullTextContent(artefact);
-		EfficiencyStatement statement = null;
-		if(StringHelper.containsNonWhitespace(statementXml)) {
-			try {
-				statement = (EfficiencyStatement)myXStream.fromXML(statementXml);
-			} catch (Exception e) {
-				log.error("Cannot load efficiency statement from artefact", e);
-			}
-		}
-		CertificateAndEfficiencyStatementController efficiencyCtrl = new CertificateAndEfficiencyStatementController(wControl, ureq, statement);
-		return new LayoutMain3ColsController(ureq, wControl, efficiencyCtrl);
-	}
-
-	@Override
-	protected void getContent(AbstractArtefact artefact, StringBuilder sb, SearchResourceContext context, EPFrontendManager ePFManager) {
-		String statementXml = ePFManager.getArtefactFullTextContent(artefact);
-		if(!StringHelper.containsNonWhitespace(statementXml)) return;
-		
-	  try {
-			EfficiencyStatement statement = (EfficiencyStatement)myXStream.fromXML(statementXml);
-			sb.append(statement.getCourseTitle()).append(' ');
-			sb.append(statement.getDisplayableUserInfo()).append(' ');
-	  } catch(Exception ex) {
-	  	log.error("Error while parsing " + artefact, ex);
-	  }
-	}
-}
diff --git a/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementMediaHandler.java b/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementMediaHandler.java
index f374945fdf1ee7ff7bc95d78609cc776716e3f93..097803ac6f12922d16cc0765388cf7007c438707 100644
--- a/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementMediaHandler.java
+++ b/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementMediaHandler.java
@@ -52,7 +52,6 @@ import org.olat.modules.portfolio.PortfolioLoggingAction;
 import org.olat.modules.portfolio.handler.AbstractMediaHandler;
 import org.olat.modules.portfolio.manager.MediaDAO;
 import org.olat.modules.portfolio.ui.media.StandardEditMediaController;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
 import org.olat.user.manager.ManifestBuilder;
 import org.olat.util.logging.activity.LoggingResourceable;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -123,21 +122,6 @@ public class EfficiencyStatementMediaHandler extends AbstractMediaHandler {
 		return media;
 	}
 
-	@Override
-	public Media createMedia(AbstractArtefact artefact) {
-		String title = artefact.getTitle();
-		String description = artefact.getDescription();
-		String xml = artefact.getFulltextContent();
-		String businessPath = artefact.getBusinessPath();
-		if(businessPath == null) {
-			businessPath = "[PortfolioV2:0][MediaCenter:0]";
-		}
-		Media media = mediaDao.createMedia(title, description, xml, EFF_MEDIA, businessPath, artefact.getKey().toString(), artefact.getSignature(), artefact.getAuthor());
-		ThreadLocalUserActivityLogger.log(PortfolioLoggingAction.PORTFOLIO_MEDIA_ADDED, getClass(),
-				LoggingResourceable.wrap(media));
-		return media;
-	}
-
 	@Override
 	public Controller getMediaController(UserRequest ureq, WindowControl wControl, Media media, MediaRenderingHints hints) {
 		String statementXml = media.getContent();
diff --git a/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_de.properties
deleted file mode 100644
index f10f986637b431c39635d8dfb2992f29d4c65e97..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:04 CET 2009
-handler.EfficiencyStatementArtefactHandler.title=Leistungsnachweis
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_en.properties
deleted file mode 100644
index 27368996380b7f75a235211c2acc9591f6e96092..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Wed Jan 05 15:14:49 CET 2011
-handler.EfficiencyStatementArtefactHandler.title=Evidence of achievement
diff --git a/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index 052d1e51586cda93cd11fbba6381177511b9bae0..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Fri Jan 07 18:24:45 CET 2011
-handler.EfficiencyStatementArtefactHandler.title=Attestation de performance
diff --git a/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_it.properties
deleted file mode 100644
index 91559bbf6442c7dd2163a8a29374d0c910ae3c04..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_it.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Fri Jan 07 17:21:54 CET 2011
-handler.EfficiencyStatementArtefactHandler.title=Attestato di efficienza
diff --git a/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_nl_NL.properties
deleted file mode 100644
index ec492a2b08c712b9306715cbebc3969fdb26286e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_nl_NL.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Thu Sep 08 16:42:43 CEST 2011
-handler.EfficiencyStatementArtefactHandler.title=Bewijs van prestatie
diff --git a/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_pl.properties
deleted file mode 100644
index 47c84a926300a2ff21c07d6e8c99c73977af6ddc..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_pl.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Thu Sep 08 16:42:41 CEST 2011
-handler.EfficiencyStatementArtefactHandler.title=Wykaz osi\u0105gni\u0119\u0107
diff --git a/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_pt_BR.properties
deleted file mode 100644
index f759a1111d44e6fceebc440686ac3a28346399e3..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_pt_BR.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Thu Sep 08 16:42:37 CEST 2011
-handler.EfficiencyStatementArtefactHandler.title=Comprovante de Conclus\u00E3o
diff --git a/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_zh_CN.properties
deleted file mode 100644
index f7218475e103bf5bfb01651a7c3ca052e491bdaf..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/assessment/portfolio/_i18n/LocalStrings_zh_CN.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Thu Sep 08 16:42:39 CEST 2011
-handler.EfficiencyStatementArtefactHandler.title=\u6210\u5C31\u8BC1\u660E
diff --git a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementController.java b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementController.java
index 863a9f4bc57c33d8a329c89899dc44f6b201372f..1751ebdae3967c21677cdc47e93306e35046393c 100644
--- a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementController.java
+++ b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementController.java
@@ -27,7 +27,6 @@ package org.olat.course.certificate.ui;
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -63,13 +62,11 @@ import org.olat.core.util.Util;
 import org.olat.core.util.mail.ContactList;
 import org.olat.core.util.mail.ContactMessage;
 import org.olat.core.util.resource.OresHelper;
-import org.olat.core.util.vfs.VFSContainer;
 import org.olat.course.assessment.AssessmentHelper;
 import org.olat.course.assessment.AssessmentModule;
 import org.olat.course.assessment.EfficiencyStatement;
 import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.assessment.model.AssessmentNodeData;
-import org.olat.course.assessment.portfolio.EfficiencyStatementArtefact;
 import org.olat.course.assessment.portfolio.EfficiencyStatementMediaHandler;
 import org.olat.course.assessment.ui.tool.IdentityAssessmentOverviewController;
 import org.olat.course.certificate.Certificate;
@@ -82,10 +79,6 @@ import org.olat.modules.assessment.AssessmentService;
 import org.olat.modules.co.ContactFormController;
 import org.olat.modules.portfolio.PortfolioV2Module;
 import org.olat.modules.portfolio.ui.component.MediaCollectorComponent;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.ui.artefacts.collect.ArtefactWizzardStepsController;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryService;
 import org.olat.user.UserManager;
@@ -107,7 +100,7 @@ public class CertificateAndEfficiencyStatementController extends BasicController
 	private VelocityContainer mainVC;
 	private SegmentViewComponent segmentView;
 	private Link certificateLink, courseDetailsLink;
-	private Link collectArtefactLink, homeLink, courseLink, groupLink, contactLink;
+	private Link homeLink, courseLink, groupLink, contactLink;
 	
 	private final Certificate certificate;
 	private final EfficiencyStatement efficiencyStatement;
@@ -115,8 +108,6 @@ public class CertificateAndEfficiencyStatementController extends BasicController
 	private final BusinessGroup businessGroup;
 	private final RepositoryEntry courseRepoEntry;
 	
-	
-	private Controller ePFCollCtrl;
 	private CloseableModalController cmc;
 	private ContactFormController contactCtrl;
 	private CertificateController certificateCtrl;
@@ -131,8 +122,6 @@ public class CertificateAndEfficiencyStatementController extends BasicController
 	@Autowired
 	private PortfolioV2Module portfolioV2Module;
 	@Autowired
-	private PortfolioModule portfolioModule;
-	@Autowired
 	private CertificatesManager certificatesManager;
 	@Autowired
 	private BusinessGroupService businessGroupService;
@@ -215,12 +204,6 @@ public class CertificateAndEfficiencyStatementController extends BasicController
 				MediaCollectorComponent collectorCmp = new MediaCollectorComponent("collectArtefactLink", getWindowControl(), efficiencyStatement,
 						mediaHandler, businessPath);
 				mainVC.put("collectArtefactLink", collectorCmp);
-			} else {
-				EPArtefactHandler<?> artHandler = portfolioModule.getArtefactHandler(EfficiencyStatementArtefact.ARTEFACT_TYPE);
-				if(portfolioModule.isEnabled() && artHandler != null && artHandler.isEnabled()) {
-					collectArtefactLink = LinkFactory.createCustomLink("collectArtefactLink", "collectartefact", "", Link.NONTRANSLATED, mainVC, this);
-					collectArtefactLink.setIconLeftCSS("o_icon o_icon-lg o_icon_eportfolio_add");
-				}
 			}
 		}
 
@@ -309,9 +292,7 @@ public class CertificateAndEfficiencyStatementController extends BasicController
 	
 	@Override
 	public void event(UserRequest ureq, Component source, Event event) {
-		if(source.equals(collectArtefactLink)){
-			popupArtefactCollector(ureq);
-		} else if (source == homeLink) {
+		if (source == homeLink) {
 			doOpenHome(ureq);
 		} else if (source == courseLink) {
 			doOpenCourse(ureq);
@@ -411,25 +392,4 @@ public class CertificateAndEfficiencyStatementController extends BasicController
 		NewControllerFactory.getInstance().launch(ureq, bwControl);
 	}
 
-	/**
-	 * opens the collect-artefact wizard 
-	 * 
-	 * @param ureq
-	 */
-	private void popupArtefactCollector(UserRequest ureq) {
-		EPArtefactHandler<?> artHandler = portfolioModule.getArtefactHandler(EfficiencyStatementArtefact.ARTEFACT_TYPE);
-		if(artHandler != null && artHandler.isEnabled()) {
-			AbstractArtefact artefact = artHandler.createArtefact();
-			artefact.setAuthor(getIdentity());//only author can create artefact
-			//no business path becouse we cannot launch an efficiency statement
-			artefact.setCollectionDate(new Date());
-			artefact.setTitle(translate("artefact.title", new String[]{ efficiencyStatement.getCourseTitle() }));
-			artHandler.prefillArtefactAccordingToSource(artefact, efficiencyStatement);
-			ePFCollCtrl = new ArtefactWizzardStepsController(ureq, getWindowControl(), artefact, (VFSContainer)null);
-			listenTo(ePFCollCtrl);
-			
-			//set flag for js-window-resizing (see velocity)
-			mainVC.contextPut("collectwizard", true);
-		}
-	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java
index 6ea83ad0739a4693e0265b092752d085a0f81ba8..5116adb60123f1ab242263332c949670a4a87951 100644
--- a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java
+++ b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java
@@ -20,7 +20,6 @@
 package org.olat.course.certificate.ui;
 
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -61,14 +60,12 @@ import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
 import org.olat.core.util.coordinate.CoordinatorManager;
 import org.olat.core.util.event.GenericEventListener;
-import org.olat.core.util.vfs.VFSContainer;
 import org.olat.course.CorruptedCourseException;
 import org.olat.course.assessment.AssessmentModule;
 import org.olat.course.assessment.EfficiencyStatement;
 import org.olat.course.assessment.bulk.PassedCellRenderer;
 import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.assessment.model.UserEfficiencyStatementLight;
-import org.olat.course.assessment.portfolio.EfficiencyStatementArtefact;
 import org.olat.course.assessment.portfolio.EfficiencyStatementMediaHandler;
 import org.olat.course.certificate.CertificateEvent;
 import org.olat.course.certificate.CertificateLight;
@@ -79,10 +76,6 @@ import org.olat.modules.assessment.AssessmentService;
 import org.olat.modules.assessment.ui.component.LearningProgressCompletionCellRenderer;
 import org.olat.modules.portfolio.PortfolioV2Module;
 import org.olat.modules.portfolio.ui.wizard.CollectArtefactController;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.ui.artefacts.collect.ArtefactWizzardStepsController;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 import org.olat.repository.RepositoryService;
@@ -100,7 +93,6 @@ public class CertificateAndEfficiencyStatementListController extends FormBasicCo
 	private static final String CMD_SHOW = "cmd.show";
 	private static final String CMD_LAUNCH_COURSE = "cmd.launch.course";
 	private static final String CMD_DELETE = "cmd.delete";
-	private static final String CMD_ARTEFACT = "cmd.artefact";
 	private static final String CMD_MEDIA = "cmd.MEDIA";
 	
 	private FlexiTableElement tableEl;
@@ -111,7 +103,6 @@ public class CertificateAndEfficiencyStatementListController extends FormBasicCo
 	private CloseableModalController cmc;
 	private CollectArtefactController collectorCtrl;
 	private DialogBoxController confirmDeleteCtr;
-	private ArtefactWizzardStepsController ePFCollCtrl;
 	
 	private final boolean canModify;
 	private final boolean linkToCoachingTool;
@@ -120,8 +111,6 @@ public class CertificateAndEfficiencyStatementListController extends FormBasicCo
 	@Autowired
 	private EfficiencyStatementManager esm;
 	@Autowired
-	private PortfolioModule portfolioModule;
-	@Autowired
 	private PortfolioV2Module portfolioV2Module;
 	@Autowired
 	private RepositoryManager repositoryManager;
@@ -217,13 +206,6 @@ public class CertificateAndEfficiencyStatementListController extends FormBasicCo
 				DefaultFlexiColumnModel portfolioColumn = new DefaultFlexiColumnModel( Cols.artefact, CMD_MEDIA,
 						new BooleanCellRenderer(new StaticFlexiCellRenderer(CMD_MEDIA, new AsArtefactCellRenderer()), null));
 				tableColumnModel.addFlexiColumnModel(portfolioColumn);
-			} else {
-				EPArtefactHandler<?> artHandler = portfolioModule.getArtefactHandler(EfficiencyStatementArtefact.ARTEFACT_TYPE);
-				if(portfolioModule.isEnabled() && artHandler != null && artHandler.isEnabled() && assessedIdentity.equals(getIdentity())) {
-					tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.header.artefact",
-							Cols.efficiencyStatement.ordinal(), CMD_ARTEFACT,
-							new StaticFlexiCellRenderer(CMD_ARTEFACT, new AsArtefactCellRenderer())));
-				}
 			}
 		}
 		
@@ -314,8 +296,6 @@ public class CertificateAndEfficiencyStatementListController extends FormBasicCo
 					doConfirmDelete(ureq, statement);
 				} else if(CMD_SHOW.equals(cmd)) {
 					doShowStatement(ureq, statement);
-				} else if(CMD_ARTEFACT.equals(cmd)) {
-					doCollectArtefact(ureq, statement.getDisplayName(), statement.getEfficiencyStatementKey());
 				} else if(CMD_MEDIA.equals(cmd)) {
 					doCollectMedia(ureq, statement.getDisplayName(), statement.getEfficiencyStatementKey());
 				}
@@ -400,21 +380,6 @@ public class CertificateAndEfficiencyStatementListController extends FormBasicCo
 			}
 		}
 	}
-	
-	private void doCollectArtefact(UserRequest ureq, String title, Long efficiencyStatementKey) {
-		EPArtefactHandler<?> artHandler = portfolioModule.getArtefactHandler(EfficiencyStatementArtefact.ARTEFACT_TYPE);
-		if(artHandler != null && artHandler.isEnabled() && assessedIdentity.equals(getIdentity())) {
-			AbstractArtefact artefact = artHandler.createArtefact();
-			artefact.setAuthor(getIdentity());//only author can create artefact
-			//no business path becouse we cannot launch an efficiency statement
-			artefact.setCollectionDate(new Date());
-			artefact.setTitle(translate("artefact.title", new String[]{ title }));
-			EfficiencyStatement fullStatement = esm.getUserEfficiencyStatementByKey(efficiencyStatementKey);
-			artHandler.prefillArtefactAccordingToSource(artefact, fullStatement);
-			ePFCollCtrl = new ArtefactWizzardStepsController(ureq, getWindowControl(), artefact, (VFSContainer)null);
-			listenTo(ePFCollCtrl);
-		}
-	}
 
 	private void doCollectMedia(UserRequest ureq, String title, Long efficiencyStatementKey) {
 		if(guardModalController(collectorCtrl)) return;
diff --git a/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java b/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java
index 86e77a69db47057ecff831b4df731d0f0377cd52..da7c423c711e5d20e3a73e0af569f5dabbe0aeed 100644
--- a/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java
@@ -66,15 +66,10 @@ import org.olat.course.run.userview.NodeEvaluation;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.modules.ModuleConfiguration;
 import org.olat.modules.portfolio.PortfolioService;
-import org.olat.portfolio.EPTemplateMapResource;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.manager.EPStructureManager;
-import org.olat.portfolio.model.structel.PortfolioStructure;
+import org.olat.modules.portfolio.handler.BinderTemplateResource;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntryImportExport;
 import org.olat.repository.RepositoryManager;
-import org.olat.repository.handlers.RepositoryHandler;
-import org.olat.repository.handlers.RepositoryHandlerFactory;
 
 
 /**
@@ -112,19 +107,8 @@ public class PortfolioCourseNode extends AbstractAccessableCourseNode {
 		ModuleConfiguration config = getModuleConfiguration();
 		if (isNewNode) {
 			MSCourseNode.initDefaultConfig(config);
-			config.setConfigurationVersion(CURRENT_CONFIG_VERSION);
 		} 
-		if (config.getConfigurationVersion() < 2) {
-			if(config.get(PortfolioCourseNodeConfiguration.REPO_SOFT_KEY) == null) {
-				Object mapKey = config.get(PortfolioCourseNodeConfiguration.MAP_KEY);
-				if(mapKey instanceof Long) {
-					EPStructureManager eSTMgr = (EPStructureManager) CoreSpringFactory.getBean("epStructureManager");
-					RepositoryEntry re = eSTMgr.loadPortfolioRepositoryEntryByMapKey((Long)mapKey);
-					config.set(PortfolioCourseNodeConfiguration.REPO_SOFT_KEY, re.getSoftkey());
-				}
-			}
-			config.setConfigurationVersion(2);
-		}
+		config.setConfigurationVersion(CURRENT_CONFIG_VERSION);
 	}
 	
 	@Override
@@ -163,7 +147,13 @@ public class PortfolioCourseNode extends AbstractAccessableCourseNode {
 			String message = trans.translate("guestnoaccess.message");
 			controller = MessageUIFactory.createInfoMessage(ureq, wControl, title, message);
 		} else {
-			controller = new PortfolioCourseNodeRunController(ureq, wControl, userCourseEnv, this);
+			RepositoryEntry mapEntry = getReferencedRepositoryEntry();
+			if(BinderTemplateResource.TYPE_NAME.equals(mapEntry.getOlatResource().getResourceableTypeName())) {
+				controller = new PortfolioCourseNodeRunController(ureq, wControl, userCourseEnv, this);
+			} else {
+				Translator trans = Util.createPackageTranslator(PortfolioCourseNodeRunController.class, ureq.getLocale());
+				controller = MessageUIFactory.createInfoMessage(ureq, wControl, "", trans.translate("error.portfolioV1"));
+			}
 		}
 		Controller ctrl = TitledWrapperHelper.getWrapper(ureq, wControl, controller, this, "o_ep_icon");
 		return new NodeRunConstructionResult(ctrl);
@@ -198,12 +188,6 @@ public class PortfolioCourseNode extends AbstractAccessableCourseNode {
 				return entry;
 			}
 		}
-		Long mapKey = (Long)getModuleConfiguration().get(PortfolioCourseNodeConfiguration.MAP_KEY);
-		if(mapKey != null) {
-			EPStructureManager eSTMgr = (EPStructureManager) CoreSpringFactory.getBean("epStructureManager");
-			RepositoryEntry re = eSTMgr.loadPortfolioRepositoryEntryByMapKey(mapKey);
-			return re;
-		}
 		return null;
 	}
 	
@@ -347,18 +331,6 @@ public class PortfolioCourseNode extends AbstractAccessableCourseNode {
 	public void importNode(File importDirectory, ICourse course, Identity owner, Organisation organisation, Locale locale, boolean withReferences) {
 		RepositoryEntryImportExport rie = new RepositoryEntryImportExport(importDirectory, getIdent());
 		if (withReferences && rie.anyExportedPropertiesAvailable()) {
-
-			RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(EPTemplateMapResource.TYPE_NAME);
-			RepositoryEntry re = handler.importResource(owner, rie.getInitialAuthor(), rie.getDisplayName(),
-					rie.getDescription(), false, organisation, locale, rie.importGetExportedFile(), null);
-			if(re != null) {
-				EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-				PortfolioStructure map = ePFMgr.loadPortfolioStructure(re.getOlatResource());
-				PortfolioCourseNodeEditController.setReference(re, map, getModuleConfiguration());
-			} else {
-				PortfolioCourseNodeEditController.removeReference(getModuleConfiguration());
-			}
-		} else {
 			PortfolioCourseNodeEditController.removeReference(getModuleConfiguration());
 		}
 	}
diff --git a/src/main/java/org/olat/course/nodes/portfolio/DeadlineController.java b/src/main/java/org/olat/course/nodes/portfolio/DeadlineController.java
deleted file mode 100644
index 0a1cbb9bcf18b8bf452345ca8c64fecb440cfa03..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/portfolio/DeadlineController.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.course.nodes.portfolio;
-
-import java.util.Calendar;
-import java.util.Date;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.DateChooser;
-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.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.olat.portfolio.model.structel.StructureStatusEnum;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * 
- * Description:<br>
- * Small controller to use in a popup to change the deadline.
- * 
- * <P>
- * Initial Date:  11 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class DeadlineController extends FormBasicController {
-	
-	private DateChooser deadlineChooser;
-	
-	private EPStructuredMap map;
-	
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	
-	public DeadlineController(UserRequest ureq, WindowControl wControl, EPStructuredMap map) {
-		super(ureq, wControl);
-		this.map = map;
-		initForm(ureq);
-	}
-
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		setFormTitle("map.deadline.change.title");
-		setFormDescription("map.deadline.change.description");
-		
-		deadlineChooser = uifactory.addDateChooser("map.deadline", null, formLayout);
-		if((map != null && map.getDeadLine() == null)) {
-			Calendar cal = Calendar.getInstance();
-			cal.setTime(new Date());
-			cal.add(Calendar.DATE, 7);
-			deadlineChooser.setDate(cal.getTime());
-		} else if(map != null) {
-			deadlineChooser.setDate(map.getDeadLine());
-		}
-		deadlineChooser.setValidDateCheck("map.deadline.invalid");
-		
-		FormLayoutContainer buttonLayout = FormLayoutContainer.createButtonLayout("ok-cancel", getTranslator());
-		buttonLayout.setRootForm(mainForm);
-		formLayout.add(buttonLayout);
-		uifactory.addFormSubmitButton("ok", buttonLayout);
-		uifactory.addFormCancelButton("cancel", buttonLayout, ureq, getWindowControl());
-	}
-	
-	@Override
-	protected void doDispose() {
-		//
-	}
-
-	@Override
-	protected void formOK(UserRequest ureq) {
-		Date newDeadLine = deadlineChooser.getDate();
-		// OLAT-6335: refresh map in case it was changed meanwhile
-		if(map != null) {
-			map = (EPStructuredMap) ePFMgr.reloadPortfolioStructure(map); 
-			map.setDeadLine(newDeadLine);
-			map.setStatus(StructureStatusEnum.OPEN);
-			ePFMgr.savePortfolioStructure(map);
-		}
-		fireEvent(ureq, Event.CHANGED_EVENT);
-	}
-
-	@Override
-	protected void formCancelled(UserRequest ureq) {
-		fireEvent(ureq, Event.CANCELLED_EVENT);
-	}
-	
-	public EPStructuredMap getMap() {
-		return map;
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#validateFormLogic(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected boolean validateFormLogic(UserRequest ureq) {
-		boolean allOk = true;
-		
-		Date newDeadLine = deadlineChooser.getDate();
-		if (newDeadLine != null && newDeadLine.before(new Date())) {
-			deadlineChooser.setErrorKey("map.deadline.invalid.before", null);
-			allOk &= false;
-		}
-		
-		return allOk & super.validateFormLogic(ureq);
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/portfolio/PortfolioAssessmentHandler.java b/src/main/java/org/olat/course/nodes/portfolio/PortfolioAssessmentHandler.java
index ebd8cbcbc6e67a2b6c3559e7038d759c9c9abe4e..bea2bb1dd596c486b9fe0f43679a2ae62316e485 100644
--- a/src/main/java/org/olat/course/nodes/portfolio/PortfolioAssessmentHandler.java
+++ b/src/main/java/org/olat/course/nodes/portfolio/PortfolioAssessmentHandler.java
@@ -19,7 +19,6 @@
  */
 package org.olat.course.nodes.portfolio;
 
-import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.stack.BreadcrumbPanel;
 import org.olat.core.gui.components.stack.TooledStackedPanel;
@@ -44,7 +43,6 @@ import org.olat.modules.assessment.ui.AssessmentToolContainer;
 import org.olat.modules.assessment.ui.AssessmentToolSecurityCallback;
 import org.olat.modules.portfolio.handler.BinderTemplateResource;
 import org.olat.modules.portfolio.ui.PortfolioAssessmentDetailsController;
-import org.olat.portfolio.manager.EPStructureManager;
 import org.olat.repository.RepositoryEntry;
 import org.springframework.stereotype.Service;
 
@@ -87,18 +85,7 @@ public class PortfolioAssessmentHandler implements AssessmentHandler {
 	}
 
 	private String getReferenceSoftkey(CourseNode courseNode) {
-		String referenceSoftkey = (String)courseNode.getModuleConfiguration().get(PortfolioCourseNodeConfiguration.REPO_SOFT_KEY);
-		if(referenceSoftkey == null) {
-			Long mapKey = (Long)courseNode.getModuleConfiguration().get(PortfolioCourseNodeConfiguration.MAP_KEY);
-			if(mapKey != null) {
-				RepositoryEntry re = CoreSpringFactory.getImpl(EPStructureManager.class)
-						.loadPortfolioRepositoryEntryByMapKey(mapKey);
-				if(re != null) {
-					referenceSoftkey = re.getSoftkey();
-				}
-			}
-		}
-		return referenceSoftkey;
+		return (String)courseNode.getModuleConfiguration().get(PortfolioCourseNodeConfiguration.REPO_SOFT_KEY);
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/course/nodes/portfolio/PortfolioConfigForm.java b/src/main/java/org/olat/course/nodes/portfolio/PortfolioConfigForm.java
index 589795eb87fbe930463e3b0df4cc261013e1febd..e20ae4488640e6ff869dce5218185c2c4dd2a19f 100644
--- a/src/main/java/org/olat/course/nodes/portfolio/PortfolioConfigForm.java
+++ b/src/main/java/org/olat/course/nodes/portfolio/PortfolioConfigForm.java
@@ -36,10 +36,7 @@ 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.generic.closablewrapper.CloseableModalController;
-import org.olat.core.id.OLATResourceable;
 import org.olat.core.util.StringHelper;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.course.CourseModule;
 import org.olat.course.ICourse;
 import org.olat.course.nodes.CourseNodeFactory;
 import org.olat.course.nodes.PortfolioCourseNode;
@@ -51,13 +48,6 @@ import org.olat.modules.portfolio.BinderSecurityCallbackFactory;
 import org.olat.modules.portfolio.PortfolioService;
 import org.olat.modules.portfolio.handler.BinderTemplateResource;
 import org.olat.modules.portfolio.ui.BinderController;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.EPSecurityCallbackImpl;
-import org.olat.portfolio.EPTemplateMapResource;
-import org.olat.portfolio.EPUIFactory;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.manager.EPStructureManager;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.controllers.ReferencableEntriesSearchController;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -68,11 +58,12 @@ import org.springframework.beans.factory.annotation.Autowired;
  */
 public class PortfolioConfigForm extends FormBasicController {
 
+	private static final String[] BINDER_RESOURCE = new String[]{ BinderTemplateResource.TYPE_NAME};
+
 	private final ModuleConfiguration config;
 
 	private boolean inUse;
 	private Binder binder;
-	private PortfolioStructureMap map;
 	private RepositoryEntry mapEntry;
 	
 	private ReferencableEntriesSearchController searchController;
@@ -90,10 +81,6 @@ public class PortfolioConfigForm extends FormBasicController {
 	private final PortfolioCourseNode courseNode;
 	private final BreadcrumbPanel stackPanel;
 	
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	@Autowired
-	private EPStructureManager eSTMgr;
 	@Autowired
 	private PortfolioService portfolioService;
 	
@@ -112,14 +99,6 @@ public class PortfolioConfigForm extends FormBasicController {
 				if (binder != null) {
 					inUse = portfolioService.isTemplateInUse(binder, courseEntry, courseNode.getIdent());
 				}
-			} else {
-			
-				map = (PortfolioStructureMap) ePFMgr.loadPortfolioStructure(mapEntry.getOlatResource());
-				Long courseResId = course.getResourceableId();
-				OLATResourceable courseOres = OresHelper.createOLATResourceableInstance(CourseModule.class, courseResId);
-				if (map != null) {
-					inUse = ePFMgr.isTemplateInUse(map, courseOres, courseNode.getIdent(), null);
-				}
 			}
 		}
 		
@@ -133,13 +112,13 @@ public class PortfolioConfigForm extends FormBasicController {
 
 		String name = getName(mapEntry);
 		mapNameElement = uifactory.addStaticTextElement("map-name", "selected.map", name, formLayout);
-		mapNameElement.setVisible(map == null && binder == null);
+		mapNameElement.setVisible(binder == null);
 		
 		previewMapLink = uifactory.addFormLink("preview", "selected.map", "selected.map", formLayout, Link.LINK);
 		previewMapLink.setCustomEnabledLinkCSS("o_preview");
 		previewMapLink.setIconLeftCSS("o_icon o_icon-fw o_icon_preview");
 		previewMapLink.getComponent().setCustomDisplayText(name);
-		previewMapLink.setVisible(map != null || binder != null);
+		previewMapLink.setVisible(binder != null);
 		previewMapLink.setElementCssClass("o_sel_preview_map");
 		
 		if(formLayout instanceof FormLayoutContainer) {
@@ -155,20 +134,18 @@ public class PortfolioConfigForm extends FormBasicController {
 			editMapLink = uifactory.addFormLink("edit.map", buttonGroupLayout, Link.BUTTON);
 			editMapLink.setElementCssClass("o_sel_edit_map");
 			
-			chooseMapLink.setVisible(map == null && binder == null);
+			chooseMapLink.setVisible(binder == null);
 			chooseMapLink.setEnabled(!inUse);
 			chooseMapLink.setTextReasonForDisabling(translate("select.map.disabled.msg"));
-			changeMapLink.setVisible(map != null || binder != null);
+			changeMapLink.setVisible(binder != null);
 			changeMapLink.setEnabled(!inUse);
 			changeMapLink.setTextReasonForDisabling(translate("select.map.disabled.msg"));
-			editMapLink.setVisible(map != null || binder != null);
+			editMapLink.setVisible(binder != null);
 		}
 	}
 	
 	protected ModuleConfiguration getUpdatedConfig() {
-		if(map != null) {
-			PortfolioCourseNodeEditController.setReference(mapEntry, map, config);
-		} else if(binder != null) {
+		if(binder != null) {
 			PortfolioCourseNodeEditController.setReference(mapEntry, config);
 		}
 		return config;
@@ -203,9 +180,6 @@ public class PortfolioConfigForm extends FormBasicController {
 		}
 	}
 	
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
 	@Override
 	protected void event(UserRequest ureq, Controller source, Event event) {
 		super.event(ureq, source, event);
@@ -240,9 +214,8 @@ public class PortfolioConfigForm extends FormBasicController {
 		removeAsListenerAndDispose(searchController);
 		removeAsListenerAndDispose(cmc);
 		
-		searchController = new ReferencableEntriesSearchController(getWindowControl(), ureq,
-				new String[]{ EPTemplateMapResource.TYPE_NAME, BinderTemplateResource.TYPE_NAME},
-				translate("select.map2"), false, true, false, false, false);			
+		searchController = new ReferencableEntriesSearchController(getWindowControl(), ureq, BINDER_RESOURCE,
+				translate("select.map2"), false, true, false, false, false);
 		listenTo(searchController);
 		
 		cmc = new CloseableModalController(getWindowControl(), translate("close"), searchController.getInitialComponent(), true, translate("select.map"));
@@ -254,10 +227,7 @@ public class PortfolioConfigForm extends FormBasicController {
 		removeAsListenerAndDispose(previewCtr);
 		removeAsListenerAndDispose(columnLayoutCtr);
 		
-		if(map != null) {
-			EPSecurityCallback secCallback = new EPSecurityCallbackImpl(false, true);
-			previewCtr = EPUIFactory.createPortfolioStructureMapPreviewController(ureq, getWindowControl(), map, secCallback);
-		} else if(binder != null && stackPanel instanceof TooledStackedPanel) {
+		if(binder != null && stackPanel instanceof TooledStackedPanel) {
 			BinderSecurityCallback secCallback = BinderSecurityCallbackFactory.getReadOnlyCallback();
 			BinderConfiguration bConfig = BinderConfiguration.createTemplateConfig(false);
 			previewCtr = new BinderController(ureq, getWindowControl(), (TooledStackedPanel)stackPanel, secCallback, binder, bConfig);
@@ -277,25 +247,21 @@ public class PortfolioConfigForm extends FormBasicController {
 		if (mapEntry != null) {
 			if(BinderTemplateResource.TYPE_NAME.equals(mapEntry.getOlatResource().getResourceableTypeName())) {
 				binder = portfolioService.getBinderByResource(mapEntry.getOlatResource());
-				map = null;
-			} else {
-				map = (PortfolioStructureMap)eSTMgr.loadPortfolioStructure(mapEntry.getOlatResource());
-				binder = null;
 			}
 		}
 		String name = getName(mapEntry);
 		mapNameElement.setValue(name);
-		mapNameElement.setVisible(map == null && binder == null);
+		mapNameElement.setVisible(binder == null);
 		
-		previewMapLink.setVisible(map != null || binder != null);
+		previewMapLink.setVisible(binder != null);
 		previewMapLink.getComponent().setCustomDisplayText(name);
 		previewMapLink.getComponent().setDirty(true);
 		
-		chooseMapLink.setVisible(map == null && binder == null);
-		changeMapLink.setVisible(map != null || binder != null);
-		editMapLink.setVisible(map != null || binder != null);
+		chooseMapLink.setVisible(binder == null);
+		changeMapLink.setVisible(binder != null);
+		editMapLink.setVisible(binder != null);
 		
-		mapNameElement.setVisible(map == null && binder == null);
+		mapNameElement.setVisible(binder == null);
 		flc.setDirty(true);
 	}
 	
diff --git a/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeConfiguration.java
index 9862341fed29de4004269cb13c9a7844a2e7bb11..ba0827e751ef08d9bc566a173a7433277e59e95b 100644
--- a/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeConfiguration.java
+++ b/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeConfiguration.java
@@ -32,7 +32,6 @@ import org.olat.course.nodes.CourseNodeConfiguration;
 import org.olat.course.nodes.CourseNodeGroup;
 import org.olat.course.nodes.PortfolioCourseNode;
 import org.olat.modules.portfolio.PortfolioV2Module;
-import org.olat.portfolio.PortfolioModule;
 
 /**
  * Initial Date:  6 oct. 2010 <br>
@@ -84,11 +83,8 @@ public class PortfolioCourseNodeConfiguration extends AbstractCourseNodeConfigur
 		return "o_ep_icon";
 	}
 
-	/**
-	 * @see org.olat.core.configuration.AbstractConfigOnOff#isEnabled()
-	 */
 	@Override
 	public boolean isEnabled() {
-		return CoreSpringFactory.getImpl(PortfolioModule.class).isEnabled() || CoreSpringFactory.getImpl(PortfolioV2Module.class).isEnabled();
+		return CoreSpringFactory.getImpl(PortfolioV2Module.class).isEnabled();
 	}
 }
diff --git a/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeEditController.java b/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeEditController.java
index b6f452d3ac57c014025e462a3db18aab4aecd373..1efef8ef2529176243b194cd90b38af4fc798ee4 100644
--- a/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeEditController.java
+++ b/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeEditController.java
@@ -39,7 +39,6 @@ import org.olat.course.nodes.MSCourseNode;
 import org.olat.course.nodes.PortfolioCourseNode;
 import org.olat.course.nodes.ms.MSEditFormController;
 import org.olat.modules.ModuleConfiguration;
-import org.olat.portfolio.model.structel.PortfolioStructure;
 import org.olat.repository.RepositoryEntry;
 
 /**
@@ -181,13 +180,6 @@ public class PortfolioCourseNodeEditController extends ActivateableTabbableDefau
 		moduleConfig.remove(PortfolioCourseNodeConfiguration.REPO_SOFT_KEY);
 	}
 	
-	public static void setReference(RepositoryEntry repoEntry, PortfolioStructure map, ModuleConfiguration moduleConfig) {
-		moduleConfig.set(PortfolioCourseNodeConfiguration.MAP_KEY, map.getKey());
-		if(repoEntry != null && repoEntry.getSoftkey() != null) {
-			moduleConfig.set(PortfolioCourseNodeConfiguration.REPO_SOFT_KEY, repoEntry.getSoftkey());
-		}
-	}
-	
 	public static void setReference(RepositoryEntry repoEntry, ModuleConfiguration moduleConfig) {
 		if(repoEntry != null && repoEntry.getSoftkey() != null) {
 			moduleConfig.set(PortfolioCourseNodeConfiguration.REPO_SOFT_KEY, repoEntry.getSoftkey());
diff --git a/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeRunController.java b/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeRunController.java
index c74fe901641acf3bca13ba6312ff761dfde15abc..5015cb81f6f0c7d287960da5f832f98ec0414615 100644
--- a/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeRunController.java
+++ b/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeRunController.java
@@ -43,15 +43,12 @@ import org.olat.core.gui.control.generic.messages.MessageController;
 import org.olat.core.gui.control.generic.messages.MessageUIFactory;
 import org.olat.core.gui.control.generic.modal.DialogBoxController;
 import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
-import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.context.BusinessControl;
 import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
 import org.olat.core.util.Formatter;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.prefs.Preferences;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.course.CourseModule;
 import org.olat.course.assessment.AssessmentHelper;
 import org.olat.course.assessment.AssessmentManager;
 import org.olat.course.assessment.CourseAssessmentService;
@@ -71,20 +68,11 @@ import org.olat.modules.portfolio.BinderStatus;
 import org.olat.modules.portfolio.PortfolioLoggingAction;
 import org.olat.modules.portfolio.PortfolioService;
 import org.olat.modules.portfolio.handler.BinderTemplateResource;
-import org.olat.portfolio.EPLoggingAction;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
 import org.olat.repository.RepositoryEntry;
 import org.olat.util.logging.activity.LoggingResourceable;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
- * 
- * Description:<br>
- * Portfolio run controller. You can take a map if you are in some learning
- * groups of the course. The controller check if there is a deadline for
- * the map and if yes, set it.
  * 
  * <P>
  * Initial Date:  6 oct. 2010 <br>
@@ -92,15 +80,11 @@ import org.springframework.beans.factory.annotation.Autowired;
  */
 public class PortfolioCourseNodeRunController extends FormBasicController {
 
-	private PortfolioStructureMap copyMap;
-	private PortfolioStructureMap templateMap;
-	
 	private Binder copyBinder;
 	private Binder templateBinder;
 	
 	private final PortfolioCourseNode courseNode;
 	private final ModuleConfiguration config;
-	private final OLATResourceable courseOres;
 	
 	private FormLink newMapLink;
 	private FormLink selectMapLink;
@@ -112,8 +96,6 @@ public class PortfolioCourseNodeRunController extends FormBasicController {
 	private Formatter formatter;
 	private final UserCourseEnvironment userCourseEnv;
 	
-	@Autowired
-	private EPFrontendManager ePFMgr;
 	@Autowired
 	private PortfolioService portfolioService;
 	@Autowired
@@ -127,17 +109,12 @@ public class PortfolioCourseNodeRunController extends FormBasicController {
 		this.config = courseNode.getModuleConfiguration();
 		this.userCourseEnv = userCourseEnv;
 		
-		Long courseResId = userCourseEnv.getCourseEnvironment().getCourseResourceableId();
-		courseOres = OresHelper.createOLATResourceableInstance(CourseModule.class, courseResId);
-		
 		formatter = Formatter.getInstance(getLocale());
 		
 		RepositoryEntry mapEntry = courseNode.getReferencedRepositoryEntry();
 		if(mapEntry != null) {
 			if(BinderTemplateResource.TYPE_NAME.equals(mapEntry.getOlatResource().getResourceableTypeName())) {
 				templateBinder = portfolioService.getBinderByResource(mapEntry.getOlatResource());
-			} else {
-				templateMap = (PortfolioStructureMap) ePFMgr.loadPortfolioStructure(mapEntry.getOlatResource());
 			}
 		}
 
@@ -148,9 +125,7 @@ public class PortfolioCourseNodeRunController extends FormBasicController {
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		if (userCourseEnv.isAdmin() || userCourseEnv.isCoach()) {
 			String title = "";
-			if(templateMap != null) {
-				title = StringHelper.escapeHtml(templateMap.getTitle());
-			} else if(templateBinder != null) {
+			if(templateBinder != null) {
 				title = StringHelper.escapeHtml(templateBinder.getTitle());
 			}
 			MessageController coachMessage = MessageUIFactory.createInfoMessage(ureq, getWindowControl(),
@@ -197,7 +172,7 @@ public class PortfolioCourseNodeRunController extends FormBasicController {
 			deadlineDateText = uifactory.addStaticTextElement("deadline", deadLineLabel, deadLineInfo, infosContainer);			
 		}
 		
-		if(templateMap != null || templateBinder != null) {
+		if(templateBinder != null) {
 			updateUI(ureq);
 		}
 	}
@@ -218,35 +193,31 @@ public class PortfolioCourseNodeRunController extends FormBasicController {
 	}
 	
 	protected void updateUI(UserRequest ureq) {
-		if(templateMap != null) {
-			copyMap = ePFMgr.loadPortfolioStructureMap(getIdentity(), templateMap, courseOres, courseNode.getIdent(), null);
-		} else if(templateBinder != null) {
+		if(templateBinder != null) {
 			RepositoryEntry courseEntry = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
 			copyBinder = portfolioService.getBinder(getIdentity(), templateBinder, courseEntry, courseNode.getIdent());
 		}
 		
-		if(copyMap == null && (copyBinder == null || copyBinder.getBinderStatus() == BinderStatus.deleted)) {
+		if(copyBinder == null || copyBinder.getBinderStatus() == BinderStatus.deleted) {
 			updateEmptyUI();
 		} else {
 			updateSelectedUI(ureq);
 		}	
 
 		if(selectMapLink != null) {
-			selectMapLink.setVisible(copyMap != null || (copyBinder != null && copyBinder.getBinderStatus() != BinderStatus.deleted));
+			selectMapLink.setVisible(copyBinder != null && copyBinder.getBinderStatus() != BinderStatus.deleted);
 		}
 		if(newMapLink != null) {
-			newMapLink.setVisible(copyMap == null && (copyBinder == null || copyBinder.getBinderStatus() == BinderStatus.deleted));
+			newMapLink.setVisible(copyBinder == null || copyBinder.getBinderStatus() == BinderStatus.deleted);
 		}
 		if(newMapMsgEl != null) {
-			newMapMsgEl.setVisible(copyMap == null && (copyBinder == null || copyBinder.getBinderStatus() == BinderStatus.deleted));
+			newMapMsgEl.setVisible(copyBinder == null || copyBinder.getBinderStatus() == BinderStatus.deleted);
 		}
 	}
 	
 	private void updateEmptyUI() {
 		String title = "";
-		if(templateMap != null) {
-			title = StringHelper.escapeHtml(templateMap.getTitle());
-		} else if(templateBinder != null) {
+		if(templateBinder != null) {
 			title = StringHelper.escapeHtml(templateBinder.getTitle());
 		}
 
@@ -273,9 +244,7 @@ public class PortfolioCourseNodeRunController extends FormBasicController {
 			selectMapLink.setVisible(true);
 		}
 		
-		if(copyMap != null) {
-			updateSelectedMapUI(ureq);
-		} else if(copyBinder != null) {
+		if(copyBinder != null) {
 			updateSelectedBinderUI(ureq);
 		}
 	}
@@ -288,17 +257,6 @@ public class PortfolioCourseNodeRunController extends FormBasicController {
 		updateAssessmentInfos(ureq, copyBinder.getReturnDate());
 		updateDeadlineText(copyBinder.getDeadLine());
 	}
-
-	private void updateSelectedMapUI(UserRequest ureq) {	
-		String copyTitle = StringHelper.escapeHtml(copyMap.getTitle());
-		selectMapLink.getComponent().setCustomDisplayText(copyTitle);
-		
-		// show results, when already handed in
-		EPStructuredMap structuredMap = (EPStructuredMap)copyMap;
-		updateCopyDate(structuredMap.getCopyDate());
-		updateAssessmentInfos(ureq, structuredMap.getReturnDate());
-		updateDeadlineText(structuredMap.getDeadLine());
-	}
 	
 	private void updateCopyDate(Date copyDate) {
 		if(copyDate != null) {
@@ -405,14 +363,7 @@ public class PortfolioCourseNodeRunController extends FormBasicController {
 		if(source == newMapLink) {
 			RepositoryEntry courseEntry = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
 			Date deadline = courseNode.getDeadline();
-			if(templateMap != null) {
-				copyMap = ePFMgr.assignStructuredMapToUser(getIdentity(), templateMap, courseEntry, courseNode.getIdent(), null, deadline);
-				if(copyMap != null) {
-					showInfo("map.copied", StringHelper.escapeHtml(templateMap.getTitle()));
-					ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapPortfolioOres(copyMap));
-					ThreadLocalUserActivityLogger.log(EPLoggingAction.EPORTFOLIO_TASK_STARTED, getClass());
-				}
-			} else if(templateBinder != null) {
+			if(templateBinder != null) {
 				if(copyBinder == null) {
 					copyBinder = portfolioService.assignBinder(getIdentity(), templateBinder, courseEntry, courseNode.getIdent(), deadline);
 					if(copyBinder != null) {
@@ -432,9 +383,7 @@ public class PortfolioCourseNodeRunController extends FormBasicController {
 			updateUI(ureq);
 		} else if (source == selectMapLink) {
 			String resourceUrl;
-			if(copyMap != null) {
-				resourceUrl = "[HomeSite:" + getIdentity().getKey() + "][Portfolio:0][EPStructuredMap:" + copyMap.getKey() + "]";
-			} else if(copyBinder != null) {
+			 if(copyBinder != null) {
 				resourceUrl = "[HomeSite:" + getIdentity().getKey() + "][PortfolioV2:0][MyBinders:0][Binder:" + copyBinder.getKey() + "]";
 			} else {
 				return;
diff --git a/src/main/java/org/olat/course/nodes/portfolio/PortfolioResultDetailsController.java b/src/main/java/org/olat/course/nodes/portfolio/PortfolioResultDetailsController.java
index fe0291634dd0f54fc4f5cefcf2ed72759e24bb54..5bb2cb14f7377a4cd84a8c1e34039a4eebc444dc 100644
--- a/src/main/java/org/olat/course/nodes/portfolio/PortfolioResultDetailsController.java
+++ b/src/main/java/org/olat/course/nodes/portfolio/PortfolioResultDetailsController.java
@@ -24,13 +24,10 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.olat.core.commons.fullWebApp.LayoutMain3ColsBackController;
-import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItem;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.elements.FormLink;
-import org.olat.core.gui.components.form.flexible.elements.StaticTextElement;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormEvent;
 import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
@@ -38,15 +35,10 @@ import org.olat.core.gui.components.link.Link;
 import org.olat.core.gui.components.stack.BreadcrumbPanel;
 import org.olat.core.gui.components.stack.TooledStackedPanel;
 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.generic.closablewrapper.CloseableCalloutWindowController;
 import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
 import org.olat.core.util.Formatter;
 import org.olat.core.util.StringHelper;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.course.CourseModule;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.modules.portfolio.Binder;
@@ -57,12 +49,6 @@ import org.olat.modules.portfolio.PortfolioService;
 import org.olat.modules.portfolio.handler.BinderTemplateResource;
 import org.olat.modules.portfolio.model.AccessRights;
 import org.olat.modules.portfolio.ui.BinderController;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.EPSecurityCallbackImpl;
-import org.olat.portfolio.EPUIFactory;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
 import org.olat.repository.RepositoryEntry;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -79,20 +65,13 @@ public class PortfolioResultDetailsController extends FormBasicController {
 
 	private Identity assessedIdentity;
 	
-	private PortfolioStructureMap templateMap;
-	private List<PortfolioStructureMap> maps;
 	private Binder templateBinder;
 	private List<Binder> binders;
 	
-	private Map<PortfolioStructureMap, MapElements> mapToElements = new HashMap<>();
 	private Map<Binder, MapElements> binderToElements = new HashMap<>();
 	
-	private DeadlineController deadlineCtr;
-	private CloseableCalloutWindowController deadlineCalloutCtr;
 	private final BreadcrumbPanel stackPanel;
 	
-	@Autowired
-	private EPFrontendManager ePFMgr;
 	@Autowired
 	private PortfolioService portfolioService;
 	
@@ -109,11 +88,6 @@ public class PortfolioResultDetailsController extends FormBasicController {
 				templateBinder = portfolioService.getBinderByResource(mapEntry.getOlatResource());
 				RepositoryEntry courseEntry = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
 				binders = portfolioService.getBinders(assessedIdentity, courseEntry, courseNode.getIdent());
-			} else {
-				templateMap = (PortfolioStructureMap)ePFMgr.loadPortfolioStructure(mapEntry.getOlatResource());
-				Long courseResId = userCourseEnv.getCourseEnvironment().getCourseResourceableId();
-				OLATResourceable courseOres = OresHelper.createOLATResourceableInstance(CourseModule.class, courseResId);
-				maps = ePFMgr.loadPortfolioStructureMaps(assessedIdentity, courseOres, courseNode.getIdent(), null);
 			}
 		}
 
@@ -122,67 +96,13 @@ public class PortfolioResultDetailsController extends FormBasicController {
 
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		if((maps == null || maps.isEmpty()) && (binders == null || binders.isEmpty())) {
+		if(binders == null || binders.isEmpty()) {
 			uifactory.addStaticTextElement("no.map", "", formLayout);
-		} else if(maps != null && maps.size() > 0) {
-			initMapsForm(formLayout);
 		} else if(binders != null && binders.size() > 0) {
 			initBindersForm(formLayout);
 		}
 	}
 	
-	protected void initMapsForm(FormItemContainer formLayout) {
-		Formatter formatter = Formatter.getInstance(getLocale());
-		
-		int count = 0;
-		for(PortfolioStructureMap map:maps) {
-			MapElements mapElements = new MapElements();
-			if(map instanceof EPStructuredMap) {
-				EPStructuredMap structuredMap = (EPStructuredMap)map;
-				
-				if(maps.size() > 1 || !structuredMap.getStructuredMapSource().equals(templateMap)) {
-					String templateTitle = structuredMap.getStructuredMapSource().getTitle();
-					uifactory.addStaticTextElement("map.template." + count, "map.template", templateTitle, formLayout);
-				}
-				
-				String copyDate = "";
-				if(structuredMap.getCopyDate() != null) {
-					copyDate = formatter.formatDateAndTime(structuredMap.getCopyDate());
-				}
-				uifactory.addStaticTextElement("map.copyDate." + count, "map.copyDate", copyDate, formLayout);
-				
-				String returnDate = "";
-				if(structuredMap.getReturnDate() != null) {
-					returnDate = formatter.formatDateAndTime(structuredMap.getReturnDate());
-				}
-				uifactory.addStaticTextElement("map.returnDate." + count, "map.returnDate", returnDate, formLayout);
-				
-				String deadLine = "";
-				if(structuredMap.getDeadLine() != null) {
-					deadLine = formatter.formatDateAndTime(structuredMap.getDeadLine());
-				}
-				mapElements.deadlineEl = uifactory.addStaticTextElement("map.deadline." + count, "map.deadline", deadLine, formLayout);
-			}
-			
-			FormLayoutContainer buttonsCont = FormLayoutContainer.createButtonLayout("buttons." + count, getTranslator());
-			buttonsCont.setRootForm(mainForm);
-			formLayout.add(buttonsCont);
-			if(map instanceof EPStructuredMap) {
-				mapElements.changeDeadlineLink = uifactory.addFormLink("map.deadline.change." + count, "map.deadline.change", null, buttonsCont, Link.BUTTON);
-				mapElements.changeDeadlineLink.setUserObject(map);
-			}
-			mapElements.openMapLink = uifactory.addFormLink("open.map." + count, "open.map", null, buttonsCont, Link.BUTTON);
-			mapElements.openMapLink.setUserObject(map);
-			
-			count++;
-			if(count != maps.size()) {
-				uifactory.addSpacerElement("spacer-" + count, formLayout, false);
-			}
-			
-			mapToElements.put(map, mapElements);
-		}
-	}
-	
 	protected void initBindersForm(FormItemContainer formLayout) {
 		Formatter formatter = Formatter.getInstance(getLocale());
 		
@@ -237,40 +157,15 @@ public class PortfolioResultDetailsController extends FormBasicController {
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		if(source instanceof FormLink) {
 			FormLink link = (FormLink)source;
-			String cmd = link.getCmd();
-			if(cmd != null && cmd.startsWith("map.deadline.change")) {
-				if (deadlineCalloutCtr == null) {
-					EPStructuredMap map = (EPStructuredMap)link.getUserObject();
-					popupDeadlineBox(ureq, map);
-				} else {
-					// close on second click
-					closeDeadlineBox();
-				}
-			} else if(link.getName().startsWith("open.map")) {
-				PortfolioStructureMap map = (PortfolioStructureMap)link.getUserObject();
-				doOpenMap(ureq, map);
-			} else if(link.getName().startsWith("open.binder")) {
-				Binder map = (Binder)link.getUserObject();
-				doOpenMap(ureq, map);
+			if(link.getName().startsWith("open.binder")) {
+				Binder binder = (Binder)link.getUserObject();
+				doOpenBinder(ureq, binder);
 			}
 		} 
 		super.formInnerEvent(ureq, source, event);
 	}
 	
-	private void doOpenMap(UserRequest ureq, PortfolioStructureMap map) {
-		EPSecurityCallback secCallback = new EPSecurityCallbackImpl(false, true);
-		Controller viewCtr = EPUIFactory.createPortfolioStructureMapController(ureq, getWindowControl(), map, secCallback);
-		listenTo(viewCtr);
-		if(stackPanel == null) {
-			LayoutMain3ColsBackController ctr = new LayoutMain3ColsBackController(ureq, getWindowControl(), null, viewCtr.getInitialComponent(), "portfolio" + map.getKey());
-			ctr.activate();
-		} else {
-			LayoutMain3ColsController ctr = new LayoutMain3ColsController(ureq, getWindowControl(), viewCtr);
-			stackPanel.pushController(translate("preview.map"), ctr);
-		}
-	}
-	
-	private void doOpenMap(UserRequest ureq, Binder binder) {
+	private void doOpenBinder(UserRequest ureq, Binder binder) {
 		if(stackPanel instanceof TooledStackedPanel) {
 			binder = portfolioService.getBinderByKey(binder.getKey());
 			portfolioService.updateBinderUserInformations(binder, getIdentity());
@@ -284,58 +179,7 @@ public class PortfolioResultDetailsController extends FormBasicController {
 		}
 	}
 	
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		if (source == deadlineCalloutCtr && event == CloseableCalloutWindowController.CLOSE_WINDOW_EVENT) {
-			removeAsListenerAndDispose(deadlineCalloutCtr);
-			deadlineCalloutCtr = null;
-		} else if (source == deadlineCtr) {
-			String deadLine = "";
-			if(deadlineCtr.getMap() != null) {
-				EPStructuredMap structuredMap = deadlineCtr.getMap();
-				if(structuredMap.getDeadLine() != null) {
-					Formatter formatter = Formatter.getInstance(getLocale());
-					deadLine = formatter.formatDateAndTime(structuredMap.getDeadLine());
-				}
-				mapToElements.get(structuredMap).deadlineEl.setValue(deadLine);
-			}
-			closeDeadlineBox();
-		}
-	}
-	
-	/**
-	 * @param ureq
-	 */
-	private void popupDeadlineBox(UserRequest ureq, EPStructuredMap map) {
-		String title = translate("map.deadline.change");
-		
-		removeAsListenerAndDispose(deadlineCtr);
-		deadlineCtr = new DeadlineController(ureq, getWindowControl(), map);
-		listenTo(deadlineCtr);
-
-		removeAsListenerAndDispose(deadlineCalloutCtr);
-		FormLink changeDeadlineLink = mapToElements.get(map).changeDeadlineLink;
-		deadlineCalloutCtr = new CloseableCalloutWindowController(ureq, getWindowControl(), deadlineCtr.getInitialComponent(),
-				changeDeadlineLink, title, true, "o_ep_deadline_callout");
-		listenTo(deadlineCalloutCtr);
-		deadlineCalloutCtr.activate();
-	}
-	
-	private void closeDeadlineBox() {
-		if (deadlineCalloutCtr != null){
-			deadlineCalloutCtr.deactivate();
-			removeAsListenerAndDispose(deadlineCalloutCtr);
-			deadlineCalloutCtr = null;
-		}
-	}
-	
 	private static class MapElements {
 		private FormLink openMapLink;
-		private FormLink changeDeadlineLink;
-		private StaticTextElement deadlineEl;
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/portfolio/PortfolioTextForm.java b/src/main/java/org/olat/course/nodes/portfolio/PortfolioTextForm.java
index 1f5d00c9eb4476d098fe9ef5a692cc2812417611..a9360b0f2480e96e084ee0791b2ba4507134ef4c 100644
--- a/src/main/java/org/olat/course/nodes/portfolio/PortfolioTextForm.java
+++ b/src/main/java/org/olat/course/nodes/portfolio/PortfolioTextForm.java
@@ -36,11 +36,8 @@ 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.id.OLATResourceable;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.course.CourseModule;
 import org.olat.course.ICourse;
 import org.olat.course.nodes.PortfolioCourseNode;
 import org.olat.course.nodes.portfolio.PortfolioCourseNodeConfiguration.DeadlineType;
@@ -48,8 +45,6 @@ import org.olat.modules.ModuleConfiguration;
 import org.olat.modules.portfolio.Binder;
 import org.olat.modules.portfolio.PortfolioService;
 import org.olat.modules.portfolio.handler.BinderTemplateResource;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
 import org.olat.repository.RepositoryEntry;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -78,8 +73,6 @@ public class PortfolioTextForm extends FormBasicController {
 	private final PortfolioCourseNode courseNode;
 	private final RepositoryEntry courseEntry;
 	
-	@Autowired
-	private EPFrontendManager ePFMgr;
 	@Autowired
 	private PortfolioService portfolioService;
 	
@@ -100,15 +93,6 @@ public class PortfolioTextForm extends FormBasicController {
 					inUse = portfolioService.isTemplateInUse(binder, courseEntry, courseNode.getIdent());
 				}
 				withDeadline = false;
-			} else {
-				PortfolioStructureMap template = (PortfolioStructureMap)ePFMgr.loadPortfolioStructure(mapEntry.getOlatResource());
-				Long courseResId = courseEntry.getOlatResource().getResourceableId();
-				OLATResourceable courseOres = OresHelper
-						.createOLATResourceableInstance(CourseModule.class, courseResId);
-				if (template != null) {
-					inUse = ePFMgr.isTemplateInUse(template, courseOres, courseNode.getIdent(), null);
-				}
-				withDeadline = true;
 			}
 		} else {
 			withDeadline = true;
diff --git a/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_de.properties
index 61c818d21b4ece70c867c91d38dc5c92c1d824ec..0b9a74771518c3ac13867ff140101afb02cd45eb 100644
--- a/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_de.properties
@@ -9,6 +9,7 @@ error.fully.assessed.passed=$org.olat.course.learningpath.ui:\error.fully.assess
 error.fully.assessed.score=$org.olat.course.learningpath.ui:\error.fully.assessed.score
 error.noreference.long=F\u00FCr "{0}" muss in der Konfiguration eine Portfoliovorlage im Tab "Lerninhalt" ausgew\u00E4hlt werden.
 error.noreference.short=Es ist noch keine Portfoliovorlage f\u00FCr "{0}" ausgew\u00E4hlt.
+error.portfolioV1=Das Portfolio V1 wird nicht mehr unterst\u00FCtzt
 pane.tab.highscore=HighScore
 explanation.text=Mitteilung an Benutzer
 info.coach.title=Portfolioaufgabe
@@ -21,9 +22,7 @@ map.deadline=Abgabetermin
 map.deadline.absolut=Fix
 map.deadline.absolut.label=$\:map.deadline am
 map.deadline.change=$\:map.deadline verschieben
-map.deadline.change.description=Sie k\u00F6nnen den Abgabetermin dieser Mappe verschieben. Eine allenfalls bereits abgegebene Sammelmappe kann danach wieder bearbeitet werden.
 map.deadline.change.template.in.use=Diese $\:title_info wird bereits verwendet. Sie k\u00F6nnen den $\:map.deadline \u00E4ndern, dies betrifft jedoch nur solche Benutzer, welche die Aufgabe noch nicht abgeholt haben.
-map.deadline.change.title=$\:map.deadline verschieben
 map.deadline.info={0}{1}{2}nach dem Abholen der Portfolioaufgabe.
 map.deadline.info.day={0} $\:deadline.day 
 map.deadline.info.month={0} $\:deadline.month, 
diff --git a/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_en.properties
index 737f04b0b81ad1871f1132770723ca7f193443a8..972011a9ce063a28b74b1d176d299cb9aa81ac78 100644
--- a/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_en.properties
@@ -24,6 +24,7 @@ error.fully.assessed.passed=$org.olat.course.learningpath.ui:\error.fully.assess
 error.fully.assessed.score=$org.olat.course.learningpath.ui:\error.fully.assessed.score
 error.noreference.long=For "{0}" you have to select a portfolio template in the tab "Learning content" in your configuration first.
 error.noreference.short=No portfolio template selected for "{0}"
+error.portfolioV1=Portfolio V1 is not supported anymore.
 explanation.text=Message for users
 info.coach.title=Portfolio task
 info.coach.text=The course participants have to perform the portfolio task "{0}".
@@ -35,9 +36,7 @@ map.deadline=Deadline
 map.deadline.absolut=Fix
 map.deadline.absolut.label=$\:map.deadline on
 map.deadline.change=Change $\:map.deadline
-map.deadline.change.description=You can change the deadline of this binder. If there is an binder already submitted it will again be possible to edit it.
 map.deadline.change.template.in.use=This $\:title_info is already in use. You can change its $\:map.deadline; however, this will only affect those users who haven't yet collected this task.
-map.deadline.change.title=Change $\:map.deadline
 map.deadline.info={0}{1}{2} after collecting this portfolio task.
 map.deadline.info.day={0} $\:deadline.day 
 map.deadline.info.month={0} $\:deadline.month, 
diff --git a/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_fr.properties
index e342c14860b72e9cad40899626b11d3e1d416cbe..8d4592e8cf3e25686e32eb8b58f45c0f4f6e30b2 100644
--- a/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_fr.properties
@@ -18,9 +18,7 @@ map.deadline=D\u00E9lai de remise
 map.deadline.absolut=Fixe
 map.deadline.absolut.label=$\:map.deadline le
 map.deadline.change=Reporter le $\:map.deadline
-map.deadline.change.description=Vous pouvez reporter le d\u00E9lai de remise de ce classeur. Un classeur d\u00E9j\u00E0 remis pourra \u00EAtre modifi\u00E9 \u00E0 nouveau.
 map.deadline.change.template.in.use=Ce $\:title_info est d\u00E9j\u00E0 utilis\u00E9. Vous pouvez modifier le $\:map.deadline, mais seulement pour les participants qui n'ont pas encore pr\u00E9lev\u00E9 le devoir.
-map.deadline.change.title=Reporter le $\:map.deadline
 map.deadline.info={0}{1}{2} apr\u00E8s le pr\u00E9l\u00E8vement du devoir portfolio.
 map.deadline.info.day={0} $\:deadline.day 
 map.deadline.info.month={0} $\:deadline.month, 
diff --git a/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_it.properties
index 9aa1ead62cf8a2002f92d2a2c730c2d1c2122f92..fa10002922b7cbfd273baff1f82206dec54b4ac9 100644
--- a/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_it.properties
@@ -15,9 +15,7 @@ map.deadline=Termine di consegna
 map.deadline.absolut=Fisso
 map.deadline.absolut.label=$\:map.deadline il
 map.deadline.change=Rinviare il $\:map.deadline
-map.deadline.change.description=Pu\u00F2 rinviare il termine di consegna di questo raccoglitore. Un raccoglitore gi\u00E0 consegnato potr\u00E0 essere nuovamente elaborato.
 map.deadline.change.template.in.use=Questo $\:title_info viene gi\u00E0 utilizzato. Pu\u00F2 modificare il $\:map.deadline, ma soltanto per i partecipanti che non hanno ancora prelevato il compito.
-map.deadline.change.title=Rinviare il $\:map.deadline
 map.deadline.info={0}{1}{2} dopo il prelevamento del compito portfolio.
 map.deadline.info.day={0} $\:deadline.day 
 map.deadline.info.month={0} $\:deadline.month, 
diff --git a/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_nl_NL.properties
index 9f163e8eef4ebbe65bae70919e79bc3560240634..1903c2c8042b1dbdef2d7b8c6408abaa52de886c 100644
--- a/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_nl_NL.properties
@@ -29,9 +29,7 @@ map.deadline=Deadline
 map.deadline.absolut=Fix
 map.deadline.absolut.label=$\:map.deadline op
 map.deadline.change=Verander $\:map.deadline
-map.deadline.change.description=U kunt de deadline van deze map veranderen. Als er al een accumulatieve map toegevoegd is, wordt het opnieuw mogelijk om deze te editeren.
 map.deadline.change.template.in.use=Dit $\:title_info is al in gebruik. U kan zijn $\:map.deadline veranderen; hoewel, dit heeft enkel een effect op de gebruikers die deze taak nog niet verzamelt hebben.
-map.deadline.change.title=Verander $\:map.deadline
 map.deadline.info={0}{1}{2} na het verzamelen van deze portfoliotaak.
 map.deadline.info.day={0} $\:deadline.day
 map.deadline.info.month={0} $\:deadline.month,
diff --git a/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_pl.properties
index 53e82a3aa35095e9ad42e196c32d07ee8070ab24..46206dd5f6c5f68d89613efa6a7c8c517fe15537 100644
--- a/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_pl.properties
@@ -26,7 +26,6 @@ map.deadline=Ostateczny termin
 map.deadline.absolut=Sta\u0142y
 map.deadline.absolut.label=Ostateczny termin do
 map.deadline.change=Zmie\u0144 ostateczny termin
-map.deadline.change.title=Zmie\u0144 $\:map.deadline
 map.deadline.none=\u017Baden
 map.deadline.relative=Wzgl\u0119dny
 map.deadline.relative.label=Ostateczny termin w ci\u0105gu
diff --git a/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_pt_BR.properties
index c8b049b7f1c42f46373a72248355102f178585a7..b78e9ff2d9bf2be5f73a528b71eaf9a2a55e3ef7 100644
--- a/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_pt_BR.properties
@@ -16,9 +16,7 @@ map.deadline=Prazo
 map.deadline.absolut=Fixa
 map.deadline.absolut.label=$\:map.deadline em
 map.deadline.change=Mudar $\:map.deadline
-map.deadline.change.description=Voc\u00EA pode alterar o prazo desta pasta. Se houver uma pasta acumulativa j\u00E1 enviada ser\u00E1 poss\u00EDvel edit\u00E1-lo novamente.
 map.deadline.change.template.in.use=Este $\:title_info j\u00E1 est\u00E1 em uso. Voc\u00EA pode alterar o seu $\:map.deadline, no entanto, isto s\u00F3 ir\u00E1 afetar os usu\u00E1rios que ainda n\u00E3o tenham coletado esta tarefa.
-map.deadline.change.title=Mudar $\:map.deadline
 map.deadline.info={0}{1}{2} depois de coletar essa tarefa portfolio.
 map.deadline.info.day={0} $\:deadline.day
 map.deadline.info.month={0} $\:deadline.month,
diff --git a/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java b/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java
index bdc0fdfb47fd6eaa15baa07427d13208c359bb1d..4aea4cec0ede174c4d43d88d333e28ed1200816f 100644
--- a/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java
+++ b/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java
@@ -91,7 +91,6 @@ import org.olat.modules.openmeetings.OpenMeetingsModule;
 import org.olat.modules.portfolio.PortfolioV2Module;
 import org.olat.modules.wiki.WikiManager;
 import org.olat.modules.wiki.WikiModule;
-import org.olat.portfolio.PortfolioModule;
 import org.olat.resource.OLATResource;
 import org.olat.resource.accesscontrol.ACService;
 import org.olat.resource.accesscontrol.AccessControlModule;
@@ -229,8 +228,6 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im
 	@Autowired
 	private InstantMessagingModule imModule;
 	@Autowired
-	private PortfolioModule portfolioModule;
-	@Autowired
 	private PortfolioV2Module portfolioV2Module;
 	@Autowired
 	private OpenMeetingsModule openMeetingsModule;
@@ -892,6 +889,7 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im
 	/**
 	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
 	 */
+	@Override
 	protected void doDispose() {
 		ThreadLocalUserActivityLogger.log(GroupLoggingAction.GROUP_CLOSED, getClass());
 		
@@ -1231,8 +1229,7 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im
 			nodeWiki = gtnChild;
 		}
 			
-		if (collabTools.isToolEnabled(CollaborationTools.TOOL_PORTFOLIO) &&
-				(portfolioModule.isEnabled() || portfolioV2Module.isEnabled())) {
+		if (portfolioV2Module.isEnabled() && collabTools.isToolEnabled(CollaborationTools.TOOL_PORTFOLIO)) {
 			gtnChild = new GenericTreeNode(nodeIdPrefix.concat("eportfolio"));
 			gtnChild.setTitle(translate("menutree.portfolio"));
 			gtnChild.setUserObject(ACTIVITY_MENUSELECT_PORTFOLIO);
diff --git a/src/main/java/org/olat/home/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/home/_i18n/LocalStrings_ar.properties
index b7e55a39b4a71db42e1b15af93ab75668b751d71..d9ccd36e49fd779242ab062a3110979de479893b 100644
--- a/src/main/java/org/olat/home/_i18n/LocalStrings_ar.properties
+++ b/src/main/java/org/olat/home/_i18n/LocalStrings_ar.properties
@@ -32,10 +32,6 @@ menu.notifications=\u0627\u0644\u0625\u062E\u0637\u0627\u0631\u0627\u062A
 menu.notifications.alt=\u0625\u062F\u0627\u0631\u0629 \u0627\u0644\u0625\u062E\u0637\u0627\u0631\u0627\u062A \u0648\u0627\u0644\u0627\u0634\u062A\u0631\u0627\u0643\u0627\u062A \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0649
 menu.otherusers=\u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645\u064A\u0646 \u0627\u0644\u0622\u062E\u0631\u064A\u0646
 menu.otherusers.alt=\u0628\u0637\u0627\u0642\u0627\u062A \u062A\u0639\u0627\u0631\u0641 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645\u064A\u0646 \u0627\u0644\u0622\u062E\u0631\u064A\u0646
-menu.portfolio=\u0628\u0648\u0631\u062A\u0641\u0648\u0644\u064A\u0648
-menu.portfolio.myartefacts=\u0623\u062F\u0648\u0627\u062A\u0649
-menu.portfolio.myartefacts.alt=\u0639\u0631\u0636 \u0648\u0625\u062F\u0627\u0631\u0629 \u0643\u0644 \u0627\u0644\u0623\u062F\u0648\u0627\u062A
-menu.portfolio.mystructuredmaps=\u0645\u0647\u0627\u0645 \u0627\u0644\u0628\u0648\u0631\u062A\u0641\u0648\u0644\u064A\u0648 \u0627\u0644\u062E\u0627\u0635 \u0628\u0649
 warn.session.was.killed=\u0623\u0646\u062A \u062A\u0633\u062A\u062E\u062F\u0645 \u0623\u0648\u0644\u0627\u062A \u0641\u0649 \u0645\u062A\u0635\u0641\u062D \u0622\u062E\u0631\u060C \u0644\u0627 \u064A\u0645\u0643\u0646\u0643 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0645\u0631\u0627\u062A \u0639\u062F\u0629 \u0641\u0649 \u0622\u0646 \u0648\u0627\u062D\u062F\u060C \u062C\u0644\u0633\u062A\u0643 \u0627\u0644\u0633\u0627\u0628\u0642\u0629 \u062A\u0645 \u062A\u062C\u0627\u0647\u0644\u0647\u0627.
 welcome.header=\u0645\u0631\u062D\u0628\u0627 \u0628\u0643 \u0641\u0649 \u0623\u0648\u0644\u0627\u062A
 welcome.intro=<-- -->
diff --git a/src/main/java/org/olat/home/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/home/_i18n/LocalStrings_de.properties
index 2ba24380fb79074588174006a0076aca9406ffe2..38ef72afeb3775c5e9c7518484c7fb13a745aed6 100644
--- a/src/main/java/org/olat/home/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/home/_i18n/LocalStrings_de.properties
@@ -43,16 +43,6 @@ menu.orders=Buchungen
 menu.orders.alt=Meine Buchungen
 menu.otherusers=Andere Benutzer
 menu.otherusers.alt=Visitenkarte anderer Benutzer
-menu.portfolio=ePortfolio
-menu.portfolio.alt=ePortfolio mit Artefakten und Sammelmappen
-menu.portfolio.myartefacts=Meine Artefakte
-menu.portfolio.myartefacts.alt=Alle Artefakte anzeigen und verwalten
-menu.portfolio.mymaps=Meine Sammelmappen
-menu.portfolio.mymaps.alt=Alle meine Sammelmappen anzeigen und verwalten
-menu.portfolio.mystructuredmaps=Meine Portfolioaufgaben
-menu.portfolio.mystructuredmaps.alt=Alle meine Sammelmappen aus einer Portfolioaufgabe anzeigen und verwalten
-menu.portfolio.othermaps=Freigegebene Sammelmappen
-menu.portfolio.othermaps.alt=Von anderen Benutzern f\u00FCr mich freigegebene Sammelmappen
 table.header.ac=$org.olat.repository\:table.header.ac
 table.header.mark=Favorit
 warn.session.was.killed=Sie hatten OpenOlat bereits in einem anderen Browser offen. Man kann sich in OpenOlat nicht gleichzeitig mehrmals einloggen. Ihre bisherige Sitzung wurde beendet. 
diff --git a/src/main/java/org/olat/home/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/home/_i18n/LocalStrings_en.properties
index a8e9c582aee7e088dbaa12e412edff33ece20fbb..b98169e86e925aaf2103b30a483fbd0324c4920c 100644
--- a/src/main/java/org/olat/home/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/home/_i18n/LocalStrings_en.properties
@@ -43,16 +43,6 @@ menu.orders=Bookings
 menu.orders.alt=My bookings
 menu.otherusers=Other users
 menu.otherusers.alt=Visiting card of other users
-menu.portfolio=ePortfolio
-menu.portfolio.alt=ePortfolio with artefacts and binders
-menu.portfolio.myartefacts=My artefacts
-menu.portfolio.myartefacts.alt=Show and manage all artefacts
-menu.portfolio.mymaps=My binders
-menu.portfolio.mymaps.alt=Show and manage all my binders
-menu.portfolio.mystructuredmaps=My portfolio tasks
-menu.portfolio.mystructuredmaps.alt=Show and manage all binders of a portfolio tasks
-menu.portfolio.othermaps=Released binders
-menu.portfolio.othermaps.alt=Binders released for me by others
 table.header.ac=$org.olat.repository\:table.header.ac
 table.header.mark=Favorite
 warn.session.was.killed=You are using OpenOlat in another browser. You cannot log in several times at once. Your previous session has been terminated.
diff --git a/src/main/java/org/olat/home/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/home/_i18n/LocalStrings_fr.properties
index d6834efab3645ece11847f770c6648fa374bd33e..a05688e0b25bb4d494df6d830a3d63613d4f85f9 100644
--- a/src/main/java/org/olat/home/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/home/_i18n/LocalStrings_fr.properties
@@ -43,16 +43,6 @@ menu.orders=R\u00E9servations
 menu.orders.alt=Mes r\u00E9servations
 menu.otherusers=Autres utilisateurs
 menu.otherusers.alt=Carte de visite d'autres utilisateurs
-menu.portfolio=ePortfolio
-menu.portfolio.alt=ePortfolio avec artefacts et classeurs
-menu.portfolio.myartefacts=Mes artefacts
-menu.portfolio.myartefacts.alt=Afficher et g\u00E9rer tous les artefacts
-menu.portfolio.mymaps=Mes classeurs
-menu.portfolio.mymaps.alt=Afficher et g\u00E9rer tous mes classeurs
-menu.portfolio.mystructuredmaps=Mes devoirs portfolio
-menu.portfolio.mystructuredmaps.alt=Afficher et g\u00E9rer tous mes classeurs \u00E0 partir d'un devoir portfolio
-menu.portfolio.othermaps=Classeurs partag\u00E9s
-menu.portfolio.othermaps.alt=Classeurs partag\u00E9s par d'autres utilisateurs
 table.header.ac=$org.olat.repository\:table.header.ac
 table.header.mark=Favori
 vfs.context.homes=$\:menu.bc
diff --git a/src/main/java/org/olat/home/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/home/_i18n/LocalStrings_it.properties
index 1df1ffc8cdb3412902a010a26f940f42b673a9e5..c5ae62429565c5505bfa396ba572f502761d757a 100644
--- a/src/main/java/org/olat/home/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/home/_i18n/LocalStrings_it.properties
@@ -43,16 +43,6 @@ menu.orders=Registrazioni
 menu.orders.alt=Le mie registrazioni
 menu.otherusers=Altri utenti
 menu.otherusers.alt=Biglietto da visita di altri utenti
-menu.portfolio=ePortfolio
-menu.portfolio.alt=ePortfolio con artefatti e raccoglitori
-menu.portfolio.myartefacts=I miei artefatti
-menu.portfolio.myartefacts.alt=Mostrare e gestire tutti gli artefatti
-menu.portfolio.mymaps=I miei raccoglitori
-menu.portfolio.mymaps.alt=Mostrare e gestire tutti i miei raccoglitori
-menu.portfolio.mystructuredmaps=I miei compiti portfolio
-menu.portfolio.mystructuredmaps.alt=Mostrare e gestire tutti i miei raccoglitori da un compito portfolio
-menu.portfolio.othermaps=Raccoglitori condivisi
-menu.portfolio.othermaps.alt=Raccoglitori di altri utenti condivisi con me
 table.header.ac=$org.olat.repository\:table.header.ac
 table.header.mark=Preferito
 warn.session.was.killed=OpenOlat era aperto in un altro browser. Non \u00E8 permesso connettersi a OpenOlat pi\u00F9 volte contemporaneamente. La Sua seduta \u00E8 stata chiusa.
diff --git a/src/main/java/org/olat/home/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/home/_i18n/LocalStrings_nl_NL.properties
index e1734dc5121fe6cfe5aca599bbeabe7d33dc1f5d..b2150e2ca4ef46e722109286abd2288385ad1be6 100644
--- a/src/main/java/org/olat/home/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/home/_i18n/LocalStrings_nl_NL.properties
@@ -32,16 +32,6 @@ menu.notifications=Berichten
 menu.notifications.alt=Mijn berichten beheren
 menu.otherusers=Andere gebruikers
 menu.otherusers.alt=Visitekaartje van andere gebruikers
-menu.portfolio=ePortfolio
-menu.portfolio.alt=ePortfolio met voorwerpen en accumulatieve mappen
-menu.portfolio.myartefacts=Mijn voorwerpen
-menu.portfolio.myartefacts.alt=Toon en beheer alle voorwerpen
-menu.portfolio.mymaps=Mijn accumulatieve mappen
-menu.portfolio.mymaps.alt=Toon en beheer al mijn accumulatieve mappen
-menu.portfolio.mystructuredmaps=Mijn portfolio opdrachten
-menu.portfolio.mystructuredmaps.alt=Toon en beheer al mijn accumulatieve mappen van portfolio opdrachten
-menu.portfolio.othermaps=Geef accumulatieve mappen vrij
-menu.portfolio.othermaps.alt=Accumulatieve mappen vrijgegeven voor mij door anderen
 warn.session.was.killed=U gebruikt OLAT  in een andere browser. U kunt niet tegelijkertijd meermaals inloggen. Uw vorige sessie werd afgesloten.
 welcome.header=Welkom bij OpenOlat
 welcome.intro=<\!-- -->
diff --git a/src/main/java/org/olat/home/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/home/_i18n/LocalStrings_pl.properties
index d7121f69e34f508ef535e1224819226160b57962..544232f7a489129815f9364a2f3c0ccb60876885 100644
--- a/src/main/java/org/olat/home/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/home/_i18n/LocalStrings_pl.properties
@@ -36,12 +36,6 @@ menu.orders=Rezerwacje
 menu.orders.alt=Moje rezerwacje
 menu.otherusers=Inni u\u017Cytkownicy
 menu.otherusers.alt=Wizyt\u00F3wki innych u\u017Cytkownik\u00F3w
-menu.portfolio.myartefacts=Moje artefakty
-menu.portfolio.myartefacts.alt=Poka\u017C i zarz\u0105dzaj artefaktami
-menu.portfolio.mymaps=Moje foldery zbiorcze
-menu.portfolio.mystructuredmaps=Moje zadania portfolio
-menu.portfolio.othermaps=Udost\u0119pnione foldery zbiorcze
-menu.portfolio.othermaps.alt=Teczki udost\u0119pnione mi przez innych
 warn.session.was.killed=Jeste\u015B zalogowany na platformie w innej przegl\u0105darce. Nie mo\u017Cesz logowa\u0107 si\u0119 wielokrotnie w tym samym czasie, dlatego Twoja poprzednia sesja zosta\u0142a uniewa\u017Cniona.
 welcome.header=Witaj w systemie OpenOlat
 welcome.intro=<\!-- -->
diff --git a/src/main/java/org/olat/home/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/home/_i18n/LocalStrings_pt_BR.properties
index 4e0fc3c6bf890c0e8aab583b11f0da6b451d8676..253a960e7c12576b0389c49f6dfd41e6e1636be2 100644
--- a/src/main/java/org/olat/home/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/home/_i18n/LocalStrings_pt_BR.properties
@@ -43,16 +43,6 @@ menu.orders=Reservas
 menu.orders.alt=Minha reservas
 menu.otherusers=Outros usu\u00E1rios
 menu.otherusers.alt=Cart\u00E3o de visita de outros usu\u00E1rios
-menu.portfolio=ePortfolio
-menu.portfolio.alt=ePortfolio com artefatos e pastas acumulativas
-menu.portfolio.myartefacts=Meus artefatos
-menu.portfolio.myartefacts.alt=Mostrar e gerenciar todos os artefatos
-menu.portfolio.mymaps=Minhas pastas acumulativas
-menu.portfolio.mymaps.alt=Mostrar e gerenciar todas as minhas pastas acumulativas
-menu.portfolio.mystructuredmaps=Minhas tarefas de Portfolio
-menu.portfolio.mystructuredmaps.alt=Mostrar e gerenciar todas as minhas pastas acumulativas de tarefas portfolio
-menu.portfolio.othermaps=Pastas acumulativas lan\u00E7adas
-menu.portfolio.othermaps.alt=Pastas acumulativas liberadas para mim por outros
 table.header.ac=$org.olat.repository\:table.header.ac
 table.header.mark=Favorito
 warn.session.was.killed=Voc\u00EA est\u00E1 usando o OLAT em outro browser. Voc\u00EA n\u00E3o pode logar diversas vezes de uma s\u00F3 vez. Sua sess\u00E3o anterior foi terminada.
diff --git a/src/main/java/org/olat/home/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/home/_i18n/LocalStrings_zh_CN.properties
index 17db3c328a1d70aa9597ec2bf106bd5cbe27f1af..92243cbb5eece147cb37b03ad8c6fe36acf71748 100644
--- a/src/main/java/org/olat/home/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/home/_i18n/LocalStrings_zh_CN.properties
@@ -32,13 +32,6 @@ menu.notifications=\u8BA2 \u9605
 menu.notifications.alt=\u7BA1\u7406\u6211\u7684\u901A\u77E5\u548C\u8BA2\u9605
 menu.otherusers=\u5176\u4ED6\u7528\u6237
 menu.otherusers.alt=\u5176\u4ED6\u7528\u6237\u7684\u540D\u7247
-menu.portfolio.myartefacts=\u6211\u7684\u7535\u5B50\u6863\u6848
-menu.portfolio.myartefacts.alt=\u663E\u793A\u5E76\u7BA1\u7406\u6240\u6709\u7684\u7535\u5B50\u6863\u6848
-menu.portfolio.mymaps=\u6211\u7684\u5F62\u6210\u6027\u6587\u4EF6\u5939
-menu.portfolio.mymaps.alt=\u663E\u793A\u5E76\u7BA1\u7406\u6211\u6240\u6709\u7684\u5F62\u6210\u6027\u6587\u4EF6\u5939
-menu.portfolio.mystructuredmaps=\u6211\u7684\u7535\u5B50\u6863\u6848\u4EFB\u52A1
-menu.portfolio.mystructuredmaps.alt=\u663E\u793A\u5E76\u7BA1\u7406\u6211\u6240\u6709\u7535\u5B50\u6863\u6848\u4EFB\u52A1\u7684\u5F62\u6210\u6027\u6587\u4EF6\u5939
-menu.portfolio.othermaps=\u91CA\u653E\u7684\u5F62\u6210\u6027\u6587\u4EF6\u5939
 warn.session.was.killed=\u76EE\u524D\u60A8\u6B63\u5728\u7528\u53E6\u4E00\u6D4F\u89C8\u5668\u8BBF\u95EEOLAT\uFF0C\u60A8\u4E0D\u80FD\u540C\u4E00\u65F6\u523B\u591A\u6B21\u767B\u9646\uFF0E\u56E0\u6B64\u4E4B\u524D\u7684\u64CD\u4F5C\u5DF2\u88AB\u7EC8\u6B62\u3002
 welcome.header=\u6B22\u8FCE\u6765\u5230OpenOlat\u4E16\u754C
 welcome.intro=OLAT--\u7B80\u4F53\u4E2D\u6587\u7248
diff --git a/src/main/java/org/olat/modules/_spring/modulesContext.xml b/src/main/java/org/olat/modules/_spring/modulesContext.xml
index 6b349e650bfd175c6b61c82c76c57c40f2aef4a7..efabffe627b6c819c3630de60dacbbb357d2e977 100644
--- a/src/main/java/org/olat/modules/_spring/modulesContext.xml
+++ b/src/main/java/org/olat/modules/_spring/modulesContext.xml
@@ -136,6 +136,26 @@
 	  <property name="jobClass" value="org.olat.modules.gotomeeting.manager.GoToRefreshJob" />
 	</bean>
 	
+	<!-- Portfolio admin. panel -->
+	<bean class="org.olat.core.extensions.action.GenericActionExtension" init-method="initExtensionPoints">
+		<property name="order" value="7205" />
+		<property name="actionController">	
+			<bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype">
+				<property name="className" value="org.olat.modules.portfolio.ui.PortfolioAdminController"/>
+			</bean>
+		</property>
+		<property name="navigationKey" value="portfolio" />
+		<property name="i18nActionKey" value="admin.menu.title"/>
+		<property name="i18nDescriptionKey" value="admin.menu.title.alt"/>
+		<property name="translationPackage" value="org.olat.modules.portfolio.ui"/>
+		<property name="parentTreeNodeIdentifier" value="eAssessmentParent" /> 
+		<property name="extensionPoints">
+			<list>	
+				<value>org.olat.admin.SystemAdminMainController</value>
+			</list>
+		</property>
+	</bean> 
+	
 	<!-- Portfolio hook to the personal menu -->
 	<bean class="org.olat.modules.portfolio.PortfolioExtension" name="personal.tool.portfolio" init-method="initExtensionPoints" >
 		<property name="order" value="303" />
@@ -157,6 +177,37 @@
 		</property>
 	</bean>
 	
+	<bean id="invitationCleanupTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
+		<property name="jobDetail" ref="invitationCleanupJob.${cluster.singleton.services}" />
+		<!-- adjust cron style syntax for your notification needs 
+			"0 10 0 * *"  e.g. 10 minutes after midnight
+			
+			A "Cron-Expression" is a string comprised of 6 or 7 fields separated by white space. The 6 mandatory and 1 optional fields are as follows:
+			Field Name 	  	Allowed Values 	  	Allowed Special Characters
+			Seconds 	  	0-59 	  			, - * /
+			Minutes 	  	0-59 	  			, - * /
+			Hours 	  		0-23 	  			, - * /
+			Day-of-month 	1-31 	  			, - * ? / L W C
+			Month 	  		1-12 or JAN-DEC 	, - * /
+			Day-of-Week 	1-7 or SUN-SAT 	  	, - * ? / L C #
+			Year (Optional)	empty, 1970-2099 	, - * /
+		
+			As of OLAT 6.3 it's best to let the cronjob run every two hours since users can now choose how often 
+			they will get notified. The shortest interval is set to two hours. 	    	
+		-->
+		<property name="cronExpression" value="0 2 */12 * * ?" />
+		<property name="startDelay" value="150000" />
+	</bean>
+
+	<bean id="invitationCleanupJob.enabled" class="org.springframework.scheduling.quartz.JobDetailFactoryBean" lazy-init="true">
+		<property name="jobClass" value="org.olat.modules.portfolio.manager.InvitationCleanupJob" />
+	</bean>
+	<!-- dummy bean -->
+	<bean id="invitationCleanupJob.disabled" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"  lazy-init="true">
+		<property name="jobClass" value="org.olat.core.commons.services.scheduler.DummyJob" />
+	</bean>
+	
+	
 	<!-- vitero admin. panel -->
 	<bean class="org.olat.core.extensions.action.GenericActionExtension" init-method="initExtensionPoints">
 		<property name="order" value="8228" />
diff --git a/src/main/java/org/olat/modules/fo/portfolio/ForumArtefact.hbm.xml b/src/main/java/org/olat/modules/fo/portfolio/ForumArtefact.hbm.xml
deleted file mode 100644
index d560ca0029720afa1ee417ea7ca774575f19f43f..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/fo/portfolio/ForumArtefact.hbm.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping default-lazy="false">
-	<subclass name="org.olat.modules.fo.portfolio.ForumArtefact" 
-		extends="org.olat.portfolio.model.artefacts.AbstractArtefact" discriminator-value="Forum">
-	
-	</subclass>
-</hibernate-mapping>
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/portfolio/ForumArtefact.java b/src/main/java/org/olat/modules/fo/portfolio/ForumArtefact.java
deleted file mode 100644
index d99db6b411a10a7ab7fdd3b1fe791ef9219006f3..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/fo/portfolio/ForumArtefact.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.modules.fo.portfolio;
-
-import org.olat.core.util.resource.OresHelper;
-import org.olat.modules.fo.Forum;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-public class ForumArtefact extends AbstractArtefact {
-
-	private static final long serialVersionUID = -1315885067800017656L;
-	public static final String FORUM_ARTEFACT_TYPE = OresHelper.calculateTypeName(Forum.class);
-
-	@Override
-	public String getIcon() {
-		return "o_fo_icon";
-	}
-
-	@Override
-	public String getResourceableTypeName() {
-		return FORUM_ARTEFACT_TYPE;
-	}
-
-}
diff --git a/src/main/java/org/olat/modules/fo/portfolio/ForumArtefactDetailsController.java b/src/main/java/org/olat/modules/fo/portfolio/ForumArtefactDetailsController.java
deleted file mode 100644
index a5ce2832184e38b28167e8e6ac57f3ca9b3f1457..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/fo/portfolio/ForumArtefactDetailsController.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.modules.fo.portfolio;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.download.DownloadComponent;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.gui.util.CSSHelper;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.core.util.vfs.VFSItem;
-import org.olat.core.util.vfs.VFSLeaf;
-import org.olat.core.util.vfs.filters.VFSItemMetaFilter;
-import org.olat.core.util.vfs.filters.VFSSystemItemFilter;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * 
- * Description:<br>
- * Show the specific part of the ForumArtefact
- * 
- * <P>
- * Initial Date:  11 oct. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class ForumArtefactDetailsController extends BasicController {
-
-	private final VelocityContainer vC;
-
-	public ForumArtefactDetailsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact) {
-		super(ureq, wControl);
-		ForumArtefact fArtefact = (ForumArtefact)artefact;
-		vC = createVelocityContainer("messageDetails");
-		EPFrontendManager ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-		vC.contextPut("text", ePFMgr.getArtefactFullTextContent(fArtefact));
-		VFSContainer artContainer = ePFMgr.getArtefactContainer(artefact);
-		if (artContainer != null && !artContainer.getItems(new VFSSystemItemFilter()).isEmpty()){
-			List<VFSItem> attachments = new ArrayList<>(artContainer.getItems(new VFSItemMetaFilter()));
-			int i=1; //vc-shift!
-			for (VFSItem vfsItem : attachments) {
-				VFSLeaf file = (VFSLeaf) vfsItem;
-				DownloadComponent downlC = new DownloadComponent("download"+i, file, true,
-						file.getName() + " (" + String.valueOf(file.getSize() / 1024) + " KB)", null,
-						CSSHelper.createFiletypeIconCssClassFor(file.getName()));
-				vC.put("download"+i, downlC);
-				i++;
-			}
-			vC.contextPut("attachments", attachments);
-			vC.contextPut("hasAttachments", true);
-		} 
-		
-		putInitialPanel(vC);		
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		//
-	}
-
-	@Override
-	protected void doDispose() {
-		//
-	}
-}
-
diff --git a/src/main/java/org/olat/modules/fo/portfolio/ForumArtefactHandler.java b/src/main/java/org/olat/modules/fo/portfolio/ForumArtefactHandler.java
deleted file mode 100755
index 7c3298381b2fda8aaaffa5e346be054dfb7f5e31..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/fo/portfolio/ForumArtefactHandler.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.modules.fo.portfolio;
-
-import java.util.List;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.core.util.vfs.VFSItem;
-import org.olat.core.util.vfs.filters.VFSSystemItemFilter;
-import org.olat.modules.fo.Message;
-import org.olat.modules.fo.manager.ForumManager;
-import org.olat.portfolio.EPAbstractHandler;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * 
- * Description:<br>
- * The ArtefactHandler for Forums
- * 
- * <P>
- * Initial Date:  11.06.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class ForumArtefactHandler extends EPAbstractHandler<ForumArtefact> {
-
-	@Override
-	public void prefillArtefactAccordingToSource(AbstractArtefact artefact, Object source) {
-		super.prefillArtefactAccordingToSource(artefact, source);
-		if (source instanceof OLATResourceable){
-			OLATResourceable ores = (OLATResourceable) source;
-			ForumManager fMgr = CoreSpringFactory.getImpl(ForumManager.class);
-			Message fm = fMgr.loadMessage(ores.getResourceableId());
-			String thread = fm.getThreadtop() != null ? fm.getThreadtop().getTitle() + " - " : "";
-			artefact.setTitle(thread + fm.getTitle());
-			
-			VFSContainer msgContainer = fMgr.getMessageContainer(fm.getForum().getKey(), fm.getKey());
-			if (msgContainer != null) {
-				List<VFSItem> foAttach = msgContainer.getItems(new VFSSystemItemFilter());
-				if (!foAttach.isEmpty()){
-					artefact.setFileSourceContainer(msgContainer);
-				}
-			}
-			
-			artefact.setSignature(70); 
-			artefact.setFulltextContent(fm.getBody());
-		}
-	}
-
-	@Override
-	public ForumArtefact createArtefact() {
-		return new ForumArtefact();
-	}
-
-	@Override
-	public String getType() {
-		return ForumArtefact.FORUM_ARTEFACT_TYPE;
-	}
-
-	@Override
-	public Controller createDetailsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, boolean readOnlyMode) {
-		return new ForumArtefactDetailsController(ureq, wControl, artefact);
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/portfolio/ForumMediaHandler.java b/src/main/java/org/olat/modules/fo/portfolio/ForumMediaHandler.java
index 1bd5595167c309b8bca58e6bf63b5f326f18266b..04643d182d59c101626f9db3fc5837777c5ad15d 100644
--- a/src/main/java/org/olat/modules/fo/portfolio/ForumMediaHandler.java
+++ b/src/main/java/org/olat/modules/fo/portfolio/ForumMediaHandler.java
@@ -36,11 +36,7 @@ import org.olat.core.util.FileUtils;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.io.SystemFileFilter;
 import org.olat.core.util.resource.OresHelper;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.core.util.vfs.VFSItem;
 import org.olat.core.util.vfs.VFSLeaf;
-import org.olat.core.util.vfs.VFSManager;
-import org.olat.core.util.vfs.filters.VFSSystemItemFilter;
 import org.olat.modules.ceditor.PageElementCategory;
 import org.olat.modules.fo.Forum;
 import org.olat.modules.fo.Message;
@@ -55,8 +51,6 @@ import org.olat.modules.portfolio.handler.AbstractMediaHandler;
 import org.olat.modules.portfolio.manager.MediaDAO;
 import org.olat.modules.portfolio.manager.PortfolioFileStorage;
 import org.olat.modules.portfolio.ui.media.StandardEditMediaController;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
 import org.olat.user.manager.ManifestBuilder;
 import org.olat.util.logging.activity.LoggingResourceable;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -79,8 +73,6 @@ public class ForumMediaHandler extends AbstractMediaHandler {
 	private ForumManager forumManager;
 	@Autowired
 	private PortfolioFileStorage fileStorage;
-	@Autowired
-	private EPFrontendManager oldPortfolioManager;
 	
 	public ForumMediaHandler() {
 		super(FORUM_HANDLER);
@@ -148,31 +140,6 @@ public class ForumMediaHandler extends AbstractMediaHandler {
 		return media;
 	}
 
-	@Override
-	public Media createMedia(AbstractArtefact artefact) {
-		VFSContainer artefactFolder = oldPortfolioManager.getArtefactContainer(artefact);
-
-		String businessPath = artefact.getBusinessPath();
-		if(businessPath == null) {
-			businessPath = "[PortfolioV2:0][MediaCenter:0]";
-		}
-		Media media = mediaDao.createMedia(artefact.getTitle(), artefact.getDescription(), null, FORUM_HANDLER,
-				businessPath, artefact.getKey().toString(), artefact.getSignature(), artefact.getAuthor());
-		ThreadLocalUserActivityLogger.log(PortfolioLoggingAction.PORTFOLIO_MEDIA_ADDED, getClass(),
-				LoggingResourceable.wrap(media));
-		
-		List<VFSItem> items = artefactFolder.getItems(new VFSSystemItemFilter());
-		if(items.size() > 0) {
-			File mediaDir = fileStorage.generateMediaSubDirectory(media);
-			String storagePath = fileStorage.getRelativePath(mediaDir);
-			mediaDao.updateStoragePath(media, storagePath, null);
-			VFSContainer mediaContainer = fileStorage.getMediaContainer(media);
-			VFSManager.copyContent(artefactFolder, mediaContainer);
-		}
-		
-		return media;
-	}
-
 	@Override
 	public Controller getMediaController(UserRequest ureq, WindowControl wControl, Media media, MediaRenderingHints hints) {
 		return new ForumMessageMediaController(ureq, wControl, media, hints);
diff --git a/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_de.properties
deleted file mode 100644
index 5b965304559369a919d10cb8116d30ab77aaafab..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1 +0,0 @@
-handler.ForumArtefactHandler.title=Forum
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_en.properties
deleted file mode 100644
index 26aac3c138cb1c9269f7c21491ea1721a8eb6063..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Wed Jan 05 17:27:22 CET 2011
-handler.ForumArtefactHandler.title=Forum
diff --git a/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index 9ca4f6594b3a27d2666866acea06578b0d59bbac..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Sat Jan 08 12:50:59 CET 2011
-handler.ForumArtefactHandler.title=Forum
diff --git a/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_it.properties
deleted file mode 100644
index f625dff1ef974e6f2ea5bdc1d94d10c07089dd5c..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_it.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Sat Jan 08 12:34:52 CET 2011
-handler.ForumArtefactHandler.title=Forum
diff --git a/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_nl_NL.properties
deleted file mode 100644
index 19dfa8f194466fda3b82e083eca23398f47ddaf5..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_nl_NL.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Thu Sep 08 16:42:46 CEST 2011
-handler.ForumArtefactHandler.title=Forum
diff --git a/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_pl.properties
deleted file mode 100644
index 4614c5e34d584a893b8426e730d27712579800ad..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_pl.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Thu Sep 08 16:42:41 CEST 2011
-handler.ForumArtefactHandler.title=Forum
diff --git a/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_pt_BR.properties
deleted file mode 100644
index 9095986ea21e91c9f4dac8d6ca1a3a6abbb1b4ef..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_pt_BR.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Thu Sep 08 16:42:38 CEST 2011
-handler.ForumArtefactHandler.title=Forum
diff --git a/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_zh_CN.properties
deleted file mode 100644
index dbe104b7f560e41694530376976aa32c4ab358ca..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/fo/portfolio/_i18n/LocalStrings_zh_CN.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Thu Sep 08 16:42:39 CEST 2011
-handler.ForumArtefactHandler.title=\u8BBA\u575B
diff --git a/src/main/java/org/olat/modules/fo/ui/MessageListController.java b/src/main/java/org/olat/modules/fo/ui/MessageListController.java
index f80e346866a618e4f84d84e67a10467d1a3836bb..fb34f94567bda9b7e29ceeb7931bd5285fc46258 100644
--- a/src/main/java/org/olat/modules/fo/ui/MessageListController.java
+++ b/src/main/java/org/olat/modules/fo/ui/MessageListController.java
@@ -107,8 +107,6 @@ import org.olat.modules.fo.ui.events.ErrorEditMessage;
 import org.olat.modules.fo.ui.events.SelectMessageEvent;
 import org.olat.modules.portfolio.PortfolioV2Module;
 import org.olat.modules.portfolio.ui.component.MediaCollectorComponent;
-import org.olat.portfolio.EPUIFactory;
-import org.olat.portfolio.manager.EPFrontendManager;
 import org.olat.properties.Property;
 import org.olat.properties.PropertyManager;
 import org.olat.repository.RepositoryEntry;
@@ -182,8 +180,6 @@ public class MessageListController extends BasicController implements GenericEve
 	@Autowired
 	private BaseSecurityModule securityModule;
 	@Autowired
-	private EPFrontendManager epMgr;
-	@Autowired
 	private PortfolioV2Module portfolioModule;
 	@Autowired
 	private ForumMediaHandler forumMediaHandler;
@@ -430,12 +426,8 @@ public class MessageListController extends BasicController implements GenericEve
 	private MessageView loadView(UserRequest ureq, MessageLight message) {
 		Set<Long> rms =  null;
 		Map<String,Mark> marks = Collections.emptyMap();
-		Map<String,Long> artefactStats = Collections.emptyMap();
 		List<String> subPaths = Collections.singletonList(message.getKey().toString());
 		if(!guestOnly) {
-			String businessPath = BusinessControlFactory.getInstance().getAsString(getWindowControl().getBusinessControl()) + "[Message:" + message.getKey() + "]";
-			artefactStats = epMgr.getNumOfArtefactsByStartingBusinessPath(businessPath, getIdentity());
-
 			marks = new HashMap<>();
 			List<Mark> markList = markingService.getMarkManager().getMarks(forumOres, getIdentity(), subPaths);
 			for(Mark mark:markList) {
@@ -451,20 +443,16 @@ public class MessageListController extends BasicController implements GenericEve
 
 		MessageView view = new MessageView(message, userPropertyHandlers, getLocale());
 		view.setNumOfChildren(0);
-		addMessageToCurrentMessagesAndVC(ureq, message, view, marks, stats, artefactStats, rms);
+		addMessageToCurrentMessagesAndVC(ureq, message, view, marks, stats, rms);
 		return view;
 	}
 	
 	private List<MessageView> loadThread(UserRequest ureq, List<MessageLight> messages, boolean reorder) {
 		Set<Long> rms =  null;
 		Map<String,Mark> marks = Collections.emptyMap();
-		Map<String,Long> artefactStats = Collections.emptyMap();
 		if(!guestOnly) {
 			rms = forumManager.getReadSet(getIdentity(), forum);
 
-			String businessPath = BusinessControlFactory.getInstance().getAsString(getWindowControl().getBusinessControl()) + "[Message:";
-			artefactStats = epMgr.getNumOfArtefactsByStartingBusinessPath(businessPath, getIdentity());
-
 			marks = new HashMap<>(marks.size() * 2 + 1);
 			List<Mark> markList = markingService.getMarkManager().getMarks(forumOres, getIdentity(), null);
 			for(Mark mark:markList) {
@@ -508,7 +496,7 @@ public class MessageListController extends BasicController implements GenericEve
 		
 		//append ui things
 		for (MessageLight msg: messages) {
-			addMessageToCurrentMessagesAndVC(ureq, msg, keyToViews.get(msg.getKey()), marks, stats, artefactStats, rms);
+			addMessageToCurrentMessagesAndVC(ureq, msg, keyToViews.get(msg.getKey()), marks, stats, rms);
 		}
 		
 		mainVC.contextPut("messages", views);
@@ -577,8 +565,7 @@ public class MessageListController extends BasicController implements GenericEve
 	}
 	
 	private void addMessageToCurrentMessagesAndVC(UserRequest ureq, MessageLight m, MessageView messageView,
-			Map<String,Mark> marks, Map<String,MarkResourceStat> stats, Map<String,Long> artefactStats,
-			Set<Long> readSet) {
+			Map<String,Mark> marks, Map<String,MarkResourceStat> stats, Set<Long> readSet) {
 		
 		// all values belonging to a message are stored in this map
 		// these values can be accessed in velocity. make sure you clean up
@@ -714,22 +701,12 @@ public class MessageListController extends BasicController implements GenericEve
 		}
 		
 		if(userIsMsgCreator && !StringHelper.containsNonWhitespace(m.getPseudonym())) {
-			OLATResourceable messageOres = OresHelper.createOLATResourceableInstance("Forum", m.getKey());
-			String businessPath = BusinessControlFactory.getInstance().getAsString(getWindowControl().getBusinessControl())
-					+ "[Message:" + m.getKey() + "]";
-			Long artefact = artefactStats.get(businessPath);
-			int numOfArtefact = artefact == null ? 0 : artefact.intValue();
 			if(portfolioModule.isEnabled()) {
+				String businessPath = BusinessControlFactory.getInstance().getAsString(getWindowControl().getBusinessControl())
+						+ "[Message:" + m.getKey() + "]";
 				String collectorId = "eportfolio_" + keyString;
 				Component collectorCmp = new MediaCollectorComponent(collectorId, getWindowControl(), m, forumMediaHandler, businessPath);
 				mainVC.put(collectorId, collectorCmp);
-			} else  {
-				Controller ePFCollCtrl = EPUIFactory
-						.createArtefactCollectWizzardController(ureq, getWindowControl(), numOfArtefact, messageOres, businessPath);
-				if (ePFCollCtrl != null) {
-					messageView.setArtefact(ePFCollCtrl);
-					mainVC.put("eportfolio_" + keyString, ePFCollCtrl.getInitialComponent());
-				}
 			}
 		}
 	}
diff --git a/src/main/java/org/olat/modules/fo/ui/MessageView.java b/src/main/java/org/olat/modules/fo/ui/MessageView.java
index 7848a3dc4cd2b92553eb3545329864cc86537751..64bace8dce554b08378695bafcc00c993fbb0d7f 100644
--- a/src/main/java/org/olat/modules/fo/ui/MessageView.java
+++ b/src/main/java/org/olat/modules/fo/ui/MessageView.java
@@ -22,7 +22,6 @@ package org.olat.modules.fo.ui;
 import java.util.List;
 import java.util.Locale;
 
-import org.olat.core.gui.control.Controller;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSItem;
 import org.olat.modules.fo.MessageLight;
@@ -58,7 +57,6 @@ public class MessageView extends MessageLightView {
 	private List<VFSItem> attachments;
 	private VFSContainer messageContainer;
 	
-	private Controller artefact;
 	private DisplayPortraitController portrait;
 	
 	public MessageView(MessageLight message, List<UserPropertyHandler> userPropertyHandlers, Locale locale) {
@@ -195,18 +193,4 @@ public class MessageView extends MessageLightView {
 		this.portrait = portrait;
 	}
 
-	public Controller getArtefact() {
-		return artefact;
-	}
-
-	public void setArtefact(Controller artefact) {
-		this.artefact = artefact;
-	}
-	
-	
-
-
-	
-	
-
 }
diff --git a/src/main/java/org/olat/modules/portfolio/MediaHandler.java b/src/main/java/org/olat/modules/portfolio/MediaHandler.java
index 32200a10842d4bc380e371a0446b3bd9f2cfbf2b..02b18f52f00039d0577c94e0599ee0f917e97a2e 100644
--- a/src/main/java/org/olat/modules/portfolio/MediaHandler.java
+++ b/src/main/java/org/olat/modules/portfolio/MediaHandler.java
@@ -29,7 +29,6 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.Identity;
 import org.olat.core.util.vfs.VFSLeaf;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
 import org.olat.user.manager.ManifestBuilder;
 
 /**
@@ -56,8 +55,6 @@ public interface MediaHandler {
 	
 	public Media createMedia(String title, String description, Object mediaObject, String businessPath, Identity author);
 	
-	public Media createMedia(AbstractArtefact artefact);
-	
 	public Controller getMediaController(UserRequest ureq, WindowControl wControl, Media media, MediaRenderingHints hints);
 	
 	public Controller getEditMediaController(UserRequest ureq, WindowControl wControl, Media media);
diff --git a/src/main/java/org/olat/modules/portfolio/handler/CitationHandler.java b/src/main/java/org/olat/modules/portfolio/handler/CitationHandler.java
index bf995aaef2bacea254b115d7f292f46a0b0d9e43..142ae01a42cff005054c5d6f6fd22b17e5f6184e 100644
--- a/src/main/java/org/olat/modules/portfolio/handler/CitationHandler.java
+++ b/src/main/java/org/olat/modules/portfolio/handler/CitationHandler.java
@@ -40,7 +40,6 @@ import org.olat.modules.portfolio.PortfolioLoggingAction;
 import org.olat.modules.portfolio.manager.MediaDAO;
 import org.olat.modules.portfolio.ui.media.CitationMediaController;
 import org.olat.modules.portfolio.ui.media.CollectCitationMediaController;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
 import org.olat.user.manager.ManifestBuilder;
 import org.olat.util.logging.activity.LoggingResourceable;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -97,11 +96,6 @@ public class CitationHandler extends AbstractMediaHandler implements Interactive
 		return media;
 	}
 
-	@Override
-	public Media createMedia(AbstractArtefact artefact) {
-		return null;
-	}
-
 	@Override
 	public Controller getMediaController(UserRequest ureq, WindowControl wControl, Media media, MediaRenderingHints hints) {
 		return new CitationMediaController(ureq, wControl, media, hints);
diff --git a/src/main/java/org/olat/modules/portfolio/handler/FileHandler.java b/src/main/java/org/olat/modules/portfolio/handler/FileHandler.java
index a7f9302c341d919640596c7f7d372118b9ff428a..5c10f9b9c031e7962a0a2a868813862d17a4612f 100644
--- a/src/main/java/org/olat/modules/portfolio/handler/FileHandler.java
+++ b/src/main/java/org/olat/modules/portfolio/handler/FileHandler.java
@@ -39,7 +39,6 @@ import org.olat.core.util.vfs.VFSConstants;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSItem;
 import org.olat.core.util.vfs.VFSLeaf;
-import org.olat.core.util.vfs.VFSManager;
 import org.olat.modules.ceditor.InteractiveAddPageElementHandler;
 import org.olat.modules.ceditor.PageElementAddController;
 import org.olat.modules.ceditor.PageElementCategory;
@@ -53,9 +52,6 @@ import org.olat.modules.portfolio.manager.PortfolioFileStorage;
 import org.olat.modules.portfolio.ui.media.CollectFileMediaController;
 import org.olat.modules.portfolio.ui.media.FileMediaController;
 import org.olat.modules.portfolio.ui.media.UploadMedia;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.artefacts.FileArtefact;
 import org.olat.user.manager.ManifestBuilder;
 import org.olat.util.logging.activity.LoggingResourceable;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -77,8 +73,6 @@ public class FileHandler extends AbstractMediaHandler implements InteractiveAddP
 	@Autowired
 	private PortfolioFileStorage fileStorage;
 	@Autowired
-	private EPFrontendManager oldPortfolioManager;
-	@Autowired
 	private VFSRepositoryService vfsRepositoryService;
 	
 	public FileHandler() {
@@ -162,36 +156,6 @@ public class FileHandler extends AbstractMediaHandler implements InteractiveAddP
 		return media;
 	}
 
-	@Override
-	public Media createMedia(AbstractArtefact artefact) {
-		Media media = null;
-		if(artefact instanceof FileArtefact) {
-			VFSContainer artefactFolder = oldPortfolioManager.getArtefactContainer(artefact);
-			String filename = ((FileArtefact)artefact).getFilename();
-			String extension = FileUtils.getFileSuffix(filename);
-			String type = FILE_TYPE;
-			if("jpg".equalsIgnoreCase(extension) || "jpeg".equalsIgnoreCase(extension)
-					|| "png".equalsIgnoreCase(extension) || "gif".equalsIgnoreCase(extension)) {
-				type = ImageHandler.IMAGE_TYPE;
-			}
-			String businessPath = artefact.getBusinessPath();
-			if(businessPath == null) {
-				businessPath = "[PortfolioV2:0][MediaCenter:0]";
-			}
-			media = mediaDao.createMedia(artefact.getTitle(), artefact.getDescription(), filename, type,
-					businessPath, artefact.getKey().toString(), artefact.getSignature(), artefact.getAuthor());
-			ThreadLocalUserActivityLogger.log(PortfolioLoggingAction.PORTFOLIO_MEDIA_ADDED, getClass(),
-					LoggingResourceable.wrap(media));
-		
-			File mediaDir = fileStorage.generateMediaSubDirectory(media);
-			String storagePath = fileStorage.getRelativePath(mediaDir);
-			mediaDao.updateStoragePath(media, storagePath, filename);
-			VFSContainer mediaContainer = fileStorage.getMediaContainer(media);
-			VFSManager.copyContent(artefactFolder, mediaContainer);
-		}
-		return media;
-	}
-
 	@Override
 	public Controller getMediaController(UserRequest ureq, WindowControl wControl, Media media, MediaRenderingHints hints) {
 		return new FileMediaController(ureq, wControl, media, hints);
diff --git a/src/main/java/org/olat/modules/portfolio/handler/ImageHandler.java b/src/main/java/org/olat/modules/portfolio/handler/ImageHandler.java
index 41343ff5d83266e876fb89381bb2e6caf18c0818..5d672253eb08d41e5b81b1a422ce259f32b18cb5 100644
--- a/src/main/java/org/olat/modules/portfolio/handler/ImageHandler.java
+++ b/src/main/java/org/olat/modules/portfolio/handler/ImageHandler.java
@@ -64,7 +64,6 @@ import org.olat.modules.portfolio.model.MediaPart;
 import org.olat.modules.portfolio.ui.media.CollectImageMediaController;
 import org.olat.modules.portfolio.ui.media.ImageMediaController;
 import org.olat.modules.portfolio.ui.media.UploadMedia;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
 import org.olat.user.manager.ManifestBuilder;
 import org.olat.util.logging.activity.LoggingResourceable;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -176,11 +175,6 @@ public class ImageHandler extends AbstractMediaHandler implements PageElementSto
 		return media;
 	}
 
-	@Override
-	public Media createMedia(AbstractArtefact artefact) {
-		return null;//no specific image document in old portfolio
-	}
-
 	@Override
 	public Controller getEditor(UserRequest ureq, WindowControl wControl, PageElement element) {
 		if(element instanceof MediaPart) {
diff --git a/src/main/java/org/olat/modules/portfolio/handler/TextHandler.java b/src/main/java/org/olat/modules/portfolio/handler/TextHandler.java
index 0bf0d1d66f288da9c9915bc381b52c6e5088054b..ecb699cb53f34b36798c13410243d9c471dd281e 100644
--- a/src/main/java/org/olat/modules/portfolio/handler/TextHandler.java
+++ b/src/main/java/org/olat/modules/portfolio/handler/TextHandler.java
@@ -28,7 +28,6 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.Identity;
 import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
-import org.olat.core.util.StringHelper;
 import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.modules.ceditor.PageElementCategory;
 import org.olat.modules.portfolio.Media;
@@ -39,8 +38,6 @@ import org.olat.modules.portfolio.PortfolioLoggingAction;
 import org.olat.modules.portfolio.manager.MediaDAO;
 import org.olat.modules.portfolio.ui.media.CollectTextMediaController;
 import org.olat.modules.portfolio.ui.media.TextMediaController;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
 import org.olat.user.manager.ManifestBuilder;
 import org.olat.util.logging.activity.LoggingResourceable;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -59,8 +56,6 @@ public class TextHandler extends AbstractMediaHandler {
 	
 	@Autowired
 	private MediaDAO mediaDao;
-	@Autowired
-	private EPFrontendManager oldPortfolioManager;
 
 	public TextHandler() {
 		super(TEXT_MEDIA);
@@ -99,25 +94,6 @@ public class TextHandler extends AbstractMediaHandler {
 		return media;
 	}
 
-	@Override
-	public Media createMedia(AbstractArtefact artefact) {
-		String title = artefact.getTitle();
-		String description = artefact.getDescription();
-		String content = artefact.getFulltextContent();
-		if(!StringHelper.containsNonWhitespace(content)) {
-			content = oldPortfolioManager.getArtefactFullTextContent(artefact);
-		}
-		
-		String businessPath = artefact.getBusinessPath();
-		if(businessPath == null) {
-			businessPath = "[PortfolioV2:0][MediaCenter:0]";
-		}
-		Media media = mediaDao.createMedia(title, description, content, TEXT_MEDIA, businessPath, artefact.getKey().toString(), artefact.getSignature(), artefact.getAuthor());
-		ThreadLocalUserActivityLogger.log(PortfolioLoggingAction.PORTFOLIO_MEDIA_ADDED, getClass(),
-				LoggingResourceable.wrap(media));
-		return media;
-	}
-
 	@Override
 	public Controller getMediaController(UserRequest ureq, WindowControl wControl, Media media, MediaRenderingHints hints) {
 		return new TextMediaController(ureq, wControl, media, hints);
diff --git a/src/main/java/org/olat/modules/portfolio/handler/VideoHandler.java b/src/main/java/org/olat/modules/portfolio/handler/VideoHandler.java
index ad794b85e74ef70dfb4b8d400a234ac55c3bdec2..83349060966542afdc41ab1f27ae4cfab9037c0c 100644
--- a/src/main/java/org/olat/modules/portfolio/handler/VideoHandler.java
+++ b/src/main/java/org/olat/modules/portfolio/handler/VideoHandler.java
@@ -54,7 +54,6 @@ import org.olat.modules.portfolio.manager.PortfolioFileStorage;
 import org.olat.modules.portfolio.ui.media.CollectVideoMediaController;
 import org.olat.modules.portfolio.ui.media.UploadMedia;
 import org.olat.modules.portfolio.ui.media.VideoMediaController;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
 import org.olat.user.manager.ManifestBuilder;
 import org.olat.util.logging.activity.LoggingResourceable;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -163,11 +162,6 @@ public class VideoHandler extends AbstractMediaHandler implements InteractiveAdd
 		return media;
 	}
 
-	@Override
-	public Media createMedia(AbstractArtefact artefact) {
-		return null;//no specific image document in old portfolio
-	}
-
 	@Override
 	public Controller getMediaController(UserRequest ureq, WindowControl wControl, Media media, MediaRenderingHints hints) {
 		return new VideoMediaController(ureq, wControl, media, hints);
diff --git a/src/main/java/org/olat/portfolio/manager/InvitationCleanupJob.java b/src/main/java/org/olat/modules/portfolio/manager/InvitationCleanupJob.java
similarity index 97%
rename from src/main/java/org/olat/portfolio/manager/InvitationCleanupJob.java
rename to src/main/java/org/olat/modules/portfolio/manager/InvitationCleanupJob.java
index 411483cafd521a809992507650203133e78e6d8e..ed3b1cfb6de869edb12e576650ad2a4b54cea2a0 100644
--- a/src/main/java/org/olat/portfolio/manager/InvitationCleanupJob.java
+++ b/src/main/java/org/olat/modules/portfolio/manager/InvitationCleanupJob.java
@@ -17,7 +17,7 @@
  * frentix GmbH, http://www.frentix.com
  * <p>
  */
-package org.olat.portfolio.manager;
+package org.olat.modules.portfolio.manager;
 
 import org.apache.logging.log4j.Logger;
 import org.olat.core.CoreSpringFactory;
diff --git a/src/main/java/org/olat/portfolio/manager/InvitationDAO.java b/src/main/java/org/olat/modules/portfolio/manager/InvitationDAO.java
similarity index 89%
rename from src/main/java/org/olat/portfolio/manager/InvitationDAO.java
rename to src/main/java/org/olat/modules/portfolio/manager/InvitationDAO.java
index a00ecffa755f1ff1f58c055e6b2eff608945c4f3..3b5e73d6ef2a24dc4c4ebb55ff324b6eb3c689e5 100644
--- a/src/main/java/org/olat/portfolio/manager/InvitationDAO.java
+++ b/src/main/java/org/olat/modules/portfolio/manager/InvitationDAO.java
@@ -17,7 +17,7 @@
  * frentix GmbH, http://www.frentix.com
  * <p>
  */
-package org.olat.portfolio.manager;
+package org.olat.modules.portfolio.manager;
 
 import java.util.Calendar;
 import java.util.Date;
@@ -41,7 +41,7 @@ import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
 import org.olat.core.id.User;
 import org.olat.core.id.UserConstants;
-import org.olat.portfolio.model.InvitationImpl;
+import org.olat.modules.portfolio.model.InvitationImpl;
 import org.olat.user.UserManager;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -59,6 +59,7 @@ import org.springframework.stereotype.Service;
 @Service(value="invitationDao")
 public class InvitationDAO {
 	
+	
 	@Autowired
 	private DB dbInstance;
 	@Autowired
@@ -158,36 +159,26 @@ public class InvitationDAO {
 	/**
 	 * Is the invitation linked to any valid policies
 	 * @param token
-	 * @param atDate
 	 * @return
 	 */
-	public boolean hasInvitations(String token, Date atDate) {
+	public boolean hasInvitations(String token) {
 		StringBuilder sb = new StringBuilder();
 		sb.append("select invitation.key from binvitation as invitation")
 		  .append(" inner join invitation.baseGroup as baseGroup")
-	      .append(" where invitation.token=:token and ")
-	      .append(" (exists (select relation.key from structuretogroup as relation ")
-	      .append("  where relation.group.key=baseGroup.key");
-		if(atDate != null) {
-			sb.append(" and (relation.validFrom is null or relation.validFrom<=:date)")
-			  .append(" and (relation.validTo is null or relation.validTo>=:date)");
-		}
-	    sb.append(" ) or exists(select binder from pfbinder as binder")
-	      .append("   where binder.baseGroup.key=baseGroup.key")
-	      .append("))");
+		  .append(" where invitation.token=:token ")
+		  .append("   and exists(select binder from pfbinder as binder")
+		  .append("        where binder.baseGroup.key=baseGroup.key")
+		  .append("        )");
 
 		TypedQuery<Long> query = dbInstance.getCurrentEntityManager()
 				.createQuery(sb.toString(), Long.class)
 				.setParameter("token", token);
-		if(atDate != null) {
-		  	query.setParameter("date", atDate);
-		}
-		  
+		
 		List<Long> keys = query
 				.setFirstResult(0)
 				.setMaxResults(1)
 				.getResultList();
-	    return keys == null || keys.isEmpty() || keys.get(0) == null ? false : keys.get(0).intValue() > 0;
+		return keys == null || keys.isEmpty() || keys.get(0) == null ? false : keys.get(0).intValue() > 0;
 	}
 	
 	/**
@@ -333,15 +324,8 @@ public class InvitationDAO {
 		StringBuilder sb = new StringBuilder(512);
 		sb.append("select invitation from ").append(InvitationImpl.class.getName()).append(" as invitation ")
 		  .append(" inner join invitation.baseGroup baseGroup ")
-		  .append(" where invitation.creationDate<:dateLimit")//someone can create an invitation but not add it to a policy within millisecond
-		  .append(" and not exists (")
-		  //select all valid policies from this security group
-		  .append("  select policy.group from structuretogroup as policy ")
-		  .append("   where policy.group=baseGroup ")
-		  .append("   and (policy.validFrom is null or policy.validFrom<=:currentDate)")
-		  .append("   and (policy.validTo is null or policy.validTo>=:currentDate)")
-		  .append(" )");
-
+		  .append(" where invitation.creationDate<:dateLimit");
+		
 		List<Invitation> oldInvitations = dbInstance.getCurrentEntityManager()
 				.createQuery(sb.toString(), Invitation.class)
 				.setParameter("currentDate", currentTime)
diff --git a/src/main/java/org/olat/portfolio/model/InvitationImpl.java b/src/main/java/org/olat/modules/portfolio/model/InvitationImpl.java
similarity index 99%
rename from src/main/java/org/olat/portfolio/model/InvitationImpl.java
rename to src/main/java/org/olat/modules/portfolio/model/InvitationImpl.java
index a6f7b406fd6e24711076a58999eb64ae6b4e1eb5..23727b0888d9d92965130dcddb22c9197bbeec0b 100644
--- a/src/main/java/org/olat/portfolio/model/InvitationImpl.java
+++ b/src/main/java/org/olat/modules/portfolio/model/InvitationImpl.java
@@ -19,7 +19,7 @@
  * <p>
  */
 
-package org.olat.portfolio.model;
+package org.olat.modules.portfolio.model;
 
 import java.util.Date;
 
diff --git a/src/main/java/org/olat/modules/portfolio/ui/InvitationEditRightsController.java b/src/main/java/org/olat/modules/portfolio/ui/InvitationEditRightsController.java
index fb7b760611ec1172bbe63465a2abb199667ba678..bd0c2f36a18c66c8439784f7edb9f9de64647bfe 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/InvitationEditRightsController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/InvitationEditRightsController.java
@@ -62,9 +62,9 @@ import org.olat.modules.portfolio.PortfolioElement;
 import org.olat.modules.portfolio.PortfolioRoles;
 import org.olat.modules.portfolio.PortfolioService;
 import org.olat.modules.portfolio.Section;
+import org.olat.modules.portfolio.manager.InvitationDAO;
 import org.olat.modules.portfolio.model.AccessRightChange;
 import org.olat.modules.portfolio.model.AccessRights;
-import org.olat.portfolio.manager.InvitationDAO;
 import org.olat.user.UserManager;
 import org.springframework.beans.factory.annotation.Autowired;
 
diff --git a/src/main/java/org/olat/modules/portfolio/ui/MediaCenterController.java b/src/main/java/org/olat/modules/portfolio/ui/MediaCenterController.java
index 9daf2ac512a5bad324af04815876103161e18b5c..0e7f51a1a9c869749d5fff947544b1e9096548f7 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/MediaCenterController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/MediaCenterController.java
@@ -89,12 +89,6 @@ import org.olat.modules.portfolio.ui.media.CollectTextMediaController;
 import org.olat.modules.portfolio.ui.media.CreateFileMediaController;
 import org.olat.modules.portfolio.ui.model.MediaRow;
 import org.olat.modules.portfolio.ui.renderer.MediaTypeCellRenderer;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.ui.EPArtefactPoolRunController;
-import org.olat.portfolio.ui.artefacts.view.EPArtefactChoosenEvent;
-import org.olat.portfolio.ui.artefacts.view.EPArtefactListChoosenEvent;
 import org.olat.repository.model.SearchMyRepositoryEntryViewParams.OrderBy;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -113,7 +107,7 @@ public class MediaCenterController extends FormBasicController
 	private FormLink newMediaCallout;
 	private FlexiTableElement tableEl;
 	private String mapperThumbnailUrl;
-	private Link addFileLink, createFileLink, addMediaLink, addTextLink, addCitationLink, importArtefactV1Link;
+	private Link addFileLink, createFileLink, addMediaLink, addTextLink, addCitationLink;
 	
 	private int counter = 0;
 	private final boolean select;
@@ -126,7 +120,6 @@ public class MediaCenterController extends FormBasicController
 	private MediaUploadController mediaUploadCtrl;
 	private CreateFileMediaController createFileCtrl;
 	private CollectTextMediaController textUploadCtrl;
-	private EPArtefactPoolRunController importArtefactv1Ctrl;
 	private CollectCitationMediaController citationUploadCtrl;
 
 	private NewMediasController newMediasCtrl;
@@ -134,11 +127,6 @@ public class MediaCenterController extends FormBasicController
 	
 	@Autowired
 	private PortfolioService portfolioService;
-	
-	@Autowired
-	private EPFrontendManager legacyEPFontentManager;
-	@Autowired
-	private PortfolioModule legacyPortfolioModule;
 	 
 	public MediaCenterController(UserRequest ureq, WindowControl wControl) {
 		super(ureq, wControl, "medias");
@@ -192,13 +180,6 @@ public class MediaCenterController extends FormBasicController
 		addCitationLink = LinkFactory.createToolLink("add.citation", translate("add.citation"), this);
 		addCitationLink.setIconLeftCSS("o_icon o_icon-lg o_icon_citation");
 		stackPanel.addTool(addCitationLink, Align.left);
-		
-		// only if there are v1 artefacts available
-		if (legacyPortfolioModule.isEnabled() &&  legacyEPFontentManager.hasMapOrArtefact(getIdentity())) {
-			importArtefactV1Link = LinkFactory.createToolLink("import.artefactV1", translate("import.artefactV1"), this);
-			importArtefactV1Link.setIconLeftCSS("o_icon o_icon-lg o_icon_import");
-			stackPanel.addTool(importArtefactV1Link, Align.left);			
-		}
 	}
 
 	@Override
@@ -415,30 +396,6 @@ public class MediaCenterController extends FormBasicController
 					doSelect(ureq, citationUploadCtrl.getMediaReference().getKey());
 				}
 			}
-		} else if(importArtefactv1Ctrl == source) {
-			Media media = null;
-			if(event instanceof EPArtefactChoosenEvent) {
-				EPArtefactChoosenEvent cEvent = (EPArtefactChoosenEvent)event;
-				media = doImportArtefactV1(cEvent.getArtefact());
-				loadModel();
-				tableEl.reloadData();
-			} else if(event instanceof EPArtefactListChoosenEvent) {
-				EPArtefactListChoosenEvent cmEvent = (EPArtefactListChoosenEvent)event;
-				for(AbstractArtefact artefact:cmEvent.getArtefacts()) {
-					media = doImportArtefactV1(artefact);
-				}
-				if(cmEvent.getArtefacts().size() > 1) {
-					media = null;//only auto select a single media
-				}
-				loadModel();
-				tableEl.reloadData();
-				showInfo("message.imported.successfully", new String[]{ Integer.toString(cmEvent.getArtefacts().size()) });
-			}
-			cmc.deactivate();
-			cleanUp();
-			if(select && media != null) {
-				doSelect(ureq, media.getKey());
-			}
 		} else if(newMediasCtrl == source) {
 			newMediasCalloutCtrl.deactivate();
 			if("add.file".equals(event.getCommand())) {
@@ -449,8 +406,6 @@ public class MediaCenterController extends FormBasicController
 				doAddTextMedia(ureq);
 			} else if("add.citation".equals(event.getCommand())) {
 				doAddCitationMedia(ureq);
-			} else if("import.artefactV1".equals(event.getCommand())) {
-				doChooseArtefactV1(ureq);
 			}
 		} else if(detailsCtrl == source) {
 			if(event instanceof MediaEvent) {
@@ -468,13 +423,11 @@ public class MediaCenterController extends FormBasicController
 	}
 	
 	private void cleanUp() {
-		removeAsListenerAndDispose(importArtefactv1Ctrl);
 		removeAsListenerAndDispose(citationUploadCtrl);
 		removeAsListenerAndDispose(mediaUploadCtrl);
 		removeAsListenerAndDispose(createFileCtrl);
 		removeAsListenerAndDispose(textUploadCtrl);
 		removeAsListenerAndDispose(cmc);
-		importArtefactv1Ctrl = null;
 		citationUploadCtrl = null;
 		mediaUploadCtrl = null;
 		createFileCtrl = null;
@@ -494,8 +447,7 @@ public class MediaCenterController extends FormBasicController
 			doAddTextMedia(ureq);
 		} else if(addCitationLink == source) {
 			doAddCitationMedia(ureq);
-		} else if(importArtefactV1Link == source) {
-			doChooseArtefactV1(ureq);
+
 		} else if(source == mainForm.getInitialComponent()) {
 			if("ONCLICK".equals(event.getCommand())) {
 				String rowKeyStr = ureq.getParameter("img_select");
@@ -573,27 +525,6 @@ public class MediaCenterController extends FormBasicController
 		listenTo(cmc);
 		cmc.activate();
 	}
-	
-	private void doChooseArtefactV1(UserRequest ureq) {
-		if(guardModalController(importArtefactv1Ctrl)) return;
-		
-		importArtefactv1Ctrl = new EPArtefactPoolRunController(ureq, this.getWindowControl(), true, false, true);
-		listenTo(importArtefactv1Ctrl);
-		
-		String title = translate("import.artefactV1");
-		cmc = new CloseableModalController(getWindowControl(), null, importArtefactv1Ctrl.getInitialComponent(), true, title, true);
-		listenTo(cmc);
-		cmc.activate();
-	}
-	
-	private Media doImportArtefactV1(AbstractArtefact oldArtefact) {
-		Media media = null;
-		MediaHandler handler = portfolioService.getMediaHandler(oldArtefact.getResourceableTypeName());
-		if(handler != null) {
-			media = handler.createMedia(oldArtefact);
-		}
-		return media;
-	}
 
 	private void doSelect(UserRequest ureq, Long mediaKey) {
 		Media media = portfolioService.getMediaByKey(mediaKey);
@@ -715,12 +646,8 @@ public class MediaCenterController extends FormBasicController
 	}
 	
 	private static class NewMediasController extends BasicController {
-		@Autowired
-		private EPFrontendManager legacyEPFontentManager;
-		@Autowired
-		private PortfolioModule legacyPortfolioModule;
 
-		private final Link addFileLink, addMediaLink, addTextLink, addCitationLink, importArtefactV1Link;
+		private final Link addFileLink, addMediaLink, addTextLink, addCitationLink;
 		
 		public NewMediasController(UserRequest ureq, WindowControl wControl) {
 			super(ureq, wControl);
@@ -738,14 +665,6 @@ public class MediaCenterController extends FormBasicController
 			
 			addCitationLink = LinkFactory.createLink("add.citation", "add.citation", getTranslator(), mainVc, this, Link.LINK);
 			addCitationLink.setIconLeftCSS("o_icon o_icon_citation o_icon-fw");
-			
-			// only if there are v1 artefacts available
-			if (legacyPortfolioModule.isEnabled() && legacyEPFontentManager.hasMapOrArtefact(getIdentity())) {
-				importArtefactV1Link = LinkFactory.createLink("import.artefactV1", "import.artefactV1", getTranslator(), mainVc, this, Link.LINK);
-				importArtefactV1Link.setIconLeftCSS("o_icon o_icon_import o_icon-fw");
-			} else {
-				importArtefactV1Link = null;
-			}
 
 			putInitialPanel(mainVc);
 		}
diff --git a/src/main/java/org/olat/portfolio/ui/PortfolioAdminController.java b/src/main/java/org/olat/modules/portfolio/ui/PortfolioAdminController.java
similarity index 73%
rename from src/main/java/org/olat/portfolio/ui/PortfolioAdminController.java
rename to src/main/java/org/olat/modules/portfolio/ui/PortfolioAdminController.java
index cabf030a3a35ceea07060aa460a8cdeb6e1be074..1c267ea00b36114da71b96b5210b53daa088d1bb 100644
--- a/src/main/java/org/olat/portfolio/ui/PortfolioAdminController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/PortfolioAdminController.java
@@ -17,11 +17,9 @@
  * frentix GmbH, http://www.frentix.com
  * <p>
  */
-package org.olat.portfolio.ui;
+package org.olat.modules.portfolio.ui;
 
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.List;
 import java.util.stream.Stream;
 
 import org.olat.collaboration.CollaborationToolsFactory;
@@ -32,14 +30,9 @@ import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElem
 import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormEvent;
-import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.translator.Translator;
 import org.olat.modules.portfolio.PortfolioV2Module;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.ui.filter.PortfolioFilterController;
 import org.springframework.beans.factory.annotation.Autowired;
 /**
  * 
@@ -90,55 +83,43 @@ public class PortfolioAdminController extends FormBasicController  {
 	};
 
 	private static String[] enabledKeys = new String[]{ "on" };
-	private static String[] enabledPortfolioKeys = new String[]{ "on", "legacy"};
 
 	private SingleSelection entryPointEl;
-	private FormLayoutContainer wizardFlc;
-	private MultipleSelectionElement portfoliosEnabled;
+	private MultipleSelectionElement portfolioEnabled;
 	private MultipleSelectionElement createBinderEl;
-	private final List<MultipleSelectionElement> handlersEnabled = new ArrayList<>();
-	private MultipleSelectionElement copyrightStepCB;
-	private MultipleSelectionElement reflexionStepCB;
 	private MultipleSelectionElement sectionVisibilityEl;
 	private MultipleSelectionElement entryElementsVisibilityEl;
 	private MultipleSelectionElement commentsVisibilityEl;
 	private SingleSelection entriesViewEl;
 
-	@Autowired
-	private PortfolioModule portfolioModule;
 	@Autowired
 	private PortfolioV2Module portfolioV2Module;
 	
 	public PortfolioAdminController(UserRequest ureq, WindowControl wControl) {
-		super(ureq, wControl, "adminconfig");
+		super(ureq, wControl);
 		initForm(ureq);
 	}
 
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		//module configuration
-		FormLayoutContainer moduleFlc = FormLayoutContainer.createDefaultFormLayout("flc_module", getTranslator());
-		formLayout.add(moduleFlc);
+		setFormTitle("portfolio.title");
+		setFormContextHelp("eAssessment: ePortfolio");
 
 		String[] enabledValues = new String[] { translate("enabled")};
 		
-		String[] enabledPortfolioValues = new String[] { translate("enabled"), translate("portfolio.v1.module.enabled") };
-		portfoliosEnabled = uifactory.addCheckboxesVertical("portfolio.module.enabled", moduleFlc, enabledPortfolioKeys, enabledPortfolioValues, 1);
-		if(portfolioModule.isEnabled() || portfolioV2Module.isEnabled()) {
-			portfoliosEnabled.select(enabledPortfolioKeys[0], true);
-		}
-		if(portfolioModule.isEnabled()) {
-			portfoliosEnabled.select(enabledPortfolioKeys[1], true);
+		portfolioEnabled = uifactory.addCheckboxesVertical("portfolio.module.enabled", formLayout, enabledKeys, enabledValues, 1);
+		if(portfolioV2Module.isEnabled()) {
+			portfolioEnabled.select(enabledKeys[0], true);
 		}
-		portfoliosEnabled.addActionListener(FormEvent.ONCHANGE);
+		portfolioEnabled.addActionListener(FormEvent.ONCHANGE);
 
-		createBinderEl = uifactory.addCheckboxesVertical("portfolio.user.create.binder", moduleFlc, BINDER_CREATE_KEYS,
+		createBinderEl = uifactory.addCheckboxesVertical("portfolio.user.create.binder", formLayout, BINDER_CREATE_KEYS,
 				translateKeys(BINDER_CREATE_KEYS), 1);
 		createBinderEl.addActionListener(FormEvent.ONCHANGE);
 		
 		String[] entryPointKeys = new String[] { PortfolioV2Module.ENTRY_POINT_TOC, PortfolioV2Module.ENTRY_POINT_ENTRIES };
 		String[] entryPointValues = new String[]{ translate("binder.entry.point.toc"), translate("binder.entry.point.entries") };
-		entryPointEl = uifactory.addDropdownSingleselect("binder.entry.point", "binder.entry.point", moduleFlc, entryPointKeys, entryPointValues, null);
+		entryPointEl = uifactory.addDropdownSingleselect("binder.entry.point", "binder.entry.point", formLayout, entryPointKeys, entryPointValues, null);
 		entryPointEl.addActionListener(FormEvent.ONCHANGE);
 		String entryPoint = portfolioV2Module.getBinderEntryPoint();
 		for(String entryPointKey:entryPointKeys) {
@@ -150,19 +131,19 @@ public class PortfolioAdminController extends FormBasicController  {
 			entryPointEl.select(entryPointKeys[0], true);
 		}
 		
-		sectionVisibilityEl = uifactory.addCheckboxesVertical("section.enabled", moduleFlc, SECTION_VISIBILITY_KEYS,
+		sectionVisibilityEl = uifactory.addCheckboxesVertical("section.enabled", formLayout, SECTION_VISIBILITY_KEYS,
 				translateKeys(SECTION_VISIBILITY_KEYS), 1);
 		sectionVisibilityEl.addActionListener(FormEvent.ONCHANGE);
 		
-		entryElementsVisibilityEl = uifactory.addCheckboxesVertical("entries.elements.enabled", moduleFlc,
+		entryElementsVisibilityEl = uifactory.addCheckboxesVertical("entries.elements.enabled", formLayout,
 				ENTRIES_ELEMENTS_KEYS, translateKeys(ENTRIES_ELEMENTS_KEYS), 1);
 		entryElementsVisibilityEl.addActionListener(FormEvent.ONCHANGE);
 		
-		commentsVisibilityEl = uifactory.addCheckboxesVertical("comments.enabled", moduleFlc, COMMENTS_KEYS,
+		commentsVisibilityEl = uifactory.addCheckboxesVertical("comments.enabled", formLayout, COMMENTS_KEYS,
 				translateKeys(COMMENTS_KEYS), 1);
 		commentsVisibilityEl.addActionListener(FormEvent.ONCHANGE);
 		
-		entriesViewEl = uifactory.addDropdownSingleselect("entries.view", moduleFlc, ENTRIES_VIEW_KEYS,
+		entriesViewEl = uifactory.addDropdownSingleselect("entries.view", formLayout, ENTRIES_VIEW_KEYS,
 				translateKeys(ENTRIES_VIEW_KEYS));
 		String selectedKey = ENTRIES_BOTH_ENABLED;
 		if (portfolioV2Module.isEntriesTableEnabled() && !portfolioV2Module.isEntriesListEnabled()) {
@@ -173,34 +154,6 @@ public class PortfolioAdminController extends FormBasicController  {
 		entriesViewEl.select(selectedKey, true);
 		entriesViewEl.addActionListener(FormEvent.ONCHANGE);
 		
-		//handlers configuration
-		FormLayoutContainer handlersFlc = FormLayoutContainer.createDefaultFormLayout("flc_handlers", getTranslator());
-		formLayout.add(handlersFlc);
-
-		List<EPArtefactHandler<?>> handlers = portfolioModule.getAllAvailableArtefactHandlers();
-		for(EPArtefactHandler<?> handler:handlers) {
-			Translator handlerTrans = handler.getHandlerTranslator(getTranslator());
-			handlersFlc.setTranslator(handlerTrans);
-			String handlerClass = PortfolioFilterController.HANDLER_PREFIX + handler.getClass().getSimpleName() + PortfolioFilterController.HANDLER_TITLE_SUFFIX;
-			MultipleSelectionElement handlerEnabled = uifactory.addCheckboxesHorizontal(handlerClass, handlersFlc, enabledKeys, enabledValues);
-			handlerEnabled.select(enabledKeys[0], handler.isEnabled());
-			handlerEnabled.setUserObject(handler);
-			handlerEnabled.addActionListener(FormEvent.ONCHANGE);
-			handlersEnabled.add(handlerEnabled);
-		}
-		
-		// configure steps in artefact collection wizard
-		wizardFlc = FormLayoutContainer.createDefaultFormLayout("flc_wizard", getTranslator());
-		formLayout.add(wizardFlc);	
-		copyrightStepCB = uifactory.addCheckboxesHorizontal("wizard.step.copyright", wizardFlc, enabledKeys, enabledValues);
-		copyrightStepCB.select(enabledKeys[0], portfolioModule.isCopyrightStepEnabled());
-		copyrightStepCB.addActionListener(FormEvent.ONCHANGE);
-		
-		reflexionStepCB = uifactory.addCheckboxesHorizontal("wizard.step.reflexion", wizardFlc, enabledKeys, enabledValues);
-		reflexionStepCB.select(enabledKeys[0], portfolioModule.isReflexionStepEnabled());
-		reflexionStepCB.addActionListener(FormEvent.ONCHANGE);
-		wizardFlc.setVisible(portfoliosEnabled.isSelected(1));
-		
 		updateV2UI();
 	}
 
@@ -245,30 +198,11 @@ public class PortfolioAdminController extends FormBasicController  {
 	@Override
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		super.formInnerEvent(ureq, source, event);
-		if(source == portfoliosEnabled) {
-			boolean enabled = portfoliosEnabled.isSelected(0);
-			if(enabled) {
-				portfolioModule.setEnabled(portfoliosEnabled.isSelected(1));
-				portfolioV2Module.setEnabled(true);
-			} else {
-				portfolioModule.setEnabled(false);
-				portfolioV2Module.setEnabled(false);
-			}
-			// update collaboration tools list
-
-			wizardFlc.setVisible(portfoliosEnabled.isSelected(1));
+		if(source == portfolioEnabled) {
+			boolean enabled = portfolioEnabled.isSelected(0);
+			portfolioV2Module.setEnabled(enabled);
 			updateV2UI();
 			CollaborationToolsFactory.getInstance().initAvailableTools();
-		} else if(handlersEnabled.contains(source)) {
-			EPArtefactHandler<?> handler = (EPArtefactHandler<?>)source.getUserObject();
-			boolean enabled = ((MultipleSelectionElement)source).isSelected(0);
-			portfolioModule.setEnableArtefactHandler(handler, enabled);
-		} else if(source == reflexionStepCB){
-			boolean enabled = reflexionStepCB.isSelected(0);
-			portfolioModule.setReflexionStepEnabled(enabled);
-		} else if(source == copyrightStepCB){
-			boolean enabled = copyrightStepCB.isSelected(0);
-			portfolioModule.setCopyrightStepEnabled(enabled);
 		} else if(createBinderEl == source) {
 			Collection<String>  selectedCreateBinder = createBinderEl.getSelectedKeys();
 			boolean learnerCanCreateBinders = selectedCreateBinder.contains(BINDER_CREATE_LEARNER);
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties
index d2977807ce3b42bffd9e3226326e7b4e9aa62ec6..e9080e833f31210c377af1253382e935ba83f90a 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties
@@ -26,6 +26,8 @@ add.template.form=Fragebogen hinzuf\u00FCgen
 add.template.document=Dokumente hinzuf\u00FCgen
 add.text=Text hinzuf\u00FCgen
 add.video=Video hinzuf\u00FCgen
+admin.menu.title=ePortfolio
+admin.menu.title.alt=ePortfolio konfigurieren
 all.binder={0} weitere Mappe vorhanden
 all.binders={0} weitere Mappen vorhanden
 all.page={0} weitere Beitrag vorhanden
@@ -82,6 +84,10 @@ begin.date=Beginn
 binder.atleastone=Bitte w\u00E4hlen Sie mindestens eine Mappe.
 binder.by=von {0}
 binder.entry.name=Zum Kurs
+binder.entry.point.not.available=Dieser Reiter ist deaktiviert. Bitte aktivieren Sie zuerst den Reiter, bevor Sie ihn als Ankunft in der Mappe ausw\u00E4len.
+binder.entry.point=Ankunft in Mappe
+binder.entry.point.entries=Eintr\u00E4ge
+binder.entry.point.toc=\u00DCberblick
 binder.last.update=Letzte \u00C4nderung
 binder.none=Floating Eintrag
 binder.num.comments={0} Kommentare seit Erstelldatum
@@ -108,6 +114,9 @@ comment.one=1 Kommentar
 comment.several={0} Kommentare
 comment.title=Kommentare
 comment.zero=Noch keine Kommentare
+comments.enabled=Kommentare sichtbar in
+comments.entries.enabled=$org.olat.modules.portfolio.ui\:portfolio.entries
+comments.overview.enabled=$org.olat.modules.portfolio.ui\:portfolio.overview
 compare.evaluations=Auswertung
 confirmation=Best\u00E4tigung
 confirm.close.page=Wollen Sie diesen Eintrag abschliessen? Der Eintrag wird f\u00FCr den Lernenden anschliessend als abgeschlossen angezeigt.
@@ -180,6 +189,13 @@ edit.page.meta=Eintrag editieren
 edit.page.metadata=Metadaten bearbeiten
 edition=Edition
 end.date=Enddatum
+entries.both.enabled=Tabellenansicht und Listenansicht
+entries.elements.enabled=Sichtbare Elemente
+entries.list.enabled=Listenansicht
+entries.search.enabled=Suche
+entries.table.enabled=Tabellenansicht
+entries.timeline.enabled=Zeitstrahl
+entries.view=Ansicht der Eintr\u00E4ge
 error.begin.after.end=Das Beginn-Datum muss vor dem Ende-Datum liegen.
 error.existing.invitee.selection=Bitte, w\u00E4hlen Sie einen bestehenden Benutzer aus.
 error.invalid.type=Dieser Dateityp ist nicht unters\u00FCtzt.
@@ -212,7 +228,6 @@ image.align.left=Kleines Bild, links von Zusammenfassung
 image.align.left.large=Grosses Bild, links von Zusammenfassung 
 image.align.right=Kleines Bild, rechts von Zusammenfassung 
 image.align.right.large=Grosses Bild, rechts von Zusammenfassung 
-import.artefactV1=Artefakte importieren
 institution=Institution
 invitation.extern.mail.body=Sie wurden von {2} {3} eingeladen, eine Sammelmappe in OpenOlat zu betrachten. Sie finden diese unter folgender Adresse\: {0}
 invitation.extern.mail.subject=Einladung zu einer freigegebenen Sammelmappe
@@ -244,7 +259,6 @@ map.share.with.mail.error.olatUser=Diese E-Mailadresse wird bereits von einem Op
 map.template=Portfoliovorlage
 media.center=Mediathek
 media.center.text=Hier k\u00F6nnen Sie Mediendateien, Dokumente oder andere Artefakte hinzuf\u00FCgen. Verwenden Sie die Medien, um Ihre Eintr\u00E4ge zu illustrieren und zu erg\u00E4nzen.
-message.imported.successfully={0} Medien erfolgreich importiert.
 meta.assignment=Aufgabe
 meta.binder.section.titles=In Mappe "{0}", Bereich "{1}"
 meta.categories=Kategorien
@@ -321,6 +335,7 @@ place=Ort
 portfolio.assessment=Bewertung
 portfolio.entries=Eintr\u00E4ge
 portfolio.history=\u00C4nderungsprotokoll
+portfolio.module.enabled=ePortfolio einschalten
 portfolio.overview=\u00DCberblick
 portfolio.personal.menu.title=Portfolio 2.0
 portfolio.personal.menu.title.alt=$\:portfolio.personal.menu.title
@@ -330,6 +345,11 @@ portfolio.templates=Vorlagen
 portfolio.templates.edit=Vorlagen
 portfolio.template.options=Einstellungen
 portfolio.template.options.title=Einstellungen zur Portfoliovorlage
+portfolio.user.can.create.binder=Lernende d\u00FCrfen Mappe erstellen
+portfolio.user.can.create.binder.course=Lernende d\u00FCrfen Mappe von Kurse erstellen
+portfolio.user.can.create.binder.template=Lernende d\u00FCrfen Mappe von Vorlage erstellen
+portfolio.user.create.binder=Mappe erstellen
+portfolio.title=ePortfolio
 portfoliotask=Portfolioaufgabe
 portfoliotask.none=Keine
 publication.title=Ver\u00F6ffentlichungstitel
@@ -359,9 +379,14 @@ revision.page=\u00DCberarbeitung anfordern
 revision.page.title=Der Eintrag wird zur \u00DCberarbeitung an den Benutzer zur\u00FCckgegeben.
 save.done=$org.olat.modules.assessment.ui\:save.done
 section.delete=Bereich l\u00F6schen
+section.disable.not.allowed=Der Reiter, der f\u00FCr die Ankunft in der Mappe vorgesehen ist, kann nicht deaktiviert werden!
 section.down=Unten
 section.edit=Bereich bearbeiten
+section.enabled=Sichtbare Reiter
 section.ended.explain=Das Enddatum dieses Bereichs wurde erreicht. Es ist weiterhin m\u00F6glich, Aufgaben zu bearbeiten und freizugeben..
+section.entries.enabled=$org.olat.modules.portfolio.ui\:portfolio.entries
+section.history.enabled=$org.olat.modules.portfolio.ui\:portfolio.history
+section.overview.enabled=$org.olat.modules.portfolio.ui\:portfolio.overview
 section.paging.all=Alle Eintr\u00E4ge zeigen
 section.paging.next=N\u00E4chster Bereich
 section.paging.one=Ein Bereich
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties
index f40e2186857e11f0cd63634537438f950860ecc9..53a4d3e66219188b0207f9fac12cc0426e9eddef 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties
@@ -26,6 +26,8 @@ add.template.document=Add documents
 add.template.form=Add survey
 add.text=Add text
 add.video=Add video
+admin.menu.title=ePortfolio
+admin.menu.title.alt=Configure ePortfolio
 all.binder={0} binder available
 all.binders={0} binders available
 all.page={0} entry available
@@ -82,6 +84,11 @@ begin.date=Begin
 binder.atleastone=Please select at least one binder.
 binder.by=by {0}
 binder.entry.name=Regarding course
+binder.entry.point.not.available=This section is deactivated. Please activate the section before using it as landing page.
+binder.entry.point=Ankunft in Mappe
+binder.entry.point=Landing point in binder
+binder.entry.point.entries=Entries
+binder.entry.point.toc=Overview
 binder.last.update=Last update
 binder.none=Floating entry
 binder.num.comments={0} comments since creation
@@ -108,6 +115,12 @@ comment.one=1 comment
 comment.several={0} comments
 comment.title=Comments
 comment.zero=Still no comments
+comments.enabled=Comments visible in
+comments.entries.enabled=$org.olat.modules.portfolio.ui\:portfolio.entries
+comments.overview.enabled=$org.olat.modules.portfolio.ui\:portfolio.overview
+comments.enabled=Commentaires visibles dans
+comments.entries.enabled=$org.olat.modules.portfolio.ui\:portfolio.entries
+comments.overview.enabled=$org.olat.modules.portfolio.ui\:portfolio.overview
 compare.evaluations=Evaluation
 confirm.close.page=Do you really want to close this entry? The entry will be marked as closed for the trainee.
 confirm.close.page.other.coaches=The following persons also have access to this entry\:
@@ -180,6 +193,13 @@ edit.page.meta=Edit entry
 edit.page.metadata=Edit metadata
 edition=Edition
 end.date=End
+entries.both.enabled=Table and List
+entries.elements.enabled=Visible elements
+entries.list.enabled=List
+entries.search.enabled=Search
+entries.table.enabled=Table
+entries.timeline.enabled=Timeline
+entries.view=View if the entries
 error.begin.after.end=The start date must be before the end date.
 error.existing.invitee.selection=Please, choose an already existing user
 error.invalid.type=This file type is not supported.
@@ -212,7 +232,6 @@ image.align.left=Small image, place on left side off summary
 image.align.left.large=Large image, place on left side off summary
 image.align.right=Small image, display on right side off summary
 image.align.right.large=Large image, place on right side off summary
-import.artefactV1=Import artefacts
 institution=Institution
 invitation.extern.mail.body={2} {3} has given you access right to the portfolio in OpenOlat.\nTo open the corresponding binder, please go to\: {0}
 invitation.extern.mail.subject=Invitation to a portfolio binder
@@ -244,7 +263,6 @@ map.share.with.mail.error.olatUser=This e-mail address is already used by an OLA
 map.template=Portfolio template
 media.center=Media center
 media.center.text=Search, create, add media files or other artefacts that you want to use within your entries for illustration purposes.
-message.imported.successfully={0} medias successfully imported.
 meta.assignment=Assignment
 meta.binder.section.titles=in binder "{0}", section "{1}"
 meta.categories=Categories
@@ -321,6 +339,7 @@ place=Place
 portfolio.assessment=Grading
 portfolio.entries=Entries
 portfolio.history=History
+portfolio.module.enabled=Activate ePortfolio
 portfolio.overview=Overview
 portfolio.personal.menu.title=Portfolio 2.0
 portfolio.personal.menu.title.alt=$\:portfolio.personal.menu.title
@@ -330,6 +349,11 @@ portfolio.template.options=Options
 portfolio.template.options.title=Portfolio template's options
 portfolio.templates=Templates
 portfolio.templates.edit=Templates
+portfolio.user.can.create.binder=Learner are allowed to create binders
+portfolio.user.can.create.binder.course=Learner are allowed to create binders from a course
+portfolio.user.can.create.binder.template=Learner are allowed to create binders from a template
+portfolio.user.create.binder=Create binder
+portfolio.title=ePortfolio
 portfoliotask=Portfolio Task
 portfoliotask.none=None
 publication.title=Publication title
@@ -359,9 +383,14 @@ revision.page=Revision
 revision.page.title=The entry is given back to the user for the revision.
 save.done=$org.olat.modules.assessment.ui\:save.done
 section.delete=Delete section
+section.disable.not.allowed=This section cannot be deactivated. It is selected as the landing page!
 section.down=Down
 section.edit=Edit section
+section.enabled=Visible sections
 section.ended.explain=The end date of this section is reached. It is still possible to edit tasks and to give access to them.
+section.entries.enabled=$org.olat.modules.portfolio.ui\:portfolio.entries
+section.history.enabled=$org.olat.modules.portfolio.ui\:portfolio.history
+section.overview.enabled=$org.olat.modules.portfolio.ui\:portfolio.overview
 section.paging.all=Show all entries
 section.paging.next=Next
 section.paging.one=One section
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_fr.properties
index 4e5ba1813ce39bcdcd8a476dc8fab11397f3b67e..8f4f77bbc7187a3c54933f4feacea4f55555003e 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_fr.properties
@@ -26,6 +26,8 @@ add.template.document=Ajouter des documents
 add.template.form=Ajouter un questionnaire
 add.text=Ajouter un texte
 add.video=Ajouter une vid\u00E9o
+admin.menu.title=ePortfolio
+admin.menu.title.alt=Configurer ePortfolio
 all.binder={0} classeur disponible
 all.binders={0} classeurs disponibles
 all.page={0} contribution disponible
@@ -180,6 +182,13 @@ edit.page.meta=Ajouter une contribution
 edit.page.metadata=Editer les m\u00E9ta-donn\u00E9es
 edition=Edition
 end.date=Date de fin
+entries.both.enabled=Table et liste
+entries.elements.enabled=El\u00E9ments visibles
+entries.list.enabled=Liste
+entries.search.enabled=Recherche
+entries.table.enabled=Table
+entries.timeline.enabled=Frise chronologique
+entries.view=A voir si les entr\u00E9es
 error.begin.after.end=La date de d\u00E9but doit se trouver avant la date de fin.
 error.existing.invitee.selection=Choisissez un utilisateur existant s'il vous pla\u00EEt.
 error.invalid.type=Ce type de fichier n'est pas support\u00E9.
@@ -212,7 +221,6 @@ image.align.left=Petite image, plac\u00E9e \u00E0 la gauche du r\u00E9sum\u00E9
 image.align.left.large=Grande image, plac\u00E9e \u00E0 la gauche du r\u00E9sum\u00E9
 image.align.right=Int\u00E9gr\u00E9 l'image \u00E0 droite du r\u00E9sum\u00E9
 image.align.right.large=Grande image, plac\u00E9e \u00E0 la droite du r\u00E9sum\u00E9
-import.artefactV1=Importer des artefacts
 institution=Institution
 invitation.extern.mail.body={2} {3} vous propose un acc\u00E8s \u00E0 son portfolio dans OpenOlat. Pour ouvrir le classeur correspondant, utilisez s'il vous pla\u00EEt le lien suivant\: {0}
 invitation.extern.mail.subject=Invitation au classeur d'un portfolio
@@ -244,7 +252,6 @@ map.share.with.mail.error.olatUser=Cette adresse e-mail est d\u00E9j\u00E0 utili
 map.template=Mod\u00E8le de portfolio
 media.center=M\u00E9diath\u00E8que
 media.center.text=Chercher, cr\u00E9er et ajouter des fichiers multi-m\u00E9dias et autres artefacts pour illustrer vos contributions \u00E0 vos portfolios
-message.imported.successfully={0} fichier multi-m\u00E9dia import\u00E9 avec succ\u00E8s.
 meta.assignment=Devoir
 meta.binder.section.titles=dans le classeur "{0}", section "{1}"
 meta.categories=Cat\u00E9gories
@@ -321,6 +328,7 @@ place=Lieu
 portfolio.assessment=Evaluation
 portfolio.entries=Contributions
 portfolio.history=Historique
+portfolio.module.enabled=Activer ePortfolio
 portfolio.overview=Aper\u00E7u
 portfolio.personal.menu.title=Portfolio 2.0
 portfolio.personal.menu.title.alt=$\:portfolio.personal.menu.title
@@ -330,6 +338,11 @@ portfolio.template.options=Options
 portfolio.template.options.title=Options du mod\u00E8le de Portfolio
 portfolio.templates=Mod\u00E8les
 portfolio.templates.edit=Mod\u00E8les
+portfolio.title=ePortfolio
+portfolio.user.can.create.binder=Les \u00E9tudiants peuvent cr\u00E9er des classeurs
+portfolio.user.can.create.binder.course=Les \u00E9tudiants peuvent cr\u00E9er des classeurs en provenance d'un cours
+portfolio.user.can.create.binder.template=Les \u00E9tudiants peuvent cr\u00E9er des classeurs depuis un mod\u00E8le
+portfolio.user.create.binder=Cr\u00E9er un classeur
 portfoliotask=Devoir portfolio
 portfoliotask.none=Aucun
 publication.title=Titre de la publication
@@ -359,9 +372,14 @@ revision.page=R\u00E9vision
 revision.page.title=La contribution sera retourn\u00E9e \u00E0 l'utilisateur pour r\u00E9vision.
 save.done=$org.olat.modules.assessment.ui\:save.done
 section.delete=Effacer la section
+section.disable.not.allowed=Cette section ne peut \u00EAtre d\u00E9sactiv\u00E9e. Elle est s\u00E9lectionn\u00E9e comme page de d\u00E9part.
 section.down=Vers le bas
 section.edit=Editer la section
+section.enabled=Sections visibles
 section.ended.explain=La date de fin de cette section a \u00E9t\u00E9 atteinte. Il est toujours possible d'\u00E9diter les devoirs et les publier.
+section.entries.enabled=$org.olat.modules.portfolio.ui\:portfolio.entries
+section.history.enabled=$org.olat.modules.portfolio.ui\:portfolio.history
+section.overview.enabled=$org.olat.modules.portfolio.ui\:portfolio.overvie
 section.paging.all=Afficher toutes les contributions
 section.paging.next=Suivant
 section.paging.one=Une section
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_it.properties
index 7971d36cc4bf27505a11bff1e04099e7cfeed624..3ef8809ddea7adc450dc112860a0df8224b03aa7 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_it.properties
@@ -21,6 +21,8 @@ add.media=Aggiungere file media
 add.member=Aggiungere membro
 add.text=Aggiungere testo
 add.video=Aggiungere video
+admin.menu.title=ePortfolio
+admin.menu.title.alt=Configurare il portfolio
 allow.delete.binder=Gli utenti sono abilitati ad eliminare i raccoglitori
 allow.delete.binder.warning=Gli utenti sono ora abilitati ad eliminare i propri raccoglitori.
 allow.new.entries=Gli utenti sono abilitati alla creazione di nuove voci
@@ -65,6 +67,9 @@ begin.date=Inizio
 binder.atleastone=Selezionare almeno un raccoglitore.
 binder.by=da {0}
 binder.entry.name=Riguardante il corso
+binder.entry.point=punto di arrivo in raccoglitore
+binder.entry.point.entries=Elementi
+binder.entry.point.toc=Panoramic
 binder.last.update=Ultimo aggiornamento
 binder.none=Elemento mobile
 binder.num.comments={0} commenti dalla creazione
@@ -168,7 +173,6 @@ image.align.left=Immagine miniatura, a sinistra del sommario
 image.align.left.large=Immagine grande, a sinistra del sommario
 image.align.right=Immagine miniatura, a destra del sommario
 image.align.right.large=Immagine grande, a destra del sommario
-import.artefactV1=Importare artefatti
 institution=Istituzione
 invitation.extern.mail.body={2} {3} ti ha concesso il diritto di accesso al portfolio in OpenOlat.\r\nPer accedere al corrispondente raccoglitore, visitare\: {0}
 invitation.extern.mail.subject=Invito ad un raccoglitore portfolio
@@ -197,7 +201,6 @@ map.share.with.mail.error.olatUser=Questo indirizzo e-mail viene gi\u00E0 utiliz
 map.template=Modello di portfolio
 media.center=Mediateca
 media.center.text=Qui \u00E8 possibile cercare, creare, aggiungere file media o altri artefatti da utilizzare all'interno degli elementi a scopo illustrativo e integrativo.
-message.imported.successfully={0} media importati con successo.
 meta.assignment=Compito
 meta.binder.section.titles=nel raccoglitore "{0}", sezione "{1}"
 meta.categories=Categorie
@@ -267,12 +270,18 @@ place=Posizione
 portfolio.assessment=Valutazione
 portfolio.entries=Elementi
 portfolio.history=Cronologia
+portfolio.module.enabled=Attivare ePortfolio
 portfolio.overview=Panoramica
 portfolio.personal.menu.title=Portfolio 2.0
 portfolio.personal.menu.title.alt=$\:portfolio.personal.menu.title
 portfolio.publish=Controllo accesso
 portfolio.root.breadcrump=Portfolio
 portfolio.template.options=Opzioni
+portfolio.title=ePortfolio
+portfolio.user.can.create.binder=Gli studenti sono abilitati alla creazione di raccoglitori
+portfolio.user.can.create.binder.course=Gli studenti sono abilitati a creare raccoglitori da un corso
+portfolio.user.can.create.binder.template=Gli studenti sono abilitati alla creazione di un raccoglitore da un modello
+portfolio.user.create.binder=Creare raccoglitori
 portfoliotask=Compito portfolio
 portfoliotask.none=Nessuno
 publication.title=Titolo pubblicazione
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_nl_NL.properties
index 2f232a07feccfde9aabe853cc08a70065f6d9839..f380c3e14972ba79735ca98f4b78d9d50643cecb 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_nl_NL.properties
@@ -1,4 +1,6 @@
 #Fri Sep 16 10:07:12 CEST 2016
+admin.menu.title=ePortfolio
+admin.menu.title.alt=Configureer ePortfolio
 attachments.error.file.exists=Dit bestand bestaat al en kan daardoor niet opnieuw ge\u00FCpload worden.
 attachments.upload.successful=Bestand {0} werd met succes ge\u00FCpload. Als het nodig is, kunnen er nog andere bestanden toegevoegd worden.
 error.invitation.mail.used=Dit e-mailadres wordt al gebruikt door een OpenOlat gebruiker.
@@ -8,4 +10,6 @@ invitation.mail.body=U bent uitgenodigd door {1} om een kijkje te nemen in een a
 invitation.mail.failure=Er is een fout opgetreden tijdens het versturen van uw e-mail. De uitgenodigde persoon kon niet verwittigd worden. Gelieve het later opnieuw te proberen of uw ondersteuningsteam te contacteren.
 invitation.mail.subject=Er is reeds een uitnodiging voor de accumulatieve map vrijgegeven
 invitation.mail.success=De uitgenodigde persoon is succesvol verwittigd via e-mail.
-map.share.with.mail.error.olatUser=Dit e-mailadres wordt al gebruikt door een OLAT gebruiker.
+map.share.with.mail.error.olatUser=Dit e-mailadres wordt al gebruikt door een OpenOlat gebruiker.
+portfolio.module.enabled=Activeer ePortfolio
+portfolio.title=ePortfolio
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_pl.properties
index 123a7c999efc72706a47d1fde0fd6e4be1f0eb88..090b552d70723fabf6a0fbb3da7728e6362261cb 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_pl.properties
@@ -1,4 +1,6 @@
 #Fri Sep 16 10:07:12 CEST 2016
+admin.menu.title=Portfolio
+admin.menu.title.alt=Konfiguruj Portfolio
 attachments.error.file.exists=Taki plik ju\u017C istnieje, dlatego nie mo\u017Ce zosta\u0107 przes\u0142any ponownie.
 attachments.upload.successful=Plik {0} przes\u0142any pomy\u015Blnie. W dalszym ci\u0105gu mo\u017Cna do\u0142\u0105cza\u0107 kolejne pliki.
 error.invitation.mail.used=Ten adres e-mail jest ju\u017C wykorzystywany przez innego u\u017Cytkownika OpenOlat.
@@ -8,4 +10,5 @@ invitation.mail.body=Zosta\u0142e\u015B zaproszony przez {1} do obejrzenia folde
 invitation.mail.failure=Wyst\u0105pi\u0142 b\u0142\u0105d podczas wysy\u0142ania wiadomo\u015Bci e-mail. Osoby, kt\u00F3re zaprosi\u0142e\u015B nie zostan\u0105 powiadomione. Spr\u00F3buj ponownie p\u00F3\u017Aniej lub skontaktuj si\u0119 z osob\u0105 odpowiedzialn\u0105 za wsparcie.
 invitation.mail.subject=Zaproszenie do folderu zbiorczego zosta\u0142o ju\u017C udost\u0119pnione
 invitation.mail.success=Zaproszone osoby zosta\u0142y powiadomione mailem.
-map.share.with.mail.error.olatUser=Ten adres e-mail jest ju\u017C wykorzystywany przez innego u\u017Cytkownika OLAT.
+map.share.with.mail.error.olatUser=Ten adres e-mail jest ju\u017C wykorzystywany przez innego u\u017Cytkownika OpenOlat.
+portfolio.module.enabled=W\u0142\u0105cz ePortfolio
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_pt_BR.properties
index a667c43fed60744e39ade30cdbc37022b7120f2c..4bda2d1572d0dc6d358ef5fbcfc91d18b72ca4e7 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_pt_BR.properties
@@ -26,6 +26,8 @@ add.template.document=Adicionar documentos
 add.template.form=Adicionar pesquisa
 add.text=Adicionar texto
 add.video=Adicionar v\u00EDdeo
+admin.menu.title=ePortfolio
+admin.menu.title.alt=Configurar ePortfolio
 all.binder={0} fich\u00E1rio dispon\u00EDvel
 all.binders={0} pastas dispon\u00EDveis
 all.page={0} entrada dispon\u00EDvel
@@ -82,6 +84,10 @@ begin.date=Come\u00E7ar
 binder.atleastone=Por favor, selecione pelo menos uma pasta.
 binder.by=por {0}
 binder.entry.name=em rela\u00E7\u00E3o ao curso
+binder.entry.point=Ponto de retorno na pasta
+binder.entry.point.entries=Entradas
+binder.entry.point.not.available=Esta se\u00E7\u00E3o est\u00E1 desativada. Por favor, ative a se\u00E7\u00E3o antes de us\u00E1-la como p\u00E1gina de destino.
+binder.entry.point.toc=Vis\u00E3o geral
 binder.last.update=\u00DAltima atualiza\u00E7\u00E3o
 binder.none=Entrada flutuante
 binder.num.comments={0} coment\u00E1rios desde a cria\u00E7\u00E3o
@@ -108,6 +114,9 @@ comment.one=1 coment\u00E1rio
 comment.several={0} coment\u00E1rios
 comment.title=Coment\u00E1rios
 comment.zero=Ainda sem coment\u00E1rios
+comments.enabled=Coment\u00E1rios vis\u00EDveis em
+comments.entries.enabled=$org.olat.modules.portfolio.ui\:portfolio.entries
+comments.overview.enabled=$org.olat.modules.portfolio.ui\:portfolio.overview/
 compare.evaluations=Avalia\u00E7\u00E3o
 confirm.close.page=Deseja concluir esta entrada? A entrada \u00E9 exibida como conclu\u00EDda para o aprendiz.
 confirm.close.page.other.coaches=As seguintes pessoas tamb\u00E9m t\u00EAm acesso a esta entrada\:
@@ -180,6 +189,13 @@ edit.page.meta=Editar entrada
 edit.page.metadata=Editar metadados
 edition=Edi\u00E7\u00E3o
 end.date=Final
+entries.both.enabled=Tabela e lista
+entries.elements.enabled=Elementos vis\u00EDveis
+entries.list.enabled=Lista
+entries.search.enabled=Busca
+entries.table.enabled=Tabela
+entries.timeline.enabled=Timeline
+entries.view=Vista das entrada
 error.begin.after.end=A data de in\u00EDcio deve ser anterior \u00E0 data de t\u00E9rmino.
 error.existing.invitee.selection=Por favor, escolha um usu\u00E1rio j\u00E1 existente
 error.invalid.type=Esse tipo de arquivo n\u00E3o \u00E9 suportado.
@@ -212,7 +228,6 @@ image.align.left=Imagem pequena, colocar no lado esquerdo fora do resumo
 image.align.left.large=Imagem grande, colocar no lado esquerdo fora do resumo
 image.align.right=Imagem pequena, exibir no lado direito fora do resumo
 image.align.right.large=Imagem grande, colocar no lado direito fora do resumo
-import.artefactV1=Importar artefatos
 institution=Institui\u00E7\u00E3o
 invitation.extern.mail.body={2} {3} lhe deu direto de acesso ao portf\u00F3lio no OpenOlat.\r\nPara abrir o correspondente fich\u00E1rio, v\u00E1 para\: {0}
 invitation.extern.mail.subject=Convite para um fich\u00E1rio de portf\u00F3lio
@@ -244,7 +259,6 @@ map.share.with.mail.error.olatUser=Este endere\u00E7o de e-mail j\u00E1 \u00E9 u
 map.template=Template do Portfolio
 media.center=M\u00EDdia Center
 media.center.text=Pesquise, crie, adicione arquivos de m\u00EDdia ou outros artefatos que voc\u00EA deseja usar em suas entradas para fins de ilustra\u00E7\u00E3o.
-message.imported.successfully={0} m\u00EDdias importadas com \u00EAxito.
 meta.assignment=Atribui\u00E7\u00E3o (tarefa)
 meta.binder.section.titles=Na pasta "{0}", se\u00E7\u00E3o "{1}"
 meta.categories=Categorias
@@ -321,6 +335,7 @@ place=Lugar
 portfolio.assessment=Classifica\u00E7\u00E3o
 portfolio.entries=Entradas
 portfolio.history=Hist\u00F3ria
+portfolio.module.enabled=Ativar ePortfolio
 portfolio.overview=Vis\u00E3o geral
 portfolio.personal.menu.title=Portf\u00F3lio 2.0
 portfolio.personal.menu.title.alt=$\:portfolio.personal.menu.title
@@ -330,6 +345,11 @@ portfolio.template.options=Op\u00E7\u00F5es
 portfolio.template.options.title=Op\u00E7\u00F5es de modelo de portf\u00F3lio
 portfolio.templates=Modelos
 portfolio.templates.edit=Modelos
+portfolio.title=ePortfolio
+portfolio.user.can.create.binder=Os alunos t\u00EAm permiss\u00E3o para criar pastas
+portfolio.user.can.create.binder.course=Os alunos podem criar pastas de um curso
+portfolio.user.can.create.binder.template=Os alunos podem criar pastas a partir de um modelo
+portfolio.user.create.binder=Criar pastas
 portfoliotask=Tarefa do portf\u00F3lio
 portfoliotask.none=Nenhum
 publication.title=T\u00EDtulo da publica\u00E7\u00E3o
@@ -359,9 +379,14 @@ revision.page=Revis\u00E3o
 revision.page.title=A entrada ser\u00E1 devolvida ao usu\u00E1rio para a revis\u00E3o.
 save.done=$org.olat.modules.assessment.ui\:save.done
 section.delete=Excluir se\u00E7\u00E3o
+section.disable.not.allowed=Esta se\u00E7\u00E3o n\u00E3o pode ser desativada. Est\u00E1 selecionada como a p\u00E1gina de destino\!
 section.down=Baixa
 section.edit=Editar se\u00E7\u00E3o
+section.enabled=Se\u00E7\u00F5es vis\u00EDveis
 section.ended.explain=A data de t\u00E9rmino desta se\u00E7\u00E3o foi alcan\u00E7ada. Ainda \u00E9 poss\u00EDvel editar tarefas e dar acesso a elas.
+section.entries.enabled=$org.olat.modules.portfolio.ui\:portfolio.entries
+section.history.enabled=$org.olat.modules.portfolio.ui\:portfolio.history
+section.overview.enabled=$org.olat.modules.portfolio.ui\:portfolio.overvie
 section.paging.all=Mostrar todas entradas
 section.paging.next=Pr\u00F3ximo
 section.paging.one=Uma se\u00E7\u00E3o
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_zh_CN.properties
index 61aa8b8b5d68e25733aeb038be8c23ccc71e8693..18c2a3adaa094fe847a2a1abb35fd8357776b4e2 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_zh_CN.properties
@@ -19,6 +19,8 @@ add.media=\u589E\u52A0\u5143\u6587\u4EF6
 add.member=\u589E\u52A0\u6210\u5458
 add.text=\u589E\u52A0\u6587\u672C
 add.video=\u589E\u52A0\u89C6\u9891
+admin.menu.title=\u7535\u5B50\u6863\u6848
+admin.menu.title.alt=\u7535\u5B50\u6863\u6848\u914D
 allow.delete.binder=\u5141\u8BB8\u7528\u6237\u5220\u9664\u7ED1\u5B9A
 allow.delete.binder.warning=\u4E0D\u5141\u8BB8\u7528\u6237\u5220\u9664\u7ED1\u5B9A
 artefact.bc=\u6587\u4EF6
@@ -41,3 +43,5 @@ binder.atleastone=\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A\u7ED1\u5E26
 binder.last.update=\u6700\u540E\u66F4\u65B0
 binder.status=\u72B6\u6001
 binders=\u7ED1\u5B9A
+portfolio.module.enabled=\u6FC0\u6D3B\u7535\u5B50\u6863\u6848
+portfolio.title=\u7535\u5B50\u6863\u6848
diff --git a/src/main/java/org/olat/modules/webFeed/FeedViewHelper.java b/src/main/java/org/olat/modules/webFeed/FeedViewHelper.java
index 6a3ab880f5eea41b94a66f08d8ea5e9443a9b3ab..3102221b4cf10972e58c9638bae977d6ae43be52 100644
--- a/src/main/java/org/olat/modules/webFeed/FeedViewHelper.java
+++ b/src/main/java/org/olat/modules/webFeed/FeedViewHelper.java
@@ -46,7 +46,6 @@ import org.olat.course.nodes.feed.blog.BlogToolController;
 import org.olat.modules.webFeed.dispatching.Path;
 import org.olat.modules.webFeed.manager.FeedManager;
 import org.olat.modules.webFeed.model.ItemPublishDateComparator;
-import org.olat.modules.webFeed.portfolio.LiveBlogArtefactHandler;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 import org.olat.resource.OLATResourceManager;
@@ -513,12 +512,6 @@ public class FeedViewHelper {
 			if (repositoryEntry != null){
 				ContextEntry ce = BusinessControlFactory.getInstance().createContextEntry(repositoryEntry);
 				jumpInLink = BusinessControlFactory.getInstance().getAsURIString(Collections.singletonList(ce), false);
-			} else {
-				// its a liveblog-helperFeed
-				final BusinessControlFactory bCF = BusinessControlFactory.getInstance();
-				String feedBP = LiveBlogArtefactHandler.LIVEBLOG + feed.getResourceableId() + "]";
-				final List<ContextEntry> ceList = bCF.createCEListFromString(feedBP);
-				jumpInLink = bCF.getAsURIString(ceList, true);
 			}
 		}
 		if(item != null && jumpInLink != null){
diff --git a/src/main/java/org/olat/modules/webFeed/_spring/webFeedContext.xml b/src/main/java/org/olat/modules/webFeed/_spring/webFeedContext.xml
index 5d53ef16076a8f382c575be8889d4c543c21629d..0cc0be0e1c120e1e70e970b269e71d8ffc1e27df 100644
--- a/src/main/java/org/olat/modules/webFeed/_spring/webFeedContext.xml
+++ b/src/main/java/org/olat/modules/webFeed/_spring/webFeedContext.xml
@@ -14,8 +14,4 @@
 	<property name="repositoryManager" ref="repositoryManager" />
 </bean>
 
-<bean id="liveBlogContextEntryControllerCreator" class="org.olat.modules.webFeed.portfolio.LiveBlogContextEntryControllerCreator">
-	<constructor-arg index="0" ref="feedManager"/>
-</bean> 
-
 </beans>
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/webFeed/dispatching/FeedMediaDispatcher.java b/src/main/java/org/olat/modules/webFeed/dispatching/FeedMediaDispatcher.java
index f8feef89b61987a3fc5cef3a96a5fd397f379cc1..7e013b8f5547041db116261db0e2a06fccf55379 100644
--- a/src/main/java/org/olat/modules/webFeed/dispatching/FeedMediaDispatcher.java
+++ b/src/main/java/org/olat/modules/webFeed/dispatching/FeedMediaDispatcher.java
@@ -63,7 +63,6 @@ import org.olat.fileresource.types.BlogFileResource;
 import org.olat.fileresource.types.PodcastFileResource;
 import org.olat.modules.webFeed.Feed;
 import org.olat.modules.webFeed.manager.FeedManager;
-import org.olat.portfolio.manager.EPFrontendManager;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntrySecurity;
 import org.olat.repository.RepositoryManager;
@@ -468,12 +467,6 @@ public class FeedMediaDispatcher implements Dispatcher, GenericEventListener {
 				if (reSecurity != null && reSecurity.canLaunch()) {
 					hasAccess = true;
 				}
-			} else {
-				// no repository entry -> could be a feed without a repository-entry (ePortfolio-Blog-feed)
-				EPFrontendManager ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-				if (ePFMgr.checkFeedAccess(feed, identity)){
-					return validAuthentication(identity, path.getToken());
-				}
 			}
 		}
 		return hasAccess;
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefact.hbm.xml b/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefact.hbm.xml
deleted file mode 100644
index 564dcc178f6290cd29987ff969944e3c3356fb51..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefact.hbm.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping default-lazy="false">
-	<subclass name="org.olat.modules.webFeed.portfolio.BlogArtefact" 
-		extends="org.olat.portfolio.model.artefacts.AbstractArtefact" discriminator-value="Blog">
-	
-	</subclass>
-</hibernate-mapping>
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefact.java b/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefact.java
deleted file mode 100644
index 077f55f3b0f3ab16f60a9129df18ef49d55c87fd..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefact.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.modules.webFeed.portfolio;
-
-import org.olat.fileresource.types.BlogFileResource;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * 
- * Description:<br>
- * Take a post in a blog as an artefact
- * 
- * <P>
- * Initial Date:  3 déc. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class BlogArtefact extends AbstractArtefact {
-
-	private static final long serialVersionUID = 4567310119289463310L;
-	public static final String TYPE = BlogFileResource.TYPE_NAME;
-	public static final String BLOG_FILE_NAME = "item.xml";
-
-	@Override
-	public String getIcon() {
-		return "o_blog_icon";
-	}
-	
-	@Override
-	public String getResourceableTypeName() {
-		return TYPE;
-	}
-
-
-}
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefactDetailsController.java b/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefactDetailsController.java
deleted file mode 100644
index 32b029d71d7401778b10c7de37268d9495c20d3f..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefactDetailsController.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.modules.webFeed.portfolio;
-
-import java.io.InputStream;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.date.DateComponentFactory;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.FileUtils;
-import org.olat.core.util.Formatter;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.filter.Filter;
-import org.olat.core.util.filter.FilterFactory;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.core.util.vfs.VFSContainerMapper;
-import org.olat.core.util.vfs.VFSLeaf;
-import org.olat.core.util.xml.XStreamHelper;
-import org.olat.modules.webFeed.Item;
-import org.olat.modules.webFeed.model.ItemImpl;
-import org.olat.portfolio.manager.EPFrontendManager;
-
-import com.thoughtworks.xstream.XStream;
-
-/**
- * 
- * Description:<br>
- * Read-only view for a blog entry
- * 
- * <P>
- * Initial Date:  3 déc. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class BlogArtefactDetailsController extends BasicController {
-	
-	private VelocityContainer mainVC;
-	
-	public BlogArtefactDetailsController(UserRequest ureq, WindowControl wControl, BlogArtefact artefact, boolean readOnlyMode) {
-		super(ureq, wControl);
-		mainVC = createVelocityContainer("post");
-		
-		EPFrontendManager ePFMgr = (EPFrontendManager)CoreSpringFactory.getBean("epFrontendManager");
-		final VFSContainer artefactContainer = ePFMgr.getArtefactContainer(artefact);
-		
-		VFSLeaf itemXml = (VFSLeaf)artefactContainer.resolve(BlogArtefact.BLOG_FILE_NAME);
-		if(itemXml != null) {
-			
-			String mapperBase = registerMapper(ureq, new VFSContainerMapper(artefactContainer));
-
-			InputStream in = itemXml.getInputStream();
-			
-			XStream xstream = XStreamHelper.createXStreamInstance();
-			xstream.alias("item", ItemImpl.class);
-			Item item = (Item)xstream.fromXML(in);
-			FileUtils.closeSafely(in);
-			
-			String content = item.getContent();
-			if (!StringHelper.containsNonWhitespace(content)) content = item.getDescription();
-			String filteredText = FilterFactory.getHtmlTagAndDescapingFilter().filter(content);
-			filteredText = Formatter.truncate(filteredText, 50);
-			mainVC.contextPut("filteredText", filteredText);
-			mainVC.contextPut("readOnlyMode", readOnlyMode);
-			
-			mainVC.contextPut("item", item);
-			mainVC.contextPut("helper", new ItemHelper(mapperBase));
-			
-		// Add date component
-			if(item.getDate() != null) {
-				DateComponentFactory.createDateComponentWithYear("dateComp", item.getDate(), mainVC);
-			}
-		}
-		
-		putInitialPanel(mainVC);
-	}
-		
-	@Override
-	protected void doDispose() {
-		//
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		//
-	}
-	
-	public class ItemHelper {
-		
-		private final String baseUri;
-		
-		public ItemHelper(String baseUri) {
-			this.baseUri = baseUri;
-		}
-		
-		public String getItemContentForBrowser(Item item) {
-			String itemContent = item.getContent();
-			if (itemContent != null) {
-				//Add relative media base to media elements to display internal media files
-				Filter mediaUrlFilter = FilterFactory.getBaseURLToMediaRelativeURLFilter(baseUri);
-				itemContent = mediaUrlFilter.filter(itemContent);
-			}
-			return itemContent;
-		}
-		
-		public String getItemDescriptionForBrowser(Item item) {
-			String itemDescription = item.getDescription();
-			if (itemDescription != null) {
-				//Add relative media base to media elements to display internal media files
-				Filter mediaUrlFilter = FilterFactory.getBaseURLToMediaRelativeURLFilter(baseUri);
-				itemDescription = mediaUrlFilter.filter(itemDescription);
-			}
-			return itemDescription;
-		}
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefactHandler.java b/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefactHandler.java
deleted file mode 100644
index 9bf6ce03c9593db05c07efed21ebceb7ea0a3d5c..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefactHandler.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.modules.webFeed.portfolio;
-
-import java.io.InputStream;
-
-import org.apache.logging.log4j.Logger;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.context.BusinessControl;
-import org.olat.core.id.context.BusinessControlFactory;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.FileUtils;
-import org.olat.core.util.filter.Filter;
-import org.olat.core.util.filter.FilterFactory;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.core.util.vfs.VFSLeaf;
-import org.olat.core.util.xml.XStreamHelper;
-import org.olat.course.nodes.CourseNode;
-import org.olat.modules.webFeed.Feed;
-import org.olat.modules.webFeed.Item;
-import org.olat.modules.webFeed.manager.FeedManager;
-import org.olat.modules.webFeed.model.ItemImpl;
-import org.olat.portfolio.EPAbstractHandler;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryManager;
-import org.olat.search.service.SearchResourceContext;
-
-import com.thoughtworks.xstream.XStream;
-
-/**
- * 
- * Description:<br>
- * Artefact handler for blog entry
- * 
- * <P>
- * Initial Date:  3 déc. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class BlogArtefactHandler extends EPAbstractHandler<BlogArtefact> {
-	
-	private static final Logger log = Tracing.createLoggerFor(BlogArtefactHandler.class);
-	
-	@Override
-	public String getType() {
-		return BlogArtefact.TYPE;
-	}
-
-	@Override
-	public BlogArtefact createArtefact() {
-		return new BlogArtefact();
-	}
-	
-	/**
-	 * @see org.olat.portfolio.EPAbstractHandler#prefillArtefactAccordingToSource(org.olat.portfolio.model.artefacts.AbstractArtefact, java.lang.Object)
-	 */
-	@Override
-	public void prefillArtefactAccordingToSource(AbstractArtefact artefact, Object source) {
-		super.prefillArtefactAccordingToSource(artefact, source);
-		Feed feed = null;
-		if (source instanceof Feed) {
-			feed = (Feed)source;
-			String subPath = getItemUUID(artefact.getBusinessPath());
-			for(Item item:FeedManager.getInstance().loadItems(feed)) {
-				if(subPath.equals(item.getGuid())) {
-					prefillBlogArtefact(artefact, feed, item);
-				}
-			}
-			artefact.setSignature(70); 
-		}
-		String origBPath = artefact.getBusinessPath();
-		String artSource = "";
-		BusinessControl bc = BusinessControlFactory.getInstance().createFromString(origBPath);
-		if (origBPath.contains(CourseNode.class.getSimpleName())){
-			// blog-post from inside a course, rebuild "course-name - feed-name"
-			OLATResourceable ores = bc.popLauncherContextEntry().getOLATResourceable();
-			RepositoryEntry repoEntry = RepositoryManager.getInstance().lookupRepositoryEntry(ores.getResourceableId());
-			artSource = repoEntry.getDisplayname();
-			if (feed!=null) {
-				artSource += " - " + feed.getTitle();
-			}
-		} else if (origBPath.contains(RepositoryEntry.class.getSimpleName())){
-			// blog-post from blog-LR, only get name itself
-			if (feed!=null) {
-				artSource = feed.getTitle();
-			}			
-		} else {
-			// collecting a post from live-blog, [Identity:xy]
-			if (feed!=null) {
-				artSource = feed.getTitle();
-			}			
-		}		
-		artefact.setSource(artSource);
-	}
-
-	private void prefillBlogArtefact(AbstractArtefact artefact, Feed feed, Item item) {
-		VFSContainer itemContainer = FeedManager.getInstance().getItemContainer(item);
-		artefact.setFileSourceContainer(itemContainer);
-		artefact.setTitle(item.getTitle());
-		artefact.setDescription(item.getDescription());
-		
-		VFSLeaf itemXml = (VFSLeaf)itemContainer.resolve(BlogArtefact.BLOG_FILE_NAME);
-		if(itemXml != null) {
-			InputStream in = itemXml.getInputStream();
-			String xml = FileUtils.load(in, "UTF-8");
-			artefact.setFulltextContent(xml);
-			FileUtils.closeSafely(in);
-		}
-		String origBPath = artefact.getBusinessPath();
-		String artSource = "";
-		BusinessControl bc = BusinessControlFactory.getInstance().createFromString(origBPath);
-		if (origBPath.contains(CourseNode.class.getSimpleName())){
-			// blog-post from inside a course, rebuild "course-name - feed-name"
-			OLATResourceable ores = bc.popLauncherContextEntry().getOLATResourceable();
-			RepositoryEntry repoEntry = RepositoryManager.getInstance().lookupRepositoryEntry(ores.getResourceableId());
-			artSource = repoEntry.getDisplayname();
-			if (feed!=null) {
-				artSource += " - " + feed.getTitle();
-			}
-		} else if (origBPath.contains(RepositoryEntry.class.getSimpleName())){
-			// blog-post from blog-LR, only get name itself
-			if (feed!=null) {
-				artSource = feed.getTitle();
-			}			
-		} else {
-			// collecting a post from live-blog, [Identity:xy]
-			if (feed!=null) {
-				artSource = feed.getTitle();
-			}			
-		}		
-		artefact.setSource(artSource);		
-	}
-
-	@Override
-	public Controller createDetailsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, boolean readOnlyMode) {
-		BlogArtefactDetailsController ctrl = new BlogArtefactDetailsController(ureq, wControl, (BlogArtefact)artefact, readOnlyMode);
-		return ctrl;
-	}
-	
-	@Override
-	protected void getContent(AbstractArtefact artefact, StringBuilder sb, SearchResourceContext context, EPFrontendManager ePFManager) {
-		String content = ePFManager.getArtefactFullTextContent(artefact);
-		if(content != null) {
-			try {
-				XStream xstream = XStreamHelper.createXStreamInstance();
-				xstream.alias("item", ItemImpl.class);
-				ItemImpl item = (ItemImpl)xstream.fromXML(content);
-				
-				String mapperBaseURL = "";
-				Filter mediaUrlFilter = FilterFactory.getBaseURLToMediaRelativeURLFilter(mapperBaseURL);
-				sb.append(mediaUrlFilter.filter(item.getDescription())).append(" ")
-					.append(mediaUrlFilter.filter(item.getContent()));
-			} catch (Exception e) {
-				log.warn("Cannot read an artefact of type blog while indexing", e);
-			}
-		}
-	}
-
-	private String getItemUUID(String businessPath) {
-		int start = businessPath.lastIndexOf("item=");
-		int stop = businessPath.lastIndexOf(":0]");
-		if(start < stop && start > 0 && stop > 0) {
-			return businessPath.substring(start + 5, stop);
-		} else {
-			return null;
-		}
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/BlogEntryMediaHandler.java b/src/main/java/org/olat/modules/webFeed/portfolio/BlogEntryMediaHandler.java
index cac9f5968b131243ca93b7ab36394a1f38aff1e3..d26c104bbf319e83a76bd8702333545162748de9 100644
--- a/src/main/java/org/olat/modules/webFeed/portfolio/BlogEntryMediaHandler.java
+++ b/src/main/java/org/olat/modules/webFeed/portfolio/BlogEntryMediaHandler.java
@@ -30,7 +30,6 @@ import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.Identity;
-import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
 import org.olat.core.util.io.SystemFileFilter;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSLeaf;
@@ -41,17 +40,13 @@ import org.olat.modules.portfolio.Media;
 import org.olat.modules.portfolio.MediaInformations;
 import org.olat.modules.portfolio.MediaLight;
 import org.olat.modules.portfolio.MediaRenderingHints;
-import org.olat.modules.portfolio.PortfolioLoggingAction;
 import org.olat.modules.portfolio.handler.AbstractMediaHandler;
 import org.olat.modules.portfolio.manager.MediaDAO;
 import org.olat.modules.portfolio.manager.PortfolioFileStorage;
 import org.olat.modules.portfolio.ui.media.StandardEditMediaController;
 import org.olat.modules.webFeed.Item;
 import org.olat.modules.webFeed.manager.FeedManager;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
 import org.olat.user.manager.ManifestBuilder;
-import org.olat.util.logging.activity.LoggingResourceable;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -72,8 +67,6 @@ public class BlogEntryMediaHandler extends AbstractMediaHandler {
 	private FeedManager feedManager;
 	@Autowired
 	private PortfolioFileStorage fileStorage;
-	@Autowired
-	private EPFrontendManager oldPortfolioManager;
 	
 	public BlogEntryMediaHandler() {
 		super(BLOG_ENTRY_HANDLER);
@@ -114,7 +107,7 @@ public class BlogEntryMediaHandler extends AbstractMediaHandler {
 		Media media = mediaDao.createMedia(title, description, "", BLOG_ENTRY_HANDLER, businessPath, null, 70, author);
 		File mediaDir = fileStorage.generateMediaSubDirectory(media);
 		String storagePath = fileStorage.getRelativePath(mediaDir);
-		media = mediaDao.updateStoragePath(media, storagePath, BlogArtefact.BLOG_FILE_NAME);
+		media = mediaDao.updateStoragePath(media, storagePath, "item.xml");
 		VFSContainer mediaContainer = fileStorage.getMediaContainer(media);
 		VFSContainer itemContainer = feedManager.getItemContainer(item);
 		FeedManager.getInstance().saveItemAsXML(item);
@@ -123,33 +116,6 @@ public class BlogEntryMediaHandler extends AbstractMediaHandler {
 		
 		return media;
 	}
-
-	/**
-	 * Copy the item.xml and eventuel some attached medias.
-	 */
-	@Override
-	public Media createMedia(AbstractArtefact artefact) {
-		VFSContainer artefactFolder = oldPortfolioManager.getArtefactContainer(artefact);
-		String businessPath = artefact.getBusinessPath();
-		if(businessPath == null) {
-			businessPath = "[PortfolioV2:0][MediaCenter:0]";
-		}
-
-		String filename = null;
-		Media media = mediaDao.createMedia(artefact.getTitle(), artefact.getDescription(), filename, BLOG_ENTRY_HANDLER,
-				businessPath, artefact.getKey().toString(), artefact.getSignature(), artefact.getAuthor());
-		
-		File mediaDir = fileStorage.generateMediaSubDirectory(media);
-		String storagePath = fileStorage.getRelativePath(mediaDir);
-		mediaDao.updateStoragePath(media, storagePath, BlogArtefact.BLOG_FILE_NAME);
-		VFSContainer mediaContainer = fileStorage.getMediaContainer(media);
-		VFSManager.copyContent(artefactFolder, mediaContainer);
-		
-		ThreadLocalUserActivityLogger.log(PortfolioLoggingAction.PORTFOLIO_MEDIA_ADDED, getClass(),
-				LoggingResourceable.wrap(media));
-
-		return media;
-	}
 	
 	@Override
 	public Controller getMediaController(UserRequest ureq, WindowControl wControl, Media media, MediaRenderingHints hints) {
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/EPCreateLiveBlogArtefactStep00.java b/src/main/java/org/olat/modules/webFeed/portfolio/EPCreateLiveBlogArtefactStep00.java
deleted file mode 100644
index 49d23f16c48cf32cf2d31c429b2dce703c691a22..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/EPCreateLiveBlogArtefactStep00.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.modules.webFeed.portfolio;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.impl.Form;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.wizard.StepFormController;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.ui.artefacts.collect.EPCollectStep00;
-
-/**
- * 
- * Description:<br>
- * Create a live blog
- * 
- * <P>
- * Initial Date:  8 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPCreateLiveBlogArtefactStep00 extends EPCollectStep00 {
-
-	private AbstractArtefact artefact;
-	private final PortfolioStructure preSelectedStruct;
-
-	public EPCreateLiveBlogArtefactStep00(UserRequest ureq, PortfolioStructure preSelectedStruct, AbstractArtefact artefact) {
-		super(ureq, artefact);
-		this.artefact = artefact;
-		this.preSelectedStruct = preSelectedStruct;
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.BasicStep#getStepController(org.olat.core.gui.UserRequest, org.olat.core.gui.control.WindowControl, org.olat.core.gui.control.generic.wizard.StepsRunContext, org.olat.core.gui.components.form.flexible.impl.Form)
-	 */
-	@Override
-	public StepFormController getStepController(UserRequest ureq, WindowControl windowControl, StepsRunContext stepsRunContext, Form form) {
-		if(preSelectedStruct != null) {
-			stepsRunContext.put("preSelectedStructure", preSelectedStruct);
-		}
-		
-		StepFormController stepI = new EPCreateLiveBlogArtefactStepForm00(ureq, windowControl, form, stepsRunContext,
-				FormBasicController.LAYOUT_DEFAULT, null, artefact);
-		return stepI;
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/EPCreateLiveBlogArtefactStepForm00.java b/src/main/java/org/olat/modules/webFeed/portfolio/EPCreateLiveBlogArtefactStepForm00.java
deleted file mode 100644
index 9f651910e74eb6189695620d994b513cfbc2434d..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/EPCreateLiveBlogArtefactStepForm00.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.modules.webFeed.portfolio;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.impl.Form;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.modules.webFeed.Feed;
-import org.olat.modules.webFeed.manager.FeedManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.ui.artefacts.collect.EPCollectStepForm00;
-
-/**
- * 
- * Description:<br>
- * Only retrieve the title and description to apply them to the blog.
- * 
- * <P>
- * Initial Date:  9 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http.//www.frentix.com
- */
-public class EPCreateLiveBlogArtefactStepForm00 extends EPCollectStepForm00 {
-
-	private LiveBlogArtefact blogArtefact;
-
-	public EPCreateLiveBlogArtefactStepForm00(UserRequest ureq, WindowControl wControl, Form rootForm, StepsRunContext runContext, int layout,
-			String customLayoutPageName, AbstractArtefact artefact) {
-		super(ureq, wControl, rootForm, runContext, layout, customLayoutPageName, artefact);
-		
-		
-		blogArtefact = (LiveBlogArtefact)artefact;
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void formOK(UserRequest ureq) {
-		//set title and description
-		super.formOK(ureq);
-		//copy title and description to the blog
-		
-		Feed feed = blogArtefact.getFeedLight();
-		feed.setAuthor(blogArtefact.getAuthor().getName());
-		feed.setTitle(blogArtefact.getTitle());
-		feed.setDescription(blogArtefact.getDescription());
-		FeedManager.getInstance().updateFeed(feed);
-	}
-}
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefact.hbm.xml b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefact.hbm.xml
deleted file mode 100644
index a9ab49ae6f949eec093683d730eefc973b050dbd..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefact.hbm.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping default-lazy="false">
-	<subclass name="org.olat.modules.webFeed.portfolio.LiveBlogArtefact" 
-		extends="org.olat.portfolio.model.artefacts.AbstractArtefact" discriminator-value="LiveBlog">
-	
-	</subclass>
-</hibernate-mapping>
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefact.java b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefact.java
deleted file mode 100644
index a5836fd3f01fbff0785077886876cf6a0648a82a..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefact.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.modules.webFeed.portfolio;
-
-import org.olat.fileresource.types.BlogFileResource;
-import org.olat.modules.webFeed.Feed;
-import org.olat.modules.webFeed.manager.FeedManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.resource.OLATResource;
-import org.olat.resource.OLATResourceManager;
-
-/**
- * 
- * Description:<br>
- * The LifeBlogArtefact integrated a full featured blog in a map.
- * 
- * <P>
- * Initial Date:  8 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class LiveBlogArtefact extends AbstractArtefact {
-
-	private static final long serialVersionUID = -5053371748195771395L;
-	public static final String TYPE = "liveblog";
-
-	@Override
-	public String getResourceableTypeName() {
-		return TYPE;
-	}
-
-	@Override
-	public String getIcon() {
-		return "o_ep_icon_liveblog";
-	}
-	
-	public Feed getFeedLight() {
-		String businessPath = getBusinessPath();
-		Long resid = Long.parseLong(businessPath.substring(10, businessPath.length() - 1));
-		OLATResource ores = OLATResourceManager.getInstance().findResourceable(resid, BlogFileResource.TYPE_NAME);
-		return FeedManager.getInstance().loadFeed(ores);
-	}
-	
-}
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefactHandler.java b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefactHandler.java
deleted file mode 100644
index 356d501083d494cf461f65e7ef9aa93a21cf85c1..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefactHandler.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.modules.webFeed.portfolio;
-
-import java.util.List;
-
-import org.olat.basesecurity.BaseSecurity;
-import org.olat.basesecurity.OrganisationRoles;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.filter.Filter;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.fileresource.types.BlogFileResource;
-import org.olat.modules.webFeed.Feed;
-import org.olat.modules.webFeed.FeedResourceSecurityCallback;
-import org.olat.modules.webFeed.FeedSecurityCallback;
-import org.olat.modules.webFeed.Item;
-import org.olat.modules.webFeed.manager.FeedManager;
-import org.olat.modules.webFeed.search.document.FeedItemDocument;
-import org.olat.modules.webFeed.ui.FeedItemDisplayConfig;
-import org.olat.modules.webFeed.ui.blog.BlogUIFactory;
-import org.olat.portfolio.EPAbstractHandler;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.resource.OLATResource;
-import org.olat.resource.OLATResourceManager;
-import org.olat.search.model.OlatDocument;
-import org.olat.search.service.SearchResourceContext;
-
-/**
- * 
- * Description:<br>
- * The handler for the life blog artefact
- * 
- * <P>
- * Initial Date:  8 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class LiveBlogArtefactHandler extends EPAbstractHandler<LiveBlogArtefact> {
-
-	public static final String LIVEBLOG = "[LiveBlog:";
-	
-	private FeedManager manager;
-
-	@Override
-	public String getType() {
-		return LiveBlogArtefact.TYPE;
-	}
-
-	@Override
-	public LiveBlogArtefact createArtefact() {
-		LiveBlogArtefact artefact = new LiveBlogArtefact();
-		manager = FeedManager.getInstance();
-		OLATResourceable ores = manager.createBlogResource();
-		artefact.setBusinessPath(LIVEBLOG + ores.getResourceableId() + "]");
-		return artefact;
-	}
-
-	@Override
-	public Controller createDetailsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, boolean readOnlyMode) {
-		FeedSecurityCallback callback = new FeedResourceSecurityCallback(false);
-		String businessPath = artefact.getBusinessPath();
-		Long resid = Long.parseLong(businessPath.substring(10, businessPath.length() - 1));
-		OLATResource ores = OLATResourceManager.getInstance().findResourceable(resid, BlogFileResource.TYPE_NAME);
-		FeedItemDisplayConfig displayConfig = new FeedItemDisplayConfig(false, false, readOnlyMode);
-		return BlogUIFactory.getInstance(ureq.getLocale()).createMainController(ores, ureq, wControl, callback, displayConfig);
-	}
-
-	@Override
-	public boolean isProvidingSpecialMapViewController() {
-		return true;
-	}
-
-	@Override
-	public Controller getSpecialMapViewController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact) {
-		BaseSecurity securityManager = CoreSpringFactory.getImpl(BaseSecurity.class);
-		boolean isAdministrator = ureq.getIdentity().equalsByPersistableKey(artefact.getAuthor())
-				|| ureq.getUserSession().getRoles().isManagerOf(OrganisationRoles.administrator, securityManager.getRoles(artefact.getAuthor()));
-
-		FeedSecurityCallback callback = new FeedResourceSecurityCallback(isAdministrator);
-		String businessPath = artefact.getBusinessPath();
-		Long resid = Long.parseLong(businessPath.substring(10, businessPath.length() - 1));
-		OLATResource ores = OLATResourceManager.getInstance().findResourceable(resid, BlogFileResource.TYPE_NAME);
-		FeedItemDisplayConfig displayConfig = new FeedItemDisplayConfig(false, true, true);
-		return BlogUIFactory.getInstance(ureq.getLocale()).createMainController(ores, ureq, wControl, callback, displayConfig);
-	}
-
-	@Override
-	protected void getContent(AbstractArtefact artefact, StringBuilder sb, SearchResourceContext context, EPFrontendManager ePFManager) {
-		String businessPath = artefact.getBusinessPath();
-		if(StringHelper.containsNonWhitespace(businessPath)) {
-			manager = FeedManager.getInstance();
-			String oresId = businessPath.substring(LIVEBLOG.length(), businessPath.length() - 1);
-			OLATResourceable ores = OresHelper.createOLATResourceableInstance(BlogFileResource.TYPE_NAME, Long.parseLong(oresId));
-			Feed feed = manager.loadFeed(ores);
-			List<Item> publishedItems = manager.loadPublishedItems(feed);
-
-			for (Item item : publishedItems) {
-				OlatDocument itemDoc = new FeedItemDocument(item, context);
-				String content = itemDoc.getContent();
-				sb.append(content);
-			}
-		}
-	}
-	
-	public class DummyFilter implements Filter {
-
-		@Override
-		public String filter(String original) {
-			return original;
-		}
-		
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java
deleted file mode 100644
index 69ec3c1bfd85ac8f92894d7726673044325cfd0e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.modules.webFeed.portfolio;
-
-import java.util.List;
-
-import org.olat.NewControllerFactory;
-import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.ContextEntryControllerCreator;
-import org.olat.core.id.context.DefaultContextEntryControllerCreator;
-import org.apache.logging.log4j.Logger;
-import org.olat.core.logging.Tracing;
-import org.olat.fileresource.types.BlogFileResource;
-import org.olat.modules.webFeed.Feed;
-import org.olat.modules.webFeed.FeedResourceSecurityCallback;
-import org.olat.modules.webFeed.FeedSecurityCallback;
-import org.olat.modules.webFeed.manager.FeedManager;
-import org.olat.modules.webFeed.ui.FeedMainController;
-import org.olat.modules.webFeed.ui.blog.BlogUIFactory;
-import org.olat.resource.OLATResourceManager;
-
-/**
- * 
- * Description:<br>
- * Context entry controller creator for live blogs
- * 
- * <P>
- * Initial Date:  21 déc. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class LiveBlogContextEntryControllerCreator  {
-	
-	private static final Logger log = Tracing.createLoggerFor(LiveBlogContextEntryControllerCreator.class);
-
-	public LiveBlogContextEntryControllerCreator(final FeedManager feedManager) {
-		
-		NewControllerFactory.getInstance().addContextEntryControllerCreator("LiveBlog", new LBContextEntryControllerCreator(feedManager));	
-	}
-	
-	private static class LBContextEntryControllerCreator extends DefaultContextEntryControllerCreator {
-		
-		private final FeedManager feedManager;
-		
-		public LBContextEntryControllerCreator(FeedManager feedManager) {
-			this.feedManager = feedManager;
-		}
-		
-		@Override
-		public ContextEntryControllerCreator clone() {
-			return this;
-		}
-
-		@Override
-		public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) {
-			OLATResourceable ores = ces.get(0).getOLATResourceable();
-			ores = OLATResourceManager.getInstance().findResourceable(ores.getResourceableId(), BlogFileResource.TYPE_NAME);
-			Feed feed = feedManager.loadFeed(ores);
-			boolean isOwner = feed.getAuthor() != null && ureq.getIdentity() != null && feed.getAuthor().equals(ureq.getIdentity().getName());
-			FeedSecurityCallback secCallback = new FeedResourceSecurityCallback(isOwner);
-			FeedMainController controller = new FeedMainController(ores, ureq, wControl, BlogUIFactory.getInstance(ureq.getLocale()), secCallback);
-			return new LayoutMain3ColsController(ureq, wControl, controller);
-		}
-
-		@Override
-		public String getTabName(ContextEntry ce, UserRequest ureq) {
-			OLATResourceable ores = ce.getOLATResourceable();
-			ores = OLATResourceManager.getInstance().findResourceable(ores.getResourceableId(), BlogFileResource.TYPE_NAME);
-			Feed feed = feedManager.loadFeed(ores);
-			return feed.getTitle();
-		}
-
-		@Override
-		public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-			try {
-				OLATResourceable ores = ce.getOLATResourceable();
-				ores = OLATResourceManager.getInstance().findResourceable(ores.getResourceableId(), BlogFileResource.TYPE_NAME);
-				Feed feed = feedManager.loadFeed(ores);
-				return feed != null;
-			} catch (Exception e) {
-				log.warn("Try to load a live blog with an invalid context entry: " + ce, e);
-				return false;
-			}
-		}
-		
-	}
-}
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_ar.properties
deleted file mode 100644
index e92286f1b8621093f0ba2bec232a680aa9986fec..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_ar.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-#Thu Sep 08 16:42:40 CEST 2011
-artefact.link=\u0631\u0627\u0628\u0637
-handler.BlogArtefactHandler.title=\u0645\u062F\u0648\u0646\u0629
-handler.LiveBlogArtefactHandler.title=\u064A\u0648\u0645\u064A\u0627\u062A \u0627\u0644\u062A\u0639\u0644\u064A\u0645
-step0.description=\u0628\u064A\u0627\u0646\u0627\u062A \u0625\u0636\u0627\u0641\u064A\u0629 \u0644\u064A\u0648\u0645\u064A\u0627\u062A \u0627\u0644\u062A\u0639\u0644\u064A\u0645
-step0.liveblog.description=\u0625\u0646\u0634\u0627\u0621 \u064A\u0648\u0645\u064A\u0627\u062A \u0627\u0644\u062A\u0639\u0644\u064A\u0645
-step0.liveblog.short.descr=\u064A\u0648\u0645\u064A\u0627\u062A \u0627\u0644\u062A\u0639\u0644\u064A\u0645
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_de.properties
deleted file mode 100644
index d76938dba69b7bdb1ce05940c87342819a54bd7d..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-#Mon Mar 02 09:54:04 CET 2009
-handler.LiveBlogArtefactHandler.title=Lerntagebuch
-step0.liveblog.description=Lerntagebuch erstellen
-step0.liveblog.short.descr=Lerntagebuch
-step0.description=Lerntagebuch Metadaten
-artefact.link=Link
-handler.BlogArtefactHandler.title=Blog
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_en.properties
deleted file mode 100644
index 02007a870706d3b8c93937b58b016de025d4d3b3..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-#Wed Jan 05 12:39:22 CET 2011
-artefact.link=Link
-handler.BlogArtefactHandler.title=Blog
-handler.LiveBlogArtefactHandler.title=Learning journal
-step0.description=Learning journal meta data
-step0.liveblog.description=Create learning journal
-step0.liveblog.short.descr=Learning journal
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index 9a58407139927ba2ffdc28b8888ee7bf97607e12..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-#Fri Jan 21 08:49:22 CET 2011
-artefact.link=Lien
-handler.BlogArtefactHandler.title=Blogue
-handler.LiveBlogArtefactHandler.title=Journal d'apprentissage
-step0.description=M\u00E9tadonn\u00E9es du journal d'apprentissage
-step0.liveblog.description=Cr\u00E9er un journal d'apprentissage
-step0.liveblog.short.descr=Journal d'apprentissage
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_it.properties
deleted file mode 100644
index ee4b1db11156c53250dc7d96a68ff03df6e3d57a..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_it.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-#Mon Jan 17 09:39:10 CET 2011
-artefact.link=Link
-handler.BlogArtefactHandler.title=Blog
-handler.LiveBlogArtefactHandler.title=Diario d'apprendimento
-step0.description=Metadati del diario d'apprendimento
-step0.liveblog.description=Creare un diario d'apprendimento
-step0.liveblog.short.descr=Diario d'apprendimento
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_jp.properties
deleted file mode 100644
index 47d91366a0b8c4a4553c9c4a288ec9cc9d4d5f9e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_jp.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-#Fri Jan 14 08:16:17 CET 2011
-artefact.link=\u30EA\u30F3\u30AF
-handler.BlogArtefactHandler.title=\u30D6\u30ED\u30B0
-handler.LiveBlogArtefactHandler.title=\u5B66\u7FD2\u65E5\u8A8C
-step0.description=\u5B66\u7FD2\u65E5\u8A8C\u30E1\u30BF\u30C7\u30FC\u30BF
-step0.liveblog.description=\u5B66\u7FD2\u65E5\u8A8C\u3092\u4F5C\u6210\u3059\u308B
-step0.liveblog.short.descr=\u5B66\u7FD2\u65E5\u8A8C
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_nl_NL.properties
deleted file mode 100644
index 313e611ab9a93c0ea1e27f2784bae661efe3cc87..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_nl_NL.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-#Thu Sep 08 16:42:46 CEST 2011
-artefact.link=Link
-handler.BlogArtefactHandler.title=Blog
-handler.LiveBlogArtefactHandler.title=Leerdagboek
-step0.description=Leerdagboek meta data
-step0.liveblog.description=Leerdagboek opstellen
-step0.liveblog.short.descr=Leerdagboek
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_pl.properties
deleted file mode 100644
index c592968bbecc6cae8cf699538acddba6549d4e14..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_pl.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-#Thu Sep 08 16:42:41 CEST 2011
-artefact.link=Link
-handler.BlogArtefactHandler.title=Blog
-handler.LiveBlogArtefactHandler.title=Dziennik
-step0.description=Metadane dziennika
-step0.liveblog.description=Utw\u00F3rz dziennik
-step0.liveblog.short.descr=Dziennik
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_pt_BR.properties
deleted file mode 100644
index 341814956544473559709c46917629618adf565a..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_pt_BR.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-#Thu Sep 08 16:42:38 CEST 2011
-artefact.link=Link
-handler.BlogArtefactHandler.title=Blog
-handler.LiveBlogArtefactHandler.title=Noticias de aprendizado
-step0.description=Meta dados de noticias de aprendizado
-step0.liveblog.description=Criar noticias de aprendizado
-step0.liveblog.short.descr=Noticias de aprendizado
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_zh_CN.properties
deleted file mode 100644
index d3389fb21d4b4839784e942e82a41f91e8f51399..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/webFeed/portfolio/_i18n/LocalStrings_zh_CN.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-#Thu Sep 08 16:42:39 CEST 2011
-artefact.link=\u94FE\u63A5
-handler.BlogArtefactHandler.title=\u535A\u5BA2
-handler.LiveBlogArtefactHandler.title=\u5B66\u4E60\u7B14\u8BB0
-step0.description=\u5B66\u4E60\u7B14\u8BB0\u5143\u6570\u636E
-step0.liveblog.description=\u521B\u5EFA\u5B66\u4E60\u7B14\u8BB0
-step0.liveblog.short.descr=\u5B66\u4E60\u7B14\u8BB0
diff --git a/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java b/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java
index 78c275ce7f2962ec09acf8ea878e7b4b8cb273b0..9bb9871ef0e2c05566f4ae8e6c51d17acfbe2daa 100644
--- a/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java
+++ b/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java
@@ -70,7 +70,6 @@ import org.olat.modules.webFeed.manager.FeedManager;
 import org.olat.modules.webFeed.model.ItemImpl;
 import org.olat.modules.webFeed.portfolio.BlogEntryMedia;
 import org.olat.modules.webFeed.portfolio.BlogEntryMediaHandler;
-import org.olat.portfolio.EPUIFactory;
 import org.olat.user.UserManager;
 import org.olat.util.logging.activity.LoggingResourceable;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -188,7 +187,7 @@ public class ItemsController extends BasicController implements Activateable2 {
 		startpageLink = LinkFactory.createLink("feed.startpage", vcItems, this);
 		startpageLink.setCustomEnabledLinkCSS("o_first_page");
 
-		createEditButtons(ureq, feed);
+		createEditButtons(feed);
 
 		// Add item details page link
 		createItemLinks();
@@ -231,11 +230,10 @@ public class ItemsController extends BasicController implements Activateable2 {
 
 	/**
 	 * Creates all necessary buttons for editing the feed's items
-	 *
 	 * @param feed
 	 *            the current feed object
 	 */
-	private void createEditButtons(UserRequest ureq, Feed feed) {
+	private void createEditButtons(Feed feed) {
 		editButtons = new ArrayList<>();
 		deleteButtons = new ArrayList<>();
 		artefactLinks = new HashMap<>();
@@ -244,7 +242,7 @@ public class ItemsController extends BasicController implements Activateable2 {
 			addItemButton.setElementCssClass("o_sel_feed_item_new");
 			if (accessibleItems != null) {
 				for (Item item : accessibleItems) {
-					createButtonsForItem(ureq, feed, item);
+					createButtonsForItem(feed, item);
 				}
 			}
 		} else if (feed.isExternal()) {
@@ -364,7 +362,7 @@ public class ItemsController extends BasicController implements Activateable2 {
 		}
 	}
 
-	private void createButtonsForItem(UserRequest ureq, Feed feed, Item item) {
+	private void createButtonsForItem(Feed feed, Item item) {
 		boolean author = getIdentity().getKey().equals(item.getAuthorKey());
 		boolean edit = callback.mayEditItems() || (author && callback.mayEditOwnItems());
 		boolean delete = callback.mayDeleteItems() || (author && callback.mayDeleteOwnItems());
@@ -396,13 +394,6 @@ public class ItemsController extends BasicController implements Activateable2 {
 				MediaCollectorComponent collectorCmp = new MediaCollectorComponent(name, getWindowControl(), media,
 						blogMediaHandler, businessPath);
 				vcItems.put(name, collectorCmp);
-			} else {
-				Controller artefactCtrl = EPUIFactory.createArtefactCollectWizzardController(ureq, getWindowControl(),
-						feedResource, businessPath);
-				if (artefactCtrl != null) {
-					artefactLinks.put(item, artefactCtrl);
-					vcItems.put("feed.artefact.item.".concat(guid), artefactCtrl.getInitialComponent());
-				}
 			}
 		}
 
@@ -531,19 +522,19 @@ public class ItemsController extends BasicController implements Activateable2 {
 			}
 		} else if (source == olderItemsLink) {
 			helper.olderItems();
-			createEditButtons(ureq, feedResource);
+			createEditButtons(feedResource);
 			createCommentsAndRatingsLinks(ureq, feedResource);
 			vcItems.setDirty(true);
 
 		} else if (source == newerItemsLink) {
 			helper.newerItems();
-			createEditButtons(ureq, feedResource);
+			createEditButtons(feedResource);
 			createCommentsAndRatingsLinks(ureq, feedResource);
 			vcItems.setDirty(true);
 
 		} else if (source == startpageLink) {
 			helper.startpage();
-			createEditButtons(ureq, feedResource);
+			createEditButtons(feedResource);
 			createCommentsAndRatingsLinks(ureq, feedResource);
 			vcItems.setDirty(true);
 
@@ -623,7 +614,7 @@ public class ItemsController extends BasicController implements Activateable2 {
 					fireEvent(ureq, ItemsController.FEED_INFO_IS_DIRTY_EVENT);
 				} else {
 					if (callback.mayEditItems() || callback.mayCreateItems()) {
-						createEditButtons(ureq, feedResource);
+						createEditButtons(feedResource);
 					}
 					createCommentsAndRatingsLinks(ureq, feedResource);
 				}
@@ -655,7 +646,7 @@ public class ItemsController extends BasicController implements Activateable2 {
 							// feed
 							feedResource = feedManager.createItem(feedResource, currentItem, mediaFile);
 							if (feedResource != null) {
-								createButtonsForItem(ureq, feedResource, currentItem);
+								createButtonsForItem(feedResource, currentItem);
 								createItemLink(currentItem);
 								// Add date component
 								String guid = currentItem.getGuid();
@@ -741,7 +732,7 @@ public class ItemsController extends BasicController implements Activateable2 {
 				}
 			}
 			if (callback.mayEditItems() || callback.mayCreateItems()) {
-				createEditButtons(ureq, feedResource);
+				createEditButtons(feedResource);
 			}
 			createCommentsAndRatingsLinks(ureq, feedResource);
 			vcItems.setDirty(true);
diff --git a/src/main/java/org/olat/modules/wiki/WikiMainController.java b/src/main/java/org/olat/modules/wiki/WikiMainController.java
index 756fb037b51ae32d7d787d74e53e389ecace59a6..a97105e45a052e5d7a885099c87bbef3d7ed2a63 100644
--- a/src/main/java/org/olat/modules/wiki/WikiMainController.java
+++ b/src/main/java/org/olat/modules/wiki/WikiMainController.java
@@ -108,11 +108,9 @@ import org.olat.modules.wiki.gui.components.wikiToHtml.RequestMediaEvent;
 import org.olat.modules.wiki.gui.components.wikiToHtml.RequestNewPageEvent;
 import org.olat.modules.wiki.gui.components.wikiToHtml.RequestPageEvent;
 import org.olat.modules.wiki.gui.components.wikiToHtml.WikiMarkupComponent;
-import org.olat.modules.wiki.portfolio.WikiArtefact;
 import org.olat.modules.wiki.portfolio.WikiMediaHandler;
 import org.olat.modules.wiki.versioning.ChangeInfo;
 import org.olat.modules.wiki.versioning.HistoryTableDateModel;
-import org.olat.portfolio.EPUIFactory;
 import org.olat.search.SearchModule;
 import org.olat.search.SearchServiceUIFactory;
 import org.olat.search.SearchServiceUIFactory.DisplayOption;
@@ -1253,22 +1251,13 @@ public class WikiMainController extends BasicController implements CloneableCont
 
 		boolean userIsPageCreator = getIdentity().getKey().equals(page.getInitalAuthor());
 		if (userIsPageCreator) {
-			String subPath = page.getPageName();
-			String businessPath = getWindowControl().getBusinessControl().getAsString();
-			businessPath += "[page=" + subPath + ":0]";
-			OLATResourceable wikiRes = OresHelper.createOLATResourceableInstance(WikiArtefact.ARTEFACT_TYPE,
-					ores.getResourceableId());
-
 			if (portfolioModule.isEnabled()) {
+				String subPath = page.getPageName();
+				String businessPath = getWindowControl().getBusinessControl().getAsString();
+				businessPath += "[page=" + subPath + ":0]";
 				MediaCollectorComponent collectorCmp = new MediaCollectorComponent("portfolio-link", getWindowControl(),
 						page, wikiMediaHandler, businessPath);
 				navigationContent.put("portfolio-link", collectorCmp);
-			} else {
-				Controller ePFCollCtrl = EPUIFactory.createArtefactCollectWizzardController(ureq, getWindowControl(),
-						wikiRes, businessPath);
-				if (ePFCollCtrl != null) {
-					navigationContent.put("portfolio-link", ePFCollCtrl.getInitialComponent());
-				}
 			}
 		} else {
 			clearPortfolioLink();
diff --git a/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefact.hbm.xml b/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefact.hbm.xml
deleted file mode 100644
index f556fd577a2fc76787cb1f52f94f2a7f459af83f..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefact.hbm.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping default-lazy="false">
-	<subclass name="org.olat.modules.wiki.portfolio.WikiArtefact" 
-		extends="org.olat.portfolio.model.artefacts.AbstractArtefact" discriminator-value="Wiki">
-	
-	</subclass>
-</hibernate-mapping>
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefact.java b/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefact.java
deleted file mode 100644
index 63816cd56830ca81d9fa8b2cdf4534c9c8f2f559..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefact.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.modules.wiki.portfolio;
-
-import org.olat.fileresource.types.WikiResource;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * Initial Date:  7 oct. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class WikiArtefact extends AbstractArtefact {
-
-	private static final long serialVersionUID = -3208512062986405560L;
-	public static final String ARTEFACT_TYPE = WikiResource.TYPE_NAME;
-
-	@Override
-	public String getIcon() {
-		return "o_wiki_icon";
-	}
-
-	@Override
-	public String getResourceableTypeName() {
-		return ARTEFACT_TYPE;
-	}
-
-}
diff --git a/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefactDetailsController.java b/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefactDetailsController.java
deleted file mode 100644
index da6caacd5d443a8786265e5ffaae903521a48066..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefactDetailsController.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.modules.wiki.portfolio;
-
-import java.util.Locale;
-
-import org.jamwiki.DataHandler;
-import org.jamwiki.model.Topic;
-import org.jamwiki.model.WikiFile;
-import org.jamwiki.parser.AbstractParser;
-import org.jamwiki.parser.ParserDocument;
-import org.jamwiki.parser.ParserInput;
-import org.jamwiki.parser.jflex.JFlexParser;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-import org.olat.core.gui.control.Event;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.controller.BasicController;
-import org.apache.logging.log4j.Logger;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.filter.FilterFactory;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * 
- * Description:<br>
- * Show the specific part of the WikiArtefact
- * 
- * <P>
- * Initial Date:  11 oct. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class WikiArtefactDetailsController extends BasicController {
-	
-	private static final Logger log = Tracing.createLoggerFor(WikiArtefactDetailsController.class);
-
-	private final VelocityContainer vC;
-
-	public WikiArtefactDetailsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact) {
-		super(ureq, wControl);
-		WikiArtefact fArtefact = (WikiArtefact)artefact;
-		vC = createVelocityContainer("details");
-		EPFrontendManager ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-		String wikiText = getContent(ePFMgr.getArtefactFullTextContent(fArtefact));
-		vC.contextPut("text", wikiText);
-		putInitialPanel(vC);
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		//
-	}
-
-	@Override
-	protected void doDispose() {
-		//
-	}
-	
-	private static String getContent(String content) {
-		try {
-			ParserInput input = new ParserInput();
-			input.setWikiUser(null);
-	    input.setAllowSectionEdit(false);
-	    input.setDepth(2);
-	    input.setContext("");
-	    input.setLocale(Locale.ENGLISH);
-	    input.setTopicName("dummy");
-	    input.setUserIpAddress("0.0.0.0");
-	    input.setDataHandler(new DummyDataHandler());
-	    input.setVirtualWiki("/olat");
-
-			AbstractParser parser = new JFlexParser(input);
-			ParserDocument parsedDoc = parser.parseHTML(content);
-			String parsedContent = parsedDoc.getContent();
-			return FilterFactory.getHtmlTagAndDescapingFilter().filter(parsedContent);
-		} catch(Exception e) {
-			log.error("", e);
-			return content;
-		}
-	}
-	
-	public static class DummyDataHandler implements DataHandler {
-
-		@Override
-		public boolean exists(String virtualWiki, String topic) {
-			return true;
-		}
-
-		@Override
-		public Topic lookupTopic(String virtualWiki, String topicName, boolean deleteOK, Object transactionObject) throws Exception {
-			return null;
-		}
-
-		@Override
-		public WikiFile lookupWikiFile(String virtualWiki, String topicName) throws Exception {
-			return null;
-		}
-	}
-}
-
diff --git a/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefactHandler.java b/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefactHandler.java
deleted file mode 100644
index ee73c363eb7def530f845572d6eef5e81ba3dbc4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefactHandler.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.modules.wiki.portfolio;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.group.BusinessGroup;
-import org.olat.group.BusinessGroupService;
-import org.olat.modules.wiki.Wiki;
-import org.olat.modules.wiki.WikiManager;
-import org.olat.modules.wiki.WikiPage;
-import org.olat.portfolio.EPAbstractHandler;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryManager;
-
-/**
- * Initial Date:  7 oct. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class WikiArtefactHandler extends EPAbstractHandler<WikiArtefact>  {
-
-	@Override
-	public String getType() {
-		return WikiArtefact.ARTEFACT_TYPE;
-	}
-
-	@Override
-	public WikiArtefact createArtefact() {
-		return new WikiArtefact();
-	}
-	
-	/**
-	 * @see org.olat.portfolio.EPAbstractHandler#prefillArtefactAccordingToSource(org.olat.portfolio.model.artefacts.AbstractArtefact, java.lang.Object)
-	 */
-	@Override
-	public void prefillArtefactAccordingToSource(AbstractArtefact artefact, Object source) {
-		super.prefillArtefactAccordingToSource(artefact, source);
-		
-		WikiPage page = null;
-		OLATResourceable ores = null;
-		if (source instanceof OLATResourceable){
-			ores = (OLATResourceable) source;
-			// fxdiff: FXOLAT-148 a wiki from a businessgroup needs to be wrapped accordingly!
-			if (artefact.getBusinessPath().contains(BusinessGroup.class.getSimpleName())) {
-				ores = OresHelper.createOLATResourceableInstance(BusinessGroup.class, ores.getResourceableId());
-			}
-			Wiki wiki = WikiManager.getInstance().getOrLoadWiki(ores);
-			String pageName = getPageName(artefact.getBusinessPath());
-			page = wiki.getPage(pageName, true);
-		} else if (source instanceof WikiPage) {
-			page = (WikiPage)source;
-		}
-		
-		if(page != null) {
-			artefact.setSource(getSourceInfo(artefact.getBusinessPath(), ores));
-			artefact.setTitle(page.getPageName());
-			artefact.setFulltextContent(page.getContent());
-			artefact.setSignature(70);
-		}
-	}
-	
-	private String getSourceInfo(String businessPath, OLATResourceable ores){
-		String sourceInfo = null;
-		String[] parts = businessPath.split(":");
-		if (parts.length<2) return sourceInfo;
-		String id = parts[1].substring(0, parts[1].lastIndexOf("]"));
-		if (parts[0].indexOf("BusinessGroup")!=-1){
-			BusinessGroup bGroup = CoreSpringFactory.getImpl(BusinessGroupService.class).loadBusinessGroup(new Long(id));
-			if (bGroup != null) sourceInfo = bGroup.getName();
-		} else if (parts[0].indexOf("RepositoryEntry") != -1){
-			RepositoryEntry repo = RepositoryManager.getInstance().lookupRepositoryEntry(ores, false);
-			if (repo!= null) sourceInfo = repo.getDisplayname();
-		}
-		return sourceInfo;
-	}
-	
-	private String getPageName(String businessPath) {
-		int start = businessPath.lastIndexOf("page=");
-		int stop = businessPath.lastIndexOf(":0]");
-		if(start < stop && start > 0 && stop > 0) {
-			return businessPath.substring(start + 5, stop);
-		} else {
-			return null;
-		}
-	}
-
-	@Override
-	public Controller createDetailsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, boolean readOnlyMode) {
-		return new WikiArtefactDetailsController(ureq, wControl, artefact);
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/wiki/portfolio/WikiMediaHandler.java b/src/main/java/org/olat/modules/wiki/portfolio/WikiMediaHandler.java
index c3cd2b15e08fbcace63795e8927a52f1f3a7039c..4d1a371330b99a44f5b4c8a89ece1eb15bae83e6 100644
--- a/src/main/java/org/olat/modules/wiki/portfolio/WikiMediaHandler.java
+++ b/src/main/java/org/olat/modules/wiki/portfolio/WikiMediaHandler.java
@@ -42,7 +42,6 @@ import org.olat.modules.portfolio.handler.AbstractMediaHandler;
 import org.olat.modules.portfolio.manager.MediaDAO;
 import org.olat.modules.portfolio.ui.media.StandardEditMediaController;
 import org.olat.modules.wiki.WikiPage;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
 import org.olat.user.manager.ManifestBuilder;
 import org.olat.util.logging.activity.LoggingResourceable;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -109,22 +108,6 @@ public class WikiMediaHandler extends AbstractMediaHandler {
 		return media;
 	}
 
-	@Override
-	public Media createMedia(AbstractArtefact artefact) {
-		String title = artefact.getTitle();
-		String description = artefact.getDescription();
-		String content = artefact.getFulltextContent();
-		String businessPath = artefact.getBusinessPath();
-		if(businessPath == null) {
-			businessPath = "[PortfolioV2:0][MediaCenter:0]";
-		}
-		Media media = mediaDao.createMedia(title, description, content, WIKI_HANDLER, businessPath,
-				artefact.getKey().toString(), artefact.getSignature(), artefact.getAuthor());
-		ThreadLocalUserActivityLogger.log(PortfolioLoggingAction.PORTFOLIO_MEDIA_ADDED, getClass(),
-				LoggingResourceable.wrap(media));
-		return media;
-	}
-
 	@Override
 	public Controller getMediaController(UserRequest ureq, WindowControl wControl, Media media, MediaRenderingHints hints) {
 		return new WikiPageMediaController(ureq, wControl, media, hints);
diff --git a/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_de.properties
deleted file mode 100644
index e29b4b2e591129c75aa0d8c0c938eea1860e9fab..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:04 CET 2009
-handler.WikiArtefactHandler.title=Wiki
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_en.properties
deleted file mode 100644
index 5e3a2116d483cad295c17635a0201c62d4b22768..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Wed Jan 05 17:28:58 CET 2011
-handler.WikiArtefactHandler.title=Wiki
diff --git a/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index e775bcba0013181eb13cce9b2da3a9901fb44db7..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Sat Jan 08 12:51:59 CET 2011
-handler.WikiArtefactHandler.title=Wiki
diff --git a/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_it.properties
deleted file mode 100644
index 9df1c53c2ce8b7c96951c10f4233fe5d76c97741..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_it.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Sat Jan 08 12:37:50 CET 2011
-handler.WikiArtefactHandler.title=Wiki
diff --git a/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_nl_NL.properties
deleted file mode 100644
index 82a2b570ff6300f8ffbfd5efcb07403aacd639b5..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_nl_NL.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Thu Sep 08 16:42:46 CEST 2011
-handler.WikiArtefactHandler.title=Wiki
diff --git a/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_pl.properties
deleted file mode 100644
index da0912816b0bd18f8fa523ca3e6a1ac129ecd37c..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_pl.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Thu Sep 08 16:42:41 CEST 2011
-handler.WikiArtefactHandler.title=Wiki
diff --git a/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_pt_BR.properties
deleted file mode 100644
index 9c11e53ce816529e90177924acfe835dda2a0256..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/modules/wiki/portfolio/_i18n/LocalStrings_pt_BR.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Thu Sep 08 16:42:38 CEST 2011
-handler.WikiArtefactHandler.title=Wiki
diff --git a/src/main/java/org/olat/portfolio/EPAbstractHandler.java b/src/main/java/org/olat/portfolio/EPAbstractHandler.java
deleted file mode 100755
index 045dff60c3465c31187304fe909169aa6544f921..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/EPAbstractHandler.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio;
-
-import java.util.Date;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.util.Util;
-import org.olat.core.util.filter.Filter;
-import org.olat.core.util.filter.FilterFactory;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.search.model.OlatDocument;
-import org.olat.search.service.SearchResourceContext;
-
-/**
- * 
- * Description:<br>
- * reason to have this abstract between interface and concrete implementation is to swap out common code here.
- * 
- * <P>
- * Initial Date:  11.06.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public abstract class EPAbstractHandler<U extends AbstractArtefact> implements EPArtefactHandler<U> {
-
-	private boolean enabled = true;
-	
-	public EPAbstractHandler() {
-		//
-	}
-	
-	/**
-	 * @see org.olat.portfolio.EPArtefactHandler#prefillArtefactAccordingToSource(org.olat.portfolio.model.artefacts.AbstractArtefact, java.lang.Object)
-	 */
-	@Override
-	public void prefillArtefactAccordingToSource(AbstractArtefact artefact, Object source) {
-		if (source instanceof OLATResourceable){
-			OLATResourceable ores = (OLATResourceable) source;
-			artefact.setSource(ores.getResourceableTypeName());
-		}
-		artefact.setCollectionDate(new Date());		
-	}
-	/**
-	 * @see org.olat.portfolio.EPArtefactHandler#getType()
-	 */
-	@Override
-	public abstract String getType();
-	
-	@Override
-	public boolean isEnabled() {
-		return enabled;
-	}
-	
-	public void setEnabled(boolean enabled) {
-		this.enabled = enabled;
-	}
-
-	/**
-	 * @see org.olat.portfolio.EPArtefactHandler#getHandlerTranslator(org.olat.core.gui.translator.Translator)
-	 */
-	@Override
-	public Translator getHandlerTranslator(Translator fallBackTrans){
-		return Util.createPackageTranslator(this.getClass(), fallBackTrans.getLocale(), fallBackTrans);
-	}
-	
-	@Override
-	public Controller createDetailsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, boolean readOnlyMode){
-		return null;
-	}
-
-	public abstract U createArtefact();
-
-	/**
-	 * @return Returns the providesSpecialMapViewController.
-	 */
-	@Override
-	public boolean isProvidingSpecialMapViewController() {
-		return false;
-	}
-	
-	@Override
-	public Controller getSpecialMapViewController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact) {
-		return null;
-	}
-
-	@Override
-	public OlatDocument getIndexerDocument(SearchResourceContext searchResourceContext, AbstractArtefact artefact, EPFrontendManager ePFManager) {
-		
-		OlatDocument document = new OlatDocument();
-
-		Identity author = artefact.getAuthor();
-		if(author != null) {
-			document.setAuthor(author.getName());
-		}
-		
-		Filter filter = FilterFactory.getHtmlTagAndDescapingFilter();
-		
-		document.setCreatedDate(artefact.getCreationDate());
-  	document.setTitle(filter.filter(artefact.getTitle()));
-  	document.setDescription(filter.filter(artefact.getDescription()));
-		document.setResourceUrl(searchResourceContext.getResourceUrl());
-		document.setDocumentType(searchResourceContext.getDocumentType());
-		document.setCssIcon(artefact.getIcon());
-		document.setParentContextType(searchResourceContext.getParentContextType());
-		document.setParentContextName(searchResourceContext.getParentContextName());
-
-		StringBuilder sb = new StringBuilder();
-		if(artefact.getReflexion() != null) {
-			sb.append(artefact.getReflexion()).append(' ');
-		}
-		getContent(artefact, sb, searchResourceContext, ePFManager);
-		document.setContent(sb.toString());
-		return document;
-	}
-	
-	@SuppressWarnings("unused")
-	protected void getContent(AbstractArtefact artefact, StringBuilder sb, SearchResourceContext context, EPFrontendManager ePFManager) {
-		String content = ePFManager.getArtefactFullTextContent(artefact);
-		if(content != null) {
-			sb.append(content);
-		}
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/EPArtefactHandler.java b/src/main/java/org/olat/portfolio/EPArtefactHandler.java
deleted file mode 100644
index 0872cffc0f6742045c0bac51ba85550ee482147e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/EPArtefactHandler.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio;
-
-import org.olat.core.configuration.ConfigOnOff;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.translator.Translator;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.search.model.OlatDocument;
-import org.olat.search.service.SearchResourceContext;
-
-/**
- * 
- * Description:<br>
- * each artefact type has its handler
- * 
- * <P>
- * Initial Date:  28.07.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public interface EPArtefactHandler<U extends AbstractArtefact> extends ConfigOnOff {
-	
-	/**
-	 * get an artefact-type identifier, should be according to OLATresourcable.getResourceableTypeName()
-	 * @return
-	 */
-	public String getType();
-	
-	public U createArtefact();
-	
-	/**
-	 * as each artefact handler knows best how to convert the source to an artefact, he should take care of 
-	 * pre-filling the artefact
-	 * @param artefact
-	 * @param source
-	 */
-	public void prefillArtefactAccordingToSource(AbstractArtefact artefact, Object source);
-	
-	/**
-	 * get back an translator setup for the corresponding handler
-	 * @param fallBackTrans - your yet existing translator
-	 * @return
-	 */
-	public Translator getHandlerTranslator(Translator fallBackTrans);
-	
-	/**
-	 * create a controller to present / manipulate artefact-specific stuff
-	 * @param ureq
-	 * @return
-	 */
-	public Controller createDetailsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, boolean readOnlyMode);
-
-	/**
-	 * override with true, if your artefact-type provides a non-generic view while displayed in a map
-	 * this is yet used for live-blog-artefact
-	 * @return
-	 */
-	public boolean isProvidingSpecialMapViewController();
-	
-	/**
-	 * return the controller to display the non-generic view
-	 * is only used if isProvidingSpecialMapViewController() is true
-	 * @param ureq
-	 * @param wControl
-	 * @return
-	 */
-	public Controller getSpecialMapViewController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact);
-	
-	/**
-	 * Text from the original source - can be used for tag-proposition, as reflexion or description
-	 * @param artefact
-	 * @return
-	 */
-	public OlatDocument getIndexerDocument(SearchResourceContext resourceContext, AbstractArtefact artefact, EPFrontendManager ePFManager);
-	
-}
diff --git a/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java b/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java
deleted file mode 100644
index 080327f08867849a32ffc2cfb3f33e7447cd81e7..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.olat.NewControllerFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.context.BusinessControlFactory;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.ContextEntryControllerCreator;
-import org.olat.core.id.context.DefaultContextEntryControllerCreator;
-import org.olat.core.id.context.TabContext;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.home.HomeSite;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * Description:<br>
- * Load a context entry creator
- * 
- * <P>
- * Initial Date: 02.08.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPArtefactPoolExtension {
-
-	public EPArtefactPoolExtension() {
-		NewControllerFactory.getInstance().addContextEntryControllerCreator(AbstractArtefact.class.getSimpleName(), new ArtefactContextEntryControllerCreator());	
-	}
-	
-	private static class ArtefactContextEntryControllerCreator extends DefaultContextEntryControllerCreator {
-
-		@Override
-		public ContextEntryControllerCreator clone() {
-			return this;
-		}
-
-		@Override
-		public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
-			return HomeSite.class.getName();
-		}
-
-		@Override
-		public TabContext getTabContext(UserRequest ureq, OLATResourceable ores, ContextEntry mainEntry, List<ContextEntry> entries) {
-			Identity identity = ureq.getIdentity();
-
-			OLATResourceable mapsRes = OresHelper.createOLATResourceableType("EPArtefacts");
-			ContextEntry mapsEntry = BusinessControlFactory.getInstance().createContextEntry(mapsRes);
-			List<ContextEntry> rewritedEntries = new ArrayList<>();
-			rewritedEntries.add(mapsEntry);//Menu node
-			rewritedEntries.add(mainEntry);//Map
-			OLATResourceable homeRes = OresHelper.createOLATResourceableInstance("HomeSite", identity.getKey());
-			return new TabContext("", homeRes, rewritedEntries);
-		}
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/EPExtensionHideForInvitationalUserSecurityCallback.java b/src/main/java/org/olat/portfolio/EPExtensionHideForInvitationalUserSecurityCallback.java
deleted file mode 100644
index c42f9db0473ce820ad48baea9d8f1d73c2307462..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/EPExtensionHideForInvitationalUserSecurityCallback.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio;
-
-import org.olat.core.extensions.action.ActionExtensionSecurityCallback;
-import org.olat.core.gui.UserRequest;
-
-/**
- * Description:<br>
- * hide extensions for users which got an invitation
- * 
- * <P>
- * Initial Date:  18.11.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPExtensionHideForInvitationalUserSecurityCallback implements ActionExtensionSecurityCallback {
-
-	/**
-	 * @see org.olat.core.extensions.action.ActionExtensionSecurityCallback#isAllowedToLaunchActionController(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	public boolean isAllowedToLaunchActionController(UserRequest ureq) {
-		return !ureq.getUserSession().getRoles().isInvitee();
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/EPLoggingAction.java b/src/main/java/org/olat/portfolio/EPLoggingAction.java
deleted file mode 100644
index 65c6dce02b96c13f011ec22a1ef2a3fde6203faa..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/EPLoggingAction.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <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
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <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>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.  
-* <p>
-*/  
-
-package org.olat.portfolio;
-
-import java.lang.reflect.Field;
-
-import org.apache.logging.log4j.Logger;
-import org.olat.core.logging.Tracing;
-import org.olat.core.logging.activity.ActionObject;
-import org.olat.core.logging.activity.ActionType;
-import org.olat.core.logging.activity.ActionVerb;
-import org.olat.core.logging.activity.BaseLoggingAction;
-import org.olat.core.logging.activity.CrudAction;
-import org.olat.core.logging.activity.ILoggingAction;
-import org.olat.core.logging.activity.OlatResourceableType;
-import org.olat.core.logging.activity.ResourceableTypeList;
-import org.olat.core.logging.activity.StringResourceableType;
-
-/**
- * LoggingActions used by the Portfolio
- * <P>
- * PLEASE BE CAREFUL WHEN EDITING IN HERE.
- * <p>
- * Especially when modifying the ResourceableTypeList - which is 
- * a exercise where we try to predict/document/define which ResourceableTypes
- * will later on - at runtime - be available to the IUserActivityLogger.log() method.
- * <p>
- * The names of the LoggingAction should be self-describing.
- * <p>
- * Initial Date:  25.01.2011 <br>
- * @author Christian
- */
-public class  EPLoggingAction extends BaseLoggingAction {
-	
-	private static final Logger log = Tracing.createLoggerFor(EPLoggingAction.class);
-
-	/**
-	 * Allow any resourceable type before portfolio [*][*]...[portfolio]
-	 */
-	private static final ResourceableTypeList EP_RESOURCEABLE_LIST = 
-		new ResourceableTypeList()
-	   .addMandatory(StringResourceableType.anyBefore, OlatResourceableType.portfolio);
-
-	public static final ILoggingAction EPORTFOLIO_ARTEFACT_ADDED = 
-		new EPLoggingAction(ActionType.admin, CrudAction.update, ActionVerb.add, ActionObject.portfolioartefact).setTypeList(EP_RESOURCEABLE_LIST);
-	public static final ILoggingAction EPORTFOLIO_ARTEFACT_REMOVED = 
-		new EPLoggingAction(ActionType.admin, CrudAction.update, ActionVerb.remove, ActionObject.portfolioartefact).setTypeList(EP_RESOURCEABLE_LIST);
-	public static final ILoggingAction EPORTFOLIO_ARTEFACT_SELECTED = 
-		new EPLoggingAction(ActionType.admin, CrudAction.update, ActionVerb.perform, ActionObject.portfolioartefact).setTypeList(EP_RESOURCEABLE_LIST);
-	
-	public static final ILoggingAction EPORTFOLIO_TASK_STARTED = 
-		new EPLoggingAction(ActionType.admin, CrudAction.retrieve, ActionVerb.open, ActionObject.portfoliotask).setTypeList(EP_RESOURCEABLE_LIST);
-	public static final ILoggingAction EPORTFOLIO_TASK_FINISHED = 
-		new EPLoggingAction(ActionType.admin, CrudAction.create, ActionVerb.perform, ActionObject.portfoliotask).setTypeList(EP_RESOURCEABLE_LIST);
-
-	public static final ILoggingAction EPORTFOLIO_MAP_CREATED = 
-		new EPLoggingAction(ActionType.admin, CrudAction.create, ActionVerb.add, ActionObject.portfoliomap).setTypeList(EP_RESOURCEABLE_LIST);
-	public static final ILoggingAction EPORTFOLIO_MAP_REMOVED = 
-		new EPLoggingAction(ActionType.admin, CrudAction.update, ActionVerb.remove, ActionObject.portfoliomap).setTypeList(EP_RESOURCEABLE_LIST);
-
-	
-	/**
-	 * This static constructor's only use is to set the javaFieldIdForDebug
-	 * on all of the LoggingActions defined in this class.
-	 * <p>
-	 * This is used to simplify debugging - as it allows to issue (technical) log
-	 * statements where the name of the LoggingAction Field is written.
-	 */
-	static {
-		Field[] fields = EPLoggingAction.class.getDeclaredFields();
-		if (fields!=null) {
-			for (int i = 0; i < fields.length; i++) {
-				Field field = fields[i];
-				if (field.getType()==EPLoggingAction.class) {
-					try {
-						EPLoggingAction aLoggingAction = (EPLoggingAction)field.get(null);
-						aLoggingAction.setJavaFieldIdForDebug(field.getName());
-					} catch (IllegalArgumentException | IllegalAccessException e) {
-						log.error("", e);
-					}
-				}
-			}
-		}
-	}
-	
-	/**
-	 * Simple wrapper calling super<init>
-	 * @see BaseLoggingAction#BaseLoggingAction(ActionType, CrudAction, ActionVerb, String)
-	 */
-	EPLoggingAction(ActionType resourceActionType, CrudAction action, ActionVerb actionVerb, ActionObject actionObject) {
-		super(resourceActionType, action, actionVerb, actionObject.name());
-	}
-	
-}
diff --git a/src/main/java/org/olat/portfolio/EPMapExtension.java b/src/main/java/org/olat/portfolio/EPMapExtension.java
deleted file mode 100644
index 33d96f390a540bf13429fe8052ec8e6c3fa126af..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/EPMapExtension.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.olat.NewControllerFactory;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.context.BusinessControlFactory;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.ContextEntryControllerCreator;
-import org.olat.core.id.context.DefaultContextEntryControllerCreator;
-import org.olat.core.id.context.TabContext;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.home.HomeSite;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.EPDefaultMap;
-import org.olat.resource.OLATResource;
-
-/**
- * Rewrite the business path to map
- * @author srosse
- *
- */
-public class EPMapExtension {
-
-	public EPMapExtension() {
-		NewControllerFactory.getInstance().addContextEntryControllerCreator(EPDefaultMap.class.getSimpleName(), new MapContextEntryControllerCreator());	
-	}
-	
-	private static class MapContextEntryControllerCreator extends DefaultContextEntryControllerCreator {
-
-		@Override
-		public ContextEntryControllerCreator clone() {
-			return this;
-		}
-
-		@Override
-		public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-			return true;
-		}
-
-		@Override
-		public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
-			return HomeSite.class.getName();
-		}
-
-		@Override
-		public TabContext getTabContext(UserRequest ureq, OLATResourceable ores, ContextEntry mainEntry, List<ContextEntry> entries) {
-			Identity identity = ureq.getIdentity();
-			EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-			
-			String nodeTypeName = null;
-			OLATResource mapOres = ePFMgr.loadOlatResourceFromByKey(mainEntry.getOLATResourceable().getResourceableId());
-			if(mapOres == null) {
-				//nothing to do;
-			} else if(ePFMgr.isMapOwner(identity, mapOres)) {
-				if("EPStructuredMap".equals(mapOres.getResourceableTypeName())) {
-					nodeTypeName = "EPStructuredMaps";
-				} else {
-					nodeTypeName = "EPMaps";
-				}
-			} else if(ePFMgr.isMapVisible(ureq.getIdentity(), mapOres)) {
-				//go to the shared pane
-				if(ePFMgr.isMapShared(mapOres)) {
-					nodeTypeName = "EPSharedMaps";
-				}
-			}
-			
-			if(nodeTypeName == null) {
-				OLATResourceable homeRes = OresHelper.createOLATResourceableInstance("HomeSite", identity.getKey());
-				return new TabContext("", homeRes, Collections.<ContextEntry>emptyList());
-			}
-			
-			OLATResourceable mapsRes = OresHelper.createOLATResourceableType(nodeTypeName);
-			ContextEntry mapsEntry = BusinessControlFactory.getInstance().createContextEntry(mapsRes);
-			List<ContextEntry> rewritedEntries = new ArrayList<>();
-			rewritedEntries.add(mapsEntry);//Menu node
-			rewritedEntries.add(mainEntry);//Map
-			if(entries != null && !entries.isEmpty()) {
-				rewritedEntries.addAll(entries);//more details
-			}
-			// -> HomeSite
-			OLATResourceable homeRes = OresHelper.createOLATResourceableInstance("HomeSite", identity.getKey());
-			return new TabContext("", homeRes, rewritedEntries);
-		}	
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java b/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java
deleted file mode 100644
index 081a84c0d28ab440b49b7b8912f10c00de54673e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio;
-
-import java.util.List;
-
-import org.olat.NewControllerFactory;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.ContextEntryControllerCreator;
-import org.olat.core.id.context.DefaultContextEntryControllerCreator;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-
-/**
- * Description:<br>
- * load my maps menu-entry. config here instead of xml allows en-/disabling at
- * runtime
- * 
- * <P>
- * Initial Date: 03.08.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPMapOnInvitationExtension {
-
-	public EPMapOnInvitationExtension() {
-		NewControllerFactory.getInstance().addContextEntryControllerCreator("MapInvitation", new MapOnInvitationContextEntryControllerCreator());	
-	}
-	
-	private static class MapOnInvitationContextEntryControllerCreator extends DefaultContextEntryControllerCreator {
-
-		private PortfolioStructureMap map;
-		
-		@Override
-		public ContextEntryControllerCreator clone() {
-			return new MapOnInvitationContextEntryControllerCreator();
-		}
-
-		@Override
-		public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) {
-			if(!ureq.getUserSession().getRoles().isInvitee()) {
-				return null;
-			}
-			
-			PortfolioStructureMap structureMap = getMapFromContext(ces.get(0));
-			EPSecurityCallback secCallback = new EPSecurityCallbackImpl(false, true);
-			Controller epCtr = EPUIFactory.createMapViewController(ureq, wControl, structureMap, secCallback);
-			
-			LayoutMain3ColsController layoutCtr = new LayoutMain3ColsController(ureq, wControl, epCtr);
-			layoutCtr.addDisposableChildController(epCtr);
-			return layoutCtr;
-		}
-
-		@Override
-		public String getTabName(ContextEntry ce, UserRequest ureq) {
-			PortfolioStructureMap structureMap = getMapFromContext(ce);
-			if(structureMap != null) {
-				return structureMap.getTitle();
-			}
-			return null;
-		}
-
-		@Override
-		public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-			if(!ureq.getUserSession().getRoles().isInvitee()) {
-				return false;
-			}
-			
-			final EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-			PortfolioStructureMap structureMap = getMapFromContext(ce);
-			if (structureMap == null) {
-				return false;
-			}
-			boolean visible = ePFMgr.isMapVisible(ureq.getIdentity(), structureMap.getOlatResource());
-			return visible;
-		}
-		
-		/**
-		 * @param ContextEntry
-		 * @return the loaded map or null if not found
-		 */
-		private PortfolioStructureMap getMapFromContext(final ContextEntry ce) {
-			if(map == null) {
-				Long mapKey = ce.getOLATResourceable().getResourceableId();
-				EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-				map = (PortfolioStructureMap)ePFMgr.loadPortfolioStructureByKey(mapKey);
-			}
-			return map;
-		}
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/EPMyMapsExtension.java b/src/main/java/org/olat/portfolio/EPMyMapsExtension.java
deleted file mode 100644
index 0b2b913dd38e90c771f7c84170cbc830e1c48033..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/EPMyMapsExtension.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio;
-
-import java.util.List;
-
-import org.olat.NewControllerFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.ContextEntryControllerCreator;
-import org.olat.core.id.context.DefaultContextEntryControllerCreator;
-import org.olat.home.HomeSite;
-import org.olat.portfolio.model.structel.EPDefaultMap;
-
-/**
- * Description:<br>
- * Load a context entry creator
- * runtime
- * 
- * <P>
- * Initial Date: 03.08.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPMyMapsExtension {
-
-	public EPMyMapsExtension() {
-		NewControllerFactory.getInstance().addContextEntryControllerCreator(EPDefaultMap.class.getSimpleName(), new MyMapsContextEntryControllerCreator());	
-	}
-	
-	private static class MyMapsContextEntryControllerCreator extends DefaultContextEntryControllerCreator {
-		
-		@Override
-		public ContextEntryControllerCreator clone() {
-			return this;
-		}
-
-		@Override
-		public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
-			return HomeSite.class.getName();
-		}
-
-		@Override
-		public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-			return true;
-		}
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java b/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java
deleted file mode 100644
index 8079b3d91b8cbbc35f91f29548758a03cb9f4584..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio;
-
-import java.util.List;
-
-import org.olat.NewControllerFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.ContextEntryControllerCreator;
-import org.olat.core.id.context.DefaultContextEntryControllerCreator;
-import org.olat.home.HomeSite;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-
-/**
- * Description:<br>
- * Load a context entry creator
- * 
- * <P>
- * Initial Date: 03.08.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPMyStructuredMapsExtension {
-
-	public EPMyStructuredMapsExtension() {
-
-		NewControllerFactory.getInstance().addContextEntryControllerCreator(EPStructuredMap.class.getSimpleName(), new MyStructuredMapsContextEntryControllerCreator());		
-	}
-	
-	private static class MyStructuredMapsContextEntryControllerCreator extends DefaultContextEntryControllerCreator {
-
-		@Override
-		public ContextEntryControllerCreator clone() {
-			return this;
-		}
-
-		@Override
-		public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
-			return HomeSite.class.getName();
-		}
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java b/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java
deleted file mode 100644
index 9a96ef4c971d6b7525454c1c676f945c8592888f..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio;
-
-import java.util.List;
-
-import org.olat.NewControllerFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.ContextEntryControllerCreator;
-import org.olat.core.id.context.DefaultContextEntryControllerCreator;
-import org.olat.home.HomeSite;
-
-/**
- * Description:<br>
- * load my maps menu-entry. config here instead of xml allows en-/disabling at
- * runtime
- * 
- * <P>
- * Initial Date: 03.08.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPOtherMapsExtension {
-
-	public EPOtherMapsExtension() {
-		NewControllerFactory.getInstance().addContextEntryControllerCreator("Map", new OtherMapsContextEntryControllerCreator());
-	}
-	
-	private static class OtherMapsContextEntryControllerCreator extends DefaultContextEntryControllerCreator {
-
-		@Override
-		public ContextEntryControllerCreator clone() {
-			return this;
-		}
-
-		@Override
-		public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
-			return HomeSite.class.getName();
-		}
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/EPSecurityCallback.java b/src/main/java/org/olat/portfolio/EPSecurityCallback.java
deleted file mode 100644
index 3c32af6d6a6470c79a44f8ef00e9bf2f4315123b..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/EPSecurityCallback.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.portfolio;
-
-/**
- * 
- * Description:<br>
- * SecurityCallback
- * 
- * <P>
- * Initial Date:  12 oct. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public interface EPSecurityCallback {
-	
-	public boolean isRestrictionsEnabled();
-	
-	public boolean isOwner();
-	
-	public boolean canEditStructure();
-	
-	public boolean canEditReflexion();
-	
-	public boolean canEditTags();
-	
-	public boolean canShareMap();
-	
-	public boolean canAddArtefact();
-	
-	public boolean canRemoveArtefactFromStruct();
-	
-	public boolean canAddStructure();
-	
-	public boolean canAddPage();
-
-	public boolean canCommentAndRate();
-	
-	public boolean canSubmitAssess();
-	
-	public boolean canView();
-}
diff --git a/src/main/java/org/olat/portfolio/EPSecurityCallbackFactory.java b/src/main/java/org/olat/portfolio/EPSecurityCallbackFactory.java
deleted file mode 100644
index 73f40a4b7b9a0ad6d13fb59aadb2607303415b1e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/EPSecurityCallbackFactory.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.portfolio;
-
-import org.olat.basesecurity.GroupRoles;
-import org.olat.basesecurity.OrganisationRoles;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.id.OLATResourceable;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.EPDefaultMap;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.olat.portfolio.model.structel.EPStructuredMapTemplate;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.model.structel.StructureStatusEnum;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryManager;
-import org.olat.repository.RepositoryService;
-
-
-/**
- * 
- * Description:<br>
- * EPSecurityCallbackFactory
- * 
- * <P>
- * Initial Date:  18 nov. 2010 <br>
- * @author srosse
- */
-public class EPSecurityCallbackFactory {
-	
-
-	public static EPSecurityCallback getSecurityCallback(UserRequest ureq, PortfolioStructureMap map, EPFrontendManager ePFMgr) {
-		if(map instanceof EPDefaultMap) {
-			return getSecurityCallbackMap(ureq, map, ePFMgr);	
-		} else if (map instanceof EPStructuredMap) {
-			return getSecurityCallbackStructuredMap(ureq, map, ePFMgr);
-		} else if (map instanceof EPStructuredMapTemplate) {
-			return getSecurityCallbackTemplate(ureq, map, ePFMgr);
-		}
-		return new EPSecurityCallbackOwner(false, false, false);
-	}
-	
-	public static boolean isLockNeeded(EPSecurityCallback secCallback) {
-		return secCallback.canAddArtefact() || secCallback.canAddPage() || secCallback.canAddStructure()
-			|| secCallback.canEditStructure() || secCallback.canEditReflexion();
-	}
-	
-	public static EPSecurityCallback updateAfterFailedLock(EPSecurityCallback secCallback) {
-		boolean canEditStructure = false;
-		boolean canEditReflexion = false;
-		boolean canEditTags = false;
-		boolean canShare = secCallback.canShareMap();
-		boolean canAddArtefact = false;
-		boolean canRemoveArtefactFromStruct = false;
-		boolean canAddStructure = false;
-		boolean canAddPage = false;
-		boolean canView = secCallback.canView();
-		boolean canCommentAndRate = secCallback.canCommentAndRate();
-		boolean canSubmitAssess = false;
-		boolean restrictionsEnabled = secCallback.isRestrictionsEnabled();
-		boolean isOwner = secCallback.isOwner();
-
-		return new EPSecurityCallbackImpl(canEditStructure, canEditReflexion, canEditTags, canShare, canAddArtefact, canRemoveArtefactFromStruct, canAddStructure, canAddPage,
-				canView, canCommentAndRate, canSubmitAssess, restrictionsEnabled, isOwner);
-	}
-	
-	/**
-	 * EPDefault: owner can edit them (add structure, artefacts), viewers can comments
-	 * @param ureq
-	 * @param map
-	 * @param ePFMgr
-	 * @return
-	 */
-	protected static EPSecurityCallback getSecurityCallbackMap(UserRequest ureq, PortfolioStructureMap map, EPFrontendManager ePFMgr) {
-		boolean isOwner = ePFMgr.isMapOwner(ureq.getIdentity(), map.getOlatResource());
-		boolean isVisible = ePFMgr.isMapVisible(ureq.getIdentity(), map.getOlatResource());
-		
-		boolean canEditStructure = isOwner;
-		boolean canEditReflexion = isOwner;
-		boolean canEditTags = isOwner;
-		boolean canShare = isOwner;
-		boolean canAddArtefact = isOwner;
-		boolean canRemoveArtefactFromStruct = isOwner;
-		boolean canAddStructure = isOwner;
-		boolean canAddPage = isOwner;
-		boolean canView = isVisible;
-		boolean canCommentAndRate = isVisible || isOwner;
-		boolean canSubmitAssess = false;
-		boolean restrictionsEnabled = false;
-		
-		return new EPSecurityCallbackImpl(canEditStructure, canEditReflexion, canEditTags, canShare, canAddArtefact, canRemoveArtefactFromStruct, canAddStructure, canAddPage,
-				canView, canCommentAndRate, canSubmitAssess, restrictionsEnabled, isOwner);
-	}
-	
-	/**
-	 * EPStructuredMap: owner can edit as long as map is not closed
-	 * @param ureq
-	 * @param map
-	 * @param ePFMgr
-	 * @return
-	 */
-	protected static EPSecurityCallback getSecurityCallbackStructuredMap(UserRequest ureq, PortfolioStructureMap map, EPFrontendManager ePFMgr) {
-		boolean isOwner = ePFMgr.isMapOwner(ureq.getIdentity(), map.getOlatResource());
-		boolean isCoach = false;
-		boolean isVisible = ePFMgr.isMapVisible(ureq.getIdentity(), map.getOlatResource());
-		boolean open = !StructureStatusEnum.CLOSED.equals(map.getStatus());
-		
-		boolean canEditStructure = false;
-		boolean canEditReflexion = isOwner && open;
-		boolean canEditTags = isOwner && open;
-		boolean canShare = (isOwner || isCoach);
-		boolean canAddArtefact = isOwner && open;
-		boolean canRemoveArtefactFromStruct = isOwner && open;
-		boolean canAddStructure = false;
-		boolean canAddPage = false;
-		boolean canView = isVisible || isCoach;
-		boolean canCommentAndRate = isVisible || isCoach || isOwner;
-		boolean canSubmitAssess = isOwner;
-		boolean restrictionsEnabled = true;
-		
-		return new EPSecurityCallbackImpl(canEditStructure, canEditReflexion, canEditTags, canShare, canAddArtefact, canRemoveArtefactFromStruct, canAddStructure, canAddPage,
-				canView, canCommentAndRate, canSubmitAssess, restrictionsEnabled, isOwner);
-	}
-	
-	/**
-	 * Owner or admin have the right to edit structure if the flag CLOSED is not set. Their
-	 * some restrictions if the map is already in use.
-	 * @param ureq
-	 * @param map
-	 * @param ePFMgr
-	 * @return
-	 */
-	protected static EPSecurityCallback getSecurityCallbackTemplate(UserRequest ureq, PortfolioStructureMap map, EPFrontendManager ePFMgr) {
-		RepositoryService repositoryService = CoreSpringFactory.getImpl(RepositoryService.class);
-		RepositoryManager repositoryManager = CoreSpringFactory.getImpl(RepositoryManager.class);
-		
-		OLATResourceable mres = map.getOlatResource();
-		RepositoryEntry repoEntry = repositoryManager.lookupRepositoryEntry(mres, false);
-		
-		boolean isAdministrator = repositoryService.hasRoleExpanded(ureq.getIdentity(), repoEntry,
-				OrganisationRoles.administrator.name(), OrganisationRoles.learnresourcemanager.name());
-
-		//owner of repository entry or owner of map is the same
-		boolean isOwner = repositoryService.hasRole(ureq.getIdentity(), repoEntry, GroupRoles.owner.name())
-				|| ePFMgr.isMapOwner(ureq.getIdentity(), map.getOlatResource());
-		boolean canLaunch = isAdministrator || isOwner ||
-				repositoryManager.isAllowedToLaunch(ureq.getIdentity(), ureq.getUserSession().getRoles(), repoEntry);
-		boolean open = !StructureStatusEnum.CLOSED.equals(map.getStatus());
-		
-		boolean canEditStructure = (isOwner || isAdministrator) && open;
-		boolean canEditReflexion = isOwner && open;
-		boolean canEditTags = isOwner && open;
-		boolean canShare = false;
-		boolean canAddArtefact = false;
-		boolean canRemoveArtefactFromStruct = (isOwner || isAdministrator) && open;
-		boolean canAddStructure = (isOwner || isAdministrator) && open;
-		boolean canAddPage = (isOwner || isAdministrator) && open;
-		boolean canView = canLaunch;
-		boolean canCommentAndRate = false;
-		boolean canSubmitAssess = false;
-		boolean restrictionsEnabled = true;//for author
-
-		return new EPSecurityCallbackImpl(canEditStructure, canEditReflexion, canEditTags, canShare, canAddArtefact, canRemoveArtefactFromStruct, canAddStructure, canAddPage,
-				canView, canCommentAndRate, canSubmitAssess, restrictionsEnabled, isOwner);
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/EPSecurityCallbackImpl.java b/src/main/java/org/olat/portfolio/EPSecurityCallbackImpl.java
deleted file mode 100644
index cb92d76282df4bd6d51ff3be145180b9a7613add..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/EPSecurityCallbackImpl.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.portfolio;
-
-/**
- * 
- * Description:<br>
- * Very basic implementation of the EPSecurityCallback
- * 
- * <P>
- * Initial Date:  12 oct. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPSecurityCallbackImpl implements EPSecurityCallback {
-	
-	private final boolean canEditStructure;
-	private final boolean canEditReflexion;
-	private final boolean canEditTags;
-	private final boolean canShare;
-	private final boolean canAddArtefact;
-	private final boolean canRemoveArtefactFromStruct;
-	private final boolean canAddStructure;
-	private final boolean canAddPage;
-	private final boolean canView;
-	private final boolean canCommentAndRate;
-	private final boolean canSubmitAssess;
-	private final boolean restrictionsEnabled;
-	private final boolean isOwner;
-	
-	public EPSecurityCallbackImpl(boolean canEdit, boolean canView) {
-		this.canEditStructure = canEdit;
-		this.canEditReflexion = canEdit;
-		this.canEditTags = canEdit;
-		this.canShare = canEdit;
-		this.canAddArtefact = canEdit;
-		this.canRemoveArtefactFromStruct = canEdit;
-		this.canAddStructure = canEdit;
-		this.canAddPage = canEdit;
-		this.canView = canView;
-		this.canCommentAndRate = canView;
-		this.canSubmitAssess = false;
-		this.restrictionsEnabled = false;
-		this.isOwner = false;
-	}
-	
-	protected EPSecurityCallbackImpl(boolean canEditStructure, boolean canEditReflexion, boolean canEditTags, boolean canShare, boolean canAddArtefact, boolean canRemoveArtefactFromStruct, boolean canAddStructure, boolean canAddPage,
-			boolean canView, boolean canCommentAndRate, boolean canSubmitAssess, boolean restrictionsEnabled, boolean isOwner) {
-		this.canEditStructure = canEditStructure;
-		this.canEditReflexion = canEditReflexion;
-		this.canEditTags = canEditTags;
-		this.canShare = canShare;
-		this.canAddArtefact = canAddArtefact;
-		this.canRemoveArtefactFromStruct = canRemoveArtefactFromStruct;
-		this.canAddStructure = canAddStructure;
-		this.canAddPage = canAddPage;
-		this.canView = canView;
-		this.canCommentAndRate = canCommentAndRate;
-		this.canSubmitAssess = canSubmitAssess;
-		this.restrictionsEnabled = restrictionsEnabled;
-		this.isOwner = isOwner;
-	}
-	
-	
-
-	@Override
-	public boolean isOwner() {
-		return isOwner;
-	}
-
-	@Override
-	public boolean isRestrictionsEnabled() {
-		return restrictionsEnabled;
-	}
-
-	@Override
-	public boolean canEditStructure() {
-		return canEditStructure;
-	}
-
-	@Override
-	public boolean canEditReflexion() {
-		return canEditReflexion;
-	}
-	
-	@Override
-	public boolean canEditTags() {
-		return canEditTags;
-	}
-
-	@Override
-	public boolean canShareMap() {
-		return canShare;
-	}
-
-	@Override
-	public boolean canAddArtefact() {
-		return canAddArtefact;
-	}
-
-	@Override
-	public boolean canAddStructure() {
-		return canAddStructure;
-	}
-
-	@Override
-	public boolean canAddPage() {
-		return canAddPage;
-	}
-
-	@Override
-	public boolean canCommentAndRate() {
-		return canCommentAndRate;
-	}
-
-	@Override
-	public boolean canSubmitAssess() {
-		return canSubmitAssess;
-	}
-
-	@Override
-	public boolean canView() {
-		return canView;
-	}
-
-	@Override
-	public boolean canRemoveArtefactFromStruct() {
-		return canRemoveArtefactFromStruct;
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/EPSecurityCallbackOwner.java b/src/main/java/org/olat/portfolio/EPSecurityCallbackOwner.java
deleted file mode 100644
index f9eeb075c2a6bba5b5c488fc2a6ce301b78152c5..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/EPSecurityCallbackOwner.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.portfolio;
-
-/**
- * 
- * Description:<br>
- * Standard implementation where admin and owner has the right to edit
- * 
- * <P>
- * Initial Date:  12 oct. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPSecurityCallbackOwner implements EPSecurityCallback {
-
-	private final boolean admin;
-	private final boolean owner;
-	private final boolean comments;
-	
-	protected EPSecurityCallbackOwner(boolean admin, boolean owner, boolean comments) {
-		this.admin = admin;
-		this.owner = owner;
-		this.comments = comments;
-	}
-	
-	private final boolean canEdit() {
-		return admin || owner;
-	}
-	
-	@Override
-	public boolean isOwner() {
-		return owner;
-	}
-
-	@Override
-	public boolean isRestrictionsEnabled() {
-		return false;
-	}
-
-	@Override
-	public boolean canEditStructure() {
-		return canEdit();
-	}
-	
-	@Override
-	public boolean canEditReflexion() {
-		return owner;
-	}
-
-	@Override
-	public boolean canEditTags() {
-		return owner;
-	}
-
-	@Override
-	public boolean canShareMap() {
-		return canEdit();
-	}
-
-	@Override
-	public boolean canAddArtefact() {
-		return canEdit();
-	}
-
-
-	@Override
-	public boolean canAddStructure() {
-		return canEdit();
-	}
-
-
-	@Override
-	public boolean canAddPage() {
-		return canEdit();
-	}
-
-	@Override
-	public boolean canCommentAndRate() {
-		return comments;
-	}
-	
-	@Override
-	public boolean canSubmitAssess() {
-		return false;
-	}
-
-	@Override
-	public boolean canView() {
-		return admin || owner;
-	}
-
-	@Override
-	public boolean canRemoveArtefactFromStruct() {
-		return admin || owner;
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/EPTemplateMapResource.java b/src/main/java/org/olat/portfolio/EPTemplateMapResource.java
deleted file mode 100644
index 26d3465b1cb98c61268b2e4b15900484eab1b5c2..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/EPTemplateMapResource.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio;
-
-import java.io.File;
-
-import org.olat.fileresource.types.FileResource;
-
-/**
- * 
- * Description:<br>
- * Olat cannot import something else than files
- * <P>
- * Initial Date:  12 oct. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPTemplateMapResource extends FileResource  {
-	
-	public static final String TYPE_NAME = "EPStructuredMapTemplate";
-
-	/**
-	 * @param f
-	 * @return True if is of type.
-	 */
-	public static boolean validate(File f) {
-		if(f.isDirectory()) {
-			//unzip directory
-			return new File(f, "map.xml").exists();
-		}
-		return f.getName().toLowerCase().endsWith("map.xml"); 
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/EPUIFactory.java b/src/main/java/org/olat/portfolio/EPUIFactory.java
deleted file mode 100755
index 10f6338daa05b808b703e3df45b25770ad1fefb1..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/EPUIFactory.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio;
-
-import java.util.List;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
-import org.olat.core.id.OLATResourceable;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.ui.PortfolioAdminController;
-import org.olat.portfolio.ui.artefacts.collect.ArtefactWizzardStepsController;
-import org.olat.portfolio.ui.artefacts.view.EPArtefactViewController;
-import org.olat.portfolio.ui.artefacts.view.EPMultiArtefactsController;
-import org.olat.portfolio.ui.artefacts.view.EPMultipleArtefactSmallReadOnlyPreviewController;
-import org.olat.portfolio.ui.artefacts.view.EPMultipleArtefactsAsTableController;
-import org.olat.portfolio.ui.structel.EPMapViewController;
-import org.olat.portfolio.ui.structel.edit.EPStructureDetailsController;
-
-/**
- * UIFactory for ePortfolio to get Controllers from outside the ePortfolio-scope
- * 
- * Important: Methods need to be static, so that they can be called by FactoryCreator!
- * 
- * <P>
- * Initial Date: 11.06.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPUIFactory {
-
-	/**
-	 * get a controller for admin-setup of e Portfolio
-	 * used directly over extension-config, therefore needs to be static
-	 * @param ureq
-	 * @param wControl
-	 * @return
-	 */
-	public static Controller createPortfolioAdminController(UserRequest ureq, WindowControl wControl) {
-		return new PortfolioAdminController(ureq, wControl);
-	}
-	
-	public static Controller createPortfolioStructureMapController(UserRequest ureq, WindowControl wControl, PortfolioStructureMap map,
-			EPSecurityCallback secCallback) {
-		return new EPMapViewController(ureq, wControl, map, false, false, secCallback);
-	}
-	
-	public static Controller createPortfolioStructureMapPreviewController(UserRequest ureq, WindowControl wControl, PortfolioStructureMap map,
-			EPSecurityCallback secCallback) {
-		return new EPMapViewController(ureq, wControl, map, false, true, secCallback);
-	}
-	
-	public static EPMapViewController createMapViewController(UserRequest ureq, WindowControl wControl,
-			PortfolioStructureMap map, EPSecurityCallback secCallback) {
-		EPMapViewController mapViewController = 
-			new EPMapViewController(ureq, wControl, map, false, false, secCallback);
-		return mapViewController;
-	}
-	
-	/**
-	 * initiate the artefact-collection wizzard, first get link which then is handled by ctrl itself to open the wizzard
-	 * @param ureq
-	 * @param wControl
-	 * @param ores the resourcable from which an artefact should be created
-	 * @param subPath
-	 * @param businessPath
-	 * @return
-	 */
-	public static Controller createArtefactCollectWizzardController(UserRequest ureq, WindowControl wControl,
-			OLATResourceable ores, String businessPath) {
-		PortfolioModule portfolioModule = (PortfolioModule) CoreSpringFactory.getBean("portfolioModule");
-		EPArtefactHandler<?> handler = portfolioModule.getArtefactHandler(ores.getResourceableTypeName());
-		if (portfolioModule.isEnabled() && handler != null && handler.isEnabled()) {
-			return new ArtefactWizzardStepsController(ureq, wControl, ores, businessPath);
-		}
-		return null;
-	}
-	
-	public static Controller createArtefactCollectWizzardController(UserRequest ureq, WindowControl wControl,
-			int numOfArtefact, OLATResourceable ores, String businessPath) {
-		PortfolioModule portfolioModule = (PortfolioModule) CoreSpringFactory.getBean("portfolioModule");
-		EPArtefactHandler<?> handler = portfolioModule.getArtefactHandler(ores.getResourceableTypeName());
-		if (portfolioModule.isEnabled() && handler != null && handler.isEnabled()) {
-			return new ArtefactWizzardStepsController(ureq, wControl, numOfArtefact, ores, businessPath);
-		}
-		return null;
-	}
-	
-	/**
-	 * opens an artefact in an overlay window with all available details in read-only mode
-	 * @param artefact
-	 * @param ureq
-	 * @param wControl
-	 * @param title of the popup
-	 * @return a controller to listenTo
-	 */
-	public static CloseableModalController getAndActivatePopupArtefactController(AbstractArtefact artefact, UserRequest ureq, WindowControl wControl, String title) {
-		EPArtefactViewController artefactCtlr;
-		artefactCtlr = new EPArtefactViewController(ureq, wControl, artefact, true);
-		CloseableModalController artefactBox = new CloseableModalController(wControl, title, artefactCtlr.getInitialComponent());
-		//artefactBox.setInitialWindowSize(600, 500);
-		artefactBox.activate();
-		return artefactBox;
-	}
-	
-	/**
-	 * get artefacts in a table or as small previews depending on users-view-settings
-	 * @param ureq
-	 * @param wControl
-	 * @param artefacts all artefacts to display
-	 * @param struct PortfolioStructure wherein the artefacts are
-	 * @return EPMultiArtefactsController
-	 */
-	public static EPMultiArtefactsController getConfigDependentArtefactsControllerForStructure(UserRequest ureq, WindowControl wControl, List<AbstractArtefact> artefacts, PortfolioStructure struct, EPSecurityCallback secCallback){
-		String viewMode = struct.getArtefactRepresentationMode();
-		if (artefacts.size() != 0) {
-			EPMultiArtefactsController artefactCtrl;
-			if (EPStructureDetailsController.VIEWMODE_TABLE.equals(viewMode)){
-				artefactCtrl = new EPMultipleArtefactsAsTableController(ureq, wControl, artefacts, struct, false, false, secCallback);
-			} else {
-				artefactCtrl = new EPMultipleArtefactSmallReadOnlyPreviewController(ureq, wControl, artefacts, struct, secCallback);
-			}
-			return artefactCtrl;
-		}
-		return null;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/PortfolioExtension.java b/src/main/java/org/olat/portfolio/PortfolioExtension.java
deleted file mode 100644
index 5336657ec05fe39fdbbe4cb5799a80bb18f3a3e7..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/PortfolioExtension.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio;
-
-import java.util.Locale;
-
-import org.olat.admin.user.tools.UserTool;
-import org.olat.admin.user.tools.UserToolExtension;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.portfolio.manager.EPFrontendManager;
-
-/**
- * 
- * Initial date: 02.07.2014<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public class PortfolioExtension extends UserToolExtension {
-
-	@Override
-	public boolean isEnabled() {
-		PortfolioModule module = CoreSpringFactory.getImpl(PortfolioModule.class);
-		return module.isEnabled() && super.isEnabled();
-	}
-
-	@Override
-	public UserTool createUserTool(UserRequest ureq, WindowControl wControl, Locale locale) {
-		EPFrontendManager epMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-		boolean hasMapOrArtefact = epMgr.hasMapOrArtefact(ureq.getIdentity());
-		if(hasMapOrArtefact) {
-			return super.createUserTool(ureq, wControl, locale);
-		}
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/PortfolioModule.java b/src/main/java/org/olat/portfolio/PortfolioModule.java
deleted file mode 100755
index 125626c4fdb4ea7334f546d3af9d47129ca341ad..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/PortfolioModule.java
+++ /dev/null
@@ -1,300 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.olat.core.commons.modules.bc.FolderConfig;
-import org.olat.core.configuration.AbstractSpringModule;
-import org.olat.core.configuration.ConfigOnOff;
-import org.apache.logging.log4j.Logger;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.FileUtils;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.coordinate.CoordinatorManager;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.core.util.vfs.VFSManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-
-/**
- * 
- * Description:<br>
- * The PortfolioModule contains the configurations for the e-Portfolio feature
- * 
- * <P>
- * Initial Date:  11.06.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-@Service("portfolioModule")
-public class PortfolioModule extends AbstractSpringModule implements ConfigOnOff {
-	
-	private static final Logger log = Tracing.createLoggerFor(PortfolioModule.class);
-	
-
-	@Value("${portfolio.enabled:false}")
-	private boolean enabled;
-	private VFSContainer portfolioRoot;
-	@Value("${portfolio.map.styles}")
-	private String availableMapStylesProperty;
-	private List<String> availableMapStyles = new ArrayList<>();
-	@Value("${portfolio.offer.public.map.list:true}")
-	private boolean offerPublicMapList;
-	@Value("${wizard.step.reflexion:true}")
-	private boolean isReflexionStepEnabled;
-	@Value("${wizard.step.copyright:true}")
-	private boolean isCopyrightStepEnabled;
-	
-	@Autowired
-	private List<EPArtefactHandler<?>> artefactHandlers;
-	
-	@Autowired
-	public PortfolioModule(CoordinatorManager coordinatorManager){
-		super(coordinatorManager);
-	}
-	
-	@Override
-	public void init() {
-		//portfolio enabled/disabled
-		String enabledObj = getStringPropertyValue("portfolio.enabled", true);
-		if(StringHelper.containsNonWhitespace(enabledObj)) {
-			enabled = "true".equals(enabledObj);
-		}
-		
-		for(EPArtefactHandler<?> handler:artefactHandlers) {
-			String enabledHandler = getStringPropertyValue("handler." + handler.getClass().getName(), true);
-			if(StringHelper.containsNonWhitespace(enabledHandler)) {
-				((EPAbstractHandler<?>)handler).setEnabled("true".equals(enabledHandler));
-			}
-		}
-		
-		String styles = getStringPropertyValue("portfolio.map.styles", true);
-		if(StringHelper.containsNonWhitespace(styles)) {
-			availableMapStyles = new ArrayList<>();
-			for(String style:styles.split(",")) {
-				availableMapStyles.add(style);
-			}
-		}
-		
-		String offerPublicSetting = getStringPropertyValue("portfolio.offer.public.map.list", true);
-		if(StringHelper.containsNonWhitespace(offerPublicSetting)) {
-			setOfferPublicMapList("true".equals(offerPublicSetting));
-		}
-		
-		isReflexionStepEnabled = getBooleanPropertyValue("wizard.step.reflexion");
-		isCopyrightStepEnabled = getBooleanPropertyValue("wizard.step.copyright");
-		
-		log.info("ePortfolio is enabled: " + Boolean.toString(enabled));
-	}
-	
-	/**
-	 * removes the portfolio temp directory if it exists
-	 * FXOLAT-386
-	 * 
-	 */
-	private void cleanPortfolioTmpDir(){
-		log.info("beginning to delete ePortfolio temp directory...");
-		Path portfolioTmp = Paths.get(FolderConfig.getCanonicalRoot(), "tmp", "portfolio");
-		if(portfolioTmp.toFile().exists()) {
-			try {
-				FileUtils.deleteDirsAndFiles(portfolioTmp);
-			} catch (IOException e) {
-				log.error("Cannot properly delete portfolio temporary portfolio", e);
-			}
-		}
-	}
-
-	@Override
-	protected void initDefaultProperties() {
-		availableMapStyles = new ArrayList<>();
-		if(StringHelper.containsNonWhitespace(availableMapStylesProperty)) {	
-			for(String style:availableMapStylesProperty.split(",")) {
-				availableMapStyles.add(style);
-			}
-		}
-		cleanPortfolioTmpDir();
-	}
-
-	@Override
-	protected void initFromChangedProperties() {
-		init();
-	}
-
-	@Override
-	public boolean isEnabled() {
-		return enabled;
-	}
-	
-	public void setEnabled(boolean enabled) {
-		if(this.enabled != enabled) {
-			setStringProperty("portfolio.enabled", Boolean.toString(enabled), true);
-			this.enabled = enabled;
-		}
-	}
-	
-	/**
-	 * Return all the configured artefact handlers, enabled or not
-	 * @return
-	 */
-	public List<EPArtefactHandler<?>> getAllAvailableArtefactHandlers() {
-		List<EPArtefactHandler<?>> handlers = new ArrayList<>(artefactHandlers.size());
-		handlers.addAll(artefactHandlers);
-		return handlers;
-	}
-	
-	public void setEnableArtefactHandler(EPArtefactHandler<?> handler, boolean enabled) {
-		setStringProperty("handler." + handler.getClass().getName(), Boolean.toString(enabled), true);
-	}
-
-	/**
-	 * Return the enabled artefact handler
-	 * @return
-	 */
-	public List<EPArtefactHandler<?>> getArtefactHandlers() {
-		List<EPArtefactHandler<?>> handlers = new ArrayList<>(artefactHandlers.size());
-		for(EPArtefactHandler<?> handler:artefactHandlers) {
-			if(handler.isEnabled()) {
-				handlers.add(handler);
-			}
-		}
-		return handlers;
-	}
-	
-	public EPArtefactHandler<?> getArtefactHandler(String type) {
-		for(EPArtefactHandler<?> handler:artefactHandlers) {
-			if(type.equals(handler.getType())) {
-				return handler;
-			}
-		}
-		log.warn("Either tried to get a disabled handler or could not return a handler for artefact-type: " + type);
-		return null;
-	}
-	
-	public EPArtefactHandler<?> getArtefactHandler(AbstractArtefact artefact) {
-		return getArtefactHandler(artefact.getResourceableTypeName());
-	}
-	
-	public void addArtefactHandler(EPArtefactHandler<?> artefacthandler) {
-		artefactHandlers.add(artefacthandler);
-
-		String settingName = "handler." + artefacthandler.getClass().getName();
-		String propEnabled = getStringPropertyValue(settingName, true);
-		if(StringHelper.containsNonWhitespace(propEnabled)) {
-			//system properties settings
-			((EPAbstractHandler<?>)artefacthandler).setEnabled("true".equals(propEnabled));
-		} else {
-			//default settings
-			((EPAbstractHandler<?>)artefacthandler).setEnabled(true);
-		}
-	}
-
-	public boolean removeArtefactHandler(EPArtefactHandler<?> artefacthandler) {
-		boolean removed = false;
-		for(Iterator<EPArtefactHandler<?>> it=artefactHandlers.iterator(); it.hasNext(); ) {
-			if(it.next().getType().equals(artefacthandler.getType())) {
-				it.remove();
-				removed = true;
-			}
-		}
-		return removed;
-	}
-	
-	public VFSContainer getPortfolioRoot() {
-		if(portfolioRoot == null) {
-			portfolioRoot = VFSManager.olatRootContainer(File.separator + "portfolio", null);
-		}
-		return portfolioRoot;
-	}
-
-	/**
-	 * @param availableMapStyles The availableMapStyles to set.
-	 */
-	public void setAvailableMapStylesStr(String availableMapStylesStr) {
-		this.availableMapStyles = new ArrayList<>();
-		if(StringHelper.containsNonWhitespace(availableMapStylesStr)) {	
-			String[] styles = availableMapStylesStr.split(",");
-			for(String style:styles) {
-				availableMapStyles.add(style);
-			}
-		}
-	}
-
-	/**
-	 * @return Returns the availableMapStyles.
-	 */
-	public List<String> getAvailableMapStyles() {
-		return availableMapStyles;
-	}
-	
-	public void setAvailableMapStylesS(List<String> availableMapStyles) {
-		this.availableMapStyles = availableMapStyles;
-	}
-
-	/**
-	 * @param offerPublicMapList The offerPublicMapList to set.
-	 */
-	public void setOfferPublicMapList(boolean offerPublicMapList) {
-		this.offerPublicMapList = offerPublicMapList;
-	}
-
-	/**
-	 * Return setting for public map list.
-	 * Systems with more than 500 public maps, should disable this feature as it gets too slow!
-	 * @return Returns the offerPublicMapList.
-	 */
-	public boolean isOfferPublicMapList() {
-		return offerPublicMapList;
-	}
-
-	/**
-	 * should the artefact collect wizard contain a step to collect a reflexion
-	 * @return
-	 */
-	public boolean isReflexionStepEnabled(){
-		return isReflexionStepEnabled;
-	}
-	
-	/**
-	 * should the artefact collect wizard contain a step to ask user for copyright on content
-	 * @return
-	 */
-	public boolean isCopyrightStepEnabled(){
-		return isCopyrightStepEnabled;
-	}
-	
-	public void setReflexionStepEnabled(boolean isReflexionStepEnabled) {
-		this.isReflexionStepEnabled = isReflexionStepEnabled;
-		setBooleanProperty("wizard.step.reflexion", isReflexionStepEnabled, true);
-	}
-
-	public void setCopyrightStepEnabled(boolean isCopyrightStepEnabled) {
-		this.isCopyrightStepEnabled = isCopyrightStepEnabled;
-		setBooleanProperty("wizard.step.copyright", isCopyrightStepEnabled, true);
-	}
-	
-}
diff --git a/src/main/java/org/olat/portfolio/_spring/portfolioContext.xml b/src/main/java/org/olat/portfolio/_spring/portfolioContext.xml
deleted file mode 100644
index c1fb4a242b52819a61385194cb21626af380358e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/_spring/portfolioContext.xml
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xmlns:context="http://www.springframework.org/schema/context"
-	xsi:schemaLocation="
-  http://www.springframework.org/schema/beans 
-  http://www.springframework.org/schema/beans/spring-beans.xsd
-  http://www.springframework.org/schema/context 
-  http://www.springframework.org/schema/context/spring-context.xsd">
-  
-	<context:component-scan base-package="org.olat.portfolio" />
-
-	<!-- Portfolio admin. panel -->
-	<bean class="org.olat.core.extensions.action.GenericActionExtension" init-method="initExtensionPoints">
-		<property name="order" value="7205" />
-		<property name="actionController">	
-			<bean class="org.olat.core.gui.control.creator.FactoryControllerCreator" scope="prototype">
-				<property name="factoryName" value="org.olat.portfolio.EPUIFactory"/>
-				<property name="factoryMethod" value="createPortfolioAdminController"/>
-			</bean>
-		</property>
-		<property name="navigationKey" value="portfolio" />
-		<property name="i18nActionKey" value="admin.menu.title"/>
-		<property name="i18nDescriptionKey" value="admin.menu.title.alt"/>
-		<property name="translationPackage" value="org.olat.portfolio.ui"/>
-		<property name="parentTreeNodeIdentifier" value="eAssessmentParent" /> 
-		<property name="extensionPoints">
-			<list>	
-				<value>org.olat.admin.SystemAdminMainController</value>		
-			</list>
-		</property>
-	</bean> 
-	
-	<!-- Portfolio Main View/all my artefacts in users Home -->
-	<bean class="org.olat.portfolio.EPArtefactPoolExtension"/>
-	
-	<!-- Portfolio map view in users Home -->
-	<bean class="org.olat.portfolio.EPMapExtension"/>
-	
-	<!-- Portfolio map view for invitee -->
-	<bean class="org.olat.portfolio.EPMapOnInvitationExtension"/>
-
-	
-	<bean name="forumArtefactHandler" class="org.olat.modules.fo.portfolio.ForumArtefactHandler"/>
-	
-	<bean name="wikiArtefactHandler" class="org.olat.modules.wiki.portfolio.WikiArtefactHandler"/>
-	
-	<bean name="efficiencyStatementArtefact" class="org.olat.course.assessment.portfolio.EfficiencyStatementArtefactHandler"/>
-	
-	<bean name="fileArtefactHandler" class="org.olat.portfolio.model.artefacts.FileArtefactHandler"/>
-	
-	<bean name="textArtefactHandler" class="org.olat.portfolio.model.artefacts.EPTextArtefactHandler"/>
-	
-	<!-- 
-	<bean name="structureElementArtefactHandler" class="org.olat.portfolio.model.artefacts.EPStructureElementArtefactHandler"/>
-	-->
-	
-	<bean name="liveBlogArtefactHandler" class="org.olat.modules.webFeed.portfolio.LiveBlogArtefactHandler"/>
-	
-	<bean name="blogArtefactHandler" class="org.olat.modules.webFeed.portfolio.BlogArtefactHandler"/>
-
-	<!-- wrapper for add-link in folder -->
-	<bean name="folderCMDAddToEPortfolio" class="org.olat.core.gui.control.creator.AutoCreator" >
-		<property name="className" value="org.olat.portfolio.ui.artefacts.collect.CmdAddToEPortfolioImpl"/>
-	</bean>
-	
-	<!-- Deadline Job -->
-	<bean id="epDeadlineTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
-		<property name="jobDetail" ref="epDeadlineJob.${cluster.singleton.services}" />
-  	<!-- adjust cron style syntax for your notification needs 
-   	"0 10 0 * *"  e.g. 10 minutes after midnight
-   	
-   	A "Cron-Expression" is a string comprised of 6 or 7 fields separated by white space. The 6 mandatory and 1 optional fields are as follows:
-		Field Name 	  	Allowed Values 	  	Allowed Special Characters
-		Seconds 	  	0-59 	  			, - * /
-		Minutes 	  	0-59 	  			, - * /
-		Hours 	  		0-23 	  			, - * /
-		Day-of-month 	1-31 	  			, - * ? / L W C
-		Month 	  		1-12 or JAN-DEC 	, - * /
-		Day-of-Week 	1-7 or SUN-SAT 	  	, - * ? / L C #
-		Year (Optional)	empty, 1970-2099 	, - * /    	
-   	-->
-		<property name="cronExpression" value="0 5 */8 * * ?" />
-		<property name="startDelay" value="60000" />
-	</bean>
-
-	<bean id="epDeadlineJob.enabled" class="org.springframework.scheduling.quartz.JobDetailFactoryBean" lazy-init="true">
-		<property name="jobClass" value="org.olat.portfolio.manager.EPDeadlineJob" />
-	</bean>
-	
-	<!-- dummy bean -->
-	<bean id="epDeadlineJob.disabled" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"  lazy-init="true">
-		<property name="jobClass" value="org.olat.core.commons.services.scheduler.DummyJob" />
-	</bean>
-	
-	<bean id="invitationCleanupTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
-		<property name="jobDetail" ref="invitationCleanupJob.${cluster.singleton.services}" />
-		 <!-- adjust cron style syntax for your notification needs 
-		  	"0 10 0 * *"  e.g. 10 minutes after midnight
-		  	
-		  	A "Cron-Expression" is a string comprised of 6 or 7 fields separated by white space. The 6 mandatory and 1 optional fields are as follows:
-			Field Name 	  	Allowed Values 	  	Allowed Special Characters
-			Seconds 	  	0-59 	  			, - * /
-			Minutes 	  	0-59 	  			, - * /
-			Hours 	  		0-23 	  			, - * /
-			Day-of-month 	1-31 	  			, - * ? / L W C
-			Month 	  		1-12 or JAN-DEC 	, - * /
-			Day-of-Week 	1-7 or SUN-SAT 	  	, - * ? / L C #
-			Year (Optional)	empty, 1970-2099 	, - * /
-		
-			As of OLAT 6.3 it's best to let the cronjob run every two hours since users can now choose how often 
-			they will get notified. The shortest interval is set to two hours. 	    	
-		-->
-		<property name="cronExpression" value="0 2 */12 * * ?" />
-		<property name="startDelay" value="150000" />
-	</bean>
-
-	<bean id="invitationCleanupJob.enabled" class="org.springframework.scheduling.quartz.JobDetailFactoryBean" lazy-init="true">
-		<property name="jobClass" value="org.olat.portfolio.manager.InvitationCleanupJob" />
-	</bean>
-	<!-- dummy bean -->
-	<bean id="invitationCleanupJob.disabled" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"  lazy-init="true">
-		<property name="jobClass" value="org.olat.core.commons.services.scheduler.DummyJob" />
-	</bean>
-	
-	<!--  hook to the personal menu -->
-	<bean class="org.olat.portfolio.PortfolioExtension" name="personal.tool.ep" init-method="initExtensionPoints" >
-		<property name="order" value="301" />
-		<property name="navigationKey" value="Portfolio" />
-		<property name="enabled" value="${minimalhome.ext.portfolio}"></property>
-		<property name="iconCssClass" value="o_icon o_icon-fw o_ep_icon_v1" />
-		<property name="actionController">
-			<bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype">
-				<property name="className" value="org.olat.portfolio.ui.EPOverviewController"/>
-			</bean>
-		</property>
-		<property name="securityCallbackClassName" value="org.olat.core.extensions.security.UserOnlyExtensionSecurityCallback" />
-		<property name="translationPackage" value="org.olat.portfolio.ui" />
-		<property name="i18nActionKey" value="eportfolio.menu.title" />
-		<property name="i18nDescriptionKey" value="eportfolio.menu.title.alt" />
-		<property name="extensionPoints">
-			<list>
-				<value>org.olat.home.HomeMainController</value>
-			</list>
-		</property>
-	</bean>
-</beans>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/manager/EPArtefactManager.java b/src/main/java/org/olat/portfolio/manager/EPArtefactManager.java
deleted file mode 100755
index 2d723ae03436c2ffd8bdb5ac1e57a8c644e921b0..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/manager/EPArtefactManager.java
+++ /dev/null
@@ -1,560 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.manager;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-
-import javax.persistence.TypedQuery;
-
-import org.apache.logging.log4j.Logger;
-import org.olat.basesecurity.IdentityRef;
-import org.olat.core.commons.persistence.DB;
-import org.olat.core.commons.services.tagging.manager.TaggingManager;
-import org.olat.core.commons.services.tagging.model.Tag;
-import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.logging.AssertException;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.FileUtils;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.core.util.vfs.VFSItem;
-import org.olat.core.util.vfs.VFSLeaf;
-import org.olat.core.util.vfs.VFSManager;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.model.EPFilterSettings;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.EPStructureToArtefactLink;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * 
- * Description:<br>
- * EPArtefactManager manage the artefacts
- * 
- * <P>
- * Initial Date: 11.06.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-@Service("epArtefactManager")
-public class EPArtefactManager {
-
-	private static final Logger log = Tracing.createLoggerFor(EPArtefactManager.class);
-
-	private static final String ARTEFACT_FULLTEXT_ON_FS = "ARTEFACT_FULLTEXT_ON_FS";
-
-	@Autowired
-	private DB dbInstance;
-	@Autowired
-	private PortfolioModule portfolioModule;
-	@Autowired
-	private TaggingManager taggingManager;
-
-
-	private static final int ARTEFACT_FULLTEXT_DB_FIELD_LENGTH = 16384;
-	public static final String ARTEFACT_CONTENT_FILENAME = "artefactContent.html";
-	private static final String ARTEFACT_INTERNALDATA_FOLDER = "data";
-	
-	private VFSContainer artefactsRoot;
-
-	public EPArtefactManager() {
-		//
-	}
-	
-	/**
-	 * Used by the indexer to retrieve all the artefacts
-	 * @param artefactIds List of ids to seek (optional)
-	 * @param firstResult First position
-	 * @param maxResults Max number of returned artefacts (0 or below for all)
-	 * @return
-	 */
-	protected List<AbstractArtefact> getArtefacts(Identity author, List<Long> artefactIds, int firstResult, int maxResults) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select artefact from ").append(AbstractArtefact.class.getName()).append(" artefact");
-		boolean where = false;
-		if(author != null) {
-			where = true;
-			sb.append(" where artefact.author=:author");
-		}
-		if(artefactIds != null && !artefactIds.isEmpty()) {
-			if(where) sb.append(" and ");
-			else sb.append(" where ");
-			sb.append(" artefact.id in (:artefactIds)");
-		}
-		TypedQuery<AbstractArtefact> query = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), AbstractArtefact.class);
-		if(maxResults > 0) {
-			query.setMaxResults(maxResults);
-		}
-		if(firstResult >= 0) {
-			query.setFirstResult(firstResult);
-		}
-		if(author != null) {
-			query.setParameter("author", author);
-		}
-		if(artefactIds != null && !artefactIds.isEmpty()) {
-			query.setParameter("artefactIds", artefactIds);
-		}
-		
-		return query.getResultList();
-	}
-	
-	protected boolean isArtefactClosed(AbstractArtefact artefact) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select count(link) from ").append(EPStructureToArtefactLink.class.getName()).append(" link ")
-			.append(" inner join link.structureElement structure ")
-			.append(" inner join structure.root rootStructure")
-			.append(" where link.artefact=:artefact and rootStructure.status='closed'");
-
-		Number count = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), Number.class)
-				.setParameter("artefact", artefact)
-				.getSingleResult();
-		return count.intValue() > 0;
-	}
-	
-	protected boolean hasArtefactPool(IdentityRef ident) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select artefact.key from ").append(AbstractArtefact.class.getName()).append(" artefact").append(" where author.key=:authorKey");
-		List<Long> firstKey = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), Long.class)
-				.setParameter("authorKey", ident.getKey())
-				.setFirstResult(0)
-				.setMaxResults(1)
-				.getResultList();
-		return firstKey != null && firstKey.size() > 0 && firstKey.get(0) != null && firstKey.get(0).longValue() >= 0;
-	}
-
-	protected List<AbstractArtefact> getArtefactPoolForUser(Identity ident) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select artefact from ").append(AbstractArtefact.class.getName()).append(" artefact").append(" where author=:author");
-		List<AbstractArtefact> artefacts = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), AbstractArtefact.class)
-				.setParameter("author", ident)
-				.getResultList();
-
-		if (artefacts.isEmpty()) return null;
-		return artefacts;
-	}
-
-	protected VFSContainer getArtefactsRoot() {
-		if (artefactsRoot == null) {
-			VFSContainer root = portfolioModule.getPortfolioRoot();
-			VFSItem artefactsItem = root.resolve("artefacts");
-			if (artefactsItem == null) {
-				artefactsRoot = root.createChildContainer("artefacts");
-			} else if (artefactsItem instanceof VFSContainer) {
-				artefactsRoot = (VFSContainer) artefactsItem;
-			} else {
-				log.error("The root folder for artefact is a file and not a folder");
-			}
-		}
-		return artefactsRoot;
-	}
-	
-	protected VFSContainer getArtefactsTempContainer(Identity ident){
-		VFSContainer artRoot = VFSManager.olatRootContainer(File.separator + "tmp", null);
-		VFSItem tmpI = artRoot.resolve("portfolio");
-		if (tmpI == null) {
-			tmpI = artRoot.createChildContainer("portfolio");
-		}	
-		VFSItem userTmp = tmpI.resolve(ident.getName());
-		if (userTmp == null){
-			userTmp = ((VFSContainer) tmpI).createChildContainer(ident.getName());
-		}
-		String idFolder = UUID.randomUUID().toString();
-		return ((VFSContainer) userTmp).createChildContainer(idFolder);
-	}
-
-	protected List<String> getArtefactTags(AbstractArtefact artefact) {
-		// wrap concrete artefact as abstract-artefact to get the correct resName for the tag
-		if (artefact.getKey() == null ) return null;
-		OLATResourceable artefactOres = OresHelper.createOLATResourceableInstance(AbstractArtefact.class, artefact.getKey());
-		return taggingManager.getTagsAsString(null, artefactOres, null, null);
-	}
-
-	protected void setArtefactTag(Identity identity, AbstractArtefact artefact, String tag) {
-		// wrap concrete artefact as abstract-artefact to get the correct resName for the tag
-		OLATResourceable artefactOres = OresHelper.createOLATResourceableInstance(AbstractArtefact.class, artefact.getKey());
-		taggingManager.createAndPersistTag(identity, tag, artefactOres, null, null);
-	}
-
-	protected void setArtefactTags(Identity identity, AbstractArtefact artefact, List<String> tags) {
-		if (tags==null) return;
-		// wrap concrete artefact as abstract-artefact to get the correct resName for the tag
-		OLATResourceable artefactOres = OresHelper.createOLATResourceableInstance(AbstractArtefact.class, artefact.getKey());
-		List<Tag> oldTags = taggingManager.loadTagsForResource(artefactOres, null, null);
-		List<String> oldTagStrings = new ArrayList<>();
-		List<String> tagsToAdd = new ArrayList<>(tags.size());
-		tagsToAdd.addAll(tags);
-		if (oldTags != null) { // there might be no tags yet
-			for (Tag oTag : oldTags) {
-				if (tags.contains(oTag.getTag())){
-					// still existing, nothing to do
-					oldTagStrings.add(oTag.getTag());
-					tagsToAdd.remove(oTag.getTag());
-				} else {
-					// tag was deleted, remove it
-					taggingManager.deleteTag(oTag);
-				}
-			}
-		}
-		// look for all given tags, add the ones yet missing
-		for (String tag : tagsToAdd) {
-			if (StringHelper.containsNonWhitespace(tag)) {
-				taggingManager.createAndPersistTag(identity, tag, artefactOres, null, null);
-			}
-		}
-	}
-
-	/**
-	 * Create and persist an artefact of the given type
-	 * 
-	 * @param type
-	 * @return The persisted artefact
-	 */
-	protected AbstractArtefact createAndPersistArtefact(Identity identity, String type) {
-		EPArtefactHandler<?> handler = portfolioModule.getArtefactHandler(type);
-		if(handler != null && handler.isEnabled()){
-			AbstractArtefact artefact = handler.createArtefact();
-			artefact.setAuthor(identity);
-			
-			dbInstance.saveObject(artefact);
-			saveArtefactFulltextContent(artefact);
-			return artefact;
-		} else {
-			return null;
-		}
-	}
-
-	protected AbstractArtefact updateArtefact(AbstractArtefact artefact) {
-		if (artefact == null) return null;
-		
-		String tmpFulltext = artefact.getFulltextContent();
-		if (StringHelper.containsNonWhitespace(tmpFulltext) && artefact.getFulltextContent().equals(ARTEFACT_FULLTEXT_ON_FS)){
-			tmpFulltext = getArtefactFullTextContent(artefact);
-		}
-		artefact.setFulltextContent("");
-		if (artefact.getKey() == null) {
-			dbInstance.saveObject(artefact);
-		} else {
-			dbInstance.updateObject(artefact);
-		}
-		artefact.setFulltextContent(tmpFulltext);
-		saveArtefactFulltextContent(artefact);
-		
-		return artefact;
-	}
-
-	// decides itself if fulltext fits into db or will be written on fs
-	protected boolean saveArtefactFulltextContent(AbstractArtefact artefact){
-		String fullText = artefact.getFulltextContent();
-		if (StringHelper.containsNonWhitespace(fullText)) {
-			if (fullText.length() > ARTEFACT_FULLTEXT_DB_FIELD_LENGTH){
-				// save the real content on FS
-				try {
-					VFSContainer container = getArtefactContainer(artefact);
-					VFSLeaf artData = (VFSLeaf) container.resolve(ARTEFACT_CONTENT_FILENAME);
-					if (artData == null) {
-						artData = container.createChildLeaf(ARTEFACT_CONTENT_FILENAME);
-					} 
-					VFSManager.copyContent(new ByteArrayInputStream(fullText.getBytes()), artData);
-					artefact.setFulltextContent(ARTEFACT_FULLTEXT_ON_FS);
-					dbInstance.updateObject(artefact);
-				} catch (Exception e) {
-					log.error("could not really save the fulltext content of an artefact", e);
-					return false;
-				}
-			}	else {
-				// if length is shorter, but still a file there -> delete it (but only if loading included the long version from fs before, else its overwritten!)
-				VFSLeaf artData = (VFSLeaf) getArtefactContainer(artefact).resolve(ARTEFACT_INTERNALDATA_FOLDER + "/" + ARTEFACT_CONTENT_FILENAME); // v.1 had /data/ in path
-				if (artData!=null) artData.delete();
-				artData = (VFSLeaf) getArtefactContainer(artefact).resolve(ARTEFACT_CONTENT_FILENAME);
-				if (artData!=null) artData.delete();
-				dbInstance.updateObject(artefact); // persist fulltext in db
-			}
-		}
-		return true;
-	}
-	
-	protected String getArtefactFullTextContent(AbstractArtefact artefact){
-		VFSLeaf artData = (VFSLeaf) getArtefactContainer(artefact).resolve(ARTEFACT_CONTENT_FILENAME);
-		if (artData== null) artData = (VFSLeaf) getArtefactContainer(artefact).resolve(ARTEFACT_INTERNALDATA_FOLDER + "/" + ARTEFACT_CONTENT_FILENAME); // fallback to v.1
-		if (artData!=null) {
-			return FileUtils.load(artData.getInputStream(), "utf-8");
-		} else return artefact.getFulltextContent();
-	}
-	
-	/**
-	 * This is an optimized method to filter a list of artefact by tags and return
-	 * the tags of this list of artefacts. This prevent to search two times or more the list
-	 * of tags of an artefact.
-	 * @param identity
-	 * @param tags
-	 * @return the filtered artefacts and their tags
-	 */
-	protected EPArtefactTagCloud getArtefactsAndTagCloud(Identity identity, List<String> tags) {
-		List<AbstractArtefact> artefacts = getArtefactPoolForUser(identity);
-		EPFilterSettings filterSettings = new EPFilterSettings();
-		filterSettings.setTagFilter(tags);
-		
-		Set<String> newTags = new HashSet<>();
-		filterArtefactsByTags(artefacts, filterSettings, newTags);
-
-		return new EPArtefactTagCloud(artefacts, newTags);
-	}
-
-	protected List<AbstractArtefact> filterArtefactsByFilterSettings(List<AbstractArtefact> allArtefacts, EPFilterSettings filterSettings) {
-		long start = System.currentTimeMillis();
-		if (allArtefacts == null) return null;
-		List<AbstractArtefact> filteredArtefactList = new ArrayList<>(allArtefacts.size());
-		filteredArtefactList.addAll(allArtefacts);
-		if (filterSettings != null && !filterSettings.isFilterEmpty()) {
-			if (filteredArtefactList.size() != 0) {
-				filterArtefactsByTags(filteredArtefactList, filterSettings, null);
-			}
-			if (filteredArtefactList.size() != 0) {
-				filterArtefactsByType(filteredArtefactList, filterSettings.getTypeFilter());
-			}
-			if (filteredArtefactList.size() != 0) {
-				filterArtefactsByString(filteredArtefactList, filterSettings.getTextFilter());
-			}
-			if (filteredArtefactList.size() != 0) {
-				filterArtefactsByDate(filteredArtefactList, filterSettings.getDateFilter());
-			}
-		}
-		long duration = System.currentTimeMillis() - start;
-		if (log.isDebugEnabled()) log.debug("filtering took " + duration + "ms");
-		return filteredArtefactList;
-	}
-
-	/**
-	 * @param allArtefacts
-	 * @param filterSettings (containing tags to filter for or boolean if filter should keep only artefacts without a tag)
-	 * @param collect the tags found in the filtered artefacts
-	 * @return filtered artefact list
-	 */
-	private void filterArtefactsByTags(List<AbstractArtefact> artefacts, EPFilterSettings filterSettings, Set<String> cloud) {
-		List<String> tags = filterSettings.getTagFilter();
-		// either search for artefacts with given tags, or such with no one!
-		List<AbstractArtefact> toRemove = new ArrayList<>();
-		if (tags != null && tags.size() != 0) {
-			for (AbstractArtefact artefact : artefacts) {
-				List<String> artefactTags = getArtefactTags(artefact);
-				if (!artefactTags.containsAll(tags)) {
-					toRemove.add(artefact);
-				} else if(cloud != null) {
-					cloud.addAll(artefactTags);
-				}
-			}
-			artefacts.removeAll(toRemove);
-		} else if (filterSettings.isNoTagFilterSet()) {
-			for (AbstractArtefact artefact : artefacts) {
-				if (!getArtefactTags(artefact).isEmpty()) {
-					toRemove.add(artefact);
-				}
-			}
-			artefacts.removeAll(toRemove);
-		}
-	}
-
-	private void filterArtefactsByType(List<AbstractArtefact> artefacts, List<String> type) {
-		if (type != null && type.size() != 0) {
-			List<AbstractArtefact> toRemove = new ArrayList<>();
-			for (AbstractArtefact artefact : artefacts) {
-				if (!type.contains(artefact.getResourceableTypeName())) {
-					toRemove.add(artefact);
-				}
-			}
-			artefacts.removeAll(toRemove);
-		}
-	}
-
-	/**
-	 * date comparison will first set startDate to 00:00:00 and set endDate to
-	 * 23:59:59 else there might be no results if start = end date. dateList must
-	 * be set according to: dateList(0) = startDate dateList(1) = endDate
-	 */
-	private void filterArtefactsByDate(List<AbstractArtefact> artefacts, List<Date> dateList) {
-		if (dateList != null && dateList.size() != 0) {
-			if (dateList.size() == 2) {
-				Date startDate = dateList.get(0);
-				Date endDate = dateList.get(1);
-				Calendar cal = Calendar.getInstance();
-				if (startDate == null) {
-					cal.set(1970, 1, 1);
-				} else {
-					cal.setTime(startDate);
-				}
-				cal.set(Calendar.HOUR_OF_DAY, 0);
-				cal.set(Calendar.MINUTE, 0);
-				cal.set(Calendar.SECOND, 0);
-				startDate = cal.getTime();
-				cal.setTime(endDate);
-				cal.set(Calendar.HOUR_OF_DAY, 23);
-				cal.set(Calendar.MINUTE, 59);
-				cal.set(Calendar.SECOND, 59);
-				endDate = cal.getTime();
-				List<AbstractArtefact> toRemove = new ArrayList<>();
-				for (AbstractArtefact artefact : artefacts) {
-					Date creationDate = artefact.getCreationDate();
-					if (!(creationDate.before(endDate) && creationDate.after(startDate))) {
-						toRemove.add(artefact);
-					}
-				}
-				artefacts.removeAll(toRemove);
-			} else throw new AssertException("provided DateList must contain exactly two Date-objects");
-		}
-	}
-
-	private void filterArtefactsByString(List<AbstractArtefact> artefacts, String textFilter) {
-		if (StringHelper.containsNonWhitespace(textFilter)) {
-			List<AbstractArtefact> toRemove = new ArrayList<>();
-			for (AbstractArtefact artefact : artefacts) {
-				String textCompare = artefact.getTitle() + artefact.getDescription() + artefact.getFulltextContent();
-				if (!textCompare.toLowerCase().contains(textFilter.toLowerCase())) {
-					toRemove.add(artefact);
-				}
-			}
-			artefacts.removeAll(toRemove);
-		}
-	}
-
-	/**
-	 * Load the artefact by its primary key
-	 * 
-	 * @param key The primary key
-	 * @return The artefact or null if nothing found
-	 */
-	protected AbstractArtefact loadArtefactByKey(Long key) {
-		if (key == null) throw new NullPointerException();
-
-		StringBuilder sb = new StringBuilder();
-		sb.append("select artefact from ").append(AbstractArtefact.class.getName()).append(" artefact").append(" where artefact.key=:key");
-
-		List<AbstractArtefact> artefacts = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), AbstractArtefact.class)
-				.setParameter("key", key)
-				.getResultList();
-		// if not found, it is an empty list
-		if (artefacts.isEmpty()) return null;
-		return artefacts.get(0);
-	}
-	
-	protected List<AbstractArtefact> loadArtefactsByBusinessPath(String businessPath, Identity author){
-		if (!StringHelper.containsNonWhitespace(businessPath)) return null;
-		StringBuilder sb = new StringBuilder();
-		sb.append("select artefact from ").append(AbstractArtefact.class.getName()).append(" artefact")
-		.append(" where artefact.businessPath=:bpath");
-		
-		if (author != null) {
-			 sb.append(" and artefact.author=:ident");
-		}
-
-		TypedQuery<AbstractArtefact> query = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), AbstractArtefact.class)
-				.setParameter("bpath", businessPath);
-		if (author != null) {
-			query.setParameter("ident", author);
-		}
-
-		List<AbstractArtefact> artefacts = query.getResultList();
-		// if not found, it is an empty list
-		if (artefacts.isEmpty()) return null;
-		return artefacts;		
-	}
-	
-	public int countArtefacts(Identity identity) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select count(artefact) from ").append(AbstractArtefact.class.getName()).append(" artefact")
-			.append(" where artefact.author=:ident");
-
-		Number count = dbInstance.getCurrentEntityManager()
-			.createQuery(sb.toString(), Number.class)
-			.setParameter("ident", identity)
-			.getSingleResult();
-		return count == null ? 0: count.intValue();
-	}
-	
-	protected Map<String,Long> loadNumOfArtefactsByStartingBusinessPath(String startOfBusinessPath, IdentityRef author) {
-		if (!StringHelper.containsNonWhitespace(startOfBusinessPath) || author == null) {
-			return Collections.emptyMap();
-		}
-		
-		StringBuilder sb = new StringBuilder();
-		sb.append("select artefact.businessPath, count(artefact.key) from ").append(AbstractArtefact.class.getName()).append(" artefact")
-		  .append(" where artefact.businessPath like :bpath and artefact.author.key=:identityKey")
-		  .append(" group by artefact.businessPath");
-
-		List<Object[]> objectsList = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), Object[].class)
-				.setParameter("bpath", startOfBusinessPath + "%")
-				.setParameter("identityKey", author.getKey())
-				.getResultList();
-		Map<String,Long> stats = new HashMap<>();
-		for(Object[] objects:objectsList) {
-			String bp = (String)objects[0];
-			Long count = (Long)objects[1];
-			stats.put(bp, count);
-		}
-		return stats;
-	}
-
-	protected void deleteArtefact(AbstractArtefact artefact) {
-		getArtefactContainer(artefact).delete();
-	  // wrap concrete artefact as abstract-artefact to get the correct resName for the tag
-		OLATResourceable artefactOres = OresHelper.createOLATResourceableInstance(AbstractArtefact.class, artefact.getKey());
-		taggingManager.deleteTags(artefactOres, null, null);
-
-		dbInstance.deleteObject(artefact);
-		log.info("Deleted artefact " + artefact.getTitle() + " with key: " + artefact.getKey());
-	}
-
-	protected VFSContainer getArtefactContainer(AbstractArtefact artefact) {
-		Long key = artefact.getKey();
-		if (key == null) throw new AssertException("artefact not yet persisted -> no key available!");
-		VFSContainer container = null;
-		VFSItem item = getArtefactsRoot().resolve(key.toString());
-		if (item == null) {
-			container = getArtefactsRoot().createChildContainer(key.toString());
-		} else if (item instanceof VFSContainer) {
-			container = (VFSContainer) item;
-		} else {
-			log.error("Cannot create a container for artefact: " + artefact);
-		}
-		return container;
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/manager/EPArtefactTagCloud.java b/src/main/java/org/olat/portfolio/manager/EPArtefactTagCloud.java
deleted file mode 100644
index dbb9d408e977ebdde148e3d321381dee75c7b5f9..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/manager/EPArtefactTagCloud.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.portfolio.manager;
-
-import java.util.List;
-import java.util.Set;
-
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * 
- * Description:<br>
- * This a wrapper with the artefacts found and the cloud of tags.
- * 
- * <P>
- * Initial Date:  8 déc. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPArtefactTagCloud {
-	
-	private final List<AbstractArtefact> artefacts;
-	private final Set<String> tags;
-	
-	public EPArtefactTagCloud(List<AbstractArtefact> artefacts, Set<String> tags) {
-		this.artefacts = artefacts;
-		this.tags = tags;
-	}
-	
-	public List<AbstractArtefact> getArtefacts() {
-		return artefacts;
-	}
-	
-	public Set<String> getTags() {
-		return tags;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/manager/EPDeadlineJob.java b/src/main/java/org/olat/portfolio/manager/EPDeadlineJob.java
deleted file mode 100644
index e291e8fea2b591096f4e9d619e0b290163913b1a..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/manager/EPDeadlineJob.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.portfolio.manager;
-
-import org.apache.logging.log4j.Logger;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.services.scheduler.JobWithDB;
-import org.olat.core.logging.Tracing;
-import org.quartz.DisallowConcurrentExecution;
-import org.quartz.JobExecutionContext;
-
-/**
- * 
- * Description:<br>
- * Check if the deadline of map and if it's case, close them.
- * 
- * <P>
- * Initial Date:  12 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-@DisallowConcurrentExecution
-public class EPDeadlineJob  extends JobWithDB {
-	
-	private static final Logger log = Tracing.createLoggerFor(EPDeadlineJob.class);
-	
-	@Override
-	public void executeWithDB(JobExecutionContext context) {
-		try {
-			log.info("Starting checking deadline of maps job");
-			EPFrontendManager ePFrontendManager = (EPFrontendManager)CoreSpringFactory.getBean("epFrontendManager");
-			ePFrontendManager.closeMapAfterDeadline();
-		} catch (Exception e) {
-			// ups, something went completely wrong! We log this but continue next time
-			log.error("Error while closing maps", e);
-		}
-		// db closed by JobWithDB class		
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java b/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java
deleted file mode 100755
index ac99bbfeec1d32a2e52404f81a20e927ebc628fc..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java
+++ /dev/null
@@ -1,1320 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.manager;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.logging.log4j.Logger;
-import org.olat.basesecurity.IdentityRef;
-import org.olat.collaboration.CollaborationTools;
-import org.olat.core.commons.persistence.DB;
-import org.olat.core.commons.services.tagging.manager.TaggingManager;
-import org.olat.core.commons.services.tagging.model.Tag;
-import org.olat.core.id.Identity;
-import org.olat.core.id.IdentityEnvironment;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.Roles;
-import org.olat.core.logging.AssertException;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.coordinate.Coordinator;
-import org.olat.core.util.coordinate.SyncerCallback;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.course.CourseFactory;
-import org.olat.course.ICourse;
-import org.olat.course.assessment.AssessmentManager;
-import org.olat.course.assessment.manager.AssessmentNotificationsHandler;
-import org.olat.course.nodes.CourseNode;
-import org.olat.course.run.userview.UserCourseEnvironment;
-import org.olat.course.run.userview.UserCourseEnvironmentImpl;
-import org.olat.group.BusinessGroup;
-import org.olat.group.DeletableGroupData;
-import org.olat.modules.assessment.Role;
-import org.olat.modules.webFeed.portfolio.LiveBlogArtefactHandler;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.model.EPFilterSettings;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.EPMapShort;
-import org.olat.portfolio.model.structel.EPPage;
-import org.olat.portfolio.model.structel.EPStructureElement;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.olat.portfolio.model.structel.EPTargetResource;
-import org.olat.portfolio.model.structel.ElementType;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.model.structel.PortfolioStructureRef;
-import org.olat.properties.NarrowedPropertyManager;
-import org.olat.properties.Property;
-import org.olat.repository.RepositoryEntry;
-import org.olat.resource.OLATResource;
-import org.olat.search.SearchResults;
-import org.olat.search.model.AbstractOlatDocument;
-import org.olat.search.model.ResultDocument;
-import org.olat.search.service.indexer.identity.PortfolioArtefactIndexer;
-import org.olat.search.service.searcher.SearchClient;
-import org.olat.user.UserDataDeletable;
-import org.olat.user.UserManager;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * 
- * Description:<br>
- * Manager for common used tasks for ePortfolio. Should be used for all calls
- * from controllers. will itself use all other managers to
- * manipulate artefacts or structureElements and policies.
- * 
- * <P>
- * Initial Date: 11.06.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-@Service("epFrontendManager")
-public class EPFrontendManager implements UserDataDeletable, DeletableGroupData {
-	
-	private static final Logger log = Tracing.createLoggerFor(EPFrontendManager.class);
-
-	@Autowired
-	private Coordinator coordinator;
-	@Autowired
-	private EPArtefactManager artefactManager;
-	@Autowired
-	private EPStructureManager structureManager;
-	@Autowired
-	private TaggingManager taggingManager;
-	@Autowired
-	private AssessmentNotificationsHandler assessmentNotificationsHandler;
-	@Autowired
-	private DB dbInstance;
-	@Autowired
-	private SearchClient searchClient;
-	@Autowired
-	private EPSettingsManager settingsManager; 
-	@Autowired
-	private EPPolicyManager policyManager;
-	@Autowired
-	private UserManager userManager;
-	@Autowired
-	private PortfolioModule portfolioModule;
-	
-	/**
-	 * Check if a user has any kind of EP v1 resources: artefacts, a owned map or a shared map
-	 * @param identity
-	 * @return true: yes, has some EP v1 stuff; false: has no EP v1 resources
-	 */
-	public boolean hasMapOrArtefact(Identity identity) {
-		return artefactManager.hasArtefactPool(identity) || structureManager.hasMap(identity) || structureManager.hasStructureElementsFromOthersWithoutPublic(identity);
-	}
-	
-	/**
-	 * Create and persist an artefact of the given type
-	 * 
-	 * @param type
-	 * @return The persisted artefact
-	 */
-	public AbstractArtefact createAndPersistArtefact(Identity identity, String type) {
-		return artefactManager.createAndPersistArtefact(identity, type);
-	}
-
-	/**
-	 * Persists the artefact and returns the new version
-	 * 
-	 * @param artefact
-	 * @return The last version of the artefact
-	 */
-	public AbstractArtefact updateArtefact(AbstractArtefact artefact) {
-		return artefactManager.updateArtefact(artefact);
-	}
-
-	/**
-	 * delete an artefact and also its vfs-artefactContainer
-	 * all used tags will also be deleted.
-	 * @param artefact
-	 */
-	public void deleteArtefact(AbstractArtefact artefact) {
-		List<PortfolioStructure> linksToArtefact = structureManager.getAllReferencesForArtefact(artefact);
-		for (PortfolioStructure portfolioStructure : linksToArtefact) {
-			structureManager.removeArtefactFromStructure(artefact, portfolioStructure);
-		}
-		// load again as session might be closed between
-		artefact = artefactManager.loadArtefactByKey(artefact.getKey());
-		artefactManager.deleteArtefact(artefact);
-	}
-	
-	@Override
-	public void deleteUserData(Identity identity, String newDeletedUserName) {
-		deleteUsersArtefacts(identity);
-
-		List<PortfolioStructure> userPersonalMaps = getStructureElementsForUser(identity, ElementType.DEFAULT_MAP, ElementType.STRUCTURED_MAP);
-		for (PortfolioStructure portfolioStructure : userPersonalMaps) {
-			deletePortfolioStructure(portfolioStructure);
-		}
-	}
-	
-	@Override
-	public boolean deleteGroupDataFor(BusinessGroup group) {
-		final NarrowedPropertyManager npm = NarrowedPropertyManager.getInstance(group);
-		final Property mapKeyProperty = npm.findProperty(null, null, CollaborationTools.PROP_CAT_BG_COLLABTOOLS, CollaborationTools.KEY_PORTFOLIO);
-		if (mapKeyProperty != null) {
-			final Long mapKey = mapKeyProperty.getLongValue();
-			final String version = mapKeyProperty.getStringValue();
-			if(!"2".equals(version)) {
-				final PortfolioStructure map = loadPortfolioStructureByKey(mapKey);
-				if(map != null) {
-					deletePortfolioStructure(map);
-				}
-			}
-			return true;
-		}
-		return false;
-	}
-	
-	/**
-	 * delete all artefacts from this users including used tags for them
-	 * @param ident
-	 */
-	public void deleteUsersArtefacts(Identity ident){
-		List<AbstractArtefact> userArtefacts = artefactManager.getArtefactPoolForUser(ident);
-		if (userArtefacts != null){
-			for (AbstractArtefact abstractArtefact : userArtefacts) {
-				deleteArtefact(abstractArtefact);
-			}
-		}
-	}
-	
-	public boolean isArtefactClosed(AbstractArtefact artefact) {
-		return artefactManager.isArtefactClosed(artefact);
-	}
-
-	public PortfolioStructure removeArtefactFromStructure(AbstractArtefact artefact, PortfolioStructure structure) {
-		return structureManager.removeArtefactFromStructure(artefact, structure);
-	}
-	
-	/**
-	 * Create and persist a link between a structure element and an artefact.
-	 * 
-	 * @param author The author of the link
-	 * @param artefact The artefact to link
-	 * @param structure The structure element
-	 * @return The link
-	 */
-	public boolean addArtefactToStructure(Identity author, AbstractArtefact artefact, PortfolioStructure structure) {
-		return structureManager.addArtefactToStructure(author, artefact, structure);
-	}
-	
-	/**
-	 * move artefact from old to new structure
-	 * do so by removing and re-adding to new target
-	 * @param artefact
-	 * @param oldParStruct
-	 * @param newParStruct
-	 * @return true if adding was successful
-	 */
-	public boolean moveArtefactFromStructToStruct(AbstractArtefact artefact, PortfolioStructure oldParStruct, PortfolioStructure newParStruct) {
-		return structureManager.moveArtefactFromStructToStruct(artefact, oldParStruct, newParStruct);
-	}
-	
-	public boolean moveArtefactInStruct(AbstractArtefact artefact, PortfolioStructure parStruct, int position) {
-		return structureManager.moveArtefactInStruct(artefact, parStruct, position);
-	}
-	
-	
-	/**
-	 * move a structure to a new parent-structure and removes old link
-	 * @param structToBeMvd
-	 * @param oldParStruct
-	 * @param newParStruct
-	 * @return true if no exception occured
-	 */
-	public boolean moveStructureToNewParentStructure(PortfolioStructure structToBeMvd, PortfolioStructure oldParStruct, PortfolioStructure newParStruct, int destinationPos){
-		return structureManager.moveStructureToNewParentStructure(structToBeMvd, oldParStruct, newParStruct, destinationPos);
-	}
-	
-	/**
-	 * move a structures order within the same parent, allows manual sorting.
-	 * @param structToBeMvd
-	 * @param destinationPos where it should be placed
-	 * @return true if it went ok, false otherwise
-	 */
-	public boolean moveStructureToPosition(PortfolioStructure structToBeMvd, int destinationPos){
-		return structureManager.reOrderStructures(loadStructureParent(structToBeMvd), structToBeMvd, destinationPos);
-	}
-	
-	/**
-	 * set the reflexion for the link structureElement <-> artefact
-	 * this can be a different reflexion than the one of the artefact. 
-	 * Reflects why the artefact was added to this structure!
-	 * @param artefact
-	 * @param structure
-	 * @param reflexion
-	 * @return
-	 */
-	public boolean setReflexionForArtefactToStructureLink(AbstractArtefact artefact, PortfolioStructure structure, String reflexion){
-		return structureManager.setReflexionForArtefactToStructureLink(artefact, structure, reflexion);		
-	}
-	
-	/**
-	 * get the reflexion set on the link structureElement <-> artefact
-	 * this can be a different reflexion than the one of the artefact. 
-	 * Reflects why the artefact was added to this structure!
-	 * @param artefact
-	 * @param structure
-	 * @return String reflexion 
-	 */
-	public String getReflexionForArtefactToStructureLink(AbstractArtefact artefact, PortfolioStructure structure){
-		return structureManager.getReflexionForArtefactToStructureLink(artefact, structure);
-	}
-	
-	/**
-	 * counts amount of artefact in all structures and every child element
-	 * @param structure
-	 * @return
-	 */
-	public int countArtefactsRecursively(PortfolioStructure structure) {
-		return structureManager.countArtefactsRecursively(structure, 0);
-	}
-	
-	public int countArtefactsInMap(PortfolioStructureMap map) {
-		return structureManager.countArtefactsRecursively(map);
-	}
-	
-	/**
-	 * looks if the given artefact exists in the PortfolioStructure
-	 * @param artefact
-	 * @param structure
-	 * @return
-	 */
-	public boolean isArtefactInStructure(AbstractArtefact artefact, PortfolioStructure structure){
-		return structureManager.isArtefactInStructure(artefact, structure);
-	}
-
-	/**
-	 * load all artefacts with given businesspath.
-	 * setting an Identity to restrict to is optional.
-	 * this mostly is just to lookup for existence of already collected artefacts from same source
-	 * @param businessPath
-	 * @param author (optional)
-	 * @return
-	 */
-	public List<AbstractArtefact> loadArtefactsByBusinessPath(String businessPath, Identity author){
-		return artefactManager.loadArtefactsByBusinessPath(businessPath, author);		
-	}
-	
-	public Map<String,Long> getNumOfArtefactsByStartingBusinessPath(String businessPath, IdentityRef author){
-		return artefactManager.loadNumOfArtefactsByStartingBusinessPath(businessPath, author);		
-	}
-	
-	/**
-	 * List artefacts for indexing
-	 * @param author (optional)
-	 * @param firstResult (optional)
-	 * @param maxResults (optional)
-	 * @return
-	 */
-	public List<AbstractArtefact> getArtefacts(Identity author, int firstResult, int maxResults) {
-		return artefactManager.getArtefacts(author, null, firstResult, maxResults);
-	}
-	
-	/**
-	 * Load the artefact by its primary key
-	 * 
-	 * @param key The primary key
-	 * @return The artefact or null if nothing found
-	 */
-	public AbstractArtefact loadArtefactByKey(Long key) {
-		return artefactManager.loadArtefactByKey(key);		
-	}
-	
-	/**
-	 * get the users choice of attributes or a default
-	 * 
-	 * @return
-	 */
-	public Map<String, Boolean> getArtefactAttributeConfig(Identity ident) {
-		return settingsManager.getArtefactAttributeConfig(ident);
-	}
-
-	/**
-	 * persist the users chosen attributes to show as a property
-	 * 
-	 * @param ident
-	 * @param artAttribConfig
-	 */
-	public void setArtefactAttributeConfig(Identity ident, Map<String, Boolean> artAttribConfig) {
-		settingsManager.setArtefactAttributeConfig(ident, artAttribConfig);
-	}
-
-	/**
-	 * get all persisted filters from a given user
-	 * @param ident
-	 * @return filtersettings or list with an empty filter, if none were found
-	 */
-	public List<EPFilterSettings> getSavedFilterSettings(Identity ident){
-		return settingsManager.getSavedFilterSettings(ident);
-	}
-	
-	/**
-	 * persist users filter settings as property, only save such with a name
-	 * @param ident
-	 * @param filterList
-	 */
-	public void setSavedFilterSettings(Identity ident, List<EPFilterSettings> filterList){
-		settingsManager.setSavedFilterSettings(ident, filterList);
-	}
-	
-	/**
-	 * remove a given filter from users list
-	 * @param ident
-	 * @param filterName 
-	 */
-	public void deleteFilterFromUsersList(Identity ident, String filterID){
-		settingsManager.deleteFilterFromUsersList(ident, filterID);
-	}
-	
-	/**
-	 * get the last selected PortfolioStructure of this user
-	 * @param ident Identity
-	 * @return the loaded PortfolioStructure
-	 */
-	public PortfolioStructure getUsersLastUsedPortfolioStructure (Identity ident){
-		Long structKey = settingsManager.getUsersLastUsedPortfolioStructureKey(ident);
-		if (structKey != null) {
-			PortfolioStructure struct = structureManager.loadPortfolioStructureByKey(structKey);
-			return struct;
-		}
-		return null;
-	}
-	
-	/**
-	 * get the users prefered viewing mode for artefacts (either table / preview)
-	 * @param ident
-	 * @return
-	 */
-	public String getUsersPreferedArtefactViewMode(Identity ident, String context){
-		return settingsManager.getUsersPreferedArtefactViewMode(ident, context);
-	}
-	
-	/**
-	 * persist the users prefered viewing mode for artefacts (either table / preview)
-	 * @param ident
-	 * @param preferedMode
-	 */
-	public void setUsersPreferedArtefactViewMode(Identity ident, String preferedMode, String context){
-		settingsManager.setUsersPreferedArtefactViewMode(ident, preferedMode, context);
-	}
-	
-	/**
-	 * persist the last uses PortfolioStructure to use it later on
-	 * @param ident Identity
-	 * @param struct
-	 */
-	public void setUsersLastUsedPortfolioStructure(Identity ident, PortfolioStructure struct){
-		settingsManager.setUsersLastUsedPortfolioStructure(ident, struct);
-	}
-	
-	/**
-	 * returns an array of tags for given artefact
-	 * 
-	 * @param artefact
-	 * @return null if none are found
-	 */
-	public List<String> getArtefactTags(AbstractArtefact artefact) {
-		return artefactManager.getArtefactTags(artefact);
-	}
-
-	/**
-	 * add a tag to an artefact (will save a tag pointing to this artefact)
-	 * 
-	 * @param identity
-	 * @param artefact
-	 * @param tag
-	 */
-	public void setArtefactTag(Identity identity, AbstractArtefact artefact, String tag) {
-		artefactManager.setArtefactTag(identity, artefact, tag);
-	}
-
-	/**
-	 * add a List of tags to an artefact
-	 * 
-	 * @param identity
-	 * @param artefact
-	 * @param tags
-	 */
-	public void setArtefactTags(Identity identity, AbstractArtefact artefact, List<String> tags) {
-		artefactManager.setArtefactTags(identity, artefact, tags);
-	}
-
-	/**
-	 * get all maps wherein (or in sub-structures) the given artefact is linked.
-	 * 
-	 * @param artefact
-	 * @return
-	 */
-	public List<PortfolioStructure> getReferencedMapsForArtefact(AbstractArtefact artefact) {
-		return structureManager.getReferencedMapsForArtefact(artefact);
-	}
-
-	/**
-	 * get all artefacts for the given identity this represents the artefact pool
-	 * 
-	 * @param ident
-	 * @return
-	 */
-	public List<AbstractArtefact> getArtefactPoolForUser(Identity ident) {
-		return artefactManager.getArtefactPoolForUser(ident);
-	}
-	
-	public EPArtefactTagCloud getArtefactsAndTagCloud(Identity identity, List<String> tags) {
-		return artefactManager.getArtefactsAndTagCloud(identity, tags);
-	}
-
-	/**
-	 * filter the provided list of artefacts with different filters
-	 * 
-	 * @param allArtefacts the list to manipulate on
-	 * @param filterSettings Settings for the filter to work on
-	 * @return
-	 */
-	public List<AbstractArtefact> filterArtefactsByFilterSettings(EPFilterSettings filterSettings, Identity identity, Roles roles, Locale locale) {
-		List<Long> artefactKeys = fulltextSearchAfterArtefacts(filterSettings, identity, roles, locale);
-		if(artefactKeys == null || artefactKeys.isEmpty()) {
-			List<AbstractArtefact> allArtefacts = artefactManager.getArtefactPoolForUser(identity);
-			return artefactManager.filterArtefactsByFilterSettings(allArtefacts, filterSettings);
-		}
-		
-		List<AbstractArtefact> artefacts = artefactManager.getArtefacts(identity, artefactKeys, 0, 500);
-		// remove the text-filter when the lucene-search got some results before
-		EPFilterSettings settings = filterSettings.cloneAfterFullText();
-		return artefactManager.filterArtefactsByFilterSettings(artefacts, settings);
-	}
-	
-	private List<Long> fulltextSearchAfterArtefacts(EPFilterSettings filterSettings, Identity identity, Roles roles, Locale locale) {
-		String query = filterSettings.getTextFilter();
-		if (StringHelper.containsNonWhitespace(query)) {
-			try {
-				List<String> queries = new ArrayList<>();
-				appendAnd(queries, AbstractOlatDocument.RESERVED_TO, ":\"", identity.getKey().toString(), "\"");
-				appendAnd(queries, "(", AbstractOlatDocument.DOCUMENTTYPE_FIELD_NAME, ":(", PortfolioArtefactIndexer.TYPE, "*))");
-				SearchResults searchResults = searchClient.doSearch(query, queries, identity, roles, locale, 0, 1000, false);
-
-				List<Long> keys = new ArrayList<>();
-				if (searchResults != null) {
-					String marker = AbstractArtefact.class.getSimpleName();
-					for (ResultDocument doc : searchResults.getList()) {
-						String businessPath = doc.getResourceUrl();
-						int start = businessPath.indexOf(marker);
-						if (start > 0) {
-							start += marker.length() + 1;
-							int stop = businessPath.indexOf(']', start);
-							if (stop < businessPath.length()) {
-								String keyStr = businessPath.substring(start, stop);
-								try {
-									keys.add(Long.parseLong(keyStr));
-								} catch (Exception e) {
-									log.error("Not a primary key: " + keyStr, e);
-								}
-							}
-						}
-					}
-				}
-				return keys;
-			} catch (Exception e) {
-				log.error("", e);
-				return Collections.emptyList();
-			}
-		} else return Collections.emptyList();
-	}
-
-	private void appendAnd(List<String> queries, String... strings) {
-		StringBuilder query = new StringBuilder();
-		for(String string:strings) {
-			query.append(string);
-		}
-		
-		if(query.length() > 0) {
-			queries.add(query.toString());
-		}
-	}
-
-	/**
-	 * returns defined amount of users mostly used tags, sorted by occurrence of tag
-	 * @param ident
-	 * @param amount nr of tags to return, if 0: the default (5) will be
-	 *          returned, if -1: you will get all
-	 * @return a combined map with tags including occurrence and tag 
-	 * format: "house (7), house" 
-	 */
-	public Map<String, String> getUsersMostUsedTags(Identity ident, Integer amount) {
-		amount = (amount == 0) ? 5 : amount;
-		List<String> outp = new ArrayList<>();
-		
-		Map<String, String> res = new HashMap<>();
-		List<Map<String, Integer>> bla = taggingManager.getUserTagsWithFrequency(ident);
-		for (Map<String, Integer> map : bla) {
-			String caption = map.get("tag") + " (" + map.get("nr") + ")";
-			outp.add(caption);
-			res.put(caption, String.valueOf(map.get("tag")));
-			if (amount == res.size()) break;
-		}
-
-		return res;
-	}
-	
-	/**
-	 * get all tags a user owns, ordered and without duplicates
-	 * @param ident
-	 * @return
-	 */
-	public List<String> getUsersTags(Identity ident) {
-		return taggingManager.getUserTagsAsString(ident);
-	}
-	
-	/**
-	 * get all tags restricted to Artefacts a user owns, ordered and without duplicates
-	 * @param ident
-	 * @return
-	 */
-	public List<String> getUsersTagsOfArtefactType(Identity ident) {
-		return taggingManager.getUserTagsOfTypeAsString(ident, AbstractArtefact.class.getSimpleName());
-	}
-	
-	
-	/**
-	 * lookup resources for a given tags
-	 * @param tagList
-	 * @return
-	 */
-	public Set<OLATResourceable> getResourcesByTags(List<Tag> tagList) {
-		return taggingManager.getResourcesByTags(tagList);
-	}
-
-	/**
-	 * get all tags for a given resource
-	 * @param ores
-	 * @return
-	 */
-	public List<Tag> loadTagsForResource(OLATResourceable ores) {
-		return taggingManager.loadTagsForResource(ores, null, null);
-	}
-	
-	/**
-	 * sync map with its former source (template)
-	*/
-	public boolean synchronizeStructuredMapToUserCopy(PortfolioStructureMap map) {
-		if(map == null) return false;
-		
-		final EPStructuredMap userMap = (EPStructuredMap)map;
-		Boolean synched = coordinator.getSyncer().doInSync(map.getOlatResource(), new SyncerCallback<Boolean>() {
-			@Override
-			public Boolean execute() {
-				if (userMap.getStructuredMapSource() == null) { return Boolean.FALSE; }
-				// need to reload it, I don't know why
-				Long templateKey = userMap.getStructuredMapSource().getKey();
-				userMap.setLastSynchedDate(new Date());
-				PortfolioStructure template = structureManager.loadPortfolioStructureByKey(templateKey);
-				structureManager.syncStructureRecursively(template, userMap, true);
-				return Boolean.TRUE;
-			}
-		});
-
-		return synched.booleanValue();
-	}
-
-	/**
-	 * Assign a structure map to user. In other words, make a copy of the template
-	 * and set the user as an author.
-	 * 
-	 * @param identity
-	 * @param portfolioStructureStructuredMapTemplate
-	 */
-	public PortfolioStructureMap assignStructuredMapToUser(final Identity identity, final PortfolioStructureMap mapTemplate,
-			final RepositoryEntry courseEntry, String targetSubPath, final String targetBusinessPath, final Date deadline) {
-		// doInSync is here to check for nested doInSync exception in first place
-		final OLATResource ores = courseEntry.getOlatResource();
-		final String subPath = targetSubPath;
-
-		PortfolioStructureMap map = coordinator.getSyncer().doInSync(mapTemplate.getOlatResource(), new SyncerCallback<PortfolioStructureMap>() {
-			@Override
-			public PortfolioStructureMap execute() {
-				PortfolioStructureMap template = (PortfolioStructureMap)structureManager.loadPortfolioStructureByKey(mapTemplate.getKey());
-				String title = template.getTitle();
-				String description = template.getDescription();
-				PortfolioStructureMap copy = structureManager
-						.createPortfolioStructuredMap(template, identity, title, description, ores, subPath, targetBusinessPath);
-				if(copy instanceof EPStructuredMap) {
-					((EPStructuredMap)copy).setDeadLine(deadline);
-				}
-				structureManager.copyStructureRecursively(template, copy, true);
-				
-				//RepositoryEntry referenceEntry = repositoryEntryDao.loadByResourceKey(template.getOlatResource().getKey());
-				//assessmentService.updateAssessmentEntry(identity, courseEntry, targetSubPath, Boolean.FALSE, referenceEntry, AssessmentEntryStatus.inProgress);
-				return copy;
-			}
-		});
-		return map;
-	}
-	
-	/**
-	 * Low level function to copy the structure of elements, with or without the artefacts
-	 * @param source
-	 * @param target
-	 * @param withArtefacts
-	 */
-	public void copyStructureRecursively(PortfolioStructure source, PortfolioStructure target, boolean withArtefacts) {
-		structureManager.copyStructureRecursively(source, target, withArtefacts);
-	}
-	
-	/**
-	 * Return the structure elements of the given type without permission control. Need this for indexing.
-	 * @param firstResult
-	 * @param maxResults
-	 * @param type
-	 * @return
-	 */
-	public List<PortfolioStructure> getStructureElements(int firstResult, int maxResults, ElementType... type) {
-		return structureManager.getStructureElements(firstResult, maxResults, type);
-	}
-	
-
-	/**
-	 * get all Structure-Elements linked to identity over a security group (owner)
-	 * 
-	 * @param ident
-	 * @return
-	 */
-	public List<PortfolioStructure> getStructureElementsForUser(Identity identity, ElementType... type) {
-		return structureManager.getStructureElementsForUser(identity, type);
-	}
-	
-	/**
-	 * Get all Structure-Elements linked which the identity can see over a policy,
-	 * 
-	 * @param ident The identity which what see maps
-	 * @param chosenOwner Limit maps from this identity
-	 * @param type Limit maps to this or these types
-	 * @return
-	 */
-	public List<PortfolioStructure> getStructureElementsFromOthers(final Identity ident, final Identity chosenOwner, final ElementType... type) {
-		return structureManager.getStructureElementsFromOthersLimited(ident, chosenOwner, 0, 0, type);
-	}
-	
-	/**
-	 * Get part of the Structure-Elements linked which the identity can see over a policy.
-	 * The range of elements returned is specified by limitFrom and limitTo (used for paging)
-	 * 
-	 * @param ident The identity which what see maps
-	 * @param chosenOwner Limit maps from this identity
-	 * @param limitFrom  Limit maps  
-	 * @param limitTo   Limit maps
-	 * @param type Limit maps to this or these types
-	 * @return
-	 */
-	public List<PortfolioStructure> getStructureElementsFromOthers(final Identity ident, final Identity chosenOwner, int limitFrom, int limitTo, final ElementType... type) {
-		return structureManager.getStructureElementsFromOthersLimited(ident, chosenOwner, limitFrom, limitTo, type);
-	}
-	
-	/**
-	 * Get the number of all Structure-Elements linked which the identity can see over a policy,
-	 * 
-	 * @param ident The identity which what see maps
-	 * @param chosenOwner Limit maps from this identity
-	 * @param type Limit maps to this or these types
-	 * @return
-	 */
-	public int countStructureElementsFromOthers(final Identity ident, final Identity chosenOwner, final ElementType... types) {
-		return structureManager.countStructureElementsFromOthers(ident, chosenOwner, types);
-	}
-
-	/**
-	 * Get all Structure-Elements linked which the identity can see over a policy,
-	 * WITHOUT those that are public to all OLAT users ( GROUP_OLATUSERS )
-	 * !! this should be used, to save performance when there are a lot of public shared maps!!
-	 * @param ident The identity which what see maps
-	 * @param chosenOwner Limit maps from this identity
-	 * @param type Limit maps to this or these types
-	 * @return
-	 */
-	public List<PortfolioStructure> getStructureElementsFromOthersWithoutPublic(IdentityRef ident, IdentityRef choosenOwner,
-			ElementType... types){
-		return structureManager.getStructureElementsFromOthersWithoutPublic(ident, choosenOwner, types);
-	}
-	
-	/**
-	 * Return the list of artefacts glued to this structure element
-	 * @param structure
-	 * @return A list of artefacts
-	 */
-	public List<AbstractArtefact> getArtefacts(PortfolioStructure structure) {
-		return structureManager.getArtefacts(structure);
-	}
-
-	/**
-	 * FXOLAT-431
-	 * 
-	 * @param map
-	 * @return
-	 *
-	public List<AbstractArtefact> getAllArtefactsInMap(EPAbstractMap map){
-		return structureManager.getAllArtefactsInMap(map);
-	}
-	*/
-	
-	/**
-	 * get statistics about how much of the required (min, equal) collect-restrictions have been fulfilled.
-	 * 
-	 * @param structure
-	 * @return array with "done" at 0 and "to be done" at 1, or "null" if no restrictions apply
-	 */
-	public String[] getRestrictionStatistics(PortfolioStructure structure) {
-		Integer[] stats = structureManager.getRestrictionStatistics(structure);
-		if(stats == null) {
-			return null;
-		} else {
-			return new String[]{stats[0].toString(), stats[1].toString()};
-		}
-	}
-	
-	/**
-	 * same as getRestrictionStatistics(PortfolioStructure structure) but recursively for a map.
-	 * get statistics about how much of the required (min, equal) collect-restrictions have been fulfilled.
-	 * 
-	 * @param structure
-	 * @return array with "done" at 0 and "to be done" at 1, or "null" if no restrictions apply
-	 */
-	public String[] getRestrictionStatisticsOfMap(final PortfolioStructureMap structure) {
-		Integer[] stats = structureManager.getRestrictionStatisticsOfMap(structure, 0, 0);
-		
-		return new String[]{stats[0].toString(), stats[1].toString()};
-	}
-
-	/**
-	 * Check the collect restriction against the structure element
-	 * @param structure
-	 * @return
-	 */
-	public boolean checkCollectRestriction(PortfolioStructure structure) {
-		return structureManager.checkCollectRestriction(structure);
-	}
-	
-	public boolean checkCollectRestrictionOfMap(PortfolioStructureMap structure) {
-		return checkAllCollectRestrictionRec(structure);
-	}
-	
-	protected boolean checkAllCollectRestrictionRec(PortfolioStructure structure) {
-		boolean allOk = structureManager.checkCollectRestriction(structure);
-		List<PortfolioStructure> children = structureManager.loadStructureChildren(structure);
-		for(PortfolioStructure child:children) {
-			allOk &= checkAllCollectRestrictionRec(child);
-		}
-		return allOk;
-	}
-	
-	/**
-	 * Create a map for a user
-	 * @param root
-	 * @param identity
-	 * @param title
-	 * @param description
-	 * @return
-	 */
-	public PortfolioStructureMap createAndPersistPortfolioDefaultMap(Identity identity, String title,
-			String description) {
-		PortfolioStructureMap map = structureManager.createPortfolioDefaultMap(identity, title, description);
-		structureManager.savePortfolioStructure(map);
-		return map;
-	}
-	
-	/**
-	 * Create a map for a group
-	 * @param root
-	 * @param group
-	 * @param title
-	 * @param description
-	 * @return
-	 */
-	public PortfolioStructureMap createAndPersistPortfolioDefaultMap(String title, String description) {
-		PortfolioStructureMap map = structureManager.createPortfolioDefaultMap(title, description);
-		structureManager.savePortfolioStructure(map);
-		return map;
-	}
-
-	/**
-	 * Create a structured map, based on template.
-	 * 
-	 * @param identity The author/owner of the map
-	 * @param title
-	 * @param description
-	 * @return The structure element
-	 */
-	public PortfolioStructureMap createAndPersistPortfolioStructuredMap(PortfolioStructureMap template,
-			Identity identity, String title, String description, OLATResourceable targetOres, String targetSubPath, String targetBusinessPath) {
-		PortfolioStructureMap map = structureManager.createPortfolioStructuredMap(template, identity, title, description,
-				targetOres, targetSubPath, targetBusinessPath);
-		structureManager.savePortfolioStructure(map);
-		return map;
-	}
-
-	/**
-	 * create a structure-element
-	 * @param root
-	 * @param title
-	 * @param description
-	 * @return
-	 */
-	public PortfolioStructure createAndPersistPortfolioStructureElement(PortfolioStructure root, String title, String description) {
-		EPStructureElement newStruct = (EPStructureElement) structureManager.createPortfolioStructure(root, title, description);
-		if (root != null) structureManager.addStructureToStructure(root, newStruct, -1);
-		structureManager.savePortfolioStructure(newStruct);
-		return newStruct;
-	}
-
-	/**
-	 * create a page
-	 * @param root
-	 * @param title
-	 * @param description
-	 * @return
-	 */
-	public PortfolioStructure createAndPersistPortfolioPage(PortfolioStructure root, String title, String description) {
-		EPPage newPage = (EPPage) structureManager.createPortfolioPage(root, title, description);
-		if (root != null) structureManager.addStructureToStructure(root, newPage, -1);
-		structureManager.savePortfolioStructure(newPage);
-		return newPage;
-	}
-	
-	/**
-	 * This method is reserved to the repository. It removes the template
-	 * completely
-	 * @param pStruct
-	 */
-	public void deletePortfolioMapTemplate(OLATResourceable res) {
-		structureManager.deletePortfolioMapTemplate(res);
-	}
-
-	/**
-	 * delete a portfoliostructure recursively with its childs
-	 * @param pStruct
-	 */
-	public void deletePortfolioStructure(PortfolioStructure pStruct) {
-		structureManager.removeStructureRecursively(pStruct);
-	}
-
-	/**
-	 * save or update a structure
-	 * @param pStruct
-	 */
-	public void savePortfolioStructure(PortfolioStructure pStruct) {
-		structureManager.savePortfolioStructure(pStruct);
-	}
-	
-	/**
-	 * Number of children
-	 */
-	public int countStructureChildren(PortfolioStructure structure) {
-		return structureManager.countStructureChildren(structure);
-	}
-	
-	/**
-	 * Load a protfolio structure by its resource
-	 * @param ores
-	 * @return
-	 */
-	public PortfolioStructure loadPortfolioStructure(OLATResourceable ores) {
-		return structureManager.loadPortfolioStructure(ores);
-	}
-	
-	/**
-	 * Load a protfolio structure by its resourceable id
-	 * @param ores
-	 * @return
-	 */
-	public EPMapShort loadMapShortByResourceId(Long resId) {
-		return structureManager.loadMapShortByResourceId(resId);
-	}
-	
-	/**
-	 * Load a portfolio structure by its primary key. DON'T USE THIS METHOD
-	 * TO RELOAD AN OBJECT. If you want do this, use the method
-	 * reloadPortfolioStructure(PortfolioStructure structure)
-	 * @param key cannot be null
-	 * @return The structure element or null if not found
-	 */
-	public PortfolioStructure loadPortfolioStructureByKey(Long key){
-		return structureManager.loadPortfolioStructureByKey(key);
-	}
-	
-	public PortfolioStructure loadPortfolioStructureByKey(PortfolioStructureRef ref){
-		return structureManager.loadPortfolioStructureByKey(ref.getKey());
-	}
-	
-	/**
-	 * Reload a portfolio structure
-	 * @param structure cannot be null
-	 * @return The reloaded structure element
-	 */
-	public PortfolioStructure reloadPortfolioStructure(PortfolioStructure structure){
-		return structureManager.reloadPortfolioStructure(structure);
-	}
-	
-	/**
-	 * Load the OLAT resource with the primary of the structure element
-	 * @param key cannot be null
-	 * @return The resource or null if not found
-	 */
-	public OLATResource loadOlatResourceFromByKey(Long key) {
-		return structureManager.loadOlatResourceFromStructureElByKey(key);
-	}
-	
-	/**
-	 * Retrieve the parent of the structure
-	 * @param structure
-	 * @return
-	 */
-	public PortfolioStructure loadStructureParent(PortfolioStructureRef structure) {
-		return structureManager.loadStructureParent(structure);
-	}
-	
-	
-	/**
-	 * Retrieve the children structures
-	 * @param structure
-	 * @return
-	 */
-	public List<PortfolioStructure> loadStructureChildren(PortfolioStructure structure) {
-		return structureManager.loadStructureChildren(structure);
-	}
-	
-	/**
-	 * 
-	 * @param structure
-	 * @param firstResult
-	 * @param maxResults
-	 * @return
-	 */
-	public List<PortfolioStructure> loadStructureChildren(PortfolioStructure structure, int firstResult, int maxResults) {
-		return structureManager.loadStructureChildren(structure, firstResult, maxResults);
-	}
-
-	public PortfolioStructureMap loadPortfolioStructureMap(Identity identity, PortfolioStructureMap template,
-			OLATResourceable targetOres, String targetSubPath, String targetBusinessPath){
-		//sync the map with the template on opening it in gui, not on loading!
-		return structureManager.loadPortfolioStructuredMap(identity, template, targetOres, targetSubPath, targetBusinessPath);
-	}
-	
-	/**
-	 * 
-	 * @param identity Cannot be null
-	 * @param targetOres Cannot be null
-	 * @param targetSubPath
-	 * @param targetBusinessPath
-	 * @return
-	 */
-	public List<PortfolioStructureMap> loadPortfolioStructureMaps(Identity identity,
-			OLATResourceable targetOres, String targetSubPath, String targetBusinessPath){
-		//sync the map with the template on opening it in gui, not on loading!
-		return structureManager.loadPortfolioStructuredMaps(identity, targetOres, targetSubPath, targetBusinessPath);
-	}
-	
-	/**
-	 * get the "already in use" state of a structuredMapTemplate
-	 * @param template
-	 * @param targetOres
-	 * @param targetSubPath
-	 * @param targetBusinessPath
-	 * @return
-	 */
-	public boolean isTemplateInUse(PortfolioStructureMap template, OLATResourceable targetOres,
-			String targetSubPath, String targetBusinessPath) {
-		return structureManager.isTemplateInUse(template, targetOres, targetSubPath, targetBusinessPath);
-	}
-
-	/**
-	 * get root vfs-container where artefact file-system data is persisted
-	 * @return
-	 */
-	public VFSContainer getArtefactsRoot(){
-		return artefactManager.getArtefactsRoot();
-	}
-	
-	/**
-	 * get vfs-container of a specific artefact
-	 * @param artefact
-	 * @return
-	 */
-	public VFSContainer getArtefactContainer(AbstractArtefact artefact) {
-		return artefactManager.getArtefactContainer(artefact);
-	}
-	
-	/**
-	 * get a temporary folder to store files while in wizzard
-	 * @param ident
-	 * @return
-	 */
-	public VFSContainer getArtefactsTempContainer(Identity ident){
-		return artefactManager.getArtefactsTempContainer(ident);
-	}
-
-	/**
-	 * as large fulltext-content of an artefact is persisted on filesystem, use this method to get fulltext
-	 * 
-	 * @param artefact
-	 * @return
-	 */
-	public String getArtefactFullTextContent(AbstractArtefact artefact){
-		return artefactManager.getArtefactFullTextContent(artefact);
-	}
-	
-	/**
-	 * Check if the identity is the owner of this portfolio resource.
-	 * @param identity
-	 * @param ores
-	 * @return
-	 */
-	public boolean isMapOwner(Identity identity, OLATResourceable ores) {
-		return structureManager.isMapOwner(identity, ores);
-	}
-	
-	public boolean isMapOwner(Identity identity, Long mapKey) {
-		return structureManager.isMapOwner(identity, mapKey);
-	}
-	
-	/**
-	 * Check if the identity is owner of the portfolio resource or
-	 * in a valid policy.
-	 * @param identity
-	 * @param ores
-	 * @return
-	 */
-	public boolean isMapVisible(IdentityRef identity, OLATResourceable ores) {
-		return structureManager.isMapVisible(identity, ores);
-	}
-	
-	public boolean isMapShared(PortfolioStructureMap map) {
-		return isMapShared(map.getOlatResource());
-	}
-		
-	public boolean isMapShared(OLATResource resource) {
-		return policyManager.isMapShared(resource);
-	}
-	
-	/**
-	 * Return a list of wrapper containing the read policies of the map
-	 * @param map
-	 */
-	public List<EPMapPolicy> getMapPolicies(PortfolioStructureMap map) {
-		return policyManager.getMapPolicies(map);
-	}
-
-	/**
-	 * Update the map policies of a map. The missing policies are deleted!
-	 * @param map
-	 * @param policyWrappers
-	 */
-	public PortfolioStructureMap updateMapPolicies(PortfolioStructureMap map, List<EPMapPolicy> policyWrappers) {
-		return policyManager.updateMapPolicies(map, policyWrappers);
-	}
-	
-	/**
-	 * submit and close a structured map from a portfolio task
-	 * @param map
-	 */
-	public void submitMap(PortfolioStructureMap map) {
-		submitMap(map, true, Role.user);
-	}
-	
-	private void submitMap(PortfolioStructureMap map, boolean logActivity, Role by) {
-		if(!(map instanceof EPStructuredMap)) return;//add an exception
-		
-		EPStructuredMap submittedMap = (EPStructuredMap)map;
-		structureManager.submitMap(submittedMap);
-
-		EPTargetResource resource = submittedMap.getTargetResource();
-		OLATResourceable courseOres = resource.getOLATResourceable();
-		ICourse course = CourseFactory.loadCourse(courseOres);
-		AssessmentManager am = course.getCourseEnvironment().getAssessmentManager();
-		CourseNode courseNode = course.getRunStructure().getNode(resource.getSubPath());
-
-		List<Identity> owners = policyManager.getOwners(submittedMap);
-		for(Identity owner:owners) {
-			if (courseNode != null) { // courseNode might have been deleted meanwhile
-				IdentityEnvironment ienv = new IdentityEnvironment(); 
-				ienv.setIdentity(owner);
-				UserCourseEnvironment uce = new UserCourseEnvironmentImpl(ienv, course.getCourseEnvironment());
-				if(logActivity) {
-					am.incrementNodeAttempts(courseNode, owner, uce, by);
-				} else {
-					am.incrementNodeAttemptsInBackground(courseNode, owner, uce);
-				}
-				
-				//RepositoryEntry referenceEntry = courseNode.getReferencedRepositoryEntry();
-				//RepositoryEntry courseEntry = course.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
-				//assessmentService.updateAssessmentEntry(owner, courseEntry, courseNode.getIdent(), Boolean.FALSE, referenceEntry, AssessmentEntryStatus.inReview);
-			}
-			assessmentNotificationsHandler.markPublisherNews(owner, course.getResourceableId());
-			log.info(Tracing.M_AUDIT, "Map " + map + " from " + owner.getKey() + " has been submitted.");
-		}
-	}
-	
-	/**
-	 * Close all maps after the deadline if there is a deadline. It can be a long running
-	 * process if a lot of maps are involved.
-	 */
-	public void closeMapAfterDeadline() {
-		List<PortfolioStructureMap> mapsToClose = structureManager.getOpenStructuredMapAfterDeadline();
-		int count = 0;
-		for(PortfolioStructureMap mapToClose:mapsToClose) {
-			submitMap(mapToClose, false, Role.auto);
-			if(count % 5 == 0) {
-				// this possibly takes longer than connection timeout, so do intermediatecommits.
-				dbInstance.intermediateCommit();
-			}
-		}
-	}
-	
-	/**
-	 * get a valid name of style for a given PortfolioStructure
-	 * if style is not enabled anymore, the default will be used.
-	 * @param struct
-	 * @return the set style or the default from config if nothing is set.
-	 */
-	public String getValidStyleName(PortfolioStructure struct){
-		// first style in list is the default, can be named default.
-		List<String> allStyles = portfolioModule.getAvailableMapStyles();
-		if (allStyles == null || allStyles.size() == 0) throw new AssertException("at least one style (that also exists in brasato.css must be configured for maps.");
-		String styleName = ((EPStructureElement)struct).getStyle();
-		if(StringHelper.containsNonWhitespace(styleName) && allStyles.contains(styleName)) {
-			return styleName;		
-		} 
-		return allStyles.get(0); 
-	}
-	
-	/**
-	 * The structure will be without any check on the DB copied. All the
-	 * children structures MUST be loaded. This method is to use with the
-	 * output of XStream at examples.
-	 * @param root
-	 * @param identity
-	 * @return The persisted structure
-	 */
-	public PortfolioStructureMap importPortfolioMapTemplate(PortfolioStructure root, OLATResource resource) {
-		return structureManager.importPortfolioMapTemplate(root, resource);
-	}
-	
-	
-	/**
-	 * check if given identity has access to this feed.
-	 * reverse lookup feed -> artefact -> shared map
-	 * @param feed
-	 * @param identity
-	 * @return
-	 */
-	public boolean checkFeedAccess(OLATResourceable feed, Identity identity){
-		String feedBP = LiveBlogArtefactHandler.LIVEBLOG + feed.getResourceableId() + "]";
-		List<AbstractArtefact> artefact = loadArtefactsByBusinessPath(feedBP, null);
-		if (artefact != null && artefact.size() == 1) {
-			List<PortfolioStructure> linkedMaps = getReferencedMapsForArtefact(artefact.get(0));
-			for (PortfolioStructure map : linkedMaps) {
-				if (isMapVisible(identity, map)){
-					return true;
-				}
-			}
-			// see OLAT-6282: allow the owner of the artefact to view the feed, even if its not any longer in any map.
-			if (linkedMaps.size() == 0 && artefact.get(0).getAuthor().equalsByPersistableKey(identity)){
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	/**
-	 * returns all Owners of the given map as comma-separated list
-	 * @param map
-	 * @return
-	 */
-	public String getAllOwnersAsString(PortfolioStructureMap map){
-		if(map.getGroups() == null) {
-			return null;
-		}
-		List<Identity> ownerIdents = policyManager.getOwners(map);
-		List<String> identNames = new ArrayList<>();
-		for (Identity identity : ownerIdents) {
-			String fullName = userManager.getUserDisplayName(identity);
-			if(fullName != null) {
-				identNames.add(fullName);
-			}
-		}
-		return StringHelper.formatAsCSVString(identNames);
-	}
-	
-	/**
-	 * returns the first Owner for the given Map.
-	 * 
-	 * @param map
-	 * @return
-	 */
-	public String getFirstOwnerAsString(PortfolioStructureMap map){
-		if(map.getGroups() == null) {
-			return "n/a";
-		}
-		List<Identity> ownerIdents = policyManager.getOwners(map);
-		if(ownerIdents.size() > 0){
-			Identity id = ownerIdents.get(0);
-			return userManager.getUserDisplayName(id);
-		}
-		return "n/a";
-	}
-	
-	public String getFirstOwnerAsString(EPMapShort map){
-		if(map.getGroups() == null) {
-			return "n/a";
-		}
-		List<Identity> ownerIdents = policyManager.getOwners(map);
-		if(ownerIdents.size() > 0){
-			Identity id = ownerIdents.get(0);
-			return userManager.getUserDisplayName(id);
-		}
-		return "n/a";
-	}
-	
-	/**
-	 * returns the first OwnerIdentity for the given Map.
-	 * 
-	 * @param map
-	 * @return
-	 */
-	public Identity getFirstOwnerIdentity(PortfolioStructureMap map){
-		if(map.getGroups() == null) {
-			return null;
-		}
-		List<Identity> ownerIdents = policyManager.getOwners(map);
-		if (ownerIdents.size() > 0) {
-			Identity id = ownerIdents.get(0);
-			return id;
-		}
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/manager/EPMapPolicy.java b/src/main/java/org/olat/portfolio/manager/EPMapPolicy.java
deleted file mode 100644
index 8c6763cc6db9808eaec1b372940b78ac1d94a5b2..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/manager/EPMapPolicy.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.portfolio.manager;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.olat.basesecurity.Invitation;
-import org.olat.core.id.Identity;
-import org.olat.core.id.UserConstants;
-import org.olat.group.BusinessGroup;
-import org.olat.portfolio.model.structel.EPStructureElementToGroupRelation;
-
-/**
- * 
- * Description:<br>
- * A wrapper to embedded the policies with the same logical boundary
- * (permission and duration)
- * 
- * <P>
- * Initial Date:  5 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPMapPolicy {
-	
-	private Date to;
-	private Date from;
-	private Type type = Type.user;
-	
-	private Invitation invitation;
-	private List<Identity> identities = new ArrayList<>();
-	private List<BusinessGroup> groups = new ArrayList<>();
-	private final List<EPStructureElementToGroupRelation> relations = new ArrayList<>();
-	
-	public Invitation getInvitation() {
-		return invitation;
-	}
-
-	public void setInvitation(Invitation invitation) {
-		this.invitation = invitation;
-	}
-
-	public List<EPStructureElementToGroupRelation> getRelations() {
-		return relations;
-	}
-	
-	public void addRelation(EPStructureElementToGroupRelation relation) {
-		relations.add(relation);
-	}
-
-	public Date getTo() {
-		return to;
-	}
-
-	public void setTo(Date to) {
-		this.to = to;
-	}
-
-	public Date getFrom() {
-		return from;
-	}
-
-	public void setFrom(Date from) {
-		this.from = from;
-	}
-
-	public Type getType() {
-		return type;
-	}
-
-	public void setType(Type type) {
-		this.type = type;
-	}
-	
-	public Map<String,String> getIdentitiesValue() {
-		if(identities == null) return new HashMap<>();
-		
-		Map<String,String> values = new HashMap<>();
-		for(Identity identity:identities) {
-			String login = identity.getName();
-			String first = identity.getUser().getProperty(UserConstants.FIRSTNAME, null);
-			String last = identity.getUser().getProperty(UserConstants.LASTNAME, null);
-			values.put(last + " " + first, login);
-		}
-		return values;
-	}
-
-	public List<Identity> getIdentities() {
-		return identities;
-	}
-
-	public void setIdentities(List<Identity> identities) {
-		this.identities = identities;
-	}
-	
-	public void addIdentities(List<Identity> identitiesToAdd) {
-		if(identities == null) {
-			identities = new ArrayList<>();
-		}
-		identities.addAll(identitiesToAdd);
-	}
-	
-	public Map<String,String> getGroupsValues() {
-		if(groups == null) return new HashMap<>();
-		
-		Map<String,String> values = new HashMap<>();
-		for(BusinessGroup group:groups) {
-			values.put(group.getName(), group.getKey().toString());
-		}
-		return values;
-	}
-
-	public List<BusinessGroup> getGroups() {
-		return groups;
-	}
-
-	public void setGroups(List<BusinessGroup> groups) {
-		this.groups = groups;
-	}
-	
-	public void addGroup(BusinessGroup group) {
-		for(BusinessGroup g:groups) {
-			if(g.equals(group)) {
-				return;
-			}
-		}
-		groups.add(group);
-	}
-	
-	public enum Type {
-		user,
-		group,
-		invitation,
-		allusers;
-		
-		public static String[] names() {
-			String[]  names = new String[values().length];
-			int i=0;
-			for(Type type:values()) {
-				names[i++] = type.name();
-			}
-			return names;
-		}
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/manager/EPNotificationManager.java b/src/main/java/org/olat/portfolio/manager/EPNotificationManager.java
deleted file mode 100644
index 38ccb5b601afcf8e69bc91c43e3a6b3eb98cde41..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/manager/EPNotificationManager.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.manager;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-import javax.persistence.TemporalType;
-
-import org.olat.core.commons.persistence.DB;
-import org.olat.core.commons.services.notifications.model.SubscriptionListItem;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.id.context.BusinessControlFactory;
-import org.olat.core.util.StringHelper;
-import org.olat.portfolio.model.notification.EPArtefactNotification;
-import org.olat.portfolio.model.notification.EPCommentNotification;
-import org.olat.portfolio.model.notification.EPNotification;
-import org.olat.portfolio.model.notification.EPRatingNotification;
-import org.olat.portfolio.model.notification.EPStructureElementNotification;
-import org.olat.user.UserManager;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service("epNotificationManager")
-public class EPNotificationManager {
-
-	@Autowired
-	private DB dbInstance;
-	@Autowired
-	private UserManager userManager;
-
-	public List<SubscriptionListItem> getPageSubscriptionListItem(Long mapKey, String rootBusinessPath, Date compareDate, Translator translator) {
-		List<EPStructureElementNotification> notifications = getPageNotifications(mapKey, compareDate);
-		List<SubscriptionListItem> items = new ArrayList<>();
-		for (EPNotification notification : notifications) {
-			SubscriptionListItem item = null;	
-			String[] title = new String[] { StringHelper.escapeHtml(notification.getTitle()) };
-			if ("page".equals(notification.getType())) {
-				String bPath = rootBusinessPath + "[EPPage:" + notification.getPageKey() + "]";
-				String linkUrl = BusinessControlFactory.getInstance().getURLFromBusinessPathString(bPath);
-				item = new SubscriptionListItem(translator.translate("li.newpage", title), linkUrl, bPath, notification.getCreationDate(), "o_ep_icon_page");
-				item.setUserObject(notification.getPageKey());
-			} else {
-				String bPath = rootBusinessPath;
-				if (notification.getPageKey() != null) {
-					bPath = rootBusinessPath + "[EPPage:" + notification.getPageKey() + "]";
-				}
-				String linkUrl = BusinessControlFactory.getInstance().getURLFromBusinessPathString(bPath);
-				item = new SubscriptionListItem(translator.translate("li.newstruct", title), linkUrl, bPath, notification.getCreationDate(), "o_ep_icon_struct");
-				item.setUserObject(notification.getPageKey());
-			}
-			if(item != null) {
-				items.add(item);
-			}
-		}
-		return items;
-	}
-	
-	public List<SubscriptionListItem> getArtefactNotifications(List<Long> mapKey, String rootBusinessPath, Date compareDate, Translator translator) {
-		List<EPArtefactNotification> links = getArtefactNotifications(mapKey, compareDate);
-		List<SubscriptionListItem> items = new ArrayList<>();
-		for (EPArtefactNotification link : links) {
-			Long pageKey =  link.getPageKey();
-			String targetTitle= link.getStructureTitle();
-			String[] title = new String[] {
-					StringHelper.escapeHtml(userManager.getUserDisplayName(link.getAuthor())),
-					StringHelper.escapeHtml(link.getArtefactTitle()),
-					StringHelper.escapeHtml(targetTitle)
-			};
-
-			String bPath = rootBusinessPath + "[EPPage:" + pageKey + "]";
-			String linkUrl = BusinessControlFactory.getInstance().getURLFromBusinessPathString(bPath);
-			SubscriptionListItem item = new SubscriptionListItem(translator.translate("li.newartefact", title), linkUrl, bPath, link.getCreationDate(), "o_icon_eportfolio_link");
-			item.setUserObject(pageKey);
-			items.add(item);
-		}
-		return items;
-	}
-	
-	public List<SubscriptionListItem> getRatingNotifications(List<Long> mapKey, String rootBusinessPath, Date compareDate, Translator translator) {
-		List<EPRatingNotification> ratings = getRatingNotifications(mapKey, compareDate);
-		List<SubscriptionListItem> items = new ArrayList<>();
-
-		for (EPRatingNotification rating : ratings) {
-			if(rating.getPageKey() == null) {
-				String[] title = new String[] { rating.getMapTitle(), userManager.getUserDisplayName(rating.getAuthor()) };
-				String linkUrl = BusinessControlFactory.getInstance().getURLFromBusinessPathString(rootBusinessPath);
-				if (rating.getLastModified() != null) {
-					// there is a modified date, also add this as a listitem
-					items.add(new SubscriptionListItem(translator.translate("li.changerating", title), linkUrl, rootBusinessPath, rating.getLastModified(), "o_icon_rating_on"));
-				}
-				items.add(new SubscriptionListItem(translator.translate("li.newrating", title), linkUrl, rootBusinessPath, rating.getCreationDate(), "o_icon_rating_on"));
-			} else {
-				String bPath = rootBusinessPath + "[EPPage:" + rating.getPageKey() + "]";
-				String linkUrl = BusinessControlFactory.getInstance().getURLFromBusinessPathString(bPath);
-				String[] title = new String[] { rating.getTitle(), userManager.getUserDisplayName(rating.getAuthor()) };
-				if (rating.getLastModified() != null) {
-					// there is a modified date, also add this as a listitem
-					SubscriptionListItem item = new SubscriptionListItem(translator.translate("li.changerating", title ), linkUrl, bPath, rating.getLastModified(), "o_icon_rating_on");
-					item.setUserObject(rating.getPageKey());
-					items.add(item);
-				}
-				SubscriptionListItem item = new SubscriptionListItem(translator.translate("li.newrating", title), linkUrl, bPath, rating.getCreationDate(), "o_icon_rating_on");
-				item.setUserObject(rating.getPageKey());
-				items.add(item);
-			}
-		}
-		return items;
-	}
-	
-	public List<SubscriptionListItem> getCommentNotifications(List<Long> mapKey, String rootBusinessPath, Date compareDate, Translator translator) {
-		List<EPCommentNotification> comments = getCommentNotifications(mapKey, compareDate);
-		List<SubscriptionListItem> items = new ArrayList<>();
-
-		for (EPCommentNotification comment : comments) {
-			SubscriptionListItem item;
-			if(comment.getPageKey() == null) {
-				String[] title = new String[] { comment.getMapTitle(), userManager.getUserDisplayName(comment.getAuthor()) };
-				String linkUrl = BusinessControlFactory.getInstance().getURLFromBusinessPathString(rootBusinessPath);
-				item = new SubscriptionListItem(translator.translate("li.newcomment", title), linkUrl, rootBusinessPath, comment.getCreationDate(), "o_info_icon");
-			} else {
-				String bPath = rootBusinessPath + "[EPPage:" + comment.getPageKey() + "]";
-				String linkUrl = BusinessControlFactory.getInstance().getURLFromBusinessPathString(bPath);
-				String[] title = new String[] { comment.getTitle(), userManager.getUserDisplayName(comment.getAuthor()) };
-				item = new SubscriptionListItem(translator.translate("li.newcomment", title), linkUrl, bPath, comment.getCreationDate(), "o_info_icon");
-				item.setUserObject(comment.getPageKey());
-			}
-			items.add(item);
-		}
-
-		return items;
-	}
-	
-	private List<EPStructureElementNotification> getPageNotifications(Long mapKey, Date compareDate) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select notification from ").append(EPStructureElementNotification.class.getName()).append(" as notification");
-		sb.append(" where notification.creationDate>=:currentDate and (notification.key=:mapKey or notification.rootMapKey=:mapKey)");
-		
-		return dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), EPStructureElementNotification.class)
-				.setParameter("currentDate", compareDate, TemporalType.TIMESTAMP)
-				.setParameter("mapKey", mapKey)
-				.getResultList();
-	}
-
-	private List<EPArtefactNotification> getArtefactNotifications(List<Long> mapKey, Date compareDate) {
-		if(mapKey == null || mapKey.isEmpty()) {
-			return Collections.emptyList();
-		}
-		
-		StringBuilder sb = new StringBuilder();
-		sb.append("select notification from ").append(EPArtefactNotification.class.getName()).append(" as notification")
-	    .append(" inner join fetch notification.author")
-		  .append(" where notification.creationDate>=:currentDate and (notification.key in (:mapKey) or notification.rootMapKey in (:mapKey))");
-		
-		return dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), EPArtefactNotification.class)
-				.setParameter("currentDate", compareDate, TemporalType.TIMESTAMP)
-				.setParameter("mapKey", mapKey)
-				.getResultList();
-	}
-	
-	private List<EPRatingNotification> getRatingNotifications(List<Long> mapKey, Date compareDate) {
-		if(mapKey == null || mapKey.isEmpty()) {
-			return Collections.emptyList();
-		}
-		
-		StringBuilder sb = new StringBuilder();
-		sb.append("select notification from ").append(EPRatingNotification.class.getName()).append(" as notification")
-		  .append(" inner join fetch notification.author")
-		  .append(" where notification.creationDate>=:currentDate and notification.mapKey in (:mapKey)");
-		
-		return dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), EPRatingNotification.class)
-				.setParameter("currentDate", compareDate, TemporalType.TIMESTAMP)
-				.setParameter("mapKey", mapKey)
-				.getResultList();
-	}
-
-	private List<EPCommentNotification> getCommentNotifications(List<Long> mapKey, Date compareDate) {
-		if(mapKey == null || mapKey.isEmpty()) {
-			return Collections.emptyList();
-		}
-		
-		StringBuilder sb = new StringBuilder();
-		sb.append("select notification from ").append(EPCommentNotification.class.getName()).append(" as notification")
-	    .append(" inner join fetch notification.author")
-		  .append(" where notification.creationDate>=:currentDate and notification.mapKey in (:mapKey)");
-		
-		return dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), EPCommentNotification.class)
-				.setParameter("currentDate", compareDate, TemporalType.TIMESTAMP)
-				.setParameter("mapKey", mapKey)
-				.getResultList();
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/manager/EPNotificationsHandler.java b/src/main/java/org/olat/portfolio/manager/EPNotificationsHandler.java
deleted file mode 100644
index 414eb7ecb2b57609db2f3b0dc709a7c4b15b48e4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/manager/EPNotificationsHandler.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.manager;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
-
-import org.apache.logging.log4j.Logger;
-import org.olat.core.commons.services.notifications.NotificationsHandler;
-import org.olat.core.commons.services.notifications.NotificationsManager;
-import org.olat.core.commons.services.notifications.Publisher;
-import org.olat.core.commons.services.notifications.Subscriber;
-import org.olat.core.commons.services.notifications.SubscriptionInfo;
-import org.olat.core.commons.services.notifications.model.SubscriptionListItem;
-import org.olat.core.commons.services.notifications.model.TitleItem;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.StringHelper;
-import org.olat.portfolio.model.structel.EPMapShort;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * 
- * The NotificationsHandler for the ePortfolio<br />
- * ( bean definition in "portfolioContext.xml" )
- * 
- * 
- * FXOLAT-431, FXOLAT-432
- * 
- * @author strentini, sergio.trentini@frentix.com, www.frentix.com
- * 
- */
-public class EPNotificationsHandler implements NotificationsHandler {
-
-	private static final Logger logger = Tracing.createLoggerFor(EPNotificationsHandler.class);
-
-	public static final String TYPENNAME = EPStructuredMap.class.getSimpleName();
-	
-	@Autowired
-	private EPFrontendManager epFrontendManager;
-	@Autowired
-	private NotificationsManager notificationsManager;
-
-	@Override
-	public SubscriptionInfo createSubscriptionInfo(Subscriber subscriber, Locale locale, Date compareDate) {
-		SubscriptionInfo si = null;
-
-		Publisher publisher = subscriber.getPublisher();
-		EPMapShort amap = epFrontendManager.loadMapShortByResourceId(publisher.getResId());
-
-		if (isInkoveValid(amap, compareDate, publisher)) {
-
-			// init the helper
-			String rootBusinessPath = "[EPDefaultMap:" + amap.getKey() + "]";
-			EPNotificationsHelper helper = new EPNotificationsHelper(rootBusinessPath, locale);
-			String resName = amap.getOlatResource().getResourceableTypeName();
-
-			si = new SubscriptionInfo(subscriber.getKey(), publisher.getType(), getTitleItemForMap(amap), null);
-
-			List<SubscriptionListItem> allItems = new ArrayList<>(0);
-			// get subscriptionListItems according to map type
-			if ("EPDefaultMap".equals(resName) || "EPStructuredMapTemplate".equals(resName)) {
-				allItems = helper.getAllSubscrItemsDefault(compareDate, amap);
-			} else if ("EPStructuredMap".equals(resName)) {
-				allItems = helper.getAllSubscrItemsStructured(compareDate, amap);
-			}
-
-			for (SubscriptionListItem item : allItems) {
-				si.addSubscriptionListItem(item);
-			}
-		}
-
-		if (si == null) {
-			// no info, return empty
-			si = notificationsManager.getNoSubscriptionInfo();
-		}
-
-		return si;
-	}
-
-	private boolean isInkoveValid(EPMapShort map, Date compareDate, Publisher publisher) {
-		// only do that if a map was found.
-		// OO-191 only do if compareDate is not null.
-		return (map != null && compareDate != null && notificationsManager.isPublisherValid(publisher));
-	}
-
-	/**
-	 * returns a TitleItem instance for the given Publisher p If you already
-	 * have a reference to the map, use
-	 * <code>getTitleItemForMap(EPAbstractMap amap)</code>
-	 * 
-	 * @param p
-	 * @return
-	 */
-	private TitleItem getTitleItemForPublisher(Publisher p) {
-		Long resId = p.getResId();
-		logger.debug("loading map with resourceableid: {}", resId);
-
-		EPMapShort map = epFrontendManager.loadMapShortByResourceId(resId);
-		return getTitleItemForMap(map);
-	}
-
-	/**
-	 * returns a TitleItem instance for the given AbstractMap
-	 * 
-	 * @param amap
-	 * @return
-	 */
-	private TitleItem getTitleItemForMap(EPMapShort amap) {
-		StringBuilder sbTitle = new StringBuilder();
-		if (amap != null) {
-			sbTitle.append(StringHelper.escapeHtml(amap.getTitle()));
-			String firstOwner = epFrontendManager.getFirstOwnerAsString(amap);
-			sbTitle.append(" (").append(StringHelper.escapeHtml(firstOwner)).append(")");
-		}
-		return new TitleItem(sbTitle.toString(), "o_EPStructuredMapTemplate_icon");
-	}
-
-	@Override
-	public String createTitleInfo(Subscriber subscriber, Locale locale) {
-		TitleItem title = getTitleItemForPublisher(subscriber.getPublisher());
-		return title.getInfoContent("text/plain");
-	}
-
-	@Override
-	public String getType() {
-		return TYPENNAME;
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/manager/EPNotificationsHelper.java b/src/main/java/org/olat/portfolio/manager/EPNotificationsHelper.java
deleted file mode 100644
index ffeaf2f9df9cf433363c1a4dca45b96395519ae2..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/manager/EPNotificationsHelper.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.manager;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.services.notifications.model.SubscriptionListItem;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.util.Util;
-import org.olat.portfolio.model.structel.EPMapShort;
-import org.olat.portfolio.ui.structel.view.EPChangelogController;
-
-/**
- * 
- * EPNotificationsHelper provides functionality to gather SubscriptionListItems
- * for given Maps.<br />
- * 
- * FXOLAT-431, FXOLAT-432<br />
- * this also triggered: OO-111
- * 
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- * 
- */
-public class EPNotificationsHelper {
-
-//	private static final Logger logger = Tracing.createLoggerFor(EPNotificationsHelper.class);
-	private Translator translator;
-	private String rootBusinessPath;
-
-	/**
-	 * sets up the helper. provide a locale and an Identity
-	 * 
-	 * @param locale
-	 * @param identity
-	 */
-	public EPNotificationsHelper(String rootBusinessPath, Locale locale) {
-		this.translator = Util.createPackageTranslator(EPChangelogController.class, locale);
-		this.rootBusinessPath = rootBusinessPath;
-	}
-	
-	/**
-	 * 
-	 * @param compareDate
-	 * @param map
-	 * @return
-	 */
-	public List<SubscriptionListItem> getAllSubscrItemsDefault(Date compareDate, EPMapShort map) {
-		EPNotificationManager mgr = CoreSpringFactory.getImpl(EPNotificationManager.class);
-		List<SubscriptionListItem> allItems = new ArrayList<>();
-		List<Long> mapKeys = Collections.singletonList(map.getKey());
-		//structure elements
-		List<SubscriptionListItem> notis1 = mgr.getPageSubscriptionListItem(map.getKey(), rootBusinessPath, compareDate, translator);	
-		allItems.addAll(notis1);
-		//artefacts
-		List<SubscriptionListItem> notis2 = mgr.getArtefactNotifications(mapKeys, rootBusinessPath, compareDate, translator);
-		allItems.addAll(notis2);
-		//ratings
-		List<SubscriptionListItem> notis3 = mgr.getRatingNotifications(mapKeys, rootBusinessPath, compareDate, translator);
-		allItems.addAll(notis3);
-		//comments
-		List<SubscriptionListItem> notis4 = mgr.getCommentNotifications(mapKeys, rootBusinessPath, compareDate, translator);
-		allItems.addAll(notis4);
-
-		//sort
-		Collections.sort(allItems, new SubscriptionListItemComparator());
-		return allItems;
-	}
-	
-	public List<SubscriptionListItem> getAllSubscrItemsStructured(Date compareDate, EPMapShort map) {
-		EPNotificationManager mgr = CoreSpringFactory.getImpl(EPNotificationManager.class);
-		// at this moment, map is not yet synchronized. check the "parent"
-		// templateMap for map/structure changes
-	
-		List<SubscriptionListItem> allItems = new ArrayList<>();
-
-		//structure elements
-		List<SubscriptionListItem> notis1 = mgr.getPageSubscriptionListItem(map.getSourceMapKey(), rootBusinessPath, compareDate, translator);	
-		allItems.addAll(notis1);
-		
-		List<Long> mapKeys = new ArrayList<>();
-		mapKeys.add(map.getKey());
-		mapKeys.add(map.getSourceMapKey());
-		
-		//artefacts
-		List<SubscriptionListItem> notis2 = mgr.getArtefactNotifications(mapKeys, rootBusinessPath, compareDate, translator);
-		allItems.addAll(notis2);
-		//ratings
-		List<SubscriptionListItem> notis3 = mgr.getRatingNotifications(mapKeys, rootBusinessPath, compareDate, translator);
-		allItems.addAll(notis3);
-		//comments
-		List<SubscriptionListItem> notis4 = mgr.getCommentNotifications(mapKeys, rootBusinessPath, compareDate, translator);
-		allItems.addAll(notis4);
-
-		//sort
-		Collections.sort(allItems, new SubscriptionListItemComparator());
-		return allItems;
-	}
-
-	/**
-	 * compares two SubscriptionListItems according to their date.
-	 * 
-	 * @author strentini, sergio.trentini@frentix.com, http://www.frentix.com
-	 * 
-	 */
-	private class SubscriptionListItemComparator implements Comparator<SubscriptionListItem> {
-
-		@Override
-		public int compare(SubscriptionListItem o1, SubscriptionListItem o2) {
-			if (o1.getDate().after(o2.getDate()))
-				return -1;
-			return 1;
-		}
-
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/manager/EPPolicyManager.java b/src/main/java/org/olat/portfolio/manager/EPPolicyManager.java
deleted file mode 100644
index df242b2bbc9d1458e9d26b95e326776eccd836d5..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/manager/EPPolicyManager.java
+++ /dev/null
@@ -1,317 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.manager;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
-
-import org.olat.basesecurity.Group;
-import org.olat.basesecurity.GroupRoles;
-import org.olat.basesecurity.Invitation;
-import org.olat.basesecurity.manager.GroupDAO;
-import org.olat.core.commons.persistence.DB;
-import org.olat.core.id.Identity;
-import org.olat.group.BusinessGroup;
-import org.olat.group.manager.BusinessGroupDAO;
-import org.olat.portfolio.model.structel.EPMapShort;
-import org.olat.portfolio.model.structel.EPStructureElement;
-import org.olat.portfolio.model.structel.EPStructureElementToGroupRelation;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.model.structel.PortfolioStructureMapRef;
-import org.olat.resource.OLATResource;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * Description:<br>
- * manager for all map share and policy handling
- * 
- * <P>
- * Initial Date:  30.11.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-@Service("epPolicyManager")
-public class EPPolicyManager {
-
-	@Autowired
-	private DB dbInstance;
-	@Autowired
-	private GroupDAO groupDao;
-	@Autowired
-	private InvitationDAO invitationDao;
-	@Autowired
-	private BusinessGroupDAO businessGroupDao;
-	
-	public List<Identity> getOwners(PortfolioStructureMapRef map) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select ident from ").append(EPMapShort.class.getName()).append(" as map")
-		  .append(" inner join map.groups as relGroup on relGroup.defaultGroup=true")
-		  .append(" inner join relGroup.group as baseGroup ")
-		  .append(" inner join baseGroup.members as members on members.role='").append(GroupRoles.owner.name()).append("'")
-		  .append(" inner join members.identity as ident")
-		  .append(" where map.key=:mapKey");	
-		return dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), Identity.class)
-				.setParameter("mapKey", map.getKey()).getResultList();
-	}
-	
-	public boolean isMapShared(OLATResource resource) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select count(relGroup) from ").append(EPMapShort.class.getName()).append(" as map")
-		  .append(" inner join map.groups as relGroup on relGroup.defaultGroup=false")
-		  .append(" where map.olatResource=:resource");	
-		
-		Number count = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), Number.class)
-				.setParameter("resource", resource)
-				.getSingleResult();
-		return count == null ? false : count.intValue() > 0;
-	}
-	
-	/**
-	 * Return a list of wrapper containing the read policies of the map
-	 * @param map
-	 */
-	public List<EPMapPolicy> getMapPolicies(PortfolioStructureMapRef mapRef) {
-		EPMapShort map = dbInstance.getCurrentEntityManager().find(EPMapShort.class, mapRef.getKey());
-		
-		List<EPMapPolicy> policies = new ArrayList<>();
-		Set<EPStructureElementToGroupRelation> relations = map.getGroups();
-		for(EPStructureElementToGroupRelation relation:relations) {
-			if(relation.isDefaultGroup()) {
-				continue;
-			}
-			
-			EPMapPolicy policy = getEquivalentWrapper(relation, policies);
-			if(policy == null) {
-				policy = new EPMapPolicy();
-				policy.setTo(relation.getValidTo());
-				policy.setFrom(relation.getValidFrom());
-				policies.add(policy);
-			}
-
-			String role = relation.getRole();
-			if(role.startsWith(EPMapPolicy.Type.user.name())) {
-				List<Identity> identities = groupDao.getMembers(relation.getGroup(), GroupRoles.participant.name());
-
-				policy.addRelation(relation);
-				policy.setType(EPMapPolicy.Type.user);
-				policy.addIdentities(identities);
-			} else if (role.startsWith(EPMapPolicy.Type.group.name())) {
-				policy.addRelation(relation);
-				BusinessGroup group = businessGroupDao.findBusinessGroup(relation.getGroup());
-				policy.addGroup(group);
-				policy.setType(EPMapPolicy.Type.group);
-			} else if (role.startsWith(EPMapPolicy.Type.invitation.name())) {
-				policy.addRelation(relation);
-				Invitation invitation = invitationDao.findInvitation(relation.getGroup());
-				policy.setInvitation(invitation);
-				policy.setType(EPMapPolicy.Type.invitation);
-			} else if (role.startsWith(EPMapPolicy.Type.allusers.name())) {
-				policy.addRelation(relation);
-				policy.setType(EPMapPolicy.Type.allusers);
-			}
-		}
-		
-		return policies;
-	}
-	
-	private EPMapPolicy getEquivalentWrapper(EPStructureElementToGroupRelation relation, List<EPMapPolicy> policies) {
-		Date to = relation.getValidTo();
-		Date from = relation.getValidFrom();
-		String role = relation.getRole();
-		
-		a_a:
-		for(EPMapPolicy policy:policies) {
-			for(EPStructureElementToGroupRelation p:policy.getRelations()) {
-				if(!role.equals(p.getRole())) {
-					continue a_a;
-				}
-				if(from == null && p.getValidFrom() == null || (from != null && p.getValidFrom() != null && from.equals(p.getValidFrom()))) {	
-					if(to == null && p.getValidTo() == null || (to != null && p.getValidTo() != null && to.equals(p.getValidTo()))) {
-						return policy;
-					}
-				}
-			}
-		}
-		return null;
-	}
-	
-	/**
-	 * Update the map policies of a map. The missing policies are deleted!
-	 * @param map
-	 * @param policies
-	 */
-	public PortfolioStructureMap updateMapPolicies(PortfolioStructureMap map, List<EPMapPolicy> policies) {
-		map = dbInstance.getCurrentEntityManager().merge(map);
-
-		List<EPStructureElementToGroupRelation> savedPolicies = new ArrayList<>();
-		for(EPMapPolicy wrapper:policies) {
-			savedPolicies.addAll(applyPolicy(wrapper, map));
-		}
-		
-		Collection<EPStructureElementToGroupRelation> currentRelations = new ArrayList<>(map.getGroups());
-		for(EPStructureElementToGroupRelation currentRelation:currentRelations) {
-			if(currentRelation.isDefaultGroup()) {
-				continue;
-			}
-			
-			boolean inUse = savedPolicies.contains(currentRelation);
-			if(!inUse) {
-				map.getGroups().remove(currentRelation);
-			}
-		}
-		return dbInstance.getCurrentEntityManager().merge(map);
-	}
-	
-	private List<EPStructureElementToGroupRelation> applyPolicy(EPMapPolicy policy, PortfolioStructureMap map) {
-		List<EPStructureElementToGroupRelation> savedPolicies = new ArrayList<>();
-		switch(policy.getType()) {
-			case user:
-				savedPolicies.add(applyPolicyToUsers(policy, map));
-				break;
-			case group:
-				for(BusinessGroup group:policy.getGroups()) {
-					savedPolicies.add(applyPolicyToGroup(group.getBaseGroup(), policy, map));
-				}
-				break;
-			case invitation:
-				Invitation invitation = policy.getInvitation();
-				EPStructureElementToGroupRelation invitationPolicy = applyPolicyToInvitation(invitation, policy, map);
-				savedPolicies.add(invitationPolicy);
-				break;
-			case allusers:
-				EPStructureElementToGroupRelation allUsersPolicy = applyPolicyToAllUsers(policy, map);
-				savedPolicies.add(allUsersPolicy);
-				break;
-		}
-		return savedPolicies;
-	}
-	
-	private EPStructureElementToGroupRelation applyPolicyToAllUsers(EPMapPolicy wrapper, PortfolioStructureMap map) {
-		List<EPStructureElementToGroupRelation> currentRelations = wrapper.getRelations();
-		if(!currentRelations.isEmpty()) {
-			EPStructureElementToGroupRelation currentRelation = currentRelations.get(0);
-			updatePolicy(currentRelation, wrapper.getFrom(), wrapper.getTo());
-			return currentRelation;
-		}
-		return createBaseRelation(map, null, EPMapPolicy.Type.allusers.name(), wrapper.getFrom(), wrapper.getTo());
-	}
-	
-	private EPStructureElementToGroupRelation applyPolicyToUsers(EPMapPolicy policy, PortfolioStructureMap map) {
-		List<EPStructureElementToGroupRelation> currentRelations = policy.getRelations();
-		EPStructureElementToGroupRelation relation = (currentRelations == null || currentRelations.isEmpty()) ? null : currentRelations.get(0);
-		if(relation == null) {
-			Group secGroup = groupDao.createGroup();
-			relation = createBaseRelation(map, secGroup, EPMapPolicy.Type.user.name(), policy.getFrom(), policy.getTo());
-			for(Identity identity:policy.getIdentities()) {
-				groupDao.addMembershipTwoWay(secGroup, identity, GroupRoles.participant.name());
-			}
-		} else {
-			EPStructureElementToGroupRelation currentPolicy = reusePolicyInSession(relation, map);
-			updatePolicy(currentPolicy, policy.getFrom(), policy.getTo());
-			
-			Group secGroup = relation.getGroup();
-			List<Identity> currentMembers = groupDao.getMembers(secGroup, GroupRoles.participant.name());
-			List<Identity> newMembers = new ArrayList<>(policy.getIdentities());
-			for (Identity newMember:policy.getIdentities()) {
-				if(currentMembers.contains(newMember)) {
-					newMembers.remove(newMember);
-					currentMembers.remove(newMember);
-				}
-			}
-			
-			//re-attach the session to lazy load the members
-			secGroup = dbInstance.getCurrentEntityManager().merge(secGroup);
-			
-			for(Identity currentMember:currentMembers) {
-				groupDao.removeMembership(secGroup, currentMember);
-			}
-			for(Identity newMember:newMembers) {
-				groupDao.addMembershipTwoWay(secGroup, newMember, GroupRoles.participant.name());
-			}
-		}
-		return relation;
-	}
-
-	private EPStructureElementToGroupRelation applyPolicyToInvitation(Invitation invitation, EPMapPolicy policy, PortfolioStructureMap map) {
-		invitation = dbInstance.getCurrentEntityManager().merge(invitation);
-		Group secGroup = invitation.getBaseGroup();
-		Collection<EPStructureElementToGroupRelation> currentRelations = map.getGroups();
-		for(EPStructureElementToGroupRelation currentRelation:currentRelations) {
-			if(secGroup.equals(currentRelation.getGroup())) {
-				updatePolicy(currentRelation, policy.getFrom(), policy.getTo());
-				return currentRelation;
-			}
-		}
-		
-		return createBaseRelation(map, secGroup, EPMapPolicy.Type.invitation.name(), policy.getFrom(), policy.getTo());
-	}
-	
-	/**
-	 * Hibernate doesn't allow to update an object if the same object is already in the current
-	 * hibernate session.
-	 * @param policy
-	 * @param currentPolicies
-	 * @return
-	 */
-	private EPStructureElementToGroupRelation reusePolicyInSession(EPStructureElementToGroupRelation relation, PortfolioStructureMap map) {
-		Collection<EPStructureElementToGroupRelation> currentRelations = map.getGroups();
-		for(EPStructureElementToGroupRelation currentRelation:currentRelations) {
-			if(relation.equalsByPersistableKey(currentRelation)) {
-				return currentRelation;
-			}
-		}
-		return relation;
-	}
-	
-	private EPStructureElementToGroupRelation applyPolicyToGroup(Group group, EPMapPolicy policy, PortfolioStructureMap map) {
-		Collection<EPStructureElementToGroupRelation> currentRelations = map.getGroups();
-		for(EPStructureElementToGroupRelation currentRelation:currentRelations) {
-			if(currentRelation.getGroup() != null && currentRelation.getGroup().equals(group)) {
-				updatePolicy(currentRelation, policy.getFrom(), policy.getTo());
-				return currentRelation;
-			}
-		}
-		return createBaseRelation(map, group, EPMapPolicy.Type.group.name(), policy.getFrom(), policy.getTo());
-	}
-	
-	private void updatePolicy(EPStructureElementToGroupRelation relation, Date from, Date to) {
-		relation.setValidFrom(from);
-		relation.setValidTo(to);
-	}
-	
-	private EPStructureElementToGroupRelation createBaseRelation(PortfolioStructureMap map, Group group, String role, Date from, Date to) {
-		//create security group
-		EPStructureElementToGroupRelation relation = new EPStructureElementToGroupRelation();
-		relation.setDefaultGroup(false);
-		relation.setCreationDate(new Date());
-		relation.setGroup(group);
-		relation.setStructureElement((EPStructureElement)map);
-		relation.setRole(role);
-		relation.setValidFrom(from);
-		relation.setValidTo(to);
-		map.getGroups().add(relation);
-		return relation;
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/manager/EPSettingsManager.java b/src/main/java/org/olat/portfolio/manager/EPSettingsManager.java
deleted file mode 100644
index 69a9c138eca1e52413fe2972ce853851c7d42c3b..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/manager/EPSettingsManager.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.manager;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.apache.logging.log4j.Logger;
-import org.olat.core.id.Identity;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.xml.XStreamHelper;
-import org.olat.portfolio.model.EPFilterSettings;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.properties.Property;
-import org.olat.properties.PropertyManager;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.thoughtworks.xstream.XStream;
-
-/**
- * Description:<br>
- * Manager to handle users settings depending the ePortfolio
- * 
- * <P>
- * Initial Date:  30.11.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-@Service("epSettingsManager")
-public class EPSettingsManager {
-
-	private static final Logger log = Tracing.createLoggerFor(EPSettingsManager.class);
-
-	private static final String EPORTFOLIO_ARTEFACTS_ATTRIBUTES = "eportfolio-artAttrib";
-	private static final String EPORTFOLIO_FILTER_SETTINGS = "eportfolio-filterSettings";
-	private static final String EPORTFOLIO_LASTUSED_STRUCTURE = "eportfolio-lastStruct";
-	private static final String EPORTFOLIO_ARTEFACTS_VIEWMODE = "eportfolio-artViewMode";
-	private static final String EPORTFOLIO_CATEGORY = "eportfolio";
-	
-	@Autowired
-	private PropertyManager propertyManager;
-	
-	public EPSettingsManager(){
-		//
-	}
-	
-	@SuppressWarnings("unchecked")
-	public Map<String, Boolean> getArtefactAttributeConfig(Identity ident) {
-		Property p = propertyManager.findProperty(ident, null, null, EPORTFOLIO_CATEGORY, EPORTFOLIO_ARTEFACTS_ATTRIBUTES);
-		TreeMap<String, Boolean> disConfig;
-		if (p == null) {
-			disConfig = new TreeMap<>();
-			// attributes from an artefact ?!
-			disConfig.put("artefact.author", true);
-			disConfig.put("artefact.description", false);
-			disConfig.put("artefact.reflexion", false);
-			disConfig.put("artefact.source", true);
-			disConfig.put("artefact.sourcelink", false);
-			disConfig.put("artefact.title", true);
-			disConfig.put("artefact.date", true);
-			disConfig.put("artefact.tags", true);
-			disConfig.put("artefact.used.in.maps", true);
-			disConfig.put("artefact.handlerdetails", false);
-		} else {
-			XStream xStream = XStreamHelper.createXStreamInstance();
-			disConfig = (TreeMap<String, Boolean>) xStream.fromXML(p.getTextValue());
-		}
-		return disConfig;
-	}
-	
-	public void setArtefactAttributeConfig(Identity ident, Map<String, Boolean> artAttribConfig) {
-		Property p = propertyManager.findProperty(ident, null, null, EPORTFOLIO_CATEGORY, EPORTFOLIO_ARTEFACTS_ATTRIBUTES);
-		if (p == null) {
-			p = propertyManager.createUserPropertyInstance(ident, EPORTFOLIO_CATEGORY, EPORTFOLIO_ARTEFACTS_ATTRIBUTES, null, null, null, null);
-		}
-		XStream xStream = XStreamHelper.createXStreamInstance();
-		String artAttribXML = xStream.toXML(artAttribConfig);
-		p.setTextValue(artAttribXML);
-		propertyManager.saveProperty(p);
-	}
-	
-	@SuppressWarnings("unchecked")
-	public List<EPFilterSettings> getSavedFilterSettings(Identity ident){
-		Property p = propertyManager.findProperty(ident, null, null, EPORTFOLIO_CATEGORY, EPORTFOLIO_FILTER_SETTINGS);
-		List<EPFilterSettings> result = new ArrayList<>();
-		if (p == null) {
-			result.add(new EPFilterSettings());
-		} else {
-			XStream xStream = XStreamHelper.createXStreamInstance();
-			xStream.aliasType("EPFilterSettings", EPFilterSettings.class);
-			try {
-				result = (List<EPFilterSettings>) xStream.fromXML(p.getTextValue());
-			} catch (Exception e) {
-				//it's not a live critical part
-				log.warn("Cannot read filter settings", e);
-			}
-		}
-		return result;		
-	}
-	
-	public void setSavedFilterSettings(Identity ident, List<EPFilterSettings> filterList){
-		Property p = propertyManager.findProperty(ident, null, null, EPORTFOLIO_CATEGORY, EPORTFOLIO_FILTER_SETTINGS);
-		if (p == null) {
-			p = propertyManager.createUserPropertyInstance(ident, EPORTFOLIO_CATEGORY, EPORTFOLIO_FILTER_SETTINGS, null, null, null, null);
-		}
-		// don't persist filters without a name
-		for (Iterator<EPFilterSettings> iterator = filterList.iterator(); iterator.hasNext();) {
-			EPFilterSettings epFilterSettings = iterator.next();
-			if (!StringHelper.containsNonWhitespace(epFilterSettings.getFilterName())){
-				iterator.remove();
-			}
-		}
-		XStream xStream = XStreamHelper.createXStreamInstance();
-		xStream.aliasType("EPFilterSettings", EPFilterSettings.class);
-		String filterListXML = xStream.toXML(filterList);
-		p.setTextValue(filterListXML);
-		propertyManager.saveProperty(p);		
-	}
-	
-	public void deleteFilterFromUsersList(Identity ident, String filterID){
-		List<EPFilterSettings> usersFilters = getSavedFilterSettings(ident);
-		for (Iterator<EPFilterSettings> iterator = usersFilters.iterator(); iterator.hasNext();) {
-			EPFilterSettings epFilterSettings = iterator.next();
-			if (epFilterSettings.getFilterId().equals(filterID)) iterator.remove();
-		}
-		setSavedFilterSettings(ident, usersFilters);
-	}
-	
-	public String getUsersPreferedArtefactViewMode(Identity ident, String context){
-		Property p = propertyManager.findProperty(ident, null, null, EPORTFOLIO_CATEGORY, EPORTFOLIO_ARTEFACTS_VIEWMODE + "." + context);
-		if (p != null) {
-			return p.getStringValue();
-		}
-		return null;		
-	}
-	
-	public void setUsersPreferedArtefactViewMode(Identity ident, String preferedMode, String context){
-		Property p = propertyManager.findProperty(ident, null, null, EPORTFOLIO_CATEGORY, EPORTFOLIO_ARTEFACTS_VIEWMODE + "." + context);
-		if (p == null) {
-			p = propertyManager.createUserPropertyInstance(ident, EPORTFOLIO_CATEGORY, EPORTFOLIO_ARTEFACTS_VIEWMODE + "." + context, null, null, null, null);
-		}
-		p.setStringValue(preferedMode);
-		propertyManager.saveProperty(p);
-	}
-	
-	public void setUsersLastUsedPortfolioStructure(Identity ident, PortfolioStructure struct){
-		Property p = propertyManager.findProperty(ident, null, null, EPORTFOLIO_CATEGORY, EPORTFOLIO_LASTUSED_STRUCTURE);
-		if (p == null) {
-			p = propertyManager.createUserPropertyInstance(ident, EPORTFOLIO_CATEGORY, EPORTFOLIO_LASTUSED_STRUCTURE, null, null, null, null);
-		}
-		p.setLongValue(struct.getKey());
-		propertyManager.saveProperty(p);
-	}
-	
-	public Long getUsersLastUsedPortfolioStructureKey (Identity ident) {
-		Property p = propertyManager.findProperty(ident, null, null, EPORTFOLIO_CATEGORY, EPORTFOLIO_LASTUSED_STRUCTURE);
-		if (p != null) {
-			return p.getLongValue();
-		}
-		return null;
-	}
-	
-}
diff --git a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java
deleted file mode 100755
index ec53cf6dba2373ae53c43cd3e766095c6c868f01..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java
+++ /dev/null
@@ -1,1961 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.manager;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import javax.persistence.TemporalType;
-import javax.persistence.TypedQuery;
-
-import org.apache.logging.log4j.Logger;
-import org.hibernate.ObjectNotFoundException;
-import org.olat.basesecurity.Group;
-import org.olat.basesecurity.GroupRoles;
-import org.olat.basesecurity.IdentityRef;
-import org.olat.basesecurity.PolicyImpl;
-import org.olat.basesecurity.SecurityGroupImpl;
-import org.olat.basesecurity.SecurityGroupMembershipImpl;
-import org.olat.basesecurity.manager.GroupDAO;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.persistence.DB;
-import org.olat.core.commons.persistence.PersistentObject;
-import org.olat.core.commons.services.commentAndRating.CommentAndRatingService;
-import org.olat.core.commons.services.notifications.NotificationsManager;
-import org.olat.core.commons.services.notifications.SubscriptionContext;
-import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.logging.AssertException;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.restriction.CollectRestriction;
-import org.olat.portfolio.model.restriction.RestrictionsConstants;
-import org.olat.portfolio.model.structel.EPAbstractMap;
-import org.olat.portfolio.model.structel.EPDefaultMap;
-import org.olat.portfolio.model.structel.EPMapShort;
-import org.olat.portfolio.model.structel.EPPage;
-import org.olat.portfolio.model.structel.EPStructureElement;
-import org.olat.portfolio.model.structel.EPStructureElementToGroupRelation;
-import org.olat.portfolio.model.structel.EPStructureToArtefactLink;
-import org.olat.portfolio.model.structel.EPStructureToStructureLink;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.olat.portfolio.model.structel.EPStructuredMapTemplate;
-import org.olat.portfolio.model.structel.EPTargetResource;
-import org.olat.portfolio.model.structel.ElementType;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.model.structel.PortfolioStructureRef;
-import org.olat.portfolio.model.structel.StructureStatusEnum;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryManager;
-import org.olat.repository.manager.RepositoryEntryRelationDAO;
-import org.olat.resource.OLATResource;
-import org.olat.resource.OLATResourceManager;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * 
- * Description:<br>
- * Manager to operate ePortfolio maps, structure-elements, pages.
- * 
- * <P>
- * Initial Date:  11.06.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-@Service("epStructureManager")
-public class EPStructureManager {
-	
-	public static final String STRUCTURE_ELEMENT_TYPE_NAME = "EPStructureElement";
-	
-	public static final OLATResourceable ORES_MAPOWNER = OresHelper.lookupType(EPStructureManager.class, "EPOwner");
-	public static final Logger log = Tracing.createLoggerFor(EPStructureManager.class);
-
-	@Autowired
-	private DB dbInstance;
-	@Autowired
-	private RepositoryManager repositoryManager;
-	@Autowired
-	private OLATResourceManager resourceManager;
-	@Autowired
-	private GroupDAO groupDao;
-	@Autowired
-	private RepositoryEntryRelationDAO repositoryEntyRelationDao;
-	@Autowired
-	private NotificationsManager notificationsManager;
-
-	/**
-	 * Return the list of artefacts glued to this structure element
-	 * @param structure
-	 * @return A list of artefacts
-	 */
-	protected List<AbstractArtefact> getArtefacts(PortfolioStructure structure) {
-		return getArtefacts(structure, -1, -1);
-	}
-	
-	/**
-	 * recursively fetches all linked artefacts in the given map.<br />
-	 * ( iterates over all pages in the map, all artefacts on these pages, all
-	 * artefacts in structureElements on these pages)
-	 * 
-	 * FXOLAT-431
-	 * 
-	 * @param map
-	 * @return
-	 
-	protected List<AbstractArtefact> getAllArtefactsInMap(EPAbstractMap map){
-		List<AbstractArtefact> results = new ArrayList<AbstractArtefact>();
-		
-		List<PortfolioStructure> children = loadStructureChildren(map);
-		for (PortfolioStructure child : children) {
-				// maps have pages as children, this will be true..!
-				if(child instanceof EPPage){
-					results.addAll(getArtefacts(child));
-				}
-		}
-		return results;
-	}
-	*/
-	
-	protected boolean hasMap(IdentityRef identity) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select stEl.key from ").append(EPStructureElement.class.getName()).append(" stEl ")
-		  .append(" inner join stEl.groups as relGroup on relGroup.defaultGroup=true")
-		  .append(" inner join relGroup.group as baseGroup")
-		  .append(" inner join baseGroup.members as membership on (membership.identity.key=:identityKey and membership.role='").append(GroupRoles.owner.name()).append("')");
-		
-		List<Long> count =	dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Long.class)
-				.setParameter("identityKey", identity.getKey())
-				.setFirstResult(0)
-				.setMaxResults(1)
-				.getResultList();
-		return count != null && count.size() > 0 && count.get(0) != null && count.get(0) >= 0;
-	}
-	
-	protected List<PortfolioStructureMap> getOpenStructuredMapAfterDeadline() {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select map from ").append(EPStructuredMap.class.getName()).append(" as map");
-		sb.append(" where (map.status is null or not(map.status = 'closed'))")
-			.append(" and map.deadLine<:currentDate");
-		
-		return dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), PortfolioStructureMap.class)
-				.setParameter("currentDate", new Date(), TemporalType.TIMESTAMP)
-				.getResultList();
-	}
-	
-	protected List<PortfolioStructure> getStructureElements(int firstResult, int maxResults, ElementType... types){
-		StringBuilder sb = new StringBuilder();
-		sb.append("select stEl from ").append(EPStructureElement.class.getName()).append(" stEl");
-		sb.append(" where type(stEl) in (");
-		boolean first = true;
-		for(ElementType type:types) {
-			if(first) first = false;
-			else sb.append(",");
-			sb.append(getImplementation(type).getName());
-		}
-		sb.append(")");
-		
-		TypedQuery<PortfolioStructure> query =	dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), PortfolioStructure.class);
-		if(firstResult > 0) {
-			query.setFirstResult(firstResult);
-		}
-		if(maxResults > 0) {
-			query.setMaxResults(maxResults);
-		}
-		return query.getResultList();
-	}
-	
-	protected List<PortfolioStructure> getStructureElementsForUser(IdentityRef ident, ElementType... types){
-		StringBuilder sb = new StringBuilder();
-		sb.append("select stEl from ").append(EPStructureElement.class.getName()).append(" as stEl")
-		  .append(" inner join stEl.groups as relGroup on relGroup.defaultGroup=true")
-		  .append(" inner join relGroup.group as baseGroup")
-		  .append(" where exists (select membership from bgroupmember as membership " )
-		  .append("    where baseGroup=membership.group and membership.identity.key=:identityKey and membership.role='").append(GroupRoles.owner.name()).append("'")
-		  .append(" )");
-		if(types != null && types.length > 0) {
-			sb.append(" and type(stEl) in (");
-			boolean first = true;
-			for(ElementType type:types) {
-				if(first) first = false;
-				else sb.append(",");
-				sb.append(getImplementation(type).getName());
-			}
-			sb.append(")");
-		}
-		
-		return dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), PortfolioStructure.class)
-				.setParameter("identityKey", ident.getKey())
-				.getResultList();
-	}
-	
-	/**
-	 * Check if the identity is owner of the map identified by the specified resource
-	 * @param identity
-	 * @param ores
-	 * @return
-	 */
-	protected boolean isMapOwner(IdentityRef identity, OLATResourceable ores) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select count(stEl) from ").append(EPStructureElement.class.getName()).append(" stEl ")
-		  .append(" inner join stEl.groups as relGroup on relGroup.defaultGroup=true")
-		  .append(" inner join relGroup.group as baseGroup")
-		  .append(" where stEl.olatResource.resId=:resourceableId")
-		  .append(" and stEl.olatResource.resName=:resourceableTypeName")
-		  .append(" and exists (select membership from bgroupmember as membership " )
-		  .append("   where baseGroup=membership.group and membership.identity.key=:identityKey and membership.role='").append(GroupRoles.owner.name()).append("'")
-		  .append(" )");
-		
-		Number count =	dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Number.class)
-				.setParameter("identityKey", identity.getKey())
-				.setParameter("resourceableId", ores.getResourceableId())
-				.setParameter("resourceableTypeName", ores.getResourceableTypeName())
-				.getSingleResult();
-		return count == null ? false : count.intValue() > 0;
-	}
-	
-	/**
-	 * Check if the identity is owner of the map identified by the specified key
-	 * @param identity
-	 * @param mapKey The structure primary key
-	 * @return
-	 */
-	protected boolean isMapOwner(IdentityRef identity, Long mapKey) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select count(stEl) from ").append(EPStructureElement.class.getName()).append(" stEl ")
-		  .append(" inner join stEl.groups as relGroup on relGroup.defaultGroup=true")
-		  .append(" inner join relGroup.group as baseGroup")
-		  .append(" where stEl.key=:key")
-		  .append(" and exists (select membership from bgroupmember as membership " )
-		  .append("   where baseGroup=membership.group and membership.identity.key=:identityKey and membership.role='").append(GroupRoles.owner.name()).append("'")
-		  .append(" )");
-		
-		Number count =	dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Number.class)
-				.setParameter("identityKey", identity.getKey())
-				.setParameter("key", mapKey)
-				.getSingleResult();
-		return count == null ? false : count.intValue() > 0;
-	}
-	
-	/**
-	 * Check if the identity is owner or is in a valid policy
-	 * @param identity
-	 * @param ores
-	 * @return
-	 */
-	protected boolean isMapVisible(IdentityRef identity, OLATResourceable ores) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select count(stEl) from ").append(EPStructureElement.class.getName()).append(" stEl")
-			.append(" inner join stEl.olatResource as oRes")
-			.append(" inner join stEl.groups as relGroup")
-			.append(" where oRes.resId=:resourceableId and oRes.resName=:resourceableTypeName")
-			.append(" and (relGroup.validFrom is null or relGroup.validFrom<=:date)")
-			.append(" and (relGroup.validTo is null or relGroup.validTo>=:date)")
-			.append(" and (relGroup.role='").append(EPMapPolicy.Type.allusers.name()).append("'")
-			.append("   or exists (select membership from bgroupmember as membership " )
-			.append("     where membership.group=relGroup.group and membership.identity.key=:identityKey")
-			.append("   )")
-			.append(" )");
-
-		Number count = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), Number.class)
-				.setParameter("identityKey", identity.getKey())
-				.setParameter("resourceableId", ores.getResourceableId())
-				.setParameter("resourceableTypeName", ores.getResourceableTypeName())
-				.setParameter("date", new Date())
-				.getSingleResult();
-		return count == null ? false : count.intValue() > 0;
-	}
-	
-	/**
-	 * 
-	 * @param select
-	 * @param choosenOwner
-	 * @param limitFrom
-	 * @param limitTo
-	 * @param types
-	 * @return
-	 */
-	private <U> TypedQuery<U> buildStructureElementsFromOthersLimitedQuery(Identity choosenOwner, Class<U> cl, ElementType... types){
-		StringBuilder sb = new StringBuilder();
-		if(cl.equals(Number.class)) {
-			sb.append("select count(stEl) from ").append(EPStructureElement.class.getName()).append(" stEl ")
-			  .append(" inner join stEl.olatResource as oRes ");
-		} else {
-			sb.append("select stEl from ").append(EPStructureElement.class.getName()).append(" stEl ")
-			  .append(" inner join fetch stEl.olatResource as oRes ");
-		}
-		sb.append(" inner join stEl.groups as relGroup on relGroup.defaultGroup=true")
-		  .append(" inner join relGroup.group as baseGroup");
-
-		sb.append(" where oRes in ( ").append("  select policy.olatResource from").append("  ").append(PolicyImpl.class.getName()).append(" as policy, ").append("  ")
-				.append(SecurityGroupImpl.class.getName()).append(" as sgi,").append("  ").append(SecurityGroupMembershipImpl.class.getName()).append(" as sgmsi ")
-				.append("  where sgi = policy.securityGroup")// implicit inner join
-				.append("  and (sgmsi.securityGroup = sgi and sgmsi.identity =:ident) ")// member of the security group
-				.append("  and (policy.from is null or policy.from<=:date)").append("  and (policy.to is null or policy.to>=:date)").append(" )");
-		// remove owner
-		sb.append(" and not exists ( ").append("select sgi2 from bgroup as sgi2, bgroupmember as sgmsi2 ")
-		  .append("   where baseGroup=sgi2 and sgmsi2.group=sgi2 and sgmsi2.identity=:ident")
-		  .append(" )");
-
-		if (choosenOwner != null) {
-			sb.append(" and exists (select sgi.key from bgroup as sgi, bgroupmember as sgmsi ")
-			  .append("   where sgmsi.group=baseGroup and sgmsi.identity=:owner")
-			  .append(" )");
-		}
-		if (types != null && types.length > 0) {
-			sb.append(" and type(stEl) in (");
-			boolean first = true;
-			for (final ElementType type : types) {
-				if (first) {
-					first = false;
-				} else {
-					sb.append(",");
-				}
-				sb.append(getImplementation(type).getName());
-			}
-			sb.append(")");
-		}
-		
-		return dbInstance.getCurrentEntityManager().createQuery(sb.toString(), cl);
-	}
-	
-	protected int countStructureElementsFromOthers(final Identity ident, final Identity choosenOwner ,final ElementType... types){
-		TypedQuery<Number> query = buildStructureElementsFromOthersLimitedQuery(choosenOwner, Number.class, types);
-		query.setParameter("ident", ident)
-		     .setParameter("date", new Date());
-		if (choosenOwner != null) {
-			query.setParameter("owner", choosenOwner);
-		}
-		Number count = query.getSingleResult();
-		return count == null ? 0 : count.intValue();
-	}
-	
-	protected List<PortfolioStructure> getStructureElementsFromOthersLimited(Identity ident, Identity choosenOwner,
-			int limitFrom, int limitTo, ElementType... types){
-		TypedQuery<PortfolioStructure> query = buildStructureElementsFromOthersLimitedQuery(choosenOwner, PortfolioStructure.class, types);
-		//limits
-		if(limitTo > 0 && (limitFrom < limitTo)){
-			query.setFirstResult(limitFrom);
-			query.setMaxResults(limitTo-limitFrom);
-		}
-		
-		query.setParameter("ident", ident)
-		     .setParameter("date", new Date());
-		if (choosenOwner != null) {
-			query.setParameter("owner", choosenOwner);
-		}
-		return query.getResultList();
-	}
-	
-	protected List<PortfolioStructure> getStructureElementsFromOthersWithoutPublic(IdentityRef ident, IdentityRef choosenOwner, ElementType... types){
-		StringBuilder sb = new StringBuilder();
-		sb.append("select stEl from ").append(EPStructureElement.class.getName()).append(" stEl ")
-		  .append(" inner join fetch stEl.olatResource as oRes ")
-		  .append(" inner join stEl.groups as relGroup on relGroup.defaultGroup=false")
-		  .append(" inner join relGroup.group as baseGroup")
-		  .append(" inner join baseGroup.members as members")
-		  .append(" where members.identity.key=:identityKey")
-		  .append(" and (relGroup.validFrom is null or relGroup.validFrom<=:date)")
-		  .append(" and (relGroup.validTo is null or relGroup.validTo>=:date)");
-		
-		if(choosenOwner != null) {
-			sb.append(" and exists (select sgmsi from bgroupmember as sgmsi ")
-			  .append("   where sgmsi.group=baseGroup and sgmsi.identity.key=:ownerKey")
-			  .append(" )");
-		}
-		if(types != null && types.length > 0) {
-			sb.append(" and type(stEl) in (");
-			boolean first = true;
-			for(ElementType type:types) {
-				if(first) first = false;
-				else sb.append(",");
-				sb.append(getImplementation(type).getName());
-			}
-			sb.append(")");
-		}
-		
-		TypedQuery<PortfolioStructure> query =dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), PortfolioStructure.class)
-				.setParameter("identityKey", ident.getKey())
-				.setParameter("date", new Date());
-		if(choosenOwner != null) {
-			query.setParameter("ownerKey", choosenOwner.getKey());
-		}
-		
-		return query.getResultList();
-	}
-
-	protected boolean hasStructureElementsFromOthersWithoutPublic(IdentityRef ident){
-		StringBuilder sb = new StringBuilder();
-		
-		sb.append("select stEl.key from ").append(EPStructureElement.class.getName()).append(" stEl ")
-		  .append(" inner join stEl.groups as relGroup on relGroup.defaultGroup=false")
-		  .append(" inner join relGroup.group as baseGroup")
-		  .append(" inner join baseGroup.members as members")
-		  .append(" where members.identity.key=:identityKey")
-		  .append(" and (relGroup.validFrom is null or relGroup.validFrom<=:date)")
-		  .append(" and (relGroup.validTo is null or relGroup.validTo>=:date)");
-		
-		List<Long> count =	dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Long.class)
-				.setParameter("identityKey", ident.getKey())
-				.setParameter("date", new Date())
-				.setFirstResult(0)
-				.setMaxResults(1)
-				.getResultList();
-		return count != null && count.size() > 0 && count.get(0) != null && count.get(0) >= 0;
-	}
-
-	private Class<?> getImplementation(ElementType type) {
-		switch(type) {
-			case DEFAULT_MAP: return EPDefaultMap.class;
-			case STRUCTURED_MAP: return EPStructuredMap.class;
-			case TEMPLATE_MAP: return EPStructuredMapTemplate.class;
-			default: return null;
-		}
-	}
-
-	protected List<PortfolioStructure> getReferencedMapsForArtefact(AbstractArtefact artefact){
-		List<PortfolioStructure> pfList = getAllReferencesForArtefact(artefact);
-		List<PortfolioStructure> mapList = new ArrayList<>();
-		for (Iterator<?> iterator = pfList.iterator(); iterator.hasNext();) {
-			EPStructureElement portfolioStructure = (EPStructureElement) iterator.next();
-			EPStructureElement actStruct = portfolioStructure;
-			while (actStruct.getRoot() != null){
-				EPStructureElement actRoot = actStruct.getRoot();
-				if (actRoot != null) {
-					actStruct = actRoot;
-				} 				
-			}
-			if (!mapList.contains(actStruct)) mapList.add(actStruct);
-		}		
-		return mapList;		
-	}
-	
-	protected List<PortfolioStructure> getAllReferencesForArtefact(AbstractArtefact artefact){
-		StringBuilder sb = new StringBuilder();
-		sb.append("select link.structureElement from ").append(EPStructureToArtefactLink.class.getName()).append(" link")
-		  .append(" where link.artefact=:artefactEl ");
-		return dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), PortfolioStructure.class)
-				.setParameter("artefactEl", artefact)
-				.getResultList();		
-	}
-	
-/**
- * Return the list of artefacts glued to this structure element
- * @param structure
- * @param firstResult
- * @param maxResults
- * @return
- */
-	public List<AbstractArtefact> getArtefacts(PortfolioStructure structure, int firstResult, int maxResults) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select link.artefact from ").append(EPStructureToArtefactLink.class.getName()).append(" link")
-			.append(" where link.structureElement.key=:structureElKey order by link.order");
-		
-		TypedQuery<AbstractArtefact> query = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), AbstractArtefact.class)
-				.setParameter("structureElKey", structure.getKey());
-		if(firstResult > 0) {
-			query.setFirstResult(firstResult);
-		}
-		if(maxResults > 0) {
-			query.setMaxResults(maxResults);
-		}
-		return query.getResultList();
-	}
-	
-	/**
-	 * Return the number of artefacts hold by a structure element
-	 * @param structure
-	 * @return
-	 */
-	public int countArtefacts(PortfolioStructure structure) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select count(link) from ").append(EPStructureToArtefactLink.class.getName()).append(" link")
-			.append(" where link.structureElement=:structureEl");
-		
-		Number count = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), Number.class)
-				.setParameter("structureEl", structure)
-				.getSingleResult();
-		return count.intValue();
-	}
-	
-	/**
-	 * Count all artefacts (links) in a map
-	 */
-	protected int countArtefactsRecursively(PortfolioStructure structure) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select count(link) from ").append(EPStructureToArtefactLink.class.getName()).append(" link")
-			.append(" inner join link.structureElement structure ")
-			.append(" inner join structure.rootMap root")
-			.append(" where root=:structureEl");
-		
-		Number count = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), Number.class)
-				.setParameter("structureEl", structure)
-				.getSingleResult();
-		return count.intValue();
-	}
-	
-	protected int countArtefactsRecursively(PortfolioStructure structure, int res){
-		List<PortfolioStructure> childs = loadStructureChildren(structure);
-		res = res + countArtefacts(structure);
-		for (PortfolioStructure portfolioStructure : childs) {
-			res = countArtefactsRecursively(portfolioStructure, res); 
-		}
-		return res;
-	}
-	
-	protected boolean isArtefactInStructure(AbstractArtefact artefact, PortfolioStructure structure){
-		StringBuilder sb = new StringBuilder();
-		sb.append("select link.key from ").append(EPStructureToArtefactLink.class.getName()).append(" link")
-			.append(" where link.structureElement=:structureEl and link.artefact=:artefact");
-		
-		List<Long> key = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), Long.class)
-				.setParameter("structureEl", structure)
-				.setParameter("artefact", artefact)
-				.getResultList();
-		return key.size() == 1 ? true : false;
-	}
-	
-	/**
-	 * Number of children
-	 */
-	public int countStructureChildren(PortfolioStructure structure) {
-		if (structure == null) throw new NullPointerException();
-
-		StringBuilder sb = new StringBuilder();
-		sb.append("select count(link) from ").append(EPStructureToStructureLink.class.getName()).append(" link")
-			.append(" where link.parent=:structureEl");
-		
-		Number count = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), Number.class)
-				.setParameter("structureEl", structure)
-				.getSingleResult();
-		return count.intValue();
-	}
-	
-	/**
-	 * Retrieve the children structures
-	 * @param structure
-	 * @return
-	 */
-	protected List<PortfolioStructure> loadStructureChildren(PortfolioStructure structure) {
-		return loadStructureChildren(structure, -1, -1);
-	}
-	
-/**
- * 
- * @param structure
- * @param firstResult
- * @param maxResults
- * @return
- */
-	protected List<PortfolioStructure> loadStructureChildren(PortfolioStructure structure, int firstResult, int maxResults) {
-		if (structure == null) throw new NullPointerException();
-
-		StringBuilder sb = new StringBuilder();
-		sb.append("select link.child from ").append(EPStructureToStructureLink.class.getName()).append(" link")
-			.append(" where link.parent=:structureEl order by link.order");
-		
-		TypedQuery<PortfolioStructure> query = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), PortfolioStructure.class)
-				.setParameter("structureEl", structure);
-		if(firstResult > 0) {
-			query.setFirstResult(firstResult);
-		}
-		if(maxResults > 0) {
-			query.setMaxResults(maxResults);
-		}
-		return query.getResultList();
-	}
-	
-	/**
-	 * Retrieve the parent of the structure
-	 * @param structure
-	 * @return
-	 */
-	protected PortfolioStructure loadStructureParent(PortfolioStructureRef structure) {
-		if (structure == null) throw new NullPointerException();
-
-		StringBuilder sb = new StringBuilder();
-		sb.append("select link.parent from ").append(EPStructureToStructureLink.class.getName()).append(" link")
-		  .append(" where link.child.key=:structureElKey");
-		
-		List<PortfolioStructure> resources = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), PortfolioStructure.class)
-				.setParameter("structureElKey", structure.getKey())
-				.getResultList();
-
-		if(resources.isEmpty()) return null;
-		if(resources.size() == 1) return resources.get(0);
-		log.error("A structure child has more than one parent");
-		return null;
-	}
-	
-	protected Integer[] getRestrictionStatistics(PortfolioStructure structure) {
-		if (structure instanceof EPStructureElement) {
-			EPStructureElement structEl = (EPStructureElement) structure;
-			structEl = (EPStructureElement) reloadPortfolioStructure(structEl);
-			final List<CollectRestriction> restrictions = structEl.getCollectRestrictions();
-
-			if (restrictions != null && !restrictions.isEmpty()) {
-				int todo = 0;
-				int done = 0;
-				List<AbstractArtefact> artefacts = getArtefacts(structEl);
-				for (CollectRestriction cR : restrictions) {
-					if (RestrictionsConstants.MIN.equals(cR.getRestriction()) || RestrictionsConstants.EQUAL.equals(cR.getRestriction())) {
-						todo += cR.getAmount();
-						int actualCRCount = countRestrictionType(artefacts, cR);
-						done += actualCRCount;
-					}
-				}
-				return new Integer[] { done, todo };
-			}
-		}
-		return null;
-	}
-	
-	// count recursively
-	protected Integer[] getRestrictionStatisticsOfMap(PortfolioStructure structureMap, int done, int todo) {
-		final List<PortfolioStructure> children = loadStructureChildren(structureMap);
-		for (final PortfolioStructure child : children) {			
-			Integer[] childStat = getRestrictionStatisticsOfMap(child, done, todo);
-			done = childStat[0];
-			todo = childStat[1];
-		}	
-		// summarize
-		Integer[] statsArr = getRestrictionStatistics(structureMap);
-		if (statsArr != null){
-			done += statsArr[0];
-			todo += statsArr[1];			
-		}
-
-		return new Integer[] {done, todo};
-	}
-
-	/**
-	 * Add a link between a structure element and an artefact
-	 * @param author
-	 * @param artefact
-	 * @param structure
-	 * @return
-	 */
-	protected boolean addArtefactToStructure(Identity author, AbstractArtefact artefact, PortfolioStructure structure) {
-		if (author == null || artefact == null || structure == null) throw new NullPointerException();
-		if (structure instanceof EPStructureElement) {
-			EPStructureElement structureEl = (EPStructureElement)structure;
-			boolean canAdd = canAddArtefact(structureEl, artefact);
-			if(!canAdd) {
-				return false;
-			}
-			//save eventual changes
-			//reconnect to the session
-			structureEl = (EPStructureElement)dbInstance.loadObject(structureEl);
-
-			EPStructureToArtefactLink link = new EPStructureToArtefactLink();
-			link.setArtefact(artefact);
-			link.setStructureElement(structureEl);
-			link.setAuthor(author);
-			structureEl.getInternalArtefacts().add(link);
-			dbInstance.updateObject(structureEl);
-			return true;
-		}
-		return false;
-	}
-	
-	protected boolean canAddArtefact(EPStructureElement structureEl, AbstractArtefact newArtefact) {
-
-		List<CollectRestriction> restrictions = structureEl.getCollectRestrictions();
-		if(restrictions == null || restrictions.isEmpty()) return true;
-
-		boolean allOk = true;
-		List<String> artefactTypeAllowed = new ArrayList<>();
-		List<AbstractArtefact> artefacts = getArtefacts(structureEl);
-		artefacts.add(newArtefact);
-		
-		for(CollectRestriction restriction:restrictions) {
-			String type = restriction.getArtefactType();
-			int count = countRestrictionType(artefacts, restriction);
-			artefactTypeAllowed.add(type);
-
-			if(type.equals(newArtefact.getResourceableTypeName())) {
-				if(RestrictionsConstants.MAX.equals(restriction.getRestriction())) {
-					allOk &= (restriction.getAmount() > 0 && count <= restriction.getAmount());
-				} else if(RestrictionsConstants.EQUAL.equals(restriction.getRestriction())) {
-					allOk &= (restriction.getAmount() > 0 && count <= restriction.getAmount());
-				}
-			}
-		}
-
-		allOk &= artefactTypeAllowed.contains(newArtefact.getResourceableTypeName());
-		return allOk;
-	}
-	
-	protected boolean moveArtefactFromStructToStruct(AbstractArtefact artefact, PortfolioStructure oldParStruct, PortfolioStructure newParStruct) {
-		EPStructureElement oldEPSt = (EPStructureElement)dbInstance.loadObject((EPStructureElement)oldParStruct);
-		Identity author = oldEPSt.getInternalArtefacts().get(0).getAuthor();
-		if (author == null) return false; // old model without author, doesn't work!
-		
-		String reflexion = getReflexionForArtefactToStructureLink(artefact, oldParStruct);
-		
-		removeArtefactFromStructure(artefact, oldParStruct);
-		boolean allOk = false;
-		allOk = addArtefactToStructure(author, artefact, newParStruct);
-		if (allOk) return setReflexionForArtefactToStructureLink(artefact, newParStruct, reflexion);
-		return allOk;
-	}
-	
-	protected boolean moveArtefactInStruct(AbstractArtefact artefact, PortfolioStructure parStruct, int position) {
-		EPStructureElement structureEl = (EPStructureElement)dbInstance.loadObject((EPStructureElement)parStruct);
-		Identity author = structureEl.getInternalArtefacts().get(0).getAuthor();
-		if (author == null) return false; // old model without author, doesn't work!
-
-		List<EPStructureToArtefactLink> artefactLinks =  structureEl.getInternalArtefacts();
-		int currentIndex = -1;
-		for(EPStructureToArtefactLink link:artefactLinks) {
-			currentIndex++;
-			if(link.getArtefact().equals(artefact)) {
-				break;
-			}
-		}
-		
-		if(currentIndex > -1 && currentIndex < artefactLinks.size()) {
-			EPStructureToArtefactLink link = artefactLinks.remove(currentIndex);
-			if(position > currentIndex) {
-				position--;
-			}
-			artefactLinks.add(position, link);
-		}
-		return true;
-	}
-	
-	/**
-	 * Check the collect restriction against the structure element
-	 * @param structure
-	 * @return
-	 */
-	protected boolean checkCollectRestriction(PortfolioStructure structure) {
-		if (structure instanceof EPStructureElement) {
-			EPStructureElement structureEl = (EPStructureElement)structure;
-			List<CollectRestriction> restrictions = structureEl.getCollectRestrictions();
-			if(restrictions == null || restrictions.isEmpty()) return true;
-
-			boolean allOk = true;
-			List<String> artefactTypeAllowed = new ArrayList<>();
-			List<AbstractArtefact> artefacts = getArtefacts(structureEl);
-			for(CollectRestriction restriction:restrictions) {
-				int count = countRestrictionType(artefacts, restriction);
-				artefactTypeAllowed.add(restriction.getArtefactType());
-				boolean ok = true;
-				if(RestrictionsConstants.MAX.equals(restriction.getRestriction())) {
-					ok &= (restriction.getAmount() > 0 && count <= restriction.getAmount());
-				} else if(RestrictionsConstants.MIN.equals(restriction.getRestriction())) {
-					ok &= (restriction.getAmount() > 0 && count >= restriction.getAmount());
-				} else if(RestrictionsConstants.EQUAL.equals(restriction.getRestriction())) {
-					ok &= (restriction.getAmount() > 0 && count == restriction.getAmount());
-				} else {
-					ok &= false;
-				}
-				allOk &= ok;
-			}
-			
-			for(AbstractArtefact artefact:artefacts) {
-				allOk &= artefactTypeAllowed.contains(artefact.getResourceableTypeName());
-			}
-			return allOk;
-		}
-		return true;
-	}
-	
-	private int countRestrictionType(List<AbstractArtefact> artefacts, CollectRestriction restriction) {
-		int count = 0;
-		if(StringHelper.containsNonWhitespace(restriction.getArtefactType())) {
-			for(AbstractArtefact artefact:artefacts) {
-				if(restriction.getArtefactType().equals(artefact.getResourceableTypeName())) {
-					count++;
-				}
-			}
-		}
-		return count;
-	}
-	
-/**
- * Remove a link between a structure element and an artefact.
- * @param author The author of the link
- * @param artefact The artefact to link
- * @param structure The structure element
- * @return The link
- */
-	protected PortfolioStructure removeArtefactFromStructure(AbstractArtefact artefact, PortfolioStructure structure) {
-		return removeArtefactFromStructure(artefact, structure, false);
-	}
-
-	private PortfolioStructure removeArtefactFromStructure(AbstractArtefact artefact, PortfolioStructure structure, boolean updateFirst) {
-		if (artefact == null || structure == null) throw new NullPointerException();
-		if (artefact.getKey() == null) return null;//not persisted
-		if(structure instanceof EPStructureElement) {
-			//save eventual changes
-			if(updateFirst) {
-				dbInstance.updateObject(structure);
-			}
-			//reconnect to the session
-			EPStructureElement structureEl = (EPStructureElement)dbInstance.loadObject((EPStructureElement)structure);
-			EPStructureToArtefactLink linkToDelete = null;
-			for(Iterator<EPStructureToArtefactLink> linkIt=structureEl.getInternalArtefacts().iterator(); linkIt.hasNext(); ) {
-				EPStructureToArtefactLink link = linkIt.next();
-				if(link.getArtefact().getKey().equals(artefact.getKey())) {
-					linkIt.remove();
-					linkToDelete = link;
-					break;
-				}
-			}
-			//I have not set the cascade all delete 
-			if(linkToDelete != null) {
-				dbInstance.updateObject(structureEl);
-				dbInstance.deleteObject(linkToDelete);
-			}
-			return structureEl;
-		}
-		return null;
-	}
-	
-	/**
-	 * Move up an artefact in the list
-	 * @param structure
-	 * @param artefact
-	 */
-	public void moveUp(PortfolioStructure structure, AbstractArtefact artefact) {
-		move(structure, artefact, true);
-	}
-	
-	/**
-	 * Move down an artefact in the list
-	 * @param structure
-	 * @param artefact
-	 */
-	public void moveDown(PortfolioStructure structure, AbstractArtefact artefact) {
-		move(structure, artefact, false);
-	}
-	
-	private void move(PortfolioStructure structure, AbstractArtefact artefact, boolean up) {
-		if (artefact == null || structure == null) throw new NullPointerException();
-		if (structure instanceof EPStructureElement) {
-			//save eventual changes
-			dbInstance.updateObject(structure);
-			//reconnect to the session
-			EPStructureElement structureEl = (EPStructureElement)dbInstance.loadObject((EPStructureElement)structure);
-			List<EPStructureToArtefactLink> artefactLinks = structureEl.getInternalArtefacts();
-			int index = indexOf(artefactLinks, artefact);
-			if(up && index > 0) {
-				//swap the link with the previous link in the list
-				Collections.swap(artefactLinks, index, index-1);
-				dbInstance.updateObject(structureEl);
-			} else if(!up && (index >= 0 && index < (artefactLinks.size() - 1))) {
-				//swap the link with the next link in the list
-				Collections.swap(artefactLinks, index, index+1);
-				dbInstance.updateObject(structureEl);
-			}
-		}
-	}
-	
-	private int indexOf(List<EPStructureToArtefactLink> artefactLinks, AbstractArtefact artefact) {
-		int count = 0;
-		for(EPStructureToArtefactLink link:artefactLinks) {
-			if(link.getArtefact().getKey().equals(artefact.getKey())) {
-				return count;
-			}
-			count++;
-		}
-		return -1;
-	}
-
- /**
-  * Add a child structure to the parent structure.
-  * @param parentStructure
-  * @param childStructure
-  * @param destinationPos set to -1 to append at the end!
-  */
-	public void addStructureToStructure(PortfolioStructure parentStructure, PortfolioStructure childStructure, int destinationPos) {
-		if (parentStructure == null || childStructure == null) throw new NullPointerException();
-		if(childStructure instanceof EPStructureElement) {
-			//save eventual changes
-			dbInstance.updateObject(parentStructure);
-			//reconnect to the session (why reconnect? you update it already)
-			//parentStructure = (EPStructureElement)dbInstance.loadObject((EPStructureElement)parentStructure);
-			EPStructureToStructureLink link = new EPStructureToStructureLink();
-			link.setParent(parentStructure);
-			link.setChild(childStructure);
-
-			//refresh internal link to its root element
-			((EPStructureElement)childStructure).setRoot((EPStructureElement) parentStructure);
-			
-			List<EPStructureToStructureLink> internalChildren = ((EPStructureElement)parentStructure).getInternalChildren();
-			if (destinationPos == -1) {
-				internalChildren.add(link);
-			} else if(destinationPos <= internalChildren.size()) {
-				internalChildren.add(destinationPos, link);
-			} else {
-				internalChildren.add(link);
-			}
-		}
-	}
-	
-	protected boolean moveStructureToNewParentStructure(PortfolioStructure structToBeMvd,	PortfolioStructure oldParStruct, PortfolioStructure newParStruct, int destinationPos){
-		if (structToBeMvd == null || oldParStruct == null || newParStruct == null) throw new NullPointerException();
-		try { // try catch, as used in d&d TOC-tree, should still continue on error
-			removeStructure(oldParStruct, structToBeMvd);
-			addStructureToStructure(newParStruct, structToBeMvd, destinationPos);
-		} catch (Exception e) {
-			log.error("could not move structure " + structToBeMvd.getKey() + " from " + oldParStruct.getKey() + " to " + newParStruct.getKey(), e);
-			return false;
-		}
-		return true;
-	}
-	
-	public void deleteRootStructure(PortfolioStructure rootStructure) {
-		if (rootStructure == null) throw new NullPointerException();
-		if (rootStructure.getKey() == null) return;
-		if(rootStructure instanceof EPStructureElement) {
-			dbInstance.deleteObject(rootStructure);
-		}
-		
-	}
-	
- /**
-  * Remove a child structure from its parent structure.
-  * @param parentStructure
-  * @param childStructure
-  * 
-  * 
-  */
-	
-	// this has to be done recursively for pages, structs also!
-	// also remove the artefacts from each!
-	public void removeStructure(PortfolioStructure parentStructure, PortfolioStructure childStructure) {
-		if (childStructure == null) throw new NullPointerException();
-		if (childStructure.getKey() == null) return;//child not persisted
-		if (parentStructure == null) return; // cannot remove with no parent!
-		if(childStructure instanceof EPStructureElement) {
-			//save eventual changes
-			dbInstance.updateObject(parentStructure);
-			//reconnect to the session
-			
-			EPStructureToStructureLink linkToDelete = null;
-			EPStructureElement parentStructureEl = (EPStructureElement)dbInstance.loadObject((EPStructureElement)parentStructure);
-			for(Iterator<EPStructureToStructureLink> linkIt=parentStructureEl.getInternalChildren().iterator(); linkIt.hasNext(); ) {
-				EPStructureToStructureLink link = linkIt.next();
-				
-//				List<AbstractArtefact> thisStructsArtefacts = getArtefacts(link.getChild());
-//				for (AbstractArtefact artefact : thisStructsArtefacts) {
-//					removeArtefactFromStructure(artefact, link.getChild());					
-//				}
-				
-				if(link.getChild().getKey().equals(childStructure.getKey())) {
-					linkIt.remove();
-					linkToDelete = link;
-					break;
-				}
-			}
-
-			//I have not set the cascade all delete 
-			if(linkToDelete != null) {
-				dbInstance.updateObject(parentStructureEl);
-				dbInstance.deleteObject(linkToDelete);
-			}
-		}
-		if (parentStructure == childStructure) {
-			deleteRootStructure(childStructure);
-			return;
-		}
-	}
-	
-	/**
-	 * This method is only for templates.
-	 * @param res
-	 */
-	public void deletePortfolioMapTemplate(OLATResourceable res) {
-		PortfolioStructure map = loadPortfolioStructure(res);
-		if(map == null) {
-			return;//nothing to delete
-		}
-		removeStructureRecursively(map);
-		dbInstance.commit();
-	}
-	
-	public void removeStructureRecursively(PortfolioStructure struct) {
-		List<PortfolioStructure> children = loadStructureChildren(struct); 
-		for (PortfolioStructure childstruct : children) {
-			removeStructureRecursively(childstruct);
-		}
-		// remove artefact-links
-		List<AbstractArtefact> thisStructsArtefacts = getArtefacts(struct);
-		for (AbstractArtefact artefact : thisStructsArtefacts) {
-			removeArtefactFromStructure(artefact, struct, false);					
-		}
-		
-		// remove from parent
-		PortfolioStructure parent = loadStructureParent(struct);
-		if (parent == null && struct.getRoot() != null) parent = struct.getRoot();
-		removeStructure(parent, struct);
-		
-		// remove collect restriction
-		struct.getCollectRestrictions().clear();
-		
-		// remove sharings
-		if (struct instanceof EPAbstractMap) {
-			((EPAbstractMap)struct).getGroups().clear();
-		}
-		
-		// remove comments and ratings
-		CommentAndRatingService commentAndRatingService = CoreSpringFactory.getImpl(CommentAndRatingService.class);
-		commentAndRatingService.deleteAllIgnoringSubPath(struct.getOlatResource());
-		
-		// FXOLAT-431 remove subscriptions if the current struct is a map
-		if(struct instanceof EPAbstractMap){
-			SubscriptionContext subsContext = new SubscriptionContext(EPNotificationsHandler.TYPENNAME, struct.getResourceableId(), EPNotificationsHandler.TYPENNAME);
-			notificationsManager.delete(subsContext);
-		}
-		
-		// remove structure itself
-		struct = (EPStructureElement) dbInstance.loadObject((EPStructureElement)struct);
-		dbInstance.deleteObject(struct);
-		if (struct instanceof EPAbstractMap){
-			removeBaseGroup((EPAbstractMap)struct);
-		}
-		
-		//EPStructuredMapTemplates are linked to a repository entry
-		//which need the resource
-		if(!(struct instanceof EPStructuredMapTemplate)) {
-			resourceManager.deleteOLATResourceable(struct);
-		}
-	}
-	
-	private void removeBaseGroup(EPAbstractMap map) {
-		Set<EPStructureElementToGroupRelation> relations = map.getGroups();
-		if (relations != null) {
-			for(EPStructureElementToGroupRelation relation:relations) {
-				Group group = relation.getGroup();
-				if(relation.isDefaultGroup()) {
-					groupDao.removeMemberships(group);
-					groupDao.removeGroup(group);
-				}
-			}
-		}
-	}
-	
-	/**
-	 * Move a structure element up in the list
-	 * @param parentStructure
-	 * @param childStructure
-	 */
-	public void moveUp(PortfolioStructure parentStructure, PortfolioStructure childStructure) {
-		move(parentStructure, childStructure, true);
-	}
-	
-	/**
-	 * Move a structure element down in the list and save the parent and the list
-	 * @param parentStructure
-	 * @param childStructure
-	 */
-	public void moveDown(PortfolioStructure parentStructure, PortfolioStructure childStructure) {
-		move(parentStructure, childStructure, false);
-	}
-	
-	private void move(PortfolioStructure parentStructure, PortfolioStructure childStructure, boolean up) {
-		if (childStructure == null || parentStructure == null) throw new NullPointerException();
-		if (parentStructure instanceof EPStructureElement) {
-			//save eventual changes
-			dbInstance.updateObject(parentStructure);
-			//reconnect to the session
-			EPStructureElement structureEl = (EPStructureElement)dbInstance.loadObject((EPStructureElement)parentStructure);
-			List<EPStructureToStructureLink> structureLinks = structureEl.getInternalChildren();
-			int index = indexOf(structureLinks, childStructure);
-			if(up && index > 0) {
-				//swap the link with the previous link in the list
-				Collections.swap(structureLinks, index, index-1);
-				dbInstance.updateObject(structureEl);
-			} else if(!up && (index >= 0 && index < (structureLinks.size() - 1))) {
-				//swap the link with the next link in the list
-				Collections.swap(structureLinks, index, index+1);
-				dbInstance.updateObject(structureEl);
-			}
-		}
-	}
-	
-	protected boolean reOrderStructures(PortfolioStructure parent, PortfolioStructure orderSubject, int orderDest){
-		EPStructureElement structureEl = (EPStructureElement)dbInstance.loadObject((EPStructureElement)parent);
-		List<EPStructureToStructureLink> structureLinks = structureEl.getInternalChildren();
-
-		int oldPos = indexOf(structureLinks, orderSubject);		
-		if (oldPos != orderDest && oldPos != -1) {
-			EPStructureToStructureLink link = structureLinks.remove(oldPos);
-			 if(oldPos < orderDest) {
-				orderDest--;
-			}
-			 
-			 if(orderDest < 0) {
-				orderDest = 0;
-			} else if(orderDest > structureLinks.size()) {
-				orderDest = structureLinks.size() -1; // place at end
-			}
-			
-			structureLinks.add(orderDest, link);			
-			dbInstance.updateObject(structureEl);
-			return true;
-		}
-		return false;
-	}
-	
-	private int indexOf(List<EPStructureToStructureLink> structLinks, PortfolioStructure structure) {
-		int count = 0;
-		for(EPStructureToStructureLink link:structLinks) {
-			if(link.getChild().getKey().equals(structure.getKey())) {
-				return count;
-			}
-			count++;
-		}
-		return -1;
-	}
-
-	
-	protected void copyStructureRecursively(PortfolioStructure source, PortfolioStructure target, boolean withArtefacts) {
-		//all changes are overwritten
-		EPStructureElement targetEl = (EPStructureElement)target;
-		if(targetEl instanceof EPStructuredMap) {
-			((EPStructuredMap)targetEl).setCopyDate(new Date());
-		}
-		
-		//update the source
-		dbInstance.updateObject(source);
-		//reconnect to the session
-		EPStructureElement sourceEl = (EPStructureElement)source;
-		targetEl.setStyle(sourceEl.getStyle());
-		copyEPStructureElementRecursively(sourceEl, targetEl, withArtefacts, true);
-	}
-	
-	private void copyEPStructureElementRecursively(EPStructureElement sourceEl, EPStructureElement targetEl, boolean withArtefacts, boolean cloneRestrictions) {
-		//needed if the sourceEl come from a link. Hibernate doesn't initialize the list properly
-		sourceEl = (EPStructureElement)dbInstance.loadObject(sourceEl);
-		if(withArtefacts) {
-			List<EPStructureToArtefactLink> artefactLinks = sourceEl.getInternalArtefacts();
-			for(EPStructureToArtefactLink artefactLink:artefactLinks) {
-				EPStructureToArtefactLink link = instantiateClone(artefactLink);
-				link.setStructureElement(targetEl);// make the pseudo
-				targetEl.getInternalArtefacts().add(link); // bidirectional relations
-			}
-		}
-		
-		//clone the links
-		List<EPStructureToStructureLink> childLinks = sourceEl.getInternalChildren();
-		for(EPStructureToStructureLink childLink:childLinks) {
-			copy(childLink, targetEl, withArtefacts, false, cloneRestrictions); 
-		}
-		
-		savePortfolioStructure(targetEl);
-	}
-	
-	/**
-	 * Sync the tree structure recursively with or without artefacts
-	 * @param sourceEl
-	 * @param targetEl
-	 * @param withArtefacts
-	 */
-	protected void syncStructureRecursively(PortfolioStructure source, PortfolioStructure target, boolean withArtefacts) {
-		//all changes are overwritten
-		EPStructureElement sourceEl = (EPStructureElement)source;
-		
-		//update the source
-		dbInstance.updateObject(target);
-		//reconnect to the session
-		EPStructureElement targetEl = (EPStructureElement)dbInstance.loadObject((EPStructureElement)target);
-		syncEPStructureElementRecursively(sourceEl, targetEl, withArtefacts);
-	}
-	
-	/**
-	 * This sync method syncs the structure of the tree, collect restriction, title, description, representation-mode (table/miniview) 
-	 * 
-	 * @param sourceEl
-	 * @param targetEl
-	 * @param withArtefacts
-	 */
-	private void syncEPStructureElementRecursively(EPStructureElement sourceEl, EPStructureElement targetEl, boolean withArtefacts) {		
-		List<EPStructureToStructureLink> sourceRefLinks = new ArrayList<>(sourceEl.getInternalChildren());
-		List<EPStructureToStructureLink> targetRefLinks = new ArrayList<>(targetEl.getInternalChildren());
-
-		Comparator<EPStructureToStructureLink> COMPARATOR = new KeyStructureToStructureLinkComparator();
-
-		//remove deleted elements
-		for(Iterator<EPStructureToStructureLink> targetIt=targetEl.getInternalChildren().iterator(); targetIt.hasNext(); ) {
-			EPStructureToStructureLink targetLink = targetIt.next();
-			int index = indexOf(sourceRefLinks, targetLink, COMPARATOR);
-			if(index < 0) {
-				targetIt.remove();
-				removeStructureRecursively(targetLink.getChild());
-			}
-		}
-		
-		//add new element
-		for(EPStructureToStructureLink sourceRefLink:sourceRefLinks) {
-			int index = indexOf(targetRefLinks, sourceRefLink, COMPARATOR);
-			if(index < 0) {
-				//create a new structure element, dont clone restriction!
-				copy(sourceRefLink, targetEl, withArtefacts, false, false); 
-			}
-		}
-		
-		//sync attributes, representation and collect restrictions
-		copyOrUpdateCollectRestriction(sourceEl, targetEl, true);
-		targetEl.setArtefactRepresentationMode(sourceEl.getArtefactRepresentationMode());
-		targetEl.setStyle(sourceEl.getStyle());
-		targetEl.setTitle(sourceEl.getTitle());
-		targetEl.setDescription(sourceEl.getDescription());		
-		
-		//at this point, we must have the same content in the two list
-		//but with perhaps other ordering: reorder
-		List<EPStructureToStructureLink> targetLinks = targetEl.getInternalChildren();
-		for(int i=0; i<sourceRefLinks.size(); i++) {
-			EPStructureToStructureLink sourceRefLink = sourceRefLinks.get(i);
-			int index = indexOf(targetLinks, sourceRefLink, COMPARATOR);
-			if(index == i) {
-				//great, right at its position
-			} else if (index > i) {
-				Collections.swap(targetLinks, i, index);
-			} else {
-				//not possible
-			}
-			
-			//sync recursively
-			if(index >= 0) {
-				EPStructureElement subSourceEl = (EPStructureElement)sourceRefLink.getChild();
-				EPStructureElement subTargetEl = (EPStructureElement)targetLinks.get(i).getChild();
-				syncEPStructureElementRecursively(subSourceEl, subTargetEl, withArtefacts);
-			}
-		}
-		
-		targetEl = dbInstance.getCurrentEntityManager().merge(targetEl);
-	}
-	
-	private int indexOf(List<EPStructureToStructureLink> refLinks, EPStructureToStructureLink link, Comparator<EPStructureToStructureLink> comparator) {
-		int count=0;
-		for(EPStructureToStructureLink refLink:refLinks) {
-			if(comparator.compare(refLink, link) == 0) {
-				return count;
-			}
-			count++;
-		}
-		return -1;
-	}
-	
-	/**
-	 * Copy/Import structure elements recursively
-	 * @param refLink
-	 * @param targetEl
-	 * @param withArtefacts Copy the artefacts
-	 * @param importEl Don't load elements from the DB
-	 * @param cloneRestrictions should the collect-restrictions be applied? you could also do this manually by copyCollectRestriction()
-	 */
-	private void copy(EPStructureToStructureLink refLink, EPStructureElement targetEl, boolean withArtefacts, boolean importEl, boolean cloneRestrictions) {
-		EPStructureElement childSourceEl = (EPStructureElement)refLink.getChild();
-		EPStructureElement clonedChildEl = instantiateClone(refLink.getChild());
-		if(clonedChildEl == null) {
-			log.warn("Attempt to clone an unsupported structure type: " + refLink.getChild());
-		} else {
-			OLATResource resource = resourceManager.createOLATResourceInstance(clonedChildEl.getClass());
-			clonedChildEl.setOlatResource(resource);
-			//set root
-			if(targetEl.getRoot() == null) {
-				//it's the root element
-				clonedChildEl.setRoot(targetEl);
-			} else {
-				clonedChildEl.setRoot(targetEl.getRoot());
-			}
-			if(targetEl.getRootMap() == null && targetEl instanceof PortfolioStructureMap) {
-				clonedChildEl.setRootMap((PortfolioStructureMap)targetEl);
-			} else {
-				clonedChildEl.setRootMap(targetEl.getRootMap());
-			}
-			if (!importEl) clonedChildEl.setStructureElSource(childSourceEl.getKey());
-			
-			if (cloneRestrictions) copyOrUpdateCollectRestriction(childSourceEl, clonedChildEl, true);
-			if(importEl) {
-				importEPStructureElementRecursively(childSourceEl, clonedChildEl);
-			} else {
-				copyEPStructureElementRecursively(childSourceEl, clonedChildEl, withArtefacts, cloneRestrictions);
-			}
-
-			EPStructureToStructureLink link = new EPStructureToStructureLink();
-			link.setParent(targetEl);
-			link.setChild(clonedChildEl);
-			targetEl.getInternalChildren().add(link);
-		}
-	}
-	
-	private EPStructureToArtefactLink instantiateClone(EPStructureToArtefactLink link) {
-		EPStructureToArtefactLink clone = new EPStructureToArtefactLink();
-		clone.setArtefact(link.getArtefact());
-		clone.setAuthor(link.getAuthor());
-		clone.setCreationDate(new Date());
-		clone.setReflexion(link.getReflexion());
-		return clone;
-	}
-	
-	private EPStructureElement instantiateClone(PortfolioStructure source) {
-		EPStructureElement targetEl = null;
-		//don't forget the inheritance 
-		if (source instanceof EPPage) {
-			targetEl = new EPPage();
-			targetEl.setTitle(((EPPage) source).getTitle());
-			targetEl.setDescription(((EPPage) source).getDescription());
-		} else if(source instanceof EPStructureElement) {
-			targetEl = new EPStructureElement();
-			targetEl.setTitle(((EPStructureElement) source).getTitle());
-			targetEl.setDescription(((EPStructureElement) source).getDescription());
-		}
-		return targetEl;
-	}
-	
-	/**
-	 * 
-	 * @param source
-	 * @param target
-	 * @param update if true, the old existing restrictions will be overwritten
-	 */
-	private void copyOrUpdateCollectRestriction(PortfolioStructure source, PortfolioStructure target, boolean update) {
-		if(source == null || target == null) {
-			return;
-		}
-		List<CollectRestriction> targetRestrictions = target.getCollectRestrictions();
-		if ((source.getCollectRestrictions() == null || source.getCollectRestrictions().isEmpty()) && (target.getCollectRestrictions() != null && !target.getCollectRestrictions().isEmpty()) && update){
-			// remove former existing restrictions
-			targetRestrictions.clear();
-			return;
-		}
-		
-		if (update) {
-			targetRestrictions.clear();
-		} 
-		for(CollectRestriction sourceRestriction: source.getCollectRestrictions()) {
-			CollectRestriction targetRestriction = new CollectRestriction();
-			targetRestriction.setArtefactType(sourceRestriction.getArtefactType());
-			targetRestriction.setAmount(sourceRestriction.getAmount());
-			targetRestriction.setRestriction(sourceRestriction.getRestriction());
-			targetRestrictions.add(targetRestriction);
-		}
-	}
-	
-	public boolean isTemplateInUse(PortfolioStructureMap template, OLATResourceable targetOres,
-			String targetSubPath, String targetBusinessPath) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select count(map) from ").append(EPStructuredMap.class.getName()).append(" map")
-			.append(" where map.structuredMapSource=:template");
-		if (targetOres != null) {
-			sb.append(" and map.targetResource.resourceableId=:resourceId")
-				.append(" and map.targetResource.resourceableTypeName=:resourceType");
-		}
-		if (targetSubPath != null) {
-			sb.append(" and map.targetResource.subPath=:subPath");
-		}
-		if (targetBusinessPath != null) {
-			sb.append(" and map.targetResource.businessPath=:businessPath");
-		}
-
-		TypedQuery<Number> query = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), Number.class)
-				.setParameter("template", template);
-		if (targetOres != null) {
-			query.setParameter("resourceId", targetOres.getResourceableId());
-			query.setParameter("resourceType", targetOres.getResourceableTypeName());
-		}
-		if (targetSubPath != null) {
-			query.setParameter("subPath", targetSubPath);
-		}
-		if (targetBusinessPath != null) {
-			query.setParameter("businessPath", targetBusinessPath);
-		}
-		
-		Number count = query.getSingleResult();
-		return count.intValue() > 0;
-	}
-	
-	public PortfolioStructureMap loadPortfolioStructuredMap(IdentityRef identity, PortfolioStructureMap template,
-			OLATResourceable targetOres, String targetSubPath, String targetBusinessPath) {
-		if (template == null) throw new NullPointerException();
-		if (!(template instanceof EPStructuredMapTemplate)) throw new AssertException("Only template are acceptable");
-
-		StringBuilder sb = new StringBuilder();
-		sb.append("select map from ").append(EPStructuredMap.class.getName()).append(" map")
-		  .append(" left join fetch map.targetResource as targetResource")
-		  .append(" inner join map.groups as relGroup on relGroup.defaultGroup=true")
-		  .append(" inner join relGroup.group as baseGroup")
-		  .append(" where map.structuredMapSource=:template");
-		if (targetOres != null) {
-			sb.append(" and targetResource.resourceableId=:resourceId")
-			  .append(" and targetResource.resourceableTypeName=:resourceType");
-		}
-		if (targetSubPath != null) {
-			sb.append(" and targetResource.subPath=:subPath");
-		}
-		if (targetBusinessPath != null) {
-			sb.append(" and targetResource.businessPath=:businessPath");
-		}
-		sb.append(" and exists (select membership from bgroupmember as membership " )
-		  .append("    where baseGroup=membership.group and membership.identity.key=:identityKey and membership.role='").append(GroupRoles.owner.name()).append("'")
-		  .append(" )");
-		
-		TypedQuery<PortfolioStructureMap> query = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), PortfolioStructureMap.class)
-				.setParameter("template", template)
-				.setParameter("identityKey", identity.getKey());
-		if (targetOres != null) {
-			query.setParameter("resourceId", targetOres.getResourceableId());
-			query.setParameter("resourceType", targetOres.getResourceableTypeName());
-		}
-		if (targetSubPath != null) {
-			query.setParameter("subPath", targetSubPath);
-		}
-		if (targetBusinessPath != null) {
-			query.setParameter("businessPath", targetBusinessPath);
-		}
-		
-		List<PortfolioStructureMap> maps = query.getResultList();
-		// if not found, it is an empty list
-		return maps.isEmpty() ? null : maps.get(0);
-	}
-	
-	/**
-	 * 
-	 * @param identity Mandatory
-	 * @param targetOres Mandatory
-	 * @param targetSubPath Optional
-	 * @param targetBusinessPath Optional
-	 * @return
-	 */
-	public List<PortfolioStructureMap> loadPortfolioStructuredMaps(IdentityRef identity,
-			OLATResourceable targetOres, String targetSubPath, String targetBusinessPath) {
-
-		StringBuilder sb = new StringBuilder();
-		sb.append("select map from ").append(EPStructuredMap.class.getName()).append(" map")
-		  .append(" inner join map.groups as relGroup on relGroup.defaultGroup=true")
-		  .append(" inner join relGroup.group as baseGroup")
-		  .append(" inner join fetch map.targetResource as targetResource")
-		  .append(" where targetResource.resourceableId=:resourceId and targetResource.resourceableTypeName=:resourceType");
-
-		if (targetSubPath != null) {
-			sb.append(" and targetResource.subPath=:subPath");
-		}
-		if (targetBusinessPath != null) {
-			sb.append(" and targetResource.businessPath=:businessPath");
-		}
-		sb.append(" and exists (select membership from bgroupmember as membership " )
-		  .append("    where baseGroup=membership.group and membership.identity.key=:identityKey and membership.role='").append(GroupRoles.owner.name()).append("'")
-		  .append(" )");
-		
-		TypedQuery<PortfolioStructureMap> query = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), PortfolioStructureMap.class)
-				.setParameter("identityKey", identity.getKey())
-				.setParameter("resourceId", targetOres.getResourceableId())
-				.setParameter("resourceType", targetOres.getResourceableTypeName());
-
-		if (targetSubPath != null) {
-			query.setParameter("subPath", targetSubPath);
-		}
-		if (targetBusinessPath != null) {
-			query.setParameter("businessPath", targetBusinessPath);
-		}
-		return query.getResultList();
-	}
-	
-	/**
-	 * Load the repository entry of a template with the map key
-	 * @param key The template key
-	 * @return The repository entry
-	 */
-	public RepositoryEntry loadPortfolioRepositoryEntryByMapKey(Long key) {
-		if (key == null) throw new NullPointerException();
-		
-		StringBuilder sb = new StringBuilder();
-		sb.append("select repo from ").append(RepositoryEntry.class.getName()).append(" repo")
-			.append(" where repo.olatResource in (select map.olatResource from ")
-			.append(EPStructuredMapTemplate.class.getName())
-			.append(" map where map.key=:key")
-			.append(")");
-		
-		List<RepositoryEntry> entries = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), RepositoryEntry.class)
-				.setParameter("key", key)
-				.getResultList();
-		// if not found, it is an empty list
-		if (entries.isEmpty()) return null;
-		return entries.get(0);
-	}
-
-	/**
-	 * @param olatResourceable cannot be null
-	 * @return The structure element or null if not found
-	 */
-	public PortfolioStructure loadPortfolioStructure(OLATResourceable olatResourceable) {
-		if (olatResourceable == null) throw new NullPointerException();
-		
-		OLATResource resource = resourceManager.findResourceable(olatResourceable);
-		if (resource == null) return null;
-		
-		StringBuilder sb = new StringBuilder();
-		sb.append("select element from ").append(EPStructureElement.class.getName()).append(" element")
-			.append(" where element.olatResource=:resource");
-		
-		List<PortfolioStructure> resources = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), PortfolioStructure.class)
-				.setParameter("resource", resource)
-				.getResultList();
-		// if not found, it is an empty list
-		return resources.isEmpty() ? null : resources.get(0);
-	}
-	
-	/**
-	 * @param olatResourceable cannot be null
-	 * @return The structure element or null if not found
-	 */
-	public EPMapShort loadMapShortByResourceId(Long resourceableId) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select element from ").append(EPMapShort.class.getName()).append(" element")
-		  .append(" inner join fetch element.olatResource resource")
-			.append(" where resource.resId=:resourceId and resource.resName in ('EPDefaultMap','EPStructuredMap','EPStructuredMapTemplate')");
-		
-		List<EPMapShort> resources = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), EPMapShort.class)
-				.setParameter("resourceId", resourceableId)
-				.getResultList();
-		// if not found, it is an empty list
-		if (resources.isEmpty()) return null;
-		return resources.get(0);
-	}
-	
-	/**
-	 * Load a portfolio structure by its primary key
-	 * @param key cannot be null
-	 * @return The structure element or null if not found
-	 */
-	public PortfolioStructure loadPortfolioStructureByKey(Long key) {
-		if (key == null) throw new NullPointerException();
-		
-		StringBuilder sb = new StringBuilder();
-		sb.append("select element from ").append(EPStructureElement.class.getName()).append(" element")
-		  .append(" left join fetch element.olatResource as oRes")
-		  .append(" where element.key=:key");
-		
-		List<PortfolioStructure> resources = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), PortfolioStructure.class)
-				.setParameter("key", key)
-				.getResultList();
-		// if not found, it is an empty list
-		if (resources.isEmpty()) return null;
-		return resources.get(0);
-	}
-	
-	/**
-	 * Reload an object
-	 * @param structure
-	 * @return The reloaded object or null if not found
-	 */
-	public PortfolioStructure reloadPortfolioStructure(PortfolioStructure structure) {
-		if (structure == null) throw new NullPointerException();
-		try {
-			return dbInstance.getCurrentEntityManager()
-					.find(EPStructureElement.class, structure.getKey());
-		} catch (ObjectNotFoundException e) {
-			return null;
-		}
-	}
-	
-	public OLATResource loadOlatResourceFromStructureElByKey(Long key) {
-		if (key == null) throw new NullPointerException();
-
-		StringBuilder sb = new StringBuilder();
-		sb.append("select element.olatResource from ").append(EPStructureElement.class.getName()).append(" element")
-			.append(" where element.key=:key or element.olatResource.resId=:key ");
-		
-		List<OLATResource> resources = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), OLATResource.class)
-				.setParameter("key", key)
-				.getResultList();
-		// if not found, it is an empty list
-		if (resources.isEmpty()) return null;
-		return resources.get(0);
-	}
-
-/**
- * Create a basic structure element
- * @param title
- * @param description
- * @return The structure element
- */
-	protected PortfolioStructure createPortfolioStructure(PortfolioStructure root,  String title, String description) {
-		EPStructureElement el = new EPStructureElement();
-		el.setRoot((EPStructureElement)root);
-		if(root != null && root.getRootMap() == null && root instanceof PortfolioStructureMap) {
-			el.setRootMap((PortfolioStructureMap)root);
-		} else if (root != null) {
-			el.setRootMap(root.getRootMap());
-		}
-		return fillStructureElement(el, title, description);
-	}
-	
-/**
- * Create a page element
- * @param title
- * @param description
- * @return The structure element
- */
-	protected PortfolioStructure createPortfolioPage(PortfolioStructure root, String title, String description) {
-		EPPage el = new EPPage();
-		el.setRoot((EPStructureElement)root);
-		if(root != null && root.getRootMap() == null && root instanceof PortfolioStructureMap) {
-			el.setRootMap((PortfolioStructureMap)root);
-		} else if(root != null) {
-			el.setRootMap(root.getRootMap());
-		}
-		return fillStructureElement(el, title, description);
-	}
-	
-	protected PortfolioStructureMap createPortfolioStructuredMap(PortfolioStructureMap template,
-			Identity identity, String title, String description, OLATResourceable targetOres, String targetSubPath, String targetBusinessPath) {
-		EPStructuredMap el = new EPStructuredMap();
-		el.setStructuredMapSource((EPStructuredMapTemplate)template);
-		el.setStructureElSource(template.getKey());
-		
-		if(template != null) {
-			copyOrUpdateCollectRestriction(template, el, false);
-		}
-		
-		EPTargetResource targetResource = el.getTargetResource();
-		if(targetOres != null) {
-			targetResource.setResourceableId(targetOres.getResourceableId());
-			targetResource.setResourceableTypeName(targetOres.getResourceableTypeName());
-		}
-		if(StringHelper.containsNonWhitespace(targetSubPath)) {
-			targetResource.setSubPath(targetSubPath);
-		}
-		if(StringHelper.containsNonWhitespace(targetBusinessPath)) {
-			targetResource.setBusinessPath(targetBusinessPath);
-		}
-		
-		fillStructureElement(el, title, description);
-		
-		//create security group
-		EPStructureElementToGroupRelation ownerGroup = createBaseGroup(el, identity);
-		Set<EPStructureElementToGroupRelation> relations = new HashSet<>();
-		relations.add(ownerGroup);
-		el.setGroups(relations);
-		
-		return el;
-	}
-	
-	protected PortfolioStructureMap createPortfolioDefaultMap(Identity identity, String title, String description) {
-		EPDefaultMap el = new EPDefaultMap();
-		
-		fillStructureElement(el, title, description);
-
-		//create security group
-		EPStructureElementToGroupRelation ownerGroup = createBaseGroup(el, identity);
-		Set<EPStructureElementToGroupRelation> relations = new HashSet<>();
-		relations.add(ownerGroup);
-		el.setGroups(relations);
-		
-		return el;
-	}
-	
-	protected PortfolioStructureMap createPortfolioDefaultMap(String title, String description) {
-		EPDefaultMap el = new EPDefaultMap();
-		fillStructureElement(el, title, description);
-		return el;
-	}
-	
-	protected EPStructureElement fillStructureElement(EPStructureElement el, String title, String description) {
-		el.setTitle(title);
-		el.setDescription(description);
-		OLATResource resource = resourceManager.createOLATResourceInstance(el.getClass());
-		el.setOlatResource(resource);
-		dbInstance.getCurrentEntityManager().persist(resource);
-		return el;
-	}
-	
-	private EPStructureElement fillStructureElement(EPStructureElement el, String title, String description, OLATResource resource) {
-		el.setTitle(title);
-		el.setDescription(description);
-		el.setOlatResource(resource);
-		if(resource.getKey() == null) {
-			dbInstance.getCurrentEntityManager().persist(resource);
-		}
-		return el;
-	}
-	
-	/**
-	 * Import the structure.
-	 * @param root
-	 * @param identity
-	 * @return
-	 */
-	public PortfolioStructureMap importPortfolioMapTemplate(PortfolioStructure root, OLATResource resource) {
-		EPStructuredMapTemplate el = new EPStructuredMapTemplate();
-		
-		fillStructureElement(el, root.getTitle(), root.getDescription(), resource);
-		EPStructuredMapTemplate rootTemp = (EPStructuredMapTemplate) root;
-		rootTemp.setStructureElSource(null);
-		
-		el.setStyle(((EPStructureElement)root).getStyle()); 
-		importEPStructureElementRecursively((EPStructureElement)root, el);
-		
-		//create an empty group
-		Group ownerGroup = groupDao.createGroup();
-		EPStructureElementToGroupRelation relation = createBaseRelation(el, ownerGroup);
-		Set<EPStructureElementToGroupRelation> relations = new HashSet<>();
-		relations.add(relation);
-		el.setGroups(relations);
-		
-		return el;
-	}
-	
-	private void importEPStructureElementRecursively(EPStructureElement sourceEl, EPStructureElement targetEl) {
-
-		
-		//clone the links
-		List<EPStructureToStructureLink> childLinks = sourceEl.getInternalChildren();
-		for(EPStructureToStructureLink childLink:childLinks) {
-			EPStructureElement childSourceEl = (EPStructureElement) childLink.getChild();
-			childSourceEl.setStructureElSource(null); // remove source-info on imports.
-			copy(childLink, targetEl, false, true, true); 
-		}
-		
-		savePortfolioStructure(targetEl);
-	}
-
-	/**
-	 * Create an OLAT Resource with the type of a template map.
-	 * @return
-	 */
-	public OLATResource createPortfolioMapTemplateResource() {
-		OLATResource resource = resourceManager.createOLATResourceInstance(EPStructuredMapTemplate.class);
-		return resource;
-	}
-	
-	/**
-	 * Create a template map with the given repsoitory entry and olat resource (in the repository entry).
-	 * The repository entry must already be persisted.
-	 * @param identity
-	 * @param entry
-	 * @return
-	 */
-	public PortfolioStructureMap createAndPersistPortfolioMapTemplateFromEntry(Identity identity, RepositoryEntry entry) {
-		EPStructuredMapTemplate el = (EPStructuredMapTemplate)loadPortfolioStructure(entry.getOlatResource());
-		if(el == null) {
-			el = new EPStructuredMapTemplate();
-		}
-		el.setTitle(entry.getDisplayname());
-		el.setDescription(entry.getDescription());
-		el.setOlatResource(entry.getOlatResource());
-		
-		//create security group
-		Group group = repositoryEntyRelationDao.getDefaultGroup(entry);
-		if(group == null) {
-			group = groupDao.createGroup();
-			groupDao.addMembershipTwoWay(group, identity, GroupRoles.owner.name());
-		}
-		
-		EPStructureElementToGroupRelation relation = createBaseRelation(el, group);
-		Set<EPStructureElementToGroupRelation> relations = new HashSet<>();
-		relations.add(relation);
-		el.setGroups(relations);
-		dbInstance.saveObject(el);
-		return el;
-	}
-	
-	/**
-	 * Add an author to the repository entry linked to the map
-	 * @param map
-	 * @param author
-	 */
-	public void addAuthor(PortfolioStructureMap map, Identity author) {
-		if(map instanceof EPStructuredMapTemplate) {
-			EPStructuredMapTemplate mapImpl = (EPStructuredMapTemplate)map;
-			RepositoryEntry re = repositoryManager.lookupRepositoryEntry(mapImpl.getOlatResource(), true);
-			if (!repositoryEntyRelationDao.hasRole(author, re, GroupRoles.owner.name())) {
-				repositoryEntyRelationDao.addRole(author, re, GroupRoles.owner.name());
-			}
-		}
-	}
-	
-	/**
-	 * Remove an author to repository entry linked to the map
-	 * @param map
-	 * @param author
-	 */
-	public void removeAuthor(PortfolioStructureMap map, Identity author) {
-		if(map instanceof EPStructuredMapTemplate) {
-			EPStructuredMapTemplate mapImpl = (EPStructuredMapTemplate)map;
-			RepositoryEntry re = repositoryManager.lookupRepositoryEntry(mapImpl.getOlatResource(), true);
-			if (repositoryEntyRelationDao.hasRole(author, re, GroupRoles.owner.name())) {
-				repositoryEntyRelationDao.removeRole(author, re, GroupRoles.owner.name());
-			}
-		}
-	}
-	
-	private EPStructureElementToGroupRelation createBaseGroup(EPStructureElement element, Identity author) {
-		//create security group
-		Group ownerGroup = groupDao.createGroup();
-		EPStructureElementToGroupRelation relation = new EPStructureElementToGroupRelation();
-		relation.setDefaultGroup(true);
-		relation.setCreationDate(new Date());
-		relation.setGroup(ownerGroup);
-		relation.setStructureElement(element);
-		groupDao.addMembershipTwoWay(ownerGroup, author, GroupRoles.owner.name());
-		return relation;
-	}
-	
-	protected EPStructureElementToGroupRelation createBaseRelation(EPStructureElement element, Group ownerGroup) {
-		//create security group
-		EPStructureElementToGroupRelation relation = new EPStructureElementToGroupRelation();
-		relation.setDefaultGroup(true);
-		relation.setCreationDate(new Date());
-		relation.setGroup(ownerGroup);
-		relation.setStructureElement(element);
-		return relation;
-	}
-
-	/**
-	 * Add or update a restriction to the collection of artefacts for a given structure element
-	 * @param structure
-	 * @param artefactType
-	 * @param restriction
-	 * @param amount
-	 */
-	public void addCollectRestriction(PortfolioStructure structure, String artefactType, String restriction, int amount) {
-		if(structure == null) throw new NullPointerException("Structure cannot be null");
-		
-		EPStructureElement structEl = (EPStructureElement)structure;
-		List<CollectRestriction> restrictions = structEl.getCollectRestrictions();
-
-		CollectRestriction cr = new CollectRestriction();
-		cr.setArtefactType(artefactType);
-		cr.setRestriction(restriction);
-		cr.setAmount(amount);
-		restrictions.add(cr);
-	}
-	
-	protected void submitMap(EPStructuredMap map) {
-		map.setStatus(StructureStatusEnum.CLOSED);
-		map.setReturnDate(new Date());
-		dbInstance.updateObject(map);
-	}
-
-	public void savePortfolioStructure(PortfolioStructure portfolioStructure) {
-		if(portfolioStructure instanceof PersistentObject) {
-			PersistentObject persistentStructure = (PersistentObject)portfolioStructure;
-			if(persistentStructure.getKey() == null) {
-				if(portfolioStructure.getOlatResource().getKey() == null) {
-					dbInstance.getCurrentEntityManager().persist(portfolioStructure.getOlatResource());
-				}
-				dbInstance.getCurrentEntityManager().persist(portfolioStructure);
-			} else {
-				dbInstance.updateObject(portfolioStructure);
-			}
-		}
-	}
-	
-
-	private static class KeyStructureToStructureLinkComparator implements Comparator<EPStructureToStructureLink>, Serializable {
-
-		private static final long serialVersionUID = 366101659547497002L;
-
-		public KeyStructureToStructureLinkComparator() {
-			//
-		}
-		
-		@Override
-		public int compare(EPStructureToStructureLink o1, EPStructureToStructureLink o2) {
-			if(o1 == null) return -1;
-			if(o2 == null) return 1;
-			
-			PortfolioStructure ps1 = o1.getChild();
-			PortfolioStructure ps2 = o2.getChild();
-			if(ps1 instanceof EPStructureElement && ps2 instanceof EPStructureElement) {
-				EPStructureElement eps1 = (EPStructureElement)ps1;
-				EPStructureElement eps2 = (EPStructureElement)ps2;
-				
-				Long t1 = eps1.getStructureElSource() == null ? eps1.getKey() : eps1.getStructureElSource();
-				Long t2 = eps2.getStructureElSource() == null ? eps2.getKey() : eps2.getStructureElSource();
-				
-				if(t1 == null) return -1;
-				if(t2 == null) return 1;
-				return t1.compareTo(t2);
-			}
-			return -1;
-		}
-	}
-
-
-	protected boolean setReflexionForArtefactToStructureLink(AbstractArtefact artefact, PortfolioStructure structure, String reflexion) {
-		EPStructureElement structureEl = (EPStructureElement)dbInstance.loadObject((EPStructureElement)structure);
-		List<EPStructureToArtefactLink> links = structureEl.getInternalArtefacts();
-		boolean changed = false;
-		for (EPStructureToArtefactLink epStructureToArtefactLink : links) {
-			if (epStructureToArtefactLink.getArtefact().getKey().equals(artefact.getKey())){
-				epStructureToArtefactLink.setReflexion(reflexion);
-				if(epStructureToArtefactLink.getKey() == null) {
-					dbInstance.saveObject(epStructureToArtefactLink);
-				} else {
-					dbInstance.updateObject(epStructureToArtefactLink);
-				}
-				changed = true;
-				break;
-			}
-		}
-		//savePortfolioStructure(structure);
-		return changed;
-	}
-	
-	protected String getReflexionForArtefactToStructureLink(AbstractArtefact artefact, PortfolioStructure structure){
-		if (structure == null) return null;
-		EPStructureElement structureEl = (EPStructureElement)dbInstance.loadObject((EPStructureElement)structure);
-		List<EPStructureToArtefactLink> links = structureEl.getInternalArtefacts();
-		for (EPStructureToArtefactLink epStructureToArtefactLink : links) {
-			if (epStructureToArtefactLink.getArtefact().getKey().equals(artefact.getKey())){
-				return epStructureToArtefactLink.getReflexion();
-			}
-		}
-		return null;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/manager/EPXStreamHandler.java b/src/main/java/org/olat/portfolio/manager/EPXStreamHandler.java
deleted file mode 100644
index a716a77fc8ab1d8d9227c1782835f31f68359110..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/manager/EPXStreamHandler.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.manager;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-import java.util.zip.ZipOutputStream;
-
-import javax.xml.transform.Source;
-import javax.xml.transform.Templates;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.TransformerFactoryConfigurationError;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.logging.log4j.Logger;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.xml.XStreamHelper;
-import org.olat.portfolio.model.restriction.CollectRestriction;
-import org.olat.portfolio.model.structel.EPAbstractMap;
-import org.olat.portfolio.model.structel.EPDefaultMap;
-import org.olat.portfolio.model.structel.EPPage;
-import org.olat.portfolio.model.structel.EPStructureElement;
-import org.olat.portfolio.model.structel.EPStructureToArtefactLink;
-import org.olat.portfolio.model.structel.EPStructureToStructureLink;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.olat.portfolio.model.structel.EPStructuredMapTemplate;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.resource.OLATResourceImpl;
-
-import com.thoughtworks.xstream.XStream;
-
-/**
- * 
- * 
- * 
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPXStreamHandler {
-	
-	private static final Logger log = Tracing.createLoggerFor(EPXStreamHandler.class);
-
-	private static final XStream myStream = XStreamHelper.createXStreamInstanceForDBObjects();
-	private static Templates filterArtefactsTemplates;
-	
-	static { // initialize supported types
-		myStream.alias("defaultMap", EPDefaultMap.class);
-		myStream.alias("structureMap", EPStructuredMap.class);
-		myStream.alias("templateMap", EPStructuredMapTemplate.class);
-		myStream.alias("structure", EPStructureElement.class);
-		myStream.alias("page", EPPage.class);
-		myStream.alias("structureToArtefact", EPStructureToArtefactLink.class);
-		myStream.alias("structureToStructure", EPStructureToStructureLink.class);
-		myStream.alias("collectionRestriction", CollectRestriction.class);
-		myStream.alias("olatResource", OLATResourceImpl.class);
-		myStream.alias("OLATResource", OLATResourceImpl.class);
-		myStream.omitField(EPAbstractMap.class, "ownerGroup"); // see also OLAT-6344
-		myStream.omitField(EPAbstractMap.class, "groups"); // see also OLAT-6344
-		
-		try {
-			InputStream xsltIn = EPXStreamHandler.class.getResourceAsStream("portfolio_without_artefacts.xsl");
-			Source xsltSource = new StreamSource(xsltIn);
-			filterArtefactsTemplates = TransformerFactory.newInstance().newTemplates(xsltSource);
-		} catch (TransformerConfigurationException e) {
-			log.error("", e);
-		} catch (TransformerFactoryConfigurationError e) {
-			log.error("", e);
-		}
-	}
-	
-	public static final PortfolioStructure copy(PortfolioStructure structure) {
-		String stringuified = myStream.toXML(structure);
-		PortfolioStructure newStructure = (PortfolioStructure)myStream.fromXML(stringuified);
-		return newStructure;
-	}
-	
-	public static final PortfolioStructure getAsObject(File fMapXml, boolean withArtefacts) {
-		try {
-			//extract from zip
-			InputStream in = new FileInputStream(fMapXml);
-			ZipInputStream zipIn = new ZipInputStream(in);
-			//open the entry of the map
-			zipIn.getNextEntry();
-
-			Writer buffer = new StringWriter();
-			if(!withArtefacts) {
-				Transformer transformer = filterArtefactsTemplates.newTransformer();
-				transformer.transform(new StreamSource(zipIn), new StreamResult(buffer));
-			} else {
-				IOUtils.copy(zipIn, buffer, "UTF-8");
-			}
-
-			PortfolioStructure struct = (PortfolioStructure) myStream.fromXML(buffer.toString());
-			// OLAT-6344: reset ownerGroup from earlier exports. A new group is created by import in ePFMgr.importPortfolioMapTemplate() later on anyway.
-			((EPAbstractMap) struct).setGroups(null); 
-			return struct;
-		} catch (Exception e) {
-			log.error("Cannot export this map: " + fMapXml, e);
-		}
-		return null;
-	}
-	
-	public static final InputStream toStream(PortfolioStructure structure)
-	throws IOException {
-		try {
-			//prepare a zip
-			ByteArrayOutputStream out = new ByteArrayOutputStream();
-			ZipOutputStream zipOut = new ZipOutputStream(out);
-			zipOut.putNextEntry(new ZipEntry("map.xml"));
-			myStream.toXML(structure, zipOut);
-			zipOut.closeEntry();
-			zipOut.close();
-			
-			//prepare media resource
-			byte[] outArray = out.toByteArray();
-			IOUtils.closeQuietly(out);
-			return new ByteArrayInputStream(outArray);
-		} catch (IOException e) {
-			log.error("Cannot export this map: " + structure, e);
-			return null;
-		}
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/manager/portfolio_without_artefacts.xsl b/src/main/java/org/olat/portfolio/manager/portfolio_without_artefacts.xsl
deleted file mode 100644
index 3bc232532d8e7cf7fe578a3066204fe2701b86ac..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/manager/portfolio_without_artefacts.xsl
+++ /dev/null
@@ -1,10 +0,0 @@
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <xsl:template match="artefacts">
-  	<!-- Ommit artefacts -->
-  </xsl:template>
-  <xsl:template match="@*|node()">
-    <xsl:copy>
-      <xsl:apply-templates select="@*|node()"/>
-    </xsl:copy>
-  </xsl:template>
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/model/EPFilterSettings.java b/src/main/java/org/olat/portfolio/model/EPFilterSettings.java
deleted file mode 100644
index 19ed746a9a745b4a3503e78c3f465fa9ae24e4a3..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/EPFilterSettings.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <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
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <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>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-package org.olat.portfolio.model;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.UUID;
-
-/**
- * Description:<br>
- * Object to hold settings for the artefact filter
- * 
- * if a new filter is added, make sure to add it to filterList and to check for emptiness in isFilterEmpty(). 
- * <P>
- * Initial Date:  21.07.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPFilterSettings {
-	
-
-	private List<String> tagFilter = new ArrayList<>();
-	private List<String> typeFilter = new ArrayList<>();
-	private String textFilter = "";
-	private List<Date> dateFilter = new ArrayList<>();
-	private List<Object> filterList = new ArrayList<>();
-	private String filterName;
-	private String filterId = "";
-	private boolean noTagFilterSet = false;
-
-	/**
-	 * @return Returns the filterName.
-	 */
-	public String getFilterName() {
-		return filterName;
-	}
-
-	/**
-	 * @param filterName The filterName to set.
-	 */
-	public void setFilterName(String filterName) {
-		this.filterName = filterName;
-	}
-
-	/**
-	 * 
-	 */
-	public EPFilterSettings() {
-		filterList.add(tagFilter);
-		filterList.add(typeFilter);
-		filterList.add(textFilter);
-		filterList.add(dateFilter);
-		setFilterIdToUniqueId();
-	}
-	
-	/**
-	 * @return Returns the internal filterId.
-	 */
-	public String getFilterId() {
-		return filterId;
-	}
-	
-	/**
-	 * set or reset the filterID automatically to a unique id
-	 */
-	public void setFilterIdToUniqueId(){
-		filterId = UUID.randomUUID().toString();
-	}
-
-	/**
-	 * @return Returns the filterList.
-	 */
-	public List<Object> getFilterList() {
-		return filterList;
-	}
-		
-	/**
-	 * @return Returns the tagFilter.
-	 */
-	public List<String> getTagFilter() {
-		return tagFilter;
-	}
-	/**
-	 * @param tagFilter The tagFilter to set.
-	 */
-	public void setTagFilter(List<String> tagFilter) {
-		this.tagFilter = tagFilter;
-		noTagFilterSet = false;
-	}
-	
-	// use this to set tag filter to "none" to filter resources without a tag!
-	public void setNoTagFilter() {
-		this.tagFilter = new ArrayList<>();
-		noTagFilterSet = true;
-	}
-	
-	public boolean isNoTagFilterSet() {
-		return tagFilter.isEmpty() && noTagFilterSet;
-	}
-	
-	/**
-	 * @return Returns the typeFilter.
-	 */
-	public List<String> getTypeFilter() {
-		return typeFilter;
-	}
-	/**
-	 * @param typeFilter The typeFilter to set.
-	 */
-	public void setTypeFilter(List<String> typeFilter) {
-		this.typeFilter = typeFilter;
-	}
-	/**
-	 * @return Returns the textFilter.
-	 */
-	public String getTextFilter() {
-		return textFilter;
-	}
-	/**
-	 * @param textFilter The textFilter to set.
-	 */
-	public void setTextFilter(String textFilter) {
-		this.textFilter = textFilter;
-	}
-	/**
-	 * @return Returns the dateFilter.
-	 */
-	public List<Date> getDateFilter() {
-		return dateFilter;
-	}
-	/**
-	 * @param dateFilter must be two dates (from, to), where the first is before second.
-	 */
-	public void setDateFilter(List<Date> dateFilter) {
-		this.dateFilter = dateFilter;
-	}
-	
-	/**
-	 * returns true if no filter is set.
-	 * @return
-	 */
-	public boolean isFilterEmpty() {
-		if (getTagFilter().isEmpty() && getTypeFilter().isEmpty() && 
-				getTextFilter().equals("") && getDateFilter().isEmpty() && !noTagFilterSet) { 
-			return true; 
-			}
-		return false;
-	}
-	
-	public EPFilterSettings cloneAfterFullText() {
-		EPFilterSettings clone = new EPFilterSettings();
-		if(tagFilter != null) {
-			clone.tagFilter = new ArrayList<>(tagFilter);
-		}
-		if(typeFilter != null) {
-			clone.typeFilter = new ArrayList<>(typeFilter);
-		}
-		if(dateFilter != null) {
-			clone.dateFilter = new ArrayList<>(dateFilter);
-		}
-		clone.filterName = filterName;
-		clone.filterId = filterId;
-		return clone;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/AbstractArtefact.hbm.xml b/src/main/java/org/olat/portfolio/model/artefacts/AbstractArtefact.hbm.xml
deleted file mode 100644
index 07fb65f64d53a5e6c23582f0e25aa2d0aca0d8a0..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/AbstractArtefact.hbm.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-<hibernate-mapping default-lazy="false">
-
-  <class name="org.olat.portfolio.model.artefacts.AbstractArtefact" table="o_ep_artefact">
-  	<!-- the default columns -->
-    <id name="key" column="artefact_id" type="long" unsaved-value="null">
-		<generator class="enhanced-sequence">
-			<param name="sequence_name">hibernate_unique_key</param>
-			<param name="force_table_use">true</param>
-			<param name="optimizer">legacy-hilo</param>
-			<param name="value_column">next_hi</param>
-			<param name="increment_size">32767</param>
-			<param name="initial_value">32767</param>
-		</generator>
-    </id>
-    <discriminator column="artefact_type" type="string"/>
-    <version name="version" access="field" column="version" type="int"/>
-		<property  name="creationDate" column="creationdate" type="timestamp" />
-		
-		<property  name="collectionDate" column="collection_date" type="timestamp" />
- 	
-    <property name="title" column="title" type="string" length="512" not-null="false"/>
-		<property name="description" column="description" type="string" length="4000" not-null="false"/>
-		<property name="signature" column="signature" type="int"/>
-		<property name="businessPath" column="businesspath" type="string" length="2048" not-null="false"/>
-		<property name="fulltextContent" column="fulltextcontent" type="text" length="16384" not-null="false"/>
-		<property name="reflexion" column="reflexion" type="text" length="16384" not-null="false"/>
-		<property name="source" column="source" type="string" length="2048" not-null="false"/>
- 
-    <many-to-one name="author" column="fk_artefact_auth_id" class="org.olat.basesecurity.IdentityImpl"
-    	fetch="join" unique="false" cascade="none"/>
-
-  </class>
-  
-	<subclass name="org.olat.portfolio.model.artefacts.FileArtefact" 
-		extends="org.olat.portfolio.model.artefacts.AbstractArtefact" discriminator-value="bc">
-		<property name="filename" column="add_prop1" type="string" length="2048" not-null="false"/>
-		
-		<!-- If you need some additional property, the alter sql create these three properties.
-		     You can used them in your own subclass without extra update from the database
-		<property name="myExtraProp" column="add_prop1" type="string" length="2048" not-null="false"/>
-		<property name="myAddProp" column="add_prop2" type="string" length="2048" not-null="false"/>
-		<property name="myUsefullProp" column="add_prop3" type="string" length="2048" not-null="false"/>
-		-->
-	</subclass>
-	
-	<subclass name="org.olat.portfolio.model.artefacts.EPTextArtefact" 
-		extends="org.olat.portfolio.model.artefacts.AbstractArtefact" discriminator-value="text">
-	</subclass>
-	
-	
-	<subclass name="org.olat.portfolio.model.artefacts.EPStructureElementArtefact" 
-		extends="org.olat.portfolio.model.artefacts.AbstractArtefact" discriminator-value="ep-structure-element">
-		
-		<many-to-one name="structureElement" column="fk_struct_el_id" class="org.olat.portfolio.model.structel.EPStructureElement"
-			fetch="join" unique="false" cascade="none"/>
-	</subclass>
-	
-</hibernate-mapping>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/AbstractArtefact.java b/src/main/java/org/olat/portfolio/model/artefacts/AbstractArtefact.java
deleted file mode 100755
index f061d74d324fab21a3b3d955d6a790b2bbd76217..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/AbstractArtefact.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.artefacts;
-
-import java.io.Serializable;
-import java.util.Date;
-
-import org.olat.core.commons.persistence.PersistentObject;
-import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.util.vfs.VFSContainer;
-
-/**
- * 
- * Description:<br>
- * used for common stuff of all types of artefact
- * 
- * <P>
- * Initial Date:  11.06.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public abstract class AbstractArtefact extends PersistentObject implements Serializable, OLATResourceable {
-
-	private static final long serialVersionUID = -1966363957300570702L;
-
-
-	/**
-	 * @see org.olat.core.id.OLATResourceable#getResourceableId()
-	 */
-	@Override
-	public Long getResourceableId() {
-		return getKey();
-	}
-
-
-
-	private String title;
-	private String description;
-	private int signature;
-	private String businessPath;
-	private String fulltextContent;
-	private String reflexion;
-	private String source;
-	private Date collectionDate;
-	private VFSContainer fileSourceContainer; 
-	
-	private Identity author;
-	
-
-	/**
-	 * @return Returns the title.
-	 * @uml.property name="title"
-	 */
-	public String getTitle() {
-		return title;
-	}
-
-	/**
-	 * Setter of the property <tt>title</tt>
-	 * 
-	 * @param title The title to set.
-	 * @uml.property name="title"
-	 */
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	/**
-	 * @return Returns the description.
-	 * @uml.property name="description"
-	 */
-	public String getDescription() {
-		return description;
-	}
-
-	/**
-	 * Setter of the property <tt>description</tt>
-	 * 
-	 * @param description The description to set.
-	 * @uml.property name="description"
-	 */
-	public void setDescription(String description) {
-		this.description = description;
-	}
-
-	/**
-	 * @return Returns the signature int identifier.
-	 * for the meaning of the levels, see setSignature().
-	 * @uml.property name="signature"
-	 */
-	public int getSignature() {
-		return signature;
-	}
-
-	/**
-	 * Setter of the property <tt>signature</tt>
-	 * there are several levels of the authenticity of an artefact.
-	 * 0=no guarantee - 100 really sure, with spaces between for improvements.
-	 * 
-	 * 90 - OLAT system generated source (certificate)
-	 * 80 - OLAT author generated source (test-results)
-	 * 70 - users personal content (forum post)
-	 * 50 - user contributed to the content (wiki page)
-	 * 30 - file upload from an user
-	 * 20 - text upload by user
-	 * 
-	 * @param signature The signature to set.
-	 * @uml.property name="signature"
-	 */
-	public void setSignature(int signature) {
-		this.signature = signature;
-	}
-
-	/**
-	 * @return Returns the businessPath.
-	 * @uml.property name="businessPath"
-	 */
-	public String getBusinessPath() {
-		return businessPath;
-	}
-
-	/**
-	 * Setter of the property <tt>businessPath</tt>
-	 * 
-	 * @param businessPath The businessPath to set.
-	 * @uml.property name="businessPath"
-	 */
-	public void setBusinessPath(String businessPath) {
-		this.businessPath = businessPath;
-	}
-
-	/**
-	 * @return Returns the author.
-	 * @uml.property name="author"
-	 */
-	public Identity getAuthor() {
-		return author;
-	}
-
-	/**
-	 * Setter of the property <tt>author</tt>
-	 * 
-	 * @param author The author to set.
-	 * @uml.property name="author"
-	 */
-	public void setAuthor(Identity author) {
-		this.author = author;
-	}
-
-
-	/**
-	 * attention!: this should not be read directly, use manager to get fulltext
-	 * if fulltext is larger than db-size its persisted on fs, therefore you need the manager to read it!
-	 * @return Returns the fulltextContent.
-	 */
-	public String getFulltextContent() {
-		return fulltextContent;
-	}
-
-	/**
-	 * Setter of the property <tt>fulltextContent</tt>
-	 * 
-	 * @param fulltextContent The fulltextContent to set.
-	 * @uml.property name="fulltextContent"
-	 */
-	public void setFulltextContent(String fulltextContent) {
-		this.fulltextContent = fulltextContent;
-	}
-
-	/**
-	 * @return Returns the reflexion.
-	 * @uml.property name="reflexion"
-	 */
-	public String getReflexion() {
-		return reflexion;
-	}
-
-	/**
-	 * Setter of the property <tt>reflexion</tt>
-	 * 
-	 * @param reflexion The reflexion to set.
-	 * @uml.property name="reflexion"
-	 */
-	public void setReflexion(String reflexion) {
-		this.reflexion = reflexion;
-	}
-
-	/**
-	 * despite the businesspath, save some additional information about the
-	 * artefact source
-	 * 
-	 * @uml.property name="source"
-	 */
-	public String getSource() {
-		return source;
-	}
-
-	/**
-	 * Setter of the property <tt>source</tt>
-	 * 
-	 * @param source The source to set.
-	 * @uml.property name="source"
-	 */
-	public void setSource(String source) {
-		this.source = source;
-	}
-
-	/**
-	 * @return Returns the collectionDate.
-	 * @uml.property name="collectionDate"
-	 */
-	public Date getCollectionDate() {
-		return collectionDate;
-	}
-
-	/**
-	 * Setter of the property <tt>collectionDate</tt>
-	 * @param collectionDate The collectionDate to set.
-	 * @uml.property name="collectionDate"
-	 */
-	public void setCollectionDate(Date collectionDate) {
-		this.collectionDate = collectionDate;
-	}
-
-	/**
-		 */
-	public abstract String getIcon();
-
-	/**
-	 * set a file source container to transport this info during collection wizzard
-	 * this is not persisted on artefact
-	 * if set, files from within this container will be copied to artefacts folder on save.
-	 * @param fileSourceContainer The fileSourceContainer to set.
-	 */
-	public void setFileSourceContainer(VFSContainer fileSourceContainer) {
-		this.fileSourceContainer = fileSourceContainer;
-	}
-
-	/**
-	 * get source container for this artefact containing files to copy to artefacts folder.
-	 * this is not a persisted value from db, can just be used while artefact is living.
-	 * the container of an persisted artefact can be found by EPFrontendManager.getArtefactContainer(artefact).
-	 * @return Returns the fileSourceContainer.
-	 */
-	public VFSContainer getFileSourceContainer() {
-		return fileSourceContainer;
-	}
-
-	/**
-	 * @see org.olat.core.commons.persistence.PersistentObject#toString()
-	 */
-	@Override
-	public String toString() {
-		return this.getResourceableTypeName() + " : " + this.getTitle() + " : " + this.getKey();
-	}
-
-	@Override
-	public String getResourceableTypeName() {
-		return null;
-	}
-
-	@Override
-	public int hashCode() {
-		return getKey() == null ? 4415237 : getKey().hashCode();
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if(this == obj) {
-			return true;
-		}
-		if(obj instanceof AbstractArtefact) {
-			AbstractArtefact a = (AbstractArtefact)obj;
-			return getKey() != null && getKey().equals(a.getKey());
-		}
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/EPStructureElementArtefact.java b/src/main/java/org/olat/portfolio/model/artefacts/EPStructureElementArtefact.java
deleted file mode 100644
index fa712fcc6c74475dc2688a21a3e781e4cc8dd092..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/EPStructureElementArtefact.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.artefacts;
-
-import org.olat.portfolio.model.structel.EPStructureElement;
-
-/**
- * Initial Date:  6 déc. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http.//www.frentix.com
- */
-public class EPStructureElementArtefact extends AbstractArtefact {
-
-	private static final long serialVersionUID = -9179795976449029211L;
-	private EPStructureElement structureElement;
-	public static final String STRUCTUREELEMENT_ARTEFACT_TYPE = "ep-structure-element";
-
-	public EPStructureElement getStructureElement() {
-		return structureElement;
-	}
-
-	public void setStructureElement(EPStructureElement structureElement) {
-		this.structureElement = structureElement;
-	}
-
-	@Override
-	public String getIcon() {
-		return "o_portfolio";
-	}
-
-
-	@Override
-	public String getResourceableTypeName() {
-		return STRUCTUREELEMENT_ARTEFACT_TYPE;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/EPStructureElementArtefactHandler.java b/src/main/java/org/olat/portfolio/model/artefacts/EPStructureElementArtefactHandler.java
deleted file mode 100644
index 154c05c403fb3b9e5f55822d19cd3a7b52e89d43..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/EPStructureElementArtefactHandler.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.artefacts;
-
-import org.olat.portfolio.EPAbstractHandler;
-
-/**
- * Initial Date:  6 déc. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPStructureElementArtefactHandler extends EPAbstractHandler<EPStructureElementArtefact> {
-	
-	public static final String EP_STRUCTURE_ELEMENT_TYPE = "ep-structure-element";
-
-	@Override
-	public String getType() {
-		return EP_STRUCTURE_ELEMENT_TYPE;
-	}
-
-	@Override
-	public EPStructureElementArtefact createArtefact() {
-		return new EPStructureElementArtefact();
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/EPTextArtefact.java b/src/main/java/org/olat/portfolio/model/artefacts/EPTextArtefact.java
deleted file mode 100644
index c8a63c819bf6a7d8af106531b1e8eeb845f6f233..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/EPTextArtefact.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.artefacts;
-
-/**
- * Description:<br>
- * Artefact of type text
- * 
- * <P>
- * Initial Date:  01.09.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPTextArtefact extends AbstractArtefact {
-
-	private static final long serialVersionUID = -3705686575442377717L;
-	public static final String TEXT_ARTEFACT_TYPE = "text";
-	
-	/**
-	 * @see org.olat.core.id.OLATResourceable#getResourceableTypeName()
-	 */
-	@Override
-	public String getResourceableTypeName() {
-		return TEXT_ARTEFACT_TYPE;
-	}
-
-	/**
-	 * @see org.olat.portfolio.model.artefacts.AbstractArtefact#getIcon()
-	 */
-	@Override
-	public String getIcon() {
-		return "o_filetype_txt";
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/EPTextArtefactHandler.java b/src/main/java/org/olat/portfolio/model/artefacts/EPTextArtefactHandler.java
deleted file mode 100644
index 011b66542a2e06bdf0ae43520028cce24f0771b5..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/EPTextArtefactHandler.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.artefacts;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.portfolio.EPAbstractHandler;
-import org.olat.portfolio.ui.artefacts.view.details.TextArtefactDetailsController;
-
-/**
- * Description:<br>
- * Handler for the text-artefact
- * 
- * <P>
- * Initial Date:  01.09.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPTextArtefactHandler extends EPAbstractHandler<EPTextArtefact> {
-
-	@Override
-	public String getType() {
-		return EPTextArtefact.TEXT_ARTEFACT_TYPE;
-	}
-
-	@Override
-	public EPTextArtefact createArtefact() {
-		EPTextArtefact textArtefact = new EPTextArtefact();
-		return textArtefact;
-	}
-
-	@Override
-	public Controller createDetailsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, boolean readOnlyMode) {
-		return new TextArtefactDetailsController(ureq, wControl, artefact, readOnlyMode);
-	}
-	
-	
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/FileArtefact.java b/src/main/java/org/olat/portfolio/model/artefacts/FileArtefact.java
deleted file mode 100644
index 72acc69818d308406540be86fab415cff3077462..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/FileArtefact.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.portfolio.model.artefacts;
-
-import org.olat.core.gui.util.CSSHelper;
-
-/**
- * Description:<br>
- * The file artefact
- * 
- * <P>
- * Initial Date:  25 jun. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, www.frentix.com
- */
-public class FileArtefact extends AbstractArtefact {
-
-	private static final long serialVersionUID = -3719232086297906741L;
-	// the filename of the linked file, relative to artefact-folder
-	private String filename;
-	public static final String FILE_ARTEFACT_TYPE = "bc";
-
-	@Override
-	public String getIcon() {
-		if (getFilename()!=null){
-			return CSSHelper.createFiletypeIconCssClassFor(getFilename());
-		}
-		return "o_filetype_file";
-	}
-
-
-	@Override
-	public String getResourceableTypeName() {
-		return FILE_ARTEFACT_TYPE;
-	}
-
-
-	/**
-	 * @param filename The filename to set.
-	 */
-	public void setFilename(String filename) {
-		this.filename = filename;
-	}
-
-
-	/**
-	 * @return Returns the filename.
-	 */
-	public String getFilename() {
-		return filename;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/FileArtefactHandler.java b/src/main/java/org/olat/portfolio/model/artefacts/FileArtefactHandler.java
deleted file mode 100644
index f791a098d2202af196008765c347c9a9dc51245e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/FileArtefactHandler.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.portfolio.model.artefacts;
-
-import org.apache.lucene.document.Document;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.services.vfs.VFSMetadata;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.apache.logging.log4j.Logger;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.vfs.VFSConstants;
-import org.olat.core.util.vfs.VFSItem;
-import org.olat.core.util.vfs.VFSLeaf;
-import org.olat.core.util.vfs.VFSManager;
-import org.olat.group.BusinessGroup;
-import org.olat.group.BusinessGroupService;
-import org.olat.portfolio.EPAbstractHandler;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.ui.artefacts.view.details.FileArtefactDetailsController;
-import org.olat.repository.RepositoryManager;
-import org.olat.search.model.AbstractOlatDocument;
-import org.olat.search.service.SearchResourceContext;
-import org.olat.search.service.document.file.FileDocumentFactory;
-
-/**
- * 
- * Description:<br>
- * Artefacthandler for collected or uploaded files
- * 
- * <P>
- * Initial Date: 25 jun. 2010 <br>
- * 
- * @author srosse, stephane.rosse@frentix.com, www.frentix.com
- */
-public class FileArtefactHandler extends EPAbstractHandler<FileArtefact> {
-	
-	private static final Logger log = Tracing.createLoggerFor(FileArtefactHandler.class);
-
-	@Override
-	public FileArtefact createArtefact() {
-		return new FileArtefact();
-	}
-
-	@Override
-	public void prefillArtefactAccordingToSource(AbstractArtefact artefact, Object source) {
-		super.prefillArtefactAccordingToSource(artefact, source);
-		if (source instanceof VFSItem) {
-			VFSItem fileSource = (VFSItem) source;
-			((FileArtefact) artefact).setFilename(fileSource.getName());
-			
-			VFSMetadata meta = null;
-			if(fileSource.canMeta() == VFSConstants.YES) {
-				meta = fileSource.getMetaInfo();
-			}
-
-			if (meta != null && StringHelper.containsNonWhitespace(meta.getTitle())) {
-				artefact.setTitle(meta.getTitle());
-			} else {
-				artefact.setTitle(fileSource.getName());
-			}
-			if (meta != null && StringHelper.containsNonWhitespace(meta.getComment())) {
-				artefact.setDescription(meta.getComment());
-			}
-			artefact.setSignature(60);
-
-			String path = fileSource.getRelPath();
-			String[] pathElements = path.split("/");
-
-			String finalBusinessPath = null;
-			String sourceInfo = null;
-			// used to rebuild businessPath and source for a file:
-			String author = meta != null && meta.getAuthor() != null ? meta.getAuthor().getKey().toString() : null;
-			if (pathElements[1].equals("homes") && meta != null && pathElements[2].equals(author)) {
-				// from users briefcase
-				String lastParts = "/";
-				for (int i = 4; i < (pathElements.length - 1); i++) {
-					lastParts = lastParts + pathElements[i] + "/";
-				}
-				sourceInfo = "Home -> " + pathElements[3] + " -> " + lastParts + fileSource.getName();
-			} else if (pathElements[3].equals("BusinessGroup")) {
-				// out of a businessgroup
-				String lastParts = "/";
-				for (int i = 5; i < (pathElements.length - 1); i++) {
-					lastParts = lastParts + pathElements[i] + "/";
-				}
-				BusinessGroup bGroup = CoreSpringFactory.getImpl(BusinessGroupService.class).loadBusinessGroup(Long.valueOf(pathElements[4]));
-				if (bGroup != null) {
-					sourceInfo = bGroup.getName() + " -> " + lastParts + " -> " + fileSource.getName();
-				}
-				finalBusinessPath = "[BusinessGroup:" + pathElements[4] + "][toolfolder:0][path=" + lastParts + fileSource.getName() + ":0]";
-			} else if (pathElements[4].equals("coursefolder")) {
-				// the course folder
-				sourceInfo = RepositoryManager.getInstance().lookupDisplayNameByOLATResourceableId(Long.valueOf(pathElements[2]))
-						+ " -> " + fileSource.getName();
-
-			} else if (pathElements[1].equals("course") && pathElements[3].equals("foldernodes")) {
-				// folders inside a course
-				sourceInfo = RepositoryManager.getInstance().lookupDisplayNameByOLATResourceableId(Long.valueOf(pathElements[2]))
-						+ " -> " + pathElements[4] + " -> " + fileSource.getName();
-				finalBusinessPath = "[RepositoryEntry:" + pathElements[2] + "][CourseNode:" + pathElements[4] + "]";
-			}
-
-			if (sourceInfo == null) {
-				// unknown source, keep full path
-				sourceInfo = VFSManager.getRealPath(fileSource.getParentContainer()) + "/" + fileSource.getName();
-			}
-
-			artefact.setBusinessPath(finalBusinessPath);
-			artefact.setSource(sourceInfo);
-		}
-
-	}
-
-	/**
-	 * @see org.olat.portfolio.EPAbstractHandler#createDetailsController(org.olat.core.gui.UserRequest, org.olat.portfolio.model.artefacts.AbstractArtefact)
-	 */
-	@Override
-	public Controller createDetailsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, boolean readOnlyMode) {
-		return new FileArtefactDetailsController(ureq, wControl, artefact, readOnlyMode);		
-	}
-
-	@Override
-	public String getType() {
-		return FileArtefact.FILE_ARTEFACT_TYPE;
-	}
-	
-	
-
-	@Override
-	protected void getContent(AbstractArtefact artefact, StringBuilder sb, SearchResourceContext context, EPFrontendManager ePFManager) {
-		FileArtefact fileArtefact = (FileArtefact)artefact;
-		String filename = fileArtefact.getFilename();
-		
-		VFSItem file = ePFManager.getArtefactContainer(artefact).resolve(filename);
-		if (file instanceof VFSLeaf) {
-			try {
-				FileDocumentFactory docFactory = CoreSpringFactory.getImpl(FileDocumentFactory.class);
-				if (docFactory.isFileSupported((VFSLeaf)file)) {
-					Document doc = docFactory.createDocument(context, (VFSLeaf)file);
-					String content = doc.get(AbstractOlatDocument.CONTENT_FIELD_NAME);
-					sb.append(content);
-				}
-			} catch (Exception e) {
-				log.error("Could not get content of file "+file.getName()+" (file-artefact "+artefact.getKey()+")", e);
-			}
-		}
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_ar.properties
deleted file mode 100644
index 44778e8a947f4ff12798182b22596343ffb619dc..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_ar.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-#Thu Sep 08 16:42:40 CEST 2011
-handler.EPStructureElementArtefactHandler.title=\u0639\u0646\u0635\u0631 \u0628\u0648\u0631\u062A\u0641\u0648\u0644\u064A\u0648
-handler.EPTextArtefactHandler.title=\u0623\u062F\u0627\u0629 \u0627\u0644\u0646\u0635
-handler.FileArtefactHandler.title=\u0623\u062F\u0627\u0629 \u0645\u0644\u0641
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_de.properties
deleted file mode 100644
index 4360646b8a238cd52f69f770bfebfc59cbd6e089..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-handler.FileArtefactHandler.title=Datei-Artefakt
-handler.EPStructureElementArtefactHandler.title=Portfolio-Element
-handler.EPTextArtefactHandler.title=Text-Artefakt
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_en.properties
deleted file mode 100644
index 9ec97f3e99f62f353390565e5ef39b0f39d2bf46..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-#Tue Jan 18 15:23:29 CET 2011
-handler.EPStructureElementArtefactHandler.title=Portfolio element
-handler.EPTextArtefactHandler.title=Text artefact
-handler.FileArtefactHandler.title=File artefact
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index c68ec97e5349b0b2d9043e17c12fd917a1439086..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Jan 21 08:50:08 CET 2011
-handler.EPStructureElementArtefactHandler.title=\u00C9l\u00E9ment portfolio
-handler.EPTextArtefactHandler.title=Artefact texte
-handler.FileArtefactHandler.title=Artefact fichier
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_it.properties
deleted file mode 100644
index 2eb76d0e1fb51cc0e1114a338a3544076e91f99b..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_it.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-#Mon Jan 17 09:40:10 CET 2011
-handler.EPStructureElementArtefactHandler.title=Elemento portfolio
-handler.EPTextArtefactHandler.title=Artefatto testo
-handler.FileArtefactHandler.title=Artefatto file
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_jp.properties
deleted file mode 100644
index 6c88a2b85db549f4895ca64cde724346de7f60e4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_jp.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-#Thu Jan 20 05:09:27 CET 2011
-handler.EPStructureElementArtefactHandler.title=\u30DD\u30FC\u30C8\u30D5\u30A9\u30EA\u30AA\u30A8\u30EC\u30E1\u30F3\u30C8
-handler.EPTextArtefactHandler.title=\u30C6\u30AD\u30B9\u30C8\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8
-handler.FileArtefactHandler.title=\u30D5\u30A1\u30A4\u30EB\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_nl_NL.properties
deleted file mode 100644
index 8476fa60c442c258cd04292d5b64b4fe56910da8..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_nl_NL.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-#Thu Sep 08 16:42:47 CEST 2011
-handler.EPStructureElementArtefactHandler.title=Portfolio element
-handler.EPTextArtefactHandler.title=tekst artefact
-handler.FileArtefactHandler.title=Bestand voorwerp
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_pl.properties
deleted file mode 100644
index b23ddc7874dc9578c47daad2122c175dc64dac1c..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_pl.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-#Thu Sep 08 16:42:41 CEST 2011
-handler.EPStructureElementArtefactHandler.title=Element portfolio
-handler.EPTextArtefactHandler.title=Artefakt tekstowy
-handler.FileArtefactHandler.title=Artefakt plikowy
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_pt_BR.properties
deleted file mode 100644
index 3398bfd28e655649095b9ee2f153ad4e90e653cf..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_pt_BR.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-#Thu Sep 08 16:42:38 CEST 2011
-handler.EPStructureElementArtefactHandler.title=Elemento Portfolio
-handler.EPTextArtefactHandler.title=Artefato de Texto
-handler.FileArtefactHandler.title=Artefato de arquivo
diff --git a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_zh_CN.properties
deleted file mode 100644
index 316a953342c223c1e5061f6822e139de07ec1315..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/artefacts/_i18n/LocalStrings_zh_CN.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-#Thu Sep 08 16:42:39 CEST 2011
-handler.EPStructureElementArtefactHandler.title=\u6863\u6848\u5143\u7D20
-handler.EPTextArtefactHandler.title=\u4EBA\u5DE5\u6587\u672C
-handler.FileArtefactHandler.title=\u4EBA\u5DE5\u6587\u4EF6
diff --git a/src/main/java/org/olat/portfolio/model/notification/EPArtefactNotification.java b/src/main/java/org/olat/portfolio/model/notification/EPArtefactNotification.java
deleted file mode 100644
index 4dee0fbc57f636c6a4d49e94788a8280e24a15be..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/notification/EPArtefactNotification.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.notification;
-
-import java.util.Date;
-
-import org.olat.basesecurity.IdentityShort;
-import org.olat.core.commons.persistence.PersistentObject;
-
-/**
- * Map the notification for structure element
- * 
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPArtefactNotification extends PersistentObject implements EPNotification {
-	
-	private static final long serialVersionUID = -1130753550445887894L;
-
-	private Long linkKey;
-	private Date lastModified;
-	private String type;
-	private String structureTitle;
-	private String artefactTitle;
-	
-	private Long rootKey;
-	private Long rootMapKey;
-	private Long pageKey;
-	
-	private IdentityShort author;
-
-	public Long getLinkKey() {
-		return linkKey;
-	}
-
-	public void setLinkKey(Long linkKey) {
-		this.linkKey = linkKey;
-	}
-
-	@Override
-	public Date getLastModified() {
-		return lastModified;
-	}
-
-	@Override
-	public void setLastModified(Date date) {
-		this.lastModified = date;
-	}
-
-	public Long getRootKey() {
-		return rootKey;
-	}
-
-	public void setRootKey(Long rootKey) {
-		this.rootKey = rootKey;
-	}
-
-	public Long getRootMapKey() {
-		return rootMapKey;
-	}
-
-	public void setRootMapKey(Long rootMapKey) {
-		this.rootMapKey = rootMapKey;
-	}
-
-	public Long getPageKey() {
-		return pageKey;
-	}
-
-	public void setPageKey(Long pageKey) {
-		this.pageKey = pageKey;
-	}
-
-	@Override
-	public String getType() {
-		return type;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-
-	@Override
-	public String getTitle() {
-		return getArtefactTitle();
-	}
-
-	public String getStructureTitle() {
-		return structureTitle;
-	}
-
-	public void setStructureTitle(String structureTitle) {
-		this.structureTitle = structureTitle;
-	}
-
-	public String getArtefactTitle() {
-		return artefactTitle;
-	}
-
-	public void setArtefactTitle(String artefactTitle) {
-		this.artefactTitle = artefactTitle;
-	}
-
-	@Override
-	public IdentityShort getAuthor() {
-		return author;
-	}
-
-	public void setAuthor(IdentityShort author) {
-		this.author = author;
-	}
-	
-	@Override
-	public String toString() {
-		return "ArtefactNotification[" + super.toString() + ";pageKey=" + pageKey + "]";
-	}
-	
-	@Override
-	public int hashCode() {
-		return linkKey.hashCode() + getKey().hashCode();
-	}
-	
-	@Override
-	public boolean equals(Object obj) {
-		if(this == obj) {
-			return true;
-		}
-		if(obj instanceof EPArtefactNotification) {
-			EPArtefactNotification notification = (EPArtefactNotification)obj;
-			return getKey().equals(notification.getKey()) && linkKey.equals(notification.linkKey);
-		}
-		
-		return false;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/model/notification/EPCommentNotification.java b/src/main/java/org/olat/portfolio/model/notification/EPCommentNotification.java
deleted file mode 100644
index f03975ee3f6b7ccec4bf482a9bd7eb5d552a85f0..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/notification/EPCommentNotification.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.notification;
-
-import java.util.Date;
-
-import org.olat.basesecurity.IdentityShort;
-import org.olat.core.commons.persistence.PersistentObject;
-import org.olat.core.util.StringHelper;
-
-/**
- * Map the notification for comment element
- * 
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPCommentNotification extends PersistentObject implements EPNotification {
-
-	private static final long serialVersionUID = -1065069940086963966L;
-	
-	private Date lastModified;
-	private String type;
-	
-	private Long mapKey;
-	private String mapTitle;
-	private Long pageKey;
-	private String pageTitle;
-	
-	private IdentityShort author;
-
-	@Override
-	public Date getLastModified() {
-		return lastModified;
-	}
-
-	@Override
-	public void setLastModified(Date date) {
-		this.lastModified = date;
-	}
-
-
-	public Long getPageKey() {
-		return pageKey;
-	}
-
-	public void setPageKey(Long pageKey) {
-		this.pageKey = pageKey;
-	}
-	
-	public String getPageTitle() {
-		return pageTitle;
-	}
-
-	public void setPageTitle(String pageTitle) {
-		this.pageTitle = pageTitle;
-	}
-
-	public Long getMapKey() {
-		return mapKey;
-	}
-
-	public void setMapKey(Long mapKey) {
-		this.mapKey = mapKey;
-	}
-
-	public String getMapTitle() {
-		return mapTitle;
-	}
-
-	public void setMapTitle(String mapTitle) {
-		this.mapTitle = mapTitle;
-	}
-
-	@Override
-	public String getType() {
-		return type;
-	}
-
-	@Override
-	public String getTitle() {
-		return StringHelper.containsNonWhitespace(pageTitle) ? pageTitle : mapTitle;
-	}
-
-	@Override
-	public IdentityShort getAuthor() {
-		return author;
-	}
-
-	public void setAuthor(IdentityShort author) {
-		this.author = author;
-	}
-	
-	@Override
-	public String toString() {
-		return "CommentNotification[" + super.toString() + ";pageKey=" + pageKey + "]";
-	}
-	
-	@Override
-	public int hashCode() {
-		return getKey().hashCode();
-	}
-	
-	@Override
-	public boolean equals(Object obj) {
-		if(this == obj) {
-			return true;
-		}
-		if(obj instanceof EPCommentNotification) {
-			EPCommentNotification notification = (EPCommentNotification)obj;
-			return getKey().equals(notification.getKey());
-		}
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/model/notification/EPNotification.java b/src/main/java/org/olat/portfolio/model/notification/EPNotification.java
deleted file mode 100644
index 751e716563935ebfef3fa0a7cd580bdca18cce1f..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/notification/EPNotification.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.notification;
-
-import org.olat.basesecurity.IdentityShort;
-import org.olat.core.id.CreateInfo;
-import org.olat.core.id.ModifiedInfo;
-
-/**
- * 
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public interface EPNotification extends CreateInfo, ModifiedInfo {
-
-	public Long getPageKey();
-	
-	public String getType();
-
-	public String getTitle();
-
-	public IdentityShort getAuthor();
-}
diff --git a/src/main/java/org/olat/portfolio/model/notification/EPRatingNotification.java b/src/main/java/org/olat/portfolio/model/notification/EPRatingNotification.java
deleted file mode 100644
index 78e7e08a62ca542111194d2484729993eea2f7ec..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/notification/EPRatingNotification.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.notification;
-
-import java.util.Date;
-
-import org.olat.basesecurity.IdentityShort;
-import org.olat.core.commons.persistence.PersistentObject;
-import org.olat.core.util.StringHelper;
-
-/**
- * Map the notification for ratings
- * 
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPRatingNotification extends PersistentObject implements EPNotification {
-
-	private static final long serialVersionUID = -1065069940086963966L;
-	
-	private Date lastModified;
-	private String type;
-	
-	private Long mapKey;
-	private String mapTitle;
-	private Long pageKey;
-	private String pageTitle;
-	
-	private IdentityShort author;
-
-	@Override
-	public Date getLastModified() {
-		return lastModified;
-	}
-
-	@Override
-	public void setLastModified(Date date) {
-		this.lastModified = date;
-	}
-
-
-	public Long getPageKey() {
-		return pageKey;
-	}
-
-	public void setPageKey(Long pageKey) {
-		this.pageKey = pageKey;
-	}
-	
-	public String getPageTitle() {
-		return pageTitle;
-	}
-
-	public void setPageTitle(String pageTitle) {
-		this.pageTitle = pageTitle;
-	}
-
-	public Long getMapKey() {
-		return mapKey;
-	}
-
-	public void setMapKey(Long mapKey) {
-		this.mapKey = mapKey;
-	}
-
-	public String getMapTitle() {
-		return mapTitle;
-	}
-
-	public void setMapTitle(String mapTitle) {
-		this.mapTitle = mapTitle;
-	}
-
-	@Override
-	public String getType() {
-		return type;
-	}
-
-	@Override
-	public String getTitle() {
-		return StringHelper.containsNonWhitespace(pageTitle) ? pageTitle : mapTitle;
-	}
-
-	@Override
-	public IdentityShort getAuthor() {
-		return author;
-	}
-
-	public void setAuthor(IdentityShort author) {
-		this.author = author;
-	}
-	
-	@Override
-	public String toString() {
-		return "RatingNotification[" + super.toString() + ";pageKey=" + pageKey + "]";
-	}
-	
-	@Override
-	public int hashCode() {
-		return getKey().hashCode();
-	}
-	
-	@Override
-	public boolean equals(Object obj) {
-		if(this == obj) {
-			return true;
-		}
-		if(obj instanceof EPRatingNotification) {
-			EPRatingNotification notification = (EPRatingNotification)obj;
-			return getKey().equals(notification.getKey());
-		}
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/model/notification/EPStructureElementNotification.java b/src/main/java/org/olat/portfolio/model/notification/EPStructureElementNotification.java
deleted file mode 100644
index da48d52c0946eed4425b5a1d6325e6612b1c2c02..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/notification/EPStructureElementNotification.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.notification;
-
-import java.util.Date;
-
-import org.olat.basesecurity.IdentityShort;
-import org.olat.core.commons.persistence.PersistentObject;
-
-/**
- * Map the notification for structure element
- * 
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPStructureElementNotification extends PersistentObject implements EPNotification {
-
-	private static final long serialVersionUID = -1065069940086963966L;
-	
-	private Date lastModified;
-	private String type;
-	private String title;
-	
-	private Long rootKey;
-	private Long rootMapKey;
-	
-	private Long pageKey;
-
-	@Override
-	public Date getLastModified() {
-		return lastModified;
-	}
-
-	@Override
-	public void setLastModified(Date date) {
-		this.lastModified = date;
-	}
-
-	public Long getRootKey() {
-		return rootKey;
-	}
-
-	public void setRootKey(Long rootKey) {
-		this.rootKey = rootKey;
-	}
-
-	public Long getRootMapKey() {
-		return rootMapKey;
-	}
-
-	public void setRootMapKey(Long rootMapKey) {
-		this.rootMapKey = rootMapKey;
-	}
-
-	public Long getPageKey() {
-		return pageKey;
-	}
-
-	public void setPageKey(Long pageKey) {
-		this.pageKey = pageKey;
-	}
-
-	@Override
-	public String getType() {
-		return type;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-
-	@Override
-	public String getTitle() {
-		return title;
-	}
-	
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	@Override
-	public IdentityShort getAuthor() {
-		return null;
-	}
-	
-	@Override
-	public String toString() {
-		return "StructureELNotification[" + super.toString() + ";pageKey=" + pageKey + "]";
-	}
-	
-	@Override
-	public int hashCode() {
-		return getKey().hashCode();
-	}
-	
-	@Override
-	public boolean equals(Object obj) {
-		if(this == obj) {
-			return true;
-		}
-		if(obj instanceof EPStructureElementNotification) {
-			EPStructureElementNotification notification = (EPStructureElementNotification)obj;
-			return getKey().equals(notification.getKey());
-		}
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/model/notification/Notifications.hbm.xml b/src/main/java/org/olat/portfolio/model/notification/Notifications.hbm.xml
deleted file mode 100644
index c363b3b5afec77958303938b38826219c5472739..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/notification/Notifications.hbm.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-<hibernate-mapping default-lazy="false">
-
-  <class name="org.olat.portfolio.model.notification.EPStructureElementNotification" table="o_ep_notifications_struct_v" mutable="false">
-  	<!-- the default columns -->
-    <id name="key" column="struct_id" type="long" unsaved-value="null">
-		<generator class="enhanced-sequence">
-			<param name="sequence_name">hibernate_unique_key</param>
-			<param name="force_table_use">true</param>
-			<param name="optimizer">legacy-hilo</param>
-			<param name="value_column">next_hi</param>
-			<param name="increment_size">32767</param>
-			<param name="initial_value">32767</param>
-		</generator>
-	</id>
-    
-    
-	<property name="type" column="struct_type" type="string"/>
-	<property name="title" column="struct_title" type="string"/>
-	<property name="rootKey" column="struct_root_id" type="long"/>
-	<property name="rootMapKey" column="struct_root_map_id" type="long"/>
-	<property name="creationDate" column="creation_date" type="timestamp" />
-	<property name="pageKey" column="page_key" type="long"/>
-
-	<!-- 
-	<property name="lastModified" column="last_modified" type="timestamp" />
-	<many-to-one name="author" column="author_id" class="org.olat.basesecurity.IdentityShort" fetch="join" unique="false" cascade="none"/>
-	 -->
-  </class>
-  
-  <class name="org.olat.portfolio.model.notification.EPArtefactNotification" table="o_ep_notifications_art_v" mutable="false">
-  	<!-- the default columns -->
-	<composite-id>
-		<key-property name="key" column="artefact_id" type="long" />
-		<key-property name="linkKey" column="link_id" type="long" />
-	</composite-id>
-
-	<property name="artefactTitle" column="artefact_title" type="string"/>
-	<property name="structureTitle" column="struct_title" type="string"/>
-	
-	<property name="type" column="struct_type" type="string"/>
-	<property name="rootKey" column="struct_root_id" type="long"/>
-	<property name="rootMapKey" column="struct_root_map_id" type="long"/>
-	
-	<property name="creationDate" column="creation_date" type="timestamp" />
-	<property name="pageKey" column="page_key" type="long"/>
-	
-	<many-to-one name="author" column="author_id" class="org.olat.basesecurity.IdentityShort" fetch="join" unique="false" cascade="none"/>
-  </class>
-  
-  <class name="org.olat.portfolio.model.notification.EPRatingNotification" table="o_ep_notifications_rating_v" mutable="false">
-  	<!-- the default columns -->
-	<id name="key" column="rating_id" type="long" unsaved-value="null">
-		<generator class="enhanced-sequence">
-			<param name="sequence_name">hibernate_unique_key</param>
-			<param name="force_table_use">true</param>
-			<param name="optimizer">legacy-hilo</param>
-			<param name="value_column">next_hi</param>
-			<param name="increment_size">32767</param>
-			<param name="initial_value">32767</param>
-		</generator>
-    </id>
-	<property name="creationDate" column="creation_date" type="timestamp" />
-	<property name="lastModified" column="last_modified" type="timestamp" />
-
-	<property name="mapKey" column="map_id" type="long"/>
-	<property name="mapTitle" column="map_title" type="string"/>
-	<property name="pageKey" column="page_key" type="long"/>
-	<property name="pageTitle" column="page_title" type="string"/>
-
-	<many-to-one name="author" column="author_id" class="org.olat.basesecurity.IdentityShort" fetch="join" unique="false" cascade="none"/>
-  </class>
-  
-  <class name="org.olat.portfolio.model.notification.EPCommentNotification" table="o_ep_notifications_comment_v" mutable="false">
-  	<!-- the default columns -->
-	<id name="key" column="comment_id" type="long" unsaved-value="null">
-		<generator class="enhanced-sequence">
-			<param name="sequence_name">hibernate_unique_key</param>
-			<param name="force_table_use">true</param>
-			<param name="optimizer">legacy-hilo</param>
-			<param name="value_column">next_hi</param>
-			<param name="increment_size">32767</param>
-			<param name="initial_value">32767</param>
-		</generator>
-    </id>
-	<property name="creationDate" column="creation_date" type="timestamp" />
-
-	<property name="mapKey" column="map_id" type="long"/>
-	<property name="mapTitle" column="map_title" type="string"/>
-	<property name="pageKey" column="page_key" type="long"/>
-	<property name="pageTitle" column="page_title" type="string"/>
-
-	<many-to-one name="author" column="author_id" class="org.olat.basesecurity.IdentityShort" fetch="join" unique="false" cascade="none"/>
-  </class>
-  
-</hibernate-mapping>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/model/restriction/CollectRestriction.hbm.xml b/src/main/java/org/olat/portfolio/model/restriction/CollectRestriction.hbm.xml
deleted file mode 100644
index 6f899c647c4c697c3d20c3a59a07e23b584fd583..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/restriction/CollectRestriction.hbm.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-<hibernate-mapping default-lazy="false">
-
-  <class name="org.olat.portfolio.model.restriction.CollectRestriction" table="o_ep_collect_restriction">
-  	<!-- the default columns -->
-    <id name="key" column="collect_id" type="long" unsaved-value="null">
-		<generator class="enhanced-sequence">
-			<param name="sequence_name">hibernate_unique_key</param>
-			<param name="force_table_use">true</param>
-			<param name="optimizer">legacy-hilo</param>
-			<param name="value_column">next_hi</param>
-			<param name="increment_size">32767</param>
-			<param name="initial_value">32767</param>
-		</generator>
-    </id>
-    <version name="version" access="field" column="version" type="int"/>
-		<property name="creationDate" column="creationdate" type="timestamp" />
-
-		<property name="artefactType" column="artefact_type" type="string" length="256"/>
-		<property name="amount" column="amount" type="int"  not-null="true"/>
-		<property name="restriction" column="restriction" type="string" length="32" not-null="true"/>
-  </class>
-  
-</hibernate-mapping>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/model/restriction/CollectRestriction.java b/src/main/java/org/olat/portfolio/model/restriction/CollectRestriction.java
deleted file mode 100755
index c29701c41deb693eea6fa0a912e87a2da3dc8fb3..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/restriction/CollectRestriction.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.restriction;
-
-import org.olat.core.commons.persistence.PersistentObject;
-import org.olat.core.util.StringHelper;
-
-/** 
- * Initial Date:  08.06.2010 <br>
- * @author rhaag
- */
-public class CollectRestriction extends PersistentObject {
-
-	/**
-	 * 
-	 */
-	public CollectRestriction() {
-		//
-	}
-	
-	public CollectRestriction(CollectRestriction cr) {
-		artefactType = cr.artefactType;
-		amount = cr.amount;
-		restriction = cr.restriction;
-	}
-	
-	public CollectRestriction(String artefactType, int amount, String restriction) {
-		this.artefactType = artefactType;
-		this.amount = amount;
-		this.restriction = restriction;
-	}
-
-	/**
-	 * @uml.property  name="artefactType"
-	 */
-	private String artefactType;
-
-	/**
-	 * Getter of the property <tt>artefactType</tt>
-	 * @return  Returns the artefactType.
-	 * @uml.property  name="artefactType"
-	 */
-	public String getArtefactType() {
-		return artefactType;
-	}
-
-	/**
-	 * Setter of the property <tt>artefactType</tt>
-	 * @param artefactType  The artefactType to set.
-	 * @uml.property  name="artefactType"
-	 */
-	public void setArtefactType(String artefactType) {
-		this.artefactType = artefactType;
-	}
-
-	/**
-	 * @uml.property  name="amount"
-	 */
-	private int amount;
-
-	/**
-	 * Getter of the property <tt>amount</tt>
-	 * @return  Returns the amount.
-	 * @uml.property  name="amount"
-	 */
-	public int getAmount() {
-		return amount;
-	}
-
-	/**
-	 * Setter of the property <tt>amount</tt>
-	 * @param amount  The amount to set.
-	 * @uml.property  name="amount"
-	 */
-	public void setAmount(int amount) {
-		this.amount = amount;
-	}
-
-	/**
-	 * @uml.property  name="restriction"
-	 */
-	private String restriction;
-
-	/**
-	 * Getter of the property <tt>restriction</tt>
-	 * @return  Returns the restriction.
-	 * @uml.property  name="restriction"
-	 */
-	public String getRestriction() {
-		return restriction;
-	}
-
-	/**
-	 * Setter of the property <tt>restriction</tt>
-	 * @param restriction  The restriction to set.
-	 * @uml.property  name="restriction"
-	 */
-	public void setRestriction(String restriction) {
-		this.restriction = restriction;
-	}
-	
-	@Override
-	public int hashCode() {
-		return getKey() == null ? 17637 : getKey().hashCode();
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if(this == obj) {
-			return true;
-		} else if (obj instanceof CollectRestriction) {
-			CollectRestriction cr = (CollectRestriction)obj;
-			return getKey() != null && getKey().equals(cr.getKey());
-		}
-		return false;
-	}
-
-	/**
-	 * @see org.olat.core.commons.persistence.PersistentObject#toString()
-	 */
-	@Override
-	public String toString() {
-		return "key: " + getKey() + " Restriction: " + getRestriction() + " amount: " + getAmount() + " of type: " + getArtefactType();
-	}
-	
-	// basic check for validity. do not save invalid restrictions!
-	public boolean isValid(){
-		if (StringHelper.containsNonWhitespace(getRestriction()) && StringHelper.containsNonWhitespace(getArtefactType()) && getAmount() > 0) return true; 
-		return false;
-	}
-	
-}
diff --git a/src/main/java/org/olat/portfolio/model/restriction/RestrictionsConstants.java b/src/main/java/org/olat/portfolio/model/restriction/RestrictionsConstants.java
deleted file mode 100644
index ef73c68b9489d27e098d68e733e93e12a7d4e090..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/restriction/RestrictionsConstants.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.restriction;
-
-public class RestrictionsConstants {
-	public static final String MIN = "min";
-	public static final String EQUAL = "equal";
-	public static final String MAX = "max";
-	
-}
diff --git a/src/main/java/org/olat/portfolio/model/structel/EPAbstractMap.java b/src/main/java/org/olat/portfolio/model/structel/EPAbstractMap.java
deleted file mode 100755
index 074bb836150c300e2989f709c1c396e993df8e1f..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/EPAbstractMap.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-import java.util.Set;
-
-/**
- * Initial Date:  11.06.2010 <br>
- * @author rhaag, roman.haag@frentix.com, http://www.frentix.com
- */
-public abstract class EPAbstractMap extends EPStructureElement implements PortfolioStructureMap  {
-
-	private static final long serialVersionUID = 3295737167134638317L;
-	
-	private Set<EPStructureElementToGroupRelation> groups;
-
-	@Override
-	public Set<EPStructureElementToGroupRelation> getGroups() {
-		return groups;
-	}
-
-	public void setGroups(Set<EPStructureElementToGroupRelation> groups) {
-		this.groups = groups;
-	}
-	
-	@Override
-	public String getIcon(){
-		return "o_ep_icon_map";
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/model/structel/EPDefaultMap.java b/src/main/java/org/olat/portfolio/model/structel/EPDefaultMap.java
deleted file mode 100755
index 9c62ba89181ce0b86f879d905cb48b1ef0516429..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/EPDefaultMap.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-/**
- * Initial Date:  11.06.2010 <br>
- * @author rhaag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPDefaultMap extends EPAbstractMap {
-
-	private static final long serialVersionUID = 5327020967451630707L;
-
-	public EPDefaultMap() {
-		//
-	}
-
-	public boolean equals(Object obj) {
-		if(obj == this) {
-			return true;
-		}
-		if(obj instanceof EPDefaultMap) {
-			return equalsByPersistableKey((EPDefaultMap)obj);
-		}
-		return false;
-	}
-	
-	@Override
-	public int hashCode() {
-		return getKey() == null ? -9544 : getKey().hashCode();
-	}
-	
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		sb.append("epDefaultMap[key=").append(getKey()).append(":")
-		  .append("title=").append(getTitle()).append("]");
-		return sb.toString();
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/model/structel/EPMapShort.java b/src/main/java/org/olat/portfolio/model/structel/EPMapShort.java
deleted file mode 100644
index 046d043eae52abecac71e127fb4e801024f649e3..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/EPMapShort.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-import java.util.Set;
-
-import org.olat.core.commons.persistence.PersistentObject;
-import org.olat.resource.OLATResource;
-
-/**
- * This is a help mapping to prevent loading too much from the database
- * 
- * 
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPMapShort extends PersistentObject implements PortfolioStructureMapRef {
-
-	private static final long serialVersionUID = 3093838342982364478L;
-	
-	private String title;
-	private Long sourceMapKey;
-	private OLATResource olatResource;
-	private Set<EPStructureElementToGroupRelation> groups;
-	
-	
-	public Long getSourceMapKey() {
-		return sourceMapKey;
-	}
-	
-	public void setSourceMapKey(Long sourceMapKey) {
-		this.sourceMapKey = sourceMapKey;
-	}
-	
-	public String getTitle() {
-		return title;
-	}
-
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	public OLATResource getOlatResource() {
-		return olatResource;
-	}
-	
-	public void setOlatResource(OLATResource olatResource) {
-		this.olatResource = olatResource;
-	}
-
-	public Set<EPStructureElementToGroupRelation> getGroups() {
-		return groups;
-	}
-
-	public void setGroups(Set<EPStructureElementToGroupRelation> groups) {
-		this.groups = groups;
-	}
-	
-	@Override
-	public String toString() {
-		return "EPMapShort[" + super.toString() + "]";
-	}
-	
-	@Override
-	public int hashCode() {
-		return getKey() == null ? 98759 : getKey().hashCode();
-	}
-	
-	@Override
-	public boolean equals(Object obj) {
-		if(this == obj) {
-			return true;
-		}
-		if(obj instanceof EPMapShort) {
-			EPMapShort map = (EPMapShort)obj;
-			return getKey() != null && getKey().equals(map.getKey());
-		}
-		return false;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/model/structel/EPPage.java b/src/main/java/org/olat/portfolio/model/structel/EPPage.java
deleted file mode 100755
index ef920adf271842626bbf5829556b53ffe1133351..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/EPPage.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-/**
- * Initial Date:  08.06.2010 <br>
- * @author rhaag
- */
-public class EPPage extends EPStructureElement  {
-
-	private static final long serialVersionUID = -3612344225824264507L;
-	
-	@Override
-	public String getIcon(){
-		return "o_ep_icon_page";
-	}
-	
-	@Override
-	public boolean equals(Object obj) {
-		if(obj == this) {
-			return true;
-		}
-		if(obj instanceof EPPage) {
-			return equalsByPersistableKey((EPPage)obj);
-		}
-		return false;
-	}
-
-
-	/**
-	 * @see java.lang.Object#hashCode()
-	 */
-	@Override
-	public int hashCode() {
-		return getKey() == null ? -238145 : getKey().hashCode();
-	}
-	
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		sb.append("epPage[key=").append(getKey()).append(":")
-		  .append("title=").append(getTitle()).append("]");
-		return sb.toString();
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/model/structel/EPStructureElement.java b/src/main/java/org/olat/portfolio/model/structel/EPStructureElement.java
deleted file mode 100755
index 168f392708088587829b3959ef4511fe4d7c67e9..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/EPStructureElement.java
+++ /dev/null
@@ -1,332 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.olat.core.commons.persistence.PersistenceHelper;
-import org.olat.core.commons.persistence.PersistentObject;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.util.Formatter;
-import org.olat.core.util.filter.FilterFactory;
-import org.olat.portfolio.model.restriction.CollectRestriction;
-import org.olat.resource.OLATResource;
-
-
-
-/** 
- * Description:<br>
- * EPStructureElement is the base element in portfolios, can have page or map as children
- * <P>
- * Initial Date:  08.06.2010 <br>
- * @author rhaag
- */
-public class EPStructureElement extends PersistentObject implements PortfolioStructure, OLATResourceable  {
-
-	private static final long serialVersionUID = -4468638028435147963L;
-	
-	private OLATResource olatResource;
-	private List<EPStructureToArtefactLink> artefacts;
-	private List<EPStructureToStructureLink> children;
-	
-	/**
-	 * 
-	 */
-	public EPStructureElement() {
-		//
-	}
-	
-	/**
-	 * Need for synching
-	 */
-	private Long structureElSource;
-
-	public Long getStructureElSource() {
-		return structureElSource;
-	}
-
-	public void setStructureElSource(Long structureElSource) {
-		this.structureElSource = structureElSource;
-	}
-
-	/**
-	 * @uml.property  name="title"
-	 */
-	private String title;
-
-	/**
-	 * Getter of the property <tt>title</tt>
-	 * @return  Returns the title.
-	 * @uml.property  name="title"
-	 */
-	public String getTitle() {
-		return title;
-	}
-
-	/**
-	 * Setter of the property <tt>title</tt>
-	 * @param title  The title to set.
-	 * @uml.property  name="title"
-	 */
-	public void setTitle(String title) {
-		// OLAT-6439 truncate to allowed database limit
-		this.title = PersistenceHelper.truncateStringDbSave(title, 512, true);
-	}
-
-	/**
-	 * @uml.property  name="description"
-	 */
-	private String description;
-
-	/**
-	 * Getter of the property <tt>description</tt>
-	 * @return  Returns the description.
-	 * @uml.property  name="description"
-	 */
-	public String getDescription() {
-		return description;
-	}
-
-	/**
-	 * Setter of the property <tt>description</tt>
-	 * @param description  The description to set.
-	 * @uml.property  name="description"
-	 */
-	public void setDescription(String description) {
-		// OLAT-6439 truncate to allowed database limit
-		this.description = PersistenceHelper.truncateStringDbSave(description, 2024, true);
-	}
-
-	@Override
-	public String getShortenedDescription() {
-		String desc = getDescription();
-		if(desc == null) {
-			desc = "";
-		} else if(desc.length() > 50) {
-			//to remain valid html: remove html tags
-			desc = FilterFactory.getHtmlTagAndDescapingFilter().filter(desc);
-			desc = Formatter.truncate(desc, 50);
-		}
-		return desc;
-	}
-	
-	/**
-	 * [used by Hibernate]
-	 * @return
-	 */
-	public List<EPStructureToStructureLink> getInternalChildren() {
-		if(children == null) {
-			children = new ArrayList<>();
-		}
-		return children;
-	}
-
-	public void setInternalChildren(List<EPStructureToStructureLink> children) {
-		this.children = children;
-	}
-	
-	/**
-	 * [used by Hibernate]
-	 * @return
-	 */
-	public List<EPStructureToArtefactLink> getInternalArtefacts() {
-		if(artefacts == null) {
-			artefacts = new ArrayList<>();
-		}
-		return artefacts;
-	}
-	
-
-	public void setInternalArtefacts(List<EPStructureToArtefactLink> artefacts) {
-		this.artefacts = artefacts;
-	}
-
-	/**
-	 * editable / non-editable
-	 * @uml.property  name="status"
-	 */
-	private String status;
-
-	/**
-	 * Getter of the property <tt>status</tt>
-	 * @return  Returns the status.
-	 * @uml.property  name="status"
-	 */
-	public String getStatus() {
-		return status;
-	}
-
-	/**
-	 * Setter of the property <tt>status</tt>
-	 * @param status  The status to set.
-	 * @uml.property  name="status"
-	 */
-	public void setStatus(String status) {
-		this.status = status;
-	}
-
-	/**
-	 * @uml.property  name="collectRestriction"
-	 */
-	private List<CollectRestriction> collectRestrictions;
-
-	/**
-	 * Getter of the property <tt>collectRestriction</tt>
-	 * @return  Returns the collectRestriction.
-	 * @uml.property  name="collectRestriction"
-	 */
-	public List<CollectRestriction> getCollectRestrictions() {
-		if(collectRestrictions == null) {
-			collectRestrictions = new ArrayList<>();
-		}
-		return collectRestrictions;
-	}
-
-	/**
-	 * Setter of the property <tt>collectRestriction</tt>
-	 * @param collectRestriction  The collectRestriction to set.
-	 * @uml.property  name="collectRestriction"
-	 */
-	public void setCollectRestrictions(List<CollectRestriction> collectRestrictions) {
-		this.collectRestrictions = collectRestrictions;
-	}
-
-	@Override
-	public OLATResource getOlatResource() {
-		return olatResource;
-	}
-	
-	public void setOlatResource(OLATResource olatResource) {
-		this.olatResource = olatResource;
-	}
-
-	@Override
-	public Long getResourceableId() {
-		return olatResource == null ? null : olatResource.getResourceableId(); 
-	}
-
-	@Override
-	public String getResourceableTypeName() {
-		return olatResource == null ? null : olatResource.getResourceableTypeName(); 
-	}
-
-	@Override
-	public String getIcon(){
-		return "o_ep_icon_struct";
-	}
-
-
-	/**
-	 * @uml.property  name="root"
-	 */
-	private EPStructureElement root;
-
-	/**
-	 * Getter of the property <tt>root</tt>
-	 * @return  Returns the root.
-	 * @uml.property  name="root"
-	 */
-	public EPStructureElement getRoot() {
-		return root;
-	}
-
-	/**
-	 * Setter of the property <tt>root</tt>
-	 * @param root  The root to set.
-	 * @uml.property  name="root"
-	 */
-	public void setRoot(EPStructureElement root) {
-		this.root = root;
-	}
-	
-	/**
-	 * 
-	 */
-	private PortfolioStructureMap rootMap;
-	
-	public PortfolioStructureMap getRootMap() {
-		return rootMap;
-	}
-
-	public void setRootMap(PortfolioStructureMap rootMap) {
-		this.rootMap = rootMap;
-	}
-
-	/**
-	 * @param style The class to use for css-styling infos for this element
-	 */
-	public void setStyle(String style) {
-		this.style = style;
-	}
-
-	/**
-	 * @return Returns the style.
-	 */
-	public String getStyle() {
-		return style;
-	}
-	//The class to use for css-styling infos for this element
-	private String style;
-
-	/**
-	 * @param artefactRepresentationMode The artefactRepresentationMode (table, miniview) to set.
-	 */
-	@Override
-	public void setArtefactRepresentationMode(String artefactRepresentationMode) {
-		this.artefactRepresentationMode = artefactRepresentationMode;
-	}
-
-	/**
-	 * @return Returns the artefactRepresentationMode (table, miniview)
-	 */
-	@Override
-	public String getArtefactRepresentationMode() {
-		return artefactRepresentationMode;
-	}
-
-	
-	private String artefactRepresentationMode;
-
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		sb.append("epStructureElement[key=").append(getKey()).append(":")
-		  .append("title=").append(getTitle()).append("]");
-		return sb.toString();
-	}
-
-	@Override
-	public int hashCode() {
-		return getKey() == null ? 97914 : getKey().hashCode();
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if(this == obj) {
-			return true;
-		}
-		if(obj instanceof EPStructureElement) {
-			EPStructureElement el = (EPStructureElement)obj;
-			return getKey() != null && getKey().equals(el.getKey());
-		}
-		return false;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/model/structel/EPStructureElementToGroupRelation.java b/src/main/java/org/olat/portfolio/model/structel/EPStructureElementToGroupRelation.java
deleted file mode 100644
index 46fc190d8d1e5c7bfd18a664c1d84434486643b7..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/EPStructureElementToGroupRelation.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-
-import org.hibernate.annotations.GenericGenerator;
-import org.hibernate.annotations.Parameter;
-import org.olat.basesecurity.Group;
-import org.olat.basesecurity.model.GroupImpl;
-import org.olat.core.id.Persistable;
-
-/**
- * 
- * Initial date: 24.06.2014<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-@Entity(name="structuretogroup")
-@Table(name="o_ep_struct_to_group")
-public class EPStructureElementToGroupRelation implements Persistable {
-
-	private static final long serialVersionUID = 2215547264646107606L;
-
-	@Id
-	@GeneratedValue(generator = "system-uuid")
-	@GenericGenerator(name = "system-uuid", strategy = "enhanced-sequence", parameters={
-		@Parameter(name="sequence_name", value="hibernate_unique_key"),
-		@Parameter(name="force_table_use", value="true"),
-		@Parameter(name="optimizer", value="legacy-hilo"),
-		@Parameter(name="value_column", value="next_hi"),
-		@Parameter(name="increment_size", value="32767"),
-		@Parameter(name="initial_value", value="32767")
-	})
-	@Column(name="id", nullable=false, unique=true, insertable=true, updatable=false)
-	private Long key;
-	
-	@Temporal(TemporalType.TIMESTAMP)
-	@Column(name="creationdate", nullable=false, insertable=true, updatable=false)
-	private Date creationDate;
-
-	@Column(name="r_defgroup", nullable=false, insertable=true, updatable=false)
-	private boolean defaultGroup = false;
-	
-	@Column(name="r_role", nullable=true, insertable=true, updatable=true)
-	private String role;
-	
-	@Temporal(TemporalType.TIMESTAMP)
-	@Column(name="r_valid_from", nullable=true, insertable=true, updatable=true)
-	private Date validFrom;
-	
-	@Temporal(TemporalType.TIMESTAMP)
-	@Column(name="r_valid_to", nullable=true, insertable=true, updatable=true)
-	private Date validTo;
-	
-	@ManyToOne(targetEntity=GroupImpl.class,fetch=FetchType.LAZY,optional=true)
-	@JoinColumn(name="fk_group_id", nullable=true, insertable=true, updatable=false)
-	private Group group;
-
-	@ManyToOne(targetEntity=EPStructureElement.class,fetch=FetchType.LAZY,optional=true)
-	@JoinColumn(name="fk_struct_id", nullable=true, insertable=true, updatable=true)//updatable need for deletion
-	private EPStructureElement structureElement;
-	
-	public Long getKey() {
-		return key;
-	}
-
-	public void setKey(Long key) {
-		this.key = key;
-	}
-
-	public Date getCreationDate() {
-		return creationDate;
-	}
-
-	public void setCreationDate(Date creationDate) {
-		this.creationDate = creationDate;
-	}
-
-	public boolean isDefaultGroup() {
-		return defaultGroup;
-	}
-
-	public void setDefaultGroup(boolean defaultGroup) {
-		this.defaultGroup = defaultGroup;
-	}
-
-	public String getRole() {
-		return role;
-	}
-
-	public void setRole(String role) {
-		this.role = role;
-	}
-
-	public Date getValidFrom() {
-		return validFrom;
-	}
-
-	public void setValidFrom(Date validFrom) {
-		this.validFrom = validFrom;
-	}
-
-	public Date getValidTo() {
-		return validTo;
-	}
-
-	public void setValidTo(Date validTo) {
-		this.validTo = validTo;
-	}
-
-	public Group getGroup() {
-		return group;
-	}
-
-	public void setGroup(Group group) {
-		this.group = group;
-	}
-
-	public EPStructureElement getStructureElement() {
-		return structureElement;
-	}
-
-	public void setStructureElement(EPStructureElement entry) {
-		this.structureElement = entry;
-	}
-
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		sb.append("reToGroup[resource=")
-			.append(structureElement.getKey()).append(":")
-			.append("group=").append(group.getKey())
-			.append("]");
-		return sb.toString();
-	}
-	
-	@Override
-	public int hashCode() {
-		return getKey() == null ? 29061 : getKey().hashCode();
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if(this == obj) {
-			return true;
-		}
-		if(obj instanceof EPStructureElementToGroupRelation) {
-			EPStructureElementToGroupRelation rel = (EPStructureElementToGroupRelation)obj;
-			return getKey() != null && getKey().equals(rel.getKey());
-		}
-		return false;
-	}
-
-	@Override
-	public boolean equalsByPersistableKey(Persistable persistable) {
-		return equals(persistable);
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/model/structel/EPStructureToArtefactLink.java b/src/main/java/org/olat/portfolio/model/structel/EPStructureToArtefactLink.java
deleted file mode 100755
index 0b47425123e9eecd9ac5f9ef099b21b0c38c7b67..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/EPStructureToArtefactLink.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-import java.util.Date;
-
-import org.olat.core.commons.persistence.PersistentObject;
-import org.olat.core.id.Identity;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * Initial Date:  11.06.2010 <br>
- * @author rhaag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPStructureToArtefactLink extends PersistentObject {
-
-	private static final long serialVersionUID = -7239075055788273545L;
-
-	public EPStructureToArtefactLink() {
-		//
-	}
-
-	/**
-	 * @uml.property  name="creationDate"
-	 */
-	private Date creationDate;
-
-	/**
-	 * Getter of the property <tt>creationDate</tt>
-	 * @return  Returns the creationDate.
-	 * @uml.property  name="creationDate"
-	 */
-	public Date getCreationDate() {
-		return creationDate;
-	}
-
-	/**
-	 * Setter of the property <tt>creationDate</tt>
-	 * @param creationDate  The creationDate to set.
-	 * @uml.property  name="creationDate"
-	 */
-	public void setCreationDate(Date creationDate) {
-		this.creationDate = creationDate;
-	}
-
-	/**
-	 * @uml.property  name="artefact"
-	 */
-	private AbstractArtefact artefact;
-
-	/**
-	 * Getter of the property <tt>artefact</tt>
-	 * @return  Returns the artefact.
-	 * @uml.property  name="artefact"
-	 */
-	public AbstractArtefact getArtefact() {
-		return artefact;
-	}
-
-	/**
-	 * Setter of the property <tt>artefact</tt>
-	 * @param artefact  The artefact to set.
-	 * @uml.property  name="artefact"
-	 */
-	public void setArtefact(AbstractArtefact artefact) {
-		this.artefact = artefact;
-	}
-
-	/**
-	 * @uml.property  name="structureElement"
-	 */
-	private PortfolioStructure structureElement;
-
-	/**
-	 * Getter of the property <tt>structureElement</tt>
-	 * @return  Returns the structureElement.
-	 * @uml.property  name="structureElement"
-	 */
-	public PortfolioStructure getStructureElement() {
-		return structureElement;
-	}
-
-	/**
-	 * Setter of the property <tt>structureElement</tt>
-	 * @param structureElement  The structureElement to set.
-	 * @uml.property  name="structureElement"
-	 */
-	public void setStructureElement(PortfolioStructure structureElement) {
-		this.structureElement = structureElement;
-	}
-
-	/**
-	 * @uml.property  name="reflexion"
-	 */
-	private String reflexion;
-
-	/**
-	 * Getter of the property <tt>reflexion</tt>
-	 * @return  Returns the reflexion.
-	 * @uml.property  name="reflexion"
-	 */
-	public String getReflexion() {
-		return reflexion;
-	}
-
-	/**
-	 * Setter of the property <tt>reflexion</tt>
-	 * @param reflexion  The reflexion to set.
-	 * @uml.property  name="reflexion"
-	 */
-	public void setReflexion(String reflexion) {
-		this.reflexion = reflexion;
-	}
-
-	/**
-	 * @uml.property  name="author"
-	 */
-	private Identity author;
-
-	/**
-	 * Getter of the property <tt>author</tt>
-	 * @return  Returns the author.
-	 * @uml.property  name="author"
-	 */
-	public Identity getAuthor() {
-		return author;
-	}
-
-	/**
-	 * Setter of the property <tt>author</tt>
-	 * @param author  The author to set.
-	 * @uml.property  name="author"
-	 */
-	public void setAuthor(Identity author) {
-		this.author = author;
-	}
-
-	/**
-	 * @uml.property  name="order"
-	 */
-	private int order;
-
-	/**
-	 * Getter of the property <tt>order</tt>
-	 * @return  Returns the order.
-	 * @uml.property  name="order"
-	 */
-	public int getOrder() {
-		return order;
-	}
-
-	/**
-	 * Setter of the property <tt>order</tt>
-	 * @param order  The order to set.
-	 * @uml.property  name="order"
-	 */
-	public void setOrder(int order) {
-		this.order = order;
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/model/structel/EPStructureToStructureLink.java b/src/main/java/org/olat/portfolio/model/structel/EPStructureToStructureLink.java
deleted file mode 100755
index 6987e3fa567ab0337c9a99cc18cf830bb175b64a..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/EPStructureToStructureLink.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-import org.olat.core.commons.persistence.PersistentObject;
-
-/**
- * Initial Date:  11.06.2010 <br>
- * @author rhaag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPStructureToStructureLink extends PersistentObject {
-
-	private static final long serialVersionUID = -6015515053210505716L;
-
-	public EPStructureToStructureLink() {
-		//
-	}
-
-	/**
-	 * @uml.property  name="order"
-	 */
-	private int order;
-
-	/**
-	 * Getter of the property <tt>order</tt>
-	 * @return  Returns the order.
-	 * @uml.property  name="order"
-	 */
-	public int getOrder() {
-		return order;
-	}
-
-	/**
-	 * Setter of the property <tt>order</tt>
-	 * @param order  The order to set.
-	 * @uml.property  name="order"
-	 */
-	public void setOrder(int order) {
-		this.order = order;
-	}
-
-	/** 
-	 * @uml.property name="child"
-	 * @uml.associationEnd inverse="parent:com.frentix.portfolio.structure.PortfolioStructure"
-	 */
-	/**
-	 * @uml.property  name="child"
-	 * @uml.associationEnd  inverse="parent:com.frentix.portfolio.structure.PortfolioStructure"
-	 */
-	private PortfolioStructure child;
-
-	/** 
-	 * Getter of the property <tt>child</tt>
-	 * @return  Returns the child.
-	 * @uml.property  name="child"
-	 */
-	/**
-	 * Getter of the property <tt>child</tt>
-	 * @return  Returns the child.
-	 * @uml.property  name="child"
-	 */
-	public PortfolioStructure getChild() {
-		return child;
-	}
-
-	/** 
-	 * Setter of the property <tt>child</tt>
-	 * @param child  The child to set.
-	 * @uml.property  name="child"
-	 */
-	/**
-	 * Setter of the property <tt>child</tt>
-	 * @param child  The child to set.
-	 * @uml.property  name="child"
-	 */
-	public void setChild(PortfolioStructure child) {
-		this.child = child;
-	}
-
-	/**
-	 * @uml.property  name="parent"
-	 */
-	private PortfolioStructure parent;
-
-	/**
-	 * Getter of the property <tt>parent</tt>
-	 * @return  Returns the parent.
-	 * @uml.property  name="parent"
-	 */
-	public PortfolioStructure getParent() {
-		return parent;
-	}
-
-	/**
-	 * Setter of the property <tt>parent</tt>
-	 * @param parent  The parent to set.
-	 * @uml.property  name="parent"
-	 */
-	public void setParent(PortfolioStructure parent) {
-		this.parent = parent;
-	}
-
-
-
-}
diff --git a/src/main/java/org/olat/portfolio/model/structel/EPStructuredMap.java b/src/main/java/org/olat/portfolio/model/structel/EPStructuredMap.java
deleted file mode 100755
index 79ec06c4e2122c3d7dce94c9c31de64fdbc65298..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/EPStructuredMap.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-import java.util.Date;
-
-/** 
- * Initial Date:  08.06.2010 <br>
- * @author rhaag
- */
-public class EPStructuredMap extends EPAbstractMap {
-
-	private static final long serialVersionUID = -6360377624351045630L;
-
-	public EPStructuredMap() {
-		//
-	}
-
-	/**
-	 * links to Map from where its deriving
-	 * @uml.property  name="structuredMapSource"
-	 */
-	private EPStructuredMapTemplate structuredMapSource;
-	
-
-	/**
-	 * Getter of the property <tt>structuredMapSource</tt>
-	 * @return  Returns the structuredMapSource.
-	 * @uml.property  name="structuredMapSource"
-	 */
-	public PortfolioStructureMap getStructuredMapSource() {
-		return structuredMapSource;
-	}
-
-	/**
-	 * Setter of the property <tt>structuredMapSource</tt>
-	 * @param structuredMapSource  The structuredMapSource to set.
-	 * @uml.property  name="structuredMapSource"
-	 */
-	public void setStructuredMapSource(EPStructuredMapTemplate structuredMapSource) {
-		this.structuredMapSource = structuredMapSource;
-	}
-
-	/**
-	 * links to course wherein it once was assigned to a user
-	 * @uml.property  name="targetResource"
-	 */
-	private EPTargetResource targetResource;
-
-
-	/**
-	 * Getter of the property <tt>targetResource</tt>
-	 * @return  Returns the targetResource.
-	 * @uml.property  name="targetResource"
-	 */
-	public EPTargetResource getTargetResource() {
-		if(targetResource == null) {
-			targetResource = new EPTargetResource();
-		}
-		return targetResource;
-	}
-
-	/**
-	 * Setter of the property <tt>targetResource</tt>
-	 * @param targetResource  The targetResource to set.
-	 * @uml.property  name="targetResource"
-	 */
-	public void setTargetResource(EPTargetResource targetResource) {
-		this.targetResource = targetResource;
-	}
-
-	/**
-	 * as its from an portfolio-task, this might have a return date 
-	 * @uml.property  name="returnDate"
-	 */
-	private Date returnDate;
-
-
-	/**
-	 * Getter of the property <tt>returnDate</tt>
-	 * @return  Returns the returnDate.
-	 * @uml.property  name="returnDate"
-	 */
-	public Date getReturnDate() {
-		return returnDate;
-	}
-
-	/**
-	 * Setter of the property <tt>returnDate</tt>
-	 * @param returnDate  The returnDate to set.
-	 * @uml.property  name="returnDate"
-	 */
-	public void setReturnDate(Date returnDate) {
-		this.returnDate = returnDate;
-	}
-	
-	private Date copyDate;
-
-	public Date getCopyDate() {
-		return copyDate;
-	}
-
-	public void setCopyDate(Date copyDate) {
-		this.copyDate = copyDate;
-	}
-	
-	private Date lastSynchedDate;
-
-	public Date getLastSynchedDate() {
-		return lastSynchedDate;
-	}
-
-	public void setLastSynchedDate(Date lastSynchedDate) {
-		this.lastSynchedDate = lastSynchedDate;
-	}
-	
-	private Date deadLine;
-
-	public Date getDeadLine() {
-		return deadLine;
-	}
-
-	public void setDeadLine(Date deadLine) {
-		this.deadLine = deadLine;
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if(obj == this) {
-			return true;
-		}
-		if(obj instanceof EPStructuredMap) {
-			return equalsByPersistableKey((EPStructuredMap)obj);
-		}
-		return false;
-	}
-	
-	@Override
-	public int hashCode() {
-		return getKey() == null ? -9254 : getKey().hashCode();
-	}
-	
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		sb.append("epStructureMap[key=").append(getKey()).append(":")
-		  .append("title=").append(getTitle()).append("]");
-		return sb.toString();
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/model/structel/EPStructuredMapTemplate.java b/src/main/java/org/olat/portfolio/model/structel/EPStructuredMapTemplate.java
deleted file mode 100755
index 55466e57d53f599f7ab1b784aa119f3ec6def0c0..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/EPStructuredMapTemplate.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-/**
- * Initial Date:  11.06.2010 <br>
- * @author rhaag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPStructuredMapTemplate extends EPAbstractMap {
-
-	private static final long serialVersionUID = -3843189834931713843L;
-
-	public EPStructuredMapTemplate() {
-		//
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if(obj == this) {
-			return true;
-		}
-		if(obj instanceof EPStructuredMapTemplate) {
-			return equalsByPersistableKey((EPStructuredMapTemplate)obj);
-		}
-		return false;
-	}
-
-
-	/**
-	 * @see java.lang.Object#hashCode()
-	 */
-	@Override
-	public int hashCode() {
-		return getKey() == null ? -925 : getKey().hashCode();
-	}
-	
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		sb.append("epMapTemplate[key=").append(getKey()).append(":")
-		  .append("title=").append(getTitle()).append("]");
-		return sb.toString();
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/model/structel/EPTargetResource.java b/src/main/java/org/olat/portfolio/model/structel/EPTargetResource.java
deleted file mode 100644
index 3570ffac459b48af672649127f0bb819e4860089..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/EPTargetResource.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-import org.olat.core.id.OLATResourceable;
-
-/**
- * 
- * Description:<br>
- * EPTargetResource is a component for the hibernate mapping
- * 
- * <P>
- * Initial Date:  2 jul. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPTargetResource implements OLATResourceable {
-	
-	private String resName;
-	private Long resId;
-	private String resSubPath;
-	private String businessPath;
-
-	@Override
-	public String getResourceableTypeName() {
-		return resName;
-	}
-	
-	public void setResourceableTypeName(String resName) {
-		this.resName = resName;
-	}
-
-	@Override
-	public Long getResourceableId() {
-		return resId;
-	}
-	
-	public void setResourceableId(Long resId) {
-		this.resId = resId;
-	}
-
-	public String getSubPath() {
-		return resSubPath;
-	}
-
-	public void setSubPath(String resSubPath) {
-		this.resSubPath = resSubPath;
-	}
-
-	public String getBusinessPath() {
-		return businessPath;
-	}
-
-	public void setBusinessPath(String businessPath) {
-		this.businessPath = businessPath;
-	}
-
-	public OLATResourceable getOLATResourceable() {
-		final Long id = resId;
-		final String name = resName;
-		
-		return new OLATResourceable() {
-			@Override
-			public Long getResourceableId() {
-				return id;
-			}
-
-			@Override
-			public String getResourceableTypeName() {
-				return name;
-			}
-		};
-	}
-
-	@Override
-	public String toString() {
-		return "[" + resName + ":" + resId + "]/" + resSubPath;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/model/structel/ElementType.java b/src/main/java/org/olat/portfolio/model/structel/ElementType.java
deleted file mode 100644
index 0edf78b3c4aac3136e8310d0854002456fb308b5..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/ElementType.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-
-/**
- * 
- * Description:<br>
- *
- * <P>
- * Initial Date:  11 oct. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public enum ElementType {
-	DEFAULT_MAP(),
-	STRUCTURED_MAP(),
-	TEMPLATE_MAP();
-	
-}
diff --git a/src/main/java/org/olat/portfolio/model/structel/PortfolioStructure.java b/src/main/java/org/olat/portfolio/model/structel/PortfolioStructure.java
deleted file mode 100755
index 9bba3dd1eb31f2d69a8160841c8b9f240eb85782..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/PortfolioStructure.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-import java.util.List;
-
-import org.olat.core.id.OLATResourceable;
-import org.olat.portfolio.model.restriction.CollectRestriction;
-import org.olat.resource.OLATResource;
-
-/**
- * 
- * Description:<br>
- * PortfolioStructure can be a map/page or struct-element
- * 
- * <P>
- * Initial Date:  11.06.2010 <br>
- * @author rhaag, roman.haag@frentix.com, http://www.frentix.com
- */
-public interface PortfolioStructure extends PortfolioStructureRef, OLATResourceable {
-	
-	public PortfolioStructure getRoot();
-	
-	public PortfolioStructureMap getRootMap();
-	
-	abstract OLATResource getOlatResource();
-
-	abstract Long getResourceableId();
-
-	abstract String getResourceableTypeName();
-	
-	
-	public String getTitle();
-	
-	public void setTitle(String title);
-	
-	public String getDescription();
-	
-	public void setDescription(String description);
-	
-	public String getShortenedDescription();
-	
-	public String getIcon();
-	
-	
-	public List<CollectRestriction> getCollectRestrictions();
-	
-	public void setCollectRestrictions(List<CollectRestriction> restrictions);
-
-	public String getArtefactRepresentationMode();
-	
-	public void setArtefactRepresentationMode(String artefRepMode);
-
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/model/structel/PortfolioStructureMap.java b/src/main/java/org/olat/portfolio/model/structel/PortfolioStructureMap.java
deleted file mode 100755
index dafd82001e87a1b0db4a9fa24980c3cf68578b75..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/PortfolioStructureMap.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-import java.util.Set;
-
-/** 
- * Initial Date:  08.06.2010 <br>
- * @author rhaag
- */
-public interface PortfolioStructureMap extends PortfolioStructure, PortfolioStructureMapRef {
-	//marker interface
-	
-	public Set<EPStructureElementToGroupRelation> getGroups();
-	
-	public String getStatus();
-}
diff --git a/src/main/java/org/olat/portfolio/model/structel/PortfolioStructureMapRef.java b/src/main/java/org/olat/portfolio/model/structel/PortfolioStructureMapRef.java
deleted file mode 100644
index a2f0ec30372d4ee831b13b7eb48a9e30d0b772d1..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/PortfolioStructureMapRef.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-/**
- * 
- * Initial date: 24.06.2014<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public interface PortfolioStructureMapRef {
-	
-	public Long getKey();
-
-}
diff --git a/src/main/java/org/olat/portfolio/model/structel/PortfolioStructureRef.java b/src/main/java/org/olat/portfolio/model/structel/PortfolioStructureRef.java
deleted file mode 100644
index e5ef2239124d657788695a2529e318a17840f727..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/PortfolioStructureRef.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-/**
- * Reference to a structure, more object oriented than a Long.
- * 
- * 
- * Initial date: 18.11.2015<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public interface PortfolioStructureRef {
-	
-	public Long getKey();
-
-}
diff --git a/src/main/java/org/olat/portfolio/model/structel/StructureElement.hbm.xml b/src/main/java/org/olat/portfolio/model/structel/StructureElement.hbm.xml
deleted file mode 100644
index c15c7a3983e681fab51b9f901a0f8bf5e154eced..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/StructureElement.hbm.xml
+++ /dev/null
@@ -1,194 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-<hibernate-mapping default-lazy="false">
-
-	<class name="org.olat.portfolio.model.structel.EPStructureElement" table="o_ep_struct_el" discriminator-value="element">
-		<!-- the default columns -->
-		<id name="key" column="structure_id" type="long" unsaved-value="null">
-			<generator class="enhanced-sequence">
-				<param name="sequence_name">hibernate_unique_key</param>
-				<param name="force_table_use">true</param>
-				<param name="optimizer">legacy-hilo</param>
-				<param name="value_column">next_hi</param>
-				<param name="increment_size">32767</param>
-				<param name="initial_value">32767</param>
-			</generator>
-		</id>
-		<discriminator column="structure_type" type="string"/>
-		<version name="version" access="field" column="version" type="int"/>
-		<property name="creationDate" column="creationdate" type="timestamp" />
-		
-		<property name="title" column="title" type="string" length="512" not-null="false"/>
-		<property name="description" column="description" type="string" length="2048" not-null="false"/>
-		<property name="style" column="style" type="string" length="128" not-null="false"/>
-		
-		<property name="status" column="status" type="string" length="32" not-null="false"/>
-		<property name="artefactRepresentationMode" column="viewmode" type="string" length="32" not-null="false"/>
-		
-		<property  name="structureElSource" column="struct_el_source" type="long" />
-
-		<many-to-one name="root"
-                 column="fk_struct_root_id"
-                 class="org.olat.portfolio.model.structel.EPStructureElement" 
-                 outer-join="true"   
-                 unique="false" 
-                 cascade="none"/>
-                 
-		<many-to-one name="rootMap"
-                 column="fk_struct_root_map_id"
-                 class="org.olat.portfolio.model.structel.EPStructureElement" 
-                 outer-join="true"   
-                 unique="false" 
-                 cascade="none"/>
-		
-		<many-to-one name="olatResource"
-                 column="fk_olatresource"
-                 class="org.olat.resource.OLATResourceImpl" 
-                 outer-join="true"   
-                 unique="true" 
-                 cascade="none"/>
-                 
-		<list name="collectRestrictions" cascade="all,delete-orphan" lazy="false" inverse="false">
-			<key column="fk_struct_el_id" not-null="true"/>
-			<list-index column="pos"/>
-			<one-to-many class="org.olat.portfolio.model.restriction.CollectRestriction"/>
-		</list>
-
-		<list name="internalChildren" cascade="all,delete-orphan" lazy="true" inverse="false">
-			<key column="fk_struct_parent_id" not-null="true"/>
-			<list-index column="pos"/>
-			<one-to-many class="org.olat.portfolio.model.structel.EPStructureToStructureLink"/>
-		</list>
-    
-		<list name="internalArtefacts" cascade="all,delete-orphan" lazy="true" inverse="false">
-			<key column="fk_struct_id" not-null="true"/>
-			<list-index column="pos"/>
-			<one-to-many class="org.olat.portfolio.model.structel.EPStructureToArtefactLink"/>
-		</list>
-	
-		<subclass name="org.olat.portfolio.model.structel.EPPage" discriminator-value="page">
-		
-		</subclass>
-		
-		<subclass name="org.olat.portfolio.model.structel.EPDefaultMap" discriminator-value="default-map">  
-     
-			<set name="groups" cascade="all,delete-orphan">
-            	<key column="fk_struct_id"/>
-            	<one-to-many class="org.olat.portfolio.model.structel.EPStructureElementToGroupRelation"/>
-        	</set>  
-		
-		</subclass>
-		
-		<subclass name="org.olat.portfolio.model.structel.EPStructuredMap" discriminator-value="structured-map">
-
-			<property  name="returnDate" column="returndate" type="timestamp" not-null="false" />
-			<property  name="copyDate" column="copydate" type="timestamp" not-null="false" />
-			<property  name="lastSynchedDate" column="lastsyncheddate" type="timestamp" not-null="false" />
-			<property  name="deadLine" column="deadline" type="timestamp" not-null="false" />
-			
-			<component name="targetResource" class="org.olat.portfolio.model.structel.EPTargetResource">
-				<property  name="resourceableTypeName" column="target_resname" length="50" type="string" />
-				<property  name="resourceableId" column="target_resid" type="long" />
-				<property  name="subPath" column="target_ressubpath" length="2048" type="string" />
-				<property  name="businessPath" column="target_businesspath" length="2048" type="string" />
-			</component>
-                   
-			<set name="groups" cascade="all,delete-orphan">
-            	<key column="fk_struct_id"/>
-            	<one-to-many class="org.olat.portfolio.model.structel.EPStructureElementToGroupRelation"/>
-        	</set> 
-		
-			<many-to-one name="structuredMapSource"
-                   column="fk_map_source_id"
-                   class="org.olat.portfolio.model.structel.EPStructuredMapTemplate" 
-                   outer-join="true"   
-                   unique="false" 
-                   cascade="none"/>
-		
-		</subclass>
-		
-		<subclass name="org.olat.portfolio.model.structel.EPStructuredMapTemplate" discriminator-value="template-map">
-     
-			<set name="groups" cascade="all,delete-orphan">
-            	<key column="fk_struct_id"/>
-            	<one-to-many class="org.olat.portfolio.model.structel.EPStructureElementToGroupRelation"/>
-        	</set> 
-        	
-		</subclass>
-	</class>
-
-	<class name="org.olat.portfolio.model.structel.EPStructureToStructureLink" table="o_ep_struct_struct_link">
-		<id name="key" column="link_id" type="long" unsaved-value="null">
-			<generator class="enhanced-sequence">
-				<param name="sequence_name">hibernate_unique_key</param>
-				<param name="force_table_use">true</param>
-				<param name="optimizer">legacy-hilo</param>
-				<param name="value_column">next_hi</param>
-				<param name="increment_size">32767</param>
-				<param name="initial_value">32767</param>
-			</generator>
-		</id>
-		<version name="version" access="field" column="version" type="int"/>
-		<property name="creationDate" column="creationdate" type="timestamp" />
-		<property name="order" column="pos" type="int" update="false" insert="false" not-null="true"/>
-
-		<many-to-one name="parent" column="fk_struct_parent_id" class="org.olat.portfolio.model.structel.EPStructureElement"
-			fetch="join" insert="false" update="false" not-null="true"/>
-		<many-to-one name="child" column="fk_struct_child_id" class="org.olat.portfolio.model.structel.EPStructureElement"
-			fetch="join" cascade="none"/>
-	</class>
-  
-	<class name="org.olat.portfolio.model.structel.EPStructureToArtefactLink" table="o_ep_struct_artefact_link">
-		<id name="key" column="link_id" type="long" unsaved-value="null">
-			<generator class="enhanced-sequence">
-				<param name="sequence_name">hibernate_unique_key</param>
-				<param name="force_table_use">true</param>
-				<param name="optimizer">legacy-hilo</param>
-				<param name="value_column">next_hi</param>
-				<param name="increment_size">32767</param>
-				<param name="initial_value">32767</param>
-			</generator>
-		</id>
-		<version name="version" access="field" column="version" type="int"/>
-		<property  name="creationDate" column="creationdate" type="timestamp" />
-		<property name="order" column="pos" type="int" update="false" insert="false" not-null="true"/>
-		<property name="reflexion" column="reflexion" type="text" length="16384" not-null="false"/>
-    
-		<many-to-one name="author" column="fk_auth_id" class="org.olat.basesecurity.IdentityImpl"
-			fetch="join" unique="false" cascade="none"/>
-  
-		<many-to-one name="structureElement" column="fk_struct_id" class="org.olat.portfolio.model.structel.EPStructureElement"
-			fetch="join" insert="false" update="false" not-null="true" cascade="none"/>
-		<many-to-one name="artefact" column="fk_artefact_id" class="org.olat.portfolio.model.artefacts.AbstractArtefact"
-			fetch="join" cascade="none"/>
-	</class>
-  
-	<class name="org.olat.portfolio.model.structel.EPMapShort" table="o_ep_struct_el" mutable="false">
-		<id name="key" column="structure_id" type="long" unsaved-value="null">
-			<generator class="enhanced-sequence">
-				<param name="sequence_name">hibernate_unique_key</param>
-				<param name="force_table_use">true</param>
-				<param name="optimizer">legacy-hilo</param>
-				<param name="value_column">next_hi</param>
-				<param name="increment_size">32767</param>
-				<param name="initial_value">32767</param>
-			</generator>
-		</id>
-    
-		<property name="sourceMapKey" column="fk_map_source_id" type="long"/>
-		<property name="title" column="title" type="string"/>
-
-		<set name="groups">
-            <key column="fk_struct_id"/>
-            <one-to-many class="org.olat.portfolio.model.structel.EPStructureElementToGroupRelation"/>
-        </set> 
-
-		<many-to-one name="olatResource"
-                 column="fk_olatresource"
-                 class="org.olat.resource.OLATResourceImpl" 
-                 outer-join="true"   
-                 unique="true" 
-                 cascade="none"/>
-	</class>
-  
-</hibernate-mapping>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/model/structel/StructureStatusEnum.java b/src/main/java/org/olat/portfolio/model/structel/StructureStatusEnum.java
deleted file mode 100644
index d2e66bf66c99e84be6fc6bc2e5572fdc57cbc6d5..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/model/structel/StructureStatusEnum.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.model.structel;
-
-/**
- * 
- * Description:<br>
- * List of status from structure element.
- * 
- * <P>
- * Initial Date:  8 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class StructureStatusEnum {
-	
-	public static final String CLOSED = "closed";
-	public static final String OPEN = null;
-
-}
diff --git a/src/main/java/org/olat/portfolio/package.html b/src/main/java/org/olat/portfolio/package.html
deleted file mode 100644
index 09191047f7691ce5c1a8547c55a9a0e08a824fd8..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/package.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
-TODO:
-
-- Describe the package structure of the portfolio-modul
-- Example for registering an artefactHandler to PortfolioModul (either in portfolioContext or over module)
-- actual UML charts for better understanding 
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/site/EPSite.java b/src/main/java/org/olat/portfolio/site/EPSite.java
deleted file mode 100644
index 22b483ded0253278434542c66d1eb2de4b50b8a6..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/site/EPSite.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.site;
-
-import java.util.Locale;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.navigation.AbstractSiteInstance;
-import org.olat.core.gui.control.navigation.DefaultNavElement;
-import org.olat.core.gui.control.navigation.NavElement;
-import org.olat.core.gui.control.navigation.SiteConfiguration;
-import org.olat.core.gui.control.navigation.SiteDefinition;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.context.BusinessControlFactory;
-import org.olat.core.id.context.StateSite;
-import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
-import org.olat.core.util.Util;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.portfolio.ui.EPOverviewController;
-import org.olat.util.logging.activity.LoggingResourceable;
-
-/**
- * 
- * Initial date: 24.03.2014<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public class EPSite extends AbstractSiteInstance {
-	
-	private final NavElement origNavElem;
-	private NavElement curNavElem;
-	
-	/**
-	 * @param loccale
-	 */
-	public EPSite(SiteDefinition siteDef, Locale locale) {
-		super(siteDef);
-		Translator trans = Util.createPackageTranslator(EPOverviewController.class, locale);
-		origNavElem = new DefaultNavElement(trans.translate("site.title"), trans.translate("site.title.alt"), "o_site_portfolio");
-		curNavElem = new DefaultNavElement(origNavElem);
-	}
-
-	@Override
-	public NavElement getNavElement() {
-		return curNavElem;
-	}
-
-	@Override
-	protected Controller createController(UserRequest ureq, WindowControl wControl, SiteConfiguration config) {
-		OLATResourceable ores = OresHelper.createOLATResourceableInstance(EPSite.class, 0l);
-		ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapBusinessPath(ores));
-		WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ureq, ores, new StateSite(this), wControl, true);
-		EPOverviewController mainController = new EPOverviewController(ureq, bwControl);
-		return mainController;
-	}
-
-	@Override
-	public void reset() {
-		curNavElem = new DefaultNavElement(origNavElem);
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/site/EPSiteDef.java b/src/main/java/org/olat/portfolio/site/EPSiteDef.java
deleted file mode 100644
index 86297a65712d08b292f6c3603ba6437bab8f9ebe..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/site/EPSiteDef.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.site;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.navigation.AbstractSiteDefinition;
-import org.olat.core.gui.control.navigation.SiteConfiguration;
-import org.olat.core.gui.control.navigation.SiteDefinition;
-import org.olat.core.gui.control.navigation.SiteInstance;
-import org.olat.core.util.UserSession;
-import org.olat.portfolio.PortfolioModule;
-
-/**
- * 
- * Initial date: 25.03.2014<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public class EPSiteDef  extends AbstractSiteDefinition implements SiteDefinition {
-
-	@Override
-	protected SiteInstance createSite(UserRequest ureq, WindowControl wControl, SiteConfiguration config) {
-		UserSession usess = ureq.getUserSession();
-		if(usess == null || usess.getRoles() == null || usess.getRoles().isGuestOnly()) {
-			return null;
-		}
-		
-		// only for registered users and invitee but not guests
-		return new EPSite(this, ureq.getLocale());
-	}
-	
-	@Override
-	public boolean isEnabled() {
-		PortfolioModule module = CoreSpringFactory.getImpl(PortfolioModule.class);
-		return module.isEnabled() && super.isEnabled();
-	}
-
-	@Override
-	public boolean isFeatureEnabled() {
-		PortfolioModule module = CoreSpringFactory.getImpl(PortfolioModule.class);
-		return module.isEnabled();
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java b/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java
deleted file mode 100755
index fb5beb7b45d484f395ecc9fd8831bc0a4e1e41d3..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java
+++ /dev/null
@@ -1,359 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui;
-
-import java.util.List;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.panel.Panel;
-import org.olat.core.gui.components.segmentedview.SegmentViewComponent;
-import org.olat.core.gui.components.segmentedview.SegmentViewEvent;
-import org.olat.core.gui.components.segmentedview.SegmentViewFactory;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.gui.control.generic.dtabs.Activateable2;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.StateEntry;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.EPSecurityCallbackImpl;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.EPFilterSettings;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.ui.artefacts.collect.EPAddArtefactController;
-import org.olat.portfolio.ui.artefacts.view.EPArtefactChoosenEvent;
-import org.olat.portfolio.ui.artefacts.view.EPArtefactDeletedEvent;
-import org.olat.portfolio.ui.artefacts.view.EPArtefactListChoosenEvent;
-import org.olat.portfolio.ui.artefacts.view.EPMultiArtefactsController;
-import org.olat.portfolio.ui.artefacts.view.EPMultipleArtefactPreviewController;
-import org.olat.portfolio.ui.artefacts.view.EPMultipleArtefactsAsTableController;
-import org.olat.portfolio.ui.artefacts.view.EPTagBrowseController;
-import org.olat.portfolio.ui.artefacts.view.EPTagBrowseEvent;
-import org.olat.portfolio.ui.filter.EPFilterSelectController;
-import org.olat.portfolio.ui.filter.PortfolioFilterChangeEvent;
-import org.olat.portfolio.ui.filter.PortfolioFilterController;
-import org.olat.portfolio.ui.filter.PortfolioFilterEditEvent;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Presents an overview of all artefacts of an user. 
- * 
- * Initial Date: 11.06.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPArtefactPoolRunController extends BasicController implements Activateable2 {
-
-	private VelocityContainer vC;
-	private EPFilterSettings filterSettings = new EPFilterSettings();
-	private EPAddArtefactController addArtefactCtrl;
-	
-	private SegmentViewComponent segmentView;
-	private Link artefactsLink, browseLink, searchLink;
-	private Controller filterSelectCtrl;
-	private Filter previousFilterMode;
-	private EPViewModeController viewModeCtrl;
-	private EPMultiArtefactsController artCtrl;
-	private String previousViewMode;
-	private List<AbstractArtefact> previousArtefactsList;
-	
-	private final boolean artefactChooseMode;
-	private final boolean canAddArtefacts;
-	private final boolean importV2;
-	
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	@Autowired
-	private PortfolioModule portfolioModule;
-	
-	private PortfolioStructure preSelectedStruct;
-
-	public EPArtefactPoolRunController(UserRequest ureq, WindowControl wControl) {
-		this(ureq, wControl, false, true, false);
-	}
-	
-	public EPArtefactPoolRunController(UserRequest ureq, WindowControl wControl, boolean artefactChooseMode, boolean canAddArtefacts) {
-		this(ureq, wControl, artefactChooseMode, canAddArtefacts, false);
-	}
-	
-	public EPArtefactPoolRunController(UserRequest ureq, WindowControl wControl, boolean artefactChooseMode, boolean canAddArtefacts, boolean importV2) {
-		super(ureq, wControl);
-		this.importV2 = importV2;
-		this.canAddArtefacts = canAddArtefacts;
-		this.artefactChooseMode = artefactChooseMode;
-		Component viewComp = new Panel("empty");
-		Component filterPanel = new Panel("filter");
-
-		if (portfolioModule.isEnabled()) {
-			init(ureq);
-			initViewModeController(ureq);
-			viewComp = vC;
-			vC.put("filterPanel", filterPanel);
-			
-			if (filterSettings.isFilterEmpty()) {
-				initTPAllView(ureq);
-			} else {
-				initTPFilterView(ureq);
-			}
-
-			putInitialPanel(viewComp);
-		} else {
-			putInitialPanel(createVelocityContainer("portfolio_disabled"));
-		}
-	}
-
-	/**
-	 * create the velocity for the artefact-pool with a tabbed pane / segmented
-	 * view this doesn't initialize anything, the panels first are empty!
-	 * 
-	 * @param ureq
-	 */
-	private void init(UserRequest ureq) {
-		vC = createVelocityContainer("artefactsmain");
-		vC.contextPut("artefactChooseMode", artefactChooseMode);
-		vC.contextPut("importV2", importV2);
-		
-		segmentView = SegmentViewFactory.createSegmentView("segments", vC, this);
-		artefactsLink = LinkFactory.createLink("viewTab.all", vC, this);
-		segmentView.addSegment(artefactsLink, true);
-		
-		browseLink = LinkFactory.createLink("viewTab.browse", vC, this);
-		segmentView.addSegment(browseLink, false);
-		
-		searchLink = LinkFactory.createLink("viewTab.search", vC, this);
-		segmentView.addSegment(searchLink, false);
-		
-		if(canAddArtefacts) {
-			addArtefactCtrl = new EPAddArtefactController(ureq, getWindowControl());
-			listenTo(addArtefactCtrl);
-			vC.put("addArtefactCtrl", addArtefactCtrl.getInitialComponent());
-		}
-	}
-	
-	/**
-	 * switch between filter selection (drop down only) and the full filter-view
-	 * and put this to the filter-panel
-	 * @param ureq
-	 * @param readOnlyMode
-	 */
-	private void initFilterPanel(UserRequest ureq, Filter filterMode){
-		if (filterSelectCtrl == null || previousFilterMode != filterMode){
-			removeAsListenerAndDispose(filterSelectCtrl);
-			switch(filterMode) {
-				case read_only:
-					filterSelectCtrl = new EPFilterSelectController(ureq, getWindowControl(), filterSettings.getFilterId());
-					break;
-				case tags:
-					filterSelectCtrl = new EPTagBrowseController(ureq, getWindowControl());
-					break;
-				case extended:
-					filterSelectCtrl = new PortfolioFilterController(ureq, getWindowControl(), filterSettings);
-					break;
-			}
-
-			previousFilterMode = filterMode;
-			listenTo(filterSelectCtrl);
-			vC.put("filterPanel", filterSelectCtrl.getInitialComponent());
-		}
-	}
-
-	private void setSegmentContent(Controller ctrl){
-		vC.put("segmentContent", ctrl.getInitialComponent());
-		vC.setDirty(true);
-	}
-
-	private void initTPAllView(UserRequest ureq) {
-		filterSettings = new EPFilterSettings();
-		List<AbstractArtefact> artefacts = ePFMgr.getArtefactPoolForUser(getIdentity());
-		initMultiArtefactCtrl(ureq, artefacts);
-		initFilterPanel(ureq, Filter.read_only);
-		setSegmentContent(artCtrl);
-		addToHistory(ureq, OresHelper.createOLATResourceableType("All"), null);
-	}
-
-	
-	private void initMultiArtefactCtrl(UserRequest ureq, List<AbstractArtefact> artefacts){
-		// decide how to present artefacts depending on users settings
-		String userPrefsMode = ePFMgr.getUsersPreferedArtefactViewMode(getIdentity(), EPViewModeController.VIEWMODE_CONTEXT_ARTEFACTPOOL);
-		if (previousViewMode != null && !previousViewMode.equals(userPrefsMode)) {
-			removeAsListenerAndDispose(artCtrl);
-		}
-
-		if (importV2  || (userPrefsMode != null && userPrefsMode.equals(EPViewModeController.VIEWMODE_TABLE))){
-			EPSecurityCallback secCallback = new EPSecurityCallbackImpl(true, true);
-			artCtrl = new EPMultipleArtefactsAsTableController(ureq, getWindowControl(), artefacts, null, artefactChooseMode, importV2, secCallback);
-			viewModeCtrl.selectTable();
-		} else {
-			artCtrl = new EPMultipleArtefactPreviewController(ureq, getWindowControl(), artefacts, artefactChooseMode);
-			viewModeCtrl.selectDetails();
-		}
-		previousViewMode = userPrefsMode;
-		listenTo(artCtrl);
-		previousArtefactsList = artefacts;
-	}
-
-	private void initTPFilterView(UserRequest ureq) {
-		List<AbstractArtefact> filteredArtefacts = ePFMgr.filterArtefactsByFilterSettings(filterSettings, 
-				getIdentity(), ureq.getUserSession().getRoles(), getLocale());
-		initMultiArtefactCtrl(ureq, filteredArtefacts);
-		initFilterPanel(ureq, Filter.extended);
-		setSegmentContent(artCtrl);
-		addToHistory(ureq, OresHelper.createOLATResourceableType("Search"), null);
-	}
-
-	private void initTPBrowseView(UserRequest ureq) {
-		List<AbstractArtefact> artefacts = ePFMgr.getArtefactPoolForUser(getIdentity());
-		initMultiArtefactCtrl(ureq, artefacts);
-		initFilterPanel(ureq, Filter.tags);
-		setSegmentContent(artCtrl);
-		addToHistory(ureq, OresHelper.createOLATResourceableType("Browse"), null);
-	}
-	
-	private void initViewModeController(UserRequest ureq){
-		viewModeCtrl = new EPViewModeController(ureq, getWindowControl(), EPViewModeController.VIEWMODE_CONTEXT_ARTEFACTPOOL);
-		listenTo(viewModeCtrl);
-		vC.put("viewMode", viewModeCtrl.getInitialComponent());
-	}
-
-	public PortfolioStructure getPreSelectedStruct() {
-		return preSelectedStruct;
-	}
-
-	public void setPreSelectedStruct(PortfolioStructure preSelectedStruct) {
-		this.preSelectedStruct = preSelectedStruct;
-		if(addArtefactCtrl != null) {
-			addArtefactCtrl.setPreSelectedStruct(preSelectedStruct);
-		}
-	}
-
-	@Override
-	protected void doDispose() {
-		// ctrls disposed by basicCtrl due to listenTo()'s
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		if(source == segmentView) {
-			if(event instanceof SegmentViewEvent) {
-				SegmentViewEvent sve = (SegmentViewEvent)event;
-				String segmentCName = sve.getComponentName();
-				Component clickedLink = vC.getComponent(segmentCName);
-				if (clickedLink == artefactsLink) {
-					initTPAllView(ureq);
-				} else if (clickedLink == browseLink){
-					initTPBrowseView(ureq);
-				} else if (clickedLink == searchLink){
-					initTPFilterView(ureq);
-				}
-			}	
-		}		
-	}
-	
-	@Override
-	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		if(entries == null || entries.isEmpty()) return;
-		
-		if(portfolioModule.isEnabled()) {
-			String type = entries.get(0).getOLATResourceable().getResourceableTypeName();
-			if("All".equalsIgnoreCase(type)) {
-				initTPAllView(ureq);
-				segmentView.select(artefactsLink);
-			} else if("Browse".equalsIgnoreCase(type)) {
-				initTPBrowseView(ureq);
-				segmentView.select(browseLink);
-			} else if("Search".equalsIgnoreCase(type)) {
-				initTPFilterView(ureq);
-				segmentView.select(searchLink);
-			}
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		super.event(ureq, source, event);
-		if (source == addArtefactCtrl) {
-			// some artefacts were added, refresh view
-			if (event.equals(Event.DONE_EVENT)) {
-				initTPAllView(ureq);
-				fireEvent(ureq, event);
-			}
-		} else if (event instanceof EPArtefactChoosenEvent || event instanceof EPArtefactListChoosenEvent) {
-			// an artefact was choosen, pass through the event until top
-			fireEvent(ureq, event);
-		} else if (source == filterSelectCtrl) {
-			if (event instanceof PortfolioFilterChangeEvent) {
-				PortfolioFilterChangeEvent pFEvent = (PortfolioFilterChangeEvent) event;
-				filterSettings = pFEvent.getFilterList();
-			} else if (event instanceof PortfolioFilterEditEvent) {
-				PortfolioFilterEditEvent editEvent = (PortfolioFilterEditEvent)event;
-				filterSettings = editEvent.getFilterList();
-			}
-			if (source instanceof EPFilterSelectController){
-				if (event == Event.CHANGED_EVENT) {
-					initTPFilterView(ureq);
-				} else if (event instanceof PortfolioFilterChangeEvent) {
-					// preset search was selected, apply it, but stay within first segment
-					initTPFilterView(ureq);
-					initFilterPanel(ureq, Filter.read_only);
-				} else if (event instanceof PortfolioFilterEditEvent) {
-					initTPFilterView(ureq);
-					initFilterPanel(ureq, Filter.extended);
-					segmentView.select(searchLink);
-				}
-			} else if (source instanceof EPTagBrowseController) {
-				if (event instanceof EPTagBrowseEvent) {
-					EPTagBrowseEvent found = (EPTagBrowseEvent)event;
-					initMultiArtefactCtrl(ureq, found.getArtefacts());
-					setSegmentContent(artCtrl);
-				}
-			} else if (source instanceof PortfolioFilterController){
-				if(event instanceof PortfolioFilterChangeEvent) {
-					initTPFilterView(ureq);
-				}
-			}
-		} else if (source == viewModeCtrl && event.getCommand().equals(EPViewModeController.VIEWMODE_CHANGED_EVENT_CMD)){
-			initMultiArtefactCtrl(ureq, previousArtefactsList);
-			setSegmentContent(artCtrl);
-		} else if (event instanceof EPArtefactDeletedEvent){
-			EPArtefactDeletedEvent epDelEv = (EPArtefactDeletedEvent) event;
-			previousArtefactsList.remove(epDelEv.getArtefact());
-			initMultiArtefactCtrl(ureq, previousArtefactsList);
-			setSegmentContent(artCtrl);
-		}
-	}
-
-	private enum Filter {
-		read_only,
-		tags,
-		extended
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/EPMapRunController.java b/src/main/java/org/olat/portfolio/ui/EPMapRunController.java
deleted file mode 100755
index 19f58338801ea452ddec66ff20a9ad16f66ea46c..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/EPMapRunController.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui;
-
-import java.util.List;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.gui.control.generic.closablewrapper.CloseableCalloutWindowController;
-import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
-import org.olat.core.gui.control.generic.dtabs.Activateable2;
-import org.olat.core.id.Identity;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.StateEntry;
-import org.olat.portfolio.EPTemplateMapResource;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.EPDefaultMap;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.ui.structel.EPCreateMapController;
-import org.olat.portfolio.ui.structel.EPMapCreatedEvent;
-import org.olat.portfolio.ui.structel.EPMapEvent;
-import org.olat.portfolio.ui.structel.EPMultipleMapController;
-import org.olat.portfolio.ui.structel.EPStructureEvent;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.controllers.ReferencableEntriesSearchController;
-import org.olat.search.SearchServiceUIFactory;
-import org.olat.search.SearchServiceUIFactory.DisplayOption;
-import org.olat.search.ui.SearchInputController;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * 
- * Description:<br>
- * Shows all Maps of a user.
- * 
- * <P>
- * Initial Date:  11.06.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPMapRunController extends BasicController implements Activateable2 {
-
-	private VelocityContainer vC;
-	private Link createMapLink;
-	private Link createMapFromTemplateLink;
-	private EPCreateMapController createMapCtrl;
-	private CloseableModalController createMapBox;
-	private ReferencableEntriesSearchController searchTemplateCtrl;
-	private EPMultipleMapController multiMapCtrl;
-	private SearchInputController searchController;
-	
-	private final boolean create;
-	private final Identity choosenOwner;
-	private final EPMapRunViewOption option;
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	private Link createMapCalloutLink;
-	private CloseableCalloutWindowController mapCreateCalloutCtrl;
-
-	/**
-	 * 
-	 * @param ureq
-	 * @param wControl
-	 * @param create Can user create new maps in this context
-	 * @param option Select the view option from the maps
-	 * @param choosenOwner Limit the list to maps from one specific owner
-	 * @param types
-	 */
-	public EPMapRunController(UserRequest ureq, WindowControl wControl, boolean create, EPMapRunViewOption option,
-			Identity choosenOwner) {	
-		super(ureq, wControl);
-		this.create = create;
-		this.option = option;
-		this.choosenOwner = choosenOwner;
-		
-		Component viewComp = init(ureq);
-		putInitialPanel(viewComp);
-	}
-
-	private VelocityContainer init(UserRequest ureq) {
-		vC = createVelocityContainer("mymapsmain");
-		vC.contextPut("overview", Boolean.TRUE);
-		if(create) {
-			createMapLink = LinkFactory.createButton("create.map", vC, this);	
-			createMapLink.setElementCssClass("o_sel_create_map");
-		}
-		
-		String documentType;
-		switch(option) {
-			case MY_DEFAULTS_MAPS:
-				documentType = "type.d*." + EPDefaultMap.class.getSimpleName();
-				break;
-			case MY_EXERCISES_MAPS:
-				documentType = "type.*." + EPStructuredMap.class.getSimpleName();
-				break;
-			default:
-				documentType = null;
-				break;
-		}
-		
-		if(documentType != null) {
-			SearchServiceUIFactory searchServiceUIFactory = (SearchServiceUIFactory)CoreSpringFactory.getBean(SearchServiceUIFactory.class);
-			searchController = searchServiceUIFactory.createInputController(ureq, getWindowControl(), DisplayOption.STANDARD, null);
-			listenTo(searchController);
-			vC.put("search_input", searchController.getInitialComponent());
-			
-			searchController.setDocumentType(documentType);
-			searchController.setResourceContextEnable(true);
-			searchController.setResourceUrl(null);
-		}
-		
-		
-		initTitle(vC);
-		removeAsListenerAndDispose(multiMapCtrl);
-		multiMapCtrl = new EPMultipleMapController(ureq, getWindowControl(), option, choosenOwner);
-		listenTo(multiMapCtrl);
-		vC.put("mapCtrl", multiMapCtrl.getInitialComponent());
-		return vC;
-	}
-	
-	private void initTitle(VelocityContainer container) {
-		String titleKey;
-		String descriptionKey;
-		switch(option) {
-			case OTHER_MAPS:
-				titleKey = "othermap.title";
-				descriptionKey = "othermap.intro";
-				break;
-			case OTHERS_MAPS:
-				titleKey = "othermaps.title";
-				descriptionKey = "othermaps.intro";
-				break;
-			case MY_EXERCISES_MAPS:
-				titleKey = "mystructuredmaps.title";
-				descriptionKey = "mystructuredmaps.intro";
-				break;
-			default:// MY_DEFAULTS_MAPS:
-				titleKey = "mymaps.title";
-				descriptionKey = "mymaps.intro";
-				break;
-		}
-
-		container.contextPut("title", titleKey);
-		container.contextPut("description", descriptionKey);
-	}
-
-	@Override
-	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		if(entries == null || entries.isEmpty()) return;
-		multiMapCtrl.activate(ureq, entries, state);
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		if (source == createMapLink){
-			// if only normal maps can be created, show popup immediately, else present selection in callout
-			if(option.equals(EPMapRunViewOption.MY_DEFAULTS_MAPS)) {
-				VelocityContainer mapCreateVC = createVelocityContainer("createMapCallout");
-				createMapCalloutLink = LinkFactory.createLink("create.map.default", mapCreateVC, this);	
-				createMapCalloutLink.setElementCssClass("o_sel_create_default_map");
-				createMapFromTemplateLink = LinkFactory.createLink("create.map.fromTemplate", mapCreateVC, this);
-				createMapFromTemplateLink.setElementCssClass("o_sel_create_template_map");
-				String title = translate("create.map");
-				
-				removeAsListenerAndDispose(mapCreateCalloutCtrl);
-				mapCreateCalloutCtrl = new CloseableCalloutWindowController(ureq, getWindowControl(), mapCreateVC, createMapLink, title, true, null);
-				listenTo(mapCreateCalloutCtrl);
-				mapCreateCalloutCtrl.activate();
-			} else {
-				popUpCreateMapBox(ureq);
-			}
-		} else if (source == createMapFromTemplateLink) {
-			closeCreateMapCallout();
-			popUpCreateMapFromTemplateBox(ureq);
-		} else if (source == createMapCalloutLink){
-			closeCreateMapCallout();
-			popUpCreateMapBox(ureq);
-		}
-	}
-	
-	private void closeCreateMapCallout() {
-		if (mapCreateCalloutCtrl != null){
-			mapCreateCalloutCtrl.deactivate();
-			removeAsListenerAndDispose(mapCreateCalloutCtrl);
-			mapCreateCalloutCtrl = null;
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		super.event(ureq, source, event);
-		if (source == createMapBox) {
-			popDownCreateMapBox();
-		} else if (source == createMapCtrl){
-			if (event instanceof EPMapCreatedEvent){
-				PortfolioStructureMap newMap = ((EPMapCreatedEvent) event).getPortfolioStructureMap();
-				multiMapCtrl.activateMap(ureq, newMap);
-			}
-			createMapBox.deactivate();
-			popDownCreateMapBox();
-			toogleHeader(false);
-		} else if (source == searchTemplateCtrl) {
-			if(event == ReferencableEntriesSearchController.EVENT_REPOSITORY_ENTRY_SELECTED) {
-				RepositoryEntry repoEntry = searchTemplateCtrl.getSelectedEntry();
-				PortfolioStructureMap newMap = createMapFromTemplate(repoEntry);
-				multiMapCtrl.activateMap(ureq, newMap);
-			}
-			createMapBox.deactivate();
-			popDownCreateMapBox();
-		} else if (source == multiMapCtrl) {
-			if(event instanceof EPMapEvent) {
-				String cmd = event.getCommand();
-				if(EPStructureEvent.SELECT.equals(cmd)) {
-					toogleHeader(false);
-				} else if(EPStructureEvent.CLOSE.equals(cmd)) {
-					toogleHeader(true);
-				}
-			}
-		} else if (source == mapCreateCalloutCtrl && event == CloseableCalloutWindowController.CLOSE_WINDOW_EVENT) {
-			removeAsListenerAndDispose(mapCreateCalloutCtrl);
-			mapCreateCalloutCtrl = null;
-		}
-	}
-	
-	private void toogleHeader(boolean enable) {
-		if(vC != null) {
-			vC.contextPut("overview", new Boolean(enable));
-		}
-	}
-	
-	private void popDownCreateMapBox() {
-		removeAsListenerAndDispose(createMapCtrl);
-		createMapCtrl = null;
-		createMapBox.dispose();
-		createMapBox = null;
-	}
-
-	/**
-	 * @param ureq
-	 */
-	private void popUpCreateMapBox(UserRequest ureq) {
-		String title = translate("create.map");
-		createMapCtrl = new EPCreateMapController(ureq, getWindowControl());
-		listenTo(createMapCtrl);
-		createMapBox = new CloseableModalController(getWindowControl(), title, createMapCtrl.getInitialComponent(), true, title);
-		createMapBox.setCustomWindowCSS("o_sel_add_map_window");
-		listenTo(createMapBox);
-		createMapBox.activate();
-	}
-	
-	private void popUpCreateMapFromTemplateBox(UserRequest ureq) {
-		String title = translate("create.map");
-		String commandLabel = translate("create.map.selectTemplate");
-		removeAsListenerAndDispose(searchTemplateCtrl);
-		searchTemplateCtrl = new ReferencableEntriesSearchController(getWindowControl(), ureq,
-				new String[]{EPTemplateMapResource.TYPE_NAME}, commandLabel, false, false, false, false, false);			
-		listenTo(searchTemplateCtrl);
-		createMapBox = new CloseableModalController(getWindowControl(), title, searchTemplateCtrl.getInitialComponent(), true, title);
-		createMapBox.setCustomWindowCSS("o_sel_add_map_template_window");
-		listenTo(createMapBox);
-		createMapBox.activate();
-	}
-	
-	private PortfolioStructureMap createMapFromTemplate(RepositoryEntry repoEntry) {
-		PortfolioStructureMap template = (PortfolioStructureMap)ePFMgr.loadPortfolioStructure(repoEntry.getOlatResource());
-		PortfolioStructureMap copy = ePFMgr.createAndPersistPortfolioDefaultMap(getIdentity(), template.getTitle(), template.getDescription());
-		ePFMgr.copyStructureRecursively(template, copy, true);
-		return copy;
-	}
-
-	@Override
-	protected void doDispose() {
-		if (createMapBox != null) {
-			createMapBox.dispose();
-			createMapBox = null;
-		}		
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/EPMapRunViewOption.java b/src/main/java/org/olat/portfolio/ui/EPMapRunViewOption.java
deleted file mode 100644
index df6c6eeee5170bdddb98afd7706a9b24c3905dac..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/EPMapRunViewOption.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.portfolio.ui;
-
-/**
- * Initial Date:  9 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public enum EPMapRunViewOption {
-	MY_DEFAULTS_MAPS,//my maps
-	MY_EXERCISES_MAPS,//my exercises
-	OTHERS_MAPS,//maps from other users
-	OTHER_MAPS,//map from a single other user
-}
diff --git a/src/main/java/org/olat/portfolio/ui/EPOverviewController.java b/src/main/java/org/olat/portfolio/ui/EPOverviewController.java
deleted file mode 100644
index e8ef6f4c9ae889aa87dfc7822c8072873b6afb89..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/EPOverviewController.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui;
-
-import java.util.List;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.panel.MainPanel;
-import org.olat.core.gui.components.segmentedview.SegmentViewComponent;
-import org.olat.core.gui.components.segmentedview.SegmentViewEvent;
-import org.olat.core.gui.components.segmentedview.SegmentViewFactory;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.gui.control.generic.dtabs.Activateable2;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.context.BusinessControlFactory;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.StateEntry;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * 
- * Initial date: 24.03.2014<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public class EPOverviewController extends BasicController implements Activateable2 {
-	
-	private EPMapRunController myMapsCtrl;
-	private EPMapRunController myTasksCtrl;
-	private EPMapRunController publicMapsCtrl;
-	private EPArtefactPoolRunController artefactsCtrl;
-	
-	private final VelocityContainer mainVC;
-	private final SegmentViewComponent segmentView;
-	private final Link myArtefactLink, myMapLink, myTaskLink, publicMapLink;
-	
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	
-	public EPOverviewController(UserRequest ureq, WindowControl wControl) {
-		super(ureq, wControl);
-		
-		mainVC = createVelocityContainer("segments");
-		
-		segmentView = SegmentViewFactory.createSegmentView("segments", mainVC, this);
-		myArtefactLink = LinkFactory.createLink("myartefacts.menu.title", mainVC, this);
-		myArtefactLink.setElementCssClass("o_sel_ep_my_artfeacts");
-		segmentView.addSegment(myArtefactLink, true);
-		myMapLink = LinkFactory.createLink("mymaps.menu.title", mainVC, this);
-		myMapLink.setElementCssClass("o_sel_ep_my_maps");
-		segmentView.addSegment(myMapLink, false);
-		myTaskLink = LinkFactory.createLink("mystructuredmaps.menu.title", mainVC, this);
-		myTaskLink.setElementCssClass("o_sel_ep_my_tasks");
-		segmentView.addSegment(myTaskLink, false);
-		publicMapLink = LinkFactory.createLink("othermaps.menu.title", mainVC, this);
-		publicMapLink.setElementCssClass("o_sel_ep_public_maps");
-		segmentView.addSegment(publicMapLink, false);
-		
-		doOpenMyArtefacts(ureq);
-
-		MainPanel panel = new MainPanel("portfolio");
-		panel.setContent(mainVC);
-		putInitialPanel(panel);
-	}
-	
-	@Override
-	protected void doDispose() {
-		//
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		if(source == segmentView) {
-			if(event instanceof SegmentViewEvent) {
-				SegmentViewEvent sve = (SegmentViewEvent)event;
-				String segmentCName = sve.getComponentName();
-				Component clickedLink = mainVC.getComponent(segmentCName);
-				if (clickedLink == myArtefactLink) {
-					doOpenMyArtefacts(ureq);
-				} else if (clickedLink == myMapLink) {
-					doOpenMyMaps(ureq);
-				} else if (clickedLink == myTaskLink) {
-					doOpenMyTasks(ureq);
-				} else if (clickedLink == publicMapLink) {
-					doOpenPublicMaps(ureq);
-				}
-			}
-		}
-	}
-	
-	@Override
-	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		if(entries == null || entries.isEmpty()) return;
-		
-		String type = entries.get(0).getOLATResourceable().getResourceableTypeName();
-		if("EPDefaultMap".equalsIgnoreCase(type)) {
-			Long mapKey = entries.get(0).getOLATResourceable().getResourceableId();
-			if(mapKey == 0l) {
-				doOpenMyMaps(ureq).activate(ureq, entries, state);
-				segmentView.select(myMapLink);
-			} else {
-				boolean owner = ePFMgr.isMapOwner(getIdentity(), mapKey);
-				if(owner) {
-					doOpenMyMaps(ureq).activate(ureq, entries, state);
-					segmentView.select(myMapLink);
-				} else {
-					doOpenPublicMaps(ureq).activate(ureq, entries, state);
-					segmentView.select(publicMapLink);
-				}
-			}
-		} else if("EPStructuredMap".equalsIgnoreCase(type)) {
-			doOpenMyTasks(ureq).activate(ureq, entries, state);
-			segmentView.select(myTaskLink);
-		} else if("Artefact".equalsIgnoreCase(type)) {
-			List<ContextEntry> subEntries = entries.subList(1, entries.size());
-			doOpenMyArtefacts(ureq).activate(ureq, subEntries, entries.get(0).getTransientState());
-			segmentView.select(myArtefactLink);
-		}
-	}
-
-	private EPArtefactPoolRunController doOpenMyArtefacts(UserRequest ureq) {
-		OLATResourceable ores = OresHelper.createOLATResourceableInstance("Artefact", 0l);
-		addToHistory(ureq, ores, null);// pool run controller set its own business path after
-		if(artefactsCtrl == null) {
-			WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ores, null, getWindowControl());
-			artefactsCtrl =  new EPArtefactPoolRunController(ureq, addToHistory(ureq, bwControl));
-			listenTo(artefactsCtrl);
-		}
-		mainVC.put("segmentCmp", artefactsCtrl.getInitialComponent());
-		return artefactsCtrl;
-	}
-	
-	private EPMapRunController doOpenMyMaps(UserRequest ureq) {
-		if(myMapsCtrl == null) {
-			myMapsCtrl = new EPMapRunController(ureq, getWindowControl(), true, EPMapRunViewOption.MY_DEFAULTS_MAPS, null);
-			listenTo(myMapsCtrl);
-		}
-		mainVC.put("segmentCmp", myMapsCtrl.getInitialComponent());
-		addToHistory(ureq, OresHelper.createOLATResourceableType("EPDefaultMap"), null);
-		return myMapsCtrl;
-	}
-	
-	private EPMapRunController doOpenMyTasks(UserRequest ureq) {
-		if(myTasksCtrl == null) {
-			myTasksCtrl = new EPMapRunController(ureq, getWindowControl(), false, EPMapRunViewOption.MY_EXERCISES_MAPS, null);
-			listenTo(myTasksCtrl);
-		}
-		mainVC.put("segmentCmp", myTasksCtrl.getInitialComponent());
-		addToHistory(ureq, OresHelper.createOLATResourceableType("EPStructuredMap"), null);
-		return myTasksCtrl;
-	}
-	
-	private EPMapRunController doOpenPublicMaps(UserRequest ureq) {
-		if(publicMapsCtrl == null) {
-			publicMapsCtrl = new EPMapRunController(ureq, getWindowControl(), false, EPMapRunViewOption.OTHERS_MAPS, null);
-			listenTo(publicMapsCtrl);
-		}
-		mainVC.put("segmentCmp", publicMapsCtrl.getInitialComponent());
-		addToHistory(ureq, OresHelper.createOLATResourceableInstance("EPDefaultMap", 0l), null);
-		return publicMapsCtrl;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/EPTemplateRuntimeController.java b/src/main/java/org/olat/portfolio/ui/EPTemplateRuntimeController.java
deleted file mode 100644
index 62530a01095128e4ef738ebde541a3f278eac0e4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/EPTemplateRuntimeController.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.dropdown.Dropdown;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.stack.RootEvent;
-import org.olat.core.gui.control.Event;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.portfolio.ui.structel.EPMapViewController;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryEntrySecurity;
-import org.olat.repository.ui.RepositoryEntryRuntimeController;
-
-/**
- * 
- * Steal the edit button and glue it on the dropdown
- * 
- * Initial date: 15.08.2014<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public class EPTemplateRuntimeController extends RepositoryEntryRuntimeController {
-
-	public EPTemplateRuntimeController(UserRequest ureq, WindowControl wControl,
-			RepositoryEntry re, RepositoryEntrySecurity reSecurity, RuntimeControllerCreator runtimeControllerCreator) {
-		super(ureq, wControl, re, reSecurity, runtimeControllerCreator);
-	}
-	
-	@Override
-	protected void initToolsMenuEditor(Dropdown toolsDropdown) {
-		if(getRuntimeController() instanceof EPMapViewController) {
-			EPMapViewController mapCtrl = (EPMapViewController)getRuntimeController();
-			if(mapCtrl.canEditStructure()) {
-				editLink = LinkFactory.createToolLink("edit.cmd", translate("details.openeditor"), this, "o_sel_repository_editor");
-				editLink.setElementCssClass("o_sel_ep_edit_map");
-				editLink.setIconLeftCSS("o_icon o_icon-lg o_icon_edit");
-				toolsDropdown.addComponent(0, editLink);
-			}
-		}
-	}
-
-	@Override
-	protected void doEdit(UserRequest ureq) {
-		if(!reSecurity.isEntryAdmin()) return;
-		
-		EPMapViewController mapCtrl = (EPMapViewController)getRuntimeController();
-		mapCtrl.edit(ureq);
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		if(editLink == source) {
-			EPMapViewController mapCtrl = (EPMapViewController)getRuntimeController();
-			mapCtrl.edit(ureq);
-		} else if(event instanceof RootEvent) {
-			EPMapViewController mapCtrl = (EPMapViewController)getRuntimeController();
-			mapCtrl.view(ureq);
-		} else {
-			super.event(ureq, source, event);
-		}
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/EPViewModeController.java b/src/main/java/org/olat/portfolio/ui/EPViewModeController.java
deleted file mode 100644
index 79c2eece16ac0a2821af40fe626c049bc9af1b63..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/EPViewModeController.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItem;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.FormLink;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.components.form.flexible.impl.FormEvent;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.Event;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * switch between artefact-preview and the table view mode,
- * sends an event on changes, persist setting in user-properties
- * 
- * <P>
- * Initial Date:  16.11.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPViewModeController extends FormBasicController {
-
-	public static final String VIEWMODE_TABLE = "table";
-	public static final String VIEWMODE_DETAILS = "details";
-	public static final String VIEWMODE_CONTEXT_ARTEFACTPOOL = "artefact";
-	public static final String VIEWMODE_CONTEXT_MAP = "map";
-	public static final String VIEWMODE_CHANGED_EVENT_CMD = "viewModeChangedEventCommand";
-
-	private FormLink tableLink, detailsLink;
-	
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	private String userPrefsMode;
-	private String context;
-	
-	public EPViewModeController(UserRequest ureq, WindowControl wControl, String context) {
-		super(ureq, wControl, "view_mode");
-		this.context = context;
-		userPrefsMode = ePFMgr.getUsersPreferedArtefactViewMode(getIdentity(), context);
-		initForm(ureq);
-	}
-	
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer, org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		tableLink = uifactory.addFormLink("view.mode.table", VIEWMODE_TABLE, "", null, formLayout, Link.BUTTON | Link.NONTRANSLATED);
-		tableLink.setIconRightCSS("o_icon o_icon_table o_icon-lg");
-		detailsLink = uifactory.addFormLink("view.mode.details", VIEWMODE_DETAILS, "", null, formLayout, Link.BUTTON | Link.NONTRANSLATED);
-		detailsLink.setIconRightCSS("o_icon o_icon_table_large o_icon-lg");
-	}
-	
-	public void selectDetails() {
-		tableLink.setElementCssClass(null);
-		detailsLink.setElementCssClass("active");
-	}
-	
-	public void selectTable() {
-		tableLink.setElementCssClass("active");
-		detailsLink.setElementCssClass(null);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest, org.olat.core.gui.components.form.flexible.FormItem, org.olat.core.gui.components.form.flexible.impl.FormEvent)
-	 */
-	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
-		if (source == tableLink || source == detailsLink){
-			FormLink link = (FormLink)source;
-			if (!link.getCmd().equals(userPrefsMode)){
-				String newUserPrefsMode = link.getCmd();
-				ePFMgr.setUsersPreferedArtefactViewMode(getIdentity(), newUserPrefsMode, context);
-				userPrefsMode = newUserPrefsMode;
-				fireEvent(ureq, new Event(VIEWMODE_CHANGED_EVENT_CMD));
-			}
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void formOK(UserRequest ureq) {
-		// nothing to persist, see formInnerEvent
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// nothing
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/_content/adminconfig.html b/src/main/java/org/olat/portfolio/ui/_content/adminconfig.html
deleted file mode 100644
index f3ceb2f8245b32e13390901039536c48c8fcba48..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_content/adminconfig.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<fieldset>
-	<legend>$r.translate("portfolio.title") $r.contextHelpWithWrapper("eAssessment: ePortfolio")</legend>
-	<p>$r.translate("portfolio.intro")</p>
-
-	$r.render("flc_module")
-</fieldset>
-
-<fieldset>
-	<legend>$r.translate("handlers.title")</legend>
-	<p>$r.translate("handlers.intro")</p>
-
-	$r.render("flc_handlers")
-</fieldset>
-
-#if($r.available("flc_wizard") && $r.visible("flc_wizard"))
-<fieldset>
-	<legend>$r.translate("wizard.title")</legend>
-	<p>$r.translate("wizard.intro")</p>
-	$r.render("flc_wizard")
-</fieldset>
-#end
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/_content/artefactsmain.html b/src/main/java/org/olat/portfolio/ui/_content/artefactsmain.html
deleted file mode 100644
index f50a451cc0c526acd7e9bb3fae9eae8f4f3db03f..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_content/artefactsmain.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<div class="o_eportfolio o_artefacts">
-
-	#if(!$artefactChooseMode && $r.available("addArtefactCtrl"))
-		<div class="o_ep_add_artefact pull-right">
-			$r.render("addArtefactCtrl")
-		</div><br /><br />
-	#else
-		#if($importV2)
-			$r.translate("choose.artefact.intro.v2")
-		#else
-			$r.translate("choose.artefact.intro")
-		#end
-		#if($r.available("addArtefactCtrl"))
-			<p>$r.render("addArtefactCtrl")</p>
-		#end
-	#end
-	
-	<div class="o_ep_content">
-		$r.render("segments") <br/>
-		<div class="clearfix">
-			<div class="o_ep_filter">$r.render("filterPanel")</div>
-			<div class="o_ep_viewmode">$r.render("viewMode")</div>
-		</div>	
-		$r.render("segmentContent")
-	</div>
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/_content/createMapCallout.html b/src/main/java/org/olat/portfolio/ui/_content/createMapCallout.html
deleted file mode 100644
index 8aaf345291329a0183f71d7e605a893fa1b9a2a6..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_content/createMapCallout.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<p>$r.translate("create.map.intro")</p>
-<ul>
-	<li>$r.render("create.map.default")</li>
-	<li>$r.render("create.map.fromTemplate")</li>
-</ul>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/_content/mymapsmain.html b/src/main/java/org/olat/portfolio/ui/_content/mymapsmain.html
deleted file mode 100644
index 27f637bdfed61a2b213c6df28087ee03070c458b..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_content/mymapsmain.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<div class="o_eportfolio">
-	#if($overview)	
-	<h4>$r.translate($title)</h4>
-	<div class="o_info">$r.translate($description)</div>
-	#if($r.available("search_input") || $r.available("create.map"))
-	<div class="o_toolbar" role="toolbar">
-		<div class="container-fluid">
-			#if($r.available("search_input"))
-			<ul class="o_tools o_tools_left list-unstyled">
-				<li><div class="o_eportfolio_fulltextsearch btn-group">$r.render("search_input")</div></li>
-			</ul>
-			#end
-		#if($r.available("create.map"))
-			<ul class="o_tools o_tools_right list-unstyled">
-				<li><div class="o_ep_add_artefact btn-group pull-right">$r.render("create.map")</div></li>
-			</ul>
-		#end
-		</div>
-	</div>
-	#end
-	#end
-	
-	$r.render("mapCtrl") 
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/_content/portfolio_disabled.html b/src/main/java/org/olat/portfolio/ui/_content/portfolio_disabled.html
deleted file mode 100644
index 0a9843b8825b3fd75e52d5df3d4ffcf1e3a740e4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_content/portfolio_disabled.html
+++ /dev/null
@@ -1 +0,0 @@
-<div class="o_warning" role="alert"><i class="o_icon o_icon-fw o_icon_important"> </i> $r.translate("warning.portfolio.module.disabled")</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/_content/segments.html b/src/main/java/org/olat/portfolio/ui/_content/segments.html
deleted file mode 100644
index 9cca75e6ff9e2a2c0a0f2476310c2485ee67a181..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_content/segments.html
+++ /dev/null
@@ -1,6 +0,0 @@
-$r.render("segments")
-<div class="o_segments_content">
-#if($r.available("segmentCmp"))
-	$r.render("segmentCmp")
-#end
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/_content/view_mode.html b/src/main/java/org/olat/portfolio/ui/_content/view_mode.html
deleted file mode 100644
index 581400d34552813fa6555482c706c31566eb9b46..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_content/view_mode.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<div class="o_block clearfix">
-	<div class='btn-group pull-right'>
-	$r.render("view.mode.table")
-	$r.render("view.mode.details")
-	</div>
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_ar.properties
deleted file mode 100644
index f9a54c79a68a9bf6ccdc55c4dc9becb758e272af..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_ar.properties
+++ /dev/null
@@ -1,50 +0,0 @@
-#Thu Sep 08 16:42:40 CEST 2011
-EPStructuredMapTemplate=\u0646\u0645\u0648\u0630\u062C \u0628\u0648\u0631\u062A\u0641\u0648\u0644\u064A\u0648
-admin.menu.title=\u0627\u0644\u0628\u0648\u0631\u062A\u0641\u0648\u0644\u064A\u0648
-admin.menu.title.alt=\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0628\u0648\u0631\u062A\u0641\u0648\u0644\u064A\u0648
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-create.map=\u0625\u0646\u0634\u0627\u0621 \u0645\u062C\u0644\u062F
-create.map.fromTemplate=\u0625\u0646\u0634\u0627\u0621 \u0645\u062C\u0644\u062F \u0645\u0646 \u0646\u0645\u0648\u0630\u062C
-create.map.selectTemplate=\u0627\u062E\u062A\u064A\u0627\u0631 \u0646\u0645\u0648\u0630\u062C
-enabled=\u062A\u0645\u0643\u064A\u0646
-eportfolio.menu.title=\u0627\u0644\u0628\u0648\u0631\u062A\u0641\u0648\u0644\u064A\u0648
-handlers.title=\u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u0623\u062F\u0648\u0627\u062A
-
-
-myartefacts.intro=\u064A\u0645\u0643\u0646\u0643 \u062A\u0639\u062F\u064A\u0644 \u0648\u062D\u0630\u0641 \u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u062A\u0649 \u062A\u0645 \u062A\u062C\u0645\u064A\u0639\u0647\u0627\u060C \u0643\u0645\u0627 \u064A\u0645\u0643\u0646 \u0625\u0636\u0627\u0641\u0629 \u0623\u062F\u0627\u0629 \u062C\u062F\u064A\u062F\u0629
-myartefacts.menu.title=\u0623\u062F\u0648\u0627\u062A\u0649
-myartefacts.menu.title.alt=\u0639\u0631\u0636 \u0648\u0625\u062F\u0627\u0631\u0629 \u0643\u0644 \u0627\u0644\u0623\u062F\u0648\u0627\u062A
-myartefacts.title=$\:admin.menu.title - $\:myartefacts.menu.title
-mymaps.intro=$\:mymaps.menu.title.alt
-mymaps.title=$\:admin.menu.title - $\:mymaps.menu.title
-mystructuredmaps.intro=$\:mystructuredmaps.menu.title.alt
-mystructuredmaps.menu.title=\u0645\u0647\u0627\u0645 \u0627\u0644\u0628\u0648\u0631\u062A\u0641\u0648\u0644\u064A\u0648 \u0627\u0644\u062E\u0627\u0635 \u0628\u0649
-mystructuredmaps.title=$\:admin.menu.title - $\:mystructuredmaps.menu.title
-othermap.intro=$\:othermaps.menu.title.alt
-othermap.title=$\:admin.menu.title - \u0645\u062C\u0644\u062F
-othermaps.intro=$\:othermaps.menu.title.alt
-othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title
-portfolio.intro=\u0645\u0646 \u062E\u0644\u0627\u0644 \u0647\u0630\u0647 \u064A\u0645\u0643\u0646\u0643 \u062A\u0646\u0634\u064A\u0637 \u0623\u0648 \u0625\u064A\u0642\u0627\u0641 \u062A\u0646\u0634\u064A\u0637 \u0648\u0638\u064A\u0641\u0629 \u0627\u0644\u0628\u0648\u0631\u062A\u0641\u0648\u0644\u064A\u0648 \u0641\u0649 \u0623\u0648\u0644\u0627\u062A
-portfolio.module.enabled=\u062A\u0646\u0634\u064A\u0637 \u0627\u0644\u0628\u0648\u0631\u062A\u0641\u0648\u0644\u064A\u0648
-portfolio.title=$\:admin.menu.title
-site.title=$\:admin.menu.title
-site.title.alt=$\:admin.menu.title
-view.mode=\u0639\u0631\u0636\:
-view.mode.details=\u062A\u0641\u0627\u0635\u064A\u0644
-view.mode.table=\u062C\u062F\u0648\u0644
-viewTab.all=\u0627\u0644\u0623\u062F\u0648\u0627\u062A
-viewTab.browse=\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u062A\u0635\u0641\u062D
-viewTab.search=\u0628\u062D\u062B
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_de.properties
deleted file mode 100644
index 5ef4959459a1a54b3423e5cd095707fd7a5f3817..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1,75 +0,0 @@
-#Tue Nov 15 16:18:42 CET 2016
-EPStructuredMapTemplate=Portfoliovorlage
-admin.menu.title=ePortfolio
-admin.menu.title.alt=ePortfolio konfigurieren
-binder.entry.point.not.available=Dieser Reiter ist deaktiviert. Bitte aktivieren Sie zuerst den Reiter, bevor Sie ihn als Ankunft in der Mappe ausw\u00e4len.
-binder.entry.point=Ankunft in Mappe
-binder.entry.point.entries=Eintr\u00E4ge
-binder.entry.point.toc=\u00DCberblick
-choose.artefact.intro=W\u00E4hlen Sie das Artefakt, welches Ihrer Sammelmappe hinzugef\u00FCgt werden soll oder f\u00FCgen Sie ein Neues hinzu.
-choose.artefact.intro.v2=W\u00E4hlen Sie aus welche Artefakte Sie vom alten Portfoliowerkzeug in das neue Portfoliomanagement importieren wollen. 
-comments.enabled=Kommentare sichtbar in
-comments.entries.enabled=$org.olat.modules.portfolio.ui\:portfolio.entries
-comments.overview.enabled=$org.olat.modules.portfolio.ui\:portfolio.overview
-create.map=Mappe erstellen
-create.map.default=Sammelmappe erstellen
-create.map.fromTemplate=Mappe aus Vorlage erstellen
-create.map.intro=W\u00E4hlen Sie die Art von Sammelmappe, welche Sie erstellen m\u00F6chten.
-create.map.selectTemplate=Vorlage ausw\u00E4hlen
-enabled=Ein
-entries.both.enabled=Tabellenansicht und Listenansicht
-entries.elements.enabled=Sichtbare Elemente
-entries.list.enabled=Listenansicht
-entries.search.enabled=Suche
-entries.table.enabled=Tabellenansicht
-entries.timeline.enabled=Zeitstrahl
-entries.view=Ansicht der Eintr\u00E4ge
-eportfolio.menu.title=ePortfolio 1.0
-eportfolio.menu.title.alt=ePortfolio mit Artefakten und Sammelmappen
-handlers.intro=W\u00E4hlen Sie die verf\u00FCgbaren Artefakt-Typen. Ausgeschaltete Artefakte werden angezeigt, k\u00F6nnen aber nicht mehr gesammelt werden.
-handlers.title=Artefakt-Typen
-myartefacts.intro=Sie k\u00F6nnen Ihre gesammelten Artefakte bearbeiten oder l\u00F6schen, sowie neue hinzuf\u00FCgen.
-myartefacts.menu.title=Meine Artefakte
-myartefacts.menu.title.alt=Alle Artefakte anzeigen und verwalten
-myartefacts.title=$\:admin.menu.title - $\:myartefacts.menu.title
-mymaps.intro=$\:mymaps.menu.title.alt
-mymaps.menu.title=Meine Sammelmappen
-mymaps.menu.title.alt=Alle meine Sammelmappen anzeigen und verwalten
-mymaps.title=$\:admin.menu.title - $\:mymaps.menu.title 
-mystructuredmaps.intro=$\:mystructuredmaps.menu.title.alt
-mystructuredmaps.menu.title=Meine Portfolioaufgaben
-mystructuredmaps.menu.title.alt=Alle meine Sammelmappen aus einer Portfolioaufgabe anzeigen und verwalten
-mystructuredmaps.title=$\:admin.menu.title - $\:mystructuredmaps.menu.title 
-othermap.intro=$\:othermaps.menu.title.alt
-othermap.title=$\:admin.menu.title - Mappe
-othermaps.intro=$\:othermaps.menu.title.alt
-othermaps.menu.title=Freigegebene Sammelmappen
-othermaps.menu.title.alt=Von anderen Benutzern f\u00FCr mich freigegebene Sammelmappen 
-othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title
-portfolio.intro=Hiermit kann die gesamte ePortfolio-Funktionalit\u00E4t in OLAT ein-, resp. ausgeschaltet werden.
-portfolio.module.change.warning=Damit Ihre \u00C4nderung \u00FCberall aktiv wird, muss OLAT neu gestartet werden.
-portfolio.module.enabled=ePortfolio einschalten
-portfolio.title=$\:admin.menu.title
-portfolio.user.can.create.binder=Lernende d\u00FCrfen Mappe erstellen
-portfolio.user.can.create.binder.course=Lernende d\u00FCrfen Mappe von Kurse erstellen
-portfolio.user.can.create.binder.template=Lernende d\u00FCrfen Mappe von Vorlage erstellen
-portfolio.user.create.binder=Mappe erstellen
-portfolio.v1.module.enabled=Altes ePortfolio v1 w\u00E4hrend \u00DCbergangszeit aktivieren
-section.enabled=Sichtbare Reiter
-section.disable.not.allowed=Der Reiter, der f\u00fcr die Ankunft in der Mappe vorgesehen ist, kann nicht deaktiviert werden!
-section.entries.enabled=$org.olat.modules.portfolio.ui\:portfolio.entries
-section.history.enabled=$org.olat.modules.portfolio.ui\:portfolio.history
-section.overview.enabled=$org.olat.modules.portfolio.ui\:portfolio.overview
-site.title=$\:admin.menu.title
-site.title.alt=$\:admin.menu.title
-view.mode=Ansicht\: 
-view.mode.details=Details
-view.mode.table=Tabelle
-viewTab.all=Artefakte
-viewTab.browse=Tag-Browser
-viewTab.search=Suche
-warning.portfolio.module.disabled=ePortfolio v1 ist nicht eingeschaltet.
-wizard.intro=Das Artefakt-Sammelwerkzeug enth\u00E4lt verschiedene Schritte in einem Wizard. Einige der Schritte k\u00F6nnen Sie je nach Bedarf aktivieren oder deaktivieren.
-wizard.step.copyright=Urheberschaft vom Benutzer best\u00E4tigen lassen
-wizard.step.reflexion=Reflexion erfassen
-wizard.title=Artefakt-Sammelwerkzeug
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_en.properties
deleted file mode 100644
index eed6d1c903d1286d1c43fe7e5c4507bf806c6e83..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,76 +0,0 @@
-#Fri Sep 23 11:50:42 CEST 2016
-EPStructuredMapTemplate=Portfolio template
-admin.menu.title=ePortfolio
-admin.menu.title.alt=Configure ePortfolio
-binder.entry.point.not.available=This section is deactivated. Please activate the section before using it as landing page.
-binder.entry.point=Ankunft in Mappe
-binder.entry.point=Landing point in binder
-binder.entry.point.entries=Entries
-binder.entry.point.toc=Overview
-choose.artefact.intro=Please select an artefact to be added to your binder. You could also create a new one.
-choose.artefact.intro.v2=Select the artefacts you wish to import from the old portfolio module into the new portfolio management.
-comments.enabled=Comments visible in
-comments.entries.enabled=$org.olat.modules.portfolio.ui\:portfolio.entries
-comments.overview.enabled=$org.olat.modules.portfolio.ui\:portfolio.overview
-create.map=Create folder
-create.map.default=Create binder
-create.map.fromTemplate=Create folder from template
-create.map.intro=Please select the type of binder to be created
-create.map.selectTemplate=Select template
-enabled=Enabled
-entries.both.enabled=Table and List
-entries.elements.enabled=Visible elements
-entries.list.enabled=List
-entries.search.enabled=Search
-entries.table.enabled=Table
-entries.timeline.enabled=Timeline
-entries.view=View if the entries
-eportfolio.menu.title=ePortfolio 1.0
-eportfolio.menu.title.alt=ePortfolio along with artefacts and binders
-handlers.intro=Please select all available artefact types. Deactivated artefacts will be displayed; however, you can no longer collect them.
-handlers.title=Artefact types
-myartefacts.intro=You can edit and delete collected artefacts, or add new ones.
-myartefacts.menu.title=My artefacts
-myartefacts.menu.title.alt=Show and manage all artefacts
-myartefacts.title=$\:admin.menu.title - $\:myartefacts.menu.title
-mymaps.intro=$\:mymaps.menu.title.alt
-mymaps.menu.title=My binders
-mymaps.menu.title.alt=Show and manage all of my binders
-mymaps.title=$\:admin.menu.title - $\:mymaps.menu.title
-mystructuredmaps.intro=$\:mystructuredmaps.menu.title.alt
-mystructuredmaps.menu.title=My portfolio tasks
-mystructuredmaps.menu.title.alt=Show and manage all my binders of one single portfolio task
-mystructuredmaps.title=$\:admin.menu.title - $\:mystructuredmaps.menu.title
-othermap.intro=$\:othermaps.menu.title.alt
-othermap.title=$\:admin.menu.title - Folder
-othermaps.intro=$\:othermaps.menu.title.alt
-othermaps.menu.title=Released binders
-othermaps.menu.title.alt=Binders released by others
-othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title
-portfolio.intro=With this you can (de)activate the entire ePortfolio functionality in OLAT.
-portfolio.module.change.warning=OLAT needs to be restarted to activate your changes throughout the system.
-portfolio.module.enabled=Activate ePortfolio
-portfolio.title=$\:admin.menu.title
-portfolio.user.can.create.binder=Learner are allowed to create binders
-portfolio.user.can.create.binder.course=Learner are allowed to create binders from a course
-portfolio.user.can.create.binder.template=Learner are allowed to create binders from a template
-portfolio.user.create.binder=Create binders
-portfolio.v1.module.enabled=Enable legacy ePortfolio v1 during transition period
-section.enabled=Visible sections
-section.disable.not.allowed=This section cannot be deactivated. It is selected as the landing page!
-section.entries.enabled=$org.olat.modules.portfolio.ui\:portfolio.entries
-section.history.enabled=$org.olat.modules.portfolio.ui\:portfolio.history
-section.overview.enabled=$org.olat.modules.portfolio.ui\:portfolio.overview
-site.title=$\:admin.menu.title
-site.title.alt=$\:admin.menu.title
-view.mode=View\:
-view.mode.details=Details
-view.mode.table=Table
-viewTab.all=Artefacts
-viewTab.browse=Tag browser
-viewTab.search=Search
-warning.portfolio.module.disabled=ePortfolio v1 is disabled.
-wizard.intro=Within the accumulative artefact tool there are several steps to complete. Some of them are optional. You can completely disable those steps if not needed.
-wizard.step.copyright=Ask user for copyright
-wizard.step.reflexion=Collect a reflexion
-wizard.title=Accumulative artefact tool
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index d4ee9cc45e255681e5029c77da7845225d81582a..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,75 +0,0 @@
-#Mon Apr 16 21:34:36 CEST 2018
-EPStructuredMapTemplate=Mod\u00E8le de portfolio
-admin.menu.title=ePortfolio
-admin.menu.title.alt=Configurer ePortfolio
-binder.entry.point=Point d'arriv\u00E9e dans le classeur
-binder.entry.point.entries=Contributions
-binder.entry.point.not.available=Cette section est d\u00E9sactiv\u00E9e. Activez cette section avant de l'utiliser comme page de d\u00E9part.
-binder.entry.point.toc=Sommaire
-choose.artefact.intro=S\u00E9lectionnez l'artefact que vous souhaitez ajouter \u00E0 votre classeur.
-choose.artefact.intro.v2=Choisissez quels artefacts vous souhaitez importer de l'ancien gestionnaire de portfolios vers le nouveau.
-comments.enabled=Commentaires visibles dans
-comments.entries.enabled=$org.olat.modules.portfolio.ui\:portfolio.entries
-comments.overview.enabled=$org.olat.modules.portfolio.ui\:portfolio.overview
-create.map=Cr\u00E9er classeur
-create.map.default=Cr\u00E9er classeur
-create.map.fromTemplate=Cr\u00E9er classeur selon mod\u00E8le
-create.map.intro=S\u00E9lectionnez le type de classeur que vous souhaitez cr\u00E9er.
-create.map.selectTemplate=S\u00E9lectionner mod\u00E8le
-enabled=Activ\u00E9
-entries.both.enabled=Table et liste
-entries.elements.enabled=El\u00E9ments visibles
-entries.list.enabled=Liste
-entries.search.enabled=Recherche
-entries.table.enabled=Table
-entries.timeline.enabled=Frise chronologique
-entries.view=A voir si les entr\u00E9es
-eportfolio.menu.title=ePortfolio
-eportfolio.menu.title.alt=ePortfolio avec artefacts et classeurs
-handlers.intro=S\u00E9lectionnez les types d'artefacts disponibles. Les artefacts d'un type d\u00E9sactiv\u00E9 sont affich\u00E9s, mais ne peuvent plus \u00EAtre r\u00E9colt\u00E9s.
-handlers.title=Types d'artefacts
-myartefacts.intro=Vous pouvez \u00E9laborer ou \u00E9liminer les artefacts recueillis et vous pouvez cr\u00E9er de nouveaux artefacts.
-myartefacts.menu.title=Mes artefacts
-myartefacts.menu.title.alt=Afficher et g\u00E9rer tous les artefacts
-myartefacts.title=$\:admin.menu.title - $\:myartefacts.menu.title
-mymaps.intro=$\:mymaps.menu.title.alt
-mymaps.menu.title=Mes classeurs
-mymaps.menu.title.alt=Afficher et g\u00E9rer tous mes classeurs
-mymaps.title=$\:admin.menu.title - $\:mymaps.menu.title
-mystructuredmaps.intro=$\:mystructuredmaps.menu.title.alt
-mystructuredmaps.menu.title=Mes devoirs portfolio
-mystructuredmaps.menu.title.alt=Afficher et g\u00E9rer tous mes classeurs d'un devoir portfolio
-mystructuredmaps.title=$\:admin.menu.title - $\:mystructuredmaps.menu.title
-othermap.intro=$\:othermaps.menu.title.alt
-othermap.title=$\:admin.menu.title - Classeur
-othermaps.intro=$\:othermaps.menu.title.alt
-othermaps.menu.title=Classeurs partag\u00E9s
-othermaps.menu.title.alt=Classeurs d'autres utilisateurs partag\u00E9s avec moi
-othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title
-portfolio.intro=Toutes les fonctions de l'ePortfolio peuvent \u00EAtre activ\u00E9es ou d\u00E9sactiv\u00E9es.
-portfolio.module.change.warning=Afin que les changements soient activ\u00E9s, vous devez red\u00E9marrer OpenOlat.
-portfolio.module.enabled=Activer ePortfolio
-portfolio.title=$\:admin.menu.title
-portfolio.user.can.create.binder=Les \u00E9tudiants peuvent cr\u00E9er des classeurs
-portfolio.user.can.create.binder.course=Les \u00E9tudiants peuvent cr\u00E9er des classeurs en provenance d'un cours
-portfolio.user.can.create.binder.template=Les \u00E9tudiants peuvent cr\u00E9er des classeurs depuis un mod\u00E8le
-portfolio.user.create.binder=Cr\u00E9er un classeur
-portfolio.v1.module.enabled=Activ\u00E9 ePortfolio v1 pendant la p\u00E9riode de transition
-section.disable.not.allowed=Cette section ne peut \u00EAtre d\u00E9sactiv\u00E9e. Elle est s\u00E9lectionn\u00E9e comme page de d\u00E9part.
-section.enabled=Sections visibles
-section.entries.enabled=$org.olat.modules.portfolio.ui\:portfolio.entries
-section.history.enabled=$org.olat.modules.portfolio.ui\:portfolio.history
-section.overview.enabled=$org.olat.modules.portfolio.ui\:portfolio.overview
-site.title=$\:admin.menu.title
-site.title.alt=$\:admin.menu.title
-view.mode=Affichage\:
-view.mode.details=D\u00E9tails
-view.mode.table=Tableau
-viewTab.all=Artefacts
-viewTab.browse=Browser tag
-viewTab.search=Recherche
-warning.portfolio.module.disabled=ePortfolio v1 est d\u00E9sactiv\u00E9.
-wizard.intro=L'outil de collecte d'artefact poss\u00E8de un assistant avec les diff\u00E9rentes \u00E9tapes. Certaines \u00E9tapes peuvent \u00EAtre activer ou d\u00E9sactiver selon les besoins.
-wizard.step.copyright=La qualit\u00E9 d'auteur doit \u00EAtre confirm\u00E9 par l'utilisateur
-wizard.step.reflexion=Saisir une r\u00E9flexion
-wizard.title=Outil de collecte d'artefact
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_it.properties
deleted file mode 100644
index b02b8d0baea18241c18903cef32ece8aa68c27af..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_it.properties
+++ /dev/null
@@ -1,59 +0,0 @@
-#Mon Mar 20 12:19:14 CET 2017
-EPStructuredMapTemplate=Modello di portfolio
-admin.menu.title=ePortfolio
-admin.menu.title.alt=Configurare il portfolio
-binder.entry.point=punto di arrivo in raccoglitore
-binder.entry.point.entries=Elementi
-binder.entry.point.toc=Panoramica
-choose.artefact.intro=Selezioni l'artefatto che desidera aggiungere al Suo raccoglitore.
-choose.artefact.intro.v2=Selezionare gli artefatti da importare dal vecchio strumento portfolio nella nuova funzionalit\u00E0 di gestione del portfolio.
-create.map=Creare raccoglitore
-create.map.default=Creare raccoglitore
-create.map.fromTemplate=Creare raccoglitore da modello
-create.map.intro=Selezioni il tipo di raccoglitore che desidera creare.
-create.map.selectTemplate=Selezionare modello
-enabled=Attivato
-eportfolio.menu.title=ePortfolio
-eportfolio.menu.title.alt=ePortfolio con artefatti e raccoglitori
-handlers.intro=Selezioni i tipi di artefatto disponibili. Gli artefatti di un tipo disattivato vengono mostrati ma non possono pi\u00F9 venire raccolti.
-handlers.title=Tipi di artefatto
-myartefacts.intro=Pu\u00F2 elaborare o eliminare gli artefatti raccolti e pu\u00F2 creare nuovi artefatti.
-myartefacts.menu.title=I miei artefatti
-myartefacts.menu.title.alt=Mostrare e gestire tutti gli artefatti
-myartefacts.title=$\:admin.menu.title - $\:myartefacts.menu.title
-mymaps.intro=$\:mymaps.menu.title.alt
-mymaps.menu.title=I miei raccoglitori
-mymaps.menu.title.alt=Mostrare e gestire tutti i miei raccoglitori
-mymaps.title=$\:admin.menu.title - $\:mymaps.menu.title
-mystructuredmaps.intro=$\:mystructuredmaps.menu.title.alt
-mystructuredmaps.menu.title=I miei compiti portfolio
-mystructuredmaps.menu.title.alt=Mostrare e gestire tutti i miei raccoglitori di un compito portfolio
-mystructuredmaps.title=$\:admin.menu.title - $\:mystructuredmaps.menu.title
-othermap.intro=$\:othermaps.menu.title.alt
-othermap.title=$\:admin.menu.title - Raccoglitore
-othermaps.intro=$\:othermaps.menu.title.alt
-othermaps.menu.title=Raccoglitori condivisi
-othermaps.menu.title.alt=Raccoglitori di altri utenti condivisi con me
-othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title
-portfolio.intro=Tutte le funzioni dell'ePortfolio possono essere attivate o disattivate.
-portfolio.module.change.warning=OpenOlat deve essere riavviato per attivare i cambiamenti apportati al sistema.
-portfolio.module.enabled=Attivare ePortfolio
-portfolio.title=$\:admin.menu.title
-portfolio.user.can.create.binder=Gli studenti sono abilitati alla creazione di raccoglitori
-portfolio.user.can.create.binder.course=Gli studenti sono abilitati a creare raccoglitori da un corso
-portfolio.user.can.create.binder.template=Gli studenti sono abilitati alla creazione di un raccoglitore da un modello
-portfolio.user.create.binder=Creare raccoglitori
-portfolio.v1.module.enabled=Abilitare ePortfolio legacy v1 durante il periodo di transizione
-site.title=$\:admin.menu.title
-site.title.alt=$\:admin.menu.title
-view.mode=Visualizzazione\:
-view.mode.details=Dettagli
-view.mode.table=Tabella
-viewTab.all=Artefatti
-viewTab.browse=Browser tag
-viewTab.search=Ricerca
-warning.portfolio.module.disabled=ePortfolio v1 \u00E8 disabilitato.
-wizard.intro=Lo strumento di collezionamento degli artefatti prevede vari passi per il completamento. Alcuni di essi sono opzionali. \u00C8 possibile disabilitare completamente tali passi se non necessari.
-wizard.step.copyright=Chiedere all'utente i diritti di copyright
-wizard.step.reflexion=Raccogliere una riflessione
-wizard.title=Strumento di collezionamento di artefatti
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_jp.properties
deleted file mode 100644
index 756002603290e7c92ced0fe0fec61c9729fbd919..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_jp.properties
+++ /dev/null
@@ -1,64 +0,0 @@
-#Thu Feb 03 16:00:13 CET 2011
-EPStructuredMapTemplate=\u30DD\u30FC\u30C8\u30D5\u30A9\u30EA\u30AA\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8
-admin.menu.title=e\u30DD\u30FC\u30C8\u30D5\u30A9\u30EA\u30AA
-admin.menu.title.alt=e\u30DD\u30FC\u30C8\u30D5\u30A9\u30EA\u30AA\u3092\u8A2D\u5B9A\u3059\u308B
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-choose.artefact.intro=\u3042\u306A\u305F\u306E\u53CE\u96C6\u30D5\u30A9\u30EB\u30C0\u306B\u8FFD\u52A0\u3059\u308B\u305F\u3081\u3001\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-create.map=\u30D5\u30A9\u30EB\u30C0\u3092\u4F5C\u6210\u3059\u308B
-create.map.default=\u53CE\u96C6\u30D5\u30A9\u30EB\u30C0\u3092\u4F5C\u6210\u3059\u308B
-create.map.fromTemplate=\u30D5\u30A9\u30EB\u30C0\u3092\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u304B\u3089\u4F5C\u6210\u3059\u308B
-create.map.intro=\u4F5C\u6210\u3059\u308B\u53CE\u96C6\u30D5\u30A9\u30EB\u30C0\u306E\u30BF\u30A4\u30D7\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-create.map.selectTemplate=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u9078\u629E\u3059\u308B
-enabled=\u6709\u52B9
-eportfolio.menu.title=e\u30DD\u30FC\u30C8\u30D5\u30A9\u30EA\u30AA
-eportfolio.menu.title.alt=e\u30DD\u30FC\u30C8\u30D5\u30A9\u30EA\u30AA (\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u304A\u3088\u3073\u53CE\u96C6\u30D5\u30A9\u30EB\u30C0\u3092\u542B\u3080)
-handlers.intro=\u3059\u3079\u3066\u306E\u5229\u7528\u53EF\u80FD\u306A\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u30BF\u30A4\u30D7\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u7121\u52B9\u306B\u3055\u308C\u305F\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u306F\u8868\u793A\u3055\u308C\u307E\u3059\u304C\u3001\u3042\u306A\u305F\u306F\u3053\u308C\u3089\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u96C6\u3081\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002
-handlers.title=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u30BF\u30A4\u30D7
-
-
-myartefacts.intro=\u3042\u306A\u305F\u306F\u96C6\u3081\u3089\u308C\u305F\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u7DE8\u96C6\u304A\u3088\u3073\u524A\u9664\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u307E\u305F\u3001\u65B0\u3057\u3044\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u8FFD\u52A0\u3059\u308B\u3053\u3068\u3082\u3067\u304D\u307E\u3059\u3002
-myartefacts.menu.title=\u30DE\u30A4\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8
-myartefacts.menu.title.alt=\u3059\u3079\u3066\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u8868\u793A\u304A\u3088\u3073\u7BA1\u7406\u3059\u308B
-myartefacts.title=$\:admin.menu.title - $\:myartefacts.menu.title
-mymaps.intro=$\:mymaps.menu.title.alt
-mymaps.menu.title=\u30DE\u30A4\u53CE\u96C6\u30D5\u30A9\u30EB\u30C0
-mymaps.menu.title.alt=\u3059\u3079\u3066\u306E\u30DE\u30A4\u53CE\u96C6\u30D5\u30A9\u30EB\u30C0\u3092\u8868\u793A\u304A\u3088\u3073\u7BA1\u7406\u3059\u308B
-mymaps.title=$\:admin.menu.title - $\:mymaps.menu.title
-mystructuredmaps.intro=$\:mystructuredmaps.menu.title.alt
-mystructuredmaps.menu.title=\u30DE\u30A4\u30DD\u30FC\u30C8\u30D5\u30A9\u30EA\u30AA\u30BF\u30B9\u30AF
-mystructuredmaps.menu.title.alt=\u5358\u4E00\u30DD\u30FC\u30C8\u30D5\u30A9\u30EA\u30AA\u30BF\u30B9\u30AF\u306E\u7D2F\u7A4D\u30D5\u30A9\u30EB\u30C0\u5185\u306E\u30DE\u30A4\u30A8\u30F3\u30C8\u30EA\u3092\u8868\u793A\u304A\u3088\u3073\u7BA1\u7406\u3059\u308B
-mystructuredmaps.title=$\:admin.menu.title - $\:mystructuredmaps.menu.title
-othermap.intro=$\:othermaps.menu.title.alt
-othermap.title=$\:admin.menu.title - \u30D5\u30A9\u30EB\u30C0
-othermaps.intro=$\:othermaps.menu.title.alt
-othermaps.menu.title=\u30EA\u30EA\u30FC\u30B9\u6E08\u307F\u7D2F\u7A4D\u30D5\u30A9\u30EB\u30C0
-othermaps.menu.title.alt=\u4ED6\u306E\u30E6\u30FC\u30B6\u304B\u3089\u30EA\u30EA\u30FC\u30B9\u3055\u308C\u305F\u30DE\u30A4\u7D2F\u7A4D\u30D5\u30A9\u30EB\u30C0
-othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title
-portfolio.intro=\u3053\u308C\u306B\u3088\u308A\u3001\u3042\u306A\u305F\u306FOLAT\u5185\u306Ee\u30DD\u30FC\u30C8\u30D5\u30A9\u30EA\u30AA\u6A5F\u80FD\u3092\u6709\u52B9\u307E\u305F\u306F\u7121\u52B9\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002
-portfolio.module.enabled=e\u30DD\u30FC\u30C8\u30D5\u30A9\u30EA\u30AA\u3092\u6709\u52B9\u5316\u3059\u308B
-portfolio.title=$\:admin.menu.title
-site.title=$\:admin.menu.title
-site.title.alt=$\:admin.menu.title
-view.mode=\u30D3\u30E5\u30FC\:
-view.mode.details=\u8A73\u7D30
-view.mode.table=\u30C6\u30FC\u30D6\u30EB
-viewTab.all=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8
-viewTab.browse=\u30BF\u30B0\u30D6\u30E9\u30A6\u30B6
-viewTab.search=\u691C\u7D22
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_nl_NL.properties
deleted file mode 100644
index de9cc43cb13448cce9af2cc0fb65efa4cb618e91..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_nl_NL.properties
+++ /dev/null
@@ -1,65 +0,0 @@
-#Thu Sep 08 16:42:47 CEST 2011
-EPStructuredMapTemplate=Portfolio sjabloon
-admin.menu.title=ePortfolio
-admin.menu.title.alt=Configureer ePortfolio
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-choose.artefact.intro=Gelieve een voorwerp te selecteren om toe te voegen aan uw accumulatieve map.
-create.map=Maak een map aan
-create.map.default=Maak een accumulatieve map aan
-create.map.fromTemplate=Maak een map aan via sjabloon
-create.map.intro=Gelieve het type accumulatieve map te selecteren dat aangemaakt moet worden.
-create.map.selectTemplate=Selecteer sjabloon
-enabled=gemachtigd
-eportfolio.menu.title=ePortfolio
-eportfolio.menu.title.alt=ePortfolio samen met voorwerpen en accumulatieve mappen
-handlers.intro=Gelieve alle beschikbare voorwerptypes te selecteren. Gedeactiveerde voorwerpen zullen getoond worden, hoewel u ze niet langer kunt verzamelen.
-handlers.title=Voorwerptypes
-
-
-myartefacts.intro=U kunt verzamelde voorwerpen bewerken en verwijderen, of nieuwe toevoegen.
-myartefacts.menu.title=Mijn voorwerpen
-myartefacts.menu.title.alt=Toon en beheer alle voorwerpen
-myartefacts.title=$\:admin.menu.title - $\:myartefacts.menu.title
-mymaps.intro=$\:mymaps.menu.title.alt
-mymaps.menu.title=Mijn accumulatieve mappen
-mymaps.menu.title.alt=Toon en beheer al mijn accumulatieve mappen
-mymaps.title=$\:admin.menu.title - $\:mymaps.menu.title
-mystructuredmaps.intro=$\:mystructuredmaps.menu.title.alt
-mystructuredmaps.menu.title=Mijn portfoliotaken
-mystructuredmaps.menu.title.alt=Toon en beheer al mijn accumulatieve mappen van \u00E9\u00E9n portfoliotaak
-mystructuredmaps.title=$\:admin.menu.title - $\:mystructuredmaps.menu.title
-othermap.intro=$\:othermaps.menu.title.alt
-othermap.title=$\:admin.menu.title - Map
-othermaps.intro=$\:othermaps.menu.title.alt
-othermaps.menu.title=Geef accumulatieve mappen vrij
-othermaps.menu.title.alt=Mijn accumulatieve mappen vrijgegeven door anderen
-othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title
-portfolio.intro=Hiermee kunt u de gehele ePortfolio functionaliteit in OLAT (de)activeren.
-portfolio.module.enabled=Activeer ePortfolio
-portfolio.title=$\:admin.menu.title
-site.title=$\:admin.menu.title
-site.title.alt=$\:admin.menu.title
-view.mode=View\:
-view.mode.details=Details
-view.mode.table=Tabel
-viewTab.all=Voorwerpen
-viewTab.browse=Tag browser
-viewTab.search=Zoek
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_pl.properties
deleted file mode 100644
index 95c5a0dba3deb41c828de4eb3bb5e601ff80d4c2..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_pl.properties
+++ /dev/null
@@ -1,51 +0,0 @@
-#Wed Jan 15 13:27:24 CET 2014
-EPStructuredMapTemplate=Szablon portfolio
-admin.menu.title=Portfolio
-admin.menu.title.alt=Konfiguruj Portfolio
-
-
-
-
-choose.artefact.intro=Wybierz artefakt, kt\u00F3ry chcesz doda\u0107 do swojego folderu zbiorczego.
-create.map=Utw\u00F3rz folder
-create.map.default=Utw\u00F3rz folder zbiorczy
-create.map.fromTemplate=Utw\u00F3rz folder z szablonu
-create.map.intro=Wybierz typ folderu zbiorczego, kt\u00F3ry chcesz utworzy\u0107.
-create.map.selectTemplate=Wybierz szablon
-enabled=Aktywny
-eportfolio.menu.title=Portfolio
-eportfolio.menu.title.alt=Portfolio wraz z artefaktami i folderami zbiorczymi
-handlers.intro=Wybierz wszystkie dost\u0119pne typy artefakt\u00F3w. Wy\u0142\u0105czone artefakty b\u0119d\u0105 wy\u015Bwietlane, jednak nie b\u0119dzie mo\u017Cna ich d\u0142u\u017Cej kolekcjonowa\u0107.
-handlers.title=Typy artefakt\u00F3w
-
-
-myartefacts.intro=Mo\u017Cesz dodawa\u0107, edytowa\u0107 lub usuwa\u0107 posiadane artefakty.
-myartefacts.menu.title=Moje artefakty
-myartefacts.menu.title.alt=Poka\u017C i zarz\u0105dzaj wszystkimi artefaktami
-myartefacts.title=$\:admin.menu.title - $\:myartefacts.menu.title
-mymaps.intro=$\:mymaps.menu.title.alt
-mymaps.menu.title=Moje foldery zbiorcze
-mymaps.menu.title.alt=Poka\u017C i zarz\u0105dzaj wszystkimi moimi folderami zbiorczymi
-mymaps.title=$\:admin.menu.title - $\:mymaps.menu.title
-mystructuredmaps.intro=$\:mystructuredmaps.menu.title.alt
-mystructuredmaps.menu.title=Moje zadania portfolio
-mystructuredmaps.menu.title.alt=Poka\u017C i zarz\u0105dzaj wszystkimi moimi folderami zbiorczymi w pojedynczym w\u0105tku portfolio
-mystructuredmaps.title=$\:admin.menu.title - $\:mystructuredmaps.menu.title
-othermap.intro=$\:othermaps.menu.title.alt
-othermap.title=$\:admin.menu.title - Folder
-othermaps.intro=$\:othermaps.menu.title.alt
-othermaps.menu.title=Udost\u0119pnione foldery zbiorcze
-othermaps.menu.title.alt=Moje foldery zbiorcze udost\u0119pnione przez innych
-othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title
-portfolio.intro=Mo\u017Cesz tu w\u0142\u0105czy\u0107 lub wy\u0142\u0105czy\u0107 funkcjonalno\u015B\u0107 ePortfolio w OLAT.
-portfolio.module.change.warning=Nale\u017Cy zrestartowa\u0107 OLAT, \u017Ceby aktywowa\u0107 zmiany w systemie.
-portfolio.module.enabled=W\u0142\u0105cz ePortfolio
-portfolio.title=$\:admin.menu.title
-site.title=$\:admin.menu.title
-site.title.alt=$\:admin.menu.title
-view.mode=Widok\:
-view.mode.details=Szczeg\u00F3\u0142y
-view.mode.table=Tabela
-viewTab.all=Artefakty
-viewTab.browse=Przegl\u0105darka tag\u00F3w
-viewTab.search=Szukaj
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_pt_BR.properties
deleted file mode 100644
index 0ae4c2ba6dc97c340c2d6a0a981b1d4897a502b0..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_pt_BR.properties
+++ /dev/null
@@ -1,75 +0,0 @@
-#Fri May 11 23:50:12 CEST 2018
-EPStructuredMapTemplate=Modelo de portf\u00F3lio
-admin.menu.title=ePortfolio
-admin.menu.title.alt=Configurar ePortfolio
-binder.entry.point=Ponto de retorno na pasta
-binder.entry.point.entries=Entradas
-binder.entry.point.not.available=Esta se\u00E7\u00E3o est\u00E1 desativada. Por favor, ative a se\u00E7\u00E3o antes de us\u00E1-la como p\u00E1gina de destino.
-binder.entry.point.toc=Vis\u00E3o geral
-choose.artefact.intro=Por favor selecione um artefato para ser adicionado \u00E0 pasta acumulativa.
-choose.artefact.intro.v2=Selecione os artefatos que deseja importar do m\u00F3dulo de portf\u00F3lio antigo para o novo gerenciamento de portf\u00F3lio.
-comments.enabled=Coment\u00E1rios vis\u00EDveis em
-comments.entries.enabled=$org.olat.modules.portfolio.ui\:portfolio.entries
-comments.overview.enabled=$org.olat.modules.portfolio.ui\:portfolio.overview
-create.map=Criar pasta
-create.map.default=Criar pasta acumulativa
-create.map.fromTemplate=Criar uma pasta a partir de modelo
-create.map.intro=Por favor, selecione o tipo de pasta acumulativa a ser criada
-create.map.selectTemplate=Selecionar modelo
-enabled=Habilitado
-entries.both.enabled=Tabela e lista
-entries.elements.enabled=Elementos vis\u00EDveis
-entries.list.enabled=Lista
-entries.search.enabled=Busca
-entries.table.enabled=Tabela
-entries.timeline.enabled=Timeline
-entries.view=Vista das entradas
-eportfolio.menu.title=ePortfolio
-eportfolio.menu.title.alt=ePortfolio junto com artefatos e pastas acumulativas
-handlers.intro=Por favor, selecione todos os tipos de artefatos dispon\u00EDveis. Artefatos desativados ser\u00E3o exibidos, no entanto, voc\u00EA n\u00E3o pode mais cobr\u00E1-los.
-handlers.title=Tipos de Artefato
-myartefacts.intro=Voc\u00EA pode editar e apagar artefatos recolhidos, ou adicionar outros.
-myartefacts.menu.title=Meus artefatos
-myartefacts.menu.title.alt=Mostrar e gerenciar todos os artefatos
-myartefacts.title=$\:admin.menu.title - $\:myartefacts.menu.title
-mymaps.intro=$\:mymaps.menu.title.alt
-mymaps.menu.title=Minhas pastas acumulativas
-mymaps.menu.title.alt=Mostrar e gerenciar todas as minhas pastas acumulativas
-mymaps.title=$\:admin.menu.title - $\:mymaps.menu.title
-mystructuredmaps.intro=$\:mystructuredmaps.menu.title.alt
-mystructuredmaps.menu.title=Minhas tarefas de portfolio
-mystructuredmaps.menu.title.alt=Mostrar e gerenciar todas as minhas pastas acumulativas em uma \u00FAnica tarefa de portfolio
-mystructuredmaps.title=$\:admin.menu.title - $\:mystructuredmaps.menu.title
-othermap.intro=$\:othermaps.menu.title.alt
-othermap.title=$\:admin.menu.title - Pasta
-othermaps.intro=$\:othermaps.menu.title.alt
-othermaps.menu.title=Pastas Acumulativas lan\u00E7adas
-othermaps.menu.title.alt=Minhas pastas acumulativas lan\u00E7adas por outros
-othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title
-portfolio.intro=Com isso voc\u00EA pode (des)ativar a funcionalidade ePortfolio inteira no OLAT.
-portfolio.module.change.warning=OLAT precisa ser reiniciado para ativar as suas altera\u00E7\u00F5es ao longo do sistema.
-portfolio.module.enabled=Ativar ePortfolio
-portfolio.title=$\:admin.menu.title
-portfolio.user.can.create.binder=Os alunos t\u00EAm permiss\u00E3o para criar pastas
-portfolio.user.can.create.binder.course=Os alunos podem criar pastas de um curso
-portfolio.user.can.create.binder.template=Os alunos podem criar pastas a partir de um modelo
-portfolio.user.create.binder=Criar pastas
-portfolio.v1.module.enabled=Ativar o ePortfolio legado v1 durante o per\u00EDodo de transi\u00E7\u00E3o
-section.disable.not.allowed=Esta se\u00E7\u00E3o n\u00E3o pode ser desativada. Est\u00E1 selecionada como a p\u00E1gina de destino\!
-section.enabled=Se\u00E7\u00F5es vis\u00EDveis
-section.entries.enabled=$org.olat.modules.portfolio.ui\:portfolio.entries
-section.history.enabled=$org.olat.modules.portfolio.ui\:portfolio.history
-section.overview.enabled=$org.olat.modules.portfolio.ui\:portfolio.overview
-site.title=$\:admin.menu.title
-site.title.alt=$\:admin.menu.title
-view.mode=Visualizar\:
-view.mode.details=Detalhes
-view.mode.table=Tabela
-viewTab.all=Artefatos
-viewTab.browse=Navegador de Tag
-viewTab.search=Busca
-warning.portfolio.module.disabled=O ePortfolio v1 est\u00E1 desativado.
-wizard.intro=Dentro da ferramenta de artefato acumulativas, h\u00E1 v\u00E1rias etapas para serem conclu\u00EDdas. Alguns deles s\u00E3o opcionais. Voc\u00EA pode desativar completamente esses passos se n\u00E3o for necess\u00E1rio.
-wizard.step.copyright=Pergunte ao usu\u00E1rio por direitos autorais
-wizard.step.reflexion=Coletar reflex\u00E3o
-wizard.title=Ferramenta de artefato acumulativa
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_zh_CN.properties
deleted file mode 100644
index 555ec1003ddb2903b920406e8e68c979e3e510a1..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_zh_CN.properties
+++ /dev/null
@@ -1,70 +0,0 @@
-#Mon Nov 10 00:40:50 CET 2014
-EPStructuredMapTemplate=\u7535\u5B50\u6863\u6848\u7EC4\u5408\u6A21\u677F
-admin.menu.title=\u7535\u5B50\u6863\u6848
-admin.menu.title.alt=\u7535\u5B50\u6863\u6848\u914D\u7F6E
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-choose.artefact.intro=\u8BF7\u9009\u62E9\u4E00\u4E2A\u8BC1\u660E\u6DFB\u52A0\u5230\u60A8\u7684\u5F62\u6210\u6027\u6587\u4EF6\u5939\u4E2D.
-create.map=\u521B\u5EFA\u6587\u4EF6\u5939
-create.map.default=\u521B\u5EFA\u5F62\u6210\u6027\u6587\u4EF6\u5939
-create.map.fromTemplate=\u4ECE\u6A21\u677F\u4E2D\u521B\u5EFA\u6587\u4EF6\u5939
-create.map.intro=\u8BF7\u9009\u62E9\u521B\u5EFA\u5F62\u6210\u6027\u6587\u4EF6\u5939\u7684\u7C7B\u578B
-create.map.selectTemplate=\u9009\u62E9\u6A21\u677F
-enabled=\u542F\u7528
-eportfolio.menu.title=\u7535\u5B50\u6863\u6848
-eportfolio.menu.title.alt=\u5E26\u6709\u4EBA\u5DE5\u8BC1\u660E\u548C\u5F62\u6210\u6027\u6587\u4EF6\u5939\u7684\u7535\u5B50\u6863\u6848
-handlers.intro=\u8BF7\u9009\u62E9\u6240\u6709\u53EF\u7528\u7684\u4EA7\u54C1\u7C7B\u578B\u3002\u5173\u95ED\u7684\u4EA7\u54C1\u7C7B\u578B\u4ECD\u4F1A\u663E\u793A\uFF0C\u4F46\u662F\u60A8\u4E0D\u80FD\u518D\u6536\u96C6\u4ED6\u4EEC\u7684\u4FE1\u606F\u3002
-handlers.title=\u4EA7\u54C1\u7C7B\u578B
-
-
-myartefacts.intro=\u60A8\u53EF\u4EE5\u7F16\u8F91\u548C\u5220\u9664\u5DF2\u6536\u96C6\u7684\u4EA7\u54C1\u6216\u6DFB\u52A0\u65B0\u7684\u9879\u76EE\u3002
-myartefacts.menu.title=\u6211\u7684\u4EA7\u54C1
-myartefacts.menu.title.alt=\u663E\u793A\u5E76\u7F16\u8F91\u6240\u6709\u7684\u4EA7\u54C1
-myartefacts.title=$\:admin.menu.title - $\:myartefacts.menu.title
-mymaps.intro=$\:mymaps.menu.title.alt
-mymaps.menu.title=\u6211\u7684\u6587\u4EF6\u5939
-mymaps.menu.title.alt=\u663E\u793A\u5E76\u7BA1\u7406\u6211\u6240\u6709\u7684\u7D2F\u79EF\u6027\u6587\u4EF6\u5939
-mymaps.title=$\:admin.menu.title - $\:mymaps.menu.title
-mystructuredmaps.intro=$\:mystructuredmaps.menu.title.alt
-mystructuredmaps.menu.title=\u6211\u7684\u6863\u6848\u4EFB\u52A1
-mystructuredmaps.menu.title.alt=\u663E\u793A\u5E76\u7BA1\u7406\u6211\u7684\u7D2F\u79EF\u6027\u6587\u4EF6\u5939\u4E2D\u6240\u6709\u5355\u4E2A\u6587\u6863\u7684\u4EFB\u52A1
-mystructuredmaps.title=$\:admin.menu.title - $\:mystructuredmaps.menu.title
-othermap.intro=$\:othermaps.menu.title.alt
-othermap.title=$\:admin.menu.title - \u6587\u4EF6\u5939
-othermaps.intro=$\:othermaps.menu.title.alt
-othermaps.menu.title=\u5DF2\u91CA\u653E\u7684\u7D2F\u79EF\u6587\u4EF6\u5939
-othermaps.menu.title.alt=\u6211\u7684\u7D2F\u79EF\u6587\u4EF6\u5939\u5DF2\u7ECF\u88AB\u4ED6\u4EBA\u91CA\u653E
-othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title
-portfolio.intro=\u901A\u8FC7\u6B64\u529F\u80FD\uFF0C\u60A8\u53EF\u4EE5\uFF08\u64A4\u9500\uFF09\u6FC0\u6D3BOpenOlat\u4E2D\u7684\u6574\u4E2A\u7535\u5B50\u6587\u6863\u7684\u529F\u80FD\u3002
-portfolio.module.change.warning=\u60A8\u9700\u8981\u91CD\u65B0\u542F\u52A8OpenOlat\uFF0C\u4EE5\u4F7F\u60A8\u7684\u6539\u52A8\u5728\u5404\u5904\u751F\u6548\u3002
-portfolio.module.enabled=\u6FC0\u6D3B\u7535\u5B50\u6863\u6848
-portfolio.title=$\:admin.menu.title
-site.title=$\:admin.menu.title
-site.title.alt=$\:admin.menu.title
-view.mode=\u67E5\u770B\u65B9\u5F0F\uFF1A
-view.mode.details=\u8BE6\u7EC6\u5185\u5BB9
-view.mode.table=\u8868\u683C\u663E\u793A
-viewTab.all=\u5386\u53F2\u8BB0\u5F55
-viewTab.browse=\u6807\u7B7E-\u6D4F\u89C8\u5668
-viewTab.search=\u641C\u7D22
-wizard.intro=\u8BB0\u5F55\u6536\u96C6\u5DE5\u5177\u5728\u5411\u5BFC\u4E2D\u5305\u542B\u4E0D\u540C\u7684\u6B65\u9AA4\u3002\u60A8\u53EF\u4EE5\u6839\u636E\u9700\u8981\u6765\u6FC0\u6D3B\u6216\u8005\u5173\u95ED\u5176\u4E2D\u7684\u6B65\u9AA4\u3002
-wizard.step.copyright=\u7528\u6237\u786E\u8BA4\u4F5C\u8005
-wizard.step.reflexion=\u68C0\u6D4B\u53CD\u5E94
-wizard.title=\u4F5C\u54C1\u6536\u96C6\u5DE5\u5177
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/ArtefactWizzardStepsController.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/ArtefactWizzardStepsController.java
deleted file mode 100755
index d19969b388788f86ca44d5af1b6a14a6c021d90e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/ArtefactWizzardStepsController.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-import java.util.Date;
-import java.util.List;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.panel.Panel;
-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.gui.control.generic.wizard.Step;
-import org.olat.core.gui.control.generic.wizard.StepRunnerCallback;
-import org.olat.core.gui.control.generic.wizard.StepsMainRunController;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * 
- * Description:<br>
- * Entry point to the collection wizzard. 
- * 
- * <P>
- * Initial Date: 11.06.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class ArtefactWizzardStepsController extends BasicController {
-
-	private Controller collectStepsCtrl;
-	
-	private Link addLink;
-	AbstractArtefact artefact;
-	private OLATResourceable ores;
-	private String businessPath;
-	private VFSContainer tmpFolder = null;
-	
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	@Autowired
-	private PortfolioModule portfolioModule;
-
-	public ArtefactWizzardStepsController(UserRequest ureq, WindowControl wControl) {
-		super(ureq, wControl);
-		
-		EPArtefactHandler<?> handler = portfolioModule.getArtefactHandler("Forum");
-		AbstractArtefact newArtefact = handler.createArtefact();
-		this.artefact = newArtefact;
-
-		initCollectionStepWizzard(ureq);
-		Panel emptyItself = new Panel("emptyItself");
-		putInitialPanel(emptyItself);
-	}
-
-	/**
-	 * to be used to manipulate with the wizzard on an already existing artefact.
-	 * 
-	 * @param ureq
-	 * @param wControl
-	 * @param artefact
-	 */
-	public ArtefactWizzardStepsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, VFSContainer tmpFolder) {
-		super(ureq, wControl);
-		
-		this.artefact = artefact;
-		this.tmpFolder  = tmpFolder;
-
-		initCollectionStepWizzard(ureq);
-		Panel emptyItself = new Panel("emptyItself");
-		putInitialPanel(emptyItself);
-	}
-
-	/**
-	 * !! you should not use this constructor directly !!
-	 * intention would be to use the EPUIFactory instead. like this the collect-links are hidden, if ePortfolio is disabled!
-	 * the use of the EPUIFactory is not yet possible in all places in OLAT (sometimes a businesspath is missing).  
-	 * @param ureq
-	 * @param wControl
-	 * @param ores
-	 * @param subPath
-	 * @param businessPath
-	 */
-	public ArtefactWizzardStepsController(UserRequest ureq, WindowControl wControl, OLATResourceable ores, String businessPath) {
-		super(ureq, wControl);
-		this.ores = ores;
-		this.businessPath = businessPath;
-		initCollectLinkVelocity();
-	}
-	
-	/**
-	 * !! you should not use this constructor directly !!
-	 * intention would be to use the EPUIFactory instead. like this the collect-links are hidden, if ePortfolio is disabled!
-	 * the use of the EPUIFactory is not yet possible in all places in OLAT (sometimes a businesspath is missing).
-	 * @param ureq
-	 * @param wControl
-	 * @param artefact
-	 */
-	public ArtefactWizzardStepsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact) {
-		super(ureq, wControl);
-		this.artefact = artefact;
-		this.businessPath = artefact.getBusinessPath();
-		initCollectLinkVelocity();
-	}
-	
-	public ArtefactWizzardStepsController(UserRequest ureq, WindowControl wControl, int numOfArtefacts,
-			OLATResourceable ores, String businessPath) {
-		super(ureq, wControl);
-		this.ores = ores;
-		this.businessPath = businessPath;
-		initCollectLinkVelocity(numOfArtefacts);
-	}
-	
-	private void initCollectLinkVelocity() {
-		List<AbstractArtefact> existingArtefacts = ePFMgr.loadArtefactsByBusinessPath(businessPath, getIdentity());
-		int numOfArtefacts = existingArtefacts == null ? 0 : existingArtefacts.size();
-		initCollectLinkVelocity(numOfArtefacts);
-	}
-
-	private void initCollectLinkVelocity(int numOfArtefacts) {
-		addLink = LinkFactory.createCustomLink("add.to.eportfolio", "add.to.eportfolio", "", Link.LINK_CUSTOM_CSS + Link.NONTRANSLATED,
-				null, this);
-		addLink.setCustomEnabledLinkCSS("o_eportfolio_add");
-		addLink.setIconLeftCSS("o_icon o_icon-lg o_icon_eportfolio_add");
-		addLink.setTooltip(translate("add.to.eportfolio"));
-		addLink.setTranslator(getTranslator());
-		if (numOfArtefacts > 0) {
-			addLink.setIconLeftCSS("o_icon o_icon-lg o_icon_eportfolio_add");
-			addLink.setCustomEnabledLinkCSS("o_eportfolio_add_again");
-			addLink.setTooltip(translate("add.to.eportfolio.again", String.valueOf(numOfArtefacts)));	
-		}
-		putInitialPanel(addLink);
-		getInitialComponent().setSpanAsDomReplaceable(true); // special case since controller is actually just a link 
-	}
-	
-	/**
-	 * @param ores
-	 * @param businessPath
-	 */
-	private void prepareNewArtefact() {
-		EPArtefactHandler<?> artHandler = portfolioModule.getArtefactHandler(ores.getResourceableTypeName());
-		AbstractArtefact artefact1 = artHandler.createArtefact();
-		artefact1.setAuthor(getIdentity());
-		artefact1.setCollectionDate(new Date());
-		artefact1.setBusinessPath(businessPath);
-		artHandler.prefillArtefactAccordingToSource(artefact1, ores);
-		this.artefact = artefact1;
-	}
-
-
-
-	private void initCollectionStepWizzard(UserRequest ureq) {
-		if (artefact == null && ores != null) prepareNewArtefact();
-		Step start = new EPCollectStep00(ureq, artefact);
-		StepRunnerCallback finish = new EPArtefactWizzardStepCallback(tmpFolder);
-		collectStepsCtrl = new StepsMainRunController(ureq, getWindowControl(), start, finish, null,
-				translate("collect.wizzard.title"), "o_sel_artefact_add_wizard");
-		listenTo(collectStepsCtrl);
-		getWindowControl().pushAsModalDialog(collectStepsCtrl.getInitialComponent());
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		if (source == addLink) {
-			// someone triggered the 'add to my portfolio' workflow by its link
-			artefact = null; // always collect a new artefact
-			initCollectionStepWizzard(ureq);
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		super.event(ureq, source, event);
-		if (source == collectStepsCtrl) {
-			if (event == Event.CHANGED_EVENT) {
-				ePFMgr.updateArtefact(artefact);
-				showInfo("collect.success", StringHelper.escapeHtml(artefact.getTitle()));
-			} else {
-				// set back artefact-values
-				// artefact = ePFMgr.loadArtefact(artefact.getKey());
-			}
-			// cancel / done event means no data change but close wizzard and fwd
-			// event
-			getWindowControl().pop();
-			fireEvent(ureq, event);
-		}
-	}
-
-	@Override
-	protected void doDispose() {
-		// nothing to dispose
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/CmdAddToEPortfolioImpl.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/CmdAddToEPortfolioImpl.java
deleted file mode 100644
index a92312dca866ecc870935c0fdc3e2b53f4776400..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/CmdAddToEPortfolioImpl.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.modules.bc.commands.CmdAddToEPortfolio;
-import org.olat.core.commons.modules.bc.commands.FolderCommandHelper;
-import org.olat.core.commons.modules.bc.commands.FolderCommandStatus;
-import org.olat.core.commons.modules.bc.components.FolderComponent;
-import org.olat.core.commons.modules.bc.components.ListRenderer;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-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.gui.translator.Translator;
-import org.olat.core.util.FileUtils;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.vfs.VFSItem;
-import org.olat.modules.portfolio.MediaHandler;
-import org.olat.modules.portfolio.PortfolioService;
-import org.olat.modules.portfolio.PortfolioV2Module;
-import org.olat.modules.portfolio.handler.FileHandler;
-import org.olat.modules.portfolio.handler.ImageHandler;
-import org.olat.modules.portfolio.ui.wizard.CollectArtefactController;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.artefacts.FileArtefact;
-
-/**
- * Description:<br>
- * wrapper for the old folder-architecture to handle clicks on ePortfolio-add in
- * folder
- * 
- * <P>
- * Initial Date: 03.09.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class CmdAddToEPortfolioImpl extends BasicController implements CmdAddToEPortfolio {
-
-	private int status;
-	private VFSItem currentItem;
-	private PortfolioModule portfolioModule;
-	private PortfolioV2Module portfolioV2Module;
-	
-	private Controller collectStepsCtrl;
-
-	public CmdAddToEPortfolioImpl(UserRequest ureq, WindowControl wControl) {
-		super(ureq, wControl);
-		portfolioModule = CoreSpringFactory.getImpl(PortfolioModule.class);
-		portfolioV2Module = CoreSpringFactory.getImpl(PortfolioV2Module.class);
-	}
-
-	/**
-	 * might return NULL!, if item clicked was removed meanwhile or if portfolio is disabled or if only the folder-artefact-handler is disabled.
-	 * 
-	 * @see org.olat.core.commons.modules.bc.commands.FolderCommand#execute(org.olat.core.commons.modules.bc.components.FolderComponent,
-	 *      org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.WindowControl,
-	 *      org.olat.core.gui.translator.Translator)
-	 */
-	@Override
-	public Controller execute(FolderComponent folderComponent, UserRequest ureq, WindowControl wControl, Translator translator) {
-		String pos = ureq.getParameter(ListRenderer.PARAM_EPORT);
-		if (!StringHelper.containsNonWhitespace(pos)) {
-			// somehow parameter did not make it to us
-			status = FolderCommandStatus.STATUS_FAILED;
-			getWindowControl().setError(translator.translate("failed"));
-			return null;
-		}
-
-		status = FolderCommandHelper.sanityCheck(wControl, folderComponent);
-		if (status == FolderCommandStatus.STATUS_SUCCESS) {
-			currentItem = folderComponent.getCurrentContainerChildren().get(Integer.parseInt(pos));
-			status = FolderCommandHelper.sanityCheck2(wControl, folderComponent, currentItem);
-		}
-		if (status == FolderCommandStatus.STATUS_FAILED) {
-			return null;
-		}
-		
-		if(portfolioV2Module.isEnabled()) {
-			PortfolioService portfolioService = CoreSpringFactory.getImpl(PortfolioService.class);
-			
-			MediaHandler handler = null;
-			
-			String extension = FileUtils.getFileSuffix(currentItem.getName());
-			if(StringHelper.containsNonWhitespace(extension)) {
-				if("jpg".equalsIgnoreCase(extension) || "jpeg".equalsIgnoreCase(extension)
-						|| "png".equalsIgnoreCase(extension) || "gif".equalsIgnoreCase(extension)) {
-					handler = portfolioService.getMediaHandler(ImageHandler.IMAGE_TYPE);
-				}
-			}
-			
-			if(handler == null) {
-				handler = portfolioService.getMediaHandler(FileHandler.FILE_TYPE);
-			}
-			collectStepsCtrl = new CollectArtefactController(ureq, wControl, currentItem, handler, "");
-		} else {
-			EPArtefactHandler<?> artHandler = portfolioModule.getArtefactHandler(FileArtefact.FILE_ARTEFACT_TYPE);
-			AbstractArtefact artefact = artHandler.createArtefact();
-			artHandler.prefillArtefactAccordingToSource(artefact, currentItem);
-			artefact.setAuthor(getIdentity());
-
-			collectStepsCtrl = new ArtefactWizzardStepsController(ureq, wControl, artefact, currentItem.getParentContainer());
-		}
-
-		return collectStepsCtrl;
-	}
-
-	@Override
-	public int getStatus() {
-		return status;
-	}
-
-	@Override
-	public boolean runsModal() {
-		return true;
-	}
-
-	@Override
-	public String getModalTitle() {
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.Component,
-	 *      org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		// none
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		if (collectStepsCtrl != null) {
-			collectStepsCtrl.dispose();
-			collectStepsCtrl = null;
-		}
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPAddArtefactController.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPAddArtefactController.java
deleted file mode 100644
index 28ab6c1ed034353380ec42dbfc7f0a5ad1e2ec45..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPAddArtefactController.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-import java.util.Date;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.gui.control.generic.closablewrapper.CloseableCalloutWindowController;
-import org.olat.core.gui.control.generic.wizard.Step;
-import org.olat.core.gui.control.generic.wizard.StepRunnerCallback;
-import org.olat.core.gui.control.generic.wizard.StepsMainRunController;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.modules.webFeed.portfolio.EPCreateLiveBlogArtefactStep00;
-import org.olat.modules.webFeed.portfolio.LiveBlogArtefact;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.artefacts.EPTextArtefact;
-import org.olat.portfolio.model.artefacts.FileArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * overlay controller to hold some links for different kind of adding artefacts.
- * - triggers further workflows to add artefact
- * 
- * fires an Done-Event when an artefact was added
- * <P>
- * Initial Date: 26.07.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPAddArtefactController extends BasicController {
-
-	private Link uploadBtn, liveBlogBtn;
-	private VelocityContainer addPage;
-	private Link textBtn, addBtn;
-	private StepsMainRunController collectStepsCtrl;
-	
-	private VFSContainer vfsTemp;
-	private VelocityContainer addLinkVC;
-	private CloseableCalloutWindowController calloutCtr;
-	
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	@Autowired
-	private PortfolioModule portfolioModule;
-	
-	private PortfolioStructure preSelectedStruct;
-
-	public EPAddArtefactController(UserRequest ureq, WindowControl wControl) {
-		super(ureq, wControl);
-		addLinkVC = createVelocityContainer("addLink");
-		addBtn = LinkFactory.createButton("add.artefact", addLinkVC, this);
-		addBtn.setElementCssClass("o_sel_add_artfeact");
-		putInitialPanel(addLinkVC);
-	}
-
-	private void initAddPageVC(){
-		addPage = createVelocityContainer("addpanel");
-		EPArtefactHandler<?> textHandler = portfolioModule.getArtefactHandler(EPTextArtefact.TEXT_ARTEFACT_TYPE);
-		if (textHandler != null && textHandler.isEnabled()) {
-			textBtn = LinkFactory.createLink("add.text.artefact", addPage, this);
-			textBtn.setElementCssClass("o_sel_add_text_artfeact");
-		}
-		EPArtefactHandler<?> fileHandler = portfolioModule.getArtefactHandler(FileArtefact.FILE_ARTEFACT_TYPE);
-		if (fileHandler != null && fileHandler.isEnabled()) {
-			uploadBtn = LinkFactory.createLink("add.artefact.upload", addPage, this);
-			uploadBtn.setElementCssClass("o_sel_add_upload_artfeact");
-		}
-		EPArtefactHandler<?> liveblogHandler = portfolioModule.getArtefactHandler(LiveBlogArtefact.TYPE);
-		if (liveblogHandler != null && liveblogHandler.isEnabled()) {
-			liveBlogBtn = LinkFactory.createLink("add.artefact.liveblog", addPage, this);
-			liveBlogBtn.setCustomDisplayText(translate("add.artefact.blog"));
-			liveBlogBtn.setElementCssClass("o_sel_add_liveblog_artfeact");
-		}
-	}
-	
-	private void initAddLinkPopup(UserRequest ureq) {
-		if (addPage == null) initAddPageVC();
-		String title = translate("add.artefact");
-		
-		removeAsListenerAndDispose(calloutCtr);
-		calloutCtr = new CloseableCalloutWindowController(ureq, getWindowControl(), addPage, addBtn, title, true, null);
-		listenTo(calloutCtr);
-		calloutCtr.activate();
-	}
-	
-	public PortfolioStructure getPreSelectedStruct() {
-		return preSelectedStruct;
-	}
-
-	public void setPreSelectedStruct(PortfolioStructure preSelectedStruct) {
-		this.preSelectedStruct = preSelectedStruct;
-	}
-
-	private void closeAddLinkPopup(){
-		if (calloutCtr != null) {
-			calloutCtr.deactivate();
-			removeAsListenerAndDispose(calloutCtr);
-			calloutCtr = null;
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.Component,
-	 *      org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		if (source == addBtn) {
-			if (calloutCtr==null){
-				initAddLinkPopup(ureq);
-				addBtn.setDirty(false);
-			} else {
-				closeAddLinkPopup();
-			}
-		} else {
-			// close on all clicked links in the popup
-			closeAddLinkPopup();
-			if (source == textBtn) {
-				prepareNewTextArtefactWizzard(ureq);
-			} else if (source == uploadBtn) {
-				prepareFileArtefactWizzard(ureq);
-			} else if (source == liveBlogBtn) {
-				prepareNewLiveBlogArtefactWizzard(ureq);
-			}
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		if (source == collectStepsCtrl && event == Event.CANCELLED_EVENT) {
-			disposeTempDir();
-			getWindowControl().pop();
-			removeAsListenerAndDispose(collectStepsCtrl);
-		}
-		if (source == collectStepsCtrl && event == Event.CHANGED_EVENT) {
-			getWindowControl().pop();
-			removeAsListenerAndDispose(collectStepsCtrl);
-			
-			// manually dispose temp vfsContainer here :: FXOLAT-386 
-			// this EPAddArtefactController gets disposed "too late" 
-			//(vfsTemp can change inbetween, so only the last one get's deleted)
-			disposeTempDir();
-			showInfo("collect.success.text.artefact");
-			fireEvent(ureq, Event.DONE_EVENT);
-		} 
-		if (source == calloutCtr && event == CloseableCalloutWindowController.CLOSE_WINDOW_EVENT) {
-			removeAsListenerAndDispose(calloutCtr);
-			calloutCtr = null;
-		}
-	}
-
-	/**
-	 * prepare a new text artefact and open with wizzard initialized with a
-	 * special first step for text-artefacts
-	 * 
-	 * @param ureq
-	 */
-	private void prepareNewTextArtefactWizzard(UserRequest ureq) {
-		EPArtefactHandler<?> artHandler = portfolioModule.getArtefactHandler(EPTextArtefact.TEXT_ARTEFACT_TYPE);
-		AbstractArtefact artefact1 = artHandler.createArtefact();
-		artefact1.setAuthor(getIdentity());
-		artefact1.setSource(translate("text.artefact.source.info"));
-		artefact1.setCollectionDate(new Date());
-		artefact1.setSignature(-20);
-
-		vfsTemp = ePFMgr.getArtefactsTempContainer(getIdentity());
-		Step start = new EPCreateTextArtefactStep00(ureq, artefact1, preSelectedStruct, vfsTemp);
-		StepRunnerCallback finish = new EPArtefactWizzardStepCallback(vfsTemp);
-		collectStepsCtrl = new StepsMainRunController(ureq, getWindowControl(), start, finish, null,
-				translate("create.text.artefact.wizzard.title"), "o_sel_artefact_add_wizard o_sel_artefact_add_text_wizard");
-		listenTo(collectStepsCtrl);
-		getWindowControl().pushAsModalDialog(collectStepsCtrl.getInitialComponent());
-	}
-
-	/**
-	 * prepare a file artefact and open with wizzard initialized with a special
-	 * first step for file-artefacts
-	 * 
-	 * @param ureq
-	 */
-	private void prepareFileArtefactWizzard(UserRequest ureq) {
-		EPArtefactHandler<?> artHandler = portfolioModule.getArtefactHandler(FileArtefact.FILE_ARTEFACT_TYPE);
-		AbstractArtefact artefact1 = artHandler.createArtefact();
-		artefact1.setAuthor(getIdentity());
-		artefact1.setSource(translate("file.artefact.source.info"));
-		artefact1.setCollectionDate(new Date());
-		artefact1.setSignature(-30);
-
-		vfsTemp = ePFMgr.getArtefactsTempContainer(getIdentity());
-		Step start = new EPCreateFileArtefactStep00(ureq, artefact1, preSelectedStruct, vfsTemp);
-		StepRunnerCallback finish = new EPArtefactWizzardStepCallback(vfsTemp);
-		collectStepsCtrl = new StepsMainRunController(ureq, getWindowControl(), start, finish, null,
-				translate("create.file.artefact.wizzard.title"), "o_sel_artefact_add_wizard o_sel_artefact_add_file_wizard");
-		listenTo(collectStepsCtrl);
-		getWindowControl().pushAsModalDialog(collectStepsCtrl.getInitialComponent());
-	}
-	
-	private void prepareNewLiveBlogArtefactWizzard(UserRequest ureq) {
-		EPArtefactHandler<?> artHandler = portfolioModule.getArtefactHandler(LiveBlogArtefact.TYPE);
-		AbstractArtefact artefact1 = artHandler.createArtefact();
-		artefact1.setAuthor(getIdentity());
-		artefact1.setCollectionDate(new Date());
-		artefact1.setSignature(60); // preset as signed by 60%
-
-		Step start = new EPCreateLiveBlogArtefactStep00(ureq, preSelectedStruct, artefact1);
-		StepRunnerCallback finish = new EPArtefactWizzardStepCallback(); // no vfsTemp!, blog doesn't need a directory
-		collectStepsCtrl = new StepsMainRunController(ureq, getWindowControl(), start, finish, null,
-				translate("create.blog.artefact.wizzard.title"), "o_sel_artefact_add_wizard o_sel_artefact_add_blog_wizard");
-		listenTo(collectStepsCtrl);
-		getWindowControl().pushAsModalDialog(collectStepsCtrl.getInitialComponent());
-	}
-
-	/**
-	 * FXOLAT-386
-	 * disposed the temp vfsContainer from a file Artefact upload
-	 */
-	private void disposeTempDir(){
-		if(vfsTemp != null ) {
-			vfsTemp.delete();
-			vfsTemp = null;
-		}
-	}
-	
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		disposeTempDir();
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPArtefactWizzardStepCallback.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPArtefactWizzardStepCallback.java
deleted file mode 100644
index 8de3e651c414e08886faf1f98537e2b86ddaf2f2..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPArtefactWizzardStepCallback.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-import java.util.List;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.wizard.Step;
-import org.olat.core.gui.control.generic.wizard.StepRunnerCallback;
-import org.olat.core.gui.control.generic.wizard.StepsMainRunController;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.core.util.vfs.VFSItem;
-import org.olat.portfolio.EPLoggingAction;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.artefacts.FileArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.util.logging.activity.LoggingResourceable;
-
-/**
- * Description:<br>
- * Persists the collected data after using the wizzard for new artefacts
- * 
- * <P>
- * Initial Date: 01.09.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPArtefactWizzardStepCallback implements StepRunnerCallback {
-
-	private VFSContainer tempUpload;
-	private EPFrontendManager ePFMgr;
-
-	/**
-	 * 
-	 * @param tempUpload
-	 */
-	public EPArtefactWizzardStepCallback(VFSContainer tempUpload) {
-		this.tempUpload = tempUpload;
-	}
-
-	public EPArtefactWizzardStepCallback() {
-		// default without a specified temp-folder, it still might be defined during wizzard and added to runcontext
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepRunnerCallback#execute(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.WindowControl,
-	 *      org.olat.core.gui.control.generic.wizard.StepsRunContext)
-	 */
-	@Override
-	public Step execute(UserRequest ureq2, WindowControl wControl, StepsRunContext runContext) {
-		boolean hasChanges = false;
-		if (runContext.containsKey("artefact")) {
-			hasChanges = true;
-			AbstractArtefact locArtefact = (AbstractArtefact) runContext.get("artefact");
-			ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-			PortfolioModule portfolioModule = (PortfolioModule) CoreSpringFactory.getBean("portfolioModule");
-			
-			// set the defined signature level, if its not from inside olat
-			if (locArtefact.getSignature() < 0 && ( (runContext.containsKey("copyright.accepted") && (Boolean) runContext.get("copyright.accepted")) || !portfolioModule.isCopyrightStepEnabled() ) ) {
-				locArtefact.setSignature(-1 * locArtefact.getSignature());
-			}
-			
-			ePFMgr.updateArtefact(locArtefact);
-
-			if (runContext.containsKey("tempArtFolder")) {
-				// a new text or file-artefact was created, copy everything to destination
-				VFSContainer tmpFolder = (VFSContainer) runContext.get("tempArtFolder");
-				copyFromTempToArtefactContainer(locArtefact, tmpFolder);
-			} else if (tempUpload != null) {
-				// an artefact was collected in bc, only copy the selected file				
-				copyFromBCToArtefactContainer(locArtefact, tempUpload);
-			}
-			
-			
-			// add to a structure if any was selected
-			if (runContext.containsKey("selectedStructure")){
-				PortfolioStructure parentStructure = (PortfolioStructure) runContext.get("selectedStructure");
-				if (parentStructure != null){
-					ePFMgr.addArtefactToStructure(ureq2.getIdentity(), locArtefact, parentStructure);
-				}
-			}
-			
-			@SuppressWarnings("unchecked")
-			List<String> allTags = (List<String>) runContext.get("artefactTagsList");
-			ePFMgr.setArtefactTags(ureq2.getIdentity(), locArtefact, allTags);
-
-			ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapPortfolioOres(locArtefact));
-			ThreadLocalUserActivityLogger.log(EPLoggingAction.EPORTFOLIO_ARTEFACT_ADDED, getClass());
-		}
-
-		return hasChanges ? StepsMainRunController.DONE_MODIFIED : StepsMainRunController.DONE_UNCHANGED;
-	}
-
-	private void copyFromTempToArtefactContainer(AbstractArtefact artefact, VFSContainer tmp) {
-		if (tmp != null) {
-			VFSContainer artFolder = ePFMgr.getArtefactContainer(artefact);
-			List<VFSItem> items = tmp.getItems();
-			for (VFSItem vfsItem : items) {
-				artFolder.copyFrom(vfsItem);
-			}
-		}
-	}
-	
-	private void copyFromBCToArtefactContainer(AbstractArtefact artefact, VFSContainer tmp) {
-		if (tmp != null) {
-			VFSContainer artFolder = ePFMgr.getArtefactContainer(artefact);
-			VFSItem bcFile = tmp.resolve(((FileArtefact)artefact).getFilename());
-			if (bcFile != null){
-				artFolder.copyFrom(bcFile);
-			}
-		}
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStep00.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStep00.java
deleted file mode 100644
index 2db0dbfa493eec5842232710ae14e3fc031fb519..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStep00.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <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
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <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>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-package org.olat.portfolio.ui.artefacts.collect;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.impl.Form;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.wizard.BasicStep;
-import org.olat.core.gui.control.generic.wizard.PrevNextFinishConfig;
-import org.olat.core.gui.control.generic.wizard.StepFormController;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * Initial Date:  27.07.2010 <br>
- * @author rhaag
- */
-public class EPCollectStep00 extends BasicStep {
-
-	private AbstractArtefact artefact;
-
-	public EPCollectStep00(UserRequest ureq, AbstractArtefact artefact) {
-		super(ureq);
-		this.artefact = artefact;
-		setI18nTitleAndDescr("step0.description", "step0.short.descr");
-		setNextStep(new EPCollectStep01(ureq, artefact));
-	}
-
-	@Override
-	public PrevNextFinishConfig getInitialPrevNextFinishConfig() {
-		return new PrevNextFinishConfig(false, true, false);
-	}
-
-	@Override
-	public StepFormController getStepController(UserRequest ureq, WindowControl windowControl, StepsRunContext stepsRunContext, Form form) {
-		return new EPCollectStepForm00(ureq, windowControl, form, stepsRunContext, FormBasicController.LAYOUT_DEFAULT, null, artefact);
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStep01.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStep01.java
deleted file mode 100644
index cab15f33990cc696ab89e667c1337be65ea60213..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStep01.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <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
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <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>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-package org.olat.portfolio.ui.artefacts.collect;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.impl.Form;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.wizard.BasicStep;
-import org.olat.core.gui.control.generic.wizard.PrevNextFinishConfig;
-import org.olat.core.gui.control.generic.wizard.StepFormController;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * Description:<br>
- * Step which collects the tags. Presents a list of the 50 most used tags
- * 
- * <P>
- * Initial Date:  27.07.2010 <br>
- * @author rhaag
- */
-public class EPCollectStep01 extends BasicStep {
-
-	
-	private AbstractArtefact artefact;
-
-	public EPCollectStep01(UserRequest ureq, AbstractArtefact artefact) {
-		super(ureq);
-		this.artefact = artefact;
-		setI18nTitleAndDescr("step1.description", "step1.short.descr");
-		PortfolioModule portfolioModule = (PortfolioModule) CoreSpringFactory.getBean("portfolioModule");
-		//signature > 0 means, collection wizard can be sure its from OLAT, < 0 means get an approval by user (the target value is the negative one)
-		if (!portfolioModule.isCopyrightStepEnabled() && !portfolioModule.isReflexionStepEnabled()){
-			// skip copyright AND reflexion step
-			setNextStep(new EPCollectStep04(ureq));
-		} else if (artefact.getSignature() > 0 || !portfolioModule.isCopyrightStepEnabled()){
-			setNextStep(new EPCollectStep03(ureq, artefact));
-		} else if (portfolioModule.isCopyrightStepEnabled() ){
-			setNextStep(new EPCollectStep02(ureq, artefact));
-		} 
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.BasicStep#getInitialPrevNextFinishConfig()
-	 */
-	@Override
-	public PrevNextFinishConfig getInitialPrevNextFinishConfig() {
-		return new PrevNextFinishConfig(true, true, false);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.BasicStep#getStepController(org.olat.core.gui.UserRequest, org.olat.core.gui.control.WindowControl, org.olat.core.gui.control.generic.wizard.StepsRunContext, org.olat.core.gui.components.form.flexible.impl.Form)
-	 */
-	@Override
-	public StepFormController getStepController(UserRequest ureq, WindowControl windowControl, StepsRunContext stepsRunContext, Form form) {
-		StepFormController stepI = new EPCollectStepForm01(ureq, windowControl, form, stepsRunContext, artefact);
-		return stepI;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStep02.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStep02.java
deleted file mode 100644
index fcfb38459037353afe7a1aa35a176b3721496fc2..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStep02.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.impl.Form;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.wizard.BasicStep;
-import org.olat.core.gui.control.generic.wizard.PrevNextFinishConfig;
-import org.olat.core.gui.control.generic.wizard.StepFormController;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * Description:<br>
- * step to ensure copyrights
- * 
- * <P>
- * Initial Date: 28.07.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPCollectStep02 extends BasicStep {
-
-	private AbstractArtefact artefact;
-
-	public EPCollectStep02(UserRequest ureq, AbstractArtefact artefact) {
-		super(ureq);
-		this.artefact = artefact;
-		setI18nTitleAndDescr("step2.description", "step2.short.descr");
-		PortfolioModule portfolioModule = (PortfolioModule) CoreSpringFactory.getBean("portfolioModule");
-		if (!portfolioModule.isCopyrightStepEnabled() && !portfolioModule.isReflexionStepEnabled()){
-			// skip copyright AND reflexion step
-			setNextStep(new EPCollectStep04(ureq));
-		} else {		
-			setNextStep(new EPCollectStep03(ureq, artefact));
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.BasicStep#getInitialPrevNextFinishConfig()
-	 */
-	@Override
-	public PrevNextFinishConfig getInitialPrevNextFinishConfig() {
-		return new PrevNextFinishConfig(true, true, true);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.BasicStep#getStepController(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.WindowControl,
-	 *      org.olat.core.gui.control.generic.wizard.StepsRunContext,
-	 *      org.olat.core.gui.components.form.flexible.impl.Form)
-	 */
-	@Override
-	public StepFormController getStepController(UserRequest ureq, WindowControl windowControl, StepsRunContext stepsRunContext, Form form) {
-		StepFormController step = new EPCollectStepForm02(ureq, windowControl, form, stepsRunContext, FormBasicController.LAYOUT_VERTICAL,
-				null, artefact);
-		return step;
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStep03.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStep03.java
deleted file mode 100644
index 8811d3963597e0fb61810038321a85be2e71befc..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStep03.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-import java.util.List;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.impl.Form;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.wizard.BasicStep;
-import org.olat.core.gui.control.generic.wizard.PrevNextFinishConfig;
-import org.olat.core.gui.control.generic.wizard.StepFormController;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-
-/**
- * Description:<br>
- * Step to collect reflexion
- * 
- * <P>
- * Initial Date: 28.07.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPCollectStep03 extends BasicStep {
-
-	private AbstractArtefact artefact;
-	private boolean hasNextStep;
-
-	public EPCollectStep03(UserRequest ureq, AbstractArtefact artefact) {
-		super(ureq);
-		this.artefact = artefact;
-		EPFrontendManager ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-		List<PortfolioStructure> structs = ePFMgr.getStructureElementsForUser(getIdentity());
-		this.hasNextStep = false;
-		if (structs != null && structs.size() != 0) { 
-			setNextStep(new EPCollectStep04(ureq));
-			hasNextStep = true;
-		} else {
-			setNextStep(NOSTEP);
-		}
-		setI18nTitleAndDescr("step3.description", "step3.short.descr");
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.BasicStep#getInitialPrevNextFinishConfig()
-	 */
-	@Override
-	public PrevNextFinishConfig getInitialPrevNextFinishConfig() {
-		if (hasNextStep){
-			return new PrevNextFinishConfig(true, true, true);
-		} else {
-			return new PrevNextFinishConfig(true, false, true);
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.BasicStep#getStepController(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.WindowControl,
-	 *      org.olat.core.gui.control.generic.wizard.StepsRunContext,
-	 *      org.olat.core.gui.components.form.flexible.impl.Form)
-	 */
-	@Override
-	public StepFormController getStepController(UserRequest ureq, WindowControl windowControl, StepsRunContext stepsRunContext, Form form) {
-		StepFormController step = new EPCollectStepForm03(ureq, windowControl, form, stepsRunContext, FormBasicController.LAYOUT_VERTICAL,
-				null, artefact);
-		return step;
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStep04.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStep04.java
deleted file mode 100644
index 0dfa889d49b56d73b3488ee43cd36cfee9e85ed0..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStep04.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <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
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <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>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-package org.olat.portfolio.ui.artefacts.collect;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.impl.Form;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.wizard.BasicStep;
-import org.olat.core.gui.control.generic.wizard.PrevNextFinishConfig;
-import org.olat.core.gui.control.generic.wizard.StepFormController;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-
-/**
- * Initial Date:  28.07.2010 <br>
- * @author rhaag
- */
-public class EPCollectStep04 extends BasicStep {
-
-	public EPCollectStep04(UserRequest ureq) {
-		super(ureq);
-		setNextStep(NOSTEP);
-		setI18nTitleAndDescr("step4.description", "step4.short.descr");
-	}
-	
-	@Override
-	public PrevNextFinishConfig getInitialPrevNextFinishConfig() {
-		return new PrevNextFinishConfig(true, false, true);
-	}
-
-	@Override
-	public StepFormController getStepController(UserRequest ureq, WindowControl windowControl, StepsRunContext stepsRunContext, Form form) {
-		return new EPCollectStepForm04(ureq, windowControl, form, stepsRunContext, FormBasicController.LAYOUT_CUSTOM);
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStepForm00.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStepForm00.java
deleted file mode 100644
index c5c8866bc1d5cf924d87866d76e6ca318070ba94..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStepForm00.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-import java.util.Date;
-import java.util.List;
-
-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.StaticTextElement;
-import org.olat.core.gui.components.form.flexible.elements.TextElement;
-import org.olat.core.gui.components.form.flexible.impl.Form;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-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.generic.wizard.StepFormBasicController;
-import org.olat.core.gui.control.generic.wizard.StepsEvent;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.id.context.BusinessControlFactory;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.util.Formatter;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.Util;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.ui.artefacts.view.EPArtefactViewController;
-
-/**
- * Description:<br>
- * first collection step, collecting title and description of an artefact
- * 
- * <P>
- * Initial Date:  01.11.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPCollectStepForm00 extends StepFormBasicController {
-
-	private TextElement title;
-	private RichTextElement descript;
-	private AbstractArtefact artefact;
-	private boolean simpleMode = false;
-
-	public EPCollectStepForm00(UserRequest ureq, WindowControl wControl, Form rootForm, StepsRunContext runContext, int layout,
-			String customLayoutPageName, AbstractArtefact artefact) {
-		super(ureq, wControl, rootForm, runContext, layout, customLayoutPageName);
-		// set fallback translator to re-use given strings
-		Translator pt = Util.createPackageTranslator(EPArtefactViewController.class, ureq.getLocale(), getTranslator());
-		flc.setTranslator(pt);
-		this.artefact = artefact;
-		initForm(flc, this, ureq);
-	}
-
-	// this constructor is used when editing an artefact, therefore the form doesn't show all fields!
-	public EPCollectStepForm00(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact) {
-		super(ureq, wControl, FormBasicController.LAYOUT_VERTICAL);
-		// set fallback translator to re-use given strings
-		Translator pt = Util.createPackageTranslator(EPArtefactViewController.class, ureq.getLocale(), getTranslator());
-		this.flc.setTranslator(pt);
-		this.artefact = artefact;
-		this.simpleMode = true;
-		initForm(ureq);		
-	}
-
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		title = uifactory.addTextElement("title", "artefact.title", 500, artefact.getTitle(), formLayout);
-		title.setElementCssClass("o_sel_ep_artefact_metadata_title");
-		title.setMandatory(true);
-		title.setNotEmptyCheck("artefact.title.not.empty");
-		title.setNotLongerThanCheck(512, "artefact.title.too.long");
-		title.setVisible(!simpleMode);
-		descript = uifactory.addRichTextElementForStringDataMinimalistic("description", "artefact.description", artefact.getDescription(), 7,
-				-1, formLayout, getWindowControl());
-		descript.setMaxLength(4000);
-		descript.setNotLongerThanCheck(4000, "artefact.description.too.long");
-
-		String artSource = artefact.getSource();
-		if (StringHelper.containsNonWhitespace(artSource) && !simpleMode) {
-			uifactory.addStaticTextElement("artefact.source", artSource, formLayout);
-		}
-		Date artDate = artefact.getCreationDate();
-		if (artDate == null) artDate = new Date();
-		StaticTextElement date = uifactory.addStaticTextElement("artefact.date", Formatter.getInstance(getLocale()).formatDateAndTime(artDate), formLayout);
-		date.setVisible(!simpleMode);
-
-		String busPath = artefact.getBusinessPath();
-		if (StringHelper.containsNonWhitespace(busPath) && !simpleMode) {
-			BusinessControlFactory bCF = BusinessControlFactory.getInstance(); 
-			List<ContextEntry> ceList = bCF.createCEListFromString(busPath);
-			String busLink = bCF.getAsURIString(ceList, true); 
-			if (StringHelper.containsNonWhitespace(busLink)){
-				String finalPath = "<a href=\"" + busLink + "\">" + busLink + "</a>";
-				uifactory.addStaticTextElement("artefact.link", finalPath, formLayout);
-			}
-		}
-
-		if (!isUsedInStepWizzard()) {
-			// add form buttons
-			uifactory.addFormSubmitButton("stepform.submit", formLayout);
-		}
-	}
-
-	@Override
-	protected void doDispose() {
-		// nothing
-	}
-
-	@Override
-	protected void formOK(UserRequest ureq) {
-		artefact.setTitle(title.getValue());
-		artefact.setDescription(descript.getValue());
-
-		// either save values to runContext or do persist them
-		// directly, if form is used outside step-context
-		if (isUsedInStepWizzard()) {
-			addToRunContext("artefact", artefact);
-			if (artefact.getFileSourceContainer() != null){
-				addToRunContext("tempArtFolder", artefact.getFileSourceContainer());
-			}
-			
-			fireEvent(ureq, StepsEvent.ACTIVATE_NEXT);
-		} else {
-			fireEvent(ureq, Event.DONE_EVENT);
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStepForm01.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStepForm01.java
deleted file mode 100644
index dd915c9a3adfd51fbe42fd33a6fe2e016744f70a..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStepForm01.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItem;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.FormLink;
-import org.olat.core.gui.components.form.flexible.elements.TextBoxListElement;
-import org.olat.core.gui.components.form.flexible.impl.Form;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.components.form.flexible.impl.FormEvent;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.wizard.StepFormBasicController;
-import org.olat.core.gui.control.generic.wizard.StepsEvent;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.core.util.StringHelper;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * controller to provide tag-suggestion and let user select tags for this
- * artefact
- * 
- * <P>
- * Initial Date: 27.07.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPCollectStepForm01 extends StepFormBasicController {
-
-	private AbstractArtefact artefact;
-	private TextBoxListElement tagListElement;
-	@Autowired
-	private EPFrontendManager ePFMgr;
-
-	private static final String RUNCTX_TAGLIST_KEY = "artefactTagsList"; 
-	
-	public EPCollectStepForm01(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact) {
-		super(ureq, wControl, "step01tagging");
-		this.artefact = artefact;
-		initForm(ureq);
-	}
-	
-	public EPCollectStepForm01(UserRequest ureq, WindowControl wControl, Form rootForm, StepsRunContext runContext, AbstractArtefact artefact) {
-		super(ureq, wControl, rootForm, runContext, FormBasicController.LAYOUT_CUSTOM, "step01tagging");
-		this.artefact = artefact;
-		initForm(ureq);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-
-		tagListElement = uifactory.addTextBoxListElement("artefact.tags", null, "tag.input.hint", getTagMapToDisplay(), formLayout, getTranslator());
-		tagListElement.setElementCssClass("o_sel_ep_tagsinput");
-		Map<String, String> allUsersTags = ePFMgr.getUsersMostUsedTags(getIdentity(), 50);
-		tagListElement.setAutoCompleteContent(allUsersTags);
-		tagListElement.setAllowDuplicates(false);
-		
-		// show a list of the 50 most used tags
-		List<FormLink> userTagLinks = new ArrayList<>();
-		int i = 0;
-		for (Iterator<Entry<String, String>> iterator = allUsersTags.entrySet().iterator(); iterator.hasNext();) {
-			Entry<String, String> entry = iterator.next();
-			String tag = StringHelper.escapeHtml(entry.getKey());
-			FormLink tagLink = uifactory.addFormLink("tagU" + i, tag, null, formLayout, Link.NONTRANSLATED);
-			tagLink.setUserObject(entry.getValue());
-			userTagLinks.add(tagLink);
-			i++;
-		}
-		flc.contextPut("userTagLinks", userTagLinks);
-		
-		if (!isUsedInStepWizzard()) {
-			// add form buttons
-			uifactory.addFormSubmitButton("stepform.submit", formLayout);
-		}
-	}
-
-	/**
-	 * returns a Map holding the tags for the TextBoxListComponent<br />
-	 * The map will contain the tags that...
-	 * <ul>
-	 * <li>... are pre-set already through the wizard (user navigated back and
-	 * forth)</li>
-	 * <li>... are pre-set in the artefact (if artefact gets edited)</li>
-	 * </ul>
-	 * 
-	 * @return
-	 */
-	private Map<String, String> getTagMapToDisplay() {
-
-		Map<String, String> tagMap = new HashMap<>();
-		Collection<String> tagCollection = null;
-		Collection<String> preSetArtefactTags = ePFMgr.getArtefactTags(artefact);
-
-		@SuppressWarnings("unchecked")
-		Collection<String> runContextTags = isUsedInStepWizzard() ? (List<String>) getFromRunContext(RUNCTX_TAGLIST_KEY) : null;
-		if (runContextTags != null) {
-			// there are already tags in runContext, use those
-			tagCollection = runContextTags;
-		} else if (preSetArtefactTags != null) {
-			tagCollection = preSetArtefactTags;
-		}
-
-		// now, if there are tags, put them in a map
-		if (tagCollection != null) {
-			for (String tag : tagCollection) {
-				tagMap.put(tag, tag);
-			}
-		}
-
-		return tagMap;
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.form.flexible.FormItem,
-	 *      org.olat.core.gui.components.form.flexible.impl.FormEvent)
-	 */
-	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {	
-		if (source == tagListElement) {
-			// nothing to do here, update dataModel on FormOK
-		} else if (source instanceof FormLink) {
-			
-			// user clicked on a tag in the "50 most used tags"-list
-			FormLink link = (FormLink) source;
-			if (link.getName().startsWith("tag")) {
-				List<String> currentTagsInComponent = tagListElement.getValueList();
-				String newTagFromLink = (String) link.getUserObject();
-				newTagFromLink = StringHelper.escapeHtml(newTagFromLink);
-				newTagFromLink = StringHelper.escapeJavaScript(newTagFromLink);
-				currentTagsInComponent.add(newTagFromLink);
-				if(isUsedInStepWizzard()) {
-					addToRunContext(RUNCTX_TAGLIST_KEY, currentTagsInComponent);
-				}
-				// refresh gui
-				flc.setDirty(true);
-				initForm(ureq);
-			}
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void formOK(UserRequest ureq) {
-		if(isUsedInStepWizzard()) {
-			List<String> actualTagList = tagListElement.getValueList();
-			if (actualTagList.size() != 0) {
-				addToRunContext(RUNCTX_TAGLIST_KEY, actualTagList);
-			}	
-			// force repaint when navigating back and forth
-			flc.setDirty(true);
-			fireEvent(ureq, StepsEvent.ACTIVATE_NEXT);
-		} else {
-			List<String> tags = tagListElement.getValueList();
-			ePFMgr.setArtefactTags(ureq.getIdentity(), artefact, tags);
-			fireEvent(ureq, StepsEvent.DONE_EVENT);
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// nothing
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStepForm02.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStepForm02.java
deleted file mode 100644
index f09158b16b3037fddf9c69348b649f514b2cbb8a..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStepForm02.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItem;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
-import org.olat.core.gui.components.form.flexible.impl.Form;
-import org.olat.core.gui.components.form.flexible.impl.FormEvent;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.wizard.StepFormBasicController;
-import org.olat.core.gui.control.generic.wizard.StepsEvent;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * Description:<br>
- * controller to let the user ensure that he has the copyright on this artefact
- * 
- * <P>
- * Initial Date: 28.07.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPCollectStepForm02 extends StepFormBasicController {
-
-	private AbstractArtefact artefact;
-	private MultipleSelectionElement crCheck;
-
-	public EPCollectStepForm02(UserRequest ureq, WindowControl windowControl, Form form, StepsRunContext stepsRunContext, int layoutDefault,
-			String customLayoutPageName, AbstractArtefact artefact) {
-		super(ureq, windowControl, form, stepsRunContext, layoutDefault, customLayoutPageName);
-		this.artefact = artefact;
-		initForm(ureq);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		setFormDescription("copyright.intro.text");
-
-		String[] theKeys = new String[] { Boolean.TRUE.toString() };
-		String[] theValues = new String[] { translate("copyright.yes") };
-		crCheck = uifactory.addCheckboxesHorizontal("copyright.label", null, formLayout, theKeys, theValues);
-		if (getFromRunContext("copyright.accepted") != null && (Boolean) getFromRunContext("copyright.accepted")) {
-			crCheck.select(Boolean.TRUE.toString(), true);
-		}
-		//signature > 0 means, collection wizzard can be sure its from OLAT, < 0 means get an approval by user (the target value is the negative one)
-		if (artefact.getSignature() > 0 ){
-			crCheck.select(Boolean.TRUE.toString(), true);
-		}
-		crCheck.addActionListener(FormEvent.ONCHANGE);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.form.flexible.FormItem,
-	 *      org.olat.core.gui.components.form.flexible.impl.FormEvent)
-	 */
-	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
-		super.formInnerEvent(ureq, source, event);
-		if (source == crCheck) {
-			validateAndSetError();
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#validateFormLogic(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected boolean validateFormLogic(UserRequest ureq) {
-		return super.validateFormLogic(ureq) && validateAndSetError();
-	}
-
-	private boolean validateAndSetError() {
-		if (!crCheck.isSelected(0)	|| (getFromRunContext("copyright.accepted") != null && !(Boolean) getFromRunContext("copyright.accepted"))) {
-			crCheck.setErrorKey("copyright.error", null);
-			return false;
-		} else {
-			crCheck.showError(false);
-			return true;
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void formOK(UserRequest ureq) {
-		// its accepted, as form has been validated before
-		if (isUsedInStepWizzard()) {
-			addToRunContext("copyright.accepted", true);
-			fireEvent(ureq, StepsEvent.ACTIVATE_NEXT);
-		} else {
-			// if used outside steps wizzard, persist stuff here
-		}		
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// nothing
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStepForm03.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStepForm03.java
deleted file mode 100644
index e67b86ab8b0583e95b4096316600b660a7aa91c8..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStepForm03.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-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.impl.Form;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.wizard.StepFormBasicController;
-import org.olat.core.gui.control.generic.wizard.StepsEvent;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.Util;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.ui.artefacts.view.EPArtefactViewController;
-
-/**
- * Description:<br>
- * controller for entering a reflexion about the choosen artefact 
- * 
- * can be used inside the collect-wizzard or standalone (depending on used
- * constructor)
- * 
- * <P>
- * Initial Date: 28.07.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPCollectStepForm03 extends StepFormBasicController {
-
-
-	private static final Integer REFLEXION_MAX_SIZE = 16383;
-	private AbstractArtefact artefact;
-	private RichTextElement reflexionEl;
-	private RichTextElement reflexionOrigEl;
-	private String reflexion;
-	private String artefactReflexion = "";
-	private boolean showNoReflexionOnStructLinkYetWarning = false;
-
-	/**
-	 * preset controller with reflexion of the artefact. used by artefact-pool
-	 * @param ureq
-	 * @param wControl
-	 * @param artefact
-	 */
-	public EPCollectStepForm03(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact) {
-		super(ureq, wControl, FormBasicController.LAYOUT_VERTICAL);
-		// set fallback translator to re-use given strings
-		Translator pt = Util.createPackageTranslator(EPArtefactViewController.class, ureq.getLocale(), getTranslator());
-		this.flc.setTranslator(pt);
-		this.artefact = artefact;
-		this.artefactReflexion = artefact.getReflexion();
-		initForm(this.flc, this, ureq);
-	}
-	
-	/**
-	 * no reflexion on link yet, show warning and preset with artefacts-reflexion
-	 * @param ureq
-	 * @param wControl
-	 * @param artefact
-	 * @param showHint
-	 */
-	public EPCollectStepForm03(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, boolean showHint) {
-		super(ureq, wControl, FormBasicController.LAYOUT_VERTICAL);
-		// set fallback translator to re-use given strings
-		Translator pt = Util.createPackageTranslator(EPArtefactViewController.class, ureq.getLocale(), getTranslator());
-		this.flc.setTranslator(pt);
-		this.showNoReflexionOnStructLinkYetWarning = showHint;
-		this.artefact = artefact;
-		this.reflexion = artefact.getReflexion();
-		initForm(this.flc, this, ureq);
-	}
-
-	/**
-	 * edit an existing reflexion
-	 * @param ureq
-	 * @param wControl
-	 * @param artefact
-	 * @param reflexion
-	 */
-	public EPCollectStepForm03(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, String reflexion) {
-		super(ureq, wControl, FormBasicController.LAYOUT_VERTICAL);
-		// set fallback translator to re-use given strings
-		Translator pt = Util.createPackageTranslator(EPArtefactViewController.class, ureq.getLocale(), getTranslator());
-		this.flc.setTranslator(pt);
-		this.artefact = artefact;
-		this.reflexion = reflexion;
-		this.artefactReflexion = artefact.getReflexion();
-		
-		initForm(this.flc, this, ureq);		
-	}
-
-	// used while collecting an artefact
-	public EPCollectStepForm03(UserRequest ureq, WindowControl wControl, Form rootForm, StepsRunContext runContext, int layout,
-			String customLayoutPageName, AbstractArtefact artefact) {
-		super(ureq, wControl, rootForm, runContext, layout, customLayoutPageName);
-		// set fallback translator to re-use given strings
-		Translator pt = Util.createPackageTranslator(EPArtefactViewController.class, ureq.getLocale(), getTranslator());
-		this.flc.setTranslator(pt);
-		this.artefact = artefact;
-		this.artefactReflexion = artefact.getReflexion();
-		initForm(ureq);
-	}
-
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		setFormDescription("step3.short.descr");
-		setFormContextHelp("Personal Menu#_ep_reflection");
-
-		if (showNoReflexionOnStructLinkYetWarning) {
-			uifactory.addStaticTextElement("hint", "info.no.reflexion.yet", "", formLayout);
-		}
-		
-		String text = StringHelper.containsNonWhitespace(reflexion) ? reflexion : artefactReflexion;
-		reflexionEl = uifactory.addRichTextElementForStringDataMinimalistic("reflexion", "artefact.reflexion", text, 12, -1,
-				formLayout, getWindowControl());
-		reflexionEl.setNotLongerThanCheck(REFLEXION_MAX_SIZE, "reflexion.too.long");
-		reflexionEl.setMaxLength(REFLEXION_MAX_SIZE);
-
-		if (!isUsedInStepWizzard()) {
-			// add form buttons
-			uifactory.addFormSubmitButton("stepform.submit", formLayout);
-		}
-		
-		if(artefact != null && StringHelper.containsNonWhitespace(artefactReflexion)) {
-			uifactory.addSpacerElement("reflexion-in-space", formLayout, false);
-			reflexionOrigEl = uifactory.addRichTextElementForStringDataMinimalistic("reflexion_original", "artefact.reflexion.original", artefactReflexion, 12, -1,
-					formLayout, getWindowControl());
-			reflexionOrigEl.setEnabled(false);
-		}
-	}
-
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void formOK(UserRequest ureq) {
-		String reflexionVal = reflexionEl.getValue();
-		if (isUsedInStepWizzard()) {
-			artefact.setReflexion(reflexionVal);
-			fireEvent(ureq, StepsEvent.ACTIVATE_NEXT);
-		} else {
-			// form is used outside of wizzard: 
-			// - changing the reflexion of the link "structure <-> artefact", therefore 
-			//		the reflexion has not to be set on the artefact itself, but is transmitted with the event
-			// - changing the reflexion of the artefact itself
-			fireEvent(ureq, new EPReflexionChangeEvent(reflexionVal, artefact));
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// nothing
-	}
-
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStepForm04.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStepForm04.java
deleted file mode 100644
index fe212b317123a4193948dba81d5da63fcd97fbaf..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCollectStepForm04.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-import java.util.List;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.impl.Form;
-import org.olat.core.gui.components.tree.MenuTree;
-import org.olat.core.gui.components.tree.TreeModel;
-import org.olat.core.gui.components.tree.TreeNode;
-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.generic.wizard.StepFormBasicController;
-import org.olat.core.gui.control.generic.wizard.StepsEvent;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.core.util.tree.TreeHelper;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.EPAbstractMap;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.ui.structel.EPStructureChangeEvent;
-
-/**
- * Description:<br>
- * controller to select a map as target for an artefact
- * 
- * <P>
- * Initial Date: 28.07.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPCollectStepForm04 extends StepFormBasicController {
-
-	protected static final String NO_MAP_CHOOSEN = "noMapChoosen";
-	protected static final String ROOT_NODE_IDENTIFIER = "rootMaps";
-	private MenuTree mapsTreeController;
-	private final EPFrontendManager ePFMgr;
-
-	private AbstractArtefact artefact;
-	private PortfolioStructure oldStructure;
-	private PortfolioStructure preSelectedStructure;
-
-	public EPCollectStepForm04(UserRequest ureq, WindowControl wControl, Form rootForm, StepsRunContext runContext, int layout) {
-		super(ureq, wControl, rootForm, runContext, layout, "step04selectmap");
-		ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-		preSelectedStructure = (PortfolioStructure)runContext.get("preSelectedStructure");
-		if(preSelectedStructure == null) {
-			preSelectedStructure = ePFMgr.getUsersLastUsedPortfolioStructure(getIdentity());
-		}
-		initForm(flc, this, ureq);
-	}
-
-	public EPCollectStepForm04(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, PortfolioStructure oldStructure) {
-		super(ureq, wControl, "step04selectmap");
-		ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-		this.artefact = artefact;
-		this.oldStructure = oldStructure;
-		initForm(this.flc, this, ureq);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		List<PortfolioStructure> structs = ePFMgr.getStructureElementsForUser(getIdentity());
-		if (structs != null && structs.size() != 0) {
-			TreeModel treeModel = new MapsTreeModel(getIdentity(), getTranslator());
-			mapsTreeController = new MenuTree("my.maps");
-			mapsTreeController.setTreeModel(treeModel);
-			mapsTreeController.setSelectedNode(treeModel.getRootNode());
-			mapsTreeController.setDragEnabled(false);
-			mapsTreeController.setDropEnabled(false);
-			mapsTreeController.setDropSiblingEnabled(false);
-			mapsTreeController.addListener(this);
-			mapsTreeController.setRootVisible(true);
-			
-			if(preSelectedStructure != null) {
-				TreeNode node = TreeHelper.findNodeByUserObject(preSelectedStructure, treeModel.getRootNode());
-				if(node != null) {
-					mapsTreeController.setSelectedNode(node);
-				}
-			}
-			flc.put("treeCtr", mapsTreeController);
-		}
-		
-		if (!isUsedInStepWizzard()) {
-			// add form buttons
-			uifactory.addFormSubmitButton("stepform.submit", formLayout);
-		}
-	}
-
-	@Override
-	public void event(UserRequest ureq, Component source, Event event) {
-		super.event(ureq, source, event);
-	}
-
-	@Override
-	protected void formOK(UserRequest ureq) {
-		PortfolioStructure selectedPortfolioStructure = preSelectedStructure;
-
-		TreeNode node = mapsTreeController == null ? null : mapsTreeController.getSelectedNode();
-		if(node != null) {
-			Object obj = node.getUserObject();
-			if(obj == null) {
-				selectedPortfolioStructure = null;
-			} else if (obj instanceof PortfolioStructure && !(obj instanceof EPAbstractMap)) {
-				selectedPortfolioStructure = (PortfolioStructure)obj;
-			}
-		}
-
-		if (selectedPortfolioStructure != null) {
-			ePFMgr.setUsersLastUsedPortfolioStructure(getIdentity(), selectedPortfolioStructure);
-		}
-		if (isUsedInStepWizzard()) {
-			addToRunContext("selectedStructure", selectedPortfolioStructure);
-			fireEvent(ureq, StepsEvent.ACTIVATE_NEXT);
-		} else {
-			if (selectedPortfolioStructure != null && !selectedPortfolioStructure.getKey().equals(oldStructure.getKey())) {
-				ePFMgr.moveArtefactFromStructToStruct(artefact, oldStructure, selectedPortfolioStructure);
-				// refresh ui
-				fireEvent(ureq, new EPStructureChangeEvent(EPStructureChangeEvent.CHANGED, selectedPortfolioStructure));
-			}
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// nothing
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCreateFileArtefactStep00.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCreateFileArtefactStep00.java
deleted file mode 100644
index 5b63e48235b874c6ba8d0550660cab7c91585bdd..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCreateFileArtefactStep00.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.impl.Form;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.wizard.BasicStep;
-import org.olat.core.gui.control.generic.wizard.PrevNextFinishConfig;
-import org.olat.core.gui.control.generic.wizard.StepFormController;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-
-/**
- * Initial Date:  02.09.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPCreateFileArtefactStep00 extends BasicStep {
-
-	private VFSContainer vfsTemp;
-	private AbstractArtefact artefact;
-	private final PortfolioStructure preSelectedStruct;
-
-	public EPCreateFileArtefactStep00(UserRequest ureq, AbstractArtefact artefact, PortfolioStructure preSelectedStruct, 
-			VFSContainer vfsTemp) {
-		super(ureq);
-		this.vfsTemp = vfsTemp;
-		this.artefact = artefact;
-		this.preSelectedStruct = preSelectedStruct;
-		setI18nTitleAndDescr("step0.file.description", "step0.file.short.descr");
-		setNextStep(new EPCollectStep00(ureq, artefact));
-	}
-
-	@Override
-	public PrevNextFinishConfig getInitialPrevNextFinishConfig() {
-		return new PrevNextFinishConfig(false, true, false);
-	}
-
-	@Override
-	public StepFormController getStepController(UserRequest ureq, WindowControl windowControl, StepsRunContext stepsRunContext, Form form) {
-		if(preSelectedStruct != null) {
-			stepsRunContext.put("preSelectedStructure", preSelectedStruct);
-		}
-		
-		return new EPCreateFileArtefactStepForm00(ureq, windowControl, form, stepsRunContext,
-				FormBasicController.LAYOUT_DEFAULT, null, artefact, vfsTemp);
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCreateFileArtefactStepForm00.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCreateFileArtefactStepForm00.java
deleted file mode 100644
index 425247f485b8d837c79314cef319361e5acd6009..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCreateFileArtefactStepForm00.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.FileElement;
-import org.olat.core.gui.components.form.flexible.impl.Form;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-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.generic.wizard.StepFormBasicController;
-import org.olat.core.gui.control.generic.wizard.StepsEvent;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * Description:<br>
- * Upload an artefact-attachment/file to a temp-folder
- * 
- * <P>
- * Initial Date: 02.09.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPCreateFileArtefactStepForm00 extends StepFormBasicController {
-
-	private static final int MAX_UPLOADSIZE_KB = 10485;
-	private FileElement fileupload;
-	private VFSContainer vfsTemp;
-	private AbstractArtefact artefact;
-	private EPFrontendManager ePFMgr;
-	
-	public EPCreateFileArtefactStepForm00(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact) {
-		super(ureq, wControl, FormBasicController.LAYOUT_VERTICAL);
-		this.artefact = artefact;		
-		ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-		this.vfsTemp = ePFMgr.getArtefactContainer(artefact);
-		initForm(ureq);
-	}
-
-	public EPCreateFileArtefactStepForm00(UserRequest ureq, WindowControl wControl, Form rootForm, StepsRunContext runContext, int layout,
-			String customLayoutPageName, AbstractArtefact artefact, VFSContainer vfsTemp) {
-		super(ureq, wControl, rootForm, runContext, layout, customLayoutPageName);
-		this.vfsTemp = vfsTemp;
-		this.artefact = artefact;
-		initForm(ureq);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		setFormDescription("step0.file.short.descr");
-
-		fileupload = uifactory.addFileElement(getWindowControl(), "file.upload", formLayout);
-		fileupload.setMandatory(true, "file.upload.no.file");
-		fileupload.setMaxUploadSizeKB(MAX_UPLOADSIZE_KB, "file.upload.too.big", new String[] { String.valueOf(MAX_UPLOADSIZE_KB) });
-
-		if (!isUsedInStepWizzard()) {
-			// add form buttons
-			uifactory.addFormSubmitButton("stepform.submit", formLayout);
-		}
-		
-	}
-	
-	@Override
-	protected boolean validateFormLogic(UserRequest ureq) {
-		if (fileupload.isUploadSuccess()){
-			String type = fileupload.getUploadMimeType();
-			String fileName = fileupload.getUploadFileName(); 
-			if (StringHelper.containsNonWhitespace(type) && StringHelper.containsNonWhitespace(fileName) && fileName.contains(".")) {
-				return true;
-			}
-			fileupload.setErrorKey("unsupported.filetype", null);
-		}
-		return false;
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void formOK(UserRequest ureq) {
-
-		// either save values to runContext or do persist them
-		// directly, if form is used outside step-context
-		if (isUsedInStepWizzard()) {
-			// as with each further step form is validated again, do this only once!
-			if (fileupload.isUploadSuccess() && getFromRunContext("tempArtFolder") == null) {
-				saveUpload();
-			}
-			addToRunContext("artefact", artefact);
-			addToRunContext("tempArtFolder", vfsTemp);
-			fireEvent(ureq, StepsEvent.ACTIVATE_NEXT);
-		} else if (fileupload.isUploadSuccess()){
-			saveUpload();
-			fireEvent(ureq, Event.DONE_EVENT);
-		}
-	}
-	
-	private void saveUpload(){
-		//VFSLeaf contFile = vfsTemp.createChildLeaf(fileupload.getUploadFileName());
-		//VFSManager.copyContent(fileupload.getUploadInputStream(), contFile);
-		fileupload.moveUploadFileTo(vfsTemp);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// nothing, temp-file is cleaned within calling controller!
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCreateTextArtefactStep00.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCreateTextArtefactStep00.java
deleted file mode 100644
index 834bbe02c83535580d3975beacd9c9b0906cbf21..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCreateTextArtefactStep00.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.impl.Form;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.wizard.BasicStep;
-import org.olat.core.gui.control.generic.wizard.PrevNextFinishConfig;
-import org.olat.core.gui.control.generic.wizard.StepFormController;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-
-/**
- * Initial Date: 01.09.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPCreateTextArtefactStep00 extends BasicStep {
-
-	private final AbstractArtefact artefact;
-	private final VFSContainer vfsTemp;
-	private final PortfolioStructure preSelectedStruct;
-
-	public EPCreateTextArtefactStep00(UserRequest ureq, AbstractArtefact artefact, PortfolioStructure preSelectedStruct,
-			VFSContainer vfsTemp) {
-		super(ureq);
-		this.vfsTemp = vfsTemp;
-		this.artefact = artefact;
-		this.preSelectedStruct = preSelectedStruct;
-		setI18nTitleAndDescr("step0.text.description", "step0.text.short.descr");
-		setNextStep(new EPCollectStep00(ureq, artefact));
-	}
-
-	@Override
-	public PrevNextFinishConfig getInitialPrevNextFinishConfig() {
-		return new PrevNextFinishConfig(false, true, false);
-	}
-
-	@Override
-	public StepFormController getStepController(UserRequest ureq, WindowControl windowControl, StepsRunContext stepsRunContext, Form form) {
-		if(preSelectedStruct != null) {
-			stepsRunContext.put("preSelectedStructure", preSelectedStruct);
-		}
-		
-		return new EPCreateTextArtefactStepForm00(ureq, windowControl, form, stepsRunContext,
-				FormBasicController.LAYOUT_DEFAULT, null, artefact, vfsTemp);
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCreateTextArtefactStepForm00.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCreateTextArtefactStepForm00.java
deleted file mode 100644
index ff8988212baf39117f451867935d2b80e12d8b92..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPCreateTextArtefactStepForm00.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-import java.io.ByteArrayInputStream;
-
-import org.olat.core.CoreSpringFactory;
-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.impl.Form;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-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.generic.wizard.StepFormBasicController;
-import org.olat.core.gui.control.generic.wizard.StepsEvent;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.util.Util;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.core.util.vfs.VFSItem;
-import org.olat.core.util.vfs.VFSLeaf;
-import org.olat.core.util.vfs.VFSManager;
-import org.olat.portfolio.manager.EPArtefactManager;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.ui.artefacts.view.EPArtefactViewController;
-
-/**
- * Description:<br>
- * first step for wizzard, when creating a text-artefact
- * can also be used as a separate form to edit an artefact 
- * 
- * <P>
- * Initial Date: 01.09.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPCreateTextArtefactStepForm00 extends StepFormBasicController {
-
-	private AbstractArtefact artefact;
-	private RichTextElement content;
-	private VFSContainer vfsTemp;
-	private EPFrontendManager ePFMgr;
-	private String artFulltextContent;
-
-	// use this constructor to edit an already existing artefact
-	public EPCreateTextArtefactStepForm00(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact){
-		super(ureq, wControl, FormBasicController.LAYOUT_VERTICAL);
-		Translator pt = Util.createPackageTranslator(EPArtefactViewController.class, ureq.getLocale(), getTranslator());
-		flc.setTranslator(pt);
-		this.artefact = artefact;
-		ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-		this.artFulltextContent = ePFMgr.getArtefactFullTextContent(artefact);
-		this.vfsTemp = ePFMgr.getArtefactContainer(artefact);
-		initForm(flc, this, ureq);		
-	}
-	
-	public EPCreateTextArtefactStepForm00(UserRequest ureq, WindowControl wControl, Form rootForm, StepsRunContext runContext, int layout,
-			String customLayoutPageName, AbstractArtefact artefact, VFSContainer vfsTemp) {
-		super(ureq, wControl, rootForm, runContext, layout, customLayoutPageName);
-		// set fallback translator to re-use given strings
-		Translator pt = Util.createPackageTranslator(EPArtefactViewController.class, ureq.getLocale(), getTranslator());
-		flc.setTranslator(pt);
-		this.artefact = artefact;
-		this.artFulltextContent = artefact.getFulltextContent(); // during collection the fulltextcontent is not persisted and therefore might be longer than db-length restriction
-		this.vfsTemp = vfsTemp;
-		initForm(flc, this, ureq);
-	}
-
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-
-		VFSItem contFile = vfsTemp.resolve(EPArtefactManager.ARTEFACT_CONTENT_FILENAME);
-		if (contFile == null) {
-			vfsTemp.createChildLeaf(EPArtefactManager.ARTEFACT_CONTENT_FILENAME);
-		}
-		content = uifactory.addRichTextElementForFileData("content", "artefact.content", artFulltextContent, 15, -1, vfsTemp,
-				EPArtefactManager.ARTEFACT_CONTENT_FILENAME, null, formLayout, ureq.getUserSession(), getWindowControl());
-		content.getEditorConfiguration().setFileBrowserUploadRelPath("media");
-		content.setMandatory(true);
-		content.setNotEmptyCheck("artefact.content.not.empty");
-
-		if (!isUsedInStepWizzard()) {
-			// add form buttons
-			uifactory.addFormSubmitButton("stepform.submit", formLayout);
-		}
-
-	}
-
-	@Override
-	protected void formOK(UserRequest ureq) {
-
-		// either save values to runContext or do persist them
-		// directly, if form is used outside step-context
-		if (isUsedInStepWizzard()) {
-			// save fulltext to temp-file
-			String fulltext = content.getValue();
-			VFSLeaf contFile = (VFSLeaf) vfsTemp.resolve(EPArtefactManager.ARTEFACT_CONTENT_FILENAME);
-			VFSManager.copyContent(new ByteArrayInputStream(fulltext.getBytes()), contFile);
-
-			addToRunContext("artefact", artefact);
-			addToRunContext("tempArtFolder", vfsTemp);
-			fireEvent(ureq, StepsEvent.ACTIVATE_NEXT);
-		} else {
-			String fulltext = content.getValue();
-			artefact.setFulltextContent(fulltext);
-			ePFMgr.updateArtefact(artefact);
-			
-			// the content-file is not needed in this case!! remove it.
-			VFSLeaf contFile = (VFSLeaf) vfsTemp.resolve(EPArtefactManager.ARTEFACT_CONTENT_FILENAME);
-			if (contFile != null) contFile.delete();
-			fireEvent(ureq, Event.DONE_EVENT);
-		}
-	}
-
-	@Override
-	protected void doDispose() {
-		// nothing, temp-file is cleaned within calling controller!
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPReflexionChangeEvent.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPReflexionChangeEvent.java
deleted file mode 100644
index e2b00c7b135dc8d91cba85c964f56bf455040d55..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/EPReflexionChangeEvent.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-import org.olat.core.gui.control.Event;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * Description:<br>
- * event sent on changed reflexion delivering reflexion itself
- * 
- * <P>
- * Initial Date:  19.11.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPReflexionChangeEvent extends Event {
-
-	private static final long serialVersionUID = -2751202942774501947L;
-	private String refContent;
-	private AbstractArtefact refArtefact;
-	
-	public EPReflexionChangeEvent(String reflexion, AbstractArtefact artefact) {
-		super("reflexionchanged");
-		setReflexion(reflexion);
-		setRefArtefact(artefact);
-	}
-
-	public String getReflexion() {
-		return refContent;
-	}
-
-	public void setReflexion(String reflexion) {
-		this.refContent = reflexion;
-	}
-
-	public AbstractArtefact getRefArtefact() {
-		return refArtefact;
-	}
-
-	public void setRefArtefact(AbstractArtefact refArtefact) {
-		this.refArtefact = refArtefact;
-	}
-	
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/MapsTreeModel.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/MapsTreeModel.java
deleted file mode 100644
index 2cf1b3236216394ac1f8282340f82c869449492d..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/MapsTreeModel.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.collect;
-
-import java.util.List;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.components.tree.GenericTreeModel;
-import org.olat.core.gui.components.tree.GenericTreeNode;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.id.Identity;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.olat.portfolio.model.structel.ElementType;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.StructureStatusEnum;
-
-/**
- * 
- * Initial date: 27.03.2013<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public class MapsTreeModel extends GenericTreeModel {
-
-	private static final long serialVersionUID = 6367006359564581412L;
-	private final EPFrontendManager ePFMgr;
-	
-	public MapsTreeModel(Identity identity, Translator translator) {
-		ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-		GenericTreeNode rootNode = new GenericTreeNode(EPCollectStepForm04.ROOT_NODE_IDENTIFIER, translator.translate("step4.my.maps"), null);
-		rootNode.setIconCssClass("o_st_icon");
-		
-		GenericTreeNode noMapNode = new GenericTreeNode(EPCollectStepForm04.NO_MAP_CHOOSEN, translator.translate("no.map.as.target"), null);
-		noMapNode.setIconCssClass("o_ep_icon_collection");
-		rootNode.addChild(noMapNode);
-
-		loadMaps(identity, rootNode);
-		setRootNode(rootNode);
-	}
-	
-	private void loadMaps(Identity identity, GenericTreeNode parentNode) {
-		List<PortfolioStructure> structs = ePFMgr.getStructureElementsForUser(identity, ElementType.STRUCTURED_MAP, ElementType.DEFAULT_MAP);
-		for(PortfolioStructure struct:structs) {
-			// FXOLAT-436 : skip templateMaps that are closed
-			if (struct instanceof EPStructuredMap) {
-				EPStructuredMap map = (EPStructuredMap)struct;
-				if(map.getStatus() != null && map.getStatus().equals(StructureStatusEnum.CLOSED)){
-					continue;
-				}
-			}
-
-			loadStructure(struct, parentNode);
-		}
-	}
-	
-	private void loadStructure(PortfolioStructure struct, GenericTreeNode parentNode) {
-		String ident = struct.getKey().toString();
-		GenericTreeNode structureNode = new GenericTreeNode(ident, struct.getTitle(), struct);
-		structureNode.setIconCssClass(struct.getIcon());
-		parentNode.addChild(structureNode);
-
-		List<PortfolioStructure> structs  = ePFMgr.loadStructureChildren(struct);
-		for(PortfolioStructure childStruct:structs) {
-			loadStructure(childStruct, structureNode);
-		}
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_content/addLink.html b/src/main/java/org/olat/portfolio/ui/artefacts/collect/_content/addLink.html
deleted file mode 100644
index cb8932ed1a1fb6dfd27fe7a81f2b2f070548a13d..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_content/addLink.html
+++ /dev/null
@@ -1 +0,0 @@
-$r.render("add.artefact")
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_content/addpanel.html b/src/main/java/org/olat/portfolio/ui/artefacts/collect/_content/addpanel.html
deleted file mode 100644
index 548b160301edcee800174fc7385240eec17254fe..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_content/addpanel.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<p>$r.translate("add.intro")</p>
-<ul>
-	#if ($r.available("add.text.artefact"))<li>$r.render("add.text.artefact")</li> #end
-	#if ($r.available("add.artefact.upload"))<li>$r.render("add.artefact.upload")</li> #end
-	#if ($r.available("add.artefact.liveblog"))<li>$r.render("add.artefact.liveblog")</li> #end
-	##<li>$r.render("add.artefact.import")</li>
-</ul>
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_content/step01tagging.html b/src/main/java/org/olat/portfolio/ui/artefacts/collect/_content/step01tagging.html
deleted file mode 100644
index 3c60f773bccf5e752df23c8dd82a63917376dec4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_content/step01tagging.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<p><i>$r.translate("tagging.intro")</i></p>
-$r.render("artefact.tags")
-
-#if ($userTagLinks.size()!=0) 
-	<div>
-		<p><i>$r.translate("tagging.intro.existing")</i></p>
-		<p>$r.translate("users.tags")<p> 
-		<div><i class="o_icon o_icon_tag"> </i>
-		#foreach($tagLink in $userTagLinks)
-			<span>$r.render($tagLink.getName())</span>
-		#end
-		</div>
-	</div>
-#end
-<br/><br/>
-#if ($r.available("propose.tags.link")) $r.render("propose.tags.link") #end
-<br/>
-#if ($propTagLinks && $propTagLinks.size()!=0) 
-	$r.translate("proposed.tags") 
-	#foreach($tagLink in $propTagLinks)
-		$r.render($tagLink.getName())
-	#end
-#end
-
-#if($r.available("stepform.submit"))
-<div class="o_button_group">
-	$r.render("stepform.submit")
-</div>
-#end
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_content/step04selectmap.html b/src/main/java/org/olat/portfolio/ui/artefacts/collect/_content/step04selectmap.html
deleted file mode 100644
index a5d4049ccd380a2f53159bc282ee2bf5dde489e6..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_content/step04selectmap.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<div>
-	<i>#if ($r.available("stepform.submit"))
-		$r.translate("move.artefact.descr") 
-	#else
-		$r.translate("step4.short.descr")
-	#end</i><br/><br/>
-	#if ($r.available("treeCtr"))
-		$r.render("treeCtr")
-	#else
-		$r.translate("no.structs.available")
-	#end
-	
-	#if ($r.available("stepform.submit"))
-		<br/><br/> 
-		$r.render("stepform.submit") 
-	#end
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_ar.properties
deleted file mode 100644
index d237c8351efbbef3edbe5c9b5bafbd578636ace6..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_ar.properties
+++ /dev/null
@@ -1,40 +0,0 @@
-#Thu Sep 08 16:42:40 CEST 2011
-add.artefact=\u0625\u0636\u0627\u0641\u0629 \u0623\u062F\u0627\u0629
-add.artefact.blog=\u0625\u0646\u0634\u0627\u0621 \u064A\u0648\u0645\u064A\u0627\u062A/\u0645\u062F\u0648\u0646\u0629 \u0627\u0644\u062A\u0639\u0644\u064A\u0645
-add.artefact.import=\u0627\u0633\u062A\u064A\u0631\u0627\u062F \u0623\u062F\u0627\u0629/\u0645\u062C\u0644\u062F
-add.artefact.upload=\u062A\u062D\u0645\u064A\u0644 \u0645\u0644\u0641 \u0623\u062F\u0627\u0629
-add.intro=\u0645\u0646 \u0641\u0636\u0644\u0643 \u0627\u062E\u062A\u0627\u0631 \u0646\u0648\u0639 \u0627\u0644\u0627\u062F\u0627\u0629 \u0644\u0643\u0649 \u064A\u062A\u0645 \u0625\u0636\u0627\u0641\u0629 \u0648\u0627\u062D\u062F\u0629 \u062C\u062F\u064A\u062F\u0629
-add.text.artefact=\u0625\u0636\u0627\u0641\u0629 \u0623\u062F\u0627\u0629 \u0646\u0635
-add.to.eportfolio=\u0625\u0636\u0627\u0641\u0629 \u0644\u0644\u0628\u0648\u0631\u062A\u0641\u0648\u0644\u064A\u0648
-add.to.eportfolio.again=\u0644\u0642\u062F \u0642\u0645\u062A \u0628\u062D\u0641\u0638 \u0647\u0630\u0627 \u0627\u0644\u0639\u0646\u0635\u0631 \u0643\u0623\u062F\u0627\u0629 \u0639\u062F\u062F {0} \u0645\u0631\u0629\u060C \u0648\u064A\u0645\u0643\u0646\u0643 \u0625\u0636\u0627\u0641\u062A\u0647 \u0643\u0623\u062F\u0627\u0629 \u062C\u062F\u064A\u062F\u0629 \u0641\u0649 \u0627\u0644\u0628\u0648\u0631\u062A\u0641\u0648\u0644\u064A\u0648 \u0627\u0644\u062E\u0627\u0635 \u0628\u0643
-artefact.content=\u0645\u062D\u062A\u0648\u0649 \u0623\u062F\u0627\u0629 \u0627\u0644\u0646\u0635
-artefact.content.not.empty=\u0644\u0627 \u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0623\u062F\u0627\u0629 \u0627\u0644\u0646\u0635 \u0641\u0627\u0631\u063A\u0629
-artefact.link=\u0631\u0627\u0628\u0637
-collect.success=\u0627\u0644\u0623\u062F\u0627\u0629 "{0}" \u062A\u0645 \u0625\u0636\u0627\u0641\u062A\u0647\u0627
-collect.success.text.artefact=\u0647\u0630\u0647 \u0627\u0644\u0623\u062F\u0627\u0629 \u062A\u0645 \u062D\u0641\u0638\u0647\u0627
-copyright.error=\u0625\u0630\u0627 \u0644\u0645 \u062A\u0643\u0646 \u0627\u0644\u0645\u0624\u0644\u0641 \u0641\u0625\u0646\u0643 \u0644\u0646 \u062A\u0643\u0648\u0646 \u0642\u0627\u062F\u0631\u0627\u064B \u0639\u0644\u0649 \u0627\u0644\u0627\u0633\u062A\u0645\u0631\u0627\u0631
-copyright.intro.text=\u0645\u0646 \u0641\u0636\u0644\u0643 \u0642\u0645 \u0628\u0627\u0644\u062A\u0623\u0643\u064A\u062F \u0639\u0644\u0649 \u0623\u0646\u0643 \u0645\u0624\u0644\u0641 \u0647\u0630\u0647 \u0627\u0644\u0623\u062F\u0627\u0629
-copyright.yes=\u0623\u0646\u0627 \u0623\u0624\u0643\u062F \u0623\u0646\u0646\u0649 \u0627\u0644\u0645\u0648\u0644\u0641 \u0644\u0645\u062D\u062A\u0648\u0649 \u0647\u0630\u0647 \u0627\u0644\u0623\u062F\u0627\u0629 \u0623\u0648 \u0644\u062F\u0649 \u062A\u0631\u062E\u064A\u0635 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647\u0627
-create.blog.artefact.wizzard.title=\u0646\u0648\u0639 \u0627\u0644\u0623\u062F\u0627\u0629\: \u0625\u0646\u0634\u0627\u0621 \u064A\u0648\u0645\u064A\u0627\u062A \u0627\u0644\u062A\u0639\u0644\u064A\u0645
-create.file.artefact.wizzard.title=\u062A\u062D\u0645\u064A\u0644 \u0645\u0644\u0641 \u0623\u062F\u0627\u0629
-create.text.artefact.wizzard.title=\u0625\u0646\u0634\u0627\u0621 \u0623\u062F\u0627\u0629 \u0646\u0635
-file.artefact.source.info=\u062A\u062D\u0645\u064A\u0644 \u0645\u0644\u0641
-file.upload=\u0627\u062E\u062A\u064A\u0627\u0631 \u0645\u0644\u0641
-file.upload.no.file=\u0645\u0644\u0641 \u0648\u0627\u062D\u062F \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u062A\u0645 \u062A\u062D\u0645\u064A\u0644\u0647
-file.upload.too.big=\u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0630\u0649 \u062A\u0645 \u062A\u062D\u0645\u064A\u0644\u0647 \u0643\u0628\u064A\u0631 \u062C\u062F\u0627\u064B\u060C \u062D\u064A\u062B \u0623\u0646 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0627\u0644\u0645\u0633\u0645\u0648\u062D \u0628\u0647 {0} \u0643\u064A\u0644\u0648\u0628\u0627\u064A\u062A
-propose.tags.link=\u0627\u0642\u062A\u0631\u062D \u0625\u0634\u0627\u0631\u0627\u062A \u0645\u0646\u0627\u0633\u0628\u0629 \u0644\u0647\u0630\u0627 \u0627\u0644\u0645\u062D\u062A\u0648\u0649
-proposed.tags=\u0627\u0644\u0625\u0634\u0627\u0631\u0627\u062A \u0627\u0644\u062A\u0627\u0644\u064A\u0629 \u062A\u0645 \u0627\u0642\u062A\u0631\u0627\u062D\u0647\u0627 \u0644\u0644\u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u062E\u0627\u0635 \u0628\u0643
-step0.file.description=\u062A\u062D\u0645\u064A\u0644 \u0645\u0644\u0641
-step0.file.short.descr=\u062A\u062D\u0645\u064A\u0644 \u0645\u0644\u0641 \u0623\u062F\u0627\u0629
-step0.text.description=\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u0645\u062D\u062A\u0648\u0649
-step1.description=\u0627\u0644\u0625\u0634\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u062D\u062F\u062F\u0629
-step1.short.descr=\u0625\u0634\u0627\u0631\u0629\u0623\u0648 \u0643\u0644\u0645\u0629 \u0645\u0641\u062A\u0627\u062D\u064A\u0629 \u0644\u0647\u0630\u0647 \u0627\u0644\u0623\u062F\u0627\u0629
-step2.description=\u062A\u0623\u0643\u064A\u062F \u0627\u0644\u062A\u0623\u0644\u064A\u0641
-step2.short.descr=\u0645\u0646 \u0641\u0636\u0644\u0643 \u0623\u0643\u062F \u0639\u0644\u0649 \u0623\u0646\u0643 \u0627\u0644\u0645\u0624\u0644\u0641 \u0644\u0647\u0630\u0647 \u0627\u0644\u0623\u062F\u0627\u0629 \u0648\u0644\u062F\u064A\u0643 \u0627\u0644\u062D\u0642\u0648\u0642 \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0647\u0627
-step3.short.descr=\u0645\u0646 \u0641\u0636\u0644\u0643 \u0627\u0643\u062A\u0628 \u0645\u0644\u0627\u062D\u0638\u0629 \u0628\u0627\u0644\u0623\u0633\u0641\u0644 \u0639\u0646 \u0644\u0645\u0627\u0630\u0627 \u0627\u062E\u062A\u0631\u062A \u0647\u0630\u0647 \u0627\u0644\u0623\u062F\u0627\u0629
-step4.description=\u0627\u062E\u062A\u064A\u0627\u0631 \u0645\u062C\u0644\u062F
-stepform.cancel=\u0625\u0644\u063A\u0627\u0621
-stepform.submit=\u062D\u0641\u0638
-tag.input.hint=\u0627\u0646\u0642\u0631 \u0647\u0646\u0627 \u0644\u0643\u0649 \u062A\u0636\u064A\u0641 \u0639\u0644\u0627\u0645\u0629
-text.artefact.source.info=\u062A\u062D\u0645\u064A\u0644 \u0646\u0635
-users.tags=\u0627\u0644\u0639\u0644\u0627\u0645\u0627\u062A \u0627\u0644 50 \u0627\u0644\u062A\u0649 \u062A\u0633\u062A\u062E\u062F\u0645\u0647\u0627
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_de.properties
deleted file mode 100644
index 5083fd6a1d259fb6771e9005ad24c4d5b0797c67..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1,71 +0,0 @@
-add.artefact.upload=Datei-Artefakt hochladen
-add.reflexion.create=Reflexion erstellen
-add.artefact.import=Artefakte/Ordner importieren
-add.artefact.blog=Lerntagebuch/Blog erstellen
-add.artefact.test=[DEV] Ein dummy-Artefakt hinzuf\u00fcgen
-add.text.artefact=Text-Artefakt hinzuf\u00fcgen
-add.intro=W\u00e4hlen Sie den Typ eines Artefakts, um ein neues hinzuzuf\u00fcgen.
-
-
-artefact.link=Link
-
-step0.description=Metadaten erfassen
-step0.short.descr=Verschiedene Metadaten zu einem Artefakt erfassen
-step0.text.description=Inhalt erfassen
-step0.text.short.descr=Inhalt und Metadaten zum Artefakt erfassen
-step0.file.description=Datei hochladen
-step0.file.short.descr=Datei zum Artefakt hochladen
-step1.description=Tags angeben
-step1.short.descr=Dieses Artefakt mit Tags / Schlagworten versehen
-step2.description=Urheberschaft best\u00e4tigen
-step2.short.descr=Best\u00e4tigen Sie, dass Sie Urheber des Artefakts sind und die entsprechenden Rechte besitzen.
-step3.description=Reflexion erfassen
-step3.short.descr=Notieren Sie, was zur Wahl dieses Artefakts gef\u00fchrt hat.
-
-
-
-
-
-step4.description=Mappe ausw\u00e4hlen
-step4.short.descr=W\u00e4hlen Sie den Zielort (Seite oder Strukturelement), an den dieses Artefakt abgelegt werden soll. Sie k\u00f6nnen das Artefakt auch sp\u00e4ter einer Sammelmappe zuweisen und diesen Schritt auslassen. Klicken Sie direkt auf "Fertigstellen".
-step4.my.maps=Meine Sammelmappen
-step4.nomapselected=Bitte w\u00e4hlen Sie einen Zielort aus
-
-no.structs.available=Sie haben noch keine Sammelmappen, welchen Sie dieses Artefakt hinzuf\u00fcgen k\u00f6nnen.
-no.map.as.target=Keine Sammelmappe w\u00e4hlen
-no.map.as.target.desc=W\u00e4hlen Sie dieses Element, um Ihr Artefakt jetzt keiner Sammelmappe hinzuzuf\u00fcgen. Sie k\u00f6nnen ein Artefakt jederzeit nachtr\u00e4glich in eine Mappe einf\u00fcgen.
-
-tag.input.hint=Hier klicken, um neue Tags einzuf\u00fcgen.
-stepform.submit=Speichern
-stepform.cancel=Abbrechen
-collect.wizzard.title=Artefakt-Sammelwerkzeug
-collect.success=Das Artefakt "{0}" wurde hinzugef\u00fcgt.
-collect.success.text.artefact=Das Artefakt wurde gespeichert.
-add.to.eportfolio=Zum ePortfolio hinzuf\u00fcgen
-add.to.eportfolio.again=Sie haben dieses Objekt bereits {0} mal als Artefakt gespeichert. Sie k\u00f6nnen es als neues Artefakt zum ePortfolio hinzuf\u00fcgen.
-proposed.tags=Folgende Tags werden aufgrund des Inhaltes vorgeschlagen:
-users.tags=Ihre 50 meistgenutzten Tags:
-propose.tags.link=Zum Inhalt passende Tags vorschlagen
-
-copyright.intro.text=Bitte best\u00e4tigen Sie, dass Sie Urheber dieses Artefakts sind.
-copyright.yes=Ich best\u00e4tige, Urheber des Artefakt-Inhaltes zu sein oder die Berechtigung zur Verwendung zu besitzen.
-copyright.error=Sie k\u00f6nnen nicht fortfahren, wenn Sie nicht Urheber sind.
-
-reflexion.too.long=Die eingegeben Reflexion \u00fcberschreitet die maximale L\u00e4nge ({0} Zeichen).
-add.artefact=Artefakt hinzuf\u00fcgen
-create.text.artefact.wizzard.title=Text-Artefakt erstellen
-text.artefact.source.info=Text-Upload
-file.artefact.source.info=Datei-Upload
-artefact.content=Inhalt des Text-Artefakts
-artefact.content.not.empty=Ein Text-Artefakt darf nicht leer sein.
-tagging.intro=Verleihen Sie dem Artefakt Tags (Schlagworte), um es sp\u00e4ter einfacher zu finden. Sie k\u00f6nnen mehrere Tags angeben. Bereits verwendete erscheinen beim Tippen als Vorschlag. Trennen Sie Tags mit einem Komma.
-tagging.intro.existing= W\u00e4hlen Sie bereits verwendete Tags aus der folgenden Liste aus. 
-create.file.artefact.wizzard.title=Datei-Artefakt hochladen
-file.upload=Datei ausw\u00e4hlen
-file.upload.no.file=Es muss eine Datei hochgeladen werden.
-file.upload.too.big=Die hochgeladene Datei ist zu gross. Es sind maximal {0} KB m\u00f6glich.
-create.blog.artefact.wizzard.title=Artefakttyp Lerntagebuch erstellen
-map.not.choosable=Eine Sammelmappe kann nicht als Ziel gew\u00e4hlt werden.
-move.artefact.descr=W\u00e4hlen Sie den Zielort (Seite oder Strukturelement), an den dieses Artefakt verschoben werden soll.
-move.artefact.actual.node=Aktuelle Verlinkung
-unsupported.filetype=Bitte eine Datei mit g\u00fcltiger Dateiendung hochladen.
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_en.properties
deleted file mode 100644
index e990560dcd89b22961cfff31e0cbe6d3cf66ffee..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,64 +0,0 @@
-#Thu Sep 03 11:09:03 CEST 2015
-add.artefact=Add artefact
-add.artefact.blog=Create learning journal/blog
-add.artefact.import=Import artefact/folder
-add.artefact.test=[DEV] add a dummy artefact
-add.artefact.upload=Upload file artefact
-add.intro=Please select an artefact type to add a new one.
-add.reflexion.create=Create reflection
-add.text.artefact=Add text artefact
-add.to.eportfolio=Add to ePortfolio
-add.to.eportfolio.again=You have already saved this object as artefact {0} time(s). You can add this as a new one to your ePortfolio.
-artefact.content=Content of text artefact
-artefact.content.not.empty=A text artefact must not be empty.
-artefact.link=Link
-
-
-
-collect.success=The artefact "{0}" has been added.
-collect.success.text.artefact=This artefact has been saved.
-collect.wizzard.title=Accumulative artefact tool
-copyright.error=If you aren't the author you will not be able to continue.
-copyright.intro.text=Please confirm that you are the author of this artefact.
-copyright.yes=I hereby confirm that I'm the author of this artefact's content or have the authorization to use it.
-create.blog.artefact.wizzard.title=Artefact type\: create learning journal
-create.file.artefact.wizzard.title=Upload file artefact
-create.text.artefact.wizzard.title=Create text artefact
-file.artefact.source.info=File upload
-file.upload=Select file
-file.upload.no.file=At least one file has to be uploaded.
-file.upload.too.big=The file uploaded is too big. Only a max. of {0} KB is allowed.
-map.not.choosable=A binder can not be selected as target.
-move.artefact.actual.node=Current linking
-move.artefact.descr=Select the target (page or structural element) where this artifact should be moved to.
-no.map.as.target=Choose no binder
-no.map.as.target.desc=Please select this element if you don't want to add your artefact to a binder. It is always possible to add an artefact later on.
-no.structs.available=There aren't any binders to which you could add this artefact.
-propose.tags.link=Recommend tag for this content
-proposed.tags=The following tags are suggested due to your content\:
-reflexion.too.long=The reflection provided exceeds the max. length ({0} characters).
-step0.description=Record meta data
-step0.file.description=Upload file
-step0.file.short.descr=Upload artefact file
-step0.short.descr=Record various meta data of an artefact
-step0.text.description=Record content
-step0.text.short.descr=Record artefact's content and meta data
-step1.description=Indicate tags
-step1.short.descr=Tag/keyword this artefact
-step2.description=Confirm authorship
-step2.short.descr=Please confirm that you are the author of this artefact and own corresponding rights.
-
-step3.description=Record reflection
-step3.short.descr=Please note down why you have chosen this artefact.
-step4.description=Choose binder
-step4.my.maps=My binders
-step4.nomapselected=Please select a target
-step4.short.descr=Please select the target location (binder, page, or structural element) to which this artefact should be added. It is also possible to skip this step and allocate your artefact to a binder later on. In this case just click on "Finish."
-stepform.cancel=Cancel
-stepform.submit=Save
-tag.input.hint=Click here to add new tags.
-tagging.intro=Tag your artefacts (provide keywords) in order to better find them later on. You can indicate more than one tag. Those already used will appear as suggestion while typing. Please separate tags by commas.
-tagging.intro.existing=Select tags already used from the following list.
-text.artefact.source.info=Text upload
-unsupported.filetype=Please upload a file with a valid filename-extension.
-users.tags=50 tags you use most\:
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index 97d0b0942f45f598c5c89951b158aabcaf782450..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,64 +0,0 @@
-#Mon Oct 22 16:52:29 CEST 2012
-add.artefact=Ajouter artefact
-add.artefact.blog=Cr\u00E9er journal d'apprentissage/blogue
-add.artefact.import=Importer artefacts/dossiers
-add.artefact.test=[DEV] Ajouter un artefact dummy
-add.artefact.upload=T\u00E9l\u00E9charger artefact fichier
-add.intro=S\u00E9lectionnez le type d'un artefact pour en ajouter un nouveau.
-add.reflexion.create=Cr\u00E9er r\u00E9flexion
-add.text.artefact=Ajouter artefact texte
-add.to.eportfolio=Ajouter \u00E0 l'ePortfolio
-add.to.eportfolio.again=Vous avez d\u00E9j\u00E0 sauv\u00E9 {0} fois cet objet comme artefact. Vous pouvez l'ajouter \u00E0 l'ePortfolio comme nouvel artefact.
-artefact.content=Contenu de l'artefact texte
-artefact.content.not.empty=Un artefact texte ne peut pas \u00EAtre vide.
-artefact.link=Lien
-
-
-
-collect.success=L'artefact "{0}" a \u00E9t\u00E9 ajout\u00E9.
-collect.success.text.artefact=L'artefact a \u00E9t\u00E9 sauv\u00E9.
-collect.wizzard.title=Outil de r\u00E9colte des artefacts
-copyright.error=Vous ne pouvez pas poursuivre si vous n'\u00EAtes pas l'auteur de l'artefact.
-copyright.intro.text=Confirmez \u00EAtre l'auteur de cet artefact, svp.
-copyright.yes=Je confirme \u00EAtre l'auteur du contenu de l'artefact ou \u00EAtre autoris\u00E9 \u00E0 l'utiliser.
-create.blog.artefact.wizzard.title=Cr\u00E9er le type d'artefact "journal d'apprentissage"
-create.file.artefact.wizzard.title=T\u00E9l\u00E9charger artefact fichier
-create.text.artefact.wizzard.title=Cr\u00E9er artefact texte
-file.artefact.source.info=T\u00E9l\u00E9chargement fichier
-file.upload=S\u00E9lectionner fichier
-file.upload.no.file=Il faut t\u00E9l\u00E9charger un fichier.
-file.upload.too.big=Le fichier \u00E0 t\u00E9l\u00E9charger est trop grand, la limite est de {0} KB.
-map.not.choosable=Un classeur ne peut pas \u00EAtre choisi comme cible.
-move.artefact.actual.node=Lien actuel
-move.artefact.descr=S\u00E9lectionner une destination (page ou \u00E9l\u00E9ment structurel) o\u00F9 cet artefact doit \u00EAtre d\u00E9placer.
-no.map.as.target=Ne s\u00E9lectionner aucun classeur
-no.map.as.target.desc=S\u00E9lectionnez cet \u00E9l\u00E9ment pour que votre artefact ne soit ajout\u00E9 \u00E0 aucun classeur pour l'instant. Vous pouvez toujours ajouter un artefact \u00E0 un classeur dans un second temps.
-no.structs.available=Vous n'avez pas encore de classeur auquel ajouter cet artefact.
-propose.tags.link=Sugg\u00E9rer des tags adapt\u00E9s au contenu
-proposed.tags=Les tags suivants sont sugg\u00E9r\u00E9s\:
-reflexion.too.long=La r\u00E9flexion exc\u00E8de la longueur maximale ({0} signes).
-step0.description=Enregistrer les m\u00E9tadonn\u00E9es
-step0.file.description=T\u00E9l\u00E9charger le fichier
-step0.file.short.descr=T\u00E9l\u00E9charger le fichier comme artefact
-step0.short.descr=Enregistrer diff\u00E9rentes m\u00E9tadonn\u00E9es sur un artefact
-step0.text.description=Enregistrer le contenu
-step0.text.short.descr=Enregistrer le contenu et les m\u00E9tadonn\u00E9es de l'artefact
-step1.description=Indiquer les tags
-step1.short.descr=Doter l'artefact de tags / mots-cl\u00E9s
-step2.description=Confirmer la paternit\u00E9 de l'\u0153uvre
-step2.short.descr=Confirmez \u00EAtre l'auteur de l'artefact et poss\u00E9der tous les droits.
-
-step3.description=R\u00E9diger une r\u00E9flexion
-step3.short.descr=Notez ce qui a motiv\u00E9 le choix de cet artefact.
-step4.description=S\u00E9lectionner un classeur
-step4.my.maps=Mes classeurs
-step4.nomapselected=Choisissez une destination s'il vous pla\u00EEt.
-step4.short.descr=S\u00E9lectionnez le lieu (classeur, page ou \u00E9l\u00E9ment structurel) o\u00F9 vous souhaitez d\u00E9poser cet artefact. Vous pouvez aussi relier l'artefact \u00E0 un classeur dans un second temps, donc sauter cette \u00E9tape et cliquer directement sur "Conclure".
-stepform.cancel=Interrompre
-stepform.submit=Enregistrer
-tag.input.hint=Cliquer ici pour ajouter de nouveaux tags.
-tagging.intro=Dotez l'artefact de tags (mots-cl\u00E9s) pour le trouver plus facilement dans un deuxi\u00E8me temps. Vous pouvez indiquer plusieurs tags. Les tags d\u00E9j\u00E0 utilis\u00E9s apparaissent en suggestion durant la r\u00E9daction. S\u00E9parez les tags par une virgule.
-tagging.intro.existing=S\u00E9lectionnez les tags d\u00E9j\u00E0 utilis\u00E9s de la liste suivante.
-text.artefact.source.info=T\u00E9l\u00E9chargement texte
-unsupported.filetype=S'il vous pla\u00EEt, t\u00E9l\u00E9chargez un fichier avec une extension de fichier valide.
-users.tags=Les 50 tags les plus utilis\u00E9s\:
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_it.properties
deleted file mode 100644
index 57b9dba367936462b32899356daa1221847d51ac..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_it.properties
+++ /dev/null
@@ -1,60 +0,0 @@
-#Wed Jun 22 15:13:19 CEST 2016
-add.artefact=Aggiungere artefatto
-add.artefact.blog=Creare diario d'apprendimento/blog
-add.artefact.import=Importare artefatti/cartelle
-add.artefact.test=[DEV] Aggiungere un artefatto dummy
-add.artefact.upload=Caricare artefatto file
-add.intro=Selezioni il tipo di un artefatto per aggiungerne uno nuovo.
-add.reflexion.create=Creare riflessione
-add.text.artefact=Aggiungere artefatto testo
-add.to.eportfolio=Aggiungere all'ePortfolio
-add.to.eportfolio.again=Ha gi\u00E0 salvato {0} volte questo oggetto come artefatto. Lo pu\u00F2 aggiungere all'ePortolio come nuovo artefatto.
-artefact.content=Contenuto dell'artefatto testo
-artefact.content.not.empty=Un artefatto testo non pu\u00F2 essere vuoto.
-artefact.link=Link
-collect.success=L'artefatto "{0}" \u00E8 stato aggiunto.
-collect.success.text.artefact=L'artefatto \u00E8 stato salvato.
-collect.wizzard.title=Strumento di raccolta degli artefatti
-copyright.error=Non pu\u00F2 proseguire se non \u00E8 l'autore dell'artefatto.
-copyright.intro.text=Confermi di essere l'autore di questo artefatto, p.f.
-copyright.yes=Confermo di essere l'autore del contenuto dell'artefatto o di essere autorizzazo ad usarlo.
-create.blog.artefact.wizzard.title=Creare il tipo di artefatto "diario d'apprendimento"
-create.file.artefact.wizzard.title=Caricare artefatto file
-create.text.artefact.wizzard.title=Creare artefatto testo
-file.artefact.source.info=Caricamento file
-file.upload=Selezionare file
-file.upload.no.file=Occorre caricare un file.
-file.upload.too.big=Il file da caricare \u00E8 troppo grande, il limite \u00E8 di {0} KB.
-map.not.choosable=Un classificatore non pu\u00F2 essere selezionato come destinazione.
-move.artefact.actual.node=Collegamento corrente
-move.artefact.descr=Selezionare la destinazione (pagina o elemento strutturale) dove spostare questo artefatto.
-no.map.as.target=Non selezionare alcun raccoglitore
-no.map.as.target.desc=Selezioni questo elemento per non aggiungere ora il Suo artefatto ad alcun raccoglitore. Pu\u00F2 sempre aggiungere successivamente un artefatto a un raccoglitore.
-no.structs.available=Non ha ancora un raccoglitore a cui aggiungere questo artefatto.
-propose.tags.link=Suggerire dei tag adatti al contenuto
-proposed.tags=Vengono suggeriti i tag seguenti\:
-reflexion.too.long=La riflessione supera la lunghezza massima ({0} segni).
-step0.description=Registrare i metadati
-step0.file.description=Caricare il file
-step0.file.short.descr=Caricare il file come artefatto
-step0.short.descr=Registrare diversi metadati su un artefatto
-step0.text.description=Registrare il contenuto
-step0.text.short.descr=Registrare il contenuto e i metadati dell'artefatto
-step1.description=Indicare i tag
-step1.short.descr=Dotare l'artefatto di tag / parole chiave
-step2.description=Confermare la paternit\u00E0 dell'opera
-step2.short.descr=Confermi di essere l'autore dell'artefatto e di possedere tutti i diritti.
-step3.description=Redarre una riflessione
-step3.short.descr=Annoti ci\u00F2 che ha motivato la scelta di questo artefatto.
-step4.description=Selezionare un raccoglitore
-step4.my.maps=I miei raccoglitori
-step4.nomapselected=Selezionare una destinazione
-step4.short.descr=Selezioni il luogo (raccoglitore, pagina o elemento strutturale) in cui desidera depositare questo artefatto. Pu\u00F2 anche collegare successivamente l'artefatto a un raccoglitore, quindi saltare questo passo e cliccare direttamente su "Concludere".
-stepform.cancel=Interrompere
-stepform.submit=Salvare
-tag.input.hint=Cliccare qui per aggiungere nuovi tag.
-tagging.intro=Doti l'artefatto di tag (parole chiave) per trovarlo pi\u00F9 facilmente in un secondo tempo. Pi\u00F9 indicare pi\u00F9 tag. I tag gi\u00E0 utilizzati appaiono come suggerimento durante la composizione. Separi i tag con una virgola.
-tagging.intro.existing=Selezioni i tag gi\u00E0 utilizzati dalla lista seguente.
-text.artefact.source.info=Caricamento testo
-unsupported.filetype=Caricare un file con una estensione valida.
-users.tags=I 50 tag pi\u00F9 utilizzati\:
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_jp.properties
deleted file mode 100644
index 37527f3657f33fedf921164cae6ce075f3a578c7..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_jp.properties
+++ /dev/null
@@ -1,57 +0,0 @@
-#Thu Sep 08 16:42:38 CEST 2011
-add.artefact=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u8FFD\u52A0\u3059\u308B
-add.artefact.blog=\u5B66\u7FD2\u65E5\u8A8C/\u30D6\u30ED\u30B0\u3092\u4F5C\u6210\u3059\u308B
-add.artefact.import=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8/\u30D5\u30A9\u30EB\u30C0\u3092\u30A4\u30F3\u30DD\u30FC\u30C8\u3059\u308B
-add.artefact.test=[DEV] \u30C0\u30DF\u30FC\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u8FFD\u52A0\u3059\u308B
-add.artefact.upload=\u30D5\u30A1\u30A4\u30EB\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B
-add.intro=\u65B0\u3057\u3044\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u8FFD\u52A0\u3059\u308B\u306B\u306F\u3001\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u30BF\u30A4\u30D7\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-add.reflexion.create=\u30EA\u30D5\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u4F5C\u6210\u3059\u308B
-add.text.artefact=\u30C6\u30AD\u30B9\u30C8\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u8FFD\u52A0\u3059\u308B
-add.to.eportfolio=e\u30DD\u30FC\u30C8\u30D5\u30A9\u30EA\u30AA\u3092\u8FFD\u52A0\u3059\u308B
-add.to.eportfolio.again=\u3042\u306A\u305F\u306F\u3059\u3067\u306B\u3053\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3068\u3057\u3066\u3001{0} \u56DE\u4FDD\u5B58\u3057\u3066\u3044\u307E\u3059\u3002\u65B0\u3057\u3044\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3068\u3057\u3066\u3001\u3042\u306A\u305F\u306Ee\u30DD\u30FC\u30C8\u30D5\u30A9\u30EA\u30AA\u306B\u8FFD\u52A0\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002
-artefact.content=\u30C6\u30AD\u30B9\u30C8\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4
-artefact.content.not.empty=\u30C6\u30AD\u30B9\u30C8\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u7A7A\u767D\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002
-artefact.link=\u30EA\u30F3\u30AF
-
-
-collect.success=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u300C {0} \u300D\u304C\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F\u3002
-collect.success.text.artefact=\u3053\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u304C\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F\u3002
-collect.wizzard.title=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u53CE\u96C6\u30C4\u30FC\u30EB
-copyright.error=\u3042\u306A\u305F\u304C\u4F5C\u8005\u3067\u306F\u306A\u3044\u5834\u5408\u3001\u7D9A\u3051\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002
-copyright.intro.text=\u3042\u306A\u305F\u304C\u3053\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u306E\u4F5C\u8005\u3067\u3042\u308B\u3053\u3068\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-copyright.yes=\u79C1\u304C\u3053\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u4F5C\u6210\u8005\u307E\u305F\u306F\u5229\u7528\u6A29\u9650\u3092\u4E0E\u3048\u3089\u308C\u3066\u3044\u308B\u3053\u3068\u3092\u3053\u3053\u306B\u627F\u8A8D\u3057\u307E\u3059\u3002
-create.blog.artefact.wizzard.title=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u30BF\u30A4\u30D7\: \u5B66\u7FD2\u65E5\u8A8C\u3092\u4F5C\u6210\u3059\u308B
-create.file.artefact.wizzard.title=\u30D5\u30A1\u30A4\u30EB\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B
-create.text.artefact.wizzard.title=\u30C6\u30AD\u30B9\u30C8\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u4F5C\u6210\u3059\u308B
-file.artefact.source.info=\u30D5\u30A1\u30A4\u30EB\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9
-file.upload=\u30D5\u30A1\u30A4\u30EB\u3092\u9078\u629E\u3059\u308B
-file.upload.no.file=\u5C11\u306A\u304F\u3068\u30821\u500B\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
-file.upload.too.big=\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u304C\u5927\u304D\u3059\u304E\u307E\u3059\u3002\u6700\u5927 {0} KB\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u304C\u8A31\u53EF\u3055\u308C\u3066\u3044\u307E\u3059\u3002
-no.map.as.target=\u53CE\u96C6\u30D5\u30A9\u30EB\u30C0\u3092\u9078\u629E\u3057\u306A\u3044
-no.map.as.target.desc=\u3042\u306A\u305F\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u30D5\u30A9\u30EB\u30C0\u306B\u8FFD\u52A0\u3057\u305F\u304F\u306A\u3044\u5834\u5408\u3001\u3053\u306E\u30A8\u30EC\u30E1\u30F3\u30C8\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u5E38\u306B\u5F8C\u304B\u3089\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u8FFD\u52A0\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u3059\u3002
-no.structs.available=\u3042\u306A\u305F\u304C\u3053\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u8FFD\u52A0\u3067\u304D\u308B\u53CE\u96C6\u30D5\u30A9\u30EB\u30C0\u306F\u3042\u308A\u307E\u305B\u3093\u3002
-propose.tags.link=\u3053\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u306B\u9069\u3057\u305F\u63A8\u5968\u30BF\u30B0
-proposed.tags=\u3042\u306A\u305F\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u57FA\u306B\u6B21\u306E\u30BF\u30B0\u304C\u63A8\u5968\u3055\u308C\u307E\u3059\:
-reflexion.too.long=\u63D0\u4F9B\u3055\u308C\u305F\u30EA\u30D5\u30EC\u30AF\u30B7\u30E7\u30F3\u304C\u6700\u5927\u9577 ({0} \u6587\u5B57) \u3092\u8D85\u3048\u307E\u3057\u305F\u3002
-step0.description=\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u8A18\u9332\u3059\u308B
-step0.file.description=\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B
-step0.file.short.descr=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B
-step0.short.descr=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u306E\u69D8\u3005\u306A\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u8A18\u9332\u3059\u308B
-step0.text.description=\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u8A18\u9332\u3059\u308B
-step0.text.short.descr=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u30B3\u30F3\u30C6\u30F3\u30C4\u304A\u3088\u3073\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u8A18\u9332\u3059\u308B
-step1.description=\u30BF\u30B0\u3092\u6307\u5B9A\u3059\u308B
-step1.short.descr=\u3053\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u306E\u30BF\u30B0/\u30AD\u30FC\u30EF\u30FC\u30C9
-step2.description=\u30AA\u30FC\u30B5\u30FC\u30B7\u30C3\u30D7\u3092\u78BA\u8A8D\u3059\u308B
-step2.short.descr=\u3042\u306A\u305F\u304C\u3053\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u306E\u4F5C\u6210\u8005\u3067\u3042\u308A\u3001\u4ED8\u968F\u3059\u308B\u6A29\u9650\u3092\u6301\u3063\u3066\u3044\u308B\u3053\u3068\u3092\u6301\u3063\u3066\u3044\u308B\u3053\u3068\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-
-step3.description=\u30EA\u30D5\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u8A18\u9332\u3059\u308B
-step3.short.descr=\u3042\u306A\u305F\u304C\u3053\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u9078\u629E\u3057\u305F\u7406\u7531\u3092\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-step4.description=\u30D5\u30A9\u30EB\u30C0\u3092\u9078\u629E\u3059\u308B
-step4.my.maps=\u30DE\u30A4\u53CE\u96C6\u30D5\u30A9\u30EB\u30C0
-stepform.cancel=\u30AD\u30E3\u30F3\u30BB\u30EB
-stepform.submit=\u4FDD\u5B58
-tag.input.hint=\u65B0\u3057\u3044\u30BF\u30B0\u3092\u8FFD\u52A0\u3059\u308B\u306B\u306F\u3001\u3053\u3053\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-tagging.intro=\u5F8C\u3067\u63A2\u3057\u3084\u3059\u3044\u3088\u3046\u306B\u3001\u3042\u306A\u305F\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u306B\u30BF\u30B0\u4ED8\u3051\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u3042\u306A\u305F\u306F\uFF11\u3064\u4EE5\u4E0A\u306E\u30BF\u30B0\u3092\u5272\u308A\u5F53\u3066\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u65E2\u5B58\u306E\u30BF\u30B0\u306F\u5165\u529B\u6642\u306B\u30B5\u30B8\u30A7\u30B9\u30C1\u30E7\u30F3\u3068\u3057\u3066\u8868\u793A\u3055\u308C\u307E\u3059\u3002\u305D\u308C\u305E\u308C\u306E\u30BF\u30B0\u306F\u30AB\u30F3\u30DE\u3067\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044\u3002
-tagging.intro.existing=\u4EE5\u4E0B\u306E\u30EA\u30B9\u30C8\u3088\u308A\u3001\u3059\u3067\u306B\u4F7F\u7528\u3055\u308C\u3066\u3044\u308B\u30BF\u30B0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-text.artefact.source.info=\u30C6\u30AD\u30B9\u30C8\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9
-users.tags=\u3042\u306A\u305F\u304C\u6700\u3082\u4F7F\u7528\u3057\u3066\u3044\u308B50\u500B\u306E\u30BF\u30B0\:
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_nl_NL.properties
deleted file mode 100644
index 93851f466d0d8d5bded8fea3f5caef6984a011a7..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_nl_NL.properties
+++ /dev/null
@@ -1,59 +0,0 @@
-#Thu Sep 08 16:42:47 CEST 2011
-add.artefact=artefact toevoegen
-add.artefact.blog=Leerdagboek/blog opstellen
-add.artefact.import=artefact/map importeren
-add.artefact.test=[DEV] een dummy artefact toevoegen
-add.artefact.upload=Bestand artefact uploaden
-add.intro=Gelieve een artefact type te selecteren om een nieuwe toe te voegen.
-add.reflexion.create=Reflectie opstellen
-add.text.artefact=Text artefact toevoegen
-add.to.eportfolio=Aan ePortfolio toevoegen
-add.to.eportfolio.again=U hebt dit object als artefact al {0} keer opgeslagen. U kan deze als een nieuwe toevoegen aan uw ePortfolio.
-artefact.content=Inhoud van tekst artefact
-artefact.content.not.empty=Een tekst artefact mag niet leeg zijn.
-artefact.link=Link
-
-
-
-collect.success=Het artefact "{0}" is toegevoegd.
-collect.success.text.artefact=Dit artefact is opgeslagen.
-collect.wizzard.title=Accumulatief artefact werktuig
-copyright.error=Als u niet de auteur bent, zal het niet mogelijk zijn voor u om verder te gaan.
-copyright.intro.text=Gelieve te bevestigen dat u de auteur bent van dit artefact.
-copyright.yes=Hierbij bevestig ik dat ik de auteur ben van de inhoud van dit artefact, of dat ik geautoriseerd ben om het te gebruiken.
-create.blog.artefact.wizzard.title=Artefact type. leerdagboek opstellen
-create.file.artefact.wizzard.title=Bestand artefact uploaden
-create.text.artefact.wizzard.title=Text artefact opstellen
-file.artefact.source.info=Bestand uploaden
-file.upload=Bestand selecteren
-file.upload.no.file=Er moet tenminste \u00E9\u00E9n bestand ge\u00FCpload worden.
-file.upload.too.big=Het ge\u00FCploade bestand is te groot. Enkel een max. van {0} KB is toegestaan.
-no.map.as.target=Geen accumulatieve mappen selecteren
-no.map.as.target.desc=Gelieve dit element te selecteren wanneer u geen artefact aan een map wil toevoegen. Het is altijd mogelijk om later nog een artefact toe te voegen.
-no.structs.available=Er zijn geen accumulatieve folders waaraan u dit artefact kan toevoegen.
-propose.tags.link=Geschikte tags voor deze inhoud voorstellen.
-proposed.tags=De volgende tags worden voorgesteld afgaand op uw inhoud\:
-reflexion.too.long=De voorziene reflectie overschreidt de max. lengte ({0} characters).
-step0.description=Meta data opnemen
-step0.file.description=Bestand uploaden
-step0.file.short.descr=Artefact bestand uploaden
-step0.short.descr=Verschillende meta data van een artefact opnemen
-step0.text.description=Inhoud opnemen
-step0.text.short.descr=Inhoud en meta data van het artefact opnemen
-step1.description=Tags aangeven
-step1.short.descr=Tag/trefwoord dit artefact
-step2.description=auteurschap bevestigen
-step2.short.descr=Gelieve te bevestigen dat u de auteur bent van dit artefact en bijbehorende rechten bezit.
-
-step3.description=Reflecties opnemen
-step3.short.descr=Gelieve te noteren waarom u dit artefact gekozen heeft.
-step4.description=Map selecteren
-step4.my.maps=Mijn accumulatieve mappen
-step4.short.descr=Gelieve een locatie te kiezen (map, pagina of structureel element) waar dit artefact aan toegevoegd moet worden. Het is ook mogelijk om deze stap over te slaan en je artefact op een later tijdstip toe te wijzen aan een folder. In dit geval moet u enkel op "Finish" klikken.
-stepform.cancel=Annuleer
-stepform.submit=Opslaan
-tag.input.hint=Klik hier om nieuwe tags toe te voegen.
-tagging.intro=Tag uw artefacten (trefwoorden voorzien) om hen zo later beter terug te kunnen vinden. U kan meer dan \u00E9\u00E9n tag toewijzen. De reeds gebruikte zullen als suggesties verschijnen tijdens het typen. Gelieve tags te scheiden doormiddel van komma's.
-tagging.intro.existing=Selecteer reeds gebruikte tags uit de volgende lijst.
-text.artefact.source.info=Tekst upload
-users.tags=50 tags die u het meest gebruikt\:
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_pl.properties
deleted file mode 100644
index 4b0580b2aff95c0ea507946eedf02577ef042054..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_pl.properties
+++ /dev/null
@@ -1,55 +0,0 @@
-#Thu Sep 08 16:42:41 CEST 2011
-add.artefact=Dodaj artefakt
-add.artefact.blog=Utw\u00F3rz dziennik/blog
-add.artefact.import=Importuj artefakt/folder
-add.artefact.test=[DEV] add a dummy artefact
-add.artefact.upload=Za\u0142aduj artefakt plikowy
-add.intro=Wybierz typ artefaktu, kt\u00F3ry chcesz doda\u0107.
-add.reflexion.create=Utw\u00F3rz komentarz
-add.text.artefact=Dodaj artefakt tekstowy
-add.to.eportfolio=Dodaj do ePortfolio
-add.to.eportfolio.again=Ju\u017C {0} razy zapisa\u0142e\u015B ju\u017C ten obiekt, jako artefakt.
-artefact.content=Zawarto\u015B\u0107 artefaktu tekstowego
-artefact.content.not.empty=Artefakt tekstowy nie mo\u017Ce by\u0107 pusty.
-artefact.link=Link
-collect.success=Artefakt "{0}" zosta\u0142 dodany.
-collect.success.text.artefact=Artefakt zosta\u0142 zapisany.
-copyright.error=Je\u017Celi nie jeste\u015B autorem, nie b\u0119dziesz m\u00F3g\u0142 kontynuowa\u0107.
-copyright.intro.text=Potwierd\u017A, \u017Ce jeste\u015B autorem tego artefaktu.
-copyright.yes=O\u015Bwiadczam, \u017Ce jestem autorem zawarto\u015Bci tego artefaktu i posiadam uprawnienia do jego u\u017Cywania.
-create.blog.artefact.wizzard.title=Typ artefaktu\: utw\u00F3rz dziennik
-create.file.artefact.wizzard.title=Za\u0142aduj artefakt plikowy
-create.text.artefact.wizzard.title=Utw\u00F3rz artefakt tekstowy
-file.artefact.source.info=\u0141adowanie pliku
-file.upload=Wybierz plik
-file.upload.no.file=Powiniene\u015B za\u0142adowa\u0107 przynajmniej jeden plik.
-file.upload.too.big=Za\u0142adowany plik jest zbyt du\u017Cy. Maksymalny rozmiar to {0} KB.
-no.map.as.target=Nie wybieraj \u017Cadnych folder\u00F3w zbiorczych
-no.map.as.target.desc=Zaznacz ten element, je\u017Celi nie chcesz dodawa\u0107 swojego artefaktu do folderu. Mo\u017Cliwe b\u0119dzie dodanie go p\u00F3\u017Aniej.
-no.structs.available=Brak folderu zbiorczego, do kt\u00F3rego m\u00F3g\u0142by\u015B doda\u0107 ten artefakt.
-propose.tags.link=Zaproponuj odpowiednie tagi dla tej zawarto\u015Bci
-proposed.tags=Nast\u0119puj\u0105ce tagi s\u0105 proponowane dla twojej zawarto\u015Bci\:
-reflexion.too.long=Zbyt d\u0142ugi komentarz. Maksymalna liczba znak\u00F3w to\: {0}
-step0.description=Dodaj metadane
-step0.file.description=Za\u0142aduj plik
-step0.file.short.descr=Za\u0142aduj plik artefaktu
-step0.short.descr=Zarejestruj metadane artefaktu
-step0.text.description=Zarejestruj tre\u015B\u0107
-step0.text.short.descr=Zarejestruj tre\u015B\u0107 i metadane artefaktu
-step1.description=Dodaj tagi
-step1.short.descr=Otaguj ten artefakt
-step2.description=Potwierd\u017A autorstwo
-step2.short.descr=Potwierd\u017A, \u017Ce jeste\u015B autorem tego artefaktu i w\u0142a\u015Bcicielem praw do niego.
-
-step3.description=Dodaj komentarz
-step3.short.descr=Napisz, dlaczego wybra\u0142e\u015B ten artefakt.
-step4.description=Wybierz folder
-step4.my.maps=Moje foldery zbiorcze
-step4.short.descr=Wybierz lokalizacj\u0119 docelow\u0105 (folder, strona, element struktury), w kt\u00F3rej chcesz umie\u015Bci\u0107 artefakt. Mo\u017Cesz pomin\u0105\u0107 ten krok i wybra\u0107 miejsce docelowe p\u00F3\u017Aniej. W takim przypadku, wci\u015Bnij po prostu przycisk "Zako\u0144cz".
-stepform.cancel=Anuluj
-stepform.submit=Zapisz
-tag.input.hint=Kliknij tu, \u017Ceby doda\u0107 tag.
-tagging.intro=Otaguj swoje artefakty (umie\u015B\u0107 s\u0142owa kluczowe), \u017Ceby m\u00F3c je p\u00F3\u017Aniej \u0142atwiej odnale\u017A\u0107. Mo\u017Cesz poda\u0107 wi\u0119cej, ni\u017C jeden tag. Te, kt\u00F3re by\u0142y ju\u017C wcze\u015Bniej u\u017Cywane, pojawi\u0105 si\u0119 jako podpowiedzi. Oddziel tagi przecinkami.
-tagging.intro.existing=Wybierz z listy u\u017Cywane wcze\u015Bniej tagi.
-text.artefact.source.info=\u0141adowanie tekstu
-users.tags=50 najcz\u0119\u015Bciej u\u017Cywanych przez ciebie tag\u00F3w\:
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_pt_BR.properties
deleted file mode 100644
index d5ddd7421addabd0884e918275d76686af66ca02..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_pt_BR.properties
+++ /dev/null
@@ -1,64 +0,0 @@
-#Thu Sep 03 11:24:42 CEST 2015
-add.artefact=Adicionar artefato
-add.artefact.blog=Criar um blog/jornal de aprendizagem
-add.artefact.import=Importar artefato/pasta
-add.artefact.test=[DEV] adicionar um artefato simulado
-add.artefact.upload=Enviar arquivo de artefato
-add.intro=Por favor, selecione um tipo de artefato para adicionar um novo.
-add.reflexion.create=Criar reflex\u00E3o
-add.text.artefact=Adicionar artefato de texto
-add.to.eportfolio=Adicionar \u00E0 ePortfolio
-add.to.eportfolio.again=Voc\u00EA j\u00E1 salvou esse objeto como artefato {0} vezes(s). Voc\u00EA pode adicionar este como um novo para o seu ePortfolio.
-artefact.content=Conte\u00FAdo de artefato texto
-artefact.content.not.empty=Um artefato de texto n\u00E3o deve estar vazio.
-artefact.link=Link
-
-
-
-collect.success=O artefato "{0}" foi adicionado.
-collect.success.text.artefact=Esse artefato foi salvo
-collect.wizzard.title=Ferramenta de artefato acumulativo
-copyright.error=Se voc\u00EA n\u00E3o for o autor n\u00E3o ser\u00E1 capaz de continuar.
-copyright.intro.text=Por favor, confirme que voc\u00EA \u00E9 o autor deste artefato.
-copyright.yes=Confirmo que sou o autor do conte\u00FAdo deste artefato, ou tenho a autoriza\u00E7\u00E3o para us\u00E1-lo.
-create.blog.artefact.wizzard.title=Artefato do tipo\: criar revista de aprendizagem
-create.file.artefact.wizzard.title=Upload de arquivos de artefato
-create.text.artefact.wizzard.title=Criar artefato texto
-file.artefact.source.info=Upload de arquivo
-file.upload=Selecione o arquivo
-file.upload.no.file=Pelo menos um arquivo deve ser carregado.
-file.upload.too.big=O arquivo enviado \u00E9 muito grande. Apenas um max. de {0} KB \u00E9 permitido.
-map.not.choosable=Um mapa n\u00E3o pode ser seleccionado como alvo.
-move.artefact.actual.node=V\u00EDnculo atual
-move.artefact.descr=Selecione o destino (p\u00E1gina ou estrutura) para onde este artefato deve ser movido.
-no.map.as.target=N\u00E3o selecione as pastas acumulativas.
-no.map.as.target.desc=Por favor selecione esse elemento se voc\u00EA n\u00E3o quiser adicionar o seu artefato em uma pasta. \u00C9 sempre poss\u00EDvel adicionar um artefato mais tarde.
-no.structs.available=N\u00E3o existem pastas acumulativas para o qual voc\u00EA pode adicionar este artefato.
-propose.tags.link=Sugerir tags apropriadas para este conte\u00FAdo
-proposed.tags=As seguintes tags s\u00E3o sugeridas, devido ao seu conte\u00FAdo\:
-reflexion.too.long=A reflex\u00E3o entregue ultrapassa o comprimento max. de ({0} caracteres).
-step0.description=Gravar meta data
-step0.file.description=Enviar arquivo
-step0.file.short.descr=Enviar arquivo de artefato
-step0.short.descr=Registro de diversos meta dados de um artefato
-step0.text.description=Gravar conte\u00FAdo
-step0.text.short.descr=Registrar conte\u00FAdo artefato e metadados
-step1.description=Indicar tags
-step1.short.descr=Tag/palavra-chave deste artefacto
-step2.description=Confirmar autoria
-step2.short.descr=Por favor, confirme que voc\u00EA \u00E9 o autor deste artefato e possui os direitos correspondentes.
-
-step3.description=Registrar reflex\u00E3o
-step3.short.descr=Por favor, anote por que voc\u00EA escolheu este artefato.
-step4.description=Selecione a pasta
-step4.my.maps=Minhas pastas acumulativas
-step4.nomapselected=Por favor seleccione um destino
-step4.short.descr=Por favor, selecione o local de destino (pasta, p\u00E1gina ou elemento estrutural) para que este artefato deve ser adicionado. Tamb\u00E9m \u00E9 poss\u00EDvel pular esta etapa e alocar o artefato em uma pasta mais tarde. Neste caso, basta clicar em "Terminar".
-stepform.cancel=Cancelar
-stepform.submit=Salvar
-tag.input.hint=Clique aqui para adicionar novas tags.
-tagging.intro=Coloque "Tags" em seus artefatos (fornecer palavras-chave), a fim de melhor encontr\u00E1-los mais tarde. Voc\u00EA pode indicar mais de uma marca. Aqueles j\u00E1 utilizados aparecer\u00E3o como sugest\u00E3o durante a digita\u00E7\u00E3o. Por favor, separe os marcadores (Tags) por v\u00EDrgulas.
-tagging.intro.existing=Selecione tags/marcadores j\u00E1 utilizados da seguinte lista.
-text.artefact.source.info=Enviar Texto
-unsupported.filetype=Fa\u00E7a upload de um arquivo com uma extens\u00E3o v\u00E1lida.
-users.tags=50 tags que voc\u00EA mais usa\:
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_zh_CN.properties
deleted file mode 100644
index e6ee4322f7b9e3ec9ab61fd0faaf917c3693d8b2..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/_i18n/LocalStrings_zh_CN.properties
+++ /dev/null
@@ -1,59 +0,0 @@
-#Thu Sep 08 16:42:39 CEST 2011
-add.artefact=\u6DFB\u52A0\u7535\u5B50\u6863\u6848
-add.artefact.blog=\u521B\u5EFA\u5B66\u4E60\u4F53\u9A8C/\u65E5\u5FD7
-add.artefact.import=\u5BFC\u5165\u7535\u5B50\u6863\u6848/\u6587\u4EF6\u5939
-add.artefact.test=[DEV]\u6DFB\u52A0\u4E00\u4E2A\u865A\u62DF\u8BC1\u660E
-add.artefact.upload=\u4E0A\u4F20\u6587\u6863\u6587\u4EF6
-add.intro=\u8BF7\u9009\u62E9\u4E00\u79CD\u6DFB\u52A0\u6587\u6863\u7684\u65B9\u5F0F\uFF1A
-add.reflexion.create=\u521B\u5EFA\u53CD\u601D
-add.text.artefact=\u6DFB\u52A0\u6587\u672C\u6863\u6848
-add.to.eportfolio=\u52A0\u5165\u5230\u7535\u5B50\u6863\u6848
-add.to.eportfolio.again=\u60A8\u5DF2\u7ECF\u5C06\u6B64\u5BF9\u8C61\u4F5C\u4E3A\u6863\u6848{0}\u6B21\u4E86\u3002\u4F60\u4E5F\u53EF\u4EE5\u5C06\u8FD9\u4E2A\u4F5C\u4E3A\u4E00\u4E2A\u65B0\u7684\u8BC1\u636E\u6DFB\u52A0\u5230\u4F60\u7684\u7535\u5B50\u6863\u6848\u4E2D\u3002
-artefact.content=\u6587\u672C\u6863\u6848\u7684\u5185\u5BB9
-artefact.content.not.empty=\u6587\u672C\u6863\u6848\u4E0D\u80FD\u4E3A\u7A7A\u3002
-artefact.link=\u94FE\u63A5
-
-
-
-collect.success=\u5DF2\u589E\u52A0\u8BC1\u660E"{0}".
-collect.success.text.artefact=\u5DF2\u4FDD\u5B58\u8BC1\u660E\u3002
-collect.wizzard.title=\u5F62\u6210\u6027\u8BC1\u660E\u5DE5\u5177
-copyright.error=\u5982\u679C\u60A8\u4E0D\u662F\u521B\u5EFA\u8005\uFF0C\u60A8\u5C06\u65E0\u6CD5\u7EE7\u7EED\u3002
-copyright.intro.text=\u8BF7\u786E\u8BA4\u60A8\u662F\u6B64\u6863\u6848\u7684\u521B\u5EFA\u8005\u3002
-copyright.yes=\u6211\u627F\u8BA4\u6211\u662F\u6B64\u6863\u6848\u5185\u5BB9\u7684\u521B\u5EFA\u8005\uFF0C\u6211\u5DF2\u7ECF\u62E5\u6709\u4F7F\u7528\u5B83\u7684\u6743\u5229\u3002
-create.blog.artefact.wizzard.title=\u6863\u6848\u7C7B\u578B\uFF1A\u521B\u5EFA\u5B66\u4E60\u4F53\u9A8C\u65C5\u7A0B
-create.file.artefact.wizzard.title=\u4E0A\u4F20\u6863\u6848\u6587\u4EF6
-create.text.artefact.wizzard.title=\u521B\u5EFA\u6863\u6848\u6587\u672C
-file.artefact.source.info=\u4E0A\u4F20\u6587\u4EF6
-file.upload=\u9009\u62E9\u6587\u4EF6
-file.upload.no.file=\u81F3\u5C11\u8981\u4E0A\u4F20\u4E00\u4E2A\u6587\u4EF6\u3002
-file.upload.too.big=\u4E0A\u4F20\u7684\u6587\u4EF6\u8FC7\u5927\u3002\u6700\u591A\u5141\u8BB8{0}KB\u7684\u6587\u4EF6\u4E0A\u4F20\u3002
-no.map.as.target=\u4E0D\u8981\u9009\u62E9\u4EFB\u4F55\u7D2F\u79EF\u6027\u6587\u4EF6\u5939
-no.map.as.target.desc=\u8BF7\u9009\u62E9\u60A8\u4E0D\u60F3\u6DFB\u52A0\u5230\u6587\u4EF6\u5939\u4E2D\u7684\u8BC1\u660E\u3002\u5982\u679C\u60A8\u4EE5\u540E\u60F3\u6DFB\u52A0\uFF0C\u968F\u65F6\u90FD\u53EF\u4EE5\u3002
-no.structs.available=\u4E0D\u5B58\u5728\u7684\u5F62\u6210\u6027\u6587\u4EF6\u5939\uFF0C\u60A8\u65E0\u6CD5\u5C06\u8BC1\u660E\u6DFB\u52A0\u8FDB\u53BB\u3002
-propose.tags.link=\u8BBE\u7F6E\u4E0E\u6B64\u5185\u5BB9\u76F8\u8FD1\u7684\u6807\u7B7E
-proposed.tags=\u5982\u4E0B\u6807\u7B7E\u4EE3\u8868\u4E86\u60A8\u7684\u5185\u5BB9\uFF1A
-reflexion.too.long=\u60A8\u63D0\u4F9B\u7684\u53CD\u601D\u6D3B\u52A8\u5185\u5BB9\u8D85\u51FA\u4E86\u6700\u5927\u503C\u3002\u957F\u5EA6\u4E3A({0}\u4E2A\u5B57\u7B26)\u3002
-step0.description=\u8BB0\u5F55\u5143\u6570\u636E
-step0.file.description=\u4E0A\u4F20\u6587\u4EF6
-step0.file.short.descr=\u4E0A\u4F20\u8BC1\u660E\u6587\u4EF6
-step0.short.descr=\u8BB0\u5F55\u8BC1\u660E\u7684\u5404\u79CD\u5143\u6570\u636E
-step0.text.description=\u8BB0\u5F55\u5185\u5BB9
-step0.text.short.descr=\u8BB0\u5F55\u8BC1\u660E\u7684\u5185\u5BB9\u548C\u5143\u6570\u636E
-step1.description=\u8BF4\u660E\u6807\u7B7E
-step1.short.descr=\u4E3A\u6B64\u8BC1\u660E\u6DFB\u52A0\u6807\u7B7E\u6216\u5173\u952E\u5B57
-step2.description=\u786E\u8BA4\u521B\u5EFA\u8005\u6743\u9650
-step2.short.descr=\u8BF7\u786E\u5B9A\u60A8\u662F\u5426\u662F\u6B64\u8BC1\u660E\u7684\u521B\u5EFA\u8005\u548C\u5177\u6709\u76F8\u5E94\u7684\u6743\u9650\u3002
-
-step3.description=\u8BB0\u5F55\u53CD\u601D
-step3.short.descr=\u8BF7\u8BB0\u5F55\u4E0B\u4E3A\u4EC0\u4E48\u60A8\u9009\u62E9\u4E86\u8FD9\u4E2A\u6863\u6848\u3002
-step4.description=\u9009\u62E9\u6587\u4EF6\u5939
-step4.my.maps=\u6211\u7684\u7D2F\u79EF\u6027\u6587\u4EF6\u5939
-step4.short.descr=\u8BF7\u9009\u62E9\u8981\u5C06\u6B64\u6863\u6848\u6DFB\u52A0\u5230\u7684\u76EE\u6807\u4F4D\u7F6E(\u6587\u4EF6\u5939\u3001\u9875\u9762\u6216\u7ED3\u6784\u6027\u5143\u7D20)\u3002\u60A8\u4E5F\u53EF\u4EE5\u5148\u7565\u8FC7\u6B64\u6B65\uFF0C\u7B49\u4EE5\u540E\u518D\u5C06\u5176\u5F52\u6574\u5230\u6587\u4EF6\u5939\u4E2D\u3002\u5982\u679C\u60A8\u60F3\u8FD9\u6837\u505A\uFF0C\u8BF7\u76F4\u63A5\u70B9\u51FB\u201C\u5B8C\u6210\u201D\u3002
-stepform.cancel=\u53D6\u6D88
-stepform.submit=\u4FDD\u5B58
-tag.input.hint=\u70B9\u51FB\u6B64\u5904\u4EE5\u6DFB\u52A0\u65B0\u7684\u6807\u7B7E\u3002
-tagging.intro=\u4E3A\u4E86\u65E5\u540E\u65B9\u4FBF\u7684\u627E\u5230\u4F60\u7684\u6863\u6848\uFF0C\u8BF7\u7ED9\u5B83\u6253\u4E0A\u6807\u7B7E(\u63D0\u4F9B\u201C\u5173\u952E\u5B57\u201D)\u3002\u60A8\u53EF\u4EE5\u6253\u4E0A\u591A\u4E2A\u6807\u7B7E\u3002\u5F53\u60A8\u8F93\u5165\u5173\u952E\u8BCD\u67E5\u627E\u65F6\uFF0C\u4ED6\u4EEC\u4F1A\u4F5C\u4E3A\u63D0\u793A\u4FE1\u606F\u51FA\u73B0\u3002\u8BF7\u7528\u9017\u53F7\u5206\u9694\u8FD9\u4E9B\u6807\u7B7E\u3002
-tagging.intro.existing=\u4ECE\u4EE5\u4E0B\u5217\u8868\u4E2D\u9009\u62E9\u5DF2\u5B58\u5728\u7684\u6807\u7B7E\u3002
-text.artefact.source.info=\u4E0A\u4F20\u6587\u672C
-users.tags=\u4F60\u7ECF\u5E38\u4F7F\u7528\u768450\u4E2A\u6807\u7B7E\uFF1A
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/edit/EPReflexionWrapperController.java b/src/main/java/org/olat/portfolio/ui/artefacts/edit/EPReflexionWrapperController.java
deleted file mode 100644
index 19b5b6493256f4d5751575bfae222adcbc51470e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/edit/EPReflexionWrapperController.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.edit;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-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.gui.control.generic.closablewrapper.CloseableCalloutWindowController;
-import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.Util;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.model.structel.StructureStatusEnum;
-import org.olat.portfolio.ui.artefacts.collect.EPCollectStepForm03;
-import org.olat.portfolio.ui.artefacts.collect.EPReflexionChangeEvent;
-import org.olat.portfolio.ui.artefacts.view.EPArtefactViewController;
-import org.olat.portfolio.ui.artefacts.view.EPReflexionViewController;
-import org.olat.portfolio.ui.structel.EPStructureChangeEvent;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * Wrapper controller, to instantiate a reflexion-editor or viewer depending on config
- * 
- * <P>
- * Initial Date: 21.03.2011 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPReflexionWrapperController extends BasicController {
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	private Controller reflexionCtrl;
-	private boolean mapClosed;
-	private EPSecurityCallback secCallback;
-	private AbstractArtefact artefact;
-	private PortfolioStructure struct;
-	private CloseableModalController reflexionBox;
-
-	public EPReflexionWrapperController(UserRequest ureq, WindowControl wControl, EPSecurityCallback secCallback,
-			AbstractArtefact artefact, PortfolioStructure struct) {
-		super(ureq, wControl);
-		if (struct != null && struct.getRoot() instanceof PortfolioStructureMap) {
-			mapClosed = StructureStatusEnum.CLOSED.equals(((PortfolioStructureMap) struct.getRoot()).getStatus());
-		} else {
-			mapClosed = false;
-		}
-		this.secCallback = secCallback;
-		this.artefact = artefact;
-		this.struct = struct;
-		setTranslator(Util.createPackageTranslator(EPArtefactViewController.class, ureq.getLocale(), getTranslator()));
-
-		init(ureq);
-	}
-
-	private void init(UserRequest ureq) {
-		removeAsListenerAndDispose(reflexionCtrl);
-		String title = "";
-		boolean artClosed = ePFMgr.isArtefactClosed(artefact);
-		if (mapClosed || !secCallback.canEditReflexion() || (artClosed && struct == null)) {
-			// reflexion cannot be edited, view only!
-			reflexionCtrl = new EPReflexionViewController(ureq, getWindowControl(), artefact, struct);
-		} else {
-			// check for an existing reflexion on the artefact <-> struct link
-			String reflexion = ePFMgr.getReflexionForArtefactToStructureLink(artefact, struct);
-			if (StringHelper.containsNonWhitespace(reflexion)) {
-				// edit an existing reflexion
-				reflexionCtrl = new EPCollectStepForm03(ureq, getWindowControl(), artefact, reflexion);
-				title = translate("title.reflexion.link");
-			} else if (struct != null) {
-				// no reflexion on link yet, show warning and preset with
-				// artefacts-reflexion
-				reflexionCtrl = new EPCollectStepForm03(ureq, getWindowControl(), artefact, true);
-				title = translate("title.reflexion.artefact");
-			} else {
-				// preset controller with reflexion of the artefact. used by
-				// artefact-pool
-				reflexionCtrl = new EPCollectStepForm03(ureq, getWindowControl(), artefact);
-				title = translate("title.reflexion.artefact");
-			}
-		}
-		listenTo(reflexionCtrl);
-		removeAsListenerAndDispose(reflexionBox);
-		reflexionBox = new CloseableModalController(getWindowControl(), title, reflexionCtrl.getInitialComponent());
-		listenTo(reflexionBox);
-		reflexionBox.activate();
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.Component,
-	 *      org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		// 
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		if (source == reflexionCtrl && event instanceof EPReflexionChangeEvent) {
-			EPReflexionChangeEvent refEv = (EPReflexionChangeEvent) event;
-			if (struct != null) {
-				ePFMgr.setReflexionForArtefactToStructureLink(refEv.getRefArtefact(), struct, refEv.getReflexion());
-				reflexionBox.deactivate();
-				fireEvent(ureq, new EPStructureChangeEvent(EPStructureChangeEvent.ADDED, struct));
-			} else {
-				AbstractArtefact refArtefact = refEv.getRefArtefact();
-				refArtefact.setReflexion(refEv.getReflexion());
-				ePFMgr.updateArtefact(refArtefact);
-				reflexionBox.deactivate();
-				fireEvent(ureq, Event.DONE_EVENT);
-			}
-			removeAsListenerAndDispose(reflexionBox);
-		} else if (source == reflexionBox && event == CloseableCalloutWindowController.CLOSE_WINDOW_EVENT) {
-			removeAsListenerAndDispose(reflexionBox);
-			reflexionBox = null;
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// nothing
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/edit/EPTagsController.java b/src/main/java/org/olat/portfolio/ui/artefacts/edit/EPTagsController.java
deleted file mode 100644
index e3113a0c7c1cd7bf8c56ebbeff4c9c817b73de96..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/edit/EPTagsController.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.edit;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-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.generic.closablewrapper.CloseableModalController;
-import org.olat.core.gui.control.generic.wizard.StepFormBasicController;
-import org.olat.core.util.Util;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.model.structel.StructureStatusEnum;
-import org.olat.portfolio.ui.artefacts.collect.EPCollectStepForm01;
-import org.olat.portfolio.ui.artefacts.view.EPArtefactViewController;
-import org.olat.portfolio.ui.artefacts.view.EPTagViewController;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * 
- * Initial date: 16.07.2014<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public class EPTagsController extends StepFormBasicController {
-
-	private boolean mapClosed;
-	private EPSecurityCallback secCallback;
-	private PortfolioStructure struct;
-	private AbstractArtefact artefact;
-	
-	private Controller tagsCtrl;
-	private CloseableModalController tagsModalCtrl;
-	
-	@Autowired
-	private EPFrontendManager ePFMgr;
-
-	public EPTagsController(UserRequest ureq, WindowControl wControl, EPSecurityCallback secCallback,
-			AbstractArtefact artefact, PortfolioStructure struct) {
-		super(ureq, wControl);
-		this.artefact = artefact;
-		
-		if (struct != null && struct.getRoot() instanceof PortfolioStructureMap) {
-			mapClosed = StructureStatusEnum.CLOSED.equals(((PortfolioStructureMap) struct.getRoot()).getStatus());
-		} else {
-			mapClosed = false;
-		}
-		this.secCallback = secCallback;
-		this.artefact = artefact;
-		this.struct = struct;
-		setTranslator(Util.createPackageTranslator(EPArtefactViewController.class, ureq.getLocale(), getTranslator()));
-
-		initForm(ureq);
-	}
-
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		removeAsListenerAndDispose(tagsCtrl);
-		removeAsListenerAndDispose(tagsModalCtrl);
-		
-		boolean artClosed = ePFMgr.isArtefactClosed(artefact);
-		if ( mapClosed || !secCallback.canEditTags() || (artClosed && struct == null)) {
-			// reflexion cannot be edited, view only!
-			tagsCtrl = new EPTagViewController(ureq, getWindowControl(), artefact);
-		} else {
-			tagsCtrl = new EPCollectStepForm01(ureq, getWindowControl(), artefact);
-		}
-		listenTo(tagsCtrl);
-
-		String title = translate("artefact.tags.title");
-		tagsModalCtrl = new CloseableModalController(getWindowControl(), title, tagsCtrl.getInitialComponent(), true, title);
-		listenTo(tagsModalCtrl);
-		tagsModalCtrl.activate();
-	}
-
-	@Override
-	protected void formOK(UserRequest ureq) {
-		//
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		if(tagsModalCtrl == source) {
-			cleanUp();
-		} else if(tagsCtrl == source) {
-			tagsModalCtrl.deactivate();
-			cleanUp();
-			if(event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) {
-				fireEvent(ureq, event);
-			}
-		}
-		super.event(ureq, source, event);
-	}
-	
-	private void cleanUp() {
-		removeAsListenerAndDispose(tagsCtrl);
-		removeAsListenerAndDispose(tagsModalCtrl);
-		tagsCtrl = null;
-		tagsModalCtrl = null;
-	}
-
-	@Override
-	protected void doDispose() {
-		// nothing
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/ArtefactTableDataModel.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/ArtefactTableDataModel.java
deleted file mode 100644
index 123a8f37e585a2a039e5bd19dd373509767717ca..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/ArtefactTableDataModel.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.view;
-
-import java.util.List;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.components.table.DefaultTableDataModel;
-import org.olat.core.util.StringHelper;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.user.UserManager;
-
-/**
- * Description:<br>
- * datamodel for a table with artefacts in it
- * 
- * <P>
- * Initial Date: 20.08.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class ArtefactTableDataModel extends DefaultTableDataModel<AbstractArtefact> {
-
-	private final UserManager userManager;
-	private final EPFrontendManager ePFMgr;
-
-	public ArtefactTableDataModel(List<AbstractArtefact> artefacts) {
-		super(artefacts);
-		userManager = CoreSpringFactory.getImpl(UserManager.class);
-		ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.table.DefaultTableDataModel#getColumnCount()
-	 */
-	@Override
-	public int getColumnCount() {
-		return 6;
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.table.DefaultTableDataModel#getValueAt(int,
-	 *      int)
-	 */
-	@Override
-	public Object getValueAt(int row, int col) {
-		AbstractArtefact artefact = objects.get(row);
-		switch (col) {
-			case 0:
-				return artefact.getTitle();
-			case 1:
-				return artefact.getDescription();
-			case 2:
-				return artefact.getCreationDate();
-			case 3:
-				return userManager.getUserDisplayName(artefact.getAuthor());
-			case 4: 
-				List<String> artTags = ePFMgr.getArtefactTags(artefact);
-				return StringHelper.formatAsCSVString(artTags);
-			case 5:
-				return artefact;
-			default:
-				return "ERROR";
-		}
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/ArtefactTypeImageCellRenderer.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/ArtefactTypeImageCellRenderer.java
deleted file mode 100644
index 6b26cfc77a9b2e7e190ca02c447706cfca5c0db0..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/ArtefactTypeImageCellRenderer.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.view;
-
-import java.util.Locale;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.components.table.CustomCellRenderer;
-import org.olat.core.gui.render.Renderer;
-import org.olat.core.gui.render.StringOutput;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.util.Util;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.ui.filter.PortfolioFilterController;
-
-/**
- * Description:<br>
- * presents image for artefact type in table
- * 
- * <P>
- * Initial Date:  02.12.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class ArtefactTypeImageCellRenderer implements CustomCellRenderer {
-	
-	private final PortfolioModule portfolioModule;
-	private final Translator translator;
-	
-	public ArtefactTypeImageCellRenderer(Locale locale) {
-		portfolioModule = CoreSpringFactory.getImpl(PortfolioModule.class);
-		translator = Util.createPackageTranslator(ArtefactTypeImageCellRenderer.class, locale);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.table.CustomCellRenderer#render(org.olat.core.gui.render.StringOutput, org.olat.core.gui.render.Renderer, java.lang.Object, java.util.Locale, int, java.lang.String)
-	 */
-	@Override
-	public void render(StringOutput sb, Renderer renderer, Object val, Locale locale, int alignment, String action) {
-		if (val instanceof AbstractArtefact){
-			AbstractArtefact artefact = (AbstractArtefact) val;
-			EPArtefactHandler<?> artHandler = portfolioModule.getArtefactHandler(artefact.getResourceableTypeName());
-			
-			Translator handlerTrans = artHandler.getHandlerTranslator(translator);
-			String handlerClass = PortfolioFilterController.HANDLER_PREFIX + artHandler.getClass().getSimpleName() + PortfolioFilterController.HANDLER_TITLE_SUFFIX;
-			String artType = handlerTrans.translate(handlerClass);
-			String artIcon = artefact.getIcon();
-			
-			sb.append("<i class='o_icon o_icon-lg ").append(artIcon)
-			  .append("' title=\"").append(artType)
-			  .append("\"> </i>");
-		}
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactAttributeSettingController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactAttributeSettingController.java
deleted file mode 100644
index b70ef7070b68c62815da119f2cbcbef466450300..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactAttributeSettingController.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.view;
-
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItem;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.components.form.flexible.impl.FormEvent;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.Event;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.portfolio.manager.EPFrontendManager;
-
-/**
- * 
- * Description:<br>
- * Allows to set the attributes which then will be displayed for an artefact.
- * settings are persisted as property.
- * 
- * <P>
- * Initial Date:  13.07.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPArtefactAttributeSettingController extends FormBasicController {
-
-	private Map<String, Boolean> artAttribConfig;
-	private EPFrontendManager ePFMgr;
-
-	public EPArtefactAttributeSettingController(UserRequest ureq, WindowControl wControl, Map<String, Boolean> artAttribConfig) {
-		super(ureq, wControl);
-		this.artAttribConfig = artAttribConfig;
-		ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-		initForm(ureq);
-	}
-
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		setFormDescription("display.option.intro");
-
-		String[] keys = new String[] { "onoff" };
-		String[] values = new String[] { translate("display.option.enabled") };
-		Map<String, Boolean> allArtAttribs = ePFMgr.getArtefactAttributeConfig(null);
-		for (Iterator<Entry<String, Boolean>> iterator = allArtAttribs.entrySet().iterator(); iterator.hasNext();) {
-			Entry<String, Boolean> entry = iterator.next();
-			String attKey = entry.getKey();
-			Boolean attVal = artAttribConfig.get(attKey);			
-			MultipleSelectionElement chkBox = uifactory.addCheckboxesHorizontal(attKey, formLayout, keys, values);
-			chkBox.addActionListener(FormEvent.ONCHANGE );
-			if (attVal == null) attVal = entry.getValue(); // either use users settings or the defaults
-			chkBox.select(keys[0], attVal);
-		}
-		uifactory.addFormSubmitButton("display.option.submit", formLayout);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.form.flexible.FormItem,
-	 *      org.olat.core.gui.components.form.flexible.impl.FormEvent)
-	 */
-	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
-		if (source instanceof MultipleSelectionElement){
-			MultipleSelectionElement chkBox = (MultipleSelectionElement) source;
-			artAttribConfig.put(chkBox.getName(), chkBox.isSelected(0));
-		}
-	}
-
-	@Override
-	protected void formOK(UserRequest ureq) {
-		//fire event to close overlay and update the displayed
-		// artefacts
-		ePFMgr.setArtefactAttributeConfig(getIdentity(), artAttribConfig);
-		fireEvent(ureq, Event.DONE_EVENT);
-	}
-
-	@Override
-	protected void doDispose() {
-		// nothing to dispose
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactChoosenEvent.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactChoosenEvent.java
deleted file mode 100644
index 630b23d25b7f6b1818b6453d4c3392353b13ae7c..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactChoosenEvent.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.view;
-
-import org.olat.core.gui.control.Event;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * Description:<br>
- * event is sent, when an artefact was selected, also transports the selected artefact
- * 
- * <P>
- * Initial Date:  25.08.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPArtefactChoosenEvent extends Event {
-
-	private static final long serialVersionUID = 3621326017804909627L;
-	private AbstractArtefact artefact;
-
-	public EPArtefactChoosenEvent(AbstractArtefact artefact) {
-		super("artefactChoosen");
-		this.artefact = artefact;
-	}
-	
-	/**
-	 * @return Returns the artefact.
-	 */
-	public AbstractArtefact getArtefact() {
-		return artefact;
-	}
-	
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactDeletedEvent.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactDeletedEvent.java
deleted file mode 100644
index 03146f17480a161d4def49fcb07d8e21d3ac9543..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactDeletedEvent.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <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
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <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>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-package org.olat.portfolio.ui.artefacts.view;
-
-import org.olat.core.gui.control.Event;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * Description:<br>
- * event used, when an artefact got deleted in gui
- * 
- * <P>
- * Initial Date:  12.01.2011 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPArtefactDeletedEvent extends Event {
-
-	private static final long serialVersionUID = -3990634156779087562L;
-	public static final String ARTEFACT_DELETED = "artefactDeleted";
-	private final Long oldArtefactKey;
-	private final AbstractArtefact artefact;
-
-	public EPArtefactDeletedEvent(AbstractArtefact artefact) {
-		super(ARTEFACT_DELETED);
-		this.artefact = artefact;
-		this.oldArtefactKey = artefact.getKey();
-	}
-
-	/**
-	 * @return Returns the oldArtefactKey.
-	 */
-	public Long getOldArtefactKey() {
-		return oldArtefactKey;
-	}
-
-	/**
-	 * @return Returns the artefact.
-	 */
-	public AbstractArtefact getArtefact() {
-		return artefact;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactListChoosenEvent.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactListChoosenEvent.java
deleted file mode 100644
index 8f5e7e2004a4b7322899e99906551e10ec94662c..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactListChoosenEvent.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.view;
-
-import java.util.List;
-
-import org.olat.core.gui.control.Event;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * 
- * Initial date: 12.08.2016<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public class EPArtefactListChoosenEvent extends Event {
-
-	private static final long serialVersionUID = 3315648841308296779L;
-	private List<AbstractArtefact> artefacts;
-
-	public EPArtefactListChoosenEvent(List<AbstractArtefact> artefacts) {
-		super("artefactChoosen");
-		this.artefacts = artefacts;
-	}
-	
-	/**
-	 * @return Returns the artefact.
-	 */
-	public List<AbstractArtefact> getArtefacts() {
-		return artefacts;
-	}
-	
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java
deleted file mode 100644
index 3cb56249f2f360f5503e4a02be4b8b380ecf5e88..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java
+++ /dev/null
@@ -1,409 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <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
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <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>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-package org.olat.portfolio.ui.artefacts.view;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.olat.NewControllerFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.form.flexible.FormItem;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.FormLink;
-import org.olat.core.gui.components.form.flexible.elements.TextBoxListElement;
-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.FormEvent;
-import org.olat.core.gui.components.link.Link;
-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.generic.closablewrapper.CloseableCalloutWindowController;
-import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
-import org.olat.core.gui.control.generic.modal.DialogBoxController;
-import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
-import org.olat.core.id.context.BusinessControlFactory;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
-import org.olat.core.util.Formatter;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.filter.FilterFactory;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.EPLoggingAction;
-import org.olat.portfolio.EPUIFactory;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.ui.artefacts.collect.EPCollectStepForm00;
-import org.olat.portfolio.ui.artefacts.collect.EPCollectStepForm03;
-import org.olat.portfolio.ui.artefacts.collect.EPReflexionChangeEvent;
-import org.olat.resource.OLATResource;
-import org.olat.util.logging.activity.LoggingResourceable;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * Shows an Artefact itself 
- * 
- * <P>
- * Initial Date: 09.07.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, frentix GmbH
- */
-public class EPArtefactViewController extends FormBasicController {
-
-	private AbstractArtefact artefact;
-	private TextElement title;
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	private FormLink deleteBtn;
-	private DialogBoxController delYesNoDialog;
-	private Map<String, Boolean> artAttribConfig;
-	private boolean artefactChooseMode;
-	private FormLink chooseBtn;
-	private TextBoxListElement tblE;
-	private boolean viewOnlyMode;
-	private boolean artefactInClosedMap;
-	@Autowired
-	private PortfolioModule portfolioModule;
-	private final boolean detailsLinkEnabled;
-	
-	private CloseableModalController artefactBox;
-	private FormLink detailsLink;
-	private FormLink reflexionBtn;
-	private EPCollectStepForm03 reflexionCtrl;
-	private FormLink descriptionBtn;
-	private EPCollectStepForm00 descriptionCtrl;
-	private CloseableCalloutWindowController calloutCtrl;
-
-	public EPArtefactViewController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, Map<String, Boolean> artAttribConfig, boolean artefactChooseMode, boolean viewOnlyMode, boolean detailsLink) {
-		super(ureq, wControl, "singleArtefact");
-		
-		this.artefact = artefact;
-		this.artefactChooseMode = artefactChooseMode;
-		this.artefactInClosedMap = ePFMgr.isArtefactClosed(artefact);
-		this.viewOnlyMode = viewOnlyMode;
-		this.detailsLinkEnabled = detailsLink;
-		
-		if (viewOnlyMode){
-			artAttribConfig = ePFMgr.getArtefactAttributeConfig(null); //get a default config
-			// only enable a minimal set, not users settings
-			artAttribConfig.put("artefact.author", true);
-			artAttribConfig.put("artefact.description", true);
-			artAttribConfig.put("artefact.reflexion", true);
-			artAttribConfig.put("artefact.source", true);
-			artAttribConfig.put("artefact.sourcelink", true);
-			artAttribConfig.put("artefact.title", false);
-			artAttribConfig.put("artefact.date", true);
-			artAttribConfig.put("artefact.tags", true);
-			artAttribConfig.put("artefact.used.in.maps", true);
-			artAttribConfig.put("artefact.handlerdetails", true);
-		}
-		if (artefactChooseMode){
-			artAttribConfig = ePFMgr.getArtefactAttributeConfig(null); //get a default config
-			// only enable a minimal set, not users settings
-			artAttribConfig.put("artefact.author", false);
-			artAttribConfig.put("artefact.description", true);
-			artAttribConfig.put("artefact.reflexion", false);
-			artAttribConfig.put("artefact.source", true);
-			artAttribConfig.put("artefact.sourcelink", false);
-			artAttribConfig.put("artefact.title", false);
-			artAttribConfig.put("artefact.date", true);
-			artAttribConfig.put("artefact.tags", false);
-			artAttribConfig.put("artefact.used.in.maps", false);
-		}
-		if (artAttribConfig==null){
-			artAttribConfig = ePFMgr.getArtefactAttributeConfig(getIdentity());
-		}
-		this.artAttribConfig = artAttribConfig;
-
-		initForm(ureq);
-	}
-	
-	/**
-	 * load without a config will display artefact with default displayconfig / or users preferences
-	 * use this, when no ArtefactAttributeSettingsController is in the view to make settings!
-	 * @param ureq
-	 * @param wControl
-	 */
-	public EPArtefactViewController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact){
-		this(ureq, wControl, artefact, null, false, false, false);		
-	}
-	
-	/**
-	 * load without a config in view-only mode (mostly in popups)
-	 * @param ureq
-	 * @param wControl
-	 * @param artefact
-	 * @param viewOnlyMode
-	 */
-	public EPArtefactViewController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, boolean viewOnlyMode){
-		this(ureq, wControl, artefact, null, false, viewOnlyMode, false);		
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		if(detailsLinkEnabled && !artefactChooseMode) {
-			detailsLink = uifactory.addFormLink("details.link", formLayout, Link.BUTTON);
-			detailsLink.setElementCssClass("o_sel_artefact_details");
-		}
-
-		title = uifactory.addInlineTextElement("title", artefact.getTitle(), formLayout, this);
-		
-		flc.contextPut("cssClosed", artefactInClosedMap ? "o_artefact_closed" : "");
-		flc.contextPut("viewOnly", viewOnlyMode);
-		
-		if (viewOnlyMode || artefactInClosedMap) title.setEnabled(false);
-		// get tags and prepare textboxlist-component 
-		List<String> tagL = ePFMgr.getArtefactTags(artefact);	
-		Map<String, String> tagLM = new HashMap<>();
-		for (String tag : tagL) {
-			tagLM.put(tag, tag);
-		}	
-		tblE = uifactory.addTextBoxListElement("tagTextbox", null, "tag.textboxlist.hint", tagLM, formLayout, getTranslator());
-		if (viewOnlyMode || artefactInClosedMap) {
-			tblE.setEnabled(false);
-		} else {
-			Map<String, String> allUsersTags = ePFMgr.getUsersMostUsedTags(getIdentity(), -1);
-			tblE.setAutoCompleteContent(allUsersTags);
-		}
-
-		// get maps wherein this artefact is linked and create links to them
-		List<PortfolioStructure> linkedMaps = ePFMgr.getReferencedMapsForArtefact(artefact);
-		if (linkedMaps != null && linkedMaps.size() != 0) {
-			List<FormLink> selectMapNames = new ArrayList<>(linkedMaps.size());
-			int count = 0;
-			for (PortfolioStructure ePMap : linkedMaps) {
-				String mapTitle = StringHelper.escapeHtml(ePMap.getTitle());
-				FormLink selectMap = uifactory.addFormLink("map-" + count++, "map", mapTitle, null, formLayout, Link.NONTRANSLATED);
-				selectMap.setUserObject(ePMap.getOlatResource());
-				selectMap.setEnabled(!viewOnlyMode && !artefactChooseMode);
-				selectMapNames.add(selectMap);
-			}
-			flc.contextPut("maps", selectMapNames);
-		}
-
-		// build link to original source
-		if (StringHelper.containsNonWhitespace(artefact.getBusinessPath())) {
-			String sourceLink = createLinkToArtefactSource(ureq, artefact.getBusinessPath());
-			flc.contextPut("artefactSourceLink", sourceLink);			
-		}
-		
-		// create a delete button
-		deleteBtn = uifactory.addFormLink("delete.artefact", formLayout, Link.BUTTON);
-		deleteBtn.setIconLeftCSS("o_icon o_icon_delete");
-		deleteBtn.addActionListener(FormEvent.ONCLICK);
-		if (viewOnlyMode || artefactChooseMode || artefactInClosedMap) deleteBtn.setVisible(false);
-		
-		// let the artefact-handler paint what is special for this kind of artefact
-		EPArtefactHandler<?> artHandler = portfolioModule.getArtefactHandler(artefact.getResourceableTypeName());
-		Controller detCtrl = artHandler.createDetailsController(ureq, getWindowControl(), artefact, viewOnlyMode || artefactInClosedMap);
-		if (detCtrl != null) {
-			flc.put("detailsController", detCtrl.getInitialComponent());
-		}
-				
-		// create edit buttons the adapt meta-data
-		if (!(viewOnlyMode || artefactChooseMode || artefactInClosedMap)){
-			String reflexion = artefact.getReflexion();
-			reflexion = FilterFactory.getHtmlTagAndDescapingFilter().filter(reflexion);
-			reflexion = StringHelper.xssScan(reflexion);
-			reflexion = Formatter.truncate(reflexion, 50);
-			if (!StringHelper.containsNonWhitespace(reflexion)) {
-				reflexion = "&nbsp; "; // show a link even if empty
-			}
-			reflexionBtn = uifactory.addFormLink("reflexionBtn", reflexion, null, formLayout, Link.NONTRANSLATED);
-			reflexionBtn.setIconLeftCSS("o_icon o_icon_inline_editable");
-			
-			String description = artefact.getDescription();
-			description = FilterFactory.getHtmlTagAndDescapingFilter().filter(description);
-			description = Formatter.truncate(description, 50);
-			description = StringHelper.xssScan(description);
-			if (!StringHelper.containsNonWhitespace(description)) {
-				description = "&nbsp; "; // show a link even if empty
-			}
-			descriptionBtn = uifactory.addFormLink("descriptionBtn", description, null, formLayout, Link.NONTRANSLATED);
-			descriptionBtn.setIconLeftCSS("o_icon o_icon_inline_editable");
-		}
-		
-		// if in artefactChooseMode, add an "choose this" button
-		if(artefactChooseMode) {
-			chooseBtn = uifactory.addFormLink("choose.artefact", formLayout, Link.BUTTON);
-			chooseBtn.addActionListener(FormEvent.ONCLICK);
-		}
-		
-		flc.contextPut("artefact", artefact);
-		
-		setArtAttribConfig(artAttribConfig);		
-	}
-
-	protected void setArtAttribConfig(Map<String, Boolean> attribConfig) {
-		flc.contextRemove("artAttribConfig");
-		flc.contextPut("artAttribConfig", attribConfig);
-	}
-
-	private void doOpenLinkToMap(UserRequest ureq, OLATResource mapResource) {
-		String businessPath = "[" + mapResource.getResourceableTypeName() + ":"
-				+ mapResource.getResourceableId() + "]";
-		NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl());
-	}
-
-	private String createLinkToArtefactSource(UserRequest ureq, String businessPath){
-		BusinessControlFactory bCF = BusinessControlFactory.getInstance(); 
-		List<ContextEntry> ceList = bCF.createCEListFromString(businessPath);
-		boolean valid = (ceList.size() > 0) && NewControllerFactory.getInstance().validateCEWithContextControllerCreator(ureq, getWindowControl(), ceList.get(0));
-		String busLink = bCF.getAsURIString(ceList, true); 
-		if (valid && StringHelper.containsNonWhitespace(busLink)){
-			return "<a href=\"" + busLink + "\">" + translate("artefact.open.source") + "</a>";
-		} else return translate("artefact.no.source");
-	}
-	
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.form.flexible.FormItem,
-	 *      org.olat.core.gui.components.form.flexible.impl.FormEvent)
-	 */
-	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
-		super.formInnerEvent(ureq, source, event);
-		if (source == deleteBtn) {
-			String text = translate("delete.artefact.text", StringHelper.escapeHtml(artefact.getTitle()));
-			delYesNoDialog = activateYesNoDialog(ureq, translate("delete.artefact"), text, delYesNoDialog);
-		} else if (source == chooseBtn){
-			fireEvent(ureq, new EPArtefactChoosenEvent(artefact));
-		} else if (source == detailsLink) {
-			popupArtefact(ureq);
-		} else if (source == reflexionBtn) {
-			popupReflexionCallout(ureq);
-		} else if (source == descriptionBtn){
-			popupDescriptionCallout(ureq);
-		} else if(source == tblE){
-			List<String> actualTags = tblE.getValueList();
-			ePFMgr.setArtefactTags(getIdentity(), artefact, actualTags);
-		} else if(source instanceof FormLink) {
-			FormLink link = (FormLink)source;
-			if("map".equals(link.getCmd())) {
-				OLATResource map = (OLATResource)link.getUserObject();
-				doOpenLinkToMap(ureq, map);
-			}
-		}
-	}
-	
-	private void popupDescriptionCallout(UserRequest ureq) {
-		descriptionCtrl = new EPCollectStepForm00(ureq, getWindowControl(), artefact);
-		listenTo(descriptionCtrl);				
-		instantiateCalloutController(ureq, descriptionCtrl.getInitialComponent(), descriptionBtn);
-	}
-	
-
-	private void popupReflexionCallout(UserRequest ureq) {
-		reflexionCtrl = new EPCollectStepForm03(ureq, getWindowControl(), artefact);
-		listenTo(reflexionCtrl);		
-		instantiateCalloutController(ureq, reflexionCtrl.getInitialComponent(), reflexionBtn);
-	}
-
-	/**
-	 * re-use the same callout-controller, as there can be only one anyway
-	 * @param ureq
-	 * @param content
-	 * @param button
-	 */
-	private void instantiateCalloutController(UserRequest ureq, Component content, FormLink button){
-		removeAsListenerAndDispose(calloutCtrl);
-		calloutCtrl = new CloseableCalloutWindowController(ureq, getWindowControl(), content, button, artefact.getTitle(), true, null);
-		listenTo(calloutCtrl);
-		calloutCtrl.activate();		
-	}
-
-	protected void popupArtefact(UserRequest ureq) {
-		String boxTitle = translate("view.artefact.header");
-		artefactBox = EPUIFactory.getAndActivatePopupArtefactController(artefact, ureq, getWindowControl(), boxTitle);
-		listenTo(artefactBox);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		super.event(ureq, source, event);
-		if (source == delYesNoDialog) {
-			if (DialogBoxUIFactory.isYesEvent(event)) {
-				ePFMgr.deleteArtefact(artefact);
-				flc.setVisible(false);
-				fireEvent(ureq, new EPArtefactDeletedEvent(artefact));
-				ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapPortfolioOres(artefact));
-				ThreadLocalUserActivityLogger.log(EPLoggingAction.EPORTFOLIO_ARTEFACT_REMOVED, getClass());
-			}
-		} else if (source == reflexionCtrl && event instanceof EPReflexionChangeEvent){
-			EPReflexionChangeEvent refEv = (EPReflexionChangeEvent) event;
-			artefact.setReflexion(refEv.getReflexion());
-			ePFMgr.updateArtefact(artefact);
-			calloutCtrl.deactivate();
-			closeCalloutController();
-			initForm(ureq);
-		} else if (source == calloutCtrl){
-			closeCalloutController();
-		} else if (source == descriptionCtrl) {
-			ePFMgr.updateArtefact(artefact);
-			calloutCtrl.deactivate();
-			closeCalloutController();
-			initForm(ureq);
-		}
-	}
-	
-	private void closeCalloutController(){
-		removeAsListenerAndDispose(calloutCtrl);
-		calloutCtrl = null;
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void formOK(UserRequest ureq) {
-		String newTitle = title.getValue();
-		artefact.setTitle(newTitle);
-		ePFMgr.updateArtefact(artefact);
-		initForm(ureq);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// nothing to dispose
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewOptionsLinkController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewOptionsLinkController.java
deleted file mode 100644
index feb415f8c18261de7a515b6f80d75ba40cf8ef2f..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewOptionsLinkController.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.view;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.gui.control.generic.closablewrapper.CloseableCalloutWindowController;
-import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.ui.artefacts.collect.EPCollectStepForm04;
-import org.olat.portfolio.ui.artefacts.edit.EPReflexionWrapperController;
-import org.olat.portfolio.ui.artefacts.edit.EPTagsController;
-import org.olat.portfolio.ui.structel.EPStructureChangeEvent;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description: Displays the options-Link for an artefact. handles displaying of the callout and its links 
- * (remove artefact from map, reflexion, move artefact within map)<br>
- * <P>
- * Initial Date: 14.07.2011 <br>
- * 
- * @author Sergio Trentini, sergio.trentini@frentix.com, http://www.frentix.com
- */
-public class EPArtefactViewOptionsLinkController extends BasicController {
-
-	private final AbstractArtefact artefact;
-	private PortfolioStructure struct;
-	private final EPSecurityCallback secCallback;
-	private final VelocityContainer vC;
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	
-	//controllers
-	private EPCollectStepForm04 moveTreeCtrl;
-	private CloseableModalController moveTreeBox;
-	private Controller tagsCtrl;
-	private EPReflexionWrapperController reflexionCtrl;
-	private CloseableCalloutWindowController artefactOptionCalloutCtrl;
-	
-	// the link that triggers the callout
-	private Link optionLink;
-
-	// the links within the callout
-	private Link unlinkLink;
-	private Link moveLink;
-	private Link reflexionLink;
-	private Link tagsLink;
-	
-	public EPArtefactViewOptionsLinkController(final UserRequest ureq, final WindowControl wControl, final AbstractArtefact artefact,
-			final EPSecurityCallback secCallback, final PortfolioStructure struct){
-		super(ureq,wControl);
-		this.artefact = artefact;
-		this.struct = struct;
-		this.secCallback = secCallback;
-		
-		vC = createVelocityContainer("optionsLink");
-		
-		optionLink = LinkFactory.createCustomLink("option.link", "option", " ", Link.NONTRANSLATED, vC, this);
-		optionLink.setIconLeftCSS("o_icon o_icon_actions");
-		optionLink.setTooltip(translate("option.link"));
-		
-		putInitialPanel(optionLink);
-	}
-	
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		if (source == optionLink){
-			popUpArtefactOptionsBox(ureq);
-		}else if (source == unlinkLink) {
-			closeArtefactOptionsCallout();
-			struct = ePFMgr.removeArtefactFromStructure(artefact, struct);
-			fireEvent(ureq, new EPStructureChangeEvent(EPStructureChangeEvent.REMOVED, struct)); // refresh ui
-		} else if (source == moveLink){
-			closeArtefactOptionsCallout();
-			showMoveTree(ureq);
-		} else if (source == reflexionLink) {
-			closeArtefactOptionsCallout();
-			reflexionCtrl = new EPReflexionWrapperController(ureq, getWindowControl(), secCallback, artefact, struct);
-			listenTo(reflexionCtrl);
-		} else if (source == tagsLink) {
-			closeArtefactOptionsCallout();
-			tagsCtrl = new EPTagsController(ureq, getWindowControl(), secCallback, artefact, struct);
-			listenTo(tagsCtrl);
-		}
-	}
-	
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		if (source == moveTreeCtrl && event.getCommand().equals(EPStructureChangeEvent.CHANGED)){
-			EPStructureChangeEvent epsEv = (EPStructureChangeEvent) event;
-			PortfolioStructure newStruct = epsEv.getPortfolioStructure();
-			showInfo("artefact.moved", newStruct.getTitle());
-			moveTreeBox.deactivate();
-		} else if (source == artefactOptionCalloutCtrl) {
-			removeAsListenerAndDispose(artefactOptionCalloutCtrl);
-			artefactOptionCalloutCtrl = null;
-		} else if (source == tagsCtrl) {
-			if(event == Event.DONE_EVENT) {
-				fireEvent(ureq, Event.CHANGED_EVENT);
-			}
-			removeAsListenerAndDispose(tagsCtrl);
-		}
-		fireEvent(ureq, event);
-	}
-	
-	/**
-	 * opens a modalWindow that displays the "move-tree"
-	 * 
-	 * @param ureq
-	 */
-	private void showMoveTree(UserRequest ureq){
-		moveTreeCtrl = new EPCollectStepForm04(ureq, getWindowControl(), artefact, struct);
-		listenTo(moveTreeCtrl);
-		String title = translate("artefact.move.title");
-		moveTreeBox = new CloseableModalController(getWindowControl(), title, moveTreeCtrl.getInitialComponent());
-		listenTo(moveTreeBox);
-		moveTreeBox.activate();
-	}
-	
-	/**
-	 * closes the callout
-	 */
-	private void closeArtefactOptionsCallout() {
-		if (artefactOptionCalloutCtrl != null){
-			artefactOptionCalloutCtrl.deactivate();
-			removeAsListenerAndDispose(artefactOptionCalloutCtrl);
-			artefactOptionCalloutCtrl = null;
-		}
-	}
-	
-	/**
-	 * opens the callout
-	 * @param ureq
-	 */
-	private void popUpArtefactOptionsBox(UserRequest ureq) {
-		VelocityContainer artOptVC = createVelocityContainer("artefactOptions");
-		if (secCallback.canRemoveArtefactFromStruct()){
-			unlinkLink = LinkFactory.createCustomLink("unlink.link", "remove", "remove.from.map", Link.LINK, artOptVC, this);
-		}		
-		if (secCallback.canAddArtefact() && secCallback.canRemoveArtefactFromStruct() && secCallback.isOwner()) { // isOwner: don't show move in group maps!
-			moveLink = LinkFactory.createCustomLink("move.link", "move", "artefact.options.move", Link.LINK, artOptVC, this);
-		}
-		reflexionLink = LinkFactory.createCustomLink("reflexion.link", "reflexion", "table.header.reflexion", Link.LINK, artOptVC, this);
-		if(secCallback.canEditTags()) {
-			tagsLink = LinkFactory.createCustomLink("tags.link", "tags", "artefact.tags", Link.LINK, artOptVC, this);
-		}
-		
-		String title = translate("option.link");
-		removeAsListenerAndDispose(artefactOptionCalloutCtrl);
-		artefactOptionCalloutCtrl = new CloseableCalloutWindowController(ureq, getWindowControl(), artOptVC, optionLink, title, true, null);
-		listenTo(artefactOptionCalloutCtrl);
-		artefactOptionCalloutCtrl.activate();
-	}
-	
-	@Override
-	protected void doDispose() {
-		closeArtefactOptionsCallout();
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewReadOnlyController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewReadOnlyController.java
deleted file mode 100644
index 0d24b3daec5c90c815f7b2cc9e6c725c9594f56b..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewReadOnlyController.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.view;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.gui.control.generic.closablewrapper.CloseableModalController;
-import org.olat.core.id.Identity;
-import org.olat.core.util.Formatter;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.filter.FilterFactory;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.EPUIFactory;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.user.UserManager;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * simple artefact read-only controller
- * <P>
- * Initial Date:  17.11.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPArtefactViewReadOnlyController extends BasicController {
-	
-	private Link detailsLink;
-	private VelocityContainer vC;
-	private EPArtefactViewOptionsLinkController optionsLinkCtrl;
-
-	private AbstractArtefact artefact;
-	private EPSecurityCallback secCallback;
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	
-	protected EPArtefactViewReadOnlyController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact,
-			PortfolioStructure struct, EPSecurityCallback secCallback, boolean options) {
-		super(ureq, wControl);
-		this.artefact = artefact;
-		this.secCallback = secCallback;
-		vC = createVelocityContainer("smallSingleArtefact");
-		vC.contextPut("artefact", artefact);
-		Identity artIdent = artefact.getAuthor();
-		String fullName = CoreSpringFactory.getImpl(UserManager.class).getUserDisplayName(artIdent);
-		String description = FilterFactory.getHtmlTagAndDescapingFilter().filter(artefact.getDescription());
-		description = StringHelper.xssScan(description);
-		description = Formatter.truncate(description, 50);
-		vC.contextPut("description", description);
-		vC.contextPut("authorName", StringHelper.escapeHtml(fullName));
-		if (secCallback.canView()){
-			detailsLink = LinkFactory.createCustomLink("small.details.link", "open", "small.details.link", Link.LINK, vC, this);
-			detailsLink.setElementCssClass("o_sel_artefact_details");
-			detailsLink.setIconLeftCSS("o_icon o_icon_details");
-		}
-		
-		if(options) {
-			//add the optionsLink to the artefact
-			optionsLinkCtrl = new EPArtefactViewOptionsLinkController(ureq, getWindowControl(), artefact, secCallback, struct);
-			vC.put("option.link" , optionsLinkCtrl.getInitialComponent());
-			listenTo(optionsLinkCtrl);
-		}
-		
-		updateTags();
-		putInitialPanel(vC);	
-	}
-	
-	private void updateTags() {
-		List<String> tags = ePFMgr.getArtefactTags(artefact);
-		List<String> escapedTags = new ArrayList<>(tags.size());
-		for(String tag:tags) {
-			escapedTags.add(StringHelper.escapeHtml(tag));
-		}
-		vC.contextPut("tags", StringHelper.formatAsCSVString(escapedTags));
-		vC.setDirty(true);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		if (source == detailsLink && secCallback.canView()){
-			String title = translate("view.artefact.header");
-			CloseableModalController artDetails = EPUIFactory.getAndActivatePopupArtefactController(artefact, ureq, getWindowControl(), title);
-			listenTo(artDetails);
-		} 
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		if(optionsLinkCtrl == source) {
-			if(event == Event.CHANGED_EVENT) {
-				updateTags();
-			}
-		}
-		super.event(ureq, source, event);
-		fireEvent(ureq, event);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		//
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultiArtefactsController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultiArtefactsController.java
deleted file mode 100644
index d253301b03bb3b004b2672b89b8ea77c63419951..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultiArtefactsController.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.view;
-
-import java.util.List;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.generic.dtabs.Activateable2;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * Description:<br>
- * interface for controllers which are able to show multiple artefacts and allow to reset their content
- * the setter is needed to speed up creation of all child controllers, as repaint some artefacts is faster than disposing all and display them again!
- * 
- * <P>
- * Initial Date:  16.11.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public interface EPMultiArtefactsController extends Controller, Activateable2 {
-
-	/**
-	 * signal the controller to refresh its childs or artefact-representations
-	 * @param ureq
-	 * @param artefacts
-	 */
-	public void setNewArtefactsList(UserRequest ureq, List<AbstractArtefact> artefacts);
-	
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactPreviewController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactPreviewController.java
deleted file mode 100644
index 865b3f2d27fc0839b70ab3c014d61e088ff63b55..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactPreviewController.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <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
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <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>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-package org.olat.portfolio.ui.artefacts.view;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.gui.control.generic.closablewrapper.CloseableCalloutWindowController;
-import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.StateEntry;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Initial Date: 08.07.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, frentix GmbH
- */
-public class EPMultipleArtefactPreviewController extends BasicController implements EPMultiArtefactsController {
-
-	private VelocityContainer vC;
-	private Link artAttribBtn;
-	private List<Controller> artefactCtrls;
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	private EPArtefactAttributeSettingController artAttribCtlr;
-	private Map<String, Boolean> artAttribConfig;
-	private boolean artefactChooseMode;
-	private static final int artefactsPerPage = 4;
-	private List<AbstractArtefact> artefactsFullList;
-	private CloseableCalloutWindowController artAttribCalloutCtr;
-
-	public EPMultipleArtefactPreviewController(UserRequest ureq, WindowControl wControl, List<AbstractArtefact> artefacts) {
-		this(ureq, wControl, artefacts, false);
-	}
-
-	public EPMultipleArtefactPreviewController(UserRequest ureq, WindowControl wControl, List<AbstractArtefact> artefacts, boolean artefactChooseMode) {
-		super(ureq, wControl);
-		this.artefactChooseMode = artefactChooseMode;
-		vC = createVelocityContainer("multiArtefact");
-		if (!artefactChooseMode) {
-			artAttribBtn = LinkFactory.createCustomLink("detail.options", "detail.options", "", Link.BUTTON + Link.NONTRANSLATED, vC, this);
-			artAttribBtn.setTooltip(translate("detail.options"));
-			artAttribBtn.setTitle(translate("detail.options"));
-			artAttribBtn.setIconLeftCSS("o_icon o_icon_customize");
-		}
-
-		setNewArtefactsList(ureq, artefacts);
-		
-		putInitialPanel(vC);
-	}
-
-	public EPMultipleArtefactPreviewController(UserRequest ureq, WindowControl wControl) {
-		this(ureq, wControl, null);
-	}
-
-	public void setNewArtefactsList(UserRequest ureq, List<AbstractArtefact> artefacts) {
-		this.artefactsFullList = artefacts;
-		if (artefacts != null) {
-			preparePaging(ureq, 1);
-		}
-	}
-
-	
-	private void preparePaging(UserRequest ureq, int actualPage){
-		int nrOfArtefacts = artefactsFullList.size(); 
-		vC.contextPut("artefactAmnt", Integer.toString(nrOfArtefacts));
-		if (nrOfArtefacts > artefactsPerPage){
-			int divRest = (nrOfArtefacts % artefactsPerPage);
-			int nrOfPages = (nrOfArtefacts / artefactsPerPage) + (divRest > 0 ? 1 : 0);
-			ArrayList<Link> pageLinkList = new ArrayList<>();
-			for (int i = 1; i < nrOfPages + 1; i++) {
-				Link pageLink = LinkFactory.createCustomLink("pageLink" + i, "pageLink" + i, String.valueOf(i), Link.LINK + Link.NONTRANSLATED, vC, this);
-				pageLink.setUserObject(i);
-				if (actualPage == i) pageLink.setEnabled(false);
-				pageLinkList.add(pageLink);
-			}
-			int fromIndex = (actualPage-1) * artefactsPerPage;
-			int toIndex = actualPage * artefactsPerPage;
-			if (toIndex > nrOfArtefacts) toIndex = nrOfArtefacts;
-			List<AbstractArtefact> artefactsToShow = artefactsFullList.subList(fromIndex, toIndex);
-			vC.contextPut("pageLinkList", pageLinkList);
-			initOrUpdateArtefactControllers(ureq, artefactsToShow);
-		} else {
-			// no paging needed
-			vC.contextRemove("pageLinkList");
-			initOrUpdateArtefactControllers(ureq, artefactsFullList);
-		}		
-	}
-	
-	/**
-	 * @param ureq
-	 * @param wControl
-	 * @param artefacts
-	 */
-	private void initOrUpdateArtefactControllers(UserRequest ureq, List<AbstractArtefact> artefacts) {
-		vC.contextPut("artefacts", artefacts);
-		if (artefactCtrls != null) disposeArtefactControllers();
-		artefactCtrls = new ArrayList<>();
-		ArrayList<Component> artefactCtrlComps = new ArrayList<>();
-		int i = 1;
-		getArtefactAttributeDisplayConfig(ureq.getIdentity());
-		if (artefacts != null) {
-			for (AbstractArtefact abstractArtefact : artefacts) {
-				Controller artCtrl = new EPArtefactViewController(ureq, getWindowControl(), abstractArtefact, artAttribConfig, artefactChooseMode, false, true);
-				artefactCtrls.add(artCtrl);
-				Component artefactCtrlComponent = artCtrl.getInitialComponent();
-				listenTo(artCtrl);
-				artefactCtrlComps.add(artefactCtrlComponent);
-				vC.put("artCtrl" + i, artefactCtrlComponent);
-				i++;
-			}
-		}
-		vC.contextPut("artefactCtrlComps", artefactCtrlComps);
-	}
-
-	// dispose all artefact controllers
-	private void disposeArtefactControllers() {
-		if (artefactCtrls != null){
-			for (Controller artefactCtrl : artefactCtrls) {
-				removeAsListenerAndDispose(artefactCtrl);
-				artefactCtrl = null;
-			}
-			artefactCtrls = null;
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		disposeArtefactControllers();
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.Component,
-	 *      org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		if (source == artAttribBtn) {
-			if (artAttribCalloutCtr == null){
-				popupArtAttribBox(ureq);
-			} else {
-				// close on second click
-				closeArtAttribBox();
-			}
-		} else if (source instanceof Link) {
-			Link link = (Link) source;
-			int pageNum = (Integer) link.getUserObject();
-			preparePaging(ureq, pageNum);
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		super.event(ureq, source, event);
-		if (source == artAttribCtlr) {
-			if (event.equals(Event.DONE_EVENT)) {
-				closeArtAttribBox();
-				// set new display config for each artefact controller
-				vC.setDirty(true);
-			}
-		} else if (source instanceof EPArtefactViewController) {
-
-			if (event.getCommand().equals(EPArtefactDeletedEvent.ARTEFACT_DELETED)) {
-				// an artefact has been deleted, so refresh
-				EPArtefactDeletedEvent epDelEv = (EPArtefactDeletedEvent) event;
-				// only refresh whats needed, dont load all artefacts!
-				artefactsFullList.remove(epDelEv.getArtefact());
-				setNewArtefactsList(ureq, artefactsFullList);
-				fireEvent(ureq, event); // pass to EPArtefactPoolRunCtrl
-			}
-		}
-		if (event instanceof EPArtefactChoosenEvent) {
-			// an artefact was choosen, pass through the event until top
-			fireEvent(ureq, event);
-		}
-		if (source == artAttribCalloutCtr && event == CloseableCalloutWindowController.CLOSE_WINDOW_EVENT) {
-			removeAsListenerAndDispose(artAttribCalloutCtr);
-			artAttribCalloutCtr = null;
-		} 
-
-	}
-
-	@Override
-	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		if(entries == null || entries.isEmpty()) return;
-		
-		OLATResourceable ores = entries.get(0).getOLATResourceable();
-		if("AbstractArtefact".equals(ores.getResourceableTypeName())) {
-			Long resId = ores.getResourceableId();
-			
-			int index = 0;
-			for(AbstractArtefact artefact: artefactsFullList) {
-				if(artefact.getKey().equals(resId) || artefact.getResourceableId().equals(resId)) {
-					int rest = (index % artefactsPerPage);
-					int page = (index - rest) / artefactsPerPage;
-					preparePaging(ureq, page + 1);
-					break;
-				}
-				index++;
-			}
-		}
-	}
-
-	private Map<String, Boolean> getArtefactAttributeDisplayConfig(Identity ident) {
-		if (artAttribConfig == null) {
-			artAttribConfig = ePFMgr.getArtefactAttributeConfig(ident);
-		}
-		return artAttribConfig;
-	}
-
-	/**
-	 * @param ureq
-	 */
-	private void popupArtAttribBox(UserRequest ureq) {
-		String title = translate("display.option.title");
-		if (artAttribCtlr == null) {
-			artAttribCtlr = new EPArtefactAttributeSettingController(ureq, getWindowControl(),
-					getArtefactAttributeDisplayConfig(ureq.getIdentity()));
-			listenTo(artAttribCtlr);
-		}
-		removeAsListenerAndDispose(artAttribCalloutCtr);
-		artAttribCalloutCtr = new CloseableCalloutWindowController(ureq, getWindowControl(), artAttribCtlr.getInitialComponent(), artAttribBtn, title, true, null);
-		listenTo(artAttribCalloutCtr);
-		artAttribCalloutCtr.activate();
-	}
-
-	private void closeArtAttribBox() {
-		if (artAttribCalloutCtr!= null){
-			artAttribCalloutCtr.deactivate();
-			removeAsListenerAndDispose(artAttribCalloutCtr);
-			artAttribCalloutCtr = null;
-		}
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactSmallReadOnlyPreviewController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactSmallReadOnlyPreviewController.java
deleted file mode 100644
index 4000b69a18e04b47535811e46e3fcd9433295183..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactSmallReadOnlyPreviewController.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.view;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.panel.Panel;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.id.OLATResourceable;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.StateEntry;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * show minimal set of artefact details in small preview controllers.
- * if an artefact handler provides a special preview, use this instead the generic artefact-view used inside maps.
- * <P>
- * Initial Date: 17.11.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPMultipleArtefactSmallReadOnlyPreviewController extends BasicController implements EPMultiArtefactsController {
-
-	private List<AbstractArtefact> artefacts;
-	@Autowired
-	private PortfolioModule portfolioModule;
-	private ArrayList<Controller> artefactCtrls;
-	private ArrayList<Controller> optionLinkCtrls;
-	private VelocityContainer vC;
-	private PortfolioStructure struct;
-	private EPSecurityCallback secCallback;
-	
-	public EPMultipleArtefactSmallReadOnlyPreviewController(UserRequest ureq, WindowControl wControl, List<AbstractArtefact> artefacts, PortfolioStructure struct, EPSecurityCallback secCallback) {
-		super(ureq, wControl);
-		this.artefacts = artefacts;
-		this.struct = struct;
-		this.secCallback = secCallback;
-		vC = createVelocityContainer("smallMultiArtefactPreview");
-		
-		init(ureq);
-		putInitialPanel(vC);
-	}
-	
-	private void init(UserRequest ureq) {
-		if (artefactCtrls != null) disposeArtefactControllers();
-		if( optionLinkCtrls != null) disposeOptionLinkControllers();
-		optionLinkCtrls = new ArrayList<>();
-		artefactCtrls = new ArrayList<>();
-		List<List<Panel>> artefactCtrlCompLines = new ArrayList<>();
-		List<Panel> artefactCtrlCompLine = new ArrayList<>();
-		int i = 1;
-		for (AbstractArtefact artefact : artefacts) {
-			EPArtefactHandler<?> artHandler = portfolioModule.getArtefactHandler(artefact.getResourceableTypeName());
-			Controller artCtrl;
-			// check for special art-display:
-			boolean special = artHandler.isProvidingSpecialMapViewController();
-			if (special) {
-				artCtrl = artHandler.getSpecialMapViewController(ureq, getWindowControl(), artefact);
-				if(artCtrl != null) { 
-					//add the optionsLink to the artefact
-					EPArtefactViewOptionsLinkController optionsLinkCtrl = new EPArtefactViewOptionsLinkController(ureq, getWindowControl(), artefact, secCallback, struct);
-					vC.put("optionsLink"+i,optionsLinkCtrl.getInitialComponent());
-					listenTo(optionsLinkCtrl);
-					optionLinkCtrls.add(optionsLinkCtrl);
-				}
-			} else {
-				artCtrl = new EPArtefactViewReadOnlyController(ureq, getWindowControl(), artefact, struct, secCallback, true);
-			}
-			if (artCtrl != null){
-				artefactCtrls.add(artCtrl);
-				Component artefactCtrlComponent = artCtrl.getInitialComponent();
-				listenTo(artCtrl);
-				
-				Panel namedPanel = new Panel("artCtrl" + i);
-				namedPanel.setContent(artefactCtrlComponent);
-
-				if(special) {
-					if(!artefactCtrlCompLine.isEmpty()) {
-						artefactCtrlCompLines.add(artefactCtrlCompLine);
-					}
-					artefactCtrlCompLines.add(Collections.singletonList(namedPanel));
-					artefactCtrlCompLine = new ArrayList<>();
-				} else {
-					if(artefactCtrlCompLine.size() == 3) {
-						if(!artefactCtrlCompLine.isEmpty()) {
-							artefactCtrlCompLines.add(artefactCtrlCompLine);
-						}
-						artefactCtrlCompLine = new ArrayList<>();
-					}
-					artefactCtrlCompLine.add(namedPanel);
-				}
-				vC.put("artCtrl" + i, namedPanel);
-				if(special) {//need a flag in a lopp for the velociy template
-					vC.put("specialartCtrl" + i, artefactCtrlComponent);
-				}
-				i++;
-			}
-		}
-		if(!artefactCtrlCompLine.isEmpty()) {
-			artefactCtrlCompLines.add(artefactCtrlCompLine);
-		}
-		
-		vC.contextPut("artefactCtrlCompLines", artefactCtrlCompLines);
-	}
-	
-	private void disposeArtefactControllers() {
-		if (artefactCtrls != null){
-			for (Controller artefactCtrl : artefactCtrls) {
-				removeAsListenerAndDispose(artefactCtrl);
-				artefactCtrl = null;
-			}
-			artefactCtrls = null;
-		}
-	}
-
-	/**
-	 * dispose the list that holds optionLinkControlllers
-	 */
-	private void disposeOptionLinkControllers(){
-		if (optionLinkCtrls != null) {
-			for (Controller optionCtrl : optionLinkCtrls) {
-				removeAsListenerAndDispose(optionCtrl);
-				optionCtrl = null;
-			}
-			optionLinkCtrls = null;
-		}
-	}
-	
-	/**
-	 * @see org.olat.portfolio.ui.artefacts.view.EPMultiArtefactsController#setNewArtefactsList(org.olat.core.gui.UserRequest, java.util.List)
-	 */
-	@Override
-	public void setNewArtefactsList(UserRequest ureq, List<AbstractArtefact> artefacts) {
-		this.artefacts = artefacts;
-		init(ureq);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		// no events to handle yet
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		super.event(ureq, source, event);
-		fireEvent(ureq, event); // pass to others
-	}
-	
-	@Override
-	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		if(entries == null || entries.isEmpty()) return;
-		
-		OLATResourceable ores = entries.get(0).getOLATResourceable();
-		if("AbstractArtefact".equals(ores.getResourceableTypeName())) {
-			Long resId = ores.getResourceableId();
-			for(AbstractArtefact artefact: artefacts) {
-				if(artefact.getKey().equals(resId) || artefact.getResourceableId().equals(resId)) {
-					System.out.println("Match");
-				}
-			}
-		}
-		
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		disposeArtefactControllers();
-		disposeOptionLinkControllers();
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactsAsTableController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactsAsTableController.java
deleted file mode 100644
index 558362bfd6dbf73b735e7cc9487ae3973f4847e0..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactsAsTableController.java
+++ /dev/null
@@ -1,332 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.view;
-
-import java.util.ArrayList;
-import java.util.BitSet;
-import java.util.List;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.EscapeMode;
-import org.olat.core.gui.components.table.ColumnDescriptor;
-import org.olat.core.gui.components.table.CustomRenderColumnDescriptor;
-import org.olat.core.gui.components.table.DefaultColumnDescriptor;
-import org.olat.core.gui.components.table.StaticColumnDescriptor;
-import org.olat.core.gui.components.table.TableController;
-import org.olat.core.gui.components.table.TableEvent;
-import org.olat.core.gui.components.table.TableGuiConfiguration;
-import org.olat.core.gui.components.table.TableMultiSelectEvent;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.gui.control.generic.closablewrapper.CloseableModalController;
-import org.olat.core.gui.control.generic.modal.DialogBoxController;
-import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.StateEntry;
-import org.olat.core.util.StringHelper;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.EPUIFactory;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.model.structel.StructureStatusEnum;
-import org.olat.portfolio.ui.artefacts.collect.EPCollectStepForm04;
-import org.olat.portfolio.ui.artefacts.edit.EPReflexionWrapperController;
-import org.olat.portfolio.ui.filter.PortfolioFilterController;
-import org.olat.portfolio.ui.structel.EPStructureChangeEvent;
-
-/**
- * Description:<br>
- * Controller to hold a table representation of artefacts
- * - used with a struct (inside a map) it allows to unlink artefact
- * - in chooseMode there is column to add artefact to struct
- * 
- * <P>
- * Initial Date:  20.08.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPMultipleArtefactsAsTableController extends BasicController implements EPMultiArtefactsController {
-
-	private static final String CMD_CHOOSE = "choose";
-	private static final String CMD_UNLINK = "unlink";
-	private static final String CMD_REFLEXION = "refl";
-	private static final String CMD_DELETEARTEFACT = "delartf";
-	private static final String CMD_TITLE = "title";
-	private static final String CMD_MOVE = "move";
-	private VelocityContainer vC;
-	private TableController artefactListTblCtrl;
-	
-	private CloseableModalController artefactBox;
-	private PortfolioStructure struct;
-	private EPFrontendManager ePFMgr;
-	
-	private boolean mapClosed = false;
-	private boolean multiSelect = false;
-	private boolean artefactChooseMode;
-	private EPSecurityCallback secCallback;
-	private PortfolioModule portfolioModule;
-	private DialogBoxController deleteDialogController;
-	private EPCollectStepForm04 moveTreeCtrl;
-	private CloseableModalController moveTreeBox;
-
-	public EPMultipleArtefactsAsTableController(UserRequest ureq, WindowControl wControl,
-			List<AbstractArtefact> artefacts, PortfolioStructure struct, boolean artefactChooseMode, boolean multiSelect, EPSecurityCallback secCallback) {
-		super(ureq, wControl);
-		this.multiSelect = multiSelect;
-		this.secCallback = secCallback;
-		this.artefactChooseMode = artefactChooseMode;
-		vC = createVelocityContainer("multiArtefactTable");
-		this.struct = struct; 
-		if(struct != null && struct.getRoot() instanceof PortfolioStructureMap) {
-			mapClosed = StructureStatusEnum.CLOSED.equals(((PortfolioStructureMap)struct.getRoot()).getStatus());
-		} else { 
-			mapClosed = false; 
-		}		
-		portfolioModule = (PortfolioModule)CoreSpringFactory.getBean("portfolioModule");
-		ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-		
-		if (artefacts!=null){
-			initOrUpdateTable(ureq, artefacts);
-		}
-		
-		putInitialPanel(vC);
-	}
-
-	private void initOrUpdateTable(UserRequest ureq, List<AbstractArtefact> artefacts) {
-		ArtefactTableDataModel artefactListModel = new ArtefactTableDataModel(artefacts);
-		artefactListModel.setLocale(getLocale());
-
-		TableGuiConfiguration tableGuiConfiguration = new TableGuiConfiguration();
-		tableGuiConfiguration.setTableEmptyMessage(getTranslator().translate("table.empty"));
-		tableGuiConfiguration.setPageingEnabled(true);
-		tableGuiConfiguration.setDownloadOffered(struct == null); // offer download only when in artefact pool (no struct given)
-		tableGuiConfiguration.setResultsPerPage(10);
-		tableGuiConfiguration.setPreferencesOffered(true, "artefacts.as.table.prefs");
-		artefactListTblCtrl = new TableController(tableGuiConfiguration, ureq, getWindowControl(), getTranslator());
-		if(multiSelect) {
-			artefactListTblCtrl.setMultiSelect(true);
-			artefactListTblCtrl.addMultiSelectAction("select", "select");
-		}
-		listenTo(artefactListTblCtrl);
-
-		String details = artefactChooseMode ? null : CMD_TITLE;
-		DefaultColumnDescriptor descr = new DefaultColumnDescriptor("artefact.title", 0, details, getLocale());
-		artefactListTblCtrl.addColumnDescriptor(descr);
-		
-		descr = new DefaultColumnDescriptor("artefact.description", 1, null, getLocale());
-		descr.setEscapeHtml(EscapeMode.antisamy);
-		artefactListTblCtrl.addColumnDescriptor(true, descr);
-		
-		descr = new DefaultColumnDescriptor("artefact.date", 2, null, getLocale());
-		artefactListTblCtrl.addColumnDescriptor(true, descr);
-		
-		descr = new DefaultColumnDescriptor("artefact.author", 3, null, getLocale());
-		artefactListTblCtrl.addColumnDescriptor(false, descr);
-
-		descr = new DefaultColumnDescriptor("artefact.tags", 4, null, getLocale());
-		artefactListTblCtrl.addColumnDescriptor(false, descr);
-
-		descr = new CustomRenderColumnDescriptor("table.header.type", 5, null, ureq.getLocale(), ColumnDescriptor.ALIGNMENT_CENTER, new ArtefactTypeImageCellRenderer(getLocale())){
-			/**
-			 * @see org.olat.core.gui.components.table.DefaultColumnDescriptor#compareTo(int, int)
-			 */
-			@Override
-			public int compareTo(int rowa, int rowb) {
-				Object a = table.getTableDataModel().getValueAt(rowa,dataColumn);
-				Object b = table.getTableDataModel().getValueAt(rowb,dataColumn);
-				String typeA = getArtefactTranslatedTypeName((AbstractArtefact)a);
-				String typeB = getArtefactTranslatedTypeName((AbstractArtefact)b);
-				return typeA.compareTo(typeB);
-			}			
-		};
-		artefactListTblCtrl.addColumnDescriptor(false, descr);
-		
-		StaticColumnDescriptor staticDescr;
-		
-		if(!artefactChooseMode) {
-			if(mapClosed || !secCallback.canEditReflexion()) { // change link-description in row, when map is closed or viewed by another person
-				staticDescr = new StaticColumnDescriptor(CMD_REFLEXION, "table.header.reflexion", translate("table.header.view"));
-			} else {
-				staticDescr = new StaticColumnDescriptor(CMD_REFLEXION, "table.header.reflexion", translate("table.row.reflexion"));
-			}
-			artefactListTblCtrl.addColumnDescriptor(true, staticDescr);
-		}
-		
-		if(struct == null){
-			staticDescr = new StaticColumnDescriptor(CMD_DELETEARTEFACT, "delete.artefact", translate("delete.artefact"));
-			artefactListTblCtrl.addColumnDescriptor(true,staticDescr);
-		}
-				
-		if (artefactChooseMode) {
-			staticDescr = new StaticColumnDescriptor(CMD_CHOOSE, "table.header.choose", translate("choose.artefact"));
-			artefactListTblCtrl.addColumnDescriptor(true, staticDescr);
-		}
-		
-		if(struct!=null && secCallback.canRemoveArtefactFromStruct()){
-			staticDescr = new StaticColumnDescriptor(CMD_UNLINK, "table.header.unlink", translate("remove.from.map"));
-			artefactListTblCtrl.addColumnDescriptor(true, staticDescr);			
-		}
-		
-		if(struct!=null && secCallback.canRemoveArtefactFromStruct() && secCallback.canAddArtefact()){
-			staticDescr = new StaticColumnDescriptor(CMD_MOVE, "table.header.move", translate("artefact.options.move"));
-			artefactListTblCtrl.addColumnDescriptor(true, staticDescr);			
-		}
-
-		artefactListTblCtrl.setTableDataModel(artefactListModel);
-		if (vC.getComponent("artefactTable")!=null) vC.remove(artefactListTblCtrl.getInitialComponent()); 
-		vC.put("artefactTable", artefactListTblCtrl.getInitialComponent());		
-	}
-	
-	// translate the type of artefact needed for sorting by type
-	String getArtefactTranslatedTypeName(AbstractArtefact artefact){
-		EPArtefactHandler<?> artHandler = portfolioModule.getArtefactHandler(artefact.getResourceableTypeName());
-		Translator handlerTrans = artHandler.getHandlerTranslator(getTranslator());
-		String handlerClass = PortfolioFilterController.HANDLER_PREFIX + artHandler.getClass().getSimpleName() + PortfolioFilterController.HANDLER_TITLE_SUFFIX;
-		String artType = handlerTrans.translate(handlerClass);
-		return artType;
-	}
-	
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		//nothing to dispose
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		//
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		if(source == artefactListTblCtrl) {
-			if(event instanceof TableEvent) {
-				TableEvent te = (TableEvent)event;
-				AbstractArtefact artefact = (AbstractArtefact)artefactListTblCtrl.getTableDataModel().getObject(te.getRowId());
-				String action = te.getActionId();
-				if(CMD_TITLE.equals(action)) {
-					popupArtefact(artefact, ureq);
-				} else if (CMD_REFLEXION.equals(action)){
-					EPReflexionWrapperController reflexionCtrl = new EPReflexionWrapperController(ureq, getWindowControl(), secCallback, artefact, struct);
-					listenTo(reflexionCtrl);
-				} else if (CMD_CHOOSE.equals(action)){
-					fireEvent(ureq, new EPArtefactChoosenEvent(artefact));
-				} else if (CMD_UNLINK.equals(action)){
-					struct = ePFMgr.reloadPortfolioStructure(struct);
-					ePFMgr.removeArtefactFromStructure(artefact, struct);
-					artefactListTblCtrl.modelChanged();
-					fireEvent(ureq, new EPStructureChangeEvent(EPStructureChangeEvent.ADDED, struct));
-				} else if (CMD_MOVE.equals(action)){
-					showMoveTree(ureq, artefact);
-				} else if (CMD_DELETEARTEFACT.equals(action)) {
-					String text = translate("delete.artefact.text", StringHelper.escapeHtml(artefact.getTitle()));
-					deleteDialogController = activateYesNoDialog(ureq, translate("delete.artefact"), text, deleteDialogController);
-					deleteDialogController.setUserObject(artefact);
-				}
-			} else if(event instanceof TableMultiSelectEvent) {
-				TableMultiSelectEvent tmse = (TableMultiSelectEvent)event;
-
-				BitSet objectMarkers = tmse.getSelection();
-				List<AbstractArtefact> selectedArtefacts = new ArrayList<>(objectMarkers.size());
-				for(int i=objectMarkers.nextSetBit(0); i >= 0; i=objectMarkers.nextSetBit(i+1)) {
-					AbstractArtefact entry =  (AbstractArtefact)artefactListTblCtrl.getTableDataModel().getObject(i);
-					selectedArtefacts.add(entry);
-				}
-				fireEvent(ureq, new EPArtefactListChoosenEvent(selectedArtefacts));
-			}
-		} else if (source == moveTreeCtrl && event.getCommand().equals(EPStructureChangeEvent.CHANGED)){
-			EPStructureChangeEvent epsEv = (EPStructureChangeEvent) event;
-			PortfolioStructure newStruct = epsEv.getPortfolioStructure();
-			showInfo("artefact.moved", newStruct.getTitle());
-			fireEvent(ureq, event);
-			moveTreeBox.deactivate();
-		} else if(source == deleteDialogController){
-			if (DialogBoxUIFactory.isYesEvent(event)) {
-				AbstractArtefact artefact2delete = (AbstractArtefact)deleteDialogController.getUserObject();
-				ePFMgr.deleteArtefact(artefact2delete);
-				ArtefactTableDataModel model = (ArtefactTableDataModel)  artefactListTblCtrl.getTableDataModel();
-				model.getObjects().remove(artefact2delete);
-				artefactListTblCtrl.modelChanged();
-				fireEvent(ureq, new EPStructureChangeEvent(EPStructureChangeEvent.REMOVED, struct));
-			}
-			removeAsListenerAndDispose(deleteDialogController);
-			deleteDialogController = null;
-		}
-		
-		super.event(ureq, source, event);
-	}
-	
-	@Override
-	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		if(entries == null || entries.isEmpty()) return;
-
-		OLATResourceable ores = entries.get(0).getOLATResourceable();
-		if("AbstractArtefact".equals(ores.getResourceableTypeName())) {
-			Long resId = ores.getResourceableId();
-			ArtefactTableDataModel model = (ArtefactTableDataModel)  artefactListTblCtrl.getTableDataModel();
-			for(int i=0; i< model.getRowCount(); i++) {
-				AbstractArtefact artefact = model.getObject(i);
-				if(artefact.getKey().equals(resId)) {
-					int artefactsPerPage = artefactListTblCtrl.getPageSize();
-					int rest = (i % artefactsPerPage);
-					int page = (i - rest) / artefactsPerPage;
-					artefactListTblCtrl.setPage(new Integer(page + 1));
-					break;
-				}	
-			}
-		}
-	}
-	
-	private void showMoveTree(UserRequest ureq, AbstractArtefact artefact){
-		moveTreeCtrl = new EPCollectStepForm04(ureq, getWindowControl(), artefact, struct);
-		listenTo(moveTreeCtrl);
-		String title = translate("artefact.move.title");
-		moveTreeBox = new CloseableModalController(getWindowControl(), title, moveTreeCtrl.getInitialComponent());
-		listenTo(moveTreeBox);
-		//moveTreeBox.setInitialWindowSize(450, 300);
-		moveTreeBox.activate();
-	}
-
-	protected void popupArtefact(AbstractArtefact artefact, UserRequest ureq) {
-		String title = translate("view.artefact.header");
-		artefactBox = EPUIFactory.getAndActivatePopupArtefactController(artefact, ureq, getWindowControl(), title);
-		listenTo(artefactBox);
-	}
-
-	@Override
-	public void setNewArtefactsList(UserRequest ureq, List<AbstractArtefact> artefacts) {
-		initOrUpdateTable(ureq, artefacts);		
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPReflexionViewController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPReflexionViewController.java
deleted file mode 100644
index 4b488c26a7a4be10f41629dcf55e25be7b5ba544..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPReflexionViewController.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.view;
-
-import org.olat.core.CoreSpringFactory;
-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.impl.FormBasicController;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.util.StringHelper;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-
-/**
- * 
- * Description:<br>
- * a view only controller for reflexion on artefact and on link
- * 
- * <P>
- * Initial Date:  8 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPReflexionViewController extends FormBasicController {
-	
-	private RichTextElement artRef;
-	private String artefactReflexion = "";
-	private EPFrontendManager ePFMgr;
-	private String linkReflexion = "";
-	private boolean canSeeArtefactReflexion;
-	private RichTextElement linkRef;
-
-	public EPReflexionViewController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, PortfolioStructure structure) {
-		super(ureq, wControl, FormBasicController.LAYOUT_VERTICAL);
-		ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-		this.linkReflexion = ePFMgr.getReflexionForArtefactToStructureLink(artefact, structure);
-		this.canSeeArtefactReflexion = artefact.getAuthor().getKey().equals(ureq.getIdentity().getKey());
-		if (canSeeArtefactReflexion){
-			this.artefactReflexion = artefact.getReflexion();
-		}
-		
-		initForm(ureq);
-	}
-
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		setFormDescription("artefact.reflexion.view.descr");
-
-		if (canSeeArtefactReflexion){
-			artRef = uifactory.addRichTextElementForStringDataMinimalistic("reflexion.artefact", "reflexion.artefact", artefactReflexion, 12, -1,
-					formLayout, getWindowControl());
-			artRef.setEnabled(false);
-		}
-		
-		if (StringHelper.containsNonWhitespace(linkReflexion)){
-			linkRef = uifactory.addRichTextElementForStringDataMinimalistic("reflexion.link", "reflexion.link", linkReflexion, 12, -1,
-					formLayout, getWindowControl());
-			linkRef.setEnabled(false);
-		}
-		
-	}
-	
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		//nothing
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.generic.wizard.StepFormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void formOK(UserRequest ureq) {
-		//do nothing
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPTagBrowseController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPTagBrowseController.java
deleted file mode 100644
index 8897f99874d8c30ac3ef3a4f3a122ea6f2f1bdb3..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPTagBrowseController.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.view;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.StringHelper;
-import org.olat.portfolio.manager.EPArtefactTagCloud;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * a recursive tag-browser showing a tag-tree
- * the deeper you go in, the less common tags of available resources are shown
- * 
- * <P>
- * Initial Date: 10.11.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPTagBrowseController extends BasicController {
-	
-	private String activeCSS = "tag label label-info on";
-	private String inactiveCSS = "tag label label-info";
-	private String disabledCSS = "tag label label-info";
-
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	private final List<Link> tagLinks = new ArrayList<>();
-	private List<AbstractArtefact> allUsersArtefacts;
-
-	public EPTagBrowseController(UserRequest ureq, WindowControl wControl) {
-		super(ureq, wControl);
-		VelocityContainer mainVc = createVelocityContainer("tagbrowser");
-		
-		List<String> tagList = ePFMgr.getUsersTagsOfArtefactType(getIdentity());
-		int count = 0;
-		List<String> realTags = getRealArtefactTags();
-		for(String tag:tagList) {
-			if (realTags.contains(tag)){
-				String id = "tag_" + count++;
-				Link tagLink = LinkFactory.createLink(id, mainVc, this);
-				tagLink.setCustomEnabledLinkCSS(inactiveCSS);
-				tagLink.setCustomDisplayText(StringHelper.escapeHtml(tag));
-				tagLink.setCustomDisabledLinkCSS(disabledCSS);
-				tagLink.setUserObject(new TagWrapper(tag));
-				tagLinks.add(tagLink);
-			}
-		}
-		mainVc.contextPut("tags", tagLinks);
-		putInitialPanel(mainVc);
-	}
-	
-	// filter available tags for such of non-existing artefacts
-	private List<String> getRealArtefactTags(){
-		allUsersArtefacts = ePFMgr.getArtefactPoolForUser(getIdentity());
-		if (allUsersArtefacts == null) return new ArrayList<>();
-		HashSet<String> realTags = new HashSet<>();
-		for (AbstractArtefact abstractArtefact : allUsersArtefacts) {
-			List<String> thisTags = ePFMgr.getArtefactTags(abstractArtefact);
-			realTags.addAll(thisTags);
-		}
-		List<String> res = new ArrayList<>();
-		res.addAll(realTags);
-		return res;
-	}
-	
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.Component,
-	 *      org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		// nothing
-		if(tagLinks.contains(source)) {
-			Link tagLink = (Link)source;
-			TagWrapper tagWrapper = (TagWrapper)tagLink.getUserObject();
-			if(TagState.possible.equals(tagWrapper.getState())) {
-				tagWrapper.setState(TagState.selected);
-				List<AbstractArtefact> artefacts = recalculateTagCloud();
-				fireEvent(ureq, new EPTagBrowseEvent(artefacts));
-			} else if(TagState.selected.equals(tagWrapper.getState())) {
-				tagWrapper.setState(TagState.possible);
-				List<AbstractArtefact> artefacts = recalculateTagCloud();
-				fireEvent(ureq, new EPTagBrowseEvent(artefacts));
-			}
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		tagLinks.clear();
-	}
-	
-	private List<AbstractArtefact> recalculateTagCloud() {
-		List<String> selectedTags = getSelectedTags();
-		if(selectedTags.isEmpty()) {
-			for(Link tagLink:tagLinks) {
-				TagWrapper tagWrapper = (TagWrapper)tagLink.getUserObject();
-				tagLink.setCustomEnabledLinkCSS(inactiveCSS);
-				tagLink.setEnabled(true);
-				tagWrapper.setState(TagState.possible);
-			}
-			return allUsersArtefacts;
-		}
-
-		EPArtefactTagCloud artefactsAndTags = ePFMgr.getArtefactsAndTagCloud(getIdentity(), selectedTags);
-		List<AbstractArtefact> filteredArtefacts = artefactsAndTags.getArtefacts();
-		Set<String> newTags = artefactsAndTags.getTags();
-
-		if(newTags != null && !newTags.isEmpty()) {
-			for(Link tagLink:tagLinks) {
-				TagWrapper tagWrapper = (TagWrapper)tagLink.getUserObject();
-				String tag = tagWrapper.getTag();
-				switch(tagWrapper.getState()) {
-					case selected:
-						tagLink.setCustomEnabledLinkCSS(activeCSS);
-						tagLink.setEnabled(true);
-						break;
-					case possible:
-						if(!newTags.contains(tag)) {
-							tagWrapper.setState(TagState.unpossible);
-							tagLink.setEnabled(false);
-						} else {
-							tagLink.setCustomEnabledLinkCSS(inactiveCSS);
-							tagLink.setEnabled(true);
-						}
-						break;
-					case unpossible:
-						if(newTags.contains(tag)) {
-							tagWrapper.setState(TagState.possible);
-							tagLink.setCustomEnabledLinkCSS(inactiveCSS);
-							tagLink.setEnabled(true);
-						} else {
-							tagLink.setEnabled(false);
-						}
-						break;
-				}
-			}
-		}
-		
-		return filteredArtefacts;
-	}
-	
-	private List<String> getSelectedTags() {
-		List<String> tags = new ArrayList<>();
-		for(Link tagLink:tagLinks) {
-			TagWrapper tagWrapper = (TagWrapper)tagLink.getUserObject();
-			if(TagState.selected.equals(tagWrapper.getState())) {
-				tags.add(tagWrapper.getTag());
-			}
-		}
-		return tags;
-	}
-	
-	private class TagWrapper {
-		private final String tag;
-		private TagState state;
-		
-		public TagWrapper(String tag) {
-			this.tag = tag;
-			state = TagState.possible;
-		}
-
-		public TagState getState() {
-			return state;
-		}
-
-		public void setState(TagState state) {
-			this.state = state;
-		}
-
-		public String getTag() {
-			return tag;
-		}
-	}
-	
-	private enum TagState {
-		selected,
-		possible,
-		unpossible
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPTagBrowseEvent.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPTagBrowseEvent.java
deleted file mode 100644
index 4a35c3ff8c672f1da6701648f23c84ca26c275aa..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPTagBrowseEvent.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.view;
-
-import java.util.List;
-
-import org.olat.core.gui.control.Event;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-
-/**
- * Description:<br>
- * event sent on clicked nodes in tag-browser
- * 
- * <P>
- * Initial Date:  19.11.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPTagBrowseEvent extends Event {
-
-	private static final long serialVersionUID = -6127870154016020474L;
-	private final List<AbstractArtefact> artefacts;
-	
-	public EPTagBrowseEvent(List<AbstractArtefact> artefacts) {
-		super("tagBrowseFoundArtefacts");
-		this.artefacts = artefacts;
-	}
-
-	/**
-	 * @return Returns the tags.
-	 */
-	public List<AbstractArtefact> getArtefacts(){
-		return artefacts;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPTagViewController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPTagViewController.java
deleted file mode 100644
index 6d3666829547c2f1fba0b7019a0a87230de7d19c..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPTagViewController.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.view;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.TextBoxListElement;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Show the tags read-only
- * 
- * 
- * Initial date: 16.07.2014<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public class EPTagViewController extends FormBasicController {
-	
-	private List<String> tags;
-	@Autowired
-	private EPFrontendManager ePFMgr;
-
-	public EPTagViewController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact) {
-		super(ureq, wControl, FormBasicController.LAYOUT_VERTICAL);
-		tags = ePFMgr.getArtefactTags(artefact);
-
-		initForm(ureq);
-	}
-
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		setFormDescription("tags.view.header");
-		
-		Map<String,String> tagsMap = new HashMap<>();
-		for(String tag:tags) {
-			tagsMap.put(tag, tag);
-		}
-		
-		TextBoxListElement tagListElement = uifactory.addTextBoxListElement("artefact.tags", null, "tag.input.hint", tagsMap, formLayout, getTranslator());
-		tagListElement.setEnabled(false);
-	}
-
-	@Override
-	protected void doDispose() {
-		//nothing
-	}
-
-	@Override
-	protected void formOK(UserRequest ureq) {
-		//do nothing
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/artefactOptions.html b/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/artefactOptions.html
deleted file mode 100644
index 9456702d862ec908106ccbd5eec3a6a806440b80..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/artefactOptions.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<p>$r.translate("artefact.options.title")</p>
-<ul>
-	#if ($r.available("unlink.link")) <li>$r.render("unlink.link")</li> #end
-	#if ($r.available("move.link")) <li>$r.render("move.link")</li> #end
-	<li>$r.render("reflexion.link")</li>
-	#if ($r.available("tags.link")) <li>$r.render("tags.link")</li> #end
-</ul>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/multiArtefact.html b/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/multiArtefact.html
deleted file mode 100644
index 76f89c53b8b8e3d5577620e7d68296930c13a5b6..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/multiArtefact.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<div class="o_ep_multiartefacts">
-	#if ($artefactAmnt) 
-		#if ($r.available("detail.options")) 
-		<div class="o_button_group o_button_group_right">
-			$r.render("detail.options")
-		</div>
-		#end
-		<div class="o_artefact_count">
-			$r.translate("artefact.amount", $artefactAmnt)
-		</div>
-	#else
-		<div class="o_info">$r.translate("no.artefacts.found")</div>
-	#end
-	<div class="container-fluid">
-		#foreach($artefactComp in $artefactCtrlComps)
-			<div class="col-sm-6">
-				#set($artCtrl = "artCtrl$foreach.count")
-				$r.render($artCtrl)
-			</div>
-		#end
-	</div>
-	#if ($pageLinkList)
-	<ul class="pagination">
-		#foreach($pageLink in $pageLinkList)
-			#set($viewLink = "pageLink$foreach.count")
-			<li>$r.render($viewLink)</li>
-		#end
-	</ul>
-	#end
-</div>
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/multiArtefactTable.html b/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/multiArtefactTable.html
deleted file mode 100644
index 58ef1e88360b98fe4817c61a0c71b7c2c88b2747..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/multiArtefactTable.html
+++ /dev/null
@@ -1,3 +0,0 @@
-#if($r.available("artefactTable"))
-	$r.render("artefactTable")
-#end
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/optionsLink.html b/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/optionsLink.html
deleted file mode 100644
index 2a7be69d7f4d6dcc81c858325c699dd13d2d2997..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/optionsLink.html
+++ /dev/null
@@ -1 +0,0 @@
-$r.render("option.link")
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/singleArtefact.html b/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/singleArtefact.html
deleted file mode 100644
index fe6239844b8e8850554b98031c95ffe58c2b5222..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/singleArtefact.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<div class="panel panel-default o_artefact">
-	<div class="panel-heading">
-		<h4><i class="o_icon $artefact.getIcon()"> </i> $r.escapeHtml($!artefact.getTitle())
-		#if ($cssClosed != "") <i class="o_icon pull-right $cssClosed"> </i> #end</h4>
-	</div>
-	<table class="table table-condensed table-striped"><tbody>
-		#if ($artAttribConfig.get("artefact.title"))
-		<tr><th>$r.translate("artefact.title")</th>
-		    <td>$r.render("title")</td></tr>
-		#end
-		#if ($artAttribConfig.get("artefact.author"))
-		<tr><th>$r.translate("artefact.author")</th>
-			<td>$artefact.getAuthor().getName()</td></tr>
-		#end
-		#if ($artAttribConfig.get("artefact.description"))
-		<tr><th>$r.translate("artefact.description")</th>
-			<td>
-				#if ($r.available("descriptionBtn")) $r.render("descriptionBtn") 
-				#else $!artefact.getDescription() #end 
-			</td></tr>
-		#end
-		#if ($artAttribConfig.get("artefact.date"))
-		<tr><th>$r.translate("artefact.date")</th>
-			<td>$r.formatDateAndTime($artefact.getCreationDate())</td></tr>
-		#end
-		#if ($artAttribConfig.get("artefact.source"))
-		<tr>
-			<th>$r.translate("artefact.source")</th>
-			<td>$!artefact.getSource()</div>
-		</tr>
-		#end
-		#if ($artAttribConfig.get("artefact.sourcelink"))
-		<tr><th>$r.translate("artefact.sourcelink")</th>
-			<td>$!artefactSourceLink</td></tr>
-		#end	
-		#if ($artAttribConfig.get("artefact.tags"))
-		<tr><th>$r.translate("artefact.tags")</dithv>
-	    	<td>$r.render("tagTextbox")</td></tr>
-		#end
-		#if ($artAttribConfig.get("artefact.tags.readonly"))
-		<tr><th>$r.translate("artefact.tags")</th>
-	    	<td>$!tags</td></tr>
-		#end
-		#if ($artAttribConfig.get("artefact.used.in.maps"))
-		<tr><th>$r.translate("artefact.used.in.maps")</th>
-			<td>
-				#foreach($map in $maps)
-					$r.render($map.component.componentName)
-				#end
-			</td></tr>
-		#end
-		#if ($artAttribConfig.get("artefact.reflexion"))
-		<tr><th>$r.translate("artefact.reflexion")</th>
-			<td>
-				#if ($r.available("reflexionBtn")) $r.render("reflexionBtn") 
-				#else $!artefact.getReflexion() 
-				#end 
-			</td></tr>
-		#end
-		#if ($artAttribConfig.get("artefact.handlerdetails"))
-		<tr><th>$r.translate("artefact.handlerdetails")</th>
-			<td>#if ($r.available("detailsController")) $r.render("detailsController") #end </td></tr>
-		#end
-	</tbody></table>
-	#if ($r.visible("details.link") || $r.visible("delete.artefact") || $r.visible("choose.artefact"))
-	<div class="panel-body ">
-		#set($count = 0)
-		#if ($r.visible("details.link")) #set($count = $count + 1) #end
-		#if ($r.visible("delete.artefact")) #set($count = $count + 1) #end
-		#if ($r.visible("choose.artefact")) #set($count = $count + 1) #end
-		#if($count > 1) <div class="btn-group"> #end
-		#if ($r.available("details.link")) $r.render("details.link") #end
-		#if ($r.available("delete.artefact")) $r.render("delete.artefact") #end
-		#if ($r.available("choose.artefact")) $r.render("choose.artefact") #end
-		#if($count > 1) </div> #end
-	</div>
-	#end
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/smallMultiArtefactPreview.html b/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/smallMultiArtefactPreview.html
deleted file mode 100644
index 3df942a2cbf2678362c68bd9aa82dafe3f74f1cc..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/smallMultiArtefactPreview.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<div class="container-fluid">
-	#set($innerCounter = 1)
-	#foreach($artefactCtrlCompLine in $artefactCtrlCompLines)
-		#foreach($artefactCtrlPanel in $artefactCtrlCompLine)
-			#set($specialCtrlName = "special$artefactCtrlPanel.componentName")
-			#set($optionsLinkName = "optionsLink$innerCounter")
-			#if($r.available($specialCtrlName))
-				<div class="col-sm-12 o_artefact">
-					$r.render($artefactCtrlPanel.componentName)
-					<div class="o_artefact_optionslink">$r.render($optionsLinkName)</div>
-				</div>
-			#else
-				<div class="col-sm-4 o_artefact">
-					$r.render($artefactCtrlPanel.componentName)
-				</div>
-			#end
-			#set($innerCounter = $innerCounter + 1)
-		#end
-	#end
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/smallSingleArtefact.html b/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/smallSingleArtefact.html
deleted file mode 100644
index b3740e109f364ee459db8d59c70683dfc20300f5..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/smallSingleArtefact.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<div class="panel panel-default">
-	<div class="panel-heading">
-		<h3><i class="o_icon $artefact.getIcon()"> </i> $r.escapeHtml($!artefact.getTitle())</h3>
-	</div>
-	#if($description)
-	<div class="panel-body">$description</div>
-	#end
-	<table class="table table-condensed table-striped"><tbody>
-		<tr><th>$r.translate("artefact.author")</th>
-			<td>$!authorName</td></tr>
-		<tr><th>$r.translate("artefact.date")</th>
-			<td>$r.formatDateAndTime($artefact.getCreationDate())</td></tr>
-		#if($tags)
-		<tr><td colspan="2"><i class="o_icon o_icon_tags"> </i> $tags</td></tr>
-		#end	
-	</tbody></table>
-	<div class="panel-footer">
-		$r.render("small.details.link")
-		#if($r.available("option.link"))
-			<div class="o_ep_options">$r.render("option.link")</div>
-		#end
-	</div>
-</div>
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/tagbrowser.html b/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/tagbrowser.html
deleted file mode 100644
index f74f0f47ee74451fd05504c4bc77d83b65e0d585..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/tagbrowser.html
+++ /dev/null
@@ -1,6 +0,0 @@
-$r.translate("tag.browser.intro")
-<div class="o_ep_tag_cloud clearfix">
-	#foreach($tag in $tags)
-		$r.render($tag.componentName)
-	#end
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_ar.properties
deleted file mode 100644
index 560e06bacd93ab4d2040a831462e10d932b5576d..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_ar.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-#Thu Sep 08 16:42:40 CEST 2011
-artefact.amount={0} \:\u0639\u062F\u062F \u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u062A\u0649 \u062A\u0645 \u0625\u064A\u062C\u0627\u062F\u0647\u0627
-artefact.author=\u0627\u0644\u0645\u0624\u0644\u0641
-artefact.date=\u0627\u0644\u062A\u0627\u0631\u064A\u062E
-artefact.description=\u0627\u0644\u0648\u0635\u0641
-artefact.description.too.long=\u064A\u062C\u0628 \u0627\u0646 \u0644\u0627 \u064A\u0632\u064A\u062F \u0639\u0646 {0} \u062D\u0631\u0641 $\:artefact.description
-artefact.handlerdetails=\u0646\u0648\u0639 \u0627\u0644\u062A\u0641\u0627\u0635\u064A\u0644
-artefact.no.source=\u063A\u064A\u0631 \u0645\u062A\u0627\u062D
-artefact.open.source=\u0628\u062E\u0635\u0648\u0635 \u0627\u0644\u0645\u0635\u062F\u0631
-artefact.sourcelink=\u0627\u0644\u0645\u0635\u062F\u0631
-artefact.tags=\u0627\u0644\u0639\u0644\u0627\u0645\u0627\u062A
-artefact.title=\u0627\u0644\u0639\u0646\u0648\u0627\u0646
-artefact.title.not.empty=$\:artefact.title  \u0636\u0631\u0648\u0631\u0649
-artefact.title.too.long=\u064A\u062C\u0628 \u0623\u0646 \u0644\u0627 \u064A\u0632\u064A\u062F \u0639\u0646 {0} \u062D\u0631\u0641 $\:artefact.title
-artefact.type=\u0646\u0648\u0639 \u0627\u0644\u0623\u062F\u0627\u0629
-artefact.used.in.maps=\u0627\u0633\u062A\u062E\u062F\u0645\u062A \u0641\u0649
-browse.root=\u0627\u0644\u0639\u0644\u0627\u0645\u0627\u062A
-choose.artefact=\u0627\u062E\u062A\u064A\u0627\u0631
-delete.artefact=\u062D\u0630\u0641
-delete.artefact.text=\u0647\u0644 \u062A\u0631\u064A\u062F \u062D\u0642\u0627\u064B \u062D\u0630\u0641 \u0627\u0644\u0623\u062F\u0627\u0629{0}\u061F
-detail.options=\u0639\u0631\u0636 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A
-details.link=\u0627\u0644\u062A\u0641\u0627\u0635\u064A\u0644
-display.option.enabled=\u062A\u0645\u0643\u064A\u0646
-display.option.intro=\u0645\u0646 \u0641\u0636\u0644\u0643 \u0627\u062E\u062A\u0627\u0631 \u062E\u0635\u0627\u0626\u0635 \u0627\u0644\u0623\u062F\u0627\u0629 \u0627\u0644\u062A\u0649 \u064A\u0646\u0628\u063A\u0649 \u0623\u0646 \u062A\u0638\u0647\u0631 \u0641\u0649 \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0643
-display.option.submit=\u062A\u0646\u0641\u064A\u0630 \u0648\u062D\u0641\u0638
-display.option.title=$\:detail.options
-page.links=\u0627\u0644\u0635\u0641\u062D\u0629
-remove.from.map=\u062D\u0630\u0641 \u0645\u0646 \u0645\u062C\u0644\u062F
-small.details.link=\u0639\u0631\u0636
-table.empty=$\:no.artefacts.found
-table.header.choose=\u0627\u062E\u062A\u064A\u0627\u0631
-table.header.type=\u0627\u0644\u0646\u0648\u0639
-table.header.unlink=\u062D\u0630\u0641
-table.header.view=\u0639\u0631\u0636
-table.row.reflexion=\u062A\u0639\u062F\u064A\u0644
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_de.properties
deleted file mode 100644
index 038df062b116fb052a1d78b731ade53bd2ef1738..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1,62 +0,0 @@
-delete.artefact=L\u00f6schen
-delete.artefact.text=Wollen Sie das Artefakt {0} wirklich l\u00f6schen?
-artefact.amount=Anzahl gefundener Artefakte: {0}
-detail.options=Anzeigeeinstellungen
-artefact.title=Titel
-artefact.title.not.empty=Der $\:artefact.title darf nicht leer sein.
-artefact.title.too.long=Der $\:artefact.title darf nicht l\u00e4nger als {0} Zeichen lang sein.
-artefact.description=Beschreibung
-artefact.description.too.long=Die $\:artefact.description darf nicht l\u00e4nger als {0} Zeichen lang sein.
-artefact.author=Autor
-artefact.date=Datum
-artefact.source=Sammelort
-artefact.tags=Tags
-artefact.tags.title=Tags zu diesem Artefakt
-artefact.used.in.maps=Verwendet in
-artefact.reflexion=Reflexion
-artefact.reflexion.original=Die originale Reflexion
-artefact.handlerdetails=Typ-Details
-artefact.sourcelink=Quelle
-artefact.type=Artefakt-Typ
-
-artefact.open.source=zur Quelle
-artefact.no.source=nicht verf\u00fcgbar
-
-artefact.reflexion.view.descr=Hier sehen Sie die urspr\u00fcngliche Reflexion, die beim Erstellen des Artefakts eingegeben wurde. Die Verkn\u00fcpfung mit einer Mappe kann ebenso reflektiert werden.
-reflexion.artefact=Reflexion des Artefakts
-reflexion.link=Reflexion zur Verkn\u00fcpfung mit der Sammelmappe
-
-display.option.title=$\:detail.options
-display.option.intro=W\u00e4hlen Sie die Attribute der Artefakte, welche in der Liste angezeigt werden sollen.
-display.option.submit=Einstellen und speichern
-display.option.enabled=Ein
-
-tag.textboxlist.hint=Hier klicken f\u00fcr mehr Tags.
-table.header.view=Ansehen
-table.header.reflexion=Reflexion
-table.header.type=Typ
-table.row.reflexion=Editieren
-title.reflexion.link=Reflexion zur Wahl des Artefakts in diese Sammelmappe editieren
-title.reflexion.artefact=Reflexion zu diesem Artefakt
-
-view.artefact.header=Detailansicht des Artefakts
-choose.artefact=W\u00e4hlen
-table.header.choose=Ausw\u00e4hlen
-table.header.unlink=Entfernen
-remove.from.map=Aus Mappe entfernen
-page.links=Seite
-no.artefacts.found=Sie haben noch keine Artefakte gesammelt. Laden Sie ein Artefakt hoch oder sammeln Sie es in OLAT.
-details.link=Details
-small.details.link=Ansehen
-table.empty=$\:no.artefacts.found
-info.no.reflexion.yet=Sie haben noch keine Reflexion zur Wahl dieses Artefakts in diese Sammelmappe erfasst. Als Voreinstellung wurde die Reflexion des Artefakts geladen.
-
-browse.root=Tags
-tag.browser.intro=Durchsuchen Sie Ihre Artefakte nach Tags.
-tags.view.header=$\:tag.browser.intro
-option.link=Weitere Optionen...
-artefact.options.title=W\u00e4hlen Sie die gew\u00fcnschte Operation f\u00fcr dieses Artefakt
-artefact.options.move=Verschieben
-artefact.move.title=W\u00e4hlen Sie ein Ziel, um dieses Artefakt zu verschieben.
-artefact.moved=Das Artefakt wurde erfolgreich nach {0} verschoben.
-table.header.move=Verschieben
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_en.properties
deleted file mode 100644
index 3e52642a24e68f5a02dc37b7ac51286203c8c1d4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,57 +0,0 @@
-#Tue Apr 10 10:30:38 CEST 2012
-artefact.amount=Number of artefacts found\: {0}
-artefact.author=Author
-artefact.date=Date
-artefact.description=Description
-artefact.description.too.long=The $\:artefact.description must not exceed {0} characters.
-artefact.handlerdetails=Type details
-artefact.move.title=Select a target to move this artifact
-artefact.moved=The artifact was successfully moved to {0}
-artefact.no.source=not available
-artefact.open.source=regarding source
-artefact.options.move=Move
-artefact.options.title=Select an operation for this artifact
-artefact.reflexion=Reflection
-artefact.reflexion.original=Original reflection
-artefact.reflexion.view.descr=Here you can see the original reflection provided when creating this artefact. You can also reflect on links to folders.
-artefact.source=Source of collection
-artefact.sourcelink=Source
-artefact.tags=Tags
-artefact.tags.title=Tags of artefact
-artefact.title=Title
-artefact.title.not.empty=The $\:artefact.title is mandatory.
-artefact.title.too.long=The $\:artefact.title must not exceed {0} characters.
-artefact.type=Artefact type
-artefact.used.in.maps=Used in
-browse.root=Tags
-choose.artefact=Select
-delete.artefact=Delete
-delete.artefact.text=Do you really want to delete the artefact {0}?
-detail.options=Display settings
-details.link=Details
-display.option.enabled=Enabled
-display.option.intro=Please select those artefact attributes that should appear on your list.
-display.option.submit=Submit and save
-display.option.title=$\:detail.options
-info.no.reflexion.yet=There aren't any reflections yet regarding the selection of this artefact in your binder. The default setting is this artefact's reflection.
-no.artefacts.found=You haven't collected any artefacts yet. Upload one or collect them within OLAT.
-option.link=More options...
-page.links=Page
-reflexion.artefact=Reflection of artefact
-reflexion.link=Reflection on link to a binder
-remove.from.map=Remove from folder
-small.details.link=View
-table.empty=$\:no.artefacts.found
-table.header.choose=Select
-table.header.move=Move
-table.header.reflexion=Reflection
-table.header.type=Type
-table.header.unlink=Remove
-table.header.view=View
-table.row.reflexion=Edit
-tag.browser.intro=Search your artefacts for tags.
-tag.textboxlist.hint=Click here to add more tags.
-tags.view.header=$\:tag.browser.intro
-title.reflexion.artefact=Reflection on this artefact
-title.reflexion.link=Edit reflection on selecting this artefact in a binder
-view.artefact.header=Detailed view of artefact
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index c91cb7ee1e8c9fa66eae894e5834cf9168085279..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,57 +0,0 @@
-#Mon Oct 22 16:53:56 CEST 2012
-artefact.amount=Nombre d'artefacts trouv\u00E9s\: {0}
-artefact.author=Auteur
-artefact.date=Date
-artefact.description=Description
-artefact.description.too.long=La $\:artefact.description ne peut exc\u00E9der la limite de {0} signes.
-artefact.handlerdetails=D\u00E9tails type
-artefact.move.title=Choisissez une destination o\u00F9 cet artefact doit \u00EAtre d\u00E9plac\u00E9.
-artefact.moved=L'artefact a \u00E9t\u00E9 d\u00E9plac\u00E9 vers "{0}" avec succ\u00E8s.
-artefact.no.source=non disponible
-artefact.open.source=\u00E0 la source
-artefact.options.move=D\u00E9placer
-artefact.options.title=Choisissez l'op\u00E9ration \u00E0 effectuer sur l'artefact.
-artefact.reflexion=R\u00E9flexion
-artefact.reflexion.original=La r\u00E9flexion originale
-artefact.reflexion.view.descr=Vous voyez ici la r\u00E9flexion originale qui a \u00E9t\u00E9 r\u00E9dig\u00E9e durant la cr\u00E9ation de l'artefact. Il est possible de r\u00E9fl\u00E9chir \u00E9galement sur le lien de l'artefact \u00E0 un classeur.
-artefact.source=Lieu de r\u00E9colte
-artefact.sourcelink=Source
-artefact.tags=Tags
-artefact.tags.title=Tags de l'artefact
-artefact.title=Titre
-artefact.title.not.empty=Le $\:artefact.title doit \u00EAtre indiqu\u00E9.
-artefact.title.too.long=Le $\:artefact.title ne peut exc\u00E9der la limite de {0} signes.
-artefact.type=Type d'artefact
-artefact.used.in.maps=Utilis\u00E9 dans
-browse.root=Tag
-choose.artefact=S\u00E9lectionner
-delete.artefact=\u00C9liminer
-delete.artefact.text=Voulez-vous vraiment \u00E9liminer l'artefact "{0}"?
-detail.options=R\u00E9glages affichage
-details.link=D\u00E9tails
-display.option.enabled=Activ\u00E9
-display.option.intro=S\u00E9lectionnez les attributs des artefacts qui doivent \u00EAtre affich\u00E9s dans la liste.
-display.option.submit=Soumettre et enregistrer
-display.option.title=$\:detail.options
-info.no.reflexion.yet=Vous n'avez pas encore r\u00E9dig\u00E9 de r\u00E9flexion sur le choix de cet artefact pour ce classeur. La r\u00E9flexion sur l'artefact est donc t\u00E9l\u00E9charg\u00E9e automatiquement.
-no.artefacts.found=Vous n'avez encore recueilli aucun artefact. T\u00E9l\u00E9chargez-en un ou recueillez-en un dans OLAT.
-option.link=Options suppl\u00E9mentaires...
-page.links=Page
-reflexion.artefact=R\u00E9flexions sur l'artefact
-reflexion.link=R\u00E9flexion sur le lien au classeur
-remove.from.map=Enlever du classeur
-small.details.link=Voir
-table.empty=$\:no.artefacts.found
-table.header.choose=S\u00E9lectionner
-table.header.move=D\u00E9placer
-table.header.reflexion=R\u00E9flexion
-table.header.type=Type
-table.header.unlink=Enlever
-table.header.view=Voir
-table.row.reflexion=\u00C9diter
-tag.browser.intro=Cherchez des tags dans vos artefacts.
-tag.textboxlist.hint=Cliquez ici pour plus de tags.
-tags.view.header=$\:tag.browser.intro
-title.reflexion.artefact=R\u00E9flexion sur cet artefact
-title.reflexion.link=\u00C9diter la r\u00E9flexion sur le choix de cet artefact pour ce classeur
-view.artefact.header=Aper\u00E7u d\u00E9taill\u00E9 de l'artefact
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_it.properties
deleted file mode 100644
index 8316a712de85c04f2294877d64e068e0012a0c6f..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_it.properties
+++ /dev/null
@@ -1,57 +0,0 @@
-#Wed Jun 22 15:14:52 CEST 2016
-artefact.amount=Numero di artefatti trovati\: {0}
-artefact.author=Autore
-artefact.date=Data
-artefact.description=Descrizione
-artefact.description.too.long=La $\:artefact.description non pi\u00F9 superare il limite di {0} segni.
-artefact.handlerdetails=Dettagli tipo
-artefact.move.title=Selezionare una destinazione dove spostare l'artefatto.
-artefact.moved=L'artefatto \u00E8 stato spostato con successo in "{0}"
-artefact.no.source=non disponibile
-artefact.open.source=alla sorgente
-artefact.options.move=Spostare
-artefact.options.title=Selezionare una operazione da eseguire su questo artefatto.
-artefact.reflexion=Riflessione
-artefact.reflexion.original=La riflessione originale
-artefact.reflexion.view.descr=Vede qui la riflessione originale che \u00E8 stata redatta durante la creazione dell'artefatto. \u00C8 possibile riflettere anche sul collegamento dell'artefatto a un raccoglitore.
-artefact.source=Luogo di raccolta
-artefact.sourcelink=Sorgente
-artefact.tags=Tag
-artefact.tags.title=Etichette dell'artefatto
-artefact.title=Titolo
-artefact.title.not.empty=Il $\:artefact.title deve essere indicato.
-artefact.title.too.long=Il $\:artefact.title non pi\u00F9 superare il limite di {0} segni.
-artefact.type=Tipo di artefatto
-artefact.used.in.maps=Usato in
-browse.root=Tag
-choose.artefact=Selezionare
-delete.artefact=Eliminare
-delete.artefact.text=Vuole veramente eliminare l'artefatto {0}?
-detail.options=Preferenze visualizzazione
-details.link=Dettagli
-display.option.enabled=Attivato
-display.option.intro=Selezioni gli attributi degli artefatti che devono venire mostrati nella lista.
-display.option.submit=Assumere e salvare
-display.option.title=$\:detail.options
-info.no.reflexion.yet=Non ha ancora redatto una riflessione sulla scelta di questo artefatto per questo raccoglitore. La riflessione sull'artefatto viene dunque caricata automaticamente.
-no.artefacts.found=Non ha ancora raccolto alcun artefatto. Ne carichi uno o ne raccolga uno in OLAT.
-option.link=Altre opzioni...
-page.links=Pagina
-reflexion.artefact=Riflessione sull'artefatto
-reflexion.link=Riflessione sul collegamento al raccoglitore
-remove.from.map=Rimuovere dal raccoglitore
-small.details.link=Vedere
-table.empty=$\:no.artefacts.found
-table.header.choose=Selezionare
-table.header.move=Spostare
-table.header.reflexion=Riflessione
-table.header.type=Tipo
-table.header.unlink=Rimuovere
-table.header.view=Vedere
-table.row.reflexion=Editare
-tag.browser.intro=Cerchi dei tag nei Suoi artefatti.
-tag.textboxlist.hint=Clicchi qui per pi\u00F9 tag.
-tags.view.header=$\:tag.browser.intro
-title.reflexion.artefact=Riflessione su questo artefatto
-title.reflexion.link=Editare la riflessione sulla scelta di questo artefatto per questo raccoglitore
-view.artefact.header=Visione dettagliata dell'artefatto
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_jp.properties
deleted file mode 100644
index 96db2778a97810989c8546b0a2e85a2e6dadaedc..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_jp.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-#Thu Sep 08 16:42:38 CEST 2011
-artefact.amount=\u898B\u3064\u304B\u3063\u305F\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u6570\: {0}
-artefact.author=\u4F5C\u6210\u8005
-artefact.date=\u65E5\u4ED8
-artefact.description=\u8AAC\u660E
-artefact.description.too.long=$\:artefact.description \u306F {0} \u6587\u5B57\u3092\u8D85\u3048\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002
-artefact.handlerdetails=\u30BF\u30A4\u30D7\u8A73\u7D30
-artefact.no.source=\u5229\u7528\u4E0D\u53EF
-artefact.open.source=\u30BD\u30FC\u30B9\u306B\u95A2\u3057\u3066
-artefact.reflexion=\u30EA\u30D5\u30EC\u30AF\u30B7\u30E7\u30F3
-artefact.reflexion.original=\u30AA\u30EA\u30B8\u30CA\u30EB\u30EA\u30D5\u30EC\u30AF\u30B7\u30E7\u30F3
-artefact.source=\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u306E\u30BD\u30FC\u30B9
-artefact.sourcelink=\u30BD\u30FC\u30B9
-artefact.tags=\u30BF\u30B0
-artefact.title=\u30BF\u30A4\u30C8\u30EB
-artefact.title.not.empty=$\:artefact.title \u306F\u5FC5\u9808\u5165\u529B\u9805\u76EE\u3067\u3059\u3002
-artefact.title.too.long=$\:artefact.title \u306F {0} \u6587\u5B57\u4EE5\u4E0A\u3092\u8D85\u3048\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
-artefact.type=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u30BF\u30A4\u30D7
-artefact.used.in.maps=\u4F7F\u7528\:
-browse.root=\u30BF\u30B0
-choose.artefact=\u9078\u629E
-delete.artefact=\u524A\u9664
-delete.artefact.text=\u672C\u5F53\u306B\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8 {0} \u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B?
-detail.options=\u8868\u793A\u8A2D\u5B9A
-details.link=\u8A73\u7D30
-display.option.enabled=\u6709\u52B9
-display.option.intro=\u3042\u306A\u305F\u306E\u30EA\u30B9\u30C8\u306B\u8868\u793A\u3055\u308C\u308B\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u5C5E\u6027\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-display.option.submit=\u9001\u4FE1\u3057\u3066\u4FDD\u5B58\u3059\u308B
-display.option.title=$\:detail.options
-no.artefacts.found=\u3042\u306A\u305F\u306F\u307E\u3060\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u53CE\u96C6\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B\u304B\u3001OLAT\u5185\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u53CE\u96C6\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-page.links=\u30DA\u30FC\u30B8
-reflexion.artefact=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u306E\u30EA\u30D5\u30EC\u30AF\u30B7\u30E7\u30F3
-remove.from.map=\u30D5\u30A9\u30EB\u30C0\u304B\u3089\u524A\u9664\u3059\u308B
-small.details.link=\u30D3\u30E5\u30FC
-table.empty=$\:no.artefacts.found
-table.header.choose=\u9078\u629E
-table.header.reflexion=\u30EA\u30D5\u30EC\u30AF\u30B7\u30E7\u30F3
-table.header.type=\u30BF\u30A4\u30D7
-table.header.unlink=\u524A\u9664
-table.header.view=\u30D3\u30E5\u30FC
-table.row.reflexion=\u7DE8\u96C6
-tag.browser.intro=\u3042\u306A\u305F\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u5185\u306E\u30BF\u30B0\u3092\u691C\u7D22\u3057\u307E\u3059\u3002
-tag.textboxlist.hint=\u3055\u3089\u306B\u30BF\u30B0\u3092\u8FFD\u52A0\u3059\u308B\u306B\u306F\u3001\u3053\u3053\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-title.reflexion.artefact=\u3053\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u306E\u30EA\u30D5\u30EC\u30AF\u30B7\u30E7\u30F3
-view.artefact.header=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u306E\u8A73\u7D30\u30D3\u30E5\u30FC
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_nl_NL.properties
deleted file mode 100644
index c2c56007fed949c089148adbff48248d127813b4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_nl_NL.properties
+++ /dev/null
@@ -1,49 +0,0 @@
-#Thu Sep 08 16:42:47 CEST 2011
-artefact.amount=Aantal gevonden artefacten\: {0}
-artefact.author=Auteur
-artefact.date=Datum
-artefact.description=Beschrijving
-artefact.description.too.long=De $\:artefact.description mag niet meer dan {0} tekens bevatten.
-artefact.handlerdetails=Type details
-artefact.no.source=niet beschikbaar
-artefact.open.source=betreffende bron
-artefact.reflexion=Reflectie
-artefact.reflexion.original=Oorspronkelijke reflectie
-artefact.reflexion.view.descr=Hier kan u de oorspronkelijke reflectie terugvinden wanneer u een artefact aanmaakt. U kan ook reflecteren over links in mappen.
-artefact.source=Bron van verzameling
-artefact.sourcelink=Bron
-artefact.tags=Tags
-artefact.title=Titel
-artefact.title.not.empty=De $\:artefact.title is verplicht.
-artefact.title.too.long=De $\:artefact.title mag niet meer dan {0} tekens bevatten.
-artefact.type=Artefact type
-artefact.used.in.maps=Gebruikt in
-browse.root=Tags
-choose.artefact=Selecteer
-delete.artefact=Verwijder
-delete.artefact.text=Wilt u artefact {0} zeker verwijderen?
-detail.options=Toon instellingen
-details.link=Details
-display.option.enabled=Aan
-display.option.intro=Gelieve de artefact eigenschappen te selecteren die op uw lijst moeten verschijnen.
-display.option.submit=Toevoegen en opslaan
-display.option.title=$\:detail.options
-info.no.reflexion.yet=Er zijn nog geen reflecties over dit artefact in uw accumulatieve folder. De tekortkomende instelling in de reflectie van dit artefact.
-no.artefacts.found=U hebt nog geen artefacten verzameld. Upload een artefact of verzamel hen binnen OLAT.
-page.links=Pagina
-reflexion.artefact=Reflectie van artefact
-reflexion.link=Reflectie over link naar een accumulatieve map
-remove.from.map=Verwijder uit map
-small.details.link=Bekijk
-table.empty=$\:no.artefacts.found
-table.header.choose=Selecteren
-table.header.reflexion=Reflectie
-table.header.type=Type
-table.header.unlink=Verwijderen
-table.header.view=Bekijk
-table.row.reflexion=Aanpassen
-tag.browser.intro=Doorzoek uw artefacten naar tags.
-tag.textboxlist.hint=Klik hier om meer tags toe te voegen.
-title.reflexion.artefact=Reflectie over dit artefact
-title.reflexion.link=Pas reflectie aan over het selecteren van dit artefact in een accumulatieve map
-view.artefact.header=Gedetailleerd overzicht van artefact
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_pl.properties
deleted file mode 100644
index cd777f0bd859ab0bfebbe3dd6362f89e29eca8d2..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_pl.properties
+++ /dev/null
@@ -1,48 +0,0 @@
-#Thu Sep 08 16:42:41 CEST 2011
-artefact.amount=Liczba znalezionych artefakt\u00F3w\: {0}
-artefact.author=Autor
-artefact.date=Data
-artefact.description=Opis
-artefact.description.too.long=$\:artefact.description nie mo\u017Ce przekracza\u0107 {0} znak\u00F3w.
-artefact.handlerdetails=Wpisz szczeg\u00F3\u0142y
-artefact.no.source=niedost\u0119pny
-artefact.open.source=\u017Ar\u00F3d\u0142o
-artefact.reflexion=Komentarz
-artefact.reflexion.original=Oryginalny komentarz
-artefact.reflexion.view.descr=W tym miejscu widoczny jest komentarz, umieszczony podczas tworzenia artefaktu. Mo\u017Cesz tak\u017Ce komentowa\u0107 linki do folder\u00F3w.
-artefact.source=\u0179r\u00F3d\u0142o
-artefact.sourcelink=\u0179r\u00F3d\u0142o
-artefact.tags=Tagi
-artefact.title=Tytu\u0142
-artefact.title.not.empty=$\:artefact.title jest obowi\u0105zkowy.
-artefact.title.too.long=$\:artefact.title nie mo\u017Ce przekracza\u0107 {0} znak\u00F3w.
-artefact.type=Typ artefaktu
-artefact.used.in.maps=U\u017Cyty w
-browse.root=Tagi
-choose.artefact=Wybierz
-delete.artefact=Usu\u0144
-delete.artefact.text=Czy na pewno chcesz usun\u0105\u0107 artefakt {0}?
-detail.options=Ustawienia wy\u015Bwietlania
-details.link=Szczeg\u00F3\u0142y
-display.option.enabled=Aktywny
-display.option.intro=Wybierz atrybuty, kt\u00F3re powinny pojawi\u0107 si\u0119 na li\u015Bcie.
-display.option.submit=Zatwierd\u017A i zapisz
-display.option.title=$\:detail.options
-no.artefacts.found=Nie posiadasz jeszcze \u017Cadnych artefakt\u00F3w. Mo\u017Cesz je za\u0142adowa\u0107 lub pobra\u0107 z OLAT.
-page.links=Strona
-reflexion.artefact=Komentarz do artefaktu
-reflexion.link=Komentarz linku do folderu zbiorczego
-remove.from.map=Usu\u0144 z folderu
-small.details.link=Widok
-table.empty=$\:no.artefacts.found
-table.header.choose=Wybierz
-table.header.reflexion=Komentarz
-table.header.type=Typ
-table.header.unlink=Usu\u0144
-table.header.view=Widok
-table.row.reflexion=Edycja
-tag.browser.intro=Wyszukaj swoje artefakty wed\u0142ug tag\u00F3w.
-tag.textboxlist.hint=Kliknij tu, \u017Ceby doda\u0107 wi\u0119cej tag\u00F3w.
-title.reflexion.artefact=Komentarz do tego artefaktu
-title.reflexion.link=Edytuj komentarz, wybieraj\u0105c ten artefakt w folderze zbiorczym
-view.artefact.header=Widok szczeg\u00F3\u0142owy artefaktu
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_pt_BR.properties
deleted file mode 100644
index b7bd3d103619c29c46c28feebaf24f911dc61552..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_pt_BR.properties
+++ /dev/null
@@ -1,57 +0,0 @@
-#Wed Jul 30 16:51:39 CEST 2014
-artefact.amount=N\u00FAmero de artefatos encontrados\: {0}
-artefact.author=Autor
-artefact.date=Data
-artefact.description=Descri\u00E7\u00E3o
-artefact.description.too.long=O $\:artefact.description n\u00E3o deve exceder {0} caracteres.
-artefact.handlerdetails=Detalhes do tipo
-artefact.move.title=Selecione um destino para mover este artefato
-artefact.moved=O artefato foi movida com sucesso para {0}
-artefact.no.source=N\u00E3o dispon\u00EDvel
-artefact.open.source=Sobre a fonte
-artefact.options.move=Mover
-artefact.options.title=Selecione uma opera\u00E7\u00E3o para este artefato
-artefact.reflexion=Reflex\u00E3o
-artefact.reflexion.original=Reflex\u00E3o original
-artefact.reflexion.view.descr=Aqui voc\u00EA pode ver a reflex\u00E3o original fornecido ao criar este artefato. Voc\u00EA tamb\u00E9m pode refletir sobre os links para as pastas.
-artefact.source=Fonte de coleta
-artefact.sourcelink=Fonte
-artefact.tags=Tags/Marcadores
-artefact.tags.title=Marca\u00E7\u00F5es de artefato
-artefact.title=T\u00EDtulo
-artefact.title.not.empty=O $\:artefact.title \u00E9 obrigat\u00F3rio
-artefact.title.too.long=O $\:artefact.title n\u00E3o deve exceder {0} caracteres.
-artefact.type=Tipo de artefato
-artefact.used.in.maps=Usado em
-browse.root=Tags/Marcadores
-choose.artefact=Selecionar
-delete.artefact=Excluir
-delete.artefact.text=Voc\u00EA realmente deseja excluir o artefato {0}?
-detail.options=Mostrar configura\u00E7\u00F5es
-details.link=Detalhes
-display.option.enabled=Ativado
-display.option.intro=Por favor, selecione os atributos de artefato que devem aparecer na sua lista.
-display.option.submit=Enviar e salvar
-display.option.title=$\:detail.options
-info.no.reflexion.yet=N\u00E3o existem ainda reflex\u00F5es sobre a sele\u00E7\u00E3o deste artefato na sua pasta acumulativa. A configura\u00E7\u00E3o padr\u00E3o \u00E9 a reflex\u00E3o deste artefato.
-no.artefacts.found=Voc\u00EA n\u00E3o recolheu nenhum artefato ainda. Carregue um ou colete-os dentro OLAT.
-option.link=Mais op\u00E7\u00F5es
-page.links=P\u00E1gina
-reflexion.artefact=Reflex\u00E3o do artefato
-reflexion.link=Reflex\u00E3o sobre link para uma pasta acumulativa
-remove.from.map=Remover da pasta
-small.details.link=Mostrar
-table.empty=$\:no.artefacts.found
-table.header.choose=Selecionar
-table.header.move=Mover
-table.header.reflexion=Reflex\u00E3o
-table.header.type=Tipo
-table.header.unlink=Remover
-table.header.view=Mostrar
-table.row.reflexion=Editar
-tag.browser.intro=Buscar seus artefatos por marcadores/Tags.
-tag.textboxlist.hint=Clique aqui para adicionar mais Tags/Marcadores.
-tags.view.header=$\:tag.browser.intro
-title.reflexion.artefact=Reflex\u00E3o sobre este artefato
-title.reflexion.link=Editar reflex\u00E3o sobre a sele\u00E7\u00E3o deste artefacto em uma pasta acumulativa
-view.artefact.header=Vis\u00E3o detalhada do artefato
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_zh_CN.properties
deleted file mode 100644
index 28043ceb352710c5b31f6faa07aaa20e7ad10ae4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_i18n/LocalStrings_zh_CN.properties
+++ /dev/null
@@ -1,49 +0,0 @@
-#Thu Sep 08 16:42:39 CEST 2011
-artefact.amount=\u53D1\u73B0\u76EE\u6807\u4E2A\u6570\uFF1A{0}
-artefact.author=\u4F5C\u8005
-artefact.date=\u65E5\u671F
-artefact.description=\u63CF\u8FF0
-artefact.description.too.long=$\:artefact.description \u4E0D\u5E94\u8D85\u8FC7{0}\u4E2A\u5B57\u7B26\u3002
-artefact.handlerdetails=\u7C7B\u578B\u7EC6\u8282
-artefact.no.source=\u4E0D\u53EF\u7528
-artefact.open.source=\u5173\u4E8E\u8D44\u6E90
-artefact.reflexion=\u53CD\u601D
-artefact.reflexion.original=\u539F\u59CB\u53CD\u601D
-artefact.reflexion.view.descr=\u60A8\u5728\u8FD9\u91CC\u53EF\u4EE5\u770B\u89C1\u5F53\u65F6\u521B\u5EFA\u8FD9\u4E2A\u8FD9\u4E2A\u6863\u6848\u65F6\u7684\u539F\u59CB\u53CD\u601D\u8BB0\u5F55\u3002\u4F60\u4E5F\u53EF\u4EE5\u5C06\u94FE\u63A5\u653E\u5230\u6587\u4EF6\u5939\u4E2D\u3002
-artefact.source=\u6536\u96C6\u8DEF\u5F84
-artefact.sourcelink=\u8D44\u6E90
-artefact.tags=\u6807\u7B7E
-artefact.title=\u6807\u9898
-artefact.title.not.empty=$\:artefact.title\u662F\u9700\u8981\u624B\u5DE5\u586B\u5199\u7684\u3002
-artefact.title.too.long=$\:artefact.title \u4E0D\u80FD\u8D85\u8FC7{0}\u4E2A\u5B57\u7B26\u3002
-artefact.type=\u6863\u6848\u7C7B\u578B
-artefact.used.in.maps=\u7528\u4E8E
-browse.root=\u6807\u7B7E
-choose.artefact=\u9009\u62E9
-delete.artefact=\u5220\u9664
-delete.artefact.text=\u60A8\u771F\u7684\u8981\u5220\u9664\u6863\u6848{0}?
-detail.options=\u663E\u793A\u8BBE\u7F6E
-details.link=\u8BE6\u7EC6
-display.option.enabled=\u542F\u7528
-display.option.intro=\u8BF7\u9009\u62E9\u53EF\u4EE5\u7528\u4E8E\u51FA\u73B0\u5728\u60A8\u7684\u5217\u8868\u4E2D\u7684\u6863\u6848\u5C5E\u6027\u3002
-display.option.submit=\u63D0\u4EA4\u5E76\u4FDD\u5B58
-display.option.title=$\:detail.options
-info.no.reflexion.yet=\u76EE\u524D\u5728\u60A8\u7684\u5F62\u6210\u6027\u6587\u4EF6\u5939\u4E2D\u5E76\u672A\u627E\u5230\u5DF2\u9009\u62E9\u8BC1\u660E\u76F8\u5173\u7684\u53CD\u601D\u6D3B\u52A8\u3002\u9ED8\u8BA4\u8BBE\u7F6E\u662F\u663E\u793A\u8BC1\u660E\u7684\u53CD\u601D\u3002
-no.artefacts.found=\u76EE\u524D\u60A8\u8FD8\u6CA1\u6709\u4EFB\u4F55\u7535\u5B50\u6863\u6848\u3002\u73B0\u5728\u4E0A\u4F20\u6216\u8005\u4ECEOLAT\u4E2D\u6536\u96C6\u3002
-page.links=\u9875\u9762
-reflexion.artefact=\u7535\u5B50\u6863\u6848\u53CD\u9988
-reflexion.link=\u5173\u4E8E\u6B64\u94FE\u63A5\u7684\u53CD\u601D\u4F1A\u94FE\u63A5\u5230\u4E00\u4E2A\u7D2F\u79EF\u6027\u7684\u6587\u4EF6\u5939\u4E2D
-remove.from.map=\u4ECE\u6587\u4EF6\u5939\u4E2D\u79FB\u9664
-small.details.link=\u67E5\u770B
-table.empty=$\:no.artefacts.found
-table.header.choose=\u9009\u62E9
-table.header.reflexion=\u53CD\u601D
-table.header.type=\u7C7B\u578B
-table.header.unlink=\u79FB\u9664
-table.header.view=\u67E5\u770B
-table.row.reflexion=\u7F16\u8F91
-tag.browser.intro=\u6309\u6807\u7B7E\u641C\u7D22\u4F60\u7684\u7535\u5B50\u6863\u6848
-tag.textboxlist.hint=\u70B9\u51FB\u6B64\u5904\u6DFB\u52A0\u66F4\u591A\u6807\u7B7E
-title.reflexion.artefact=\u5173\u4E8E\u6B64\u7535\u5B50\u6863\u6848\u7684\u53CD\u601D
-title.reflexion.link=\u5728\u79EF\u7D2F\u6027\u6587\u4EF6\u5939\u9009\u4E2D\u7684\u7535\u5B50\u6863\u6848\u8FDB\u884C\u7F16\u8F91\u53CD\u601D\u5185\u5BB9
-view.artefact.header=\u7535\u5B50\u6863\u6848\u8BE6\u7EC6\u89C6\u56FE
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/FileArtefactDetailsController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/details/FileArtefactDetailsController.java
deleted file mode 100644
index d0b672b3935be522ece0d09798b934fb04ca1501..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/FileArtefactDetailsController.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.view.details;
-
-import org.olat.core.commons.services.vfs.VFSMetadata;
-import org.olat.core.commons.services.vfs.VFSRepositoryService;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.download.DownloadComponent;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.panel.Panel;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.gui.control.generic.closablewrapper.CloseableCalloutWindowController;
-import org.olat.core.gui.control.generic.modal.DialogBoxController;
-import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
-import org.olat.core.gui.media.MediaResource;
-import org.olat.core.util.vfs.VFSConstants;
-import org.olat.core.util.vfs.VFSItem;
-import org.olat.core.util.vfs.VFSLeaf;
-import org.olat.core.util.vfs.VFSMediaResource;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.artefacts.FileArtefact;
-import org.olat.portfolio.ui.artefacts.collect.EPCreateFileArtefactStepForm00;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * show specific infos for FileArtefact 
- * allow to delete / upload a file
- * 
- * <P>
- * Initial Date:  08.10.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class FileArtefactDetailsController extends BasicController {
-
-	private VelocityContainer vC;
-	private boolean readOnlyMode;
-	MediaResource mr;
-	private Link delLink;
-	private DialogBoxController delDialog;
-	private FileArtefact fArtefact;
-	private Controller fileUploadCtrl;
-	private Link uploadLink;
-	private CloseableCalloutWindowController calloutCtrl;
-	private Panel viewPanel;
-	
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	@Autowired
-	private VFSRepositoryService vfsRepositoryService;
-
-	public FileArtefactDetailsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, boolean readOnlyMode) {
-		super(ureq, wControl);
-		this.readOnlyMode = readOnlyMode;
-		fArtefact = (FileArtefact)artefact;
-		
-		viewPanel = new Panel("empty");
-		initViewDependingOnFileExistance(ureq);
-		
-		putInitialPanel(viewPanel);		
-	}
-	
-	private void initViewDependingOnFileExistance(UserRequest ureq){
-		VFSItem file = ePFMgr.getArtefactContainer(fArtefact).resolve(fArtefact.getFilename());
-		if (file != null && file instanceof VFSLeaf) {
-			initFileView(file, ureq);
-		} else if (!readOnlyMode){
-			initUploadView();			
-		}
-	}
-	
-	private void initFileView(VFSItem file, UserRequest ureq){
-		vC = createVelocityContainer("fileDetails");
-		DownloadComponent downlC = new DownloadComponent("download", (VFSLeaf) file);
-		vC.put("download", downlC);	
-		vC.contextPut("filename", fArtefact.getFilename());
-		
-		if(file.canMeta() == VFSConstants.YES) {
-			VFSMetadata meta = file.getMetaInfo();
-			vC.contextPut("meta", meta);
-			// show a preview thumbnail if possible
-			if(file instanceof VFSLeaf) {
-				VFSLeaf thumb = vfsRepositoryService.getThumbnail((VFSLeaf)file, meta, 200, 200, false);
-				if(thumb != null) {
-					mr = new VFSMediaResource(thumb);
-				}
-				if(mr != null) {
-					String thumbMapper = registerMapper(ureq, (relPath, request) ->  mr);					
-					vC.contextPut("thumbMapper", thumbMapper);
-				}
-			}
-		}
-		if (!readOnlyMode){
-			// allow to delete
-			delLink = LinkFactory.createLink("delete.file", vC, this);
-			delLink.setUserObject(file);
-		}
-		
-		viewPanel.setContent(vC);
-	}
-	
-	private void initUploadView(){
-		vC = createVelocityContainer("fileDetailsUpload");
-		uploadLink = LinkFactory.createLink("upload.link", vC, this);
-		viewPanel.setContent(vC);
-	}
-	
-	private void popupUploadCallout(UserRequest ureq){
-		removeAsListenerAndDispose(fileUploadCtrl);
-		fileUploadCtrl = new EPCreateFileArtefactStepForm00(ureq, getWindowControl(), fArtefact);
-		listenTo(fileUploadCtrl);		
-		removeAsListenerAndDispose(calloutCtrl);
-		calloutCtrl = new CloseableCalloutWindowController(ureq, getWindowControl(), fileUploadCtrl.getInitialComponent(), uploadLink, fArtefact.getTitle(), true, null);
-		calloutCtrl.addDisposableChildController(fileUploadCtrl);
-		listenTo(calloutCtrl);
-		calloutCtrl.activate();
-	}
-	
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		if (source == delLink) {			
-			delDialog = activateYesNoDialog(ureq, translate("delete.file"), translate("delete.dialog"), delDialog);
-			delDialog.setUserObject(delLink.getUserObject());
-		}	else if (source == uploadLink){
-			popupUploadCallout(ureq);
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		if (source == delDialog && DialogBoxUIFactory.isYesEvent(event)) { 
-			VFSItem artefactFile = (VFSItem) delDialog.getUserObject();
-			artefactFile.delete();
-			fArtefact.setFilename("");
-			ePFMgr.updateArtefact(fArtefact);
-			initViewDependingOnFileExistance(ureq);
-		} else if (source == fileUploadCtrl){
-			calloutCtrl.deactivate();
-			removeAsListenerAndDispose(calloutCtrl);			
-			ePFMgr.updateArtefact(fArtefact);
-			initViewDependingOnFileExistance(ureq);
-		} else if (source == calloutCtrl && event.equals(CloseableCalloutWindowController.CLOSE_WINDOW_EVENT)) {
-			removeAsListenerAndDispose(calloutCtrl);
-			calloutCtrl = null;
-		}
-	}
-
-	@Override
-	protected void doDispose() {
-		// nothing		
-	}
-	
-}
-
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/TextArtefactDetailsController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/details/TextArtefactDetailsController.java
deleted file mode 100644
index 41875d11fb0713e61018bfb32cc6a967ac4b7559..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/TextArtefactDetailsController.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.artefacts.view.details;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.gui.control.generic.closablewrapper.CloseableCalloutWindowController;
-import org.olat.core.util.Formatter;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.filter.Filter;
-import org.olat.core.util.filter.FilterFactory;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.core.util.vfs.VFSContainerMapper;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.ui.artefacts.collect.EPCreateTextArtefactStepForm00;
-
-/**
- * 
- * Description:<br>
- * Show the specific part of the EPTextArtefact
- * 
- * <P>
- * Initial Date: 11 oct. 2010 <br>
- * 
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class TextArtefactDetailsController extends BasicController {
-
-	private final VelocityContainer vC;
-	private boolean readOnlyMode;
-	private Link editBtn;
-	private CloseableCalloutWindowController calloutCtrl;
-	private EPCreateTextArtefactStepForm00 textEditCtrl;
-	private AbstractArtefact artefact;
-	private EPFrontendManager ePFMgr;
-
-	public TextArtefactDetailsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, boolean readOnlyMode) {
-		super(ureq, wControl);
-		this.readOnlyMode = readOnlyMode;
-		this.artefact = artefact;
-		ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-		vC = createVelocityContainer("textDetails");
-		init(ureq);
-
-		putInitialPanel(vC);
-	}
-
-	private void init(UserRequest ureq) {
-		String artFulltextContent = ePFMgr.getArtefactFullTextContent(artefact);
-		if (!readOnlyMode) {
-			// prepare an edit link
-			String fulltext = FilterFactory.getHtmlTagAndDescapingFilter().filter(artFulltextContent);
-			fulltext = StringHelper.xssScan(fulltext);
-			fulltext = Formatter.truncate(fulltext, 50);
-			editBtn = LinkFactory.createCustomLink("text.edit.link", "edit", fulltext, Link.NONTRANSLATED, vC, this);
-			editBtn.setIconRightCSS("o_icon o_icon_inline_editable");
-		} else {
-			// register a mapper to deliver uploaded media files
-			final VFSContainer artefactFolder = ePFMgr.getArtefactContainer(artefact);
-			String mapperBase = registerMapper(ureq, new VFSContainerMapper(artefactFolder));
-			Filter urlFilter = FilterFactory.getBaseURLToMediaRelativeURLFilter(mapperBase);
-			String wrappedText = urlFilter.filter(artFulltextContent);
-			vC.contextPut("text", wrappedText);
-		}
-	}
-	
-
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		if (source == editBtn) {
-			popupEditorCallout(ureq);
-		} 
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		if (source == calloutCtrl && event.equals(CloseableCalloutWindowController.CLOSE_WINDOW_EVENT)) {
-			removeAsListenerAndDispose(calloutCtrl);
-			calloutCtrl = null;
-		} else if (source == textEditCtrl && event == Event.DONE_EVENT){
-			// close callout, refresh artefact-details
-			calloutCtrl.deactivate();
-			removeAsListenerAndDispose(calloutCtrl);
-			init(ureq);
-		}
-	}
-
-	private void popupEditorCallout(UserRequest ureq) {
-		removeAsListenerAndDispose(textEditCtrl);
-		textEditCtrl = new EPCreateTextArtefactStepForm00(ureq, getWindowControl(), artefact);
-		listenTo(textEditCtrl);
-		instantiateCalloutController(ureq, textEditCtrl.getInitialComponent(), editBtn);
-	}
-
-	private void instantiateCalloutController(UserRequest ureq, Component content, Link button) {
-		removeAsListenerAndDispose(calloutCtrl);
-		String title = translate("textartefact.edit.title");
-		calloutCtrl = new CloseableCalloutWindowController(ureq, getWindowControl(), content, button, title, true, null);
-		listenTo(calloutCtrl);
-		calloutCtrl.activate();
-	}
-
-	@Override
-	protected void doDispose() {
-		// nothing
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_content/fileDetails.html b/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_content/fileDetails.html
deleted file mode 100644
index 68ca56a805f49aed6a469972477ac6208e2e8e31..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_content/fileDetails.html
+++ /dev/null
@@ -1,8 +0,0 @@
-$r.translate("file.title") $filename 
-$r.render("download") 
-$r.translate("file.size") $!meta.getFormattedSize() <br/>
-#if ($thumbMapper)
-	$r.translate("file.preview")<br/>
-	<img src="${thumbMapper}/$filename" alt="$filename"/>
-#end
-#if ($r.available("delete.file")) <br/>$r.render("delete.file") #end
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_content/fileDetailsUpload.html b/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_content/fileDetailsUpload.html
deleted file mode 100644
index b87d8fe12b043d0320313894726475f58c19e3fa..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_content/fileDetailsUpload.html
+++ /dev/null
@@ -1 +0,0 @@
-$r.render("upload.link")
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_content/textDetails.html b/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_content/textDetails.html
deleted file mode 100644
index 522d5665ed13dcfebcb7119c5ee0d616f80fe2fb..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_content/textDetails.html
+++ /dev/null
@@ -1,7 +0,0 @@
-$r.translate("text.fullcontent") 
-	<br/>
-#if ($r.available("text.edit.link")) 
-	$r.render("text.edit.link") 
-#else
-	$r.formatLatexFormulas($!text)
-#end 
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_de.properties
deleted file mode 100644
index a9f7e8d9baf3d44fa511dca5b710cd379be76cfb..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-file.title=Dateiname:
-file.size=Dateigr\u00f6sse:
-textartefact.edit.title=Inhalt des Text-Artefakts editieren 
-text.edit.link=Bearbeiten
-text.fullcontent=Inhalt des Text-Artefakts:
-file.preview=Vorschau:
-delete.file=Datei l\u00f6schen
-delete.dialog=M\u00f6chten Sie die Datei wirklich l\u00f6schen? Das Artefakt bleibt bestehen.
-upload.link=Datei hochladen
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_en.properties
deleted file mode 100644
index 39e68ca4da5cf3a8eac9c93b9adf80ca68be5eee..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-#Thu Jan 20 19:15:27 CET 2011
-delete.dialog=Do you really want to delete this file? Your artefact won't be deleted.
-delete.file=Delete file
-file.preview=Preview\:
-file.size=File size\:
-file.title=File name\:
-text.edit.link=Edit
-text.fullcontent=Content of text artefact\:
-textartefact.edit.title=Edit content of text artefact
-upload.link=Upload file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index 972c421db7daff34c8be830af19c67107dd72c74..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-#Fri Jan 21 10:17:00 CET 2011
-delete.dialog=Voulez-vous vraiment \u00E9liminer le fichier? L'artefact n'est pas \u00E9limin\u00E9.
-delete.file=\u00C9liminer fichier
-file.preview=Pr\u00E9visualisation\:
-file.size=Taille fichier\:
-file.title=Nom fichier\:
-text.edit.link=\u00C9laborer
-text.fullcontent=Contenu de l'artefact texte\:
-textartefact.edit.title=\u00C9diter contenu de l'artefact texte
-upload.link=T\u00E9l\u00E9charger fichier
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_it.properties
deleted file mode 100644
index 388cf549e96d5ba534ea7ccedf2952d85ee67a03..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_it.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-#Mon Jan 17 12:25:31 CET 2011
-delete.dialog=Vuole veramente eliminare il file? L'artefatto non viene eliminato.
-delete.file=Eliminare file
-file.preview=Anteprima\:
-file.size=Misura file\:
-file.title=Nome file\:
-text.edit.link=Elaborare
-text.fullcontent=Contenuto dell'artefatto testo\:
-textartefact.edit.title=Editare contenuto dell'artefatto testo
-upload.link=Caricare file
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_jp.properties
deleted file mode 100644
index 51635034ea974b36f6385afe308a1eabf5d85f92..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_jp.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-#Thu Sep 08 16:42:38 CEST 2011
-delete.dialog=\u672C\u5F53\u306B\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B? \u3042\u306A\u305F\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u306F\u524A\u9664\u3055\u308C\u307E\u305B\u3093\u3002
-delete.file=\u30D5\u30A1\u30A4\u30EB\u3092\u524A\u9664\u3059\u308B
-file.preview=\u30D7\u30EC\u30D3\u30E5\u30FC\:
-file.size=\u30D5\u30A1\u30A4\u30EB\u30B5\u30A4\u30BA\:
-file.title=\u30D5\u30A1\u30A4\u30EB\u540D\:
-text.edit.link=\u7DE8\u96C6
-text.fullcontent=\u30C6\u30AD\u30B9\u30C8\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\:
-textartefact.edit.title=\u30C6\u30AD\u30B9\u30C8\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u7DE8\u96C6\u3059\u308B
-upload.link=\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_nl_NL.properties
deleted file mode 100644
index 96abf13580032be0687712795db745511391a4e2..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_nl_NL.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-#Thu Sep 08 16:42:47 CEST 2011
-delete.dialog=Weet u zeker dat u dit bestand wilt verwijderen? Uw artefact zal niet verwijderd worden.
-delete.file=Verwijder bestand
-file.preview=Voorvertoning\:
-file.size=Bestandsgrootte\:
-file.title=Naam van bestand\:
-text.edit.link=Aanpassen
-text.fullcontent=Inhoud van tekst artefact\:
-textartefact.edit.title=Pas inhoud van tekst artefact aan
-upload.link=Bestand uploaden
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_pl.properties
deleted file mode 100644
index afb36de5bfc8f809b7b274ced034d02b3b699bc0..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_pl.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-#Thu Sep 08 16:42:41 CEST 2011
-delete.dialog=Czy na pewno chcesz usun\u0105\u0107 ten plik? Tw\u00F3j artefakt nie zostanie usuni\u0119ty.
-delete.file=Usu\u0144 plik
-file.preview=Podgl\u0105d\:
-file.size=Rozmiar pliku\:
-file.title=Nazwa pliku\:
-text.edit.link=Edytuj
-text.fullcontent=Zawarto\u015B\u0107 artefaktu tekstowego\:
-textartefact.edit.title=Edytuj zawarto\u015B\u0107 artefaktu tekstowego
-upload.link=Za\u0142aduj plik
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_pt_BR.properties
deleted file mode 100644
index 3e8e17d38b73da64414590cb6cda425e57e36421..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_pt_BR.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-#Thu Sep 08 16:42:38 CEST 2011
-delete.dialog=Voc\u00EA realmente deseja excluir este arquivo? Seu artefato n\u00E3o ser\u00E1 apagado.
-delete.file=Excluir arquivo
-file.preview=Amostra\:
-file.size=Tamanho do arquivo\:
-file.title=Nome do arquivo\:
-text.edit.link=Editar
-text.fullcontent=Conte\u00FAdo do artefato texto\:
-textartefact.edit.title=Editar o conte\u00FAdo de artefato de texto
-upload.link=Enviar arquivo
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_zh_CN.properties
deleted file mode 100644
index 96161f0a160126c967543c7b7fa9ba2db8d39dbc..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/details/_i18n/LocalStrings_zh_CN.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-#Thu Sep 08 16:42:39 CEST 2011
-delete.dialog=\u60A8\u771F\u60F3\u8981\u5220\u9664\u8FD9\u4E2A\u6587\u4EF6\u561B\uFF1F\u60A8\u7684\u6863\u6848\u4E0D\u4F1A\u88AB\u5220\u9664\u3002
-delete.file=\u5220\u9664\u6587\u4EF6
-file.preview=\u9884\u89C8\:
-file.size=\u6587\u4EF6\u5927\u5C0F\uFF1A
-file.title=\u6587\u4EF6\u540D\u79F0\uFF1A
-text.edit.link=\u7F16\u8F91
-text.fullcontent=\u6587\u672C\u6587\u4EF6\u7684\u5185\u5BB9
-textartefact.edit.title=\u7F16\u8F91\u6587\u672C\u6587\u4EF6\u7684\u5185\u5BB9
-upload.link=\u4E0A\u4F20\u6587\u4EF6
diff --git a/src/main/java/org/olat/portfolio/ui/filter/EPArtefactTagSelectionController.java b/src/main/java/org/olat/portfolio/ui/filter/EPArtefactTagSelectionController.java
deleted file mode 100644
index 22167e9303c0bc6d3a2c44c782c679839387b5e9..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/EPArtefactTagSelectionController.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.filter;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItem;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.components.form.flexible.impl.FormEvent;
-import org.olat.core.gui.components.form.flexible.impl.elements.MultipleSelectionElementImpl;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.Event;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * edit tag filter with all available tags of this user
- * 
- * <P>
- * Initial Date:  28.10.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPArtefactTagSelectionController extends FormBasicController {
-
-	private List<String> selectedTagsList;
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	private MultipleSelectionElementImpl chkBox;
-
-	public EPArtefactTagSelectionController(UserRequest ureq, WindowControl wControl, List<String> selectedTagsList) {
-		super(ureq, wControl, FormBasicController.LAYOUT_VERTICAL);
-		this.selectedTagsList = selectedTagsList;
-		initForm(ureq);		
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer, org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		setFormDescription("filter.tag.intro");
-		
-		Map<String, String> allUserTags = ePFMgr.getUsersMostUsedTags(getIdentity(), -1);
-		LinkedList<Entry<String, String>> sortEntrySet = new LinkedList<>(allUserTags.entrySet());
-		String[] keys = new String[sortEntrySet.size()];
-		String[] values = new String[sortEntrySet.size()];
-		int i=0;
-		for (Entry<String, String> entry : sortEntrySet) {
-			String tag = entry.getValue();
-			keys[i] = tag;
-			values[i] = tag; 
-			i++;
-		}
-		chkBox = (MultipleSelectionElementImpl) uifactory.addCheckboxesVertical("tag", null, formLayout, keys, values, 2);
-		
-		if (selectedTagsList != null) {
-			String[] selectedKeys = selectedTagsList.toArray(new String[0]);
-			chkBox.setSelectedValues(selectedKeys);
-		}
-		chkBox.addActionListener(FormEvent.ONCHANGE);
-		uifactory.addFormSubmitButton("filter.type.submit", formLayout);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest, org.olat.core.gui.components.form.flexible.FormItem, org.olat.core.gui.components.form.flexible.impl.FormEvent)
-	 */
-	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
-		if (selectedTagsList == null) selectedTagsList = new ArrayList<>();
-		Collection<String> selectedKeys = chkBox.getSelectedKeys();
-		Set<String> allKeys = chkBox.getKeys();
-		for (String actTag : allKeys) {
-			boolean selected = selectedKeys.contains(actTag);
-			if (selected && !selectedTagsList.contains(actTag)) {
-				selectedTagsList.add(actTag);
-			} 
-			if (!selected && selectedTagsList.contains(actTag)) {
-				selectedTagsList.remove(actTag);
-			}
-		}
-		if (selectedTagsList.size() == 0) selectedTagsList = null;
-		
-		fireEvent(ureq, Event.CHANGED_EVENT);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void formOK(UserRequest ureq) {
-		fireEvent(ureq, Event.DONE_EVENT);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		//nothing
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/filter/EPArtefactTypeSelectionController.java b/src/main/java/org/olat/portfolio/ui/filter/EPArtefactTypeSelectionController.java
deleted file mode 100644
index 84c9f576d970e47566e951ff6a26179df15fcc9d..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/EPArtefactTypeSelectionController.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <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
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <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>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-package org.olat.portfolio.ui.filter;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItem;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.components.form.flexible.impl.FormEvent;
-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.translator.Translator;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.PortfolioModule;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * edit artefact type filter
- * 
- * <P>
- * Initial Date: 19.07.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPArtefactTypeSelectionController extends FormBasicController {
-	@Autowired
-	private PortfolioModule portfolioModule;
-	private List<String> selectedTypeList;
-	private ArrayList<MultipleSelectionElement> typeCmpList;
-
-	public EPArtefactTypeSelectionController(UserRequest ureq, WindowControl wControl, List<String> selectedTypeList) {
-		super(ureq, wControl);
-		this.selectedTypeList = selectedTypeList;
-		initForm(ureq);
-	}
-
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		setFormDescription("filter.type.intro");
-
-		String[] keys = new String[] { "onoff" };
-		String[] values = new String[] { translate("filter.type.enabled") };
-
-		List<EPArtefactHandler<?>> handlers = portfolioModule.getAllAvailableArtefactHandlers();
-		typeCmpList = new ArrayList<>();
-		for (EPArtefactHandler<?> handler : handlers) {
-			Translator handlerTrans = handler.getHandlerTranslator(getTranslator());
-			this.flc.setTranslator(handlerTrans);
-			String handlerClass = PortfolioFilterController.HANDLER_PREFIX + handler.getClass().getSimpleName() + PortfolioFilterController.HANDLER_TITLE_SUFFIX;
-			MultipleSelectionElement chkBox = uifactory.addCheckboxesHorizontal(handlerClass, formLayout, keys, values);
-			if (selectedTypeList != null && selectedTypeList.contains(handler.getType())) {
-				chkBox.select(keys[0], true);
-			}
-			chkBox.addActionListener(FormEvent.ONCHANGE);
-			chkBox.setUserObject(handler.getType());
-			typeCmpList.add(chkBox);
-		}
-		uifactory.addFormSubmitButton("filter.type.submit", formLayout);
-	}
-
-	
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.form.flexible.FormItem,
-	 *      org.olat.core.gui.components.form.flexible.impl.FormEvent)
-	 * fire change events on every click in form and update gui
-	 */
-	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
-		super.formInnerEvent(ureq, source, event);
-		updateSelectedTypeList();
-		fireEvent(ureq, Event.CHANGED_EVENT);
-	}
-
-	@Override
-	protected void formOK(UserRequest ureq) {
-		fireEvent(ureq, Event.DONE_EVENT);
-	}
-	
-	protected void updateSelectedTypeList(){
-		if (selectedTypeList == null) selectedTypeList = new ArrayList<>();
-		for (MultipleSelectionElement typeCmp : typeCmpList) {
-			String selType = (String) typeCmp.getUserObject();
-			if (typeCmp.isSelected(0) && !selectedTypeList.contains(selType)) {
-				selectedTypeList.add(selType);
-			} 
-			if (!typeCmp.isSelected(0) && selectedTypeList.contains(selType)) {
-				selectedTypeList.remove(selType);
-			}
-		}
-		if (selectedTypeList.size() == 0) selectedTypeList = null;
-	}
-
-	@Override
-	protected void doDispose() {
-		// nothing
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/filter/EPFilterSelectController.java b/src/main/java/org/olat/portfolio/ui/filter/EPFilterSelectController.java
deleted file mode 100644
index 7cd46286fbeae6d7ed0617672e98a865824e26fe..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/EPFilterSelectController.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.filter;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItem;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.FormLink;
-import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.components.form.flexible.impl.FormEvent;
-import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.EPFilterSettings;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * shows available filters and let user select from it
- * 
- * <P>
- * Initial Date:  12.11.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPFilterSelectController extends FormBasicController {
-
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	private FormLink adaptBtn;
-	private SingleSelection filterSel;
-	private ArrayList<EPFilterSettings> nonEmptyFilters;
-	private String presetFilterID;
-
-	public EPFilterSelectController(UserRequest ureq, WindowControl wControl, String presetFilterID) {
-		super(ureq, wControl);
-		this.presetFilterID = presetFilterID;
-		
-		initForm(ureq);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer, org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {		
-		List<EPFilterSettings> existingFilters = ePFMgr.getSavedFilterSettings(getIdentity());
-		for(Iterator<EPFilterSettings> existingFilterIt=existingFilters.iterator(); existingFilterIt.hasNext(); ) {
-			if(existingFilterIt.next().isFilterEmpty()) {
-				existingFilterIt.remove();
-			}
-		}
-
-		int amount = existingFilters.size() + 1;
-		nonEmptyFilters = new ArrayList<>(amount);
-		String[] theKeys = new String[amount];
-		String[] theValues = new String[amount];
-		theKeys[0] = String.valueOf(0);
-		theValues[0] = translate("filter.all");
-		int i=1;
-		String presetFilterIndex = "0";
-		for (EPFilterSettings epFilterSettings : existingFilters) {
-			theKeys[i] = epFilterSettings.getFilterId();
-			theValues[i] = epFilterSettings.getFilterName();
-			if (presetFilterID != null && presetFilterID.equals(epFilterSettings.getFilterId())) {
-				presetFilterIndex = epFilterSettings.getFilterId(); 
-			}
-			nonEmptyFilters.add(epFilterSettings);
-			i++;
-		}
-		// don't show anything if no filter exists
-		if (!nonEmptyFilters.isEmpty()) {
-			String page = velocity_root + "/filter_select.html";
-			FormLayoutContainer selection = FormLayoutContainer.createCustomFormLayout("filter_selection", getTranslator(), page);
-			selection.setRootForm(mainForm);
-			selection.setLabel("filter.select", null);
-			formLayout.add(selection);
-			
-			filterSel = uifactory.addDropdownSingleselect("filter.select", selection, theKeys, theValues, null);
-			filterSel.addActionListener(FormEvent.ONCHANGE);
-			filterSel.select(presetFilterIndex, true);
-			adaptBtn = uifactory.addFormLink("filter.adapt", selection);
-			adaptBtn.setVisible(!presetFilterIndex.equals("0"));
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest, org.olat.core.gui.components.form.flexible.FormItem, org.olat.core.gui.components.form.flexible.impl.FormEvent)
-	 */
-	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
-		if (source == filterSel){
-			int selFilter = filterSel.getSelected();
-			EPFilterSettings selFilterSet ;
-			if (selFilter != 0) {
-				selFilterSet = nonEmptyFilters.get(selFilter-1);
-			} else {
-				// all was selected, fire an empty filter
-				selFilterSet = new EPFilterSettings();
-			}
-			fireEvent(ureq, new PortfolioFilterChangeEvent(selFilterSet));
-		} else if (source == adaptBtn){
-			// launch search view
-			int selFilter = filterSel.getSelected();
-			if(selFilter > 0) {
-				EPFilterSettings selFilterSet = nonEmptyFilters.get(selFilter-1);
-				fireEvent(ureq, new PortfolioFilterEditEvent(selFilterSet));
-			}
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void formOK(UserRequest ureq) {
-		// nothing to persist
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// nothing
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/filter/PortfolioFilterChangeEvent.java b/src/main/java/org/olat/portfolio/ui/filter/PortfolioFilterChangeEvent.java
deleted file mode 100644
index 26d0826b05f354139cf1825daec1e6c849e125c7..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/PortfolioFilterChangeEvent.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <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
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <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>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-package org.olat.portfolio.ui.filter;
-
-import org.olat.core.gui.control.Event;
-import org.olat.portfolio.model.EPFilterSettings;
-
-/**
- * Initial Date:  15.07.2010 <br>
- * @author rhaag
- */
-public class PortfolioFilterChangeEvent extends Event {
-
-	private static final long serialVersionUID = -178470589077990526L;
-	private EPFilterSettings filterSettings;
-	
-	public PortfolioFilterChangeEvent(EPFilterSettings filterList) {
-		super("portfoliofilterchange");
-		this.filterSettings = filterList;
-	}
-	
-	public EPFilterSettings getFilterList(){
-		return filterSettings;
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/filter/PortfolioFilterController.java b/src/main/java/org/olat/portfolio/ui/filter/PortfolioFilterController.java
deleted file mode 100644
index a99112556d4b0c10aec9c3a9ccc131cffd6aa85b..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/PortfolioFilterController.java
+++ /dev/null
@@ -1,668 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.filter;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItem;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.DateChooser;
-import org.olat.core.gui.components.form.flexible.elements.FormLink;
-import org.olat.core.gui.components.form.flexible.elements.FormToggle;
-import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
-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.FormEvent;
-import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
-import org.olat.core.gui.components.link.Link;
-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.generic.closablewrapper.CloseableCalloutWindowController;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.util.StringHelper;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.EPFilterSettings;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * Shows multiple filters (tag, type, fulltext, date) to filter an artefact
- * list. After choosing some of them sends an FilterChangedEvent containing the filter settings.
- * 
- * <P>
- * Initial Date: 08.07.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, frentix GmbH
- */
-public class PortfolioFilterController extends FormBasicController {
-
-	public static final String HANDLER_PREFIX = "handler.";
-	public static final String HANDLER_TITLE_SUFFIX = ".title";
-	private static final String TAG_CMP_IDENTIFIER = "atag";
-	private static final int DEFAULT_TYPE_AMOUNT = 4;
-	private FormToggle tagAllBtn;
-	private FormToggle typeAllBtn;
-	private TextElement searchFld;
-	private DateChooser dateStart;
-	private DateChooser dateEnd;
-	private FormLayoutContainer tagFlc;
-	private FormLayoutContainer typeFlc;
-	private FormLayoutContainer dateFlc;
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	@Autowired
-	private PortfolioModule portfolioModule;
-	private List<String> selectedTagsList;
-	private ArrayList<FormToggle> tagCmpList;
-	private List<String> selectedTypeList;
-	private ArrayList<FormToggle> typeCmpList;
-	private EPArtefactTypeSelectionController moreTypesCtlr;
-	private TextElement filterName;
-	private EPFilterSettings filterSettings;
-	private FormToggle tagNoneBtn;
-	private CloseableCalloutWindowController moreTypesCalloutCtrl;
-	private Controller moreTagsCtlr;
-	private CloseableCalloutWindowController moreTagsCalloutCtrl;
-	private FormLink filterSave;
-	private FormLayoutContainer filterFlc;
-	private FormLink filterDel;
-	private FormToggle tagEditBtn;
-	private FormToggle typeEditBtn;
-	private SingleSelection filterSel;
-	private List<EPFilterSettings> nonEmptyFilters;
-
-	public PortfolioFilterController(UserRequest ureq, WindowControl wControl, EPFilterSettings filterSettings) {
-		super(ureq, wControl);
-		if (filterSettings == null){
-			this.filterSettings = new EPFilterSettings();
-		} else {
-			this.filterSettings = filterSettings;
-		}
-		// allows to instantiate with filter presets
-		selectedTagsList = new ArrayList<>(filterSettings.getTagFilter());
-		selectedTypeList = new ArrayList<>(filterSettings.getTypeFilter());
-		initForm(ureq);
-	}
-	
-	/**
-	 * instantiate without existing filter settings
-	 * if you want to preset filter settings, provide 3rd argument
-	 * @param ureq
-	 * @param wControl
-	 */
-	public PortfolioFilterController(UserRequest ureq, WindowControl wControl){
-		this(ureq, wControl, null);
-	}
-	
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		initOrUpdateForm(formLayout);
-	}
-
-	protected void initOrUpdateForm(FormItemContainer formLayout) {
-		// filter by tag
-		if(formLayout.getFormComponent("tagLayout") == null) {
-			tagFlc = FormLayoutContainer.createCustomFormLayout("tagLayout", getTranslator(), velocity_root + "/filter-tags.html");
-			formLayout.add(tagFlc);
-			initTagFlc();
-		} else {
-			updateTagFlc();
-		}
-
-		// filter by type
-		if(formLayout.getFormComponent("typeLayout") == null) {
-			typeFlc = FormLayoutContainer.createCustomFormLayout("typeLayout", getTranslator(), velocity_root + "/filter-types.html");
-			formLayout.add(typeFlc);		
-			initOrUpdateTypeFlc(DEFAULT_TYPE_AMOUNT);
-		} else {
-			updateTypeFlc();
-		}
-
-		// filter by date
-		if(formLayout.getFormComponent("dateLayout") == null) {
-			String page = this.velocity_root + "/filter_date.html";
-			dateFlc = FormLayoutContainer.createCustomFormLayout("dateLayout", getTranslator(), page);
-			formLayout.add(dateFlc);
-			dateFlc.setLabel("filter.by.date", null);
-			dateStart = uifactory.addDateChooser("filter.date.start", null, dateFlc);
-			dateStart.addActionListener(FormEvent.ONCHANGE);
-			dateEnd = uifactory.addDateChooser("filter.date.end", null, dateFlc);
-			dateEnd.addActionListener(FormEvent.ONCHANGE);
-			dateStart.clearError();
-			dateEnd.clearError();
-		}
-
-		if (filterSettings.getDateFilter().size() == 2) {
-			dateStart.setDate(filterSettings.getDateFilter().get(0));
-			dateEnd.setDate(filterSettings.getDateFilter().get(1));
-		} else {
-			dateStart.setDate(null);
-			dateEnd.setDate(new Date());
-		}
-		
-		// filter by fulltext
-		String searchText = filterSettings.getTextFilter();
-		if(formLayout.getFormComponent("search") == null) {
-			searchFld = uifactory.addTextElement("search", "filter.search", 20, searchText, formLayout);
-			searchFld.addActionListener(FormEvent.ONCHANGE);
-		} else {
-			searchFld.setValue(searchText);
-		}
-		
-		// show filter list and save as new
-		if(formLayout.getFormComponent("spacer") == null) {
-			uifactory.addSpacerElement("spacer", formLayout, false);
-		}
-		
-		//filter list
-		initFilterList(formLayout);
-		//filter save
-		if(formLayout.getFormComponent("filterSaveLayout") == null) {
-			String page = this.velocity_root + "/filter_search.html";
-			filterFlc = FormLayoutContainer.createCustomFormLayout("filterSaveLayout", getTranslator(), page);
-			formLayout.add(filterFlc);
-			filterFlc.setLabel("filter.save", null);
-			filterName = uifactory.addTextElement("filter.save.name", null, 30, filterSettings.getFilterName(), filterFlc);
-			filterSave = uifactory.addFormLink("filter.save.link", "filter.save.new", null, filterFlc, Link.BUTTON);
-			filterDel = uifactory.addFormLink("filter.del.link", "filter.del.link", null, filterFlc, Link.BUTTON);
-		} else {
-			filterName.setValue(filterSettings.getFilterName());
-		}
-
-		boolean isExistingFilter = filterSettings.getFilterName() != null; 
-		toggleSaveUpdateFilterButtons(isExistingFilter);
-	}
-	
-	private void updateUI(EPFilterSettings newSettings) {
-		filterSettings = newSettings;
-		selectedTagsList = new ArrayList<>(filterSettings.getTagFilter());
-		selectedTypeList = new ArrayList<>(filterSettings.getTypeFilter());
-		
-		initOrUpdateForm(flc);
-		flc.setDirty(true);
-	}
-	
-	private void initFilterList(FormItemContainer formLayout) {
-		List<EPFilterSettings> existingFilters = ePFMgr.getSavedFilterSettings(getIdentity());
-		for(Iterator<EPFilterSettings> existingFilterIt=existingFilters.iterator(); existingFilterIt.hasNext(); ) {
-			if(existingFilterIt.next().isFilterEmpty()) {
-				existingFilterIt.remove();
-			}
-		}
-
-		int amount = existingFilters.size() + 1;
-		nonEmptyFilters = new ArrayList<>(amount);
-		String[] theKeys = new String[amount];
-		String[] theValues = new String[amount];
-		
-		String presetFilterIndex = theKeys[0] = "0";
-		theValues[0] = translate("filter.all");
-
-		int i=1;
-		String presetFilterID = filterSettings.getFilterId();
-		for (EPFilterSettings epFilterSettings : existingFilters) {
-			theKeys[i] = epFilterSettings.getFilterId();
-			theValues[i] = epFilterSettings.getFilterName();
-			if (presetFilterID != null && presetFilterID.equals(epFilterSettings.getFilterId())) {
-				presetFilterIndex = epFilterSettings.getFilterId(); 
-			}
-			nonEmptyFilters.add(epFilterSettings);
-			i++;
-		}
-		// don't show anything if no filter exists
-		if (!nonEmptyFilters.isEmpty()) {
-			if(formLayout.getFormComponent("filter.select") == null) {
-				filterSel = uifactory.addDropdownSingleselect("filter.select", formLayout, theKeys, theValues, null);
-				filterSel.addActionListener(FormEvent.ONCHANGE);
-			} else {
-				filterSel.setKeysAndValues(theKeys, theValues, null);
-				filterSel.setVisible(true);
-			}
-			if(presetFilterIndex != null) {
-				filterSel.select(presetFilterIndex, true);
-			}
-		} else if(formLayout.getFormComponent("filter.select") != null) {
-			formLayout.getFormComponent("filter.select").setVisible(false);
-		}
-	}
-
-	/**
-	 * 
-	 */
-	private void initTagFlc() {
-		tagFlc.setLabel("filter.tag", null);
-		tagAllBtn = uifactory.addToggleButton("filter.all", null, tagFlc, null, null);
-		tagAllBtn.toggleOff();
-		tagNoneBtn = uifactory.addToggleButton("filter.notag", null, tagFlc, null, null);
-		Map<String, String> userTags = ePFMgr.getUsersMostUsedTags(getIdentity(), 8);
-		int i = 1;
-		tagCmpList = new ArrayList<>();
-		LinkedList<Entry<String, String>> sortEntrySet = new LinkedList<>(userTags.entrySet());
-		Collections.sort(sortEntrySet, new Comparator<Entry<String, String>>() {
-			public int compare(Entry<String, String> arg0, Entry<String, String> arg1) {
-				return arg0.getValue().compareTo(arg1.getValue());
-			}
-		});
-		List<String> allActiveTagToggles = new ArrayList<>();
-		for (Entry<String, String> entry : sortEntrySet) {
-			String tag = entry.getValue();
-			String tagText = StringHelper.escapeHtml(tag);
-			String tagCmpName = TAG_CMP_IDENTIFIER + i;
-			if (tagFlc.getComponent(tagCmpName)!=null) tagFlc.remove(tagCmpName);
-			FormToggle link = uifactory.addToggleButton(tagCmpName, tagText, tagFlc, null, null);
-			link.setLabel("tag.one", new String[] { tagText });
-			link.setUserObject(tag);
-			if (!selectedTagsList.isEmpty() && selectedTagsList.contains(tag)) {
-				link.toggleOn();
-				allActiveTagToggles.add(tag);
-			} 
-			tagCmpList.add(link);
-			i++;
-		}
-		tagFlc.contextPut("tagCmpList", tagCmpList);		
-		tagEditBtn = uifactory.addToggleButton("filter.edit", null, tagFlc, null, null);
-		tagEditBtn.toggleOff();
-		if (!allActiveTagToggles.containsAll(selectedTagsList)) tagEditBtn.toggleOn(); 
-		if (selectedTagsList.isEmpty()) tagAllBtn.toggleOn();
-	}
-	
-	private void updateTagFlc() {
-		List<String> allActiveTagToggles = new ArrayList<>();
-		for(FormToggle link:tagCmpList) {
-			String tag = (String)link.getUserObject();
-			if (selectedTagsList.contains(tag)) {
-				if(!link.isOn()) {
-					link.toggleOn();
-				}
-				allActiveTagToggles.add(tag);
-			} else if(link.isOn()) {
-					link.toggleOff();
-			}
-		}
-		
-		if (allActiveTagToggles.containsAll(selectedTagsList)) {
-			tagEditBtn.toggleOff();
-		} else {
-			tagEditBtn.toggleOn(); 
-		}
-		if (selectedTagsList.isEmpty()) {
-			tagAllBtn.toggleOn();
-		} else {
-			tagAllBtn.toggleOff();
-		}
-	}
-
-	/**
-	 * 
-	 */
-	private void initOrUpdateTypeFlc(int limit) {
-		typeFlc.setLabel("filter.view", null);
-		typeAllBtn = uifactory.addToggleButton("filter.all", null, typeFlc, null, null);
-		typeAllBtn.toggleOff();
-		List<EPArtefactHandler<?>> handlers = portfolioModule.getAllAvailableArtefactHandlers();
-		typeCmpList = new ArrayList<>();
-		int i=0;
-		List<String> allActiveTypeToggles = new ArrayList<>();
-		for (EPArtefactHandler<?> handler : handlers) {
-			String handlerClass = PortfolioFilterController.HANDLER_PREFIX + handler.getClass().getSimpleName() + HANDLER_TITLE_SUFFIX;
-			FormToggle link = (FormToggle) typeFlc.getFormComponent(handlerClass);
-			if (link==null) {
-				Translator handlerTrans = handler.getHandlerTranslator(getTranslator());
-				typeFlc.setTranslator(handlerTrans);
-				link = uifactory.addToggleButton(handlerClass, null, typeFlc, null, null);
-				link.setUserObject(handler.getType());
-			}	
-			if (selectedTypeList.contains(handler.getType())) {
-				link.toggleOn();
-				allActiveTypeToggles.add(handler.getType());
-			} else {
-				link.toggleOff();
-			}
-			typeCmpList.add(link);
-			i++;
-			if (i>limit) break;
-		}
-		typeFlc.contextPut("typeCmpList", typeCmpList);
-		typeEditBtn = uifactory.addToggleButton("filter.edit", null, typeFlc, null, null);
-		typeEditBtn.toggleOff();
-		if (!allActiveTypeToggles.containsAll(selectedTypeList)) typeEditBtn.toggleOn();
-		if (selectedTypeList.isEmpty()) typeAllBtn.toggleOn();
-	}
-	
-	private void updateTypeFlc() {
-		List<String> allActiveTypeToggles = new ArrayList<>();
-		for(FormToggle link:typeCmpList) {
-			String type = (String)link.getUserObject();
-			if (selectedTypeList.contains(type)) {
-				if(!link.isOn()) {
-					link.toggleOn();
-				}
-				allActiveTypeToggles.add(type);
-			} else if(link.isOn()) {
-				link.toggleOff();
-			}
-		}
-		
-		if (allActiveTypeToggles.containsAll(selectedTypeList)) {
-			typeEditBtn.toggleOff();
-		} else {
-			typeEditBtn.toggleOn();
-		}
-		if (selectedTypeList.isEmpty()) {
-			typeAllBtn.toggleOn();
-		} else {
-			typeAllBtn.toggleOff();
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#validateFormLogic(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected boolean validateFormLogic(UserRequest ureq) {
-		// validate date-fields for correct date and start < end date
-		dateStart.clearError();
-		dateEnd.clearError();
-		boolean isInputValid = true;
-		if (dateEnd.hasError() || dateEnd.getDate() == null) {
-			dateEnd.setErrorKey("filter.date.invalid", null);
-			isInputValid = false;
-		}
-		if (StringHelper.containsNonWhitespace(dateStart.getValue()) && (dateStart.hasError() || dateStart.getDate() == null)) {
-			dateStart.setErrorKey("filter.date.invalid", null);
-			isInputValid = false;
-		} else if (isInputValid && StringHelper.containsNonWhitespace(dateStart.getValue()) && dateStart.getDate().after(dateEnd.getDate())) {
-			dateStart.setErrorKey("filter.date.invalid.afterend", null);
-			isInputValid = false;
-		}
-		return isInputValid;
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void formOK(UserRequest ureq) {
-		// will catch an ENTER in text search-field
-		String searchText = searchFld.getValue();
-		filterSettings.setTextFilter(searchText);
-		fireEvent(ureq, new PortfolioFilterChangeEvent(filterSettings));
-		
-		fireEvent(ureq, Event.CHANGED_EVENT);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.form.flexible.FormItem,
-	 *      org.olat.core.gui.components.form.flexible.impl.FormEvent)
-	 */
-	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
-		if (source instanceof FormLink) {
-			FormLink link = (FormLink) source;
-			if (link.getName().startsWith(TAG_CMP_IDENTIFIER)) {
-				// a tag-Link got clicked, find out which
-				String selectedTag = (String) link.getUserObject();
-				if (!selectedTagsList.contains(selectedTag)) {
-					selectedTagsList.add(selectedTag);
-					tagAllBtn.toggleOff();
-					tagNoneBtn.toggleOff();
-				} else {
-					selectedTagsList.remove(selectedTag);
-					if (selectedTagsList.isEmpty()) tagAllBtn.toggleOn();
-				}
-				filterSettings.setTagFilter(selectedTagsList);
-				fireEvent(ureq, new PortfolioFilterChangeEvent(filterSettings));
-			} else if (link.getName().startsWith(HANDLER_PREFIX)) {
-				// a type-link got clicked
-				String selectedType = (String) link.getUserObject();
-				if (!selectedTypeList.contains(selectedType)) {
-					selectedTypeList.add(selectedType);
-					typeAllBtn.toggleOff();
-				} else {
-					selectedTypeList.remove(selectedType);
-					if (selectedTypeList.isEmpty()) typeAllBtn.toggleOn();
-				}
-				filterSettings.setTypeFilter(selectedTypeList);
-				fireEvent(ureq, new PortfolioFilterChangeEvent(filterSettings));
-			}
-
-		}
-		if (source == tagAllBtn) {
-			resetTagLinks();
-			tagNoneBtn.toggleOff();
-			filterSettings.setTagFilter(selectedTagsList);
-			fireEvent(ureq, new PortfolioFilterChangeEvent(filterSettings));
-		} else if (source == tagNoneBtn) {
-			resetTagLinks();
-			tagAllBtn.toggleOff();
-			filterSettings.setNoTagFilter();
-			fireEvent(ureq, new PortfolioFilterChangeEvent(filterSettings));
-		} else if (source == typeAllBtn) {
-			resetTypeLinks();
-			filterSettings.setTypeFilter(selectedTypeList);
-			fireEvent(ureq, new PortfolioFilterChangeEvent(filterSettings));
-		} else if (source == dateStart || source == dateEnd) {
-			if (validateFormLogic(ureq)) {
-				List<Date> dateList = new ArrayList<>();
-				Date selStartDate = dateStart.getDate();
-				Date selEndDate = dateEnd.getDate();
-				dateList.add(selStartDate);
-				dateList.add(selEndDate);
-				filterSettings.setDateFilter(dateList);
-				fireEvent(ureq, new PortfolioFilterChangeEvent(filterSettings));
-			}
-		} else if (source == typeEditBtn){
-			popupTypesCallout(ureq);
-		} else if (source == tagEditBtn){
-			popupTagsCallout(ureq);			
-		} else if (source == searchFld){
-			String searchText = searchFld.getValue();
-			filterSettings.setTextFilter(searchText);
-			fireEvent(ureq, new PortfolioFilterChangeEvent(filterSettings));
-		} else if (source == filterSave){
-			if (StringHelper.containsNonWhitespace(filterName.getValue())){
-				String oldFilterName = filterSettings.getFilterName();
-				filterSettings.setFilterName(filterName.getValue());
-				filterSettings.setTextFilter(searchFld.getValue());
-				if (filterSave.getUserObject() != null && filterName.getValue().equals(oldFilterName)){
-					// fake update, delete before adding again
-					String filterID = (String) filterSave.getUserObject();
-					ePFMgr.deleteFilterFromUsersList(getIdentity(), filterID);
-				}
-				if (!filterName.getValue().equals(oldFilterName) && oldFilterName != null){
-					// set another id, to distinguish from old
-					filterSettings.setFilterIdToUniqueId();
-				}
-				List<EPFilterSettings> filterList = ePFMgr.getSavedFilterSettings(getIdentity());
-				// create a new or insert existing again
-				filterList.add(filterSettings);					
-				ePFMgr.setSavedFilterSettings(getIdentity(), filterList);
-				toggleSaveUpdateFilterButtons(true);
-				showInfo("filter.saved", filterSettings.getFilterName());
-				updateUI(filterSettings);
-			}
-		} else if (source == filterDel){
-			if (filterDel.getUserObject() != null) {
-				ePFMgr.deleteFilterFromUsersList(getIdentity(), (String)filterDel.getUserObject());
-				// refresh ui
-				filterName.setValue("");
-				toggleSaveUpdateFilterButtons(false);
-				showInfo("filter.deleted");
-				updateUI(new EPFilterSettings());
-			}
-		} else if (source == filterName){
-			String oldFilterName = filterSettings.getFilterName();
-			if (filterSave.getUserObject() != null && !filterName.getValue().equals(oldFilterName)){
-				toggleSaveUpdateFilterButtons(false);
-			} else if (filterName.getValue().equals(oldFilterName)){
-				toggleSaveUpdateFilterButtons(true);
-			}
-		} else if (source == filterSel) {
-			if(filterSel.isOneSelected()) {
-				int filterIndex = filterSel.getSelected();
-				if(filterIndex == 0) {
-					EPFilterSettings newSettings = new EPFilterSettings();
-					updateUI(newSettings);
-					fireEvent(ureq, new PortfolioFilterChangeEvent(newSettings));
-				} else if(filterIndex > 0 && filterIndex - 1 < nonEmptyFilters.size()) {
-					EPFilterSettings newSettings = nonEmptyFilters.get(filterIndex - 1);
-					if(!filterSettings.getFilterId().equals(newSettings.getFilterId())) {
-						updateUI(newSettings);
-						fireEvent(ureq, new PortfolioFilterChangeEvent(newSettings));
-					}
-				}
-			}
-		}
-	}
-	
-	private void toggleSaveUpdateFilterButtons(boolean enableUpdateDelete){
-		filterDel.setVisible(enableUpdateDelete);
-		String filterID = null;
-		if (enableUpdateDelete){
-			filterSave.setI18nKey("filter.save.refresh");
-			filterID = filterSettings.getFilterId();
-		} else {
-			filterSave.setI18nKey("filter.save.new");
-		}
-		filterDel.setUserObject(filterID);
-		filterSave.setUserObject(filterID);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		super.event(ureq, source, event);
-		if (source == moreTypesCtlr) {
-			if (event == Event.CHANGED_EVENT) {
-				// changed the selection in the popup
-				filterSettings.setTypeFilter(selectedTypeList);
-				// repaint to have correct state of the buttons
-				initOrUpdateTypeFlc(DEFAULT_TYPE_AMOUNT);
-				fireEvent(ureq, new PortfolioFilterChangeEvent(filterSettings));
-			} else if (event == Event.DONE_EVENT) {
-				// clicked save and close
-				closeTypesCallout();
-			}
-		} else if (source == moreTagsCtlr) {
-			if (event == Event.CHANGED_EVENT) {
-				// changed the selection in the popup
-				filterSettings.setTagFilter(selectedTagsList);
-				// repaint to have correct state of the buttons
-				initTagFlc();
-				fireEvent(ureq, new PortfolioFilterChangeEvent(filterSettings));
-			} else if (event == Event.DONE_EVENT) {
-				closeTagsCallout();
-			}
-		} else if (source == moreTagsCalloutCtrl && event == CloseableCalloutWindowController.CLOSE_WINDOW_EVENT) {
-			removeAsListenerAndDispose(moreTagsCalloutCtrl);
-			moreTagsCalloutCtrl = null;
-		} else if (source == moreTypesCalloutCtrl && event == CloseableCalloutWindowController.CLOSE_WINDOW_EVENT) {
-			removeAsListenerAndDispose(moreTypesCalloutCtrl);
-			moreTypesCalloutCtrl = null;
-		}
-			
-	}
-
-	private void resetTagLinks() {
-		for (FormToggle link : tagCmpList) {
-			link.toggleOff();
-			selectedTagsList.clear();
-		}
-		tagEditBtn.toggleOff();
-	}
-
-	private void resetTypeLinks() {
-		for (FormToggle link : typeCmpList) {
-			link.toggleOff();
-			selectedTypeList.clear();
-		}
-		typeEditBtn.toggleOff();
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// nothing
-	}
-	
-	private void popupTypesCallout(UserRequest ureq) {
-		String title = translate("filter.view");
-		removeAsListenerAndDispose(moreTypesCtlr);
-		moreTypesCtlr = new EPArtefactTypeSelectionController(ureq, getWindowControl(), selectedTypeList);
-		listenTo(moreTypesCtlr);
-		
-		removeAsListenerAndDispose(moreTypesCalloutCtrl);
-		moreTypesCalloutCtrl = new CloseableCalloutWindowController(ureq, getWindowControl(), moreTypesCtlr.getInitialComponent(), (FormLink)typeEditBtn, title, true, null);
-		listenTo(moreTypesCalloutCtrl);
-		moreTypesCalloutCtrl.activate();		
-	}
-
-	private void popupTagsCallout(UserRequest ureq) {
-		String title = translate("filter.tag");
-		removeAsListenerAndDispose(moreTagsCtlr);
-		moreTagsCtlr = new EPArtefactTagSelectionController(ureq, getWindowControl(), selectedTagsList);
-		listenTo(moreTagsCtlr);
-		
-		removeAsListenerAndDispose(moreTagsCalloutCtrl);
-		moreTagsCalloutCtrl = new CloseableCalloutWindowController(ureq, getWindowControl(), moreTagsCtlr.getInitialComponent(), (FormLink)tagEditBtn, title, true, null);
-		listenTo(moreTagsCalloutCtrl);
-		moreTagsCalloutCtrl.activate();
-	}
-	
-	
-	private void closeTypesCallout() {
-		if (moreTypesCalloutCtrl != null){
-			moreTypesCalloutCtrl.deactivate();
-			removeAsListenerAndDispose(moreTypesCalloutCtrl);
-			moreTypesCalloutCtrl = null;
-		}
-	}
-	
-	private void closeTagsCallout() {
-		if (moreTagsCalloutCtrl != null){
-			moreTagsCalloutCtrl.deactivate();
-			removeAsListenerAndDispose(moreTagsCalloutCtrl);
-			moreTagsCalloutCtrl = null;
-		}
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/filter/PortfolioFilterEditEvent.java b/src/main/java/org/olat/portfolio/ui/filter/PortfolioFilterEditEvent.java
deleted file mode 100644
index 5579db93544dd743cca42b3ca9d2a41ed03009c1..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/PortfolioFilterEditEvent.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <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
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <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>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-package org.olat.portfolio.ui.filter;
-
-import org.olat.core.gui.control.Event;
-import org.olat.portfolio.model.EPFilterSettings;
-
-/**
- * Initial Date:  15.07.2010 <br>
- * @author rhaag
- */
-public class PortfolioFilterEditEvent extends Event {
-
-	private static final long serialVersionUID = 155823171805755947L;
-	private EPFilterSettings filterSettings;
-	
-	public PortfolioFilterEditEvent(EPFilterSettings filterList) {
-		super("portfoliofilteredit");
-		this.filterSettings = filterList;
-	}
-	
-	public EPFilterSettings getFilterList(){
-		return filterSettings;
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/filter/_content/filter-tags.html b/src/main/java/org/olat/portfolio/ui/filter/_content/filter-tags.html
deleted file mode 100644
index b1a87de4a854ac4684d3a0bed7123a63cd43a415..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/_content/filter-tags.html
+++ /dev/null
@@ -1,6 +0,0 @@
-$r.render("filter.all") 
-$r.render("filter.notag")
-#foreach($tagLink in $tagCmpList)
-	$r.render($tagLink.getName())	
-#end
-$r.render("filter.edit")
diff --git a/src/main/java/org/olat/portfolio/ui/filter/_content/filter-types.html b/src/main/java/org/olat/portfolio/ui/filter/_content/filter-types.html
deleted file mode 100644
index c3f6cf48e6b1bcfd169193107b8bf2348dcddc78..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/_content/filter-types.html
+++ /dev/null
@@ -1,5 +0,0 @@
-$r.render("filter.all") 
-#foreach($typeLink in $typeCmpList)
-	$r.render($typeLink.getName())	
-#end
-$r.render("filter.edit")
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/filter/_content/filter.html b/src/main/java/org/olat/portfolio/ui/filter/_content/filter.html
deleted file mode 100644
index 4af701775e2c674b0956a24c7b8b07d10300a48b..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/_content/filter.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<div>
-	$tagLayout
-	$r.render("tagLayout")
-	$r.render("typeLayout")
-	$r.render("search")
-	$r.render("filter.date.start")
-	$r.render("filter.date.end")
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/filter/_content/filter_date.html b/src/main/java/org/olat/portfolio/ui/filter/_content/filter_date.html
deleted file mode 100644
index 6b427557a85aef8326f77deb47a236127ab35507..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/_content/filter_date.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="o_date form-inline">
-	<span class="form-control-static">$r.translate("filter.date.start")</span>
-	<div class="form-group">$r.render("filter.date.start")</div>
-	<span class="form-control-static">$r.translate("filter.date.end")</span>
-	<div class="form-group">$r.render("filter.date.end")</div>
-</div>
-<div>$r.render("filter.date.start_ERROR") $r.render("filter.date.end_ERROR")</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/filter/_content/filter_search.html b/src/main/java/org/olat/portfolio/ui/filter/_content/filter_search.html
deleted file mode 100644
index 7e3737bfebb9435056ea4fed94f5acacf9610530..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/_content/filter_search.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-<div class="input-group">
-	$r.render("filter.save.name")
-	<div class="input-group-btn">
-	#if($r.available("filter.save.link") && $r.visible("filter.save.link"))
-		$r.render("filter.save.link")
-	#end
-	#if($r.available("filter.del.link") && $r.visible("filter.del.link"))
-		$r.render("filter.del.link")
-	#end
-	</div>
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/filter/_content/filter_select.html b/src/main/java/org/olat/portfolio/ui/filter/_content/filter_select.html
deleted file mode 100644
index 52e12e1609297197e6384863cad4160b55c6dc63..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/_content/filter_select.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<div>
-	#if($r.available("filter.select"))
-		$r.render("filter.select")
-	#end
-	#if($r.available("filter.adapt"))
-		$r.render("filter.adapt")
-	#end
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_de.properties
deleted file mode 100644
index ef49cffe3bc4c4974ba45bd6fb7c682e3f782193..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1,29 +0,0 @@
-filter.type.title=Filtern nach Artefakt-Typ
-filter.type.intro=W\u00e4hlen Sie die Artefakt-Typen f\u00fcr die Suche. 
-filter.type.submit=Speichern
-filter.type.enabled=Ein
-
-filter.tag.title=Filtern nach Tags
-filter.tag.intro=W\u00e4hlen Sie die Tags f\u00fcr die Artefakt-Suche.
-
-filter.save=Suche speichern als
-filter.save.new=Speichern
-filter.save.refresh=Aktualisieren
-filter.del.link=L\u00f6schen
-
-filter.all=Alle
-filter.notag=Ohne Tag
-filter.edit=mehr...
-filter.tag=Tags
-filter.view=Artefakt-Typ
-filter.search=Suche
-filter.by.date=Datum
-filter.date.start=von
-filter.date.end=bis
-filter.date.invalid=Bitte ein g\u00fcltiges Datum eingeben!
-filter.date.invalid.afterend=Das Startdatum muss vor dem Enddatum der Suche liegen. 
-
-filter.select=Gespeicherte Suchen anzeigen
-filter.adapt=Anpassen
-filter.saved=Ihre Suche mit dem Namen "{0}" wurde gespeichert.
-filter.deleted=Ihre gespeicherte Suche wurde gel\u00f6scht.
diff --git a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_en.properties
deleted file mode 100644
index c36082bbf5745fff57ee078286f31ecd0f7069c8..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-#Wed Jan 19 14:41:28 CET 2011
-filter.adapt=Adapt
-filter.all=All
-filter.by.date=Date
-filter.date.end=until
-filter.date.invalid=Please provide a valid date\!
-filter.date.invalid.afterend=The start date must be earlier than the end date of this search.
-filter.date.start=from
-filter.del.link=Delete
-filter.deleted=Your stored search has been deleted.
-filter.edit=more...
-filter.notag=Without tag
-filter.save=Save search as
-filter.save.new=Save
-filter.save.refresh=Refresh
-filter.saved=Your search has been saved as "{0}".
-filter.search=Search
-filter.select=Show all stored searches
-filter.tag=Tags
-filter.tag.intro=Please select tags for your artefact search.
-filter.tag.title=Filter by tags
-filter.type.enabled=Enabled
-filter.type.intro=Please select artefact types for your search.
-filter.type.submit=Save
-filter.type.title=Filter by artefact type
-filter.view=Artefact type
diff --git a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index 8de2a6f6fc09033ea3ab90d6fe78ab0f392e21b4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-#Fri Jan 21 10:22:53 CET 2011
-filter.adapt=Adapter
-filter.all=Tous
-filter.by.date=Date
-filter.date.end=jusqu'au
-filter.date.invalid=Indiquer une date valide, svp\!
-filter.date.invalid.afterend=La date de d\u00E9but doit pr\u00E9c\u00E9der la date de fin.
-filter.date.start=du
-filter.del.link=\u00C9liminer
-filter.deleted=La recherche enregistr\u00E9e a \u00E9t\u00E9 \u00E9limin\u00E9e.
-filter.edit=plus...
-filter.notag=Sans jour
-filter.save=Enregistrer recherche comme
-filter.save.new=Enregistrer
-filter.save.refresh=Actualiser
-filter.saved=Votre recherche a \u00E9t\u00E9 enregistr\u00E9e comme "{0}.
-filter.search=Recherche
-filter.select=Afficher recherches enregistr\u00E9es
-filter.tag=Tags
-filter.tag.intro=S\u00E9lectionnez les tags pour la recherche des artefacts.
-filter.tag.title=Filtrer selon tags
-filter.type.enabled=Activ\u00E9
-filter.type.intro=S\u00E9lectionnez les types d'artefact pour la recherche.
-filter.type.submit=Enregistrer
-filter.type.title=Filtrer selon type d'artefact
-filter.view=Type d'artefact
diff --git a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_it.properties
deleted file mode 100644
index 9531715e3941a4786bc92978990155a2ec360919..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_it.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-#Mon Jan 17 16:19:06 CET 2011
-filter.adapt=Adattare
-filter.all=Tutti
-filter.by.date=Data
-filter.date.end=fino al
-filter.date.invalid=Indicare una data valida, p.f.
-filter.date.invalid.afterend=La data d'inizio deve precedere la data di fine.
-filter.date.start=dal
-filter.del.link=Eliminare
-filter.deleted=La ricerca registrata \u00E8 stata eliminata.
-filter.edit=Di pi\u00F9...
-filter.notag=Senza giorno
-filter.save=Registrare ricerca come
-filter.save.new=Registrare
-filter.save.refresh=Attualizzare
-filter.saved=La Sua ricerca \u00E8 stata registrata come "{0}.
-filter.search=Ricerca
-filter.select=Mostrare ricerche registrate
-filter.tag=Tag
-filter.tag.intro=Selezioni i tag per la ricerca degli artefatti.
-filter.tag.title=Filtrare secondo tag
-filter.type.enabled=Attivato
-filter.type.intro=Selezioni i tipi di artefatto per la ricerca.
-filter.type.submit=Registrare
-filter.type.title=Filtrare secondo tipo di artefatto
-filter.view=Tipo di artefatto
diff --git a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_jp.properties
deleted file mode 100644
index d609fa2d661d676976f719acbe46671134dc5ccd..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_jp.properties
+++ /dev/null
@@ -1,25 +0,0 @@
-#Thu Sep 08 16:42:39 CEST 2011
-filter.adapt=\u9069\u7528
-filter.all=\u3059\u3079\u3066
-filter.by.date=\u65E5\u4ED8
-filter.date.end=\u7D42\u4E86
-filter.date.invalid=\u6709\u52B9\u306A\u65E5\u4ED8\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\!
-filter.date.invalid.afterend=\u3053\u306E\u691C\u7D22\u306B\u95A2\u3057\u3066\u3001\u958B\u59CB\u65E5\u4ED8\u306F\u7D42\u4E86\u65E5\u4ED8\u306E\u524D\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-filter.date.start=\u958B\u59CB
-filter.del.link=\u524A\u9664
-filter.deleted=\u3042\u306A\u305F\u306E\u4FDD\u5B58\u3055\u308C\u305F\u691C\u7D22\u304C\u524A\u9664\u3055\u308C\u307E\u3057\u305F\u3002
-filter.edit=\u3055\u3089\u306B ...
-filter.notag=\u30BF\u30B0\u306A\u3057
-filter.save.new=\u4FDD\u5B58
-filter.save.refresh=\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5
-filter.saved=\u3042\u306A\u305F\u306E\u691C\u7D22\u304C\u300C {0} \u300D\u3068\u3057\u3066\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F\u3002
-filter.search=\u691C\u7D22
-filter.select=\u3059\u3079\u3066\u306E\u4FDD\u5B58\u6E08\u307F\u691C\u7D22\u3092\u8868\u793A\u3059\u308B
-filter.tag=\u30BF\u30B0
-filter.tag.intro=\u3042\u306A\u305F\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u691C\u7D22\u306B\u95A2\u3059\u308B\u30BF\u30B0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-filter.tag.title=\u30BF\u30B0\u306B\u3088\u308B\u30D5\u30A3\u30EB\u30BF
-filter.type.enabled=\u6709\u52B9
-filter.type.intro=\u3042\u306A\u305F\u306E\u691C\u7D22\u306B\u95A2\u3059\u308B\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u30BF\u30A4\u30D7\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-filter.type.submit=\u4FDD\u5B58
-filter.type.title=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u30BF\u30A4\u30D7\u306B\u3088\u308B\u30D5\u30A3\u30EB\u30BF
-filter.view=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u30BF\u30A4\u30D7
diff --git a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_nl_NL.properties
deleted file mode 100644
index 3e9c624949fb11574295380b34a012a899a385c8..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_nl_NL.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-#Thu Sep 08 16:42:47 CEST 2011
-filter.adapt=Aanpassen
-filter.all=Alles
-filter.by.date=Datum
-filter.date.end=tot
-filter.date.invalid=Gelieve een geldige datum te voorzien
-filter.date.invalid.afterend=De startdatum moet vroeger zijn dan de einddatum van deze zoeking.
-filter.date.start=van
-filter.del.link=Verwijder
-filter.deleted=Uw opgeslagen zoeking is verwijderd.
-filter.edit=meer...
-filter.notag=Zonder tag
-filter.save=Bewaar zoeking als
-filter.save.new=Opslaan
-filter.save.refresh=Vernieuwen
-filter.saved=Uw zoeking is bewaard als "{0}".
-filter.search=Zoek
-filter.select=Toon alle bewaarde zoekingen
-filter.tag=Tags
-filter.tag.intro=Gelieve tags te selecteren voor uw artefacten zoeking.
-filter.tag.title=Filteren door tags
-filter.type.enabled=Aan
-filter.type.intro=Gelieve artefact types te selecteren voor uw zoeking.
-filter.type.submit=Bewaar
-filter.type.title=Filteren door artefact type
-filter.view=Artefact type
diff --git a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_pl.properties
deleted file mode 100644
index e2ce532523bf451bd3e2bebcd3e74934529aab52..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_pl.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-#Thu Sep 08 16:42:41 CEST 2011
-filter.adapt=Dostosuj
-filter.all=Wszystko
-filter.by.date=Data
-filter.date.end=do
-filter.date.invalid=Podaj w\u0142a\u015Bciw\u0105 dat\u0119\!
-filter.date.invalid.afterend=Data pocz\u0105tkowa powinna by\u0107 wcze\u015Bniejsza, ni\u017C data ko\u0144cowa wyszukiwania.
-filter.date.start=od
-filter.del.link=Usu\u0144
-filter.deleted=Twoje wyszukiwanie zosta\u0142o usuni\u0119te.
-filter.edit=wi\u0119cej...
-filter.notag=Bez taga
-filter.save=Zapisz wyszukiwanie jako
-filter.save.new=Zapisz
-filter.save.refresh=Od\u015Bwie\u017C
-filter.saved=Twoje wyszukiwanie zosta\u0142o zapisane jako "{0}".
-filter.search=Szukaj
-filter.select=Poka\u017C wszystkie zapisane wyszukiwania
-filter.tag=Tagi
-filter.tag.intro=Wybierz tagi, kt\u00F3re pos\u0142u\u017C\u0105 do wyszukania artefaktu.
-filter.tag.title=Filtruj po tagach
-filter.type.enabled=Aktywny
-filter.type.intro=Wybierz typy artefakt\u00F3w do wyszukania.
-filter.type.submit=Zapisz
-filter.type.title=Filtruj wed\u0142ug typu artefaktu
-filter.view=Typ artefaktu
diff --git a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_pt_BR.properties
deleted file mode 100644
index b47953473d7e2f6c40c2b417bb10fd6d6e8e0a4d..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_pt_BR.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-#Thu Sep 08 16:42:38 CEST 2011
-filter.adapt=Adaptar
-filter.all=Tudo
-filter.by.date=Data
-filter.date.end=at\u00E9
-filter.date.invalid=Por favor, forne\u00E7a uma data v\u00E1lida\!
-filter.date.invalid.afterend=A data de in\u00EDcio deve ser anterior \u00E0 data final desta pesquisa.
-filter.date.start=de
-filter.del.link=Excluir
-filter.deleted=Sua busca armazenada foi exclu\u00EDda.
-filter.edit=mais...
-filter.notag=Sem marcador/Tag
-filter.save=Salvar busca como
-filter.save.new=Salvar
-filter.save.refresh=Atualizar
-filter.saved=Sua busca foi salva como "{0}".
-filter.search=Busca
-filter.select=Mostrar todas as pesquisas armazenadas
-filter.tag=Tags/Marcadores
-filter.tag.intro=Por favor selecione tags/marcadores para a sua pesquisa de artefato.
-filter.tag.title=Filtrar por marcadores/tags.
-filter.type.enabled=Ativo
-filter.type.intro=Por favor, selecione os tipos de artefato para a sua pesquisa.
-filter.type.submit=Salvar
-filter.type.title=Filtrar por tipo de artefato
-filter.view=Tipo de artefato
diff --git a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_zh_CN.properties
deleted file mode 100644
index 55781bbd7d5fd0bdde13c99019158f209c583d57..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/filter/_i18n/LocalStrings_zh_CN.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-#Thu Sep 08 16:42:39 CEST 2011
-filter.adapt=\u91C7\u7EB3
-filter.all=\u6240\u6709
-filter.by.date=\u65E5\u671F
-filter.date.end=\u7ED3\u675F\u65E5\u671F
-filter.date.invalid=\u8BF7\u63D0\u4F9B\u4E00\u4E2A\u6709\u6548\u65E5\u671F\uFF01
-filter.date.invalid.afterend=\u6B64\u6B21\u641C\u7D22\u4E2D\u5F00\u59CB\u65E5\u671F\u4E00\u5B9A\u8981\u6BD4\u7ED3\u675F\u65E5\u671F\u65E9.
-filter.date.start=\u5F00\u59CB\u65E5\u671F
-filter.del.link=\u5220\u9664
-filter.deleted=\u60A8\u5DF2\u5B58\u50A8\u7684\u641C\u7D22\u7ED3\u679C\u5DF2\u7ECF\u88AB\u5220\u9664.
-filter.edit=\u66F4\u591A...
-filter.notag=\u6CA1\u6709\u6807\u7B7E
-filter.save=\u5C06\u641C\u7D22\u7ED3\u679C\u4FDD\u5B58\u4E3A
-filter.save.new=\u4FDD\u5B58
-filter.save.refresh=\u5237\u65B0
-filter.saved=\u60A8\u641C\u7D22\u7ED3\u679C\u5DF2\u7ECF\u88AB\u4FDD\u5B58\u4E3A"{0}".
-filter.search=\u641C\u7D22
-filter.select=\u663E\u793A\u6240\u6709\u5DF2\u5B58\u50A8\u7684\u641C\u7D22\u7ED3\u679C
-filter.tag=\u6807\u7B7E
-filter.tag.intro=\u8BF7\u4E3A\u60A8\u7684\u641C\u7D22\u9009\u62E9\u6807\u7B7E\u3002
-filter.tag.title=\u901A\u8FC7\u6807\u7B7E\u8FC7\u6EE4
-filter.type.enabled=\u5F00\u542F
-filter.type.intro=\u8BF7\u9009\u62E9\u60A8\u641C\u7D22\u7684\u65B9\u5F0F\u3002
-filter.type.submit=\u4FDD\u5B58
-filter.type.title=\u901A\u8FC7\u4EBA\u5DE5\u65B9\u5F0F\u8FC7\u6EE4
-filter.view=\u4EBA\u5DE5\u65B9\u5F0F
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPAddElementsController.java b/src/main/java/org/olat/portfolio/ui/structel/EPAddElementsController.java
deleted file mode 100644
index faeb60ace2beb97ebb55b6352729d85c9c563e36..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPAddElementsController.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.olat.core.commons.persistence.DBFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.gui.control.generic.closablewrapper.CloseableModalController;
-import org.olat.core.logging.AssertException;
-import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
-import org.olat.portfolio.EPLoggingAction;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.ui.EPArtefactPoolRunController;
-import org.olat.portfolio.ui.artefacts.view.EPArtefactChoosenEvent;
-import org.olat.util.logging.activity.LoggingResourceable;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * Controller to select an Element which has to be added to given
- * PortfolioStructure. All possible elements are disabled per default:
- * <UL>
- * <LI>use setShowLink to enable elements which can be added on this level of
- * structure</LI>
- * </UL>
- * <P>
- * Initial Date: 20.08.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPAddElementsController extends BasicController {
-
-	private PortfolioStructure portfolioStructure;
-	private VelocityContainer addLinkVC;
-	private Link addStructLink;
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	public static final String ADD_ARTEFACT = "Artefact";
-	public static final String ADD_PAGE = "page";
-	public static final String ADD_STRUCTUREELEMENT = "struct";
-	public static final String ADD_PORTFOLIOSTRUCTURE = "map";
-	private static final Set<String> typeSet = new HashSet<>();
-	static {
-		typeSet.add(ADD_ARTEFACT);
-		typeSet.add(ADD_PAGE);
-		typeSet.add(ADD_STRUCTUREELEMENT);
-		typeSet.add(ADD_PORTFOLIOSTRUCTURE);
-	}
-	private final Map<String, Boolean> typeMap = new HashMap<>();
-	private CloseableModalController artefactBox;
-	private EPArtefactPoolRunController artefactPoolCtrl;
-	private Link linkArtefactLink;
-	private String activeType;
-
-	public EPAddElementsController(UserRequest ureq, WindowControl wControl, PortfolioStructure portStruct) {
-		super(ureq, wControl);
-		this.portfolioStructure = portStruct;
-		addLinkVC = createVelocityContainer("addLink");
-		addStructLink = LinkFactory.createCustomLink("popupLink", "add", translate("addPopup.title"),
-				Link.BUTTON | Link.NONTRANSLATED, addLinkVC, this);
-		addStructLink.setIconLeftCSS("o_icon o_icon-fw o_icon_add");
-		addStructLink.setVisible(false);
-
-		linkArtefactLink = LinkFactory.createCustomLink("linkArtefact", "link", translate("addArtefact"),
-				Link.BUTTON | Link.NONTRANSLATED, addLinkVC, this);
-		linkArtefactLink.setTooltip(translate("linkArtefact.tooltip"));
-		linkArtefactLink.setCustomEnabledLinkCSS("o_eportfolio_add_link o_eportfolio_link");
-		linkArtefactLink.setIconLeftCSS("o_icon o_icon-fw o_icon_add");
-
-		for (String key : typeSet) {
-			typeMap.put(key, Boolean.FALSE);
-		}
-
-		putInitialPanel(addLinkVC);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.Component,
-	 *      org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		if (source == linkArtefactLink) {
-			popUpAddArtefactBox(ureq);
-		} else if (source == addStructLink) {
-			if (ADD_PAGE.equals(activeType)) {
-				String title = translate("new.page.title");
-				String description = translate("new.page.desc");
-				PortfolioStructure newPage = ePFMgr.createAndPersistPortfolioPage(portfolioStructure, title, description);
-				DBFactory.getInstance().commit();
-				fireEvent(ureq, new EPStructureChangeEvent(EPStructureChangeEvent.ADDED, newPage));
-			} else if (ADD_STRUCTUREELEMENT.equals(activeType)) {
-				String title = translate("new.structure.title");
-				String description = translate("new.structure.desc");
-				PortfolioStructure newStruct = ePFMgr.createAndPersistPortfolioStructureElement(portfolioStructure, title, description);
-				DBFactory.getInstance().commit();
-				fireEvent(ureq, new EPStructureChangeEvent(EPStructureChangeEvent.ADDED, newStruct));
-			} else if (ADD_PORTFOLIOSTRUCTURE.equals(activeType)) {
-				// show tree-with maps to choose from
-			}
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		super.event(ureq, source, event);
-		if (source == artefactPoolCtrl) {
-			if(event instanceof EPArtefactChoosenEvent) {
-				// finally an artefact was choosen
-				EPArtefactChoosenEvent artCEv = (EPArtefactChoosenEvent) event;
-				artefactBox.deactivate();
-				AbstractArtefact choosenArtefact = artCEv.getArtefact();
-				// check for a yet existing link to this artefact
-				if (ePFMgr.isArtefactInStructure(choosenArtefact, portfolioStructure)) {
-					showWarning("artefact.already.in.structure");
-				} else {
-					boolean successfullLink = ePFMgr.addArtefactToStructure(getIdentity(), choosenArtefact, portfolioStructure);
-					if (successfullLink) {
-						getWindowControl().setInfo(
-								getTranslator().translate("artefact.choosen", new String[] { choosenArtefact.getTitle(), portfolioStructure.getTitle() }));
-						ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapPortfolioOres(choosenArtefact));
-						ThreadLocalUserActivityLogger.log(EPLoggingAction.EPORTFOLIO_ARTEFACT_SELECTED, getClass());
-					} else {
-						showError("restrictions.not.conform");
-					}
-					fireEvent(ureq, new EPStructureChangeEvent(EPStructureChangeEvent.ADDED, portfolioStructure));
-				}
-			} else if(event == Event.DONE_EVENT) {
-				artefactBox.deactivate();
-				fireEvent(ureq, new EPStructureChangeEvent(EPStructureChangeEvent.ADDED, portfolioStructure));
-			}
-		} 
-	}
-
-	public void setShowLink(String... types) {
-		int addAmount = 0;
-		for (String type : types) {
-			if (typeSet.contains(type)) {
-				typeMap.put(type, Boolean.TRUE);
-				if (!type.equals(ADD_ARTEFACT)) {
-					prepareAddLink(type);
-					activeType = type;
-					addAmount++;
-				}
-			}
-		}
-
-		if (addAmount > 1) throw new AssertException(
-				"its not possible anymore to have more than one structure element type to be added. if needed, implement links of this controller in callout again.");
-		linkArtefactLink.setVisible(typeMap.get(ADD_ARTEFACT));
-	}
-
-	private void prepareAddLink(String type) {
-		addStructLink.setVisible(true);
-		String title = translate("add." + type);
-		addStructLink.setTooltip(title);
-		addStructLink.setCustomDisplayText(title);
-		addStructLink.setCustomEnabledLinkCSS("o_eportfolio_add_link o_ep_" + type + "_icon");
-	}
-
-	private void popUpAddArtefactBox(UserRequest ureq) {
-		if (artefactPoolCtrl == null) {
-			artefactPoolCtrl = new EPArtefactPoolRunController(ureq, getWindowControl(), true, true);
-			listenTo(artefactPoolCtrl);
-		}
-		artefactBox = new CloseableModalController(getWindowControl(),"close",artefactPoolCtrl.getInitialComponent(),true, translate("choose.artefact.title"));
-		artefactPoolCtrl.setPreSelectedStruct(portfolioStructure);
-
-		listenTo(artefactBox);
-		artefactBox.activate();
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// nothing
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPArtefactClicked.java b/src/main/java/org/olat/portfolio/ui/structel/EPArtefactClicked.java
deleted file mode 100644
index 78120156046376d3e413223477499dac265936be..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPArtefactClicked.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel;
-
-import org.olat.core.gui.control.Event;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-
-/**
- * 
- * Description:<br>
- * 
- * <P>
- * Initial Date:  10 déc. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPArtefactClicked extends Event {
-
-	private static final long serialVersionUID = 7396012394011453648L;
-	private final PortfolioStructure structure;
-	
-	public EPArtefactClicked(String cmd, PortfolioStructure structure) {
-		super(cmd);
-		this.structure = structure;
-	}
-	
-	public PortfolioStructure getStructure() {
-		return structure;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPCreateMapController.java b/src/main/java/org/olat/portfolio/ui/structel/EPCreateMapController.java
deleted file mode 100644
index c705184f440c4c43878f353f9002f435691589e4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPCreateMapController.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel;
-
-import org.olat.core.CoreSpringFactory;
-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.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
-import org.olat.portfolio.EPLoggingAction;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.util.logging.activity.LoggingResourceable;
-
-/**
- * Description:<br>
- * Small controller to create a new default map and to fire event afterwards
- * 
- * <P>
- * Initial Date: 03.08.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPCreateMapController extends FormBasicController {
-
-	private TextElement titleEl;
-	private RichTextElement descEl;
-	private final EPFrontendManager ePFMgr;
-	
-
-	public EPCreateMapController(UserRequest ureq, WindowControl wControl) {
-		super(ureq, wControl);
-		ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-		initForm(ureq);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		String title = "";
-		titleEl = uifactory.addTextElement("map.title", "map.title", 512, title, formLayout);
-		titleEl.setNotEmptyCheck("map.title.not.empty");
-		titleEl.setMandatory(true);
-
-		String description = "";
-		descEl = uifactory.addRichTextElementForStringDataMinimalistic("map.description", "map.description", description, 7, -1,
-				formLayout, getWindowControl());
-		descEl.setNotLongerThanCheck(2047, "map.description.too.long");
-
-		uifactory.addFormSubmitButton("save.and.open.map", formLayout);
-	}
-	
-	/**
-	 * Set the fields to empty
-	 */
-	public void reset() {
-		titleEl.setValue("");
-		descEl.setValue("");
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void formOK(UserRequest ureq) {
-		String mapTitle = titleEl.getValue();
-		String mapDesc = descEl.getValue();
-
-		PortfolioStructureMap resMap = ePFMgr.createAndPersistPortfolioDefaultMap(getIdentity(), mapTitle, mapDesc);
-		// add a page, as each map should have at least one per default!
-		String title = translate("new.page.title");
-		String description = translate("new.page.desc");
-		ePFMgr.createAndPersistPortfolioPage(resMap, title, description);
-		resMap = (PortfolioStructureMap) ePFMgr.loadPortfolioStructureByKey(resMap.getKey()); // refresh to get all elements with db-keys
-		ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapPortfolioOres(resMap));
-		ThreadLocalUserActivityLogger.log(EPLoggingAction.EPORTFOLIO_MAP_CREATED, getClass());
-		fireEvent(ureq, new EPMapCreatedEvent(resMap));
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// nothing
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPMapCreatedEvent.java b/src/main/java/org/olat/portfolio/ui/structel/EPMapCreatedEvent.java
deleted file mode 100644
index 52ecc24604c4c0a28522dfc6f4701c3b42f39f4d..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPMapCreatedEvent.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel;
-
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-
-/**
- * Description:<br>
- * Event sent after creation of a new map, containing the map itself.
- * 
- * <P>
- * Initial Date: 04.08.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPMapCreatedEvent extends EPMapEvent {
-
-	private static final long serialVersionUID = -3783757567973482399L;
-
-	public EPMapCreatedEvent(PortfolioStructureMap resMap) {
-		super("EPMapCreated", resMap);
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPMapEvent.java b/src/main/java/org/olat/portfolio/ui/structel/EPMapEvent.java
deleted file mode 100644
index 7ffafdf270e58c255776988c181f671c80d65a97..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPMapEvent.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel;
-
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-
-/**
- * 
- * Description:<br>
- * Event for the map editing environnment
- * 
- * <P>
- * Initial Date:  11 oct. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPMapEvent extends EPStructureEvent {
-
-	private static final long serialVersionUID = -4106964526869394707L;
-
-	public EPMapEvent(String command, PortfolioStructureMap map) {
-		super(command, map);
-	}
-
-	/**
-	 * @return Returns the PortfolioStructure.
-	 */
-	public PortfolioStructureMap getPortfolioStructureMap() {
-		return (PortfolioStructureMap)getStructure();
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPMapKeyEvent.java b/src/main/java/org/olat/portfolio/ui/structel/EPMapKeyEvent.java
deleted file mode 100644
index eac805cec342e2ea75612fbb703a266d80ebddd8..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPMapKeyEvent.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel;
-
-import org.olat.core.gui.control.Event;
-
-/**
- * lightweight event class that does not drag along the whole EpMap object, just
- * the its key
- * 
- * @author strentini, sergio.trentini@frentix.com, http://www.frentix.com
- * 
- */
-public class EPMapKeyEvent extends Event {
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	
-	private final Long mapKey;
-
-	public EPMapKeyEvent(String command, Long mapKey) {
-		super(command);
-		this.mapKey = mapKey;
-	}
-
-	public Long getMapKey() {
-		return mapKey;
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPMapViewController.java b/src/main/java/org/olat/portfolio/ui/structel/EPMapViewController.java
deleted file mode 100644
index 4e19e7d74125e10b8e0e4869bc1fe752f67bb686..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPMapViewController.java
+++ /dev/null
@@ -1,391 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel;
-
-import java.util.List;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.gui.control.generic.dtabs.Activateable2;
-import org.olat.core.gui.control.generic.modal.DialogBoxController;
-import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
-import org.olat.core.helpers.Settings;
-import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.StateEntry;
-import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.coordinate.CoordinatorManager;
-import org.olat.core.util.coordinate.LockResult;
-import org.olat.course.CourseFactory;
-import org.olat.course.ICourse;
-import org.olat.course.nodes.CourseNode;
-import org.olat.portfolio.EPLoggingAction;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.EPSecurityCallbackFactory;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.EPPage;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.olat.portfolio.model.structel.EPStructuredMapTemplate;
-import org.olat.portfolio.model.structel.EPTargetResource;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.model.structel.StructureStatusEnum;
-import org.olat.portfolio.ui.structel.edit.EPStructureTreeAndDetailsEditController;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryManager;
-import org.olat.user.DisplayPortraitController;
-import org.olat.util.logging.activity.LoggingResourceable;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * shows a map itself with containing pages, structures, etc. 
- * 
- * <P>
- * Initial Date: 04.08.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPMapViewController extends BasicController implements Activateable2 {
-
-	private Link editButton, backLink, submitAssessLink;
-	private final VelocityContainer mainVc;
-	
-	private EPMultiplePageController pageCtrl;
-	private EPStructureTreeAndDetailsEditController editCtrl;
-	private DialogBoxController confirmationSubmissionCtr;
-	private final boolean back;
-	
-	private EditMode editMode = EditMode.view;
-	private PortfolioStructureMap map;
-	private EPSecurityCallback secCallback;
-	private LockResult lockEntry;
-	
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	@Autowired
-	private RepositoryManager repositoryManager;
-	@Autowired
-	private CoordinatorManager coordinatorManager;
-
-	public EPMapViewController(UserRequest ureq, WindowControl control, PortfolioStructureMap initialMap, boolean back,
-			boolean preview, EPSecurityCallback secCallback) {
-		super(ureq, control);
-		this.map = initialMap;
-		this.back = back;
-		this.secCallback = secCallback;
-		
-		mainVc = createVelocityContainer("mapview");
-		
-		// if this is a structured map (assigned from a template) do a sync first
-		if (map instanceof EPStructuredMap && (map.getStatus() == null || !map.getStatus().equals(StructureStatusEnum.CLOSED) )){
-			map = (PortfolioStructureMap) ePFMgr.loadPortfolioStructureByKey(map.getKey());
-			boolean syncOk = ePFMgr.synchronizeStructuredMapToUserCopy(map);
-			if (syncOk) {
-				showInfo("synced.map.success");
-			} else if(map == null) {
-				showWarning("synced.map.deleted");
-				putInitialPanel(createVelocityContainer("map_deleted"));
-				return;
-			} else {
-				showError("synced.map.error");
-				
-			}
-		}
-		
-		if(EPSecurityCallbackFactory.isLockNeeded(secCallback)) {
-			lockEntry = coordinatorManager.getCoordinator().getLocker().acquireLock(initialMap, ureq.getIdentity(), "mmp");
-			if(!lockEntry.isSuccess()) {
-				this.secCallback = EPSecurityCallbackFactory.updateAfterFailedLock(secCallback);
-				showWarning("map.already.edited");
-			}
-		}
-		
-		//don't show the message for preview
-		if(initialMap instanceof EPStructuredMapTemplate && !preview) {
-			boolean inUse = ePFMgr.isTemplateInUse(initialMap, null, null, null);
-			if(inUse) {
-				showWarning("template.alreadyInUse");
-			}
-		}
-		
-		initForm(ureq);
-		putInitialPanel(mainVc);
-	}
-	
-	public boolean canEditStructure() {
-		return secCallback.canEditStructure();
-	}
-	
-	protected void initForm(UserRequest ureq) {
-		Identity ownerIdentity = ePFMgr.getFirstOwnerIdentity(map);
-		if(ownerIdentity != null) {
-			DisplayPortraitController portraitCtr = new DisplayPortraitController(ureq, getWindowControl(), ownerIdentity, false,true,true,false);
-			mainVc.put("ownerportrait", portraitCtr.getInitialComponent());
-		}
-		
-		mainVc.contextPut("map", map);
-		mainVc.contextPut("style", ePFMgr.getValidStyleName(map));
-		
-		mainVc.remove(mainVc.getComponent("map.editButton"));
-		if(secCallback.canEditStructure()) {
-			editButton = LinkFactory.createButton("map.editButton", mainVc, this);
-			editButton.setElementCssClass("o_sel_ep_edit_map");
-			editButton.setIconLeftCSS("o_icon o_icon-fw o_icon_edit");
-			if(editMode == EditMode.view) {
-				editButton.setCustomDisplayText(translate("map.editButton.on"));
-			} else {
-				editButton.setCustomDisplayText(translate("map.editButton.off"));
-			}
-		} 
-		if(back) {
-			backLink = LinkFactory.createLinkBack(mainVc, this);
-		}
-		mainVc.remove(mainVc.getComponent("map.submit.assess"));
-		if(secCallback.canSubmitAssess() && !StructureStatusEnum.CLOSED.equals(map.getStatus())) {
-			submitAssessLink = LinkFactory.createButtonSmall("map.submit.assess", mainVc, this);
-		}
-		
-		if(map instanceof EPStructuredMap) {
-			EPTargetResource resource = ((EPStructuredMap)map).getTargetResource();
-			RepositoryEntry repoEntry = repositoryManager.lookupRepositoryEntry(resource.getOLATResourceable(), false);
-			if(repoEntry != null) {
-				mainVc.contextPut("courseName", StringHelper.escapeHtml(repoEntry.getDisplayname()));
-				String url = Settings.getServerContextPathURI();
-				url += "/url/RepositoryEntry/" + repoEntry.getKey() + "/CourseNode/" + resource.getSubPath();
-				mainVc.contextPut("courseLink", url);
-			}
-		}
-	
-		mainVc.remove(mainVc.getComponent("addButton"));
-		if(secCallback.canAddPage() && !StructureStatusEnum.CLOSED.equals(map.getStatus())) {
-			EPAddElementsController addButton = new EPAddElementsController(ureq, getWindowControl(), map);
-			if(secCallback.canAddPage()) {
-				addButton.setShowLink(EPAddElementsController.ADD_PAGE);
-			}
-			mainVc.put("addButton", addButton.getInitialComponent());
-			listenTo(addButton);
-		} 
-		mainVc.contextPut("closed", Boolean.valueOf((StructureStatusEnum.CLOSED.equals(map.getStatus()))));
-		
-		List<PortfolioStructure> pageList = ePFMgr.loadStructureChildren(map);
-		if (pageList!=null && pageList.size() != 0) {
-			// prepare to paint pages also
-			removeAsListenerAndDispose(pageCtrl);
-			pageCtrl = new EPMultiplePageController(ureq, getWindowControl(), pageList, secCallback);
-			mainVc.put("pagesCtrl", pageCtrl.getInitialComponent());
-			listenTo(pageCtrl);
-		} else if (mainVc.getComponent("pagesCtrl")!=null){
-			mainVc.remove(mainVc.getComponent("pagesCtrl"));
-		}	
-	}
-
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest, org.olat.core.gui.components.form.flexible.FormItem, org.olat.core.gui.components.form.flexible.impl.FormEvent)
-	 */
-	@Override
-	public void event(UserRequest ureq, Component source, Event event) {
-		if (source == editButton){
-			toogleEditMode(ureq);
-		} else if(source == backLink) {
-			fireEvent(ureq, new EPMapEvent(EPStructureEvent.CLOSE, map));
-		} else if(source == submitAssessLink) {
-			if (preCheckMapSubmit()){
-				doConfirmSubmitAssess(ureq);
-			} else {
-				showWarning("map.cannot.submit.nomore.coursenode");
-			}
-		} 
-	}
-	
-	private void toogleEditMode(UserRequest ureq) {
-		removeAsListenerAndDispose(editCtrl);
-		if (editMode == EditMode.view){
-			edit(ureq);
-		} else {
-			view(ureq);
-		}
-	}
-	
-	public void view(UserRequest ureq) {
-		PortfolioStructure currentEditedStructure = null;
-		if(editCtrl != null) {
-			removeAsListenerAndDispose(editCtrl);
-			mainVc.remove(editCtrl.getInitialComponent());
-			currentEditedStructure = editCtrl.getSelectedStructure();
-		}
-		initForm(ureq);
-		editMode = EditMode.view;
-		if(editButton != null) {
-			editButton.setCustomDisplayText(translate("map.editButton.on"));
-		}
-		if(currentEditedStructure != null && pageCtrl != null) {
-			EPPage page = getSelectedPage(currentEditedStructure);
-			if(page != null) {
-				pageCtrl.selectPage(ureq, page);
-				addToHistory(ureq, page, null);
-			}
-		}
-	}
-	
-	public void edit(UserRequest ureq) {
-		if(canEditStructure()) {
-			removeAsListenerAndDispose(editCtrl);
-			PortfolioStructure selectedPage = null;
-			if(pageCtrl != null) {
-				selectedPage = pageCtrl.getSelectedPage();
-			}
-			initOrUpdateEditMode(ureq, selectedPage);
-			editMode = EditMode.editor;
-		}
-	}
-	
-	@Override
-	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		if(entries == null || entries.isEmpty()) return;
-		pageCtrl.activate(ureq, entries, state);
-	}
-	
-	public PortfolioStructureMap getMap() {
-		return map;
-	}
-	
-	private EPPage getSelectedPage(PortfolioStructure structure) {
-		PortfolioStructure current = structure;
-		
-		do {
-			if(current instanceof EPPage) {
-				return (EPPage)current;
-			}
-			current = current.getRoot();
-		} while (current != null);
-
-		return null;
-	}
-	
-	private boolean preCheckMapSubmit(){
-		EPStructuredMap submittedMap = (EPStructuredMap) map;
-		try {
-			EPTargetResource resource = submittedMap.getTargetResource();
-			OLATResourceable courseOres = resource.getOLATResourceable();
-			ICourse course = CourseFactory.loadCourse(courseOres);
-			CourseNode courseNode = course.getRunStructure().getNode(resource.getSubPath());
-			if (courseNode==null) return false;
-		} catch (Exception e) {
-			return false;
-		}
-		return true;
-	}
-	
-	private void doConfirmSubmitAssess(UserRequest ureq) {
-		if(ePFMgr.checkCollectRestrictionOfMap(map)) {
-			String title = translate("map.submit.assess.title");
-			String text = translate("map.submit.assess.description");
-			confirmationSubmissionCtr = activateYesNoDialog(ureq, title, text, confirmationSubmissionCtr);
-		} else {
-			String title = translate("map.submit.assess.restriction.error.title");
-			String[] stats = ePFMgr.getRestrictionStatisticsOfMap(map);
-			String text = translate("map.submit.assess.restriction.error.description") + "<br/>" +  translate("map.submit.assess.restriction.error.hint", stats);
-			confirmationSubmissionCtr = activateYesNoDialog(ureq, title, text, confirmationSubmissionCtr);
-			confirmationSubmissionCtr.setCssClass("o_icon_warn");
-		}
-	}
-	
-	private void doSubmitAssess(UserRequest ureq) {
-		ePFMgr.submitMap(map);
-		secCallback = EPSecurityCallbackFactory.getSecurityCallback(ureq, map, ePFMgr);
-		fireEvent(ureq, new EPMapEvent(EPStructureEvent.SUBMIT, map));
-		mainVc.remove(mainVc.getComponent("editor")); // switch back to non-edit mode
-		ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapPortfolioOres(map));
-		ThreadLocalUserActivityLogger.log(EPLoggingAction.EPORTFOLIO_TASK_FINISHED, getClass());
-		reloadMapAndRefreshUI(ureq);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		super.event(ureq, source, event);
-		if (event instanceof EPStructureChangeEvent && event.getCommand().equals(EPStructureChangeEvent.ADDED)){
-			EPStructureChangeEvent changeEvent = (EPStructureChangeEvent)event;
-			PortfolioStructure structure = changeEvent.getPortfolioStructure();
-//			don't do reloadMapAndRefreshUI(ureq) here; no db-commit yet! no refresh -> stale object!
-			if(structure instanceof EPPage) {
-				//jump to the edit mode for new pages
-				initOrUpdateEditMode(ureq, structure);
-			}
-		} else if(event instanceof EPStructureEvent && event.getCommand().equals(EPStructureEvent.CHANGE)) {
-		// reload map
-			reloadMapAndRefreshUI(ureq);
-		} else if (source == editCtrl && event.equals(Event.CHANGED_EVENT)) {
-			// refresh view on changes in TOC or style
-			reloadMapAndRefreshUI(ureq);
-			PortfolioStructure selectedPage = editCtrl.getSelectedStructure();
-			initOrUpdateEditMode(ureq, selectedPage);
-		} else if (source == confirmationSubmissionCtr) {
-			if (DialogBoxUIFactory.isYesEvent(event)) {
-				doSubmitAssess(ureq);
-			}
-		} 
-		
-		fireEvent(ureq, event); // fire to multiple maps controller, so it can refresh itself!
-	}
-	
-	private void initOrUpdateEditMode(UserRequest ureq, PortfolioStructure startStruct) {
-		removeAsListenerAndDispose(editCtrl);
-		editCtrl = new EPStructureTreeAndDetailsEditController(ureq, getWindowControl(), startStruct, map, secCallback);
-		mainVc.put("editor", editCtrl.getInitialComponent());
-		listenTo(editCtrl);
-		editButton.setUserObject(Boolean.TRUE);
-		editButton.setCustomDisplayText(translate("map.editButton.off"));		
-	}
-	
-	private void reloadMapAndRefreshUI(UserRequest ureq){
-		this.map = (PortfolioStructureMap) ePFMgr.loadPortfolioStructureByKey(map.getKey());
-		initForm(ureq);
-	}
-	
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		if(lockEntry != null) {
-			coordinatorManager.getCoordinator().getLocker().releaseLock(lockEntry);
-			lockEntry = null;
-		}
-	}
-	
-	private enum EditMode {
-		view,
-		editor
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPMultipleMapController.java b/src/main/java/org/olat/portfolio/ui/structel/EPMultipleMapController.java
deleted file mode 100644
index 46551a555129b53274216a89f620202c1f574b7e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPMultipleMapController.java
+++ /dev/null
@@ -1,546 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import org.olat.NewControllerFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.panel.StackedPanel;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.gui.control.generic.closablewrapper.CloseableModalController;
-import org.olat.core.gui.control.generic.dtabs.Activateable2;
-import org.olat.core.gui.control.generic.modal.DialogBoxController;
-import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
-import org.olat.core.helpers.Settings;
-import org.olat.core.id.Identity;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.StateEntry;
-import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.portfolio.EPLoggingAction;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.EPSecurityCallbackFactory;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.olat.portfolio.model.structel.EPTargetResource;
-import org.olat.portfolio.model.structel.ElementType;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.ui.EPMapRunViewOption;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryManager;
-import org.olat.util.logging.activity.LoggingResourceable;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * Present a list of maps. allows: 
- * - Open a map  
- * - delete a map
- * - copy a map with or without artefacts and open it
- * 
- * <P>
- * Initial Date: 04.08.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPMultipleMapController extends BasicController implements Activateable2 {
-	private static final String RESTRICT_LINK = "restrictLink";
-	private static final String VIEW_LINK_PREFIX = "viewLink";
-	private static final String DELETE_LINK_PREFIX = "deleteLink";
-	private static final String COPY_LINK_PREFIX = "copyLink";
-	private static final String SHARE_LINK_PREFIX = "shareLink";
-	private static final String PAGING_LINK_PREFIX = "pageLink";
-	
-	private static final int ITEMS_PER_PAGE = 9;
-	
-	private final VelocityContainer vC;
-	private DialogBoxController delMapCtrl;
-	private DialogBoxController copyMapCtrl;
-	private EPMapViewController mapViewCtrl;
-	private EPShareListController shareListController;
-	private CloseableModalController shareBox;
-	private final StackedPanel myPanel;
-	
-	private final EPMapRunViewOption option;
-	private final Identity mapOwner;
-	private List<PortfolioStructureMap> userMaps;
-	private boolean restrictShareView = true;
-	private long start;
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	@Autowired
-	private PortfolioModule portfolioModule;
-	
-//	components for paging
-	private Link forwardLink;
-	private int currentPageNum = 1;
-	private int currentPagingFrom = 0;
-	private int currentPagingTo = ITEMS_PER_PAGE;
-	private boolean pagingAvailable = false;
-	
-	public EPMultipleMapController(UserRequest ureq, WindowControl control, EPMapRunViewOption option, Identity mapOwner) {
-		super(ureq, control);
-
-		this.option = option;
-		this.mapOwner = mapOwner;
-		vC = createVelocityContainer("multiMaps");		
-		initOrUpdateMaps(ureq);
-
-		myPanel = putInitialPanel(vC);
-	}
-	
-	/**
-	 * returns a List of PortfolioStructures to display, depending on options (all OLAT-wide shared maps, only shared to me, paging)
-	 * 
-	 * @return
-	 */
-	private List<PortfolioStructure> getUsersStructsToDisplay(){
-		pagingAvailable = false;
-		// get maps for this user
-		List<PortfolioStructure> allUsersStruct;
-		switch (option) {
-			case OTHER_MAPS:// same as OTHERS_MAPS
-			case OTHERS_MAPS:
-				vC.remove(vC.getComponent(RESTRICT_LINK));
-				if (restrictShareView) {
-					if (portfolioModule.isOfferPublicMapList()) {
-						LinkFactory.createCustomLink(RESTRICT_LINK, "change", "restrict.show.all", Link.LINK, vC, this);
-					}
-					allUsersStruct = ePFMgr.getStructureElementsFromOthersWithoutPublic(getIdentity(), mapOwner, ElementType.STRUCTURED_MAP, ElementType.DEFAULT_MAP);
-				} else {
-					if (portfolioModule.isOfferPublicMapList()) {
-						LinkFactory.createCustomLink(RESTRICT_LINK, "change", "restrict.show.limited", Link.LINK, vC, this);
-					}
-					// this query can be quite time consuming, if fetching all structures -> do paging
-					currentPagingFrom = (currentPageNum-1)*ITEMS_PER_PAGE;
-					currentPagingTo = currentPagingFrom+ITEMS_PER_PAGE;
-					allUsersStruct = ePFMgr.getStructureElementsFromOthers(getIdentity(), mapOwner, currentPagingFrom, currentPagingTo ,ElementType.STRUCTURED_MAP, ElementType.DEFAULT_MAP);
-					pagingAvailable = true;
-				}
-				break;
-			case MY_EXERCISES_MAPS:
-				allUsersStruct = ePFMgr.getStructureElementsForUser(getIdentity(), ElementType.STRUCTURED_MAP);
-				break;
-			default:// MY_DEFAULTS_MAPS
-				allUsersStruct = ePFMgr.getStructureElementsForUser(getIdentity(), ElementType.DEFAULT_MAP);
-		}
-		if (isLogDebugEnabled()) {
-			logDebug("got all structures to see at: " + System.currentTimeMillis());
-		}
-		return allUsersStruct;
-	}
-	
-	
-	/**
-	 * 
-	 */
-	private void initOrUpdateMaps(UserRequest ureq) {		
-		if (isLogDebugEnabled()) {
-			start = System.currentTimeMillis();
-			logDebug("start loading map overview at : " + start);
-		}
-		
-		List<PortfolioStructure> allUsersStruct = getUsersStructsToDisplay();
-		userMaps = new ArrayList<>();
-		if (allUsersStruct.isEmpty()) {
-			vC.contextPut("noMaps", true);
-			return;
-		} else vC.contextRemove("noMaps");
-		
-		//remove forward link (maybe it's not needed (last page) )
-		if(forwardLink != null)
-			vC.remove(forwardLink);
-		
-		// now add paging-components if necessary and wanted
-		int elementCount   = ePFMgr.countStructureElementsFromOthers(getIdentity(), mapOwner, ElementType.DEFAULT_MAP);
-		if(pagingAvailable && elementCount > ITEMS_PER_PAGE){
-			vC.contextPut("showPaging", true);
-			
-			int additionalPage = ((elementCount % ITEMS_PER_PAGE) > 0)?1:0;
-			int pageCount = (elementCount/ITEMS_PER_PAGE) + additionalPage;
-			List<Component> pagingLinks = new ArrayList<>();
-			for(int i = 1; i < pageCount+1; i++){
-				Link pageLink = LinkFactory.createCustomLink(PAGING_LINK_PREFIX+i, "switchPage", String.valueOf(i), Link.NONTRANSLATED, vC, this);
-				pageLink.setUserObject(Integer.valueOf(i));
-				pagingLinks.add(pageLink);
-				if(i == currentPageNum){
-					pageLink.setEnabled(false);
-				}
-			}
-			
-			vC.contextPut("pageLinks",pagingLinks);
-			
-			if(currentPageNum < pageCount){
-				forwardLink = LinkFactory.createCustomLink("forwardLink", "pagingFWD", "table.forward", Link.LINK, vC, this);
-				forwardLink.setIconRightCSS("o_icon o_icon_next_page");
-			}
-		}
-
-		//now display the maps
-		
-		List<String> artAmount = new ArrayList<>(userMaps.size());
-		List<Integer> childAmount = new ArrayList<>(userMaps.size());
-		List<String> mapStyles = new ArrayList<>(userMaps.size());
-		List<Date> deadLines = new ArrayList<>(userMaps.size());
-		List<String> restriStats = new ArrayList<>(userMaps.size());
-		List<String> owners = new ArrayList<>(userMaps.size());
-		List<String> amounts = new ArrayList<>(userMaps.size());
-		
- 		int i = 1;
-		for (PortfolioStructure portfolioStructure : allUsersStruct) {
-			if (portfolioStructure.getRoot() == null) { //only show maps
-				PortfolioStructureMap map = (PortfolioStructureMap)portfolioStructure;
-				EPSecurityCallback secCallback = EPSecurityCallbackFactory.getSecurityCallback(ureq, map, ePFMgr);
-
-				userMaps.add(map);
-				Link vLink = LinkFactory.createCustomLink(VIEW_LINK_PREFIX + i, "viewMap" + map.getResourceableId(), "view.map",
-						Link.LINK, vC, this);
-				vLink.setUserObject(map);
-				vLink.setElementCssClass("o_sel_ep_open_map");
-				vLink.setIconRightCSS("o_icon o_icon-fw o_icon_start");
-				
-				//can always try to delete your own map, but exercise only if the course was deleted
-				vC.remove(vC.getComponent(DELETE_LINK_PREFIX + i)); // remove as update could require hiding it
-				// can always try to delete your own map, but exercise only if the course was deleted
-				final boolean myMaps = (option.equals(EPMapRunViewOption.MY_DEFAULTS_MAPS) || option.equals(EPMapRunViewOption.MY_EXERCISES_MAPS));
-				boolean addDeleteLink = myMaps;
-				
-				if((map instanceof EPStructuredMap) && (((EPStructuredMap) map).getReturnDate() != null)){
-						addDeleteLink = false; //it's a portfolio-task that was already handed in, so do not display delete-link
-				}
-				
-				if (addDeleteLink) {
-					final Link dLink = LinkFactory.createCustomLink(DELETE_LINK_PREFIX + i, "delMap" + map.getResourceableId(), "delete.map", Link.LINK, vC, this);
-					dLink.setIconLeftCSS("o_icon o_icon-fw o_icon_delete_item");
-					dLink.setUserObject(map);
-				}
-				
-				Link cLink = LinkFactory.createCustomLink(COPY_LINK_PREFIX + i, "copyMap" + map.getResourceableId(), "copy.map",
-						Link.LINK, vC, this);
-				cLink.setIconLeftCSS("o_icon o_icon_copy");
-				cLink.setUserObject(map);
-				// its not allowed to copy maps from a portfolio-task
-				if (map instanceof EPStructuredMap) {
-					cLink.setVisible(false); 
-				}
-				
-				vC.remove(vC.getComponent(SHARE_LINK_PREFIX + i)); // remove as update could require hiding it
-				if(myMaps && secCallback.canShareMap()) {
-					Link shareLink = LinkFactory.createCustomLink(SHARE_LINK_PREFIX + i, "shareMap" + map.getResourceableId(), "map.share",
-							Link.LINK, vC, this);
-					shareLink.setIconLeftCSS("o_icon o_icon-fw o_icon_share");
-					shareLink.setUserObject(map);
-					boolean shared = ePFMgr.isMapShared(map);
-					if(shared || (map instanceof EPStructuredMap && ((EPStructuredMap)map).getTargetResource() != null)) {
-						shareLink.setCustomDisplayText(translate("map.share.shared"));
-					}
-				}
-				if (isLogDebugEnabled()) {
-					logDebug("  in loop : got share state at: " + System.currentTimeMillis());
-				}
-				
-				// get deadline + link to course
-				if (map instanceof EPStructuredMap){
-					EPStructuredMap structMap = (EPStructuredMap)map;
-					Date deadLine = structMap.getDeadLine();
-					deadLines.add(deadLine);
-
-					EPTargetResource resource = structMap.getTargetResource();
-					RepositoryEntry repoEntry = RepositoryManager.getInstance().lookupRepositoryEntry(resource.getOLATResourceable(), false);
-					if(repoEntry != null) {
-						vC.contextPut("courseName" + i, StringHelper.escapeHtml(repoEntry.getDisplayname()));
-						String url = Settings.getServerContextPathURI();
-						url += "/url/RepositoryEntry/" + repoEntry.getKey() + "/CourseNode/" + resource.getSubPath();
-						vC.contextPut("courseLink" + i, url);
-					}
-					if (isLogDebugEnabled()) {
-						logDebug("  in loop : looked up course at : " + System.currentTimeMillis());
-					}
-					// get some stats about the restrictions if available
-					String[] stats = ePFMgr.getRestrictionStatisticsOfMap(structMap);
-					int toCollect = 0;
-					if (stats != null){
-						try {
-							toCollect = Integer.parseInt(stats[1]) - Integer.parseInt(stats[0]);		
-						} catch (Exception e) {
-							// do nothing
-							toCollect = 0;
-						}
-					}
-					if (toCollect != 0) {
-						restriStats.add(String.valueOf(toCollect));
-					} else {
-						restriStats.add(null);
-					}
-					if (isLogDebugEnabled()) {
-						logDebug("  in loop : calculated restriction statistics at : " + System.currentTimeMillis());
-					}											
-				} else {
-					deadLines.add(null);
-					restriStats.add(null);
-				}
-				
-				// show owner on shared maps
-				if (!secCallback.isOwner()){
-					owners.add(ePFMgr.getAllOwnersAsString(map));
-				} else owners.add(null);
-				
-				String artCount = String.valueOf(ePFMgr.countArtefactsInMap(map));
-				artAmount.add(artCount);
-				Integer childs = ePFMgr.countStructureChildren(map);
-				childAmount.add(childs);
-				amounts.add(translate("map.contains", new String[]{childs.toString(), artCount}));
-				
-				mapStyles.add(ePFMgr.getValidStyleName(map));
-				if (isLogDebugEnabled()) {
-					logDebug("  in loop : got map details (artefact-amount, child-struct-amount, style) at : " + System.currentTimeMillis());
-				}
-				i++;
-			}
-		}
-		vC.contextPut("owners", owners);
-		vC.contextPut("deadLines", deadLines);
-		vC.contextPut("restriStats", restriStats);
-		vC.contextPut("mapStyles", mapStyles);
-		vC.contextPut("childAmount", childAmount);
-		vC.contextPut("artefactAmount", artAmount);
-		vC.contextPut("amounts", amounts);
-		vC.contextPut("userMaps", userMaps);
-		if (isLogDebugEnabled()) {
-			long now = System.currentTimeMillis();
-			logDebug("finished processing all maps at : " + now);
-			logDebug("Total processing time for " + (i-1) + " maps was : " + (now-start));
-		}
-	}
-
-	@Override
-	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		if(entries == null || entries.isEmpty()) return;
-
-		Long key = entries.get(0).getOLATResourceable().getResourceableId();
-		activateMap(ureq, key);
-		if(mapViewCtrl != null && entries.size() > 1) {
-			//map successfully activated
-			List<ContextEntry> subEntries = entries.subList(1, entries.size());
-			mapViewCtrl.activate(ureq, subEntries, entries.get(0).getTransientState());
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.Component,
-	 *      org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		if (source instanceof Link) {
-			Link srcLink = (Link) source;
-			if (srcLink.getUserObject() instanceof PortfolioStructureMap) {
-			PortfolioStructureMap selMap = (PortfolioStructureMap) srcLink.getUserObject();
-			if (srcLink.getComponentName().startsWith(VIEW_LINK_PREFIX)) {
-				activateMap(ureq, selMap);
-				fireEvent(ureq, new EPMapEvent(EPStructureEvent.SELECT, selMap));
-			} else if (srcLink.getComponentName().startsWith(DELETE_LINK_PREFIX)) {
-				deleteMap(ureq, selMap);
-			} else if (srcLink.getComponentName().startsWith(COPY_LINK_PREFIX)) {
-				List<String> buttonLabels = new ArrayList<>();
-				String introKey = "copy.map.intro";
-				if (ePFMgr.isMapOwner(getIdentity(), selMap)){
-					buttonLabels.add(translate("copy.with.artefacts"));
-					introKey = "copy.map.intro2";
-				}
-				buttonLabels.add(translate("copy.without.artefacts"));
-				buttonLabels.add(translate("copy.cancel"));
-				String text = translate(introKey, StringHelper.escapeHtml(selMap.getTitle()));
-				copyMapCtrl = activateGenericDialog(ureq, translate("copy.map.title"), text, buttonLabels , copyMapCtrl);
-				copyMapCtrl.setUserObject(selMap);
-			} else if (srcLink.getComponentName().startsWith(SHARE_LINK_PREFIX)) {
-				popUpShareBox(ureq, selMap);
-			} else if (srcLink.getComponentName().equals(RESTRICT_LINK)){
-				restrictShareView = !restrictShareView;
-				initOrUpdateMaps(ureq);
-			}
-		} else{
-			if( srcLink.equals(forwardLink)){
-				currentPageNum++;
-				initOrUpdateMaps(ureq);
-			} else if (srcLink.getComponentName().startsWith(PAGING_LINK_PREFIX)){
-				Integer page = (Integer) srcLink.getUserObject();
-				currentPageNum = page.intValue();
-				initOrUpdateMaps(ureq);
-			} else if (srcLink.getComponentName().equals(RESTRICT_LINK)) {
-				restrictShareView = !restrictShareView;
-				initOrUpdateMaps(ureq);
-			}
-		}
-		}
-	}
-	
-	private void deleteMap(UserRequest ureq, PortfolioStructureMap map) {
-		String intro = translate("delete.map.intro", StringHelper.escapeHtml(map.getTitle()));
-		delMapCtrl = activateYesNoDialog(ureq, translate("delete.map.title"), intro, delMapCtrl);
-		delMapCtrl.setUserObject(map);
-	}
-	
-	private void popUpShareBox(UserRequest ureq, PortfolioStructureMap map) {
-		removeAsListenerAndDispose(shareListController);
-		removeAsListenerAndDispose(shareBox);
-		shareListController = new EPShareListController(ureq, getWindowControl(), map);
-		listenTo(shareListController);
-
-		String title = translate("map.share");
-		shareBox = new CloseableModalController(getWindowControl(), "close", shareListController.getInitialComponent(), true, title);
-		listenTo(shareBox);
-		shareBox.activate();
-	}
-	
-	private void activateMap(UserRequest ureq, Long mapKey) {
-		if(mapKey == null) return;
-		
-		boolean foundTheMap = false;
-		// we have a key, find the corresponding map with the current option (restrcited view or not)
-		for(PortfolioStructureMap map: userMaps) {
-			if(map.getKey().equals(mapKey) || (map.getResourceableId().equals(mapKey))) {
-				activateMap(ureq, map);
-				fireEvent(ureq, new EPMapEvent(EPStructureEvent.SELECT, map));
-				foundTheMap = true;
-				break;
-			}
-		}
-		
-		if(!foundTheMap) {
-			// map not found, switch the option and retry to found the map
-			restrictShareView = !restrictShareView;
-			initOrUpdateMaps(ureq);
-			for(PortfolioStructureMap map: userMaps) {
-				if(map.getKey().equals(mapKey) || (map.getResourceableId().equals(mapKey))) {
-					activateMap(ureq, map);
-					fireEvent(ureq, new EPMapEvent(EPStructureEvent.SELECT, map));
-					break;
-				}
-			}
-		}
-	}
-	
-	public void activateMap(UserRequest ureq, PortfolioStructureMap struct){
-		if(userMaps != null && !userMaps.contains(struct)) {
-			initOrUpdateMaps(ureq);
-		}
-		
-		if(mapViewCtrl != null) {
-			removeAsListenerAndDispose(mapViewCtrl);
-		}
-
-		EPSecurityCallback secCallback = EPSecurityCallbackFactory.getSecurityCallback(ureq, struct, ePFMgr);
-		//release the previous if not correctly released by CLOSE events
-		
-		WindowControl bwControl = addToHistory(ureq, OresHelper.createOLATResourceableInstance(struct.getClass(), struct.getKey()), null);
-		mapViewCtrl = new EPMapViewController(ureq, bwControl, struct, true, false, secCallback);
-		listenTo(mapViewCtrl);
-		myPanel.pushContent(mapViewCtrl.getInitialComponent());
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		super.event(ureq, source, event);
-		if (source == delMapCtrl) {
-			if (DialogBoxUIFactory.isYesEvent(event)) {
-				PortfolioStructure mapToDel = (PortfolioStructure) ((DialogBoxController) source).getUserObject();
-				String title = mapToDel.getTitle();
-				ePFMgr.deletePortfolioStructure(mapToDel);
-				showInfo("delete.map.success", title);
-				ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapPortfolioOres(mapToDel));
-				ThreadLocalUserActivityLogger.log(EPLoggingAction.EPORTFOLIO_MAP_REMOVED, getClass());
-				initOrUpdateMaps(ureq);
-			}
-		} else if (source == copyMapCtrl) {
-			if (event.equals(Event.CANCELLED_EVENT)) {
-				fireEvent(ureq, Event.CANCELLED_EVENT); 
-				return;
-			} 
-			int pos = DialogBoxUIFactory.getButtonPos(event);
-			boolean withArtefacts = false;
-			PortfolioStructure mapToCopy = (PortfolioStructure) ((DialogBoxController) source).getUserObject();
-			if (!ePFMgr.isMapOwner(getIdentity(), mapToCopy)) pos++; // shift clicked pos, when "with artefacts" was hidden before
-			if (pos == 2){
-				// clicked cancel button
-				fireEvent(ureq, Event.CANCELLED_EVENT);
-				return;
-			} else if (pos == 0) withArtefacts = true;
-			PortfolioStructureMap targetMap = ePFMgr.createAndPersistPortfolioDefaultMap(getIdentity(), translate("map.copy.of", mapToCopy.getTitle()), mapToCopy.getDescription());
-			ePFMgr.copyStructureRecursively(mapToCopy, targetMap, withArtefacts);			
-			// open the map
-			String title = targetMap.getTitle();
-			showInfo("copy.map.success", title);
-			initOrUpdateMaps(ureq);
-			String businessPath = "[" +  targetMap.getClass().getSimpleName() + ":" + targetMap.getResourceableId() + "]";
-			NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl());
-		} else if (source == mapViewCtrl) {
-			if(EPStructureEvent.CLOSE.equals(event.getCommand())) {
-				myPanel.popContent();
-				fireEvent(ureq, event);
-				removeAsListenerAndDispose(mapViewCtrl);
-				mapViewCtrl = null;
-				// refresh on close (back-link) to prevent stale object errors, when map got changed meanwhile
-				initOrUpdateMaps(ureq);
-				addToHistory(ureq);
-			} else if (EPStructureEvent.SUBMIT.equals(event.getCommand()) || event.equals(Event.CHANGED_EVENT)){
-				// refresh on submission of a map or on any other changes which needs an ui-update
-				initOrUpdateMaps(ureq);
-			} 
-		} else if (source == shareListController) {
-			shareBox.deactivate();
-			removeAsListenerAndDispose(shareListController);
-			initOrUpdateMaps(ureq);
-		}
-		if (event instanceof EPStructureChangeEvent){
-			// event from child
-			String evCmd = event.getCommand();
-			if (evCmd.equals(EPStructureChangeEvent.ADDED) || evCmd.equals(EPStructureChangeEvent.CHANGED)){
-				initOrUpdateMaps(ureq);
-			}
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		//
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPMultiplePageController.java b/src/main/java/org/olat/portfolio/ui/structel/EPMultiplePageController.java
deleted file mode 100644
index 08d834f6789dd87671de706875fcf509cbc88843..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPMultiplePageController.java
+++ /dev/null
@@ -1,411 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.gui.control.generic.dtabs.Activateable2;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.StateEntry;
-import org.olat.core.util.Formatter;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.EPAbstractMap;
-import org.olat.portfolio.model.structel.EPPage;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureRef;
-import org.olat.portfolio.ui.structel.view.EPChangelogController;
-import org.olat.portfolio.ui.structel.view.EPTOCReadOnlyController;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * shows multiple pages in a map and handles the paging of them
- * 
- * <P>
- * Initial Date: 23.08.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPMultiplePageController extends BasicController implements Activateable2 {
-
-	private List<PageTab> pageList;
-	private Controller currentActivePageCtrl;
-	private EPTOCReadOnlyController tocPageCtrl;
-	private EPChangelogController changelogPageCtrl;
-	private final VelocityContainer vC;
-	private final EPSecurityCallback secCallback;
-	@Autowired
-	private EPFrontendManager ePFMgr;
-
-	private Link tocLink; // the first tab, link to TOC
-	private Link changelogLink; // the last tab, link to Changelog
-
-	private static final int PAGENUM_TOC = -1; // pagenum of toc (first tab)
-	private static final int PAGENUM_CL = -2; // pagenum of changelog (last tab)
-
-	public EPMultiplePageController(UserRequest ureq, WindowControl wControl, List<PortfolioStructure> pages, EPSecurityCallback secCallback) {
-		super(ureq, wControl);
-		this.secCallback = secCallback;
-		
-		pageList = new ArrayList<>(pages.size());
-		for(PortfolioStructure page:pages) {
-			if(page instanceof EPPage) {
-				pageList.add(new PageTab(page.getKey(), page.getTitle()));
-			}
-		}
-
-		vC = createVelocityContainer("multiPages");
-		init(ureq);
-		putInitialPanel(vC);
-	}
-
-	public EPPage getSelectedPage() {
-		if (currentActivePageCtrl instanceof EPPageViewController) {
-			return ((EPPageViewController) currentActivePageCtrl).getPage();
-		}
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	protected void init(UserRequest ureq) {
-		if (pageList != null && pageList.size() != 0) {
-
-			// create toc link
-			tocLink = LinkFactory.createLink("toc", vC, this);
-			tocLink.setDomReplacementWrapperRequired(false);
-			tocLink.setUserObject(PAGENUM_TOC);
-
-			// create changelog link
-			changelogLink = LinkFactory.createLink("changelog", vC, this);
-			changelogLink.setDomReplacementWrapperRequired(false);
-			changelogLink.setUserObject(PAGENUM_CL);
-
-			int i = 1;
-			List<Link> pageLinkList = new ArrayList<>();
-			for (PageTab page : pageList) {
-				String pageTitle =StringHelper.escapeHtml(page.getTitle());
-				String shortPageTitle = Formatter.truncate(pageTitle, 20);
-				Link pageLink = LinkFactory
-						.createCustomLink("pageLink" + i, "pageLink" + i, shortPageTitle, Link.LINK + Link.NONTRANSLATED, vC, this);
-				pageLink.setDomReplacementWrapperRequired(false);
-				pageLink.setUserObject(i - 1);
-				pageLink.setTooltip(pageTitle);
-				pageLinkList.add(pageLink);
-				i++;
-			}
-			vC.contextPut("pageLinkList", pageLinkList);
-			setAndInitActualPage(ureq, PAGENUM_TOC, false);
-		}
-	}
-
-	protected void selectPage(UserRequest ureq, PortfolioStructure page) {
-		int count = 0;
-		for (PageTab structure : pageList) {
-			if (structure.getKey().equals(page.getKey())) {
-				setAndInitActualPage(ureq, count, false);
-				break;
-			}
-			count++;
-		}
-	}
-
-	/**
-	 * 
-	 * @param ureq
-	 * @param pageNum
-	 * @param withComments
-	 */
-	private void setAndInitActualPage(UserRequest ureq, int pageNum, boolean withComments) {
-		disposeNormalPageController();
-
-		if (pageNum == -1) {
-			setAndInitTOCPage(ureq);
-		} else if (pageNum == PAGENUM_CL) {
-			setAndInitCLPage(ureq);
-		} else {
-			setAndInitNormalPage(ureq, pageNum, withComments);
-		}
-
-		vC.put("pageCtrl", currentActivePageCtrl.getInitialComponent());
-		vC.contextPut("actualPage", pageNum + 1);
-	}
-
-	/**
-	 * disposes the currentActivePageCtrl if its not the toc and not the
-	 * changelog
-	 */
-	private void disposeNormalPageController() {
-		if (currentActivePageCtrl instanceof EPPageViewController) {
-			removeAsListenerAndDispose(currentActivePageCtrl);
-		}
-	}
-
-	/**
-	 * 
-	 * @param ureq
-	 */
-	private void setAndInitTOCPage(UserRequest ureq) {
-		// this is the toc
-		if (tocPageCtrl == null) {
-			PageTab page = pageList.get(0);
-			PortfolioStructure map = ePFMgr.loadStructureParent(page);
-			tocPageCtrl = new EPTOCReadOnlyController(ureq, getWindowControl(), map, secCallback);
-			listenTo(tocPageCtrl);
-		} else {
-			tocPageCtrl.refreshTOC(ureq);
-		}
-		disableLINK_LC(false);
-		disableLink_TOC(true);
-		currentActivePageCtrl = tocPageCtrl;
-		addToHistory(ureq, OresHelper.createOLATResourceableType("TOC"), null);
-	}
-
-	/**
-	 * 
-	 * @param ureq
-	 */
-	private void setAndInitCLPage(UserRequest ureq) {
-		if (changelogPageCtrl == null) {
-			changelogPageCtrl = instantiateCLController(ureq);
-			listenTo(changelogPageCtrl);
-		} else {
-			changelogPageCtrl.refreshNewsList();
-		}
-		currentActivePageCtrl = changelogPageCtrl;
-		disableLink_TOC(false);
-		disableLINK_LC(true);
-		addToHistory(ureq, OresHelper.createOLATResourceableType("CL"), null);
-	}
-
-	/**
-	 * 
-	 * @param ureq
-	 * @return
-	 */
-	private EPChangelogController instantiateCLController(UserRequest ureq) {
-		PageTab page = pageList.get(0);
-		EPAbstractMap abstrMap = (EPAbstractMap)ePFMgr.loadStructureParent(page);
-		return new EPChangelogController(ureq, getWindowControl(), abstrMap);
-	}
-
-	/**
-	 * 
-	 * @param ureq
-	 * @param pageNumberToInit
-	 * @param withComments
-	 */
-	private void setAndInitNormalPage(UserRequest ureq, int pageNumberToInit, boolean withComments) {
-		PageTab tab = pageList.get(pageNumberToInit);
-		PortfolioStructure structureElement = ePFMgr.loadPortfolioStructureByKey(tab);
-		if(structureElement instanceof EPPage) {
-			EPPage page = (EPPage)structureElement;
-			PortfolioStructure map = ePFMgr.loadStructureParent(tab);
-			WindowControl bwControl = addToHistory(ureq, OresHelper.createOLATResourceableInstance(EPPage.class, page.getKey()), null);
-			currentActivePageCtrl = new EPPageViewController(ureq, bwControl, map, page, withComments, secCallback);
-			listenTo(currentActivePageCtrl);
-			// enable toc and changelog links
-			disableLink_TOC(false);
-			disableLINK_LC(false);
-		}
-	}
-
-	private void disableLink_TOC(boolean disable) {
-		vC.contextPut("toc_enabled", disable);
-	}
-
-	private void disableLINK_LC(boolean disable) {
-		vC.contextPut("changelog_enabled", disable);
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		if (source instanceof Link) {
-			Link link = (Link) source;
-			int pageNum = PAGENUM_TOC;
-			try {
-				pageNum = Integer.parseInt(link.getUserObject().toString());
-			} catch (NumberFormatException nfe) {
-				// somehow the link has a invalid pageNum, display the TOC
-			}
-
-			setAndInitActualPage(ureq, pageNum, false);
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.Controller,
-	 *      org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		super.event(ureq, source, event);
-		if (source == currentActivePageCtrl) {
-			if (source instanceof EPTOCReadOnlyController || source instanceof EPChangelogController) {
-				// activate selected structure from toc or changelog
-				if (event instanceof EPStructureEvent) {
-					handleEPStructureEvent(ureq, (EPStructureEvent) event);
-				} else if (event instanceof EPMapKeyEvent) {
-					handleEPMapKeyEvent(ureq, (EPMapKeyEvent) event);
-				}
-			}
-		}
-	}
-
-	/**
-	 * 
-	 * @param ureq
-	 * @param epEv
-	 */
-	private void handleEPStructureEvent(UserRequest ureq, EPStructureEvent epEv) {
-		PortfolioStructure selStruct = epEv.getStructure();
-		if (epEv.getCommand().equals(EPStructureEvent.SELECT)) {
-			findAndActivatePage(ureq, selStruct, false);
-		} else if (epEv.getCommand().equals(EPStructureEvent.SELECT_WITH_COMMENTS)) {
-			findAndActivatePage(ureq, selStruct, true);
-		}
-	}
-
-	/**
-	 * 
-	 * @param ureq
-	 * @param epEv
-	 */
-	private void handleEPMapKeyEvent(UserRequest ureq, EPMapKeyEvent epEv) {
-		Long mapKey = epEv.getMapKey();
-		if (mapKey != null && mapKey > 1) {
-			findAndActivatePageByKey(ureq, mapKey);
-		} else {
-			setAndInitActualPage(ureq, PAGENUM_TOC, false);
-		}
-	}
-
-	@Override
-	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		if (entries == null || entries.isEmpty())
-			return;
-
-		OLATResourceable ores = entries.get(0).getOLATResourceable();
-		if ("TOC".equals(ores.getResourceableTypeName())) {
-			setAndInitActualPage(ureq, PAGENUM_TOC, false);
-		} else if ("CL".equals(ores.getResourceableTypeName())) {
-			setAndInitActualPage(ureq, PAGENUM_TOC, false);
-		} else if ("EPPage".equals(ores.getResourceableTypeName())) {
-			Long pageKey = ores.getResourceableId();
-			if (containsPage(pageKey)) {
-				int pos = indexOfPage(pageKey);
-				if (pos != -1) {
-					setAndInitActualPage(ureq, pos, false);
-				}
-			}
-		}
-	}
-
-	private void findAndActivatePage(UserRequest ureq, PortfolioStructure selStruct, boolean withComments) {
-		if (containsPage(selStruct.getKey())) {
-			int pos = indexOfPage(selStruct.getKey());
-			if (pos != -1)
-				setAndInitActualPage(ureq, pos, withComments);
-		} else {
-			// lookup parents, as this could be an artefact or a
-			// structureElement
-			PortfolioStructure parentStruct = ePFMgr.loadStructureParent(selStruct);
-			if (parentStruct != null)
-				findAndActivatePage(ureq, parentStruct, withComments);
-		}
-	}
-
-	private void findAndActivatePageByKey(UserRequest ureq, Long key) {
-		if (containsPage(key)) {
-			int pos = indexOfPage(key);
-			if (pos != -1)
-				setAndInitActualPage(ureq, pos, false);
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// nothing
-	}
-	
-	private int indexOfPage(Long key) {
-		if(key == null || pageList == null || pageList.isEmpty()) return -1;
-		
-		int count=0;
-		for(PageTab pageTab:pageList) {
-			if(pageTab.getKey().equals(key)) {
-				break;
-			}
-			count++;
-		}
-		return count;
-	}
-	
-	private boolean containsPage(Long key) {
-		if(key == null || pageList == null || pageList.isEmpty()) return false;
-		
-		for(PageTab pageTab:pageList) {
-			if(pageTab.getKey().equals(key)) {
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	private class PageTab implements PortfolioStructureRef {
-		
-		private final Long pageKey;
-		private final String title;
-		
-		public PageTab(Long pageKey, String title) {
-			this.pageKey = pageKey;
-			this.title = title;
-		}
-		
-		@Override
-		public Long getKey() {
-			return pageKey;
-		}
-		
-		public String getTitle() {
-			return title;
-		}
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPPageViewController.java b/src/main/java/org/olat/portfolio/ui/structel/EPPageViewController.java
deleted file mode 100644
index 2a9571cfdacdb0bd57f2a1c45ac00ba1b79246ad..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPPageViewController.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel;
-
-import java.util.List;
-
-import org.olat.core.commons.services.commentAndRating.CommentAndRatingDefaultSecurityCallback;
-import org.olat.core.commons.services.commentAndRating.CommentAndRatingSecurityCallback;
-import org.olat.core.commons.services.commentAndRating.ui.UserCommentsAndRatingsController;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.portfolio.EPSecurityCallback;
-import org.olat.portfolio.EPUIFactory;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.restriction.CollectRestriction;
-import org.olat.portfolio.model.structel.EPPage;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.model.structel.StructureStatusEnum;
-import org.olat.portfolio.ui.artefacts.view.EPMultiArtefactsController;
-import org.olat.portfolio.ui.structel.edit.EPCollectRestrictionResultController;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * View the content of a page ( structure / artefacts)
- * 
- * <P>
- * Initial Date:  23.08.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPPageViewController extends BasicController {
-
-	private EPPage page;
-	private PortfolioStructure map;
-	
-	private final VelocityContainer vC;
-	private final EPSecurityCallback secCallback;
-	
-	private EPAddElementsController addButtonCtrl;
-	private EPCollectRestrictionResultController resultCtrl;
-	private UserCommentsAndRatingsController commentsAndRatingCtr;
-	
-	@Autowired
-	private EPFrontendManager ePFMgr;
-
-	public EPPageViewController(UserRequest ureq, WindowControl wControl, PortfolioStructure map, EPPage page, boolean withComments,
-			EPSecurityCallback secCallback) {
-		super(ureq, wControl);
-		vC = createVelocityContainer("pageView");
-		this.map = map;
-		this.page = page;
-		this.secCallback = secCallback;
-
-
-		init(ureq);
-		
-		if(withComments && commentsAndRatingCtr != null) {
-			commentsAndRatingCtr.expandComments(ureq);
-		}
-
-		putInitialPanel(vC);
-	}
-	
-	public EPPage getPage() {
-		return page;
-	}
-	
-	private void init(UserRequest ureq) {
-		vC.contextPut("page", page);
-		PortfolioStructureMap parentOfPage = (PortfolioStructureMap)ePFMgr.loadStructureParent(page);
-		boolean parentMapClosed = StructureStatusEnum.CLOSED.equals(parentOfPage.getStatus());
-		
-		vC.remove(vC.getComponent("checkResults"));
-		if(secCallback.isRestrictionsEnabled()) {
-			removeAsListenerAndDispose(resultCtrl);
-			List<CollectRestriction> restrictions = page.getCollectRestrictions();
-			if(!restrictions.isEmpty()) {
-				boolean check = ePFMgr.checkCollectRestriction(page);
-				resultCtrl = new EPCollectRestrictionResultController(ureq, getWindowControl());
-				resultCtrl.setMessage(restrictions, check);
-				vC.put("checkResults", resultCtrl.getInitialComponent());
-				listenTo(resultCtrl);
-			}
-		}
-
-		vC.remove(vC.getComponent("artefacts"));
-		List<AbstractArtefact> artefacts = ePFMgr.getArtefacts(page);
-		if (artefacts.size() != 0) {
-			EPMultiArtefactsController artefactCtrl = 
-				EPUIFactory.getConfigDependentArtefactsControllerForStructure(ureq, getWindowControl(), artefacts, page, secCallback);
-			vC.put("artefacts", artefactCtrl.getInitialComponent());
-			listenTo(artefactCtrl);
-		}
-		
-		vC.remove(vC.getComponent("structElements"));
-		List<PortfolioStructure> structElements = ePFMgr.loadStructureChildren(page);
-		if (structElements.size() != 0) {
-			EPStructureElementsController structElCtrl = new EPStructureElementsController(ureq, getWindowControl(),
-					structElements, secCallback, parentMapClosed);
-			vC.put("structElements", structElCtrl.getInitialComponent());
-			listenTo(structElCtrl);
-		}
-		
-		vC.remove(vC.getComponent("addButton"));
-		if(!parentMapClosed && (secCallback.canAddArtefact() || secCallback.canAddStructure())) {
-			addButtonCtrl = new EPAddElementsController(ureq, getWindowControl(), page);
-			listenTo(addButtonCtrl);
-			if(secCallback.canAddArtefact()) {
-				addButtonCtrl.setShowLink(EPAddElementsController.ADD_ARTEFACT);
-			}
-			if(secCallback.canAddStructure()) {
-				addButtonCtrl.setShowLink(EPAddElementsController.ADD_STRUCTUREELEMENT);
-			}
-			vC.put("addButton", addButtonCtrl.getInitialComponent());
-		}
-		
-		vC.remove(vC.getComponent("commentCtrl"));
-		if(secCallback.canCommentAndRate()) {
-			removeAsListenerAndDispose(commentsAndRatingCtr);	
-
-			boolean anonym = ureq.getUserSession().getRoles().isGuestOnly();
-			CommentAndRatingSecurityCallback ratingSecCallback = new CommentAndRatingDefaultSecurityCallback(getIdentity(), false, anonym);
-			commentsAndRatingCtr = new UserCommentsAndRatingsController(ureq, getWindowControl(), map.getOlatResource(), page.getKey().toString(), ratingSecCallback, null, true, true, true);
-			listenTo(commentsAndRatingCtr);
-			vC.put("commentCtrl", commentsAndRatingCtr.getInitialComponent());
-		}
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		super.event(ureq, source, event);
-		if (event instanceof EPStructureChangeEvent){
-			this.page = (EPPage) ePFMgr.reloadPortfolioStructure(page);
-			init(ureq);
-		}
-	}
-
-	@Override
-	protected void doDispose() {
-		//
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		//
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPShareGroupWrapper.java b/src/main/java/org/olat/portfolio/ui/structel/EPShareGroupWrapper.java
deleted file mode 100644
index 0ea4afb70812b597e6e265b549830b02750471c9..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPShareGroupWrapper.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel;
-
-import java.util.List;
-
-import org.olat.core.gui.components.form.flexible.elements.FormLink;
-import org.olat.group.BusinessGroup;
-
-/**
- * 
- * Initial date: 28.06.2013<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public class EPShareGroupWrapper {
-	private FormLink removeGroup;
-	private BusinessGroup group;
-	private EPSharePolicyWrapper policyWrapper;
-	
-	public EPShareGroupWrapper(EPSharePolicyWrapper policyWrapper, BusinessGroup group, FormLink removeGroup) {
-		this.group = group;
-		this.removeGroup = removeGroup;
-		this.policyWrapper = policyWrapper;
-	}
-	
-	public String getName() {
-		return group.getName();
-	}
-	
-	public String getRemoveLinkName() {
-		return removeGroup.getComponent().getComponentName();
-	}
-	
-	public void remove() {
-		policyWrapper.getGroups().remove(group);
-		@SuppressWarnings("unchecked")
-		List<EPShareGroupWrapper> wrappers = (List<EPShareGroupWrapper>)policyWrapper.getGroupListBox().contextGet("groups");
-		wrappers.remove(this);
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPShareListController.java b/src/main/java/org/olat/portfolio/ui/structel/EPShareListController.java
deleted file mode 100644
index 4dc41594fca963e98a96ee9461add4c0bef8ca6d..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPShareListController.java
+++ /dev/null
@@ -1,735 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.portfolio.ui.structel;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.olat.admin.user.UserSearchController;
-import org.olat.basesecurity.GroupRoles;
-import org.olat.basesecurity.Invitation;
-import org.olat.basesecurity.OrganisationRoles;
-import org.olat.basesecurity.OrganisationService;
-import org.olat.basesecurity.events.MultiIdentityChosenEvent;
-import org.olat.basesecurity.events.SingleIdentityChosenEvent;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItem;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.DateChooser;
-import org.olat.core.gui.components.form.flexible.elements.FormLink;
-import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
-import org.olat.core.gui.components.form.flexible.elements.StaticTextElement;
-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.FormEvent;
-import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
-import org.olat.core.gui.components.link.Link;
-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.generic.closablewrapper.CloseableModalController;
-import org.olat.core.helpers.Settings;
-import org.olat.core.id.Identity;
-import org.olat.core.id.UserConstants;
-import org.olat.core.id.context.BusinessControlFactory;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.Util;
-import org.olat.core.util.WebappHelper;
-import org.olat.core.util.mail.ContactList;
-import org.olat.core.util.mail.MailBundle;
-import org.olat.core.util.mail.MailContext;
-import org.olat.core.util.mail.MailContextImpl;
-import org.olat.core.util.mail.MailHelper;
-import org.olat.core.util.mail.MailManager;
-import org.olat.core.util.mail.MailerResult;
-import org.olat.group.BusinessGroup;
-import org.olat.group.BusinessGroupService;
-import org.olat.group.model.BusinessGroupSelectionEvent;
-import org.olat.group.ui.main.SelectBusinessGroupController;
-import org.olat.login.LoginModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.manager.EPMapPolicy;
-import org.olat.portfolio.manager.EPMapPolicy.Type;
-import org.olat.portfolio.manager.InvitationDAO;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.user.UserManager;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * 
- * Description:<br>
- * Manage the list of share policies
- * 
- * <P>
- * Initial Date:  4 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPShareListController extends FormBasicController {
-	
-	private final List<EPSharePolicyWrapper> policyWrappers = new ArrayList<>();
-	
-	private PortfolioStructureMap map;
-	
-	@Autowired
-	private LoginModule loginModule;
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	@Autowired
-	private InvitationDAO invitationDao;
-	@Autowired
-	private OrganisationService organisationService;
-	@Autowired
-	private BusinessGroupService businessGroupService;
-	@Autowired
-	private UserManager userManager;
-	@Autowired
-	private MailManager mailManager;
-	
-	private final String[] targetKeys = EPMapPolicy.Type.names();
-	private final String[] targetValues = new String[targetKeys.length];
-	private final AtomicInteger cmpSuffixGenerator = new AtomicInteger(1);
-
-	private CloseableModalController cmc;
-	private UserSearchController selectUserCtrl;
-	private SelectBusinessGroupController selectGroupCtrl;
-	
-	private FormLink addPolicyButton;
-	
-	
-	
-	public EPShareListController(UserRequest ureq, WindowControl wControl, PortfolioStructureMap map) {
-		super(ureq, wControl, "shareList");
-		
-		this.map = map;
-		for(int i=targetKeys.length; i-->0; ) {
-			targetValues[i] = translate("map.share.to." + targetKeys[i]);
-		}
-		
-		if(map instanceof EPStructuredMap && ((EPStructuredMap)map).getTargetResource() != null) {
-			policyWrappers.add(new TutorEPSharePolicyWrapper());
-		}
-
-		for(EPMapPolicy policy:ePFMgr.getMapPolicies(map)) {
-			policyWrappers.add(new EPSharePolicyWrapper(policy));
-		}
-		initForm(ureq);
-	}
-
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		addPolicyButton = uifactory.addFormLink("map.share.add.policy", flc, Link.BUTTON);
-		
-		initPolicyUI();
-		
-		FormLayoutContainer buttonLayout = FormLayoutContainer.createButtonLayout("ok_cancel", getTranslator());
-		buttonLayout.setRootForm(mainForm);
-		uifactory.addFormSubmitButton("ok", buttonLayout);
-		uifactory.addFormCancelButton("cancel", buttonLayout, ureq, getWindowControl());
-		flc.add("ok_cancel", buttonLayout);
-	}
-
-	@Override
-	protected void doDispose() {
-		//
-	}
-
-	@Override
-	protected boolean validateFormLogic(UserRequest ureq) {
-		boolean allOk = super.validateFormLogic(ureq);
-		
-		// process all form-input fields and update data-model
-		secureListBox();
-		
-		String genericError = null ;
-		
-		for (EPSharePolicyWrapper policyWrapper : policyWrappers) {
-			Type type = policyWrapper.getType();
-			if(type == null) {
-				continue;//tutor implicit rule
-			}
-			
-			TextElement mailEl = policyWrapper.getMailEl();
-			if (mailEl != null) {
-				String mail = mailEl.getValue();
-				if (StringHelper.containsNonWhitespace(mail)) {
-					if (MailHelper.isValidEmailAddress(mail)) {
-						List<Identity> shareWithIdentities = userManager.findIdentitiesByEmail(Collections.singletonList(mail));
-						if(isAtLeastOneUser(shareWithIdentities)) {
-							mailEl.setErrorKey("error.invitation.mail.used", new String[] { mail });
-							allOk &= false;
-						}
-					} else {
-						mailEl.setErrorKey("map.share.with.mail.error", null);
-						allOk &= false;
-					}
-				} else if (type.equals(Type.invitation)) {
-					genericError = translate("map.share.error.invite");
-					allOk &= false;
-				}
-			} else if (type.equals(Type.group)) {
-				List<BusinessGroup> groups = policyWrapper.getGroups();
-				if (groups.isEmpty()) {
-					genericError = translate("map.share.error.group");
-					allOk &= false;
-				}
-			} else if (type.equals(Type.user)) {
-				List<Identity> idents = policyWrapper.getIdentities();
-				if (idents.isEmpty()) {
-					genericError = translate("map.share.error.user");
-					allOk &= false;
-				}
-			} 
-			if ((policyWrapper.getFromChooser() != null && policyWrapper.getFromChooser().hasError())
-					|| (policyWrapper.getToChooser() != null && policyWrapper.getToChooser().hasError())){
-				genericError = translate("map.share.date.invalid");
-				allOk &= false;
-			}
-			if (policyWrapper.getFrom() != null && policyWrapper.getTo() != null && policyWrapper.getFrom().after(policyWrapper.getTo())) {
-				// show invalid date warning
-				policyWrapper.getFromChooser().setErrorKey("from.date.behind.to", null);
-				policyWrapper.getFromChooser().showError(true);
-
-				genericError = translate("from.date.behind.to");
-				allOk &= false;
-			}
-			StaticTextElement errTextEl = policyWrapper.getErrorEl();
-			if (genericError != null && errTextEl != null) {
-				errTextEl.setValue(genericError);
-			}
-		}
-
-		return allOk;
-	}
-
-	@Override
-	protected void formOK(UserRequest ureq) {
-		// process all form-input fields and update data-model (the policyWrappers)
-		secureListBox();
-		
-		List<EPMapPolicy> mapPolicies = new ArrayList<>();
-		for(EPSharePolicyWrapper wrapper:policyWrappers) {
-			if(wrapper.getType() == null) continue;
-			
-			mapPolicies.add(wrapper.getMapPolicy());
-			if (wrapper.getType().equals(EPMapPolicy.Type.invitation)){
-				// always send an invitation mail for invited-non-olat users
-				sendInvitation(ureq, wrapper);
-			}
-		}
-		ePFMgr.updateMapPolicies(map, mapPolicies);
-		fireEvent(ureq, Event.DONE_EVENT);
-	}
-
-	@Override
-	protected void formCancelled(UserRequest ureq) {
-		fireEvent(ureq, Event.CANCELLED_EVENT);
-	}
-
-	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
-		// process all form-input fields and update data-model
-		secureListBox();
-		
-		// dont allow any manipulation as long as errors exist!! else some wrong
-		// policy might be persisted. check with validateFormLogic()
-		if (source == addPolicyButton) {
-			if (validateFormLogic(ureq)) {
-				addEPSharePolicyWrapper(null);
-				initPolicyUI();
-			}
-		} else if (source instanceof FormLink) {
-			FormLink link = (FormLink) source;
-			Object userObject = link.getUserObject();
-			if(userObject instanceof EPSharePolicyWrapper) {
-				EPSharePolicyWrapper wrapper = (EPSharePolicyWrapper)userObject;
-				if (link.getName().startsWith("map.share.policy.add")) {
-					if (validateFormLogic(ureq)) {
-						addEPSharePolicyWrapper(wrapper);
-						initPolicyUI();
-					}
-				} else if (link.getName().startsWith("map.share.policy.delete")) {
-					removeEPSharePolicyWrapper(wrapper);
-					initPolicyUI();
-				} else if (link.getName().startsWith("map.share.policy.invite")) {
-					if (validateFormLogic(ureq)) {
-						sendInvitation(ureq, wrapper);
-						initPolicyUI();
-					}
-				} else if (link.getName().startsWith("choose.group")) {
-					doSelectGroup(ureq, wrapper);
-				} else if (link.getName().startsWith("choose.identity")) {
-					doSelectIdentity(ureq, wrapper);
-				}
-			} else if(userObject instanceof EPShareGroupWrapper) {
-				EPShareGroupWrapper wrapper = (EPShareGroupWrapper)userObject;
-				wrapper.remove();
-				initPolicyUI();
-			} else if(userObject instanceof EPShareUserWrapper) {
-				EPShareUserWrapper wrapper = (EPShareUserWrapper)userObject;
-				wrapper.remove();
-				initPolicyUI();
-			}
-		} else if (source instanceof SingleSelection && source.getUserObject() instanceof EPSharePolicyWrapper) {
-			SingleSelection selection = (SingleSelection) source;
-			if (selection.isOneSelected()) {
-				String type = selection.getSelectedKey();
-				EPSharePolicyWrapper wrapper = (EPSharePolicyWrapper) selection.getUserObject();
-				changeType(wrapper, type);
-			}
-			initPolicyUI();
-		} 
-	}
-	
-	@Override
-	public void event(UserRequest ureq, Controller source, Event event) {
-		if(source == selectGroupCtrl) {
-			cmc.deactivate();
-			secureListBox();
-			if(event instanceof BusinessGroupSelectionEvent) {
-				BusinessGroupSelectionEvent bge = (BusinessGroupSelectionEvent)event;
-				List<BusinessGroup> groups = bge.getGroups();
-				if(groups.size() > 0) {
-					EPSharePolicyWrapper policyWrapper = (EPSharePolicyWrapper)selectGroupCtrl.getUserObject();
-					policyWrapper.getGroups().addAll(groups);
-					initPolicyUI();
-				}
-			}
-		} else if(source.equals(selectUserCtrl)){
-			cmc.deactivate();
-			secureListBox();
-			EPSharePolicyWrapper policyWrapper = (EPSharePolicyWrapper)selectUserCtrl.getUserObject();
-			if (event instanceof SingleIdentityChosenEvent) {
-				SingleIdentityChosenEvent foundEvent = (SingleIdentityChosenEvent) event;
-				Identity chosenIdentity = foundEvent.getChosenIdentity();
-				if (chosenIdentity != null) {
-					policyWrapper.getIdentities().add(chosenIdentity);
-				}
-			} else if(event instanceof MultiIdentityChosenEvent) {
-				MultiIdentityChosenEvent foundEvent = (MultiIdentityChosenEvent) event;
-				List<Identity> chosenIdentities = foundEvent.getChosenIdentities();
-				if (chosenIdentities != null && !chosenIdentities.isEmpty()) {
-					policyWrapper.getIdentities().addAll(chosenIdentities);
-				}
-			}
-			initPolicyUI();
-		} else if (source == cmc) {
-			cleanUp();
-		}
-		super.event(ureq, source, event);
-	}
-	
-	private void cleanUp() {
-		removeAsListenerAndDispose(selectGroupCtrl);
-		removeAsListenerAndDispose(cmc);
-		selectGroupCtrl = null;
-		cmc = null;
-	}
-
-	protected void doSelectGroup(UserRequest ureq, EPSharePolicyWrapper wrapper) {
-		removeAsListenerAndDispose(selectGroupCtrl);
-		selectGroupCtrl = new SelectBusinessGroupController(ureq, getWindowControl());
-		selectGroupCtrl.setUserObject(wrapper);
-		listenTo(selectGroupCtrl);
-		
-		cmc = new CloseableModalController(getWindowControl(), translate("close"),
-				selectGroupCtrl.getInitialComponent(), true, translate("choose.group"));
-		cmc.activate();
-		listenTo(cmc);
-	}
-	
-	protected void doSelectIdentity(UserRequest ureq, EPSharePolicyWrapper wrapper) {
-		removeAsListenerAndDispose(selectUserCtrl);
-		selectUserCtrl = new UserSearchController(ureq, getWindowControl());
-		selectUserCtrl.setUserObject(wrapper);
-		listenTo(selectUserCtrl);
-		
-		cmc = new CloseableModalController(getWindowControl(), translate("close"),
-				selectUserCtrl.getInitialComponent(), true, translate("choose.identity"));
-		cmc.activate();
-		listenTo(cmc);
-	}
-
-	/**
-	 * sends a link to the map to permitted users by email
-	 * 
-	 * @param ureq
-	 * @param wrapper
-	 */
-	private void sendInvitation(UserRequest ureq, EPSharePolicyWrapper wrapper){
-		EPMapPolicy.Type shareType = wrapper.getType();
-		List<Identity> identitiesToMail = new ArrayList<>();
-		Invitation invitation = null;
-		if (shareType.equals(EPMapPolicy.Type.allusers)) {
-			return;
-		}
-		else if (shareType.equals(EPMapPolicy.Type.invitation)){
-			invitation = wrapper.getInvitation();
-		} else if (shareType.equals(EPMapPolicy.Type.group)){
-			List<BusinessGroup> groups = wrapper.getGroups();
-			List<Identity> members = businessGroupService.getMembers(groups, GroupRoles.coach.name(), GroupRoles.participant.name());
-			identitiesToMail.addAll(members);
-		}	else if (shareType.equals(EPMapPolicy.Type.user)){
-			identitiesToMail = wrapper.getIdentities();
-		}
-		
-		wrapper.setInvitationSend(true);
-
-		ContactList contactList = null;
-		if(identitiesToMail.size() == 1) {
-			contactList = new ContactList(identitiesToMail.get(0).getUser().getProperty(UserConstants.EMAIL, ureq.getLocale()));
-		} else {
-			contactList = new ContactList(translate("map.share.invitation.mail.list"));
-		}
-		contactList.addAllIdentites(identitiesToMail);
-		
-		String busLink = "";
-		if (invitation!=null) {
-			contactList.add(invitation.getMail());
-			busLink = getInvitationLink(invitation, map);
-		} else {
-			BusinessControlFactory bCF = BusinessControlFactory.getInstance();
-			ContextEntry mapCE = bCF.createContextEntry(map.getOlatResource());
-			ArrayList<ContextEntry> cEList = new ArrayList<>();
-			cEList.add(mapCE);
-			busLink = bCF.getAsURIString(cEList, true); 
-		}		
-		
-		boolean success = false;
-		try {
-			String first = getIdentity().getUser().getProperty(UserConstants.FIRSTNAME, null);
-			String last = getIdentity().getUser().getProperty(UserConstants.LASTNAME, null);
-			String sender = first + " " + last;
-			String[] bodyArgs = new String[]{busLink, sender};
-
-			MailContext context = new MailContextImpl(map.getOlatResource(), null, getWindowControl().getBusinessControl().getAsString()); 
-			MailBundle bundle = new MailBundle();
-			bundle.setContext(context);
-			bundle.setFrom(WebappHelper.getMailConfig("mailReplyTo"));
-			bundle.setContactList(contactList);
-			bundle.setContent(translate("map.share.invitation.mail.subject"), translate("map.share.invitation.mail.body", bodyArgs));
-
-			MailerResult result = mailManager.sendMessage(bundle);
-			success = result.isSuccessful();
-		} catch (Exception e) {
-			logError("Error on sending invitation mail to contactlist, invalid address.", e);
-		}
-		if (success) {
-			showInfo("map.share.invitation.mail.success");
-		}	else {
-			showError("map.share.invitation.mail.failure");			
-		}
-	}
-	
-	/**
-	 * loops over all EPSharePolicyWrappers and updates the datamodel according to the
-	 * current form-values
-	 */
-	protected void secureListBox() {
-		if(isLogDebugEnabled())
-			logDebug(" 'securing' ListBox -->  updating policyWrappers with field values...");
-			
-		for(EPSharePolicyWrapper policyWrapper:policyWrappers) {
-			if(policyWrapper.getUserListBox() != null) {
-				List<Identity> identities = policyWrapper.getIdentities();
-				policyWrapper.setIdentities(identities);
-			}
-			if(policyWrapper.getGroups() != null) {
-				List<BusinessGroup> selectedGroups = policyWrapper.getGroups();
-				policyWrapper.setGroups(selectedGroups);	
-			}
-			TextElement firstNameEl = policyWrapper.getFirstNameEl();
-			if(firstNameEl != null) {
-				policyWrapper.getInvitation().setFirstName(firstNameEl.getValue());
-			}
-			TextElement lastNameEl = policyWrapper.getLastNameEl();
-			if(lastNameEl != null) {
-				policyWrapper.getInvitation().setLastName(lastNameEl.getValue());
-			}
-			TextElement mailEl = policyWrapper.getMailEl();
-			if(mailEl != null) {
-				policyWrapper.getInvitation().setMail(mailEl.getValue());
-			}
-			if(policyWrapper.getFromChooser() != null) {
-				policyWrapper.setFrom(policyWrapper.getFromChooser().getDate());
-			}
-			if(policyWrapper.getToChooser() != null) {
-				policyWrapper.setTo(policyWrapper.getToChooser().getDate());
-			}
-		}
-	}
-
-	
-	/**
-	 * creates the custom formLayoutContainer and adds a form-component for every
-	 * EPSharePolicyWrapper, according to its type.
-	 * 
-	 */
-	protected void initPolicyUI() {
-		String template = Util.getPackageVelocityRoot(this.getClass()) + "/sharePolicy.html";
-
-		for(EPSharePolicyWrapper policyWrapper:policyWrappers) {
-			String cmpName = policyWrapper.getComponentName();
-			if(cmpName != null && flc.getFormComponent(cmpName) != null) {
-				flc.remove(cmpName);
-			}
-			
-			cmpName = Integer.toString(cmpSuffixGenerator.getAndIncrement());
-			policyWrapper.setComponentName(cmpName);
-			FormLayoutContainer container = FormLayoutContainer.createCustomFormLayout(cmpName, getTranslator(), template);
-			container.contextPut("wrapper", policyWrapper);
-			container.setRootForm(mainForm);
-
-			if(policyWrapper.getType() != null) {
-				String[] curatedTargetKeys;
-				String[] curatedTargetValues;
-				if(!Type.invitation.equals(policyWrapper.getType()) && !loginModule.isInvitationEnabled()) {
-					curatedTargetKeys = new String[targetKeys.length - 1];
-					curatedTargetValues = new String[targetKeys.length - 1];
-					
-					int pos = 0;
-					for(int i=targetKeys.length; i-->0; ) {
-						if(!targetKeys[i].equals(Type.invitation.name())) {
-							curatedTargetKeys[pos] = targetKeys[i];
-							curatedTargetValues[pos++] = targetValues[i];
-						}
-					}
-				} else {
-					curatedTargetKeys = targetKeys;
-					curatedTargetValues = targetValues;
-				}
-
-				SingleSelection type = uifactory.addDropdownSingleselect("map.share.target." + cmpName, "map.share.target", container, curatedTargetKeys, curatedTargetValues, null);
-				type.addActionListener(FormEvent.ONCHANGE);
-				type.setUserObject(policyWrapper);
-				type.select(policyWrapper.getType().name(), true);
-				switch(policyWrapper.getType()) {
-					case user:
-						createContainerForUser(policyWrapper, cmpName, container);
-						break;
-					case group:
-						createContainerForGroup(policyWrapper, cmpName, container);
-						break;
-					case invitation:
-						Invitation invitation = policyWrapper.getInvitation();
-						if(invitation == null) {
-							invitation = invitationDao.createAndPersistInvitation();
-							policyWrapper.setInvitation(invitation);
-						}
-						
-						createContainerForInvitation(invitation, policyWrapper, cmpName, container);
-						break;
-					case allusers:
-						String text = translate("map.share.with.allOlatUsers");
-						uifactory.addStaticTextElement("map.share.with." + cmpName, text, container);
-						break;	
-				}
-			}
-			
-			if(policyWrapper instanceof TutorEPSharePolicyWrapper) {
-				String text = translate("map.share.with.tutor");
-				uifactory.addStaticTextElement("map.share.text." + cmpName, text, container);
-			} else {
-				DateChooser fromChooser = uifactory.addDateChooser("map.share.from." + cmpName, "map.share.from", null, container);
-				fromChooser.setDate(policyWrapper.getFrom());
-				fromChooser.setValidDateCheck("map.share.date.invalid");
-				policyWrapper.setFromChooser(fromChooser);
-				DateChooser toChooser = uifactory.addDateChooser("map.share.to." + cmpName, "map.share.to", null, container);
-				toChooser.setDate(policyWrapper.getTo());
-				toChooser.setValidDateCheck("map.share.date.invalid");
-				policyWrapper.setToChooser(toChooser);
-	
-				FormLink addLink = uifactory.addFormLink("map.share.policy.add." + cmpName, "map.share.policy.add", null, container, Link.BUTTON);
-				addLink.setIconLeftCSS("o_icon o_icon-fw o_icon_add");
-				addLink.setUserObject(policyWrapper);
-				FormLink removeLink = uifactory.addFormLink("map.share.policy.delete." + cmpName, "map.share.policy.delete", null, container, Link.BUTTON);
-				removeLink.setIconLeftCSS("o_icon o_icon-fw o_icon_delete_item");
-				removeLink.setUserObject(policyWrapper);
-				if (!policyWrapper.getType().equals(EPMapPolicy.Type.allusers)){
-					FormLink inviteLink = uifactory.addFormLink("map.share.policy.invite." + cmpName, "map.share.policy.invite", null, container, Link.BUTTON);
-					inviteLink.setIconLeftCSS("o_icon o_icon-fw o_icon_share");
-					inviteLink.setUserObject(policyWrapper);
-					inviteLink.setEnabled(!policyWrapper.isInvitationSend() && (loginModule.isInvitationEnabled() || !policyWrapper.getType().equals(Type.invitation)));
-				}
-				StaticTextElement genErrorPanel = uifactory.addStaticTextElement("errorpanel." + cmpName, "", container);
-				genErrorPanel.setUserObject(policyWrapper);
-				policyWrapper.setErrorEl(genErrorPanel);
-			}
-			
-			policyWrapper.setComponentName(cmpName);
-			
-			
-			flc.add(container);
-			flc.contextPut("wrapper", policyWrapper);
-		}
-		flc.contextPut("wrappers", policyWrappers);
-	}
-	
-	private void createContainerForUser(EPSharePolicyWrapper policyWrapper, String cmpName, FormLayoutContainer container) {
-		String page = velocity_root + "/shareWithUsers.html";
-		FormLayoutContainer userListBox = FormLayoutContainer.createCustomFormLayout("map.share.with." + cmpName, getTranslator(), page);
-		userListBox.contextPut("wrapper", policyWrapper);
-		userListBox.setRootForm(mainForm);
-		container.add("map.share.with." + cmpName, userListBox);
-		
-		List<Identity> identities = policyWrapper.getIdentities();
-		List<EPShareUserWrapper> groupWrappers = new ArrayList<>();
-		for(Identity identity: identities) {
-			FormLink rmLink = uifactory.addFormLink("rm-" + identity.getKey(), "", null, userListBox, Link.NONTRANSLATED + Link.LINK);
-			rmLink.setIconLeftCSS("o_icon o_icon_remove");
-			EPShareUserWrapper gWrapper = new EPShareUserWrapper(policyWrapper, identity, rmLink);
-			rmLink.setUserObject(gWrapper);	
-			groupWrappers.add(gWrapper);
-		}
-		userListBox.contextPut("identities", groupWrappers);
-		policyWrapper.setUserListBox(userListBox);
-
-		FormLink chooseUsersLink = uifactory.addFormLink("choose.identity", "choose.identity", null, userListBox, Link.BUTTON);
-		chooseUsersLink.setElementCssClass("o_form_groupchooser");
-		chooseUsersLink.setUserObject(policyWrapper);	
-	}
-	
-	private void createContainerForGroup(EPSharePolicyWrapper policyWrapper, String cmpName, FormLayoutContainer container) {
-		String page = velocity_root + "/shareWithGroups.html";
-		FormLayoutContainer groupListBox = FormLayoutContainer.createCustomFormLayout("map.share.with." + cmpName, getTranslator(), page);
-		groupListBox.contextPut("wrapper", policyWrapper);
-		groupListBox.setRootForm(mainForm);
-		container.add("map.share.with." + cmpName, groupListBox);
-		
-		List<BusinessGroup> groups = policyWrapper.getGroups();
-		List<EPShareGroupWrapper> groupWrappers = new ArrayList<>();
-		for(BusinessGroup group: groups) {
-			FormLink rmGroupLink = uifactory.addFormLink("rm-" + group.getKey(), "", null, groupListBox, Link.NONTRANSLATED + Link.LINK);
-			rmGroupLink.setCustomEnabledLinkCSS("o_icon o_icon_remove");
-			EPShareGroupWrapper gWrapper = new EPShareGroupWrapper(policyWrapper, group, rmGroupLink);
-			rmGroupLink.setUserObject(gWrapper);	
-			groupWrappers.add(gWrapper);
-		}
-		groupListBox.contextPut("groups", groupWrappers);
-		policyWrapper.setGroupListBox(groupListBox);
-
-		FormLink chooseGroupsLink = uifactory.addFormLink("choose.group", "choose.group", null, groupListBox,Link.BUTTON);
-		chooseGroupsLink.setElementCssClass("o_form_groupchooser");
-		chooseGroupsLink.setUserObject(policyWrapper);	
-	}
-	
-	private void createContainerForInvitation(Invitation invitation, EPSharePolicyWrapper policyWrapper, String cmpName, FormLayoutContainer container) {
-		FormLayoutContainer invitationContainer =
-				FormLayoutContainer.createDefaultFormLayout("map.share.with." + cmpName, getTranslator());
-		invitationContainer.contextPut("wrapper", policyWrapper);
-		invitationContainer.setRootForm(mainForm);
-		container.add("map.share.with." + cmpName, invitationContainer);
-		
-		TextElement firstNameEl = 
-			uifactory.addTextElement("map.share.with.firstName." + cmpName, "map.share.with.firstName", 64, invitation.getFirstName(), invitationContainer);
-		firstNameEl.setMandatory(true);
-		firstNameEl.setNotEmptyCheck("map.share.empty.warn");
-		TextElement lastNameEl = 
-			uifactory.addTextElement("map.share.with.lastName." + cmpName, "map.share.with.lastName", 64, invitation.getLastName(), invitationContainer);
-		lastNameEl.setMandatory(true);
-		lastNameEl.setNotEmptyCheck("map.share.empty.warn");
-		TextElement mailEl = 
-			uifactory.addTextElement("map.share.with.mail." + cmpName, "map.share.with.mail", 128, invitation.getMail(), invitationContainer);
-		mailEl.setMandatory(true);
-		mailEl.setNotEmptyCheck("map.share.empty.warn");
-		
-		if(StringHelper.containsNonWhitespace(invitation.getMail()) && MailHelper.isValidEmailAddress(invitation.getMail())) {
-			List<Identity> shareWithIdentities = userManager.findIdentitiesByEmail(Collections.singletonList(invitation.getMail()));
-			if(isAtLeastOneUser(shareWithIdentities)) {
-				mailEl.setErrorKey("map.share.with.mail.error.olatUser", new String[]{invitation.getMail()});
-			}
-		}
-		
-		policyWrapper.setFirstNameEl(firstNameEl);
-		policyWrapper.setLastNameEl(lastNameEl);
-		policyWrapper.setMailEl(mailEl);
-		
-		String link = getInvitationLink(invitation, map);
-		StaticTextElement linkEl = uifactory.addStaticTextElement("map.share.with.link." + cmpName, link, invitationContainer);
-		linkEl.setLabel("map.share.with.link", null);
-	}
-	
-	private boolean isAtLeastOneUser(Collection<Identity> identites) {
-		for (Identity identity: identites) {
-			if (organisationService.hasRole(identity, OrganisationRoles.user)) {
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	private String getInvitationLink(Invitation invitation, PortfolioStructure theMap){
-		return Settings.getServerContextPathURI() + "/url/MapInvitation/" + theMap.getKey() + "?invitation=" + invitation.getToken();
-	}
-	
-	protected void changeType(EPSharePolicyWrapper wrapper, String type) {
-		wrapper.setType(EPMapPolicy.Type.valueOf(type));
-	}
-	
-	protected void removeEPSharePolicyWrapper(EPSharePolicyWrapper wrapper) {
-		policyWrappers.remove(wrapper);
-		flc.remove(wrapper.getComponentName());
-	}
-	
-	protected void addEPSharePolicyWrapper(EPSharePolicyWrapper wrapper) {
-		if(wrapper == null) {
-			policyWrappers.add(new EPSharePolicyWrapper());
-		} else {
-			int index = policyWrappers.indexOf(wrapper);
-			if(index+1 >= policyWrappers.size()) {
-				policyWrappers.add(new EPSharePolicyWrapper());
-			} else {
-				policyWrappers.add(index+1, new EPSharePolicyWrapper());
-			}
-		}
-	}
-
-	public class TutorEPSharePolicyWrapper extends EPSharePolicyWrapper {
-		@Override
-		public Type getType() {
-			return null;
-		}
-
-		@Override
-		public Date getTo() {
-			return null;
-		}
-
-		@Override
-		public DateChooser getFromChooser() {
-			return null;
-		}
-
-		@Override
-		public String calc(String cmpName) {
-			if("map.share.target".equals(cmpName) || "map.share.with".equals(cmpName) ) {
-				return "xxx";
-			}
-			return super.calc(cmpName);
-		}
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPSharePolicyWrapper.java b/src/main/java/org/olat/portfolio/ui/structel/EPSharePolicyWrapper.java
deleted file mode 100644
index 764ddff23ecf2ce05567343d3759af06ab7d27f0..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPSharePolicyWrapper.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel;
-
-import java.util.Date;
-import java.util.List;
-
-import org.olat.basesecurity.Invitation;
-import org.olat.core.gui.components.form.flexible.elements.DateChooser;
-import org.olat.core.gui.components.form.flexible.elements.StaticTextElement;
-import org.olat.core.gui.components.form.flexible.elements.TextElement;
-import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
-import org.olat.core.id.Identity;
-import org.olat.core.util.StringHelper;
-import org.olat.group.BusinessGroup;
-import org.olat.portfolio.manager.EPMapPolicy;
-import org.olat.portfolio.model.structel.EPStructureElementToGroupRelation;
-
-/**
- * 
- * Initial date: 28.06.2013<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public class EPSharePolicyWrapper {
-	private EPMapPolicy mapPolicy;
-	private String componentName;
-	private FormLayoutContainer userListBox;
-	private FormLayoutContainer groupListBox;
-	private DateChooser fromChooser;
-	private DateChooser toChooser;
-	private TextElement firstNameEl;
-	private TextElement lastNameEl;
-	private TextElement mailEl;
-	private StaticTextElement errorEl;
-	private boolean invitationSend = false;;
-	
-	public EPSharePolicyWrapper() {
-		this.mapPolicy = new EPMapPolicy();
-	}
-	
-	public EPSharePolicyWrapper(EPMapPolicy mapPolicy) {
-		this.mapPolicy = mapPolicy;
-	}
-	
-	public EPMapPolicy getMapPolicy() {
-		return mapPolicy;
-	}
-
-	public String getComponentName() {
-		return componentName;
-	}
-	
-	public void setComponentName(String componentName) {
-		this.componentName = componentName;
-	}
-	
-	public boolean isInvitationSend() {
-		return invitationSend;
-	}
-
-	public void setInvitationSend(boolean invitationSend) {
-		this.invitationSend = invitationSend;
-	}
-
-	public Invitation getInvitation() {
-		return mapPolicy.getInvitation();
-	}
-	
-	public void setInvitation(Invitation invitation) {
-		mapPolicy.setInvitation(invitation);
-	}
-	
-	public List<EPStructureElementToGroupRelation> getRelations() {
-		return mapPolicy.getRelations();
-	}
-	
-	public void addRelation(EPStructureElementToGroupRelation relation) {
-		mapPolicy.addRelation(relation);
-	}
-
-	public Date getTo() {
-		return mapPolicy.getTo();
-	}
-
-	public void setTo(Date to) {
-		mapPolicy.setTo(to);
-	}
-
-	public Date getFrom() {
-		return mapPolicy.getFrom();
-	}
-
-	public void setFrom(Date from) {
-		mapPolicy.setFrom(from);
-	}
-
-	public EPMapPolicy.Type getType() {
-		return mapPolicy.getType();
-	}
-
-	public void setType(EPMapPolicy.Type type) {
-		if(!type.equals(mapPolicy.getType())) {
-			mapPolicy.setType(type);
-			mapPolicy.getRelations().clear();
-		}
-	}
-
-	public List<Identity> getIdentities() {
-		return mapPolicy.getIdentities();
-	}
-
-	public void setIdentities(List<Identity> identities) {
-		mapPolicy.setIdentities(identities);
-	}
-	
-	public String getGroupsToString() {
-		if(mapPolicy.getGroups() == null) return "";
-		
-		StringBuilder sb = new StringBuilder();
-		for(BusinessGroup group:mapPolicy.getGroups()) {
-			if(sb.length() > 0) sb.append(", ");
-			sb.append(group.getName() == null ? "???" : group.getName());
-		}
-		return sb.toString();
-	}
-
-	public List<BusinessGroup> getGroups() {
-		return mapPolicy.getGroups();
-	}
-
-	public void setGroups(List<BusinessGroup> groups) {
-		mapPolicy.setGroups(groups);
-	}
-	
-	public void addGroup(BusinessGroup group) {
-		mapPolicy.addGroup(group);
-	}
-	
-	public String calc(String cmpName) {
-		return cmpName + "." + componentName;
-	}
-
-	public FormLayoutContainer getUserListBox() {
-		return userListBox;
-	}
-
-	public void setUserListBox(FormLayoutContainer userListBox) {
-		this.groupListBox = null;
-		this.userListBox = userListBox;
-	}
-
-	public FormLayoutContainer getGroupListBox() {
-		return groupListBox;
-	}
-
-	public void setGroupListBox(FormLayoutContainer groupListBox) {
-		this.userListBox = null;
-		this.groupListBox = groupListBox;
-	}
-
-	public DateChooser getFromChooser() {
-		return fromChooser;
-	}
-
-	public void setFromChooser(DateChooser fromChooser) {
-		this.fromChooser = fromChooser;
-	}
-
-	public DateChooser getToChooser() {
-		return toChooser;
-	}
-
-	public void setToChooser(DateChooser toChooser) {
-		this.toChooser = toChooser;
-	}
-
-	public TextElement getFirstNameEl() {
-		return firstNameEl;
-	}
-
-	public void setFirstNameEl(TextElement firstNameEl) {
-		this.firstNameEl = firstNameEl;
-	}
-
-	public TextElement getLastNameEl() {
-		return lastNameEl;
-	}
-
-	public void setLastNameEl(TextElement lastNameEl) {
-		this.lastNameEl = lastNameEl;
-	}
-
-	public TextElement getMailEl() {
-		return mailEl;
-	}
-
-	public void setMailEl(TextElement mailEl) {
-		this.mailEl = mailEl;
-	}
-	
-	public boolean isError() {
-		return errorEl != null && StringHelper.containsNonWhitespace(errorEl.getValue());
-	}
-
-	public StaticTextElement getErrorEl() {
-		return errorEl;
-	}
-
-	public void setErrorEl(StaticTextElement errorEl) {
-		this.errorEl = errorEl;
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPShareUserWrapper.java b/src/main/java/org/olat/portfolio/ui/structel/EPShareUserWrapper.java
deleted file mode 100644
index 7ff7488bf3fa5271f66c4e526ce2e0beb81af6a7..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPShareUserWrapper.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel;
-
-import java.util.List;
-
-import org.olat.core.gui.components.form.flexible.elements.FormLink;
-import org.olat.core.id.Identity;
-import org.olat.user.UserManager;
-
-/**
- * 
- * Initial date: 28.06.2013<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public class EPShareUserWrapper {
-	private FormLink removeIdentity;
-	private Identity identity;
-	private EPSharePolicyWrapper policyWrapper;
-	
-	public EPShareUserWrapper(EPSharePolicyWrapper policyWrapper, Identity identity, FormLink removeIdentity) {
-		this.identity = identity;
-		this.removeIdentity = removeIdentity;
-		this.policyWrapper = policyWrapper;
-	}
-	
-	public String getName() {
-		return UserManager.getInstance().getUserDisplayName(identity);
-	}
-	
-	public String getRemoveLinkName() {
-		return removeIdentity.getComponent().getComponentName();
-	}
-	
-	public void remove() {
-		policyWrapper.getIdentities().remove(identity);
-		@SuppressWarnings("unchecked")
-		List<EPShareUserWrapper> wrappers = (List<EPShareUserWrapper>)policyWrapper.getUserListBox().contextGet("identities");
-		wrappers.remove(this);
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPStructureChangeEvent.java b/src/main/java/org/olat/portfolio/ui/structel/EPStructureChangeEvent.java
deleted file mode 100644
index 50aaa97773f775bf7544ecbd8821aa27041ed7bb..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPStructureChangeEvent.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel;
-
-import org.olat.core.gui.control.Event;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-
-/**
- * Initial Date:  25.08.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPStructureChangeEvent extends Event {
-	
-	private static final long serialVersionUID = -7091171722782650074L;
-
-	private PortfolioStructure portfolioStructure;
-
-	public static final String ADDED = "added";
-	public static final String REMOVED = "removed";
-	public static final String CHANGED = "changed";
-	public static final String SELECTED = "selected";
-
-	public EPStructureChangeEvent(String command, PortfolioStructure portStruct) {
-		super(command);
-		this.portfolioStructure = portStruct;
-	}
-	
-	/**
-	 * @return Returns the portfolioStructure.
-	 */
-	public PortfolioStructure getPortfolioStructure() {
-		return portfolioStructure;
-	}
-	
-	@Override
-	public boolean equals(Object obj) {
-		// use same equals
-		return super.equals(obj);
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPStructureElementsController.java b/src/main/java/org/olat/portfolio/ui/structel/EPStructureElementsController.java
deleted file mode 100644
index 71dae21265f721a710899d48ca4d7ccfc9825299..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPStructureElementsController.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.portfolio.EPSecurityCallback;
-import org.olat.portfolio.EPUIFactory;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.restriction.CollectRestriction;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.ui.artefacts.view.EPMultiArtefactsController;
-import org.olat.portfolio.ui.structel.edit.EPCollectRestrictionResultController;
-
-/**
- * Description:<br>
- * displays child structure elements on page or on a map
- * 
- * <P>
- * Initial Date:  24.08.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPStructureElementsController extends BasicController {
-
-	private List<PortfolioStructure> structElements;
-	List<Controller> tableCtrls;
-	List<Controller> addBtnCtrls;
-	private final EPSecurityCallback secCallback;
-	private final EPFrontendManager ePFMgr;
-	private boolean parentMapClosed;
-	private int maxStructAmount;
-	
-	private final VelocityContainer flc;
-
-	public EPStructureElementsController(UserRequest ureq, WindowControl wControl, List<PortfolioStructure> structElements,
-			EPSecurityCallback secCallback, boolean parentMapClosed) {
-		super(ureq, wControl);
-
-		this.structElements = structElements;
-		this.secCallback = secCallback;
-		this.parentMapClosed = parentMapClosed;
-		this.maxStructAmount = 1;
-		
-		ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-		
-		flc = createVelocityContainer("structElements");
-		initForm(ureq);
-		putInitialPanel(flc);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer, org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	protected void initForm(UserRequest ureq) {
-		flc.contextPut("structElements", structElements);
-		tableCtrls = new ArrayList<>();
-		addBtnCtrls = new ArrayList<>();
-		
-		int i = 1;
-		removeComponents();
-		for (PortfolioStructure portStruct : structElements) {
-
-			if(secCallback.isRestrictionsEnabled()) {
-				List<CollectRestriction> restrictions = portStruct.getCollectRestrictions();
-				if(!restrictions.isEmpty()) {
-					boolean check = ePFMgr.checkCollectRestriction(portStruct);
-					EPCollectRestrictionResultController resultCtrl = new EPCollectRestrictionResultController(ureq, getWindowControl());
-					resultCtrl.setMessage(portStruct.getCollectRestrictions(), check);
-					flc.put("checkResults" + i, resultCtrl.getInitialComponent());
-					listenTo(resultCtrl);
-				}
-			}
-			
-			// get artefacts for this structure 
-			List<AbstractArtefact> artefacts = ePFMgr.getArtefacts(portStruct);
-			if (artefacts.size() != 0) {
-				EPMultiArtefactsController artefactCtrl = 
-					EPUIFactory.getConfigDependentArtefactsControllerForStructure(ureq, getWindowControl(), artefacts, portStruct, secCallback);
-				flc.put("artefacts" + i, artefactCtrl.getInitialComponent());
-				listenTo(artefactCtrl);
-				tableCtrls.add(artefactCtrl);				
-			}
-			
-			if(!parentMapClosed && secCallback.canAddArtefact()) {
-				// get an addElement-button for each structure
-				EPAddElementsController addButton = new EPAddElementsController(ureq, getWindowControl(), portStruct);
-				listenTo(addButton);
-				addButton.setShowLink(EPAddElementsController.ADD_ARTEFACT);
-				flc.put("addButton" + i, addButton.getInitialComponent());
-				addBtnCtrls.add(addButton);
-			}			
-			i++;
-		}
-		if (i!=maxStructAmount) maxStructAmount = i;
-	}
-
-	// remove components which were put before to be able to update flc by initForm
-	private void removeComponents(){
-		for (int j = 1; j < maxStructAmount; j++) {
-			flc.remove(flc.getComponent("artefacts" + j));
-			flc.remove(flc.getComponent("addButton" + j));
-		}
-	}
-	
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		super.event(ureq, source, event);
-		if (event instanceof EPStructureChangeEvent){
-			//update the elements
-			EPStructureChangeEvent changeEvent = (EPStructureChangeEvent)event;
-			PortfolioStructure changedEl = changeEvent.getPortfolioStructure();
-			if(changedEl != null) {
-				int index = 0;
-				for(PortfolioStructure strucEl:structElements) {
-					if(changedEl.getKey().equals(strucEl.getKey())) {
-						structElements.set(index, changedEl);
-						break;
-					}
-					index++;
-				}
-			}
-			
-			// something changed
-			initForm(ureq);
-
-			//pass it on, parent controllers (EPPageViewController)  might need to update 
-			fireEvent(ureq, changeEvent);
-		}
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		//
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// dispose all in table-ctrls, button-ctrls
-		List<Controller> allCtrls = new ArrayList<>();
-		allCtrls.addAll(addBtnCtrls);
-		allCtrls.addAll(tableCtrls);
-		for (Controller ctrl : allCtrls) {
-			removeAsListenerAndDispose(ctrl);
-		}
-		addBtnCtrls = null;
-		tableCtrls = null;
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPStructureEvent.java b/src/main/java/org/olat/portfolio/ui/structel/EPStructureEvent.java
deleted file mode 100644
index 3ff55270e601d68156ff604f461b222fc28b029c..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/EPStructureEvent.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel;
-
-import org.olat.core.gui.control.Event;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-
-/**
- * 
- * Description:<br>
- * 
- * 
- * <P>
- * Initial Date:  11 oct. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPStructureEvent extends Event {
-
-	private static final long serialVersionUID = 1732568799650825946L;
-	public static final String SELECT = "select";
-	public static final String SELECT_WITH_COMMENTS = "selectWithComments";
-	public static final String CLOSE = "close";
-	public static final String CHANGE = "change";
-	public static final String SUBMIT = "submit";
-	
-	private final PortfolioStructure structure;
-	
-	public EPStructureEvent(String command, PortfolioStructure structure) {
-		super(command);
-		this.structure = structure;
-	}
-
-	public PortfolioStructure getStructure() {
-		return structure;
-	}
-	
-	@Override
-	public boolean equals(Object obj) {
-		// use same equals
-		return super.equals(obj);
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_content/addLink.html b/src/main/java/org/olat/portfolio/ui/structel/_content/addLink.html
deleted file mode 100644
index 2bb73d7fa9ee45c1ed2989b8b695bfd617bf9a87..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_content/addLink.html
+++ /dev/null
@@ -1,2 +0,0 @@
-#if($r.available("linkArtefact")) $r.render("linkArtefact") #end
-#if($r.available("popupLink")) $r.render("popupLink") #end
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_content/commentLink.html b/src/main/java/org/olat/portfolio/ui/structel/_content/commentLink.html
deleted file mode 100644
index 0e57174d0099e2ce6793c3d62d054c6f2f3d4d50..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_content/commentLink.html
+++ /dev/null
@@ -1 +0,0 @@
-$r.render("commentLink")
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_content/map_deleted.html b/src/main/java/org/olat/portfolio/ui/structel/_content/map_deleted.html
deleted file mode 100644
index cd8e20c4e6b17a9bdf64926b507d942cd978797d..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_content/map_deleted.html
+++ /dev/null
@@ -1 +0,0 @@
-<div class="o_warning">$r.translate("synced.map.deleted")</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_content/mapview.html b/src/main/java/org/olat/portfolio/ui/structel/_content/mapview.html
deleted file mode 100644
index 0d85c0afb36a21f21639b838d69e6287940f4ef7..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_content/mapview.html
+++ /dev/null
@@ -1,56 +0,0 @@
-#if($r.available("backLink") || $r.visible("map.editButton"))
-<div class="o_toolbar" role="toolbar">
-	<div class="container-fluid">
-	#if($r.available("backLink"))
-		<ul class="o_tools o_tools_left list-unstyled">
-			<li><div class="btn-group">$r.render("backLink")</div></li>
-		</ul>
-	#end	
-	#if($r.available("map.editButton"))
-		<ul class="o_tools o_tools_right list-unstyled">
-			<li>$r.render("map.editButton")</li>
-		</ul>
-	#end
-	</div>
-</div>
-#end
-
-<div class="o_eportfolio_map o_map-$!style">
-	<div class="o_ep_relative"> ## needed for positioning
-		<div class="o_map_header">
-		<div class="o_struct_edit_btn pull-right">
-			#if(!$r.available("editor") && $r.available("addButton"))
-				<div class="o_eportfolio_add_link">$r.render("addButton")</div>
-			#end
-			#if($r.available("map.submit.assess"))
-				<div class="o_struct_submit_assess_btn">$r.render("map.submit.assess")</div>
-			#end
-			#if($closed) 
-				<div><i class="o_icon o_artefact_closed" title=" $r.translate("map.is.closed.hint") "> </i></div>
-			#end
-		</div>
-		<h1>$r.escapeHtml($map.title)</h1>
-	
-		#if(!$r.available("editor"))
-			#if($map.description)
-			<div class="o_eportfolio_mapdescr">$map.description</div>
-			#end
-			#if($r.available("ownerportrait"))
-				<div class="o_eportfolio_mapowner">$r.translate("map.owners","") $r.render("ownerportrait")</div>
-			#end
-
-			## show av. artefacts here...
-			#if ($r.available("artefactTable")) $r.render("artefactTable") #end
-		
-		</div> ## end o_map_header
-		
-			## multiple page(s) contains instances of page-ctrl
-			#if ($r.available("pagesCtrl")) $r.render("pagesCtrl") #end	
-			
-			
-		#else
-		</div> ## end o_map_header
-			$r.render("editor")
-		#end
-	</div>
-</div>
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_content/multiMaps.html b/src/main/java/org/olat/portfolio/ui/structel/_content/multiMaps.html
deleted file mode 100644
index aef44dd6964177e492992b40a1365ed8e172f0d3..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_content/multiMaps.html
+++ /dev/null
@@ -1,60 +0,0 @@
-#if ($r.available("restrictLink")) <p>$r.render("restrictLink") </p>#end
-#if(!$noMaps)
-
-#if($!showPaging)
-	<div class="o_map_page">
-		#foreach($pageLink in $pageLinks)
-			$r.render($pageLink.componentName)
-		#end
-		
-		#if($r.available("forwardLink"))$r.render("forwardLink")#end
-	</div>
-#end
-
-<div class="o_eportfolio_maps container-fluid">
-	#foreach($map in $userMaps)
-	#set($viewLink = "viewLink$foreach.count")
-	#set($delLink = "deleteLink$foreach.count")
-	#set($copyLink = "copyLink$foreach.count")
-	#set($shareLink = "shareLink$foreach.count")
-	#set($courseLink = "courseLink$foreach.count")
-	#set($courseName = "courseName$foreach.count")
-	#set($index = ($foreach.count - 1))
-	#set($newRow = ($foreach.count % 3))
-	#if($map.getClass().getSimpleName() == "EPStructuredMapTemplate") #set($addTempStamp = "template") #end
-	<div class="col-sm-4 $!addTempStamp">	 
-		<div class="panel o_map-$!mapStyles.get($index)">
-			<div class="panel-heading"><h4>$r.escapeHtml($map.title)</h4></div>
-			<div class="panel-body">$r.xssScan($map.shortenedDescription)</div>
-			<table class="table table-condensed"><tbody>
-			#if ($owners.get($index)) <tr><td>$r.translate("map.owners", $r.escapeHtml($owners.get($index)))</td></tr> #end
-			<tr><td>$amounts.get($index)</td></tr>
-			#if ($deadLines.get($index)) <tr><td>$r.translate("map.deadline", "$r.formatDate($deadLines.get($index))")</td></tr> #end
-			#if ($restriStats.get($index)) <tr><td>$r.translate("map.restriction.overview", $restriStats.get($index))</td></tr> #end
-			#if($r.available($viewLink))  <tr><td>$r.render($viewLink)</td></tr>#end
-			#if($r.get($courseLink))
-				<tr><td>$r.translate("course.link.intro.small"): <a href="$r.get($courseLink)">$r.get($!courseName)</a></td></tr>
-			#end
-			#if($r.available($shareLink)) <tr><td>$r.render($shareLink)</td></tr> #end
-			#if($r.available($delLink))  <tr><td>$r.render($delLink)</td></tr> #end
-			#if($r.available($copyLink)) <tr><td>$r.render($copyLink)</td></tr> #end
-			</tbody></table>
-		</div>
-	</div>
-	#end
-</div>
-
-#if($!showPaging)
-	<div class="o_map_page">
-		#foreach($pageLink in $pageLinks)
-			$r.render($pageLink.componentName)
-		#end
-		
-		#if($r.available("forwardLink"))$r.render("forwardLink")#end
-	</div>
-#end
-
-#else
-	<br/>
-	$r.translate("no.maps.found")
-#end
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_content/multiPages.html b/src/main/java/org/olat/portfolio/ui/structel/_content/multiPages.html
deleted file mode 100644
index b5cd421a8d64851c3531101d3ba6fcc5a20f6afc..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_content/multiPages.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<ul class="nav nav-tabs">
-	<li class="#if($toc_enabled) active #end">$r.render("toc")</li>
-	#if($pageLinkList)
-		#foreach($pageLink in $pageLinkList)
-			#set($viewLink = "pageLink$foreach.count")
-			<li class="#if ($foreach.count == $actualPage) active #end">$r.render($viewLink)</li>
-		#end
-	#end
-	<li class="#if($changelog_enabled) active #end">$r.render("changelog")</li>
-</ul>
-<div class="o_ep_actualpage clearfix">$r.render("pageCtrl")</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_content/pageView.html b/src/main/java/org/olat/portfolio/ui/structel/_content/pageView.html
deleted file mode 100644
index a0368cf4a2096b68bcadfa99991d3e714c081df1..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_content/pageView.html
+++ /dev/null
@@ -1,32 +0,0 @@
-## see similarity with mapview.html
-<div class="o_eportfolio_page"> 
-	<h4>$r.escapeHtml($page.title)</h4>
-	#if($r.available("addButton"))
-		<div class="pull-right">$r.render("addButton")</div>
-	#end
-	$page.description
-	<div class="clearfix">
-		#if($r.available("checkResults"))
-			$r.render("checkResults")
-		#end
-	
-		## artefacts in a table/preview
-		#if ($r.available("artefacts")) $r.render("artefacts") #end
-	
-		## structures
-		#if ($r.available("structElements")) $r.render("structElements") #end
-		
-		## special editors
-		
-		#if ($specialCtrls) 
-			#foreach($specialCtrl in $specialCtrls)
-				$r.render($specialCtrl.initialComponent.componentName)
-			#end
-		#end
-	</div>
-	#if($r.available("commentCtrl"))
-		<div class="clearfix">
-			$r.render("commentCtrl")
-		</div>
-	#end
-</div>
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_content/shareList.html b/src/main/java/org/olat/portfolio/ui/structel/_content/shareList.html
deleted file mode 100644
index 08cb6a10a7d5d008904b4a6fd9cb0483b714d854..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_content/shareList.html
+++ /dev/null
@@ -1,15 +0,0 @@
-$r.contextHelpWithWrapper("Personal Menu#_port_release")
-
-<div class="o_info">$r.translate("map.share.description")</div>
-<div class="o_block">
-	<div class="o_buttons_box_right">$r.render("map.share.add.policy")</div>
-</div>
-
-<div class="o_eportfolio_share_policies">
-#foreach($wrapper in $wrappers)
-	<div class="clearfix">
-		$r.render($wrapper.componentName)
-	</div>
-#end
-</div>
-<div class="clearfix">$r.render("ok_cancel")</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_content/sharePolicy.html b/src/main/java/org/olat/portfolio/ui/structel/_content/sharePolicy.html
deleted file mode 100644
index 78f26ab506908dd4eb757e65d621a7342c4a7caa..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_content/sharePolicy.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<div class="o_eportfolio_share_policy_wrapper policytype_$wrapper.getType() o_form o_block_large_bottom">
-	<div class="o_eportfolio_share_header clearfix">
-		<div class="o_eportfolio_share_with pull-left">
-		#if($r.available($wrapper.calc("map.share.target")))
-			$r.render($wrapper.calc("map.share.target"))
-		#end
-		</div>	
-		<div class="pull-right">
-			#if($r.available($wrapper.calc("map.share.policy.invite"))) $r.render($wrapper.calc("map.share.policy.invite")) #end
-			#if($r.available($wrapper.calc("map.share.policy.add"))) $r.render($wrapper.calc("map.share.policy.add")) #end
-			#if($r.available($wrapper.calc("map.share.policy.delete"))) $r.render($wrapper.calc("map.share.policy.delete")) #end
-		</div>
-	</div>
-	<div class="o_eportfolio_share_policy">
-		#if($r.available($wrapper.calc("map.share.text")))
-			<div class="o_info">$r.render($wrapper.calc("map.share.text"))</div>
-		#end
-		
-		#if($r.available($wrapper.calc("map.share.with")))
-			<div class="o_eportfolio_share_with">
-				$r.render($wrapper.calc("map.share.with"))
-			</div>
-		#end
-		
-		<div class="o_block o_date form-inline">
-		#if($r.available($wrapper.calc("map.share.from")))
-			<div class="form-group"><span class="form-control-static">$r.translate("map.share.from")</span></div>
-			<div class="form-group">$r.render($wrapper.calc("map.share.from"))</div>
-		#end
-		#if($r.available($wrapper.calc("map.share.to")))
-			<div class="form-group"><span class="form-control-static">$r.translate("map.share.to")</span></div>
-			<div class="form-group">$r.render($wrapper.calc("map.share.to"))</div>
-		#end
-		</div>
-		
-		#if($wrapper.error && $r.available($wrapper.calc("errorpanel")))
-			<div class="o_error">$r.render($wrapper.calc("errorpanel"))</div>
-		#end
-	</div>
-</div>
-
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_content/shareWithGroups.html b/src/main/java/org/olat/portfolio/ui/structel/_content/shareWithGroups.html
deleted file mode 100644
index 2854b2e0ac72113f14b29bd840de1454faf59c4e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_content/shareWithGroups.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<div class="o_eportfolio_share_with_user clearfix">
-	<p>
-	#foreach($group in $groups)
-		<span class="o_deletableentry_wrapper"><span class="o_deletableentry">$group.name</span> $r.render($group.removeLinkName)</span>
-	#end
-	</p>
-	$r.render("choose.group")
-</div>
-
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_content/shareWithUsers.html b/src/main/java/org/olat/portfolio/ui/structel/_content/shareWithUsers.html
deleted file mode 100644
index 4b913dd5c1b9b344a048ee78697f64a1420e2b67..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_content/shareWithUsers.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<div class="o_eportfolio_share_with_user clearfix">
-	<p>
-	#foreach($identity in $identities)
-		<span class="o_deletableentry_wrapper"><span class="o_deletableentry">$r.escapeHtml($identity.name)</span> $r.render($identity.removeLinkName)</span>
-	#end
-	</p>
-	$r.render("choose.identity")
-</div>
-
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_content/structElements.html b/src/main/java/org/olat/portfolio/ui/structel/_content/structElements.html
deleted file mode 100644
index ea79ee2fc9879c4a9fe684db78e2f3d3e1e6faaa..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_content/structElements.html
+++ /dev/null
@@ -1,19 +0,0 @@
-## paint a list of prefilled struct-elements each with an add-button / artefacts inside
-
-#foreach($structEl in $structElements)
-	#set($addBtn = "addButton$foreach.count")
-	#set($artefacts = "artefacts$foreach.count")
-	#set($checkResults = "checkResults$foreach.count")
-	<div class="o_eportfolio_structure">
-	<h5>$r.escapeHtml($structEl.title)</h5>
-	#if($r.available($addBtn))
-		$r.render($addBtn)
-	#end
-	<p>$structEl.description</p>
-	<div class="clearfix"></div>
-		#if($r.available($checkResults))
-			$r.render($checkResults)
-		#end
-		#if ($r.available($artefacts)) $r.render($artefacts) #end
-	</div>
-#end
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_de.properties
deleted file mode 100644
index 985d2d425710bae6e71d8caa3c84c5b0ca11b3b8..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1,140 +0,0 @@
-map.title=Titel der Sammelmappe
-map.title.not.empty=Geben Sie einen Titel f\u00fcr die Sammelmappe ein.
-map.title.too.short=Der Titel der Mappe muss ausgef\u00fcllt sein und mindestens 3 Zeichen enthalten.
-map.description=Beschreibung der Sammelmappe
-map.description.too.long=Die Beschreibung der Sammelmappe ist zu lange. Es sind maximal {0} Zeichen m\u00f6glich.
-save.and.open.map=Speichern und Sammelmappe \u00f6ffnen
-view.map=\u00d6ffnen
-choose.group=Gruppe ausw\u00e4hlen
-choose.identity=Benutzer ausw\u00e4hlen
-remove=Entfernen
-delete.map=L\u00f6schen
-delete.map.title=Sammelmappe l\u00f6schen
-delete.map.intro=Wollen Sie die Sammelmappe "{0}" wirklich l\u00f6schen? Die in der Sammelmappe verlinkten Artefakte werden dabei nicht gel\u00f6scht.
-delete.map.success=Die Sammelmappe "{0}" wurde erfolgreich gel\u00f6scht.
-delete.used.map.error=Eine Portfolioaufgabe kann nicht gel\u00f6scht werden, solange der dazugeh\u00f6rige Kurs besteht.
-copy.map=Kopieren
-copy.map.title=Sammelmappe kopieren
-copy.map.intro=Es wird eine Kopie der Sammelmappe "{0}" angelegt. 
-copy.map.intro2=$\:copy.map.intro M\u00f6chten Sie die eingebundenen Artefakte \u00fcbernehmen oder nur die Struktur der Mappe kopieren?
-commentLink=({0})
-map.copy.of=Kopie von {0}
-course.link.intro=Portfolioaufgabe aus Kurs
-course.link.intro.small=Zum Kurs
-copy.with.artefacts=Mit Verkn\u00fcpfung der Artefakte kopieren
-copy.without.artefacts=Sammelmappe kopieren
-copy.cancel=Abbrechen
-copy.map.success=Die Sammelmappe wurde erfolgreich nach "{0}" kopiert.
-amount.of.artefacts=Artefakte: {0}
-popupLink=&nbsp;
-popupLink.tooltip=Klicken Sie hier, um an dieser Stelle ein Element hinzuzuf\u00fcgen.
-linkArtefact.tooltip=W\u00e4hlen Sie ein Artefakt, welches Sie hier verlinken m\u00f6chten.
-add.page=Seite hinzuf\u00fcgen
-add.struct=Strukturelement hinzuf\u00fcgen
-add.map=Sammelmappe verkn\u00fcpfen
-toc=Inhaltsverzeichnis
-changelog=\u00c4nderungsprotokoll
-addArtefact=Artefakt verlinken
-addPopup.title=Element hinzuf\u00fcgen
-addPopup.text=W\u00e4hlen Sie ein Element, welches Sie hinzuf\u00fcgen wollen.
-restrictions.not.conform=Sie haben die Sammeleinschr\u00e4nkungen nicht eingehalten, achten Sie auf die Anforderungen.
-new.page.title=Eine neue Seite
-new.page.desc=Beschreibung einer neuen Seite
-new.structure.title=Ein neues Strukturelement
-new.structure.desc=Beschreibung, was unter diesem Strukturelement gesammelt wird.
-page.links=Seite
-map.contains.pages=Enth\u00e4lt {0} Seiten
-map.contains=Enth\u00e4lt {0} Seiten und {1} Artefakte
-no.maps.found=Es gibt noch keine Sammelmappen, die angezeigt werden k\u00f6nnen.
-choose.artefact.title=Artefakt ausw\u00e4hlen
-artefact.choosen=Das Artefakt "{0}" wurde ausgew\u00e4hlt und der Struktur "{1}" hinzugef\u00fcgt.
-artefact.already.in.structure=Dieses Artefakt ist bereits in der gew\u00e4hlten Struktur vorhanden. 
-map.already.edited=Diese Mappe wird bereits von einem anderen Benutzer editiert.
-change.reflexion=Reflexion zur Verkn\u00fcpfung mit diesem Artefakt
-map.submit.assess=Aufgabe abgeben
-map.submit.assess.title=Portfolioaufgabe beenden
-map.submit.assess.description=Wollen Sie Ihre Portfolioaufgabe wirklich abgeben? Danach k\u00f6nnen Sie sie nicht mehr bearbeiten.
-map.submit.assess.restriction.error.title=Ihre Portfolioaufgabe erf\u00fcllt noch nicht alle Sammeleinschr\u00e4nkungen.
-map.submit.assess.restriction.error.description=Ihre Portfolioaufgabe erf\u00fcllt nicht alle Sammeleinschr\u00e4nkungen. Wollen Sie Ihre Portfolioaufgabe wirklich abgeben? Danach k\u00f6nnen Sie sie nicht mehr bearbeiten.
-map.submit.assess.restriction.error.hint=Sie haben bisher $:map.restriction.stats
-map.editButton=Editor
-map.editButton.on=$\:map.editButton \u00f6ffnen
-map.editButton.off=$\:map.editButton schliessen
-map.shareButton=Freigeben
-map.share=Mappe freigeben
-map.share.shared=Mappe bereits freigegeben
-map.share.description=Legen Sie hier die Benutzer und den Zeitraum fest, f\u00fcr die diese Mappe zur Ansicht, Kommentierung und Bewertung freigegeben wird.
-map.share.add.policy=Freigaberegel erstellen
-map.share.from=Von
-map.share.date.invalid=Bitte ein g\u00fcltiges Datum eintragen.
-map.share.to=Bis
-from.date.behind.to=Das "von" Datum kann nicht nach dem "bis" Datum liegen.
-map.share.error.group=Es muss mindestens eine Gruppe ausgew\u00e4hlt werden.
-map.share.error.user=Es muss mindestens ein Benutzer ausgew\u00e4hlt werden.
-map.share.error.invite=Es m\u00fcssen erst alle Felder ausgef\u00fcllt sein.
-map.share.policy.add=+
-map.share.policy.delete=-
-map.share.policy.invite=Einladung versenden
-map.share.to.user=Benutzer
-map.share.to.group=Gruppe
-map.share.to.invitation=Freigabe-Einladung
-map.share.to.allusers=Alle Benutzer
-map.share.to.user.hint=Hier klicken, um Benutzer auszuw\u00e4hlen
-map.share.to.group.hint=Hier klicken, um Gruppe(n) auszuw\u00e4hlen
-map.share.with.firstName=Vorname
-map.share.with.lastName=Nachname
-map.share.with.mail=E-Mail
-map.share.with.mail.error=Bitte geben Sie eine g\u00fcltige E-Mailadresse an.
-map.share.with.mail.error.olatUser=Diese E-Mailadresse wird bereits von einem OLAT-Benutzer verwendet.
-map.share.with.link=URL
-map.share.with.allOlatUsers=F\u00fcr alle OLAT-Benutzer freigegeben
-map.share.with.tutor=Automatisch f\u00fcr die Betreuer des Kurses freigegeben
-map.share.empty.warn=Dieses Feld muss ausgef\u00fcllt werden.
-map.share.invitation.mail.subject=Einladung zu einer freigegebenen Sammelmappe
-map.share.invitation.mail.list=Eingeladene Personen
-map.share.invitation.mail.body=Sie wurden von {1} eingeladen, eine Sammelmappe in OLAT zu betrachten. Sie finden diese unter folgender Adresse: {0}
-map.share.invitation.mail.success=Die eingeladenen Personen wurden erfolgreich per E-Mail benachrichtigt.
-map.share.invitation.mail.failure=Fehler beim Versenden der E-Mail. Die eingeladenen Personen konnten nicht per E-Mail benachrichtigt werden. Versuchen Sie es sp\u00e4ter noch einmal oder kontaktieren Sie den Support.
-map.is.closed.hint=Mappe geschlossen
-synced.map.success=Diese Mappe wurde mit der urspr\u00fcnglichen Vorlage synchronisiert.
-synced.map.deleted=Diese Mappe wurde gel\u00f6scht.
-synced.map.error=Diese Mappe konnte nicht mit der urspr\u00fcnglichen Vorlage synchronisiert werden.
-map.style.default=Schlicht
-map.style.comic=Comic
-map.style.leather=Leder
-map.style.epmst-green=Gr\u00fcn
-map.style.epmst-green2=Gr\u00fcn 2
-map.style.epmst-green3=Gr\u00fcn 3
-map.style.epmst-green4=Gr\u00fcn 4
-map.style.epmst-red=Rot
-map.style.epmst-red2=Rot 2
-map.style.epmst-red3=Rot 3
-map.style.epmst-red4=Rot 4
-map.style.epmst-blue=Blau
-map.style.epmst-blue2=Blau 2
-map.style.epmst-blue3=Blau 3
-map.style.epmst-blue4=Blau 4
-map.style=Layout w\u00e4hlen
-map.deadline=Abgabetermin: {0}
-map.viewModeButton=Ansicht w\u00e4hlen
-map.owners=Autor: {0}
-restrict.show.all=Alle Sammelmappen anzeigen
-restrict.show.limited=Nur f\u00fcr mich freigegebene Sammelmappen anzeigen
-template.alreadyInUse=Diese Vorlage wurde bereits von mindestens einem Benutzer kopiert. Bei einer \u00c4nderung wird die Sammelmappe des Benutzers synchronisiert. Sie k\u00f6nnen die Vorlage noch erweitern oder Elemente entfernen, riskieren dabei aber, dass bereits vorhandene Verkn\u00fcpfungen mit Artefakten verloren gehen!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-map.cannot.submit.nomore.coursenode=Der Kursknoten dieser Portfolioaufgabe wurde gel\u00f6scht. Diese Sammelmappe kann daher nicht abgegeben werden und bleibt zur Bearbeitung ge\u00f6ffnet.
-map.restriction.stats={0} von {1} zu sammelnden Artefakten verlinkt.
-map.restriction.overview=Noch {0} Artefakte zu sammeln
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_en.properties
deleted file mode 100644
index c175305864d9b060f7178b95c6d18a2e0bc50a44..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,141 +0,0 @@
-#Thu Aug 15 19:13:13 CEST 2013
-add.map=Link binder
-add.page=Add page
-add.struct=Add structural element
-addArtefact=Link artefact
-addPopup.text=Please select the element to be added.
-addPopup.title=Add element
-amount.of.artefacts=Artefacts\: {0}
-artefact.already.in.structure=This artefact already exists in the structure selected.
-artefact.choosen=The artefact "{0}" has been selected and added to the structure "{1}."
-change.reflexion=Reflection regarding artefact link
-changelog=Changelog
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-choose.artefact.title=Select artefact
-choose.group=Select group
-choose.identity=Select user
-commentLink=({0})
-copy.cancel=Cancel
-copy.map=Copy
-copy.map.intro=A copy of the binder "{0}" will be created.
-copy.map.intro2=$\:copy.map.intro Do you want to adopt the artefacts embedded or only copy that binder's structure?
-copy.map.success=This binder has been copied to "{0}" successfully.
-copy.map.title=Copy binder
-copy.with.artefacts=Copy along with artefact's link
-copy.without.artefacts=Copy accumulative folder
-course.link.intro=Portfolio task of course
-course.link.intro.small=Regarding course
-delete.map=Delete
-delete.map.intro=Do you really want to delete the binder "{0}"? Artefacts linked to it will not be deleted.
-delete.map.success=Binder "{0}" deleted successfully.
-delete.map.title=Delete binder
-delete.used.map.error=You can't delete a portfolio task as long as there is a corresponding course.
-from.date.behind.to=The end date can't be earlier than the start date.
-linkArtefact.tooltip=Select the artefact to be linked here.
-map.already.edited=This folder is being edited by another user.
-map.cannot.submit.nomore.coursenode=The course element of this portfolio task has been deleted. The map can therefore not be handed in and stays opened for further editing.
-map.contains=Contains {0} pages and {1} artefacts
-map.contains.pages=Contains {0} pages
-map.copy.of=Copy of {0}
-map.deadline=Deadline\: {0}
-map.description=Description of binder
-map.description.too.long=Description of binder too long. It must not exceed {0} characters.
-map.editButton=Editor
-map.editButton.off=Close $\:map.editButton
-map.editButton.on=Open $\:map.editButton
-map.is.closed.hint=Folder closed
-map.owners=Author\: {0}
-map.restriction.overview={0} artifacts left to collect
-map.restriction.stats={0} of {1} to be collected artifacts are linked.
-map.share=Release folder
-map.share.add.policy=Create release rule
-map.share.date.invalid=Please indicate a valid date.
-map.share.description=Please determine your users as well as a space of time for this folder to be released. Your folder can then be looked at, commented on, and evaluated.
-map.share.empty.warn=This field is mandatory.
-map.share.error.group=At least one group has to be selected.
-map.share.error.invite=You have to fill in all fields first.
-map.share.error.user=At least one user has to be selected.
-map.share.from=From
-map.share.invitation.mail.body=You have been invited by {1} to have a look at a binder in OpenOlat. Please go to\: {0}
-map.share.invitation.mail.failure=Error while sending your e-mail. The persons invited could not be notified. Please try again later or contact your support team.
-map.share.invitation.mail.list=Persons invited
-map.share.invitation.mail.subject=Invitation to a binder already released
-map.share.invitation.mail.success=The persons invited have been notified successfully via e-mail.
-map.share.policy.add=+
-map.share.policy.delete=-
-map.share.policy.invite=Send invitation
-map.share.shared=Folder already released
-map.share.to=Until
-map.share.to.allusers=All users
-map.share.to.group=Group
-map.share.to.group.hint=Click here to select (a) group(s)
-map.share.to.invitation=Release invitation
-map.share.to.user=User
-map.share.to.user.hint=Click here to select user
-map.share.with.allOlatUsers=Release for all OLAT users
-map.share.with.firstName=First name
-map.share.with.lastName=Last name
-map.share.with.link=URL
-map.share.with.mail=E-mail
-map.share.with.mail.error=Please provide a valid e-mail address.
-map.share.with.mail.error.olatUser=This e-mail address is already used by an OLAT user.
-map.share.with.tutor=Automatically released for the coaches of the course
-map.shareButton=Release
-map.style=Select layout
-map.style.comic=Comic
-map.style.default=Simple
-map.style.epmst-blue=Blue
-map.style.epmst-blue2=Blue 2
-map.style.epmst-blue3=Blue 3
-map.style.epmst-blue4=Blue 4
-map.style.epmst-green=Green
-map.style.epmst-green2=Green 2
-map.style.epmst-green3=Green 3
-map.style.epmst-green4=Green 4
-map.style.epmst-red=Red
-map.style.epmst-red2=Red 2
-map.style.epmst-red3=Red 3
-map.style.epmst-red4=Red 4
-map.style.leather=Leather
-map.submit.assess=Submit task
-map.submit.assess.description=Do you really want to submit your portfolio task? You will no longer be able to edit it afterwards.
-map.submit.assess.restriction.error.description=Your portfolio task doesn't conform to all restrictions. Do you really want to submit it? You will no longer be able to edit it afterwards.
-map.submit.assess.restriction.error.hint=You have $\:map.restriction.stats so far
-map.submit.assess.restriction.error.title=Your portfolio task doesn't yet conform to all restrictions.
-map.submit.assess.title=Finish portfolio task
-map.title=Title of binder
-map.title.not.empty=Please provide a title for your binder.
-map.title.too.short=A folder's title is mandatory and has to contain 3 characters at least.
-map.viewModeButton=Select view
-new.page.desc=Description of a new page
-new.page.title=New page
-new.structure.desc=Description of what is collected via this structural element.
-new.structure.title=New structural element
-no.maps.found=There are no binders to be displayed yet.
-page.links=Page
-popupLink=&nbsp;
-popupLink.tooltip=Click here to add an element at this position.
-remove=Remove
-restrict.show.all=Show all binders
-restrict.show.limited=Show only those binders released for me
-restrictions.not.conform=You haven't abided by all restrictions. Please mind the requirements.
-save.and.open.map=Save and open binder
-synced.map.success=This folder has been synchronized with its original template.
-synced.map.deleted=This folder was deleted.
-synced.map.error=This folder cannot be synchronized with its original template.
-template.alreadyInUse=This template has already been copied by at least one user. When modifying your template this copy will be synchronized as well. It is possible to delete elements or expand your template; however, links to artefacts already existing may be lost\!
-toc=Table of contents
-view.map=Open
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index 96ee94207933486aefde49fba04b4fd39a23fa2a..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,141 +0,0 @@
-#Sat Jun 06 11:57:11 CEST 2015
-add.map=Lier classeur
-add.page=Ajouter page
-add.struct=Ajouter \u00E9l\u00E9ment structurel
-addArtefact=Lier artefact
-addPopup.text=S\u00E9lectionnez un \u00E9l\u00E9ment \u00E0 ajouter.
-addPopup.title=Ajouter \u00E9l\u00E9ment
-amount.of.artefacts=Artefacts\: {0}
-artefact.already.in.structure=Cet artefact est d\u00E9j\u00E0 pr\u00E9sent dans la structure s\u00E9lectionn\u00E9e.
-artefact.choosen=L'artefact "{0} a \u00E9t\u00E9 s\u00E9lectionn\u00E9 et ajout\u00E9 \u00E0 la structure "{1}".
-change.reflexion=R\u00E9flexion sur le lien avec cet artefact
-changelog=Compte-rendu des changements
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-choose.artefact.title=S\u00E9lectionner un artefact
-choose.group=S\u00E9lectionner un groupe
-choose.identity=S\u00E9lectionner les utilisateurs
-commentLink=({0})
-copy.cancel=Interrompre
-copy.map=Copier
-copy.map.intro=Une copie du classeur "{0}" est pr\u00E9par\u00E9e.
-copy.map.intro2=$\:copy.map.intro Voulez-vous reprendre les artefacts li\u00E9s ou seulement copier la structure du classeur?
-copy.map.success=Le classeur a \u00E9t\u00E9 copi\u00E9 dans "{0}".
-copy.map.title=Copier un classeur
-copy.with.artefacts=Copier avec le lien des artefacts
-copy.without.artefacts=Copier classeur
-course.link.intro=Devoir portfolio du cours
-course.link.intro.small=Au cours
-delete.map=\u00C9liminer
-delete.map.intro=Voulez-vous vraiment \u00E9liminer le classeur "{0}"? Les artefacts li\u00E9s au classeur ne seront pas \u00E9limin\u00E9s.
-delete.map.success=Le classeur "{0}" a \u00E9t\u00E9 \u00E9limin\u00E9.
-delete.map.title=\u00C9liminer un classeur
-delete.used.map.error=Un devoir portfolio ne peut \u00EAtre \u00E9limin\u00E9 si le cours dans lequel il est int\u00E9gr\u00E9 existe encore.
-from.date.behind.to=La date "de" ne peut \u00EAtre post\u00E9rieure \u00E0 la date "jusqu'\u00E0".
-linkArtefact.tooltip=S\u00E9lectionnez l'artefact que vous voulez lier ici.
-map.already.edited=Ce classeur est \u00E9dit\u00E9 en ce moment par un autre utilisateur.
-map.cannot.submit.nomore.coursenode=L'\u00E9l\u00E9ment de cours avec ce devoir a \u00E9t\u00E9 supprim\u00E9e. Ce classeur ne peut plus \u00EAtre livr\u00E9 et restera ouvert \u00E0 l'\u00E9dition.
-map.contains=Contient {0} pages et {1} artefacts
-map.contains.pages=Contient {0} pages
-map.copy.of=Copie de {0}
-map.deadline=D\u00E9lai de remise\: {0}
-map.description=Description du classeur
-map.description.too.long=La description du classeur est trop longue, la limite est de {0} signes.
-map.editButton=Editeur
-map.editButton.off=Fermer $\:map.editButton
-map.editButton.on=Ouvrir $\:map.editButton
-map.is.closed.hint=Classeur ferm\u00E9
-map.owners=Auteur\: {0}
-map.restriction.overview=Encore {0} artefacts \u00E0 collecter
-map.restriction.stats={0} de {1} li\u00E9 \u00E0 l'artefact collect\u00E9
-map.share=Partager classeur
-map.share.add.policy=Cr\u00E9er r\u00E8gle de partage
-map.share.date.invalid=Indiquez une date valide, svp.
-map.share.description=D\u00E9terminez ici les utilisateurs et la p\u00E9riode de partage durant laquelle il sera possible de voir, commenter et \u00E9valuer ce classeur.
-map.share.empty.warn=Ce champ ne peut rester vide.
-map.share.error.group=Il faut s\u00E9lectionner un moins un groupe.
-map.share.error.invite=Il faut d'abord compl\u00E9ter tous les champs.
-map.share.error.user=Il faut s\u00E9lectionner au moins un utilisateur.
-map.share.from=De
-map.share.invitation.mail.body=Vous avez \u00E9t\u00E9 invit\u00E9 par {0} \u00E0 consulter un classeur OLAT. Vous pouvez le trouver \u00E0 l'adresse suivante\: {0}
-map.share.invitation.mail.failure=Les personnes invit\u00E9es n'ont pas pu \u00EAtre averties par e-mail. R\u00E9essayez plus tard ou contactez le support.
-map.share.invitation.mail.list=Personnes invit\u00E9es
-map.share.invitation.mail.subject=Invitation \u00E0 consulter un classeur OLAT partag\u00E9
-map.share.invitation.mail.success=Les personnes invit\u00E9es ont \u00E9t\u00E9 inform\u00E9es par e-mail.
-map.share.policy.add=+
-map.share.policy.delete=-
-map.share.policy.invite=Envoyer invitation
-map.share.shared=Classeur d\u00E9j\u00E0 partag\u00E9
-map.share.to=Jusqu'\u00E0
-map.share.to.allusers=Tous les utilisateurs
-map.share.to.group=Groupe
-map.share.to.group.hint=Cliquez ici pour s\u00E9lectionner le/s groupe/s
-map.share.to.invitation=Invitation partage
-map.share.to.user=Utilisateur
-map.share.to.user.hint=Cliquez ici pour s\u00E9lectionner des utilisateurs
-map.share.with.allOlatUsers=Partag\u00E9 pour tous les utilisateurs OLAT
-map.share.with.firstName=Pr\u00E9nom
-map.share.with.lastName=Nom
-map.share.with.link=URL
-map.share.with.mail=E-mail
-map.share.with.mail.error=Indiquez une adresse e-mail valide, svp.
-map.share.with.mail.error.olatUser=Cette adresse e-mail est d\u00E9j\u00E0 utilis\u00E9e par un utilisateur OLAT.
-map.share.with.tutor=Partag\u00E9 avec votre coach
-map.shareButton=Partager
-map.style=S\u00E9lectionner layout
-map.style.comic=Comic
-map.style.default=Simple
-map.style.epmst-blue=Bleu
-map.style.epmst-blue2=Bleu 2
-map.style.epmst-blue3=Bleu 3
-map.style.epmst-blue4=Bleu 4
-map.style.epmst-green=Vert
-map.style.epmst-green2=Vert 2
-map.style.epmst-green3=Vert 3
-map.style.epmst-green4=Vert 4
-map.style.epmst-red=Rouge
-map.style.epmst-red2=Rouge 2
-map.style.epmst-red3=Rouge 3
-map.style.epmst-red4=Rouge 4
-map.style.leather=Cuir
-map.submit.assess=Remettre devoir
-map.submit.assess.description=Voulez-vous vraiment remettre votre devoir portfolio? Vous ne pourrez plus le modifier.
-map.submit.assess.restriction.error.description=Votre devoir portfolio ne satisfait pas toutes les limitations de r\u00E9colte. Voulez-vous tout de m\u00EAme remettre votre devoir portfolio? Vous ne pourrez plus le modifier.
-map.submit.assess.restriction.error.hint=Vous avez jusqu'\u00E0 maintenant $\:map.restriction.stats
-map.submit.assess.restriction.error.title=Votre devoir portfolio ne satisfait pas encore toutes les limitations de r\u00E9colte.
-map.submit.assess.title=Terminer le devoir portfolio
-map.title=Titre du classeur
-map.title.not.empty=Indiquez le titre du classeur.
-map.title.too.short=Le titre du classeur doit \u00EAtre indiqu\u00E9 et contenir au moins 3 signes.
-map.viewModeButton=S\u00E9lectionner affichage
-new.page.desc=Description d'une nouvelle page
-new.page.title=Une nouvelle page
-new.structure.desc=Description de ce qui est r\u00E9colt\u00E9 sous cet \u00E9l\u00E9ment structurel.
-new.structure.title=Un nouvel \u00E9l\u00E9ment structurel
-no.maps.found=Il n'existe encore aucun classeur qui puisse \u00EAtre affich\u00E9.
-page.links=Page
-popupLink=&nbsp;
-popupLink.tooltip=Cliquez ici pour ajouter un \u00E9l\u00E9ment \u00E0 cette position.
-remove=Enlever
-restrict.show.all=Afficher tous les classeurs
-restrict.show.limited=Afficher seulement les classeurs partag\u00E9s avec moi
-restrictions.not.conform=Vous n'avez pas satisfait toutes les limitations de r\u00E9colte\: consultez les crit\u00E8res, svp.
-save.and.open.map=Enregistrer et ouvrir classeur
-synced.map.deleted=Ce classeur a \u00E9t\u00E9 effac\u00E9
-synced.map.error=Ce classeur n'a pas pu \u00EAtre synchronis\u00E9 avec son classeur initial.
-synced.map.success=Ce classeur a \u00E9t\u00E9 synchronis\u00E9 avec le mod\u00E8le original.
-template.alreadyInUse=Ce mod\u00E8le a \u00E9t\u00E9 copi\u00E9 par au moins un utilisateur. En cas de modification, le classeur de l'utilisateur est synchronis\u00E9. Vous pouvez agrandir le mod\u00E8le ou \u00E9liminer des \u00E9l\u00E9ments, mais vous risquez de perdre des liens d\u00E9j\u00E0 existants avec des artefacts.
-toc=Indice du contenu
-view.map=Ouvrir
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_it.properties
deleted file mode 100644
index 5df7b1d3fa582789a9373e8388d6738002038382..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_it.properties
+++ /dev/null
@@ -1,127 +0,0 @@
-#Wed Jun 22 15:28:43 CEST 2016
-add.map=Collegare raccoglitore
-add.page=Aggiungere pagina
-add.struct=Aggiungere elemento strutturale
-addArtefact=Collegare artefatto
-addPopup.text=Selezioni un elemento da aggiungere.
-addPopup.title=Aggiungere elemento
-amount.of.artefacts=Artefatti\: {0}
-artefact.already.in.structure=Questo artefatto \u00E8 gi\u00E0 presente nella struttura selezionata.
-artefact.choosen=L'artefatto "{0}" \u00E8 stato selezionato e aggiunto alla struttura "{1}".
-change.reflexion=Riflessione sul collegamento con questo artefatto
-changelog=Registro dei cambiamenti
-choose.artefact.title=Selezionare un artefatto
-choose.group=Selezionare gruppo
-choose.identity=Selezionare utente
-commentLink=({0})
-copy.cancel=Interrompere
-copy.map=Copiare
-copy.map.intro=Viene preparata una copia del raccoglitore "{0}".
-copy.map.intro2=$\:copy.map.intro Vuole riprendere gli artefatti collegati o soltanto copiare la struttura del raccoglitore?
-copy.map.success=Il raccoglitore \u00E8 stato copiato in "{0}".
-copy.map.title=Copiare un raccoglitore
-copy.with.artefacts=Copiare con il collegamento degli artefatti
-copy.without.artefacts=Copiare raccoglitore
-course.link.intro=Compito portfolio dal corso
-course.link.intro.small=Al corso
-delete.map=Eliminare
-delete.map.intro=Vuole veramente eliminare il raccoglitore "{0}"? Gli artefatti collegati al raccoglitore non verranno eliminati.
-delete.map.success=Il raccoglitore "{0}" \u00E8 stato eliminato.
-delete.map.title=Eliminare un raccoglitore
-delete.used.map.error=Un compito portfolio non pu\u00F2 venire eliminato se il corso in cui \u00E8 integrato esiste ancora.
-from.date.behind.to=La data "da" non pu\u00F2 essere posteriore alla data "fino a".
-linkArtefact.tooltip=Selezioni l'artefatto che vuole collegare qui.
-map.already.edited=Questo raccoglitore viene attualmente editato da un altro utente.
-map.cannot.submit.nomore.coursenode=L'elemento di corso di questo compito portfolio \u00E8 stato eliminato, per cui la cartella non potr\u00E0 pi\u00F9 essere consegnata e rimarr\u00E0 aperta ad ulteriori modifiche.
-map.contains=Contiene {0} pagina/e e {1} artefatto/i
-map.contains.pages=Contiene {0} pagine
-map.copy.of=Copia di {0}
-map.deadline=Termine di consegna\: {0}
-map.description=Descrizione del raccoglitore
-map.description.too.long=La descrizione del raccoglitore \u00E8 troppo lunga, il limite \u00E8 di {0} segni.
-map.editButton=Editore
-map.editButton.off=Chiudere $\:map.editButton
-map.editButton.on=Aprire $\:map.editButton
-map.is.closed.hint=Raccoglitore chiuso
-map.owners=Autore\: {0}
-map.restriction.overview={0} artefatti ancora da raccogliere
-map.restriction.stats={0} di {1} artefatti da raccogliere sono collegati.
-map.share=Condividere raccoglitore
-map.share.add.policy=Creare regola di condivisione
-map.share.date.invalid=Indichi una data valida, p.f.
-map.share.description=Definisca qui gli utenti e il periodo di condivisione durante il quale sar\u00E0 possibile vedere, commentare e valutare questo raccoglitore.
-map.share.empty.warn=Questo campo non pu\u00F2 essere vuoto.
-map.share.error.group=Occorre selezionare almeno un gruppo.
-map.share.error.invite=Occore prima completare tutti i campi.
-map.share.error.user=Occore selezionare almeno un utente.
-map.share.from=Da
-map.share.invitation.mail.body=Lei \u00E8 stata/o invitata/o da {0} a consultare un raccoglitore OLAT. Lo pu\u00F2 trovare all'indirizzo seguente\: {0}
-map.share.invitation.mail.failure=Errore durante l'invio della e-mail. Le persone invitate non possono essere avvisate via e-mail. Riprovi pi\u00F9 tardi o contatti il Suo punto di supporto.
-map.share.invitation.mail.list=Persone invitate
-map.share.invitation.mail.subject=Invito a consultare un raccoglitore OLAT condiviso
-map.share.invitation.mail.success=Le persone invitate sono state informate via e-mail.
-map.share.policy.add=+
-map.share.policy.delete=-
-map.share.policy.invite=Inviare invito
-map.share.shared=Raccoglitore gi\u00E0 condiviso
-map.share.to=Fino a
-map.share.to.allusers=Tutti gli utenti
-map.share.to.group=Gruppo
-map.share.to.group.hint=Clicchi qui per selezionare il/i gruppo/i
-map.share.to.invitation=Invito condivisione
-map.share.to.user=Utente
-map.share.to.user.hint=Clicchi qui per selezionare degli utenti
-map.share.with.allOlatUsers=Condiviso per tutti gli utenti OLAT
-map.share.with.firstName=Nome
-map.share.with.lastName=Cognome
-map.share.with.link=URL
-map.share.with.mail=E-mail
-map.share.with.mail.error=Indichi un indirizzi e-mail valido, p.f.
-map.share.with.mail.error.olatUser=Questo indirizzo e-mail viene gi\u00E0 utilizzato da un utente OLAT.
-map.share.with.tutor=Condiviso automaticamente con i tutori/istruttori del corso.
-map.shareButton=Condividere
-map.style=Selezionare layout
-map.style.comic=Comic
-map.style.default=Semplice
-map.style.epmst-blue=Blu
-map.style.epmst-blue2=Blu 2
-map.style.epmst-blue3=Blu 3
-map.style.epmst-blue4=Blu 4
-map.style.epmst-green=Verde
-map.style.epmst-green2=Verde 2
-map.style.epmst-green3=Verde 3
-map.style.epmst-green4=Verde 4
-map.style.epmst-red=Rosso
-map.style.epmst-red2=Rosso 2
-map.style.epmst-red3=Rosso 3
-map.style.epmst-red4=Rosso 4
-map.style.leather=Pelle
-map.submit.assess=Consegnare compito
-map.submit.assess.description=Vuole veramente consegnare il Suo compito portfolio? Non potr\u00E0 pi\u00F9 modificarlo.
-map.submit.assess.restriction.error.description=Il Suo compito portfolio non soddisfa tutte le limitazioni di raccolta. Vuole comunque consegnare il Suo compito portfolio? Non potr\u00E0 pi\u00F9 modificarlo.
-map.submit.assess.restriction.error.hint=Tu hai $\:map.restriction.stats finora
-map.submit.assess.restriction.error.title=Il suo compito portfolio non soddisfa ancora tutte le limitazioni di raccolta.
-map.submit.assess.title=Terminare il compito portfolio
-map.title=Titolo del raccoglitore
-map.title.not.empty=Indichi il titolo del raccoglitore.
-map.title.too.short=Occorre indicare il titolo del raccoglitore con almeno 3 segni.
-map.viewModeButton=Selezionare visualizzazione
-new.page.desc=Descrizione di una nuova pagina
-new.page.title=Una nuova pagina
-new.structure.desc=Descrizione di ci\u00F2 che viene raccolto sotto questo elemento strutturale.
-new.structure.title=Un nuovo elemento strutturale
-no.maps.found=Non esistono ancora dei raccoglitori che possano essere mostrati.
-page.links=Pagina
-popupLink=&nbsp;
-popupLink.tooltip=Clicchi qui per aggiungere un elemento in questa posizione.
-remove=Rimuovere
-restrict.show.all=Mostrare tutti i raccoglitori
-restrict.show.limited=Mostrare solo i raccoglitori condivisi con me
-restrictions.not.conform=Non ha soddisfatto tutte le limitazioni di raccolta\: consulti i criteri, p.f.
-save.and.open.map=Salvare e aprire raccolglitore
-synced.map.deleted=Questa cartella \u00E8 stata eliminata.
-synced.map.error=Questa cartella non pu\u00F2 essere sincronizzata con il template originale.
-synced.map.success=Questo raccoglitore \u00E8 stato sincronizzato con il modello originale.
-template.alreadyInUse=Questo modello \u00E8 stato copiato da almeno un utente. In caso di modifica il raccoglitore dell'utente viene sincronizzato. Lei pu\u00F2 ampliare il modello o eliminare degli elementi, ma rischia di perdere dei collegamenti gi\u00E0 esistenti con degli artefatti\!
-toc=Indice del contenuto
-view.map=Aprire
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_jp.properties
deleted file mode 100644
index 118e21e21b228f72672526d76d5df3c5c1a9caaf..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_jp.properties
+++ /dev/null
@@ -1,54 +0,0 @@
-#Thu Sep 08 16:42:39 CEST 2011
-add.map=\u53CE\u96C6\u30D5\u30A9\u30EB\u30C0\u306B\u30EA\u30F3\u30AF\u3059\u308B
-add.page=\u30DA\u30FC\u30B8\u3092\u8FFD\u52A0\u3059\u308B
-add.struct=\u69CB\u6210\u8981\u7D20\u3092\u8FFD\u52A0\u3059\u308B
-addArtefact=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u306B\u30EA\u30F3\u30AF\u3059\u308B
-addPopup.text=\u8FFD\u52A0\u3059\u308B\u30A8\u30EC\u30E1\u30F3\u30C8\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-addPopup.title=\u30A8\u30EC\u30E1\u30F3\u30C8\u3092\u8FFD\u52A0\u3059\u308B
-amount.of.artefacts=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\: {0}
-artefact.already.in.structure=\u9078\u629E\u3055\u308C\u305F\u69CB\u9020\u306B\u306F\u3001\u3059\u3067\u306B\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u304C\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u3059\u3002
-artefact.choosen=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u300C {0} \u300D\u304C\u9078\u629E\u3055\u308C\u3001\u69CB\u9020\u300C {1} \u300D\u306B\u8FFD\u52A0\u3055\u308C\u307E\u3057\u305F\u3002
-change.reflexion=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u30EA\u30F3\u30AF\u306B\u95A2\u3059\u308B\u30EA\u30D5\u30EC\u30AF\u30B7\u30E7\u30F3
-
-
-
-
-
-
-
-
-
-
-choose.artefact.title=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u9078\u629E\u3059\u308B
-commentLink=({0})
-copy.cancel=\u30AD\u30E3\u30F3\u30BB\u30EB
-copy.map=\u30B3\u30D4\u30FC
-copy.map.intro=\u53CE\u96C6\u30D5\u30A9\u30EB\u30C0\u300C {0} \u300D\u306E\u30B3\u30D4\u30FC\u304C\u4F5C\u6210\u3055\u308C\u307E\u3059\u3002
-copy.map.intro2=$\:copy.map.intro \u3042\u306A\u305F\u306F\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u57CB\u3081\u8FBC\u307F\u3001\u307E\u305F\u306F\u30D5\u30A9\u30EB\u30C0\u69CB\u9020\u306E\u30B3\u30D4\u30FC\u306E\u307F\u3092\u9069\u7528\u3057\u307E\u3059\u304B?
-copy.map.success=\u53CE\u96C6\u30D5\u30A9\u30EB\u30C0\u304C\u6B63\u5E38\u306B\u300C {0} \u300D\u306B\u30B3\u30D4\u30FC\u3055\u308C\u307E\u3057\u305F\u3002
-copy.map.title=\u53CE\u96C6\u30D5\u30A9\u30EB\u30C0\u3092\u30B3\u30D4\u30FC\u3059\u308B
-copy.with.artefacts=\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u30EA\u30F3\u30AF\u3068\u3068\u3082\u306B\u30B3\u30D4\u30FC\u3059\u308B
-copy.without.artefacts=\u7D2F\u7A4D\u30D5\u30A9\u30EB\u30C0\u3092\u30B3\u30D4\u30FC\u3059\u308B
-course.link.intro=\u30B3\u30FC\u30B9\u306E\u30DD\u30FC\u30C8\u30D5\u30A9\u30EA\u30AA\u30BF\u30B9\u30AF
-course.link.intro.small=\u95A2\u9023\u30B3\u30FC\u30B9
-delete.map=\u524A\u9664
-delete.map.intro=\u672C\u5F53\u306B\u7D2F\u7A4D\u30D5\u30A9\u30EB\u30C0\u300C {0} \u300D\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B? \u7D2F\u7A4D\u30D5\u30A9\u30EB\u30C0\u3078\u306E\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u30EA\u30F3\u30AF\u306F\u524A\u9664\u3055\u308C\u307E\u305B\u3093\u3002
-delete.map.success=\u7D2F\u7A4D\u30D5\u30A9\u30EB\u30C0\u300C {0} \u300D\u304C\u6B63\u5E38\u306B\u524A\u9664\u3055\u308C\u307E\u3057\u305F\u3002
-delete.map.title=\u7D2F\u7A4D\u30D5\u30A9\u30EB\u30C0\u3092\u524A\u9664\u3059\u308B
-delete.used.map.error=\u5BFE\u5FDC\u3059\u308B\u30B3\u30FC\u30B9\u304C\u5B58\u5728\u3059\u308B\u5834\u5408\u3001\u3042\u306A\u305F\u306F\u30DD\u30FC\u30C8\u30D5\u30A9\u30EA\u30AA\u30BF\u30B9\u30AF\u3092\u524A\u9664\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002
-from.date.behind.to=\u7D42\u4E86\u65E5\u3092\u958B\u59CB\u65E5\u306E\u524D\u306B\u8A2D\u5B9A\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002
-linkArtefact.tooltip=\u3053\u3053\u306B\u30EA\u30F3\u30AF\u3059\u308B\u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-map.already.edited=\u3053\u306E\u30D5\u30A9\u30EB\u30C0\u306F\u5225\u306E\u30E6\u30FC\u30B6\u306B\u3088\u308A\u7DE8\u96C6\u3055\u308C\u3066\u3044\u307E\u3059\u3002
-map.contains={0} \u30DA\u30FC\u30B8\u304A\u3088\u3073 {1} \u30A2\u30FC\u30C6\u30A3\u30D5\u30A1\u30AF\u30C8\u3092\u542B\u3080
-map.contains.pages={0} \u30DA\u30FC\u30B8\u3092\u542B\u3080
-map.copy.of={0} \u306E\u30B3\u30D4\u30FC
-map.deadline=\u7DE0\u3081\u5207\u308A\: {0}
-map.description=\u7D2F\u7A4D\u30D5\u30A9\u30EB\u30C0\u306B\u95A2\u3059\u308B\u8AAC\u660E
-map.description.too.long=\u7D2F\u7A4D\u30D5\u30A9\u30EB\u30C0\u306B\u95A2\u3059\u308B\u8AAC\u660E\u304C\u9577\u3059\u304E\u307E\u3059\u3002\u534A\u89D2 {0} \u6587\u5B57\u4EE5\u5185\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-map.editButton=\u30A8\u30C7\u30A3\u30BF
-map.editButton.off=$\:map.editButton \u3092\u9589\u3058\u308B
-map.editButton.on=$\:map.editButton \u3092\u958B\u304F
-map.owners=\u4F5C\u8005\: {0}
-map.share=\u30D5\u30A9\u30EB\u30C0\u3092\u30EA\u30EA\u30FC\u30B9\u3059\u308B
-map.share.add.policy=\u30EA\u30EA\u30FC\u30B9\u30EB\u30FC\u30EB\u3092\u4F5C\u6210\u3059\u308B
-map.share.date.invalid=\u6709\u52B9\u306A\u65E5\u4ED8\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_nl_NL.properties
deleted file mode 100644
index 8098afb5c4cd1600469d3374ee5f973b22ebf446..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_nl_NL.properties
+++ /dev/null
@@ -1,118 +0,0 @@
-#Thu Sep 08 16:42:47 CEST 2011
-add.map=Accumulatieve map linken
-add.page=Pagina toevoegen
-add.struct=Structureel element toevoegen
-addArtefact=Artefact linken
-addPopup.text=Gelieve het element te selecteren dat toegevoegd moet worden.
-addPopup.title=Element toevoegen
-amount.of.artefacts=Artefacten\: {0}
-artefact.already.in.structure=Dit artefact bestaat al in de geslecteerde structuur.
-artefact.choosen=Het artefact "{0}" is geslecteerd en toegevoegd aan structuur "{1}."
-change.reflexion=Reflectie betreffende artefact link
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-choose.artefact.title=Selecteer artefact
-commentLink=({0})
-copy.cancel=Annuleer
-copy.map=Kopieer
-copy.map.intro=Een kopie naar accumulatieve folder "{0}" zal aangemaakt worden.
-copy.map.intro2=$\:copy.map.intro Wilt u de vastgezetten artefacts aanpassen of enkel de structuur van die map kopi\u00EBren?
-copy.map.success=Deze accumulatieve map is succesvol gekopieerd naar "{0}"
-copy.map.title=Kopieer accumulatieve map
-copy.with.artefacts=Kopieer samen met de link van het artefact
-copy.without.artefacts=Kopieer accumulatieve map
-course.link.intro=Porfolio taak van cursus
-course.link.intro.small=Betreffende cursus
-delete.map=Verwijder
-delete.map.intro=Weet u zeker dat u accumulatieve map "{0}" wilt verwijderen? Gelinkte artefacten zullen niet gewist worden.
-delete.map.success=Accumulatieve map "{0}" is met succes gewist.
-delete.map.title=Verwijder accumulatieve map
-delete.used.map.error=U kan geen portfolio taak verwijderen zolang er een bijbehorende cursus is.
-from.date.behind.to=De einddatum kan niet vroeger zijn dan de startdatum.
-linkArtefact.tooltip=Selecteer het artefact dat hier gelinkt moet worden.
-map.already.edited=Deze map wordt aangepast door een andere gebruiker.
-map.contains=Bevat {0} pagina's en {1} artefact(en)
-map.contains.pages=Bevat {0} pagina's
-map.copy.of=Kopieer van {0}
-map.deadline=Deadline\: {0}
-map.description=Beschrijving van accumulatieve map
-map.description.too.long=De beschrijving van de accumulatieve map is te lang. De tekst mag niet meer dan {0} tekens bevatten.
-map.editButton=Editor
-map.editButton.off=$\:map.editButton sluiten
-map.editButton.on=$\:map.editButton openen
-map.is.closed.hint=Map is gesloten
-map.owners=Auteur\: {0}
-map.share=Map vrijgeven
-map.share.add.policy=Vrijgeef regels aanmaken
-map.share.date.invalid=Gelieve een geldige datum aan te geven.
-map.share.description=Gelieve zowel uw gebruikers als de tijdspanne voor het vrijgeven van deze map vast te stellen. Uw map kan dan bekeken en ge\u00EBvaleerd worden.
-map.share.empty.warn=Dit veld is verplicht.
-map.share.error.group=Er moet ten minste \u00E9\u00E9n groep geselecteerd worden.
-map.share.error.invite=U moet eerst alle velden invullen.
-map.share.error.user=Er moet ten minste \u00E9\u00E9n gebruiker geselecteerd worden.
-map.share.from=Van
-map.share.invitation.mail.body=U bent uitgenodigd door {1} om een kijkje te nemen in een accumulatieve map op OLAT. Gelieve naar hier te gaan\: {0}
-map.share.invitation.mail.failure=Er is een fout opgetreden tijdens het versturen van uw e-mail. De uitgenodigde persoon kon niet verwittigd worden. Gelieve het later opnieuw te proberen of uw ondersteuningsteam te contacteren.
-map.share.invitation.mail.list=Uitgenodigde personen
-map.share.invitation.mail.subject=Er is reeds een uitnodiging voor de accumulatieve map vrijgegeven
-map.share.invitation.mail.success=De uitgenodigde persoon is succesvol verwittigd via e-mail.
-map.share.policy.add=+
-map.share.policy.delete=-
-map.share.policy.invite=Verstuur uitnodiging
-map.share.shared=Map is reeds vrijgegeven
-map.share.to=Tot
-map.share.to.allusers=Alle gebruikers
-map.share.to.group=Groep
-map.share.to.group.hint=Klik hier om (a) groep(en) te selecteren
-map.share.to.invitation=uitnodiging vrijgeven
-map.share.to.user=Gebruiker
-map.share.to.user.hint=Klik hier om gebruiker te selecteren
-map.share.with.allOlatUsers=Voor alle OLAT gebruikers vrijgeven
-map.share.with.firstName=Voornaam
-map.share.with.lastName=Achternaam
-map.share.with.link=URL
-map.share.with.mail=E-mail
-map.share.with.mail.error=Gelieve een geldig e-mailadres in te voeren.
-map.share.with.mail.error.olatUser=Dit e-mailadres wordt al gebruikt door een OLAT gebruiker.
-map.shareButton=Vrijgeven
-map.style=Selecteer lay-out
-map.style.comic=Comic
-map.style.default=Eenvoudig
-map.style.leather=Leder
-map.submit.assess=Taak toevoegen
-map.submit.assess.description=Weet u zeker dat u uw portfoliotaak wil toevoegen? U kan de taak nadien niet meer aanpassen.
-map.submit.assess.restriction.error.description=Uw portfoliotaak is niet conform aan alle restricties. Wilt u de taak zeker toevoegen? U kan de taak nadien niet meer aanpassen.
-map.submit.assess.restriction.error.title=Uw portfoliotaak is nog niet conform aan alle restricties.
-map.submit.assess.title=Portfoliotaak be\u00EBindigen
-map.title=Titel van accumulatieve map
-map.title.not.empty=Gelieve uw accumulatieve map een titel te geven.
-map.title.too.short=Een maptitel is verplicht en moet tenminste 3 tekens bevatten.
-map.viewModeButton=Selecteer overzicht
-new.page.desc=Beschrijving van nieuwe pagina
-new.page.title=Nieuwe pagina
-new.structure.desc=Beschrijving van wat verzameld is via dit structureel element.
-new.structure.title=Nieuw structureel element
-no.maps.found=Er zijn nog geen accumulatieve mappen om weer te geven.
-page.links=Pagina
-popupLink=&nbsp;
-popupLink.tooltip=Klik hier om een element op deze positie toe tevoegen.
-restrict.show.all=Toon alle accumulatieve mappen
-restrict.show.limited=Toon enkel de mappen die vrijgegeven zijn voor mij.
-restrictions.not.conform=U hebt geen rekening gehouden met alle restricties. Gelieve dit wel te doen.
-save.and.open.map=Bewaar en open accumulatieve map.
-synced.map.success=Deze map is gesynchroniseerd met zijn originele sjabloon.
-template.alreadyInUse=Dit sjabloon is al gekopieerd door minstens \u00E9\u00E9n gebruiker. Bij het aanpassen van uw sjabloon zal deze kopie ook gesynchroniseerd worden. Het is mogelijk om elementen te verwijderen of om uw sjabloon aan te passen; maar, links naar artefacten die al bestaan kunnen verloren gaan\!
-toc=Inhoudstafel
-view.map=Open
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_pl.properties
deleted file mode 100644
index 87909d0bdf5024987f68ee13de3c39b4a8e326ee..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_pl.properties
+++ /dev/null
@@ -1,110 +0,0 @@
-#Fri Nov 29 15:30:40 CET 2013
-add.map=Powi\u0105\u017C folder zbiorczy
-add.page=Dodaj stron\u0119
-add.struct=Dodaj element struktury
-addArtefact=Powi\u0105\u017C artefakt
-addPopup.text=Wybierz element do dodania
-addPopup.title=Dodaj element
-amount.of.artefacts=Artefakt\u00F3w\: {0}
-artefact.already.in.structure=Ten artefakt istnieje ju\u017C w wybranej strukturze.
-artefact.choosen=Artefakt "{0}" zosta\u0142 wybrany i dodany do struktury "{1}".
-change.reflexion=Przemy\u015Blenia dotycz\u0105ce powi\u0105zania z tym artefaktem
-changelog=Log zmian
-
-
-
-
-
-choose.artefact.title=Wybierz artefakt
-commentLink=({0})
-copy.cancel=Anuluj
-copy.map=Kopiuj
-copy.map.intro=Wykonana zostanie kopia folderu zbiorczego "{0}".
-copy.map.intro2=$\:copy.map.intro Czy chcesz uwzgl\u0119dni\u0107 zawarte artefakty, czy jedynie skopiowa\u0107 struktur\u0119 folderu?
-copy.map.success=Ten folder zbiorczy zosta\u0142 pomy\u015Blnie skopiowany do "{0}".
-copy.map.title=Kopiuj folder zbiorczy
-copy.with.artefacts=Kopiuj razem z linkami do artefakt\u00F3w
-copy.without.artefacts=Kopiuj folder zbiorczy
-course.link.intro=Zadanie portfolio z kursu
-course.link.intro.small=Powi\u0105zany kurs
-delete.map=Usu\u0144
-delete.map.intro=Czy na pewno chcesz usun\u0105\u0107 folder zbiorczy "{0}"? Artefakty po\u0142\u0105czone z nim nie zostan\u0105 usuni\u0119te.
-delete.map.success=Folder zbiorczy "{0}" zosta\u0142 pomy\u015Blnie usuni\u0119ty.
-delete.map.title=Usu\u0144 folder zbiorczy
-delete.used.map.error=Nie mo\u017Cesz usun\u0105\u0107 zadania portfolio, dop\u00F3ki istnieje powi\u0105zany z nim kurs.
-from.date.behind.to=Data ko\u0144cowa nie mo\u017Ce by\u0107 wcze\u015Bniejsza, ni\u017C data pocz\u0105tkowa.
-linkArtefact.tooltip=Wybierz artefakt, kt\u00F3ry ma zosta\u0107 powi\u0105zany.
-map.already.edited=Ten folder jest obecnie edytowany przez innego u\u017Cytkownika.
-map.contains=Zawiera {0} stron i {1} artefakt\u00F3w
-map.contains.pages=Zawiera {0} stron
-map.copy.of=Kopia {0}
-map.deadline=Termin\: {0}
-map.description=Opis folderu zbiorczego
-map.description.too.long=Opis folderu jest zbyt d\u0142ugi. Nie powinien przekracza\u0107 {0} znak\u00F3w.
-map.editButton=Edytor
-map.editButton.off=Zamknij $\:map.editButton
-map.editButton.on=Otw\u00F3rz $\:map.editButton
-map.is.closed.hint=Folder zamkni\u0119ty
-map.owners=Autor\: {0}
-map.share=Udost\u0119pnij folder
-map.share.add.policy=Utw\u00F3rz zasad\u0119 udost\u0119pniania
-map.share.date.invalid=Podaj prawid\u0142ow\u0105 dat\u0119.
-map.share.description=Wska\u017C uprawnionych u\u017Cytkownik\u00F3w i przedzia\u0142 czasu, na jaki ma zosta\u0107 udost\u0119pniony katalog. Po wykonaniu tej czynno\u015Bci, folder b\u0119dzie m\u00F3g\u0142 by\u0107 przegl\u0105dany, komentowany i oceniany.
-map.share.empty.warn=To pole jest obowi\u0105zkowe.
-map.share.error.group=Nale\u017Cy wybra\u0107 przynajmniej jedn\u0105 grup\u0119.
-map.share.error.invite=Musisz najpierw wype\u0142ni\u0107 wszystkie pola.
-map.share.error.user=Nale\u017Cy wybra\u0107 przynajmniej jednego u\u017Cytkownika.
-map.share.from=Od
-map.share.invitation.mail.body=Zosta\u0142e\u015B zaproszony przez {1} do obejrzenia folderu zbiorczego w OLAT. W tym celu przejd\u017A do\: {0}
-map.share.invitation.mail.failure=Wyst\u0105pi\u0142 b\u0142\u0105d podczas wysy\u0142ania wiadomo\u015Bci e-mail. Osoby, kt\u00F3re zaprosi\u0142e\u015B nie zostan\u0105 powiadomione. Spr\u00F3buj ponownie p\u00F3\u017Aniej lub skontaktuj si\u0119 z osob\u0105 odpowiedzialn\u0105 za wsparcie.
-map.share.invitation.mail.list=Zaproszone osoby
-map.share.invitation.mail.subject=Zaproszenie do folderu zbiorczego zosta\u0142o ju\u017C udost\u0119pnione
-map.share.invitation.mail.success=Zaproszone osoby zosta\u0142y powiadomione mailem.
-map.share.policy.add=+
-map.share.policy.delete=-
-map.share.policy.invite=Wy\u015Blij zaproszenie
-map.share.shared=Folder ju\u017C udost\u0119pniony
-map.share.to=Do
-map.share.to.allusers=Wszyscy u\u017Cytkownicy
-map.share.to.group=Grupa
-map.share.to.group.hint=Kliknij tu, \u017Ceby wybra\u0107 grupy
-map.share.to.invitation=Zaproszenie
-map.share.to.user=U\u017Cytkownik
-map.share.to.user.hint=Kliknij tu, \u017Ceby wybra\u0107 u\u017Cytkownika
-map.share.with.allOlatUsers=Udost\u0119pnij wszystkim u\u017Cytkownikom OLAT
-map.share.with.firstName=Imi\u0119
-map.share.with.lastName=Nazwisko
-map.share.with.link=URL
-map.share.with.mail=E-mail
-map.share.with.mail.error=Podaj prawid\u0142owy adres e-mail.
-map.share.with.mail.error.olatUser=Ten adres e-mail jest ju\u017C wykorzystywany przez innego u\u017Cytkownika OLAT.
-map.shareButton=Udost\u0119pnij
-map.style=Wybierz uk\u0142ad
-map.style.comic=Zabawny
-map.style.default=Prosty
-map.style.leather=Sk\u00F3ra
-map.submit.assess=Zatwierd\u017A zadanie
-map.submit.assess.description=Czy na pewno chcesz zatwierdzi\u0107 swoje zadanie portfolio? Nie b\u0119dzie mo\u017Cliwo\u015Bci p\u00F3\u017Aniejszej zmiany.
-map.submit.assess.restriction.error.description=Twoje portfolio nie spe\u0142nia wszystkich wytycznych. Czy chcesz je zatwierdzi\u0107? Nie b\u0119dzie mo\u017Cliwo\u015Bci p\u00F3\u017Aniejszej zmiany.
-map.submit.assess.restriction.error.title=Twoje portfolio nie spe\u0142nia jeszcze wszystkich wytycznych.
-map.submit.assess.title=Zako\u0144cz zadanie portfolio
-map.title=Tytu\u0142 folderu zbiorczego
-map.title.not.empty=Podaj tytu\u0142 swojego folderu zbiorczego
-map.title.too.short=Tytu\u0142 folderu jest obowi\u0105zkowy i powinien sk\u0142ada\u0107 si\u0119 z przynajmniej trzech znak\u00F3w.
-map.viewModeButton=Wybierz widok
-new.page.desc=Opis nowej strony
-new.page.title=Nowa strona
-new.structure.desc=Opis tre\u015Bci pozyskiwanych przez ten element struktury.
-new.structure.title=Nowy element struktury
-no.maps.found=Brak folder\u00F3w zbiorczych do wy\u015Bwietlenia.
-page.links=Strona
-popupLink=&nbsp;
-popupLink.tooltip=Kliknij tu, \u017Ceby doda\u0107 element w bie\u017C\u0105cej pozycji.
-restrict.show.all=Poka\u017C wszystkie foldery zbiorcze
-restrict.show.limited=Poka\u017C tylko te foldery, kt\u00F3re zosta\u0142y udost\u0119pnione dla mnie
-restrictions.not.conform=Nie spe\u0142ni\u0142e\u015B wszystkich wytycznych. Przestrzegaj obowi\u0105zuj\u0105cych wymaga\u0144.
-save.and.open.map=Zapisz i otw\u00F3rz folder zbiorczy
-synced.map.success=Ten folder zosta\u0142 zsynchronizowany z jego oryginalnym szablonem.
-template.alreadyInUse=Ten szablon zosta\u0142 skopiowany przez przynajmniej jednego u\u017Cytkownika. Je\u017Celi poddasz go edycji, wszystkie jego kopie zostan\u0105 automatycznie zsynchronizowane w celu uzgodnienia zmian. Mo\u017Cliwe jest usuwanie element\u00F3w lub rozbudowa szablonu, jednak linki do istniej\u0105cych artefakt\u00F3w mog\u0105 zosta\u0107 utracone\!
-toc=Spis tre\u015Bci
-view.map=Otw\u00F3rz
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_pt_BR.properties
deleted file mode 100644
index 4e8bb47d3fef49aa3e45ab050aac4057581e5f5e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_pt_BR.properties
+++ /dev/null
@@ -1,141 +0,0 @@
-#Fri Jul 10 15:14:37 CEST 2015
-add.map=Link de pasta acumulativa
-add.page=Adicionar p\u00E1gina
-add.struct=Adicionar elemento estrutural
-addArtefact=Linkar artefato
-addPopup.text=Por favor, selecione o elemento a ser adicionado.
-addPopup.title=Adicionar elemento
-amount.of.artefacts=Artefatos\: {0}
-artefact.already.in.structure=Este artefato j\u00E1 existe na estrutura selecionada.
-artefact.choosen=O artefato "{0}" foi selecionado e adicionado \u00E0 estrutura "{1}."
-change.reflexion=Reflex\u00E3o sobre o link do artefato
-changelog=Log de mudan\u00E7as
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-choose.artefact.title=Selecionar artefato
-choose.group=Selecionar grupo
-choose.identity=Selecionar usu\u00E1rio
-commentLink=({0})
-copy.cancel=Cancelar
-copy.map=Copiar
-copy.map.intro=Uma c\u00F3pia da pasta acumulativa "{0}" ser\u00E1 criada.
-copy.map.intro2=$\:copy.map.intro Voc\u00EA quer adotar os artefatos embutidos ou apenas copiar a estrutura dessa pasta?
-copy.map.success=Esta pasta acumulativa foi copiado para "{0}" com sucesso.
-copy.map.title=Copie a pasta acumulativa
-copy.with.artefacts=Copiar juntamente com link do artefato
-copy.without.artefacts=Copie a pasta acumulativo
-course.link.intro=Tarefa Portfolio de curso
-course.link.intro.small=Sobre o curso
-delete.map=Excluir
-delete.map.intro=Voc\u00EA realmente deseja excluir a pasta acumulativa "{0}"? Artefatos ligados a ela n\u00E3o ser\u00E3o apagados.
-delete.map.success=Pasta acumulativa "{0}" exclu\u00EDda com sucesso.
-delete.map.title=Excluir pasta acumulativa
-delete.used.map.error=Voc\u00EA n\u00E3o pode excluir a tarefa de Portfolio enquanto houver um curso correspondente.
-from.date.behind.to=A data final n\u00E3o pode ser anterior \u00E0 data de in\u00EDcio.
-linkArtefact.tooltip=Selecione o artefato para ser linkado aqui.
-map.already.edited=Esta pasta est\u00E1 sendo editada por outro usu\u00E1rio.
-map.cannot.submit.nomore.coursenode=O elemento de curso desta tarefa "Portfolio" foi eliminada. O mapa n\u00E3o pode ser entregue e permanece aberto para edi\u00E7\u00E3o posterior.
-map.contains=Cont\u00E9m {0} p\u00E1ginas e {1} artefatos
-map.contains.pages=Cont\u00E9m {0} p\u00E1ginas
-map.copy.of=C\u00F3pia de {0}
-map.deadline=Prazo\: {0}
-map.description=Descri\u00E7\u00E3o de pasta acumulativa
-map.description.too.long=Descri\u00E7\u00E3o de pasta acumulativa muito longa. N\u00E3o deve exceder {0} caracteres.
-map.editButton=Editor
-map.editButton.off=Fechar $\:map.editButton
-map.editButton.on=Abrir $\:map.editButton
-map.is.closed.hint=Pasta fechada
-map.owners=Autor\: {0}
-map.restriction.overview={0} artefatos a serem recolhidos
-map.restriction.stats={0} de {1} artefatos a serem coletados est\u00E3o vinculados.
-map.share=Lan\u00E7ar pasta
-map.share.add.policy=Criar regra de lan\u00E7amento
-map.share.date.invalid=Por favor, indique uma data v\u00E1lida.
-map.share.description=Por favor, determinar os seus usu\u00E1rios, bem como um espa\u00E7o de tempo para esta pasta para ser lan\u00E7ada. Sua pasta pode ser vista, comentada, e avaliada.
-map.share.empty.warn=Este campo \u00E9 obrigat\u00F3rio.
-map.share.error.group=Pelo menos um grupo tem de ser selecionado.
-map.share.error.invite=Voc\u00EA tem que preencher todos os campos primeiramente.
-map.share.error.user=Pelo menos um usu\u00E1rio tem de ser selecionado.
-map.share.from=De
-map.share.invitation.mail.body=Voc\u00EA foi convidado por {1} para olhar uma pasta acumulativa no OLAT. Por favor, v\u00E1 para\: {0}
-map.share.invitation.mail.failure=Erro ao enviar seu e-mail. As pessoas convidadas n\u00E3o puderam ser notificadas. Por favor, tente novamente mais tarde ou entre em contato com sua equipe de suporte.
-map.share.invitation.mail.list=Pessoas convidadas
-map.share.invitation.mail.subject=Convite para uma pasta acumulativa j\u00E1 lan\u00E7ada
-map.share.invitation.mail.success=As pessoas convidadas foram notificadas com sucesso via e-mail.
-map.share.policy.add=+
-map.share.policy.delete=-
-map.share.policy.invite=Enviar convite
-map.share.shared=Pasta j\u00E1 lan\u00E7ada
-map.share.to=At\u00E9
-map.share.to.allusers=Todos usu\u00E1rios
-map.share.to.group=Grupo
-map.share.to.group.hint=Clique aqui para selecionar (um) grupo(s)
-map.share.to.invitation=Convite de lan\u00E7amento
-map.share.to.user=Usu\u00E1rio
-map.share.to.user.hint=Clique aqui para selecionar usu\u00E1rio
-map.share.with.allOlatUsers=Lan\u00E7ar para todos os usu\u00E1rios OLAT
-map.share.with.firstName=Primeiro nome
-map.share.with.lastName=\u00DAltimo nome
-map.share.with.link=URL
-map.share.with.mail=E-mail
-map.share.with.mail.error=Por favor, forne\u00E7a um endere\u00E7o de e-mail v\u00E1lido.
-map.share.with.mail.error.olatUser=Este endere\u00E7o de e-mail j\u00E1 \u00E9 utilizado por um usu\u00E1rio OLAT.
-map.share.with.tutor=Automaticamente liberado para os treinadores do curso
-map.shareButton=Lan\u00E7amento
-map.style=Selecionar layout
-map.style.comic=C\u00F4mico
-map.style.default=Simples
-map.style.epmst-blue=Azul
-map.style.epmst-blue2=Azul 2
-map.style.epmst-blue3=Azul 3
-map.style.epmst-blue4=Azul 4
-map.style.epmst-green=Verde
-map.style.epmst-green2=Verde 2
-map.style.epmst-green3=Verde 3
-map.style.epmst-green4=Verde 4
-map.style.epmst-red=Vermelho
-map.style.epmst-red2=Vermelho 2
-map.style.epmst-red3=Vermelho 3
-map.style.epmst-red4=Vermelho 4
-map.style.leather=Couro
-map.submit.assess=Enviar tarefa
-map.submit.assess.description=Voc\u00EA realmente quer enviar a sua tarefa de portf\u00F3lio? Voc\u00EA n\u00E3o ser\u00E1 mais capaz de edit\u00E1-lo depois.
-map.submit.assess.restriction.error.description=Sua tarefa de portfolio n\u00E3o \u00E9 compat\u00EDvel com todas as restri\u00E7\u00F5es. Voc\u00EA realmente quer envi\u00E1-lo? Voc\u00EA n\u00E3o ser\u00E1 mais capaz de edit\u00E1-lo depois.
-map.submit.assess.restriction.error.hint=Voc\u00EA tem $\:map.restriction.stats at\u00E9 agora
-map.submit.assess.restriction.error.title=Sua tarefa de portfolio ainda n\u00E3o est\u00E3o em conformidade com todas as restri\u00E7\u00F5es.
-map.submit.assess.title=Finalizar tarefa Portfolio
-map.title=T\u00EDtulo de pasta acumulativo
-map.title.not.empty=Por favor, forne\u00E7a um t\u00EDtulo para sua pasta acumulativa.
-map.title.too.short=Um t\u00EDtulo da pasta \u00E9 obrigat\u00F3rio e deve conter 3 caracteres no m\u00EDnimo.
-map.viewModeButton=Selecionar vis\u00E3o
-new.page.desc=Descri\u00E7\u00E3o de uma nova p\u00E1gina
-new.page.title=Nova p\u00E1gina
-new.structure.desc=Descri\u00E7\u00E3o do que \u00E9 coletado atrav\u00E9s deste elemento estrutural.
-new.structure.title=Elemento estrutural novo
-no.maps.found=N\u00E3o h\u00E1 pastas acumulativas a serem exibidas ainda.
-page.links=P\u00E1gina
-popupLink=&nbsp;
-popupLink.tooltip=Clique aqui para adicionar um elemento nessa posi\u00E7\u00E3o.
-remove=Remover
-restrict.show.all=Mostrar todas as pastas acumulativas
-restrict.show.limited=Mostrar apenas as pastas liberadas para mim
-restrictions.not.conform=Voc\u00EA n\u00E3o tem agido de acordo com todas as restri\u00E7\u00F5es. Tenha em considera\u00E7\u00E3o os requisitos.
-save.and.open.map=Salvar e abrir pasta acumulativa
-synced.map.deleted=Esta pasta foi exclu\u00EDda.
-synced.map.error=Esta pasta n\u00E3o pode ser sincronizado com seu modelo original.
-synced.map.success=Esta pasta foi sincronizada com o seu modelo original.
-template.alreadyInUse=Este modelo j\u00E1 foi copiado por pelo menos um usu\u00E1rio. Ao modificar seu modelo esta c\u00F3pia ser\u00E1 sincronizado tamb\u00E9m. \u00C9 poss\u00EDvel excluir elementos ou expandir o seu modelo, no entanto, os links para os artefatos j\u00E1 existentes podem ser perdidos\!
-toc=\u00CDndice anal\u00EDtico
-view.map=Abrir
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_zh_CN.properties
deleted file mode 100644
index d5402e6268fbd450a1f8c0c35d93415f1ed9d6c4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_i18n/LocalStrings_zh_CN.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-#Thu Sep 08 16:42:39 CEST 2011
-add.map=\u94FE\u63A5\u5F62\u6210\u6027\u6587\u4EF6\u5939
-add.page=\u6DFB\u52A0\u9875\u9762
-add.struct=\u6DFB\u52A0\u7ED3\u6784\u5143\u7D20
-addArtefact=\u94FE\u63A5\u8BC1\u660E
-addPopup.text=\u8BF7\u9009\u62E9\u8981\u6DFB\u52A0\u7684\u5143\u7D20\u3002
-addPopup.title=\u6DFB\u52A0\u5143\u7D20
-amount.of.artefacts=\u8BC1\u660E\:{0}
-artefact.already.in.structure=\u6B64\u8BC1\u660E\u5DF2\u5B58\u5728\u4E8E\u7ED3\u6784\u4E2D\u3002
-artefact.choosen=\u5DF2\u9009\u62E9\u8BC1\u660E"{0}"\uFF0C\u5E76\u5C06\u5176\u6DFB\u52A0\u81F3\u7ED3\u6784"{1}"\u4E2D.
-change.reflexion=\u8BC1\u660E\u94FE\u63A5\u7684\u53CD\u601D\u6D3B\u52A8
-
-
-
-
-copy.map=\u590D\u5236
-delete.map=\u5220\u9664
-delete.map.intro=\u60A8\u771F\u7684\u8981\u5220\u9664\u5F62\u6210\u6027\u6587\u4EF6\u5939"{0}"?\u4E0E\u6B64\u76F8\u8FDE\u63A5\u7684\u4EBA\u5DE5\u65B9\u5F0F\u4E0D\u4F1A\u88AB\u5220\u9664.
-map.contains=\u5305\u542B {0} \u9875\u6587\u6863 \u548C {1} \u4E2A\u8BC1\u660E\u6750\u6599
-map.contains.pages=\u5305\u62EC {0} \u9875\u6587\u6863
-map.copy.of=\u590D\u5236 {0}
-map.deadline=\u622A\u6B62\u65E5\u671F\uFF1A{0}
-map.description=\u5F62\u6210\u6027\u6587\u4EF6\u5939\u7684\u63CF\u8FF0\u4FE1\u606F
-map.editButton=\u7F16\u8F91\u5668
-map.editButton.off=\u5173\u95ED $\:map.editButton
-map.editButton.on=\u5F00\u542F $\:map.editButton
-map.is.closed.hint=\u5173\u95ED\u6587\u4EF6\u5939
-map.owners=\u4F5C\u8005\uFF1A{0}
-map.share=\u91CA\u653E\u6587\u4EF6\u5939
-map.share.add.policy=\u521B\u5EFA\u53D1\u5E03\u89C4\u5219
-map.share.date.invalid=\u8BF7\u8F93\u5165\u4E00\u4E2A\u6709\u6548\u65E5\u671F\u3002
-map.style=\u9009\u62E9\u5E03\u5C40
-map.style.comic=\u5361\u901A
-map.style.default=\u7B80\u6D01
-map.style.leather=\u76AE\u9769
-map.submit.assess=\u63D0\u4EA4\u4EFB\u52A1
-map.submit.assess.description=\u60A8\u771F\u7684\u60F3\u8981\u63D0\u4EA4\u60A8\u7684\u6863\u6848\u4EFB\u52A1\uFF1F\u5982\u679C\u63D0\u4EA4\uFF0C\u4EE5\u540E\u60A8\u5C06\u4E0D\u80FD\u591F\u518D\u6B21\u7F16\u8F91\u3002
-map.submit.assess.restriction.error.description=\u60A8\u7684\u6863\u6848\u4EFB\u52A1\u4E0D\u7B26\u5408\u6240\u6709\u7684\u89C4\u5B9A\u3002\u60A8\u771F\u7684\u8981\u63D0\u4EA4\u561B\uFF1F\u5982\u679C\u63D0\u4EA4\uFF0C\u60A8\u4EE5\u540E\u5C06\u4E0D\u80FD\u518D\u6B21\u7F16\u8F91.
-map.submit.assess.restriction.error.title=\u60A8\u7684\u6863\u6848\u4EFB\u52A1\u4E0D\u7B26\u5408\u6240\u6709\u7684\u89C4\u5B9A\u3002
-map.submit.assess.title=\u5B8C\u6210\u6863\u6848\u4EFB\u52A1
-map.title=\u5F62\u6210\u6027\u6587\u4EF6\u5939\u7684\u540D\u79F0
-map.title.not.empty=\u8BF7\u4E3A\u60A8\u7684\u5F62\u6210\u6027\u6587\u4EF6\u5939\u63D0\u4F9B\u4E00\u4E2A\u540D\u79F0\u3002
-map.title.too.short=\u6587\u4EF6\u7684\u540D\u79F0\u662F\u9700\u8981\u624B\u52A8\u8F93\u5165\u7684\uFF0C\u5B83\u81F3\u5C11\u8981\u5305\u542B3\u4E2A\u5B57\u7B26\u3002
-map.viewModeButton=\u9009\u62E9\u67E5\u770B
-new.page.desc=\u4E00\u4E2A\u65B0\u9875\u9762\u7684\u63CF\u8FF0
-new.page.title=\u65B0\u9875\u9762
-toc=\u5185\u5BB9
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_i18n/i18nBundleMetadata.properties b/src/main/java/org/olat/portfolio/ui/structel/_i18n/i18nBundleMetadata.properties
deleted file mode 100644
index 62e0c0801a8b5be26929c3d54056113885d991d2..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/_i18n/i18nBundleMetadata.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-new.page.title.inlinetranslation=disabled
-new.page.desc.inlinetranslation=disabled
-new.structure.title.inlinetranslation=disabled
-new.structure.desc.inlinetranslation=disabled
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/EPCollectRestrictionResultController.java b/src/main/java/org/olat/portfolio/ui/structel/edit/EPCollectRestrictionResultController.java
deleted file mode 100644
index 98be54f67d442657463e264b2cdd8bbb5b21bdc5..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/EPCollectRestrictionResultController.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel.edit;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.concurrent.atomic.AtomicLong;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.gui.translator.Translator;
-import org.olat.core.util.Util;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.model.restriction.CollectRestriction;
-import org.olat.portfolio.ui.filter.PortfolioFilterController;
-
-/**
- * 
- * Description:<br>
- * Small controller with show the error message for the collect restriction.
- * 
- * <P>
- * Initial Date:  13 oct. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPCollectRestrictionResultController extends BasicController {
-	
-	private final VelocityContainer mainVc;
-	private static final AtomicLong restrictionsCounter = new AtomicLong(1l);
-	
-	public EPCollectRestrictionResultController(UserRequest ureq, WindowControl wControl) {
-		super(ureq, wControl);
-
-		mainVc = createVelocityContainer("restrictions_msg");
-		mainVc.contextPut("restrictionId", Long.toString(restrictionsCounter.getAndIncrement()));
-		putInitialPanel(mainVc);
-	}
-
-	public void setMessage(List<CollectRestriction> restrictions, boolean passed) {
-		List<String> errors = new ArrayList<>();
-		for(CollectRestriction restriction:restrictions) {
-			String error = getMessage(restriction, getTranslator(), null);
-			errors.add(error);
-		}
-		
-		Boolean passedObj = new Boolean(passed);
-		mainVc.contextPut("messages", errors);
-		mainVc.contextPut("restrictionsPassed", passedObj);
-		mainVc.setDirty(true);
-	}
-	
-	public static String getMessage(CollectRestriction restriction, Translator translator, Locale locale) {
-		if(translator == null) {
-			translator = Util.createPackageTranslator(EPCollectRestrictionResultController.class, locale);
-		}
-		String[] args = getMessageArgs(restriction, translator);
-		return translator.translate("restriction.error", args);
-	}
-	
-	public static String[] getMessageArgs(CollectRestriction restriction, Translator translator) {
-		String[] args = new String[3];
-		args[0] = translator.translate("restriction." + restriction.getRestriction());
-		PortfolioModule portfolioModule = (PortfolioModule) CoreSpringFactory.getBean("portfolioModule");
-		EPArtefactHandler<?> handler = portfolioModule.getArtefactHandler(restriction.getArtefactType());
-		if (handler!=null) {
-			String handlerClass = PortfolioFilterController.HANDLER_PREFIX + handler.getClass().getSimpleName() + PortfolioFilterController.HANDLER_TITLE_SUFFIX;
-			args[1] = handler.getHandlerTranslator(translator).translate(handlerClass);
-		} else {
-			args[1] = translator.translate("restriction.handler.unknown");
-		}
-		args[2] = Integer.toString(restriction.getAmount());
-		return args;
-	}
-
-	@Override
-	protected void doDispose() {
-		//
-	}
-	
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		//
-	}
-
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/EPMoveEvent.java b/src/main/java/org/olat/portfolio/ui/structel/edit/EPMoveEvent.java
deleted file mode 100644
index a2914c130fb96aca53260215bbc6742bd4c64e06..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/EPMoveEvent.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel.edit;
-
-import org.olat.core.gui.control.Event;
-
-/**
- * 
- * Description:<br>
- * 
- * <P>
- * Initial Date:  24 déc. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPMoveEvent extends Event {
-
-	private static final long serialVersionUID = -7603783878477792174L;
-	private final String newParent;
-	private final String nodeMoved;
-	
-	public EPMoveEvent() {
-		super("move");
-		this.nodeMoved = null;
-		this.newParent = null;
-	}
-	
-	public EPMoveEvent(String newParent, String nodeMoved) {
-		super("move");
-		this.nodeMoved = nodeMoved;
-		this.newParent = newParent;
-	}
-	
-	public String getNodeMoved() {
-		return nodeMoved;
-	}
-
-	public String getNewParent() {
-		return newParent;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/EPStructureDetailsController.java b/src/main/java/org/olat/portfolio/ui/structel/edit/EPStructureDetailsController.java
deleted file mode 100644
index de402626ae8c5d0abd30f420eeeda7755205d9c1..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/EPStructureDetailsController.java
+++ /dev/null
@@ -1,408 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel.edit;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItem;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.FormLink;
-import org.olat.core.gui.components.form.flexible.elements.RichTextElement;
-import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
-import org.olat.core.gui.components.form.flexible.elements.StaticTextElement;
-import org.olat.core.gui.components.form.flexible.elements.TextElement;
-import org.olat.core.gui.components.form.flexible.impl.Form;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.components.form.flexible.impl.FormEvent;
-import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.Util;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.restriction.CollectRestriction;
-import org.olat.portfolio.model.restriction.RestrictionsConstants;
-import org.olat.portfolio.model.structel.EPStructureElement;
-import org.olat.portfolio.model.structel.EPStructuredMapTemplate;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.ui.filter.PortfolioFilterController;
-import org.olat.portfolio.ui.structel.EPMapViewController;
-import org.olat.portfolio.ui.structel.EPStructureEvent;
-
-/**
- * Description:<br>
- * edit the title and details/description of a PortfolioStructure
- * <P>
- * Initial Date: 07.10.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPStructureDetailsController extends FormBasicController {
-
-	private final EPFrontendManager ePFMgr;
-	private final PortfolioModule portfolioModule;
-	private final PortfolioStructure rootStructure;
-	private PortfolioStructure editStructure;
-	public static final String VIEWMODE_TABLE = "table";
-	public static final String VIEWMODE_MINI = "miniview";
-
-	private TextElement titleEl;
-	private RichTextElement descriptionEl;
-	private StaticTextElement noEditInfo;
-	private List<SingleSelection> restrictionElements;
-	private List<SingleSelection> restrictToArtefactElements;
-	private List<TextElement> amountElements;
-	private List<CollectRestriction> collectRestrictions;
-	private SingleSelection viewRadio;
-	private List<StaticTextElement> errorElements;
-
-	public EPStructureDetailsController(final UserRequest ureq, final WindowControl wControl, final Form rootForm, final PortfolioStructure rootStructure) {
-		super(ureq, wControl, FormBasicController.LAYOUT_DEFAULT, null, rootForm);
-
-		final Translator pt = Util.createPackageTranslator(EPMapViewController.class, ureq.getLocale(), getTranslator());
-		flc.setTranslator(pt);
-		ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-		portfolioModule = (PortfolioModule) CoreSpringFactory.getBean("portfolioModule");
-		this.rootStructure = rootStructure;
-		this.editStructure = rootStructure;
-		// work on a copy of the list in case of cancel
-		collectRestrictions = new ArrayList<>(editStructure.getCollectRestrictions());
-
-		initForm(ureq);
-	}
-
-	public void setNewStructure(final UserRequest ureq, final PortfolioStructure struct) {
-		editStructure = struct;
-		collectRestrictions = new ArrayList<>(editStructure.getCollectRestrictions());
-		updateUI(ureq);
-	}
-
-	protected void updateUI(final UserRequest ureq) {
-		initForm(ureq);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void initForm(final FormItemContainer formLayout, final Controller listener, final UserRequest ureq) {
-
-		if (formLayout.getFormComponent("struct.title") != null) {
-			formLayout.remove("struct.title");
-		}
-		titleEl = uifactory.addTextElement("struct.title", "struct.title", 512, editStructure.getTitle(), formLayout);
-		titleEl.setNotEmptyCheck("map.title.not.empty");
-		titleEl.setMandatory(true);
-
-		// choose representation mode (table or minimized artefact-view)
-		if (formLayout.getFormComponent("view.mode") != null) {
-			formLayout.remove("view.mode");
-		}
-		final String[] theKeys = new String[] { VIEWMODE_TABLE, VIEWMODE_MINI };
-		final String[] theValues = new String[] { translate("view.mode." + VIEWMODE_TABLE), translate("view.mode." + VIEWMODE_MINI) };
-		viewRadio = uifactory.addRadiosHorizontal("view.mode", formLayout, theKeys, theValues);
-		final String artRepMode = editStructure.getArtefactRepresentationMode();
-		if (artRepMode != null) {
-			viewRadio.select(artRepMode, true);
-		} else {
-			viewRadio.select(VIEWMODE_MINI, true);
-		}
-
-		if (formLayout.getFormComponent("struct.description") != null) {
-			formLayout.remove("struct.description");
-		}
-		descriptionEl = uifactory.addRichTextElementForStringDataMinimalistic("struct.description", "struct.description", editStructure.getDescription(), -1, -1,
-				formLayout, getWindowControl());
-		descriptionEl.setMaxLength(2047);
-		descriptionEl.setNotLongerThanCheck(2047, "map.description.too.long");
-
-		// hint for no edit options
-		if (formLayout.getFormComponent("noEditInfo") != null) {
-			formLayout.remove("noEditInfo");
-		}
-		noEditInfo = uifactory.addStaticTextElement("noEditInfo", "no.edit.info.label", translate("no.edit.info"), formLayout);
-		noEditInfo.setVisible(false);
-
-		if (formLayout.getFormComponent("collect.restriction") != null) {
-			formLayout.remove("collect.restriction");
-		}
-		// show restrictions only for templates and on page/structure-level, as artefacts are not linkable on maps itself
-		if (editStructure instanceof EPStructureElement && rootStructure instanceof EPStructuredMapTemplate && editStructure.getRoot() != null) {
-			final FormLayoutContainer collectContainer = FormLayoutContainer
-					.createCustomFormLayout("collect.restriction", getTranslator(), velocity_root + "/restrictions.html");
-			collectContainer.setRootForm(mainForm);
-			collectContainer.setLabel("collect.restriction", null);
-			formLayout.add(collectContainer);
-
-			final String[] restrictionKeys = new String[] { "", RestrictionsConstants.MAX, RestrictionsConstants.EQUAL, RestrictionsConstants.MIN };
-			final String[] restrictionValues = new String[restrictionKeys.length];
-			restrictionValues[0] = "";
-			for (int i = 1; i < restrictionKeys.length; i++) {
-				restrictionValues[i] = translate("restriction." + restrictionKeys[i]);
-			}
-
-			final List<EPArtefactHandler<?>> handlers = portfolioModule.getArtefactHandlers(); // allow only to use enabled handlers
-			final String[] artefactKeys = new String[handlers.size() + 1];
-			final String[] artefactValues = new String[artefactKeys.length];
-			artefactValues[0] = artefactKeys[0] = "";
-			for (int i = 0; i < handlers.size(); i++) {
-				final EPArtefactHandler<?> handler = handlers.get(i);
-				artefactKeys[i + 1] = handler.getType();
-				final String handlerClass = PortfolioFilterController.HANDLER_PREFIX + handler.getClass().getSimpleName()
-						+ PortfolioFilterController.HANDLER_TITLE_SUFFIX;
-				artefactValues[i + 1] = handler.getHandlerTranslator(getTranslator()).translate(handlerClass);
-			}
-
-			if (collectRestrictions.isEmpty()) {
-				collectRestrictions.add(new CollectRestriction());
-			}
-
-			restrictionElements = new ArrayList<>();
-			restrictToArtefactElements = new ArrayList<>();
-			amountElements = new ArrayList<>();
-			errorElements = new ArrayList<>();
-
-			final List<String> counts = new ArrayList<>();
-			for (final CollectRestriction restriction : collectRestrictions) {
-				final int count = restrictionElements.size();
-
-				final SingleSelection restrictionElement = uifactory.addDropdownSingleselect("collect.restriction.restriction." + count, "", collectContainer,
-						restrictionKeys, restrictionValues, null);
-				restrictionElement.setDomReplacementWrapperRequired(false);
-				restrictionElement.setMandatory(true);
-				if (restriction != null && StringHelper.containsNonWhitespace(restriction.getRestriction())) {
-					restrictionElement.select(restriction.getRestriction(), true);
-				}
-				restrictionElement.setUserObject(restriction);
-
-				final SingleSelection restrictToArtefactElement = uifactory.addDropdownSingleselect("collect.restriction.artefacts." + count, "", collectContainer,
-						artefactKeys, artefactValues, null);
-				restrictToArtefactElement.setDomReplacementWrapperRequired(false);
-				restrictToArtefactElement.setMandatory(true);
-				if (restriction != null && StringHelper.containsNonWhitespace(restriction.getArtefactType())) {
-					restrictToArtefactElement.select(restriction.getArtefactType(), true);
-				}
-
-				String amountStr = "";
-				if (restriction != null && restriction.getAmount() > 0) {
-					amountStr = Integer.toString(restriction.getAmount());
-				}
-				final TextElement amountElement = uifactory.addTextElement("collect.restriction.amount." + count, null, 2, amountStr, collectContainer);
-				amountElement.setDomReplacementWrapperRequired(false);
-				amountElement.setDisplaySize(3);
-				
-				StaticTextElement errorElement = uifactory.addStaticTextElement("collect.restriction.error." + count, null, "", collectContainer);
-				errorElement.setVisible(false);
-				
-				restrictionElements.add(restrictionElement);
-				restrictToArtefactElements.add(restrictToArtefactElement);
-				amountElements.add(amountElement);
-				errorElements.add(errorElement);
-
-				final FormLink addLink = uifactory.addFormLink("collect.restriction.add." + count, "collect.restriction.add", "collect.restriction.add",
-						collectContainer, Link.BUTTON_SMALL);
-				addLink.setDomReplacementWrapperRequired(false);
-				addLink.setUserObject(restriction);
-				final FormLink delLink = uifactory.addFormLink("collect.restriction.del." + count, "collect.restriction.delete", "collect.restriction.delete",
-						collectContainer, Link.BUTTON_SMALL);
-				delLink.setDomReplacementWrapperRequired(false);
-				delLink.setUserObject(restriction);
-
-				counts.add(Integer.toString(count));
-			}
-			collectContainer.contextPut("counts", counts);
-		}
-
-		if (formLayout.getFormComponent("save") != null) {
-			formLayout.remove("save");
-		}
-		uifactory.addFormSubmitButton("save", formLayout);
-	}
-
-	public FormItem getInitialFormItem() {
-		return flc;
-	}
-	
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#validateFormLogic(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected boolean validateFormLogic(UserRequest ureq) {
-		if(rootStructure instanceof EPStructuredMapTemplate && restrictionElements != null) {
-			setCollectRestrictions();
-			clearErrors();
-			ArrayList<String> usedTypes = new ArrayList<>();
-			int i=0;
-			boolean hasError = false;
-			for(SingleSelection restrictionElement:restrictionElements) {
-				CollectRestriction restriction = (CollectRestriction)restrictionElement.getUserObject();
-				if (usedTypes.contains(restriction.getArtefactType())){
-					StaticTextElement thisErrorEl = errorElements.get(i);
-					thisErrorEl.setVisible(true);
-					thisErrorEl.setValue(translate("collect.restriction.duplicate.type"));
-					hasError = true;
-				}				
-				usedTypes.add(restriction.getArtefactType());
-				
-				boolean hasRestriction = StringHelper.containsNonWhitespace(restriction.getRestriction());
-				boolean hasArtType = StringHelper.containsNonWhitespace(restriction.getArtefactType());
-				boolean hasAmount = restriction.getAmount() > 0;
-				boolean isValid = restriction.isValid();
-				if (!isValid && (hasRestriction || hasArtType || hasAmount)) {
-					StaticTextElement thisErrorEl = errorElements.get(i);
-					thisErrorEl.setVisible(true);
-					thisErrorEl.setValue(translate("collect.restriction.incomplete"));
-					hasError = true;
-				}
-				i++;
-			}
-			return !hasError;			
-		}
-		return true;		
-	}
-	
-	private void clearErrors(){
-		for (StaticTextElement errorElement : errorElements) {
-			errorElement.setVisible(false);
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void formOK(final UserRequest ureq) {
-		editStructure = ePFMgr.reloadPortfolioStructure(editStructure);
-		editStructure.setTitle(titleEl.getValue());
-		editStructure.setDescription(descriptionEl.getValue());
-		editStructure.setArtefactRepresentationMode(viewRadio.getSelectedKey());
-
-		if (rootStructure instanceof EPStructuredMapTemplate && restrictionElements != null) {
-			clearErrors();
-			editStructure.getCollectRestrictions().clear();
-			setCollectRestrictions();
-			for (final SingleSelection restrictionElement : restrictionElements) {
-				final CollectRestriction restriction = (CollectRestriction) restrictionElement.getUserObject();
-				if (restriction.isValid()) {
-					final CollectRestriction cr = new CollectRestriction(restriction);
-					editStructure.getCollectRestrictions().add(cr);
-				}
-			}
-		}
-
-		ePFMgr.savePortfolioStructure(editStructure);
-		fireEvent(ureq, new EPStructureEvent(EPStructureEvent.CHANGE, editStructure));
-	}
-
-	@Override
-	protected void formInnerEvent(final UserRequest ureq, final FormItem source, final FormEvent event) {
-		if (source instanceof FormLink && source.getUserObject() instanceof CollectRestriction) {
-			final CollectRestriction restriction = (CollectRestriction) source.getUserObject();
-			if (source.getName().startsWith("collect.restriction.add.")) {
-				addCollectRestriction(restriction);
-			} else if (source.getName().startsWith("collect.restriction.del.")) {
-				deleteCollectRestriction(restriction);
-			}
-			// secure title and description before redraw UI
-			editStructure.setTitle(titleEl.getValue());
-			editStructure.setDescription(descriptionEl.getValue());
-			editStructure.setArtefactRepresentationMode(viewRadio.getSelectedKey());
-			setCollectRestrictions();
-			updateUI(ureq);
-		}
-		super.formInnerEvent(ureq, source, event);
-	}
-
-	protected void setCollectRestrictions() {
-		if (restrictionElements == null || restrictionElements.isEmpty()) { return; }
-
-		for (int i = 0; i < restrictionElements.size(); i++) {
-			final SingleSelection restrictionElement = restrictionElements.get(i);
-			final SingleSelection restrictToArtefactElement = restrictToArtefactElements.get(i);
-			final TextElement amountElement = amountElements.get(i);
-			
-			final CollectRestriction cr = (CollectRestriction) restrictionElement.getUserObject();
-			String restriction = "";
-			if(restrictionElement.isOneSelected()) {
-				restriction = restrictionElement.getSelectedKey();
-			}
-			String artefactType = "";
-			if(restrictToArtefactElement.isOneSelected()) {
-				artefactType = restrictToArtefactElement.getSelectedKey();
-			}
-			final String amount = amountElement.getValue();
-			
-			cr.setRestriction(restriction);
-			cr.setArtefactType(artefactType);			
-			if (StringHelper.containsNonWhitespace(amount)) {
-				try {
-					cr.setAmount(Integer.parseInt(amount));
-				} catch (final NumberFormatException e) {
-					logWarn("Wrong format for number", e);
-				}
-			}
-		}
-	}
-
-	protected void addCollectRestriction(final CollectRestriction restriction) {
-		final int index = collectRestrictions.indexOf(restriction);
-		if (index + 1 < collectRestrictions.size()) {
-			collectRestrictions.add(index + 1, new CollectRestriction());
-		} else {
-			collectRestrictions.add(new CollectRestriction());
-		}
-	}
-
-	protected void deleteCollectRestriction(final CollectRestriction restriction) {
-		collectRestrictions.remove(restriction);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// nothing to dispose
-
-	}
-
-	// disable all formitems expect a hint, when nothing was selected or an artefact was selected
-	public void setNoStructure() {
-		editStructure = null;
-		final Map<String, FormItem> comps = flc.getFormComponents();
-		for (final Iterator<Entry<String, FormItem>> iterator = comps.entrySet().iterator(); iterator.hasNext();) {
-			final Entry<String, FormItem> entry = iterator.next();
-			entry.getValue().setVisible(false);
-		}
-		noEditInfo.setVisible(true);
-		flc.setDirty(true);
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/EPStructureTreeAndDetailsEditController.java b/src/main/java/org/olat/portfolio/ui/structel/edit/EPStructureTreeAndDetailsEditController.java
deleted file mode 100644
index c765a9600271055d7d003bbce57f27b11c523c6a..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/EPStructureTreeAndDetailsEditController.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel.edit;
-
-import java.util.List;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItem;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.components.form.flexible.impl.FormEvent;
-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.translator.Translator;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.Util;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.EPStructureElement;
-import org.olat.portfolio.model.structel.EPStructuredMapTemplate;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.ui.structel.EPArtefactClicked;
-import org.olat.portfolio.ui.structel.EPMapViewController;
-import org.olat.portfolio.ui.structel.EPStructureChangeEvent;
-import org.olat.portfolio.ui.structel.EPStructureEvent;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * parent controller for toc- and structure-editing
- * 
- * <P>
- * Initial Date:  07.10.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPStructureTreeAndDetailsEditController extends FormBasicController {
-
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	@Autowired
-	private PortfolioModule portfolioModule;
-	private PortfolioStructureMap rootStructure;
-	private PortfolioStructure selectedStructure;
-	private final EPSecurityCallback secCallback;
-	
-	private EPTOCController tocCtrl;
-	private EPStructureDetailsController editCtrl;
-	private SingleSelection mapStyle;
-
-
-	public EPStructureTreeAndDetailsEditController(UserRequest ureq, WindowControl wControl, PortfolioStructure selectedStructure,
-			PortfolioStructureMap rootStructure, EPSecurityCallback secCallback) {
-		super(ureq, wControl, "editor");
-		this.secCallback = secCallback;
-		this.rootStructure = rootStructure;
-		this.selectedStructure = selectedStructure;
-		
-		Translator pt = Util.createPackageTranslator(EPMapViewController.class, ureq.getLocale(), getTranslator());
-		setTranslator(pt);
-
-		initForm(ureq);
-		selectedStructure = null;//consume it
-	}
-	
-	public PortfolioStructure getSelectedStructure() {
-		return selectedStructure;
-	}
-
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		List<String> allStyles = portfolioModule.getAvailableMapStyles();
-		int amount = allStyles.size();
-		String[] theKeys = new String[amount];
-		String[] theValues = new String[amount];
-		String[] theCssClasses = new String[amount];
-		int i=0;
-		if (amount > 1){ // if no themes than default configured, no selection at all
-			for (String style : allStyles) {
-				theKeys[i] = style;
-				theValues[i] = translate("map.style." + style);
-				theCssClasses[i] = style + "_icon";
-				i++;
-			}		
-			mapStyle = uifactory.addDropdownSingleselect("map.style", formLayout, theKeys, theValues, theCssClasses);
-			mapStyle.addActionListener(FormEvent.ONCHANGE);
-			String givenStyle = ((EPStructureElement)rootStructure).getStyle();
-			if (StringHelper.containsNonWhitespace(givenStyle)){
-				mapStyle.select(givenStyle, true);
-				mapStyle.setUserObject(givenStyle);
-			}
-		}
-		
-		flc.contextPut("templateHelp", Boolean.valueOf(rootStructure instanceof EPStructuredMapTemplate));
-		
-		initOrUpdateToc(ureq);
-		initOrUpdateDetailsEditor(ureq);
-	}
-	
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest, org.olat.core.gui.components.form.flexible.FormItem, org.olat.core.gui.components.form.flexible.impl.FormEvent)
-	 */
-	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
-		if (source == mapStyle){
-			if (!mapStyle.getSelectedKey().equals(mapStyle.getUserObject())){
-				String newStyle = mapStyle.getSelectedKey();
-				rootStructure = (PortfolioStructureMap)ePFMgr.reloadPortfolioStructure(rootStructure);
-				((EPStructureElement)rootStructure).setStyle(newStyle);
-				ePFMgr.savePortfolioStructure(rootStructure);
-				fireEvent(ureq, Event.CHANGED_EVENT);
-			}
-		}
-	}
-
-	private void initOrUpdateToc(UserRequest ureq) {
-		removeAsListenerAndDispose(tocCtrl);
-		// with new links (pages, sub-elements or artefacts) to map, map gets a new version, therefore needs a refresh!
-		rootStructure = (PortfolioStructureMap)ePFMgr.reloadPortfolioStructure(rootStructure);
-		tocCtrl = new EPTOCController(ureq, getWindowControl(), selectedStructure, rootStructure, secCallback);
-		listenTo(tocCtrl);
-		flc.put("tocCtrl", tocCtrl.getInitialComponent());
-	}
-	
-	private void initOrUpdateDetailsEditor(UserRequest ureq) {	
-		removeAsListenerAndDispose(editCtrl);
-		editCtrl = new EPStructureDetailsController(ureq, getWindowControl(), mainForm, rootStructure);
-		if(selectedStructure != null) {
-			editCtrl.setNewStructure(ureq, selectedStructure);
-		}
-		listenTo(editCtrl);
-		flc.add("editCtrl", editCtrl.getInitialFormItem());
-	}
-	
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// nothing to dispose
-	}
-
-	@Override
-	public FormItem getInitialFormItem() {
-		return flc;
-	}
-	
-	@Override
-	protected void formOK(UserRequest ureq) {
-		//
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		super.event(ureq, source, event);
-		if (source == tocCtrl){
-			if (event.getCommand().equals(EPTOCController.ARTEFACT_NODE_CLICKED)) {
-				editCtrl.setNoStructure();
-				if(event instanceof EPArtefactClicked) {
-					selectedStructure = ((EPArtefactClicked)event).getStructure();
-				}
-			} else if (event instanceof EPStructureChangeEvent && event.getCommand().equals(EPStructureChangeEvent.SELECTED)){
-				EPStructureChangeEvent selEv = (EPStructureChangeEvent) event;
-				selectedStructure = selEv.getPortfolioStructure();
-				if (selectedStructure != null) {
-					editCtrl.setNewStructure(ureq, selectedStructure);
-				}
-			}	else if (event instanceof EPMoveEvent) {
-				tocCtrl.refreshTree(rootStructure); 
-			} else if (event instanceof EPStructureChangeEvent && event.getCommand().equals(EPStructureChangeEvent.ADDED)) {
-				// always reload to be on the save side!
-				selectedStructure = ePFMgr.reloadPortfolioStructure(((EPStructureChangeEvent)event).getPortfolioStructure());
-				initOrUpdateToc(ureq);
-				initOrUpdateDetailsEditor(ureq);				
-			}	else if (event.equals(Event.CHANGED_EVENT)){
-				// something got deleted
-				initOrUpdateToc(ureq);
-				// renew details controller
-				selectedStructure = null;
-				initOrUpdateDetailsEditor(ureq);				
-				editCtrl.setNoStructure();
-				// refresh map on deletion:
-				fireEvent(ureq, Event.CHANGED_EVENT);
-			}
-		} else if (source == editCtrl && event instanceof EPStructureEvent){
-			EPStructureEvent structureEvent = (EPStructureEvent)event;
-			if(EPStructureEvent.CHANGE.equals(structureEvent.getCommand())) {
-				PortfolioStructure structure = structureEvent.getStructure();
-				if(rootStructure.equals(structure)) {
-					rootStructure = (PortfolioStructureMap)ePFMgr.reloadPortfolioStructure(rootStructure);
-				}
-				// refresh the tree on changes!
-				tocCtrl.update(ureq, structure);
-			}
-			fireEvent(ureq, structureEvent);
-		}
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/EPTOCController.java b/src/main/java/org/olat/portfolio/ui/structel/edit/EPTOCController.java
deleted file mode 100644
index bbd45ea172c7d7f3f363f366bee006c61ffdb6e2..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/EPTOCController.java
+++ /dev/null
@@ -1,470 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel.edit;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.tree.GenericTreeNode;
-import org.olat.core.gui.components.tree.MenuTree;
-import org.olat.core.gui.components.tree.TreeDropEvent;
-import org.olat.core.gui.components.tree.TreeEvent;
-import org.olat.core.gui.components.tree.TreeModel;
-import org.olat.core.gui.components.tree.TreeNode;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.tree.TreeHelper;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.manager.EPStructureManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.EPAbstractMap;
-import org.olat.portfolio.model.structel.EPPage;
-import org.olat.portfolio.model.structel.EPStructureElement;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.ui.structel.EPAddElementsController;
-import org.olat.portfolio.ui.structel.EPArtefactClicked;
-import org.olat.portfolio.ui.structel.EPStructureChangeEvent;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * Controller shows a TOC (table of content) of the given PortfolioStructure
- * elements can be moved around by d&d
- * 
- * <P>
- * Initial Date:  13.09.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPTOCController extends BasicController {
-
-	protected static final String ARTEFACT_NODE_CLICKED = "artefactNodeClicked";
-	private static final String DELETE_LINK_CMD = "delete";
-	private static final String ROOT_NODE_IDENTIFIER = "rootStruct";
-	@Autowired
-	private EPFrontendManager ePFMgr;
-	@Autowired
-	private EPStructureManager eSTMgr;
-	protected PortfolioStructureMap rootNode;
-	protected final EPSecurityCallback secCallback;
-	private MenuTree treeCtr;
-	private VelocityContainer tocV;
-	private PortfolioStructure structureClicked;
-	private AbstractArtefact artefactClicked;
-	
-	protected final Map<Long,String> idToPath = new HashMap<>();
-	protected final Map<String,PortfolioStructure> pathToStructure = new HashMap<>();
-	private EPAddElementsController addElCtrl;
-	private Link delButton;
-
-	public EPTOCController(UserRequest ureq, WindowControl wControl, PortfolioStructure selectedEl, 
-			PortfolioStructureMap rootNode, EPSecurityCallback secCallback) {
-		super(ureq, wControl);
-		this.secCallback = secCallback;
-		tocV = createVelocityContainer("toc");
-		this.rootNode = rootNode;
-		TreeModel treeModel = buildTreeModel();
-		treeCtr = new MenuTree("toc");
-		treeCtr.setTreeModel(treeModel);
-		treeCtr.setSelectedNode(treeModel.getRootNode());
-		treeCtr.setDragEnabled(true);
-		treeCtr.setDropEnabled(true);
-		treeCtr.setDropSiblingEnabled(true);
-		treeCtr.setDndAcceptJSMethod("treeAcceptDrop_portfolio");
-		treeCtr.addListener(this);
-		treeCtr.setRootVisible(true);
-
-		tocV.put("tocTree", treeCtr);		
-		delButton = LinkFactory.createCustomLink("deleteButton", DELETE_LINK_CMD, translate("delete"), Link.NONTRANSLATED, tocV, this);
-		delButton.setTooltip(translate("deleteButton"));
-		delButton.setIconLeftCSS("o_icon o_icon_delete");
-		tocV.put("deleteButton", delButton);		
-
-		if(selectedEl == null) {
-			refreshAddElements(ureq, rootNode);
-		} else {
-			TreeNode selectedNode = TreeHelper.findNodeByUserObject(selectedEl, treeModel.getRootNode());
-			if(selectedNode != null) {
-				structureClicked = selectedEl;
-				treeCtr.setSelectedNode(selectedNode);
-				refreshAddElements(ureq, selectedEl);
-			}
-		}
-		
-		putInitialPanel(tocV);
-	}
-	
-	
-	public void update(UserRequest ureq, PortfolioStructure structure) {
-		reloadTreeModel(structure);
-		refreshAddElements(ureq, structure);
-	}
-	
-	protected void refreshTree(PortfolioStructureMap root) {
-		this.rootNode = root;
-		reloadTreeModel(root);
-	}
-	
-	/**
-	 * refreshing the add elements link to actual structure
-	 * @param ureq
-	 * @param struct maybe null -> hiding the add-button
-	 */
-	private void refreshAddElements(UserRequest ureq, PortfolioStructure struct){
-		tocV.remove(tocV.getComponent("addElement"));
-		removeAsListenerAndDispose(addElCtrl);
-		if (struct != null){
-			addElCtrl = new EPAddElementsController(ureq, getWindowControl(), struct);
-			if (struct instanceof EPPage) {
-				if(secCallback.canAddStructure()) {
-					addElCtrl.setShowLink(EPAddElementsController.ADD_STRUCTUREELEMENT);
-				}
-				if(secCallback.canAddArtefact()) {
-					addElCtrl.setShowLink(EPAddElementsController.ADD_ARTEFACT);
-				}
-			} else if (struct instanceof EPAbstractMap) {
-				if(secCallback.canAddPage()) {
-					addElCtrl.setShowLink(EPAddElementsController.ADD_PAGE);
-				}
-			} else { // its a structure element
-				if(secCallback.canAddArtefact()) {
-					addElCtrl.setShowLink(EPAddElementsController.ADD_ARTEFACT);
-				}
-			}
-			listenTo(addElCtrl);
-			tocV.put("addElement", addElCtrl.getInitialComponent());
-		}		
-	}
-	
-	private void reloadTreeModel(PortfolioStructure oldStruct, PortfolioStructure newStruct) {
-		if(oldStruct != null && newStruct != null && oldStruct.equals(newStruct)) {
-			newStruct = null;//only 1 reload
-		}
-		if(oldStruct != null ) {
-			reloadTreeModel(oldStruct);
-		}
-		if(newStruct != null) {
-			reloadTreeModel(newStruct);
-		}
-	}
-	
-	private void reloadTreeModel(PortfolioStructure struct) {
-		EPTOCTreeModel model = (EPTOCTreeModel)treeCtr.getTreeModel();
-		if(struct != null) {
-			GenericTreeNode node = (GenericTreeNode)TreeHelper.findNodeByUserObject(struct, model.getRootNode());
-			if(node != null) {
-				node.setTitle(struct.getTitle());
-				node.setUserObject(struct);
-				model.loadChildNode(struct, node);
-			}
-		}
-	}
-	
-	private TreeModel buildTreeModel() {
-		idToPath.put(rootNode.getKey(), "/" + ROOT_NODE_IDENTIFIER);
-		return new EPTOCTreeModel(rootNode, translate("toc.root"));
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		if (source instanceof Link) {
-			Link link = (Link) source;
-			if (link.getCommand().equals(DELETE_LINK_CMD)) {
-				if (artefactClicked != null) {
-					AbstractArtefact artefact = artefactClicked;
-					PortfolioStructure parentStruct = getArtefactParentStruct(artefactClicked);
-					ePFMgr.removeArtefactFromStructure(artefact, parentStruct);
-					// refresh the view
-					fireEvent(ureq, Event.CHANGED_EVENT);
-				} else if (structureClicked != null) {
-					if ((structureClicked instanceof EPPage)
-							&& !(structureClicked instanceof EPAbstractMap)) {
-						PortfolioStructure ps = structureClicked;
-						while (ePFMgr.loadStructureParent(ps) != null) {
-							ps = ePFMgr.loadStructureParent(ps);
-						}
-						int childPages = ePFMgr.countStructureChildren(ps);
-						if (childPages > 1) {
-							eSTMgr.removeStructureRecursively(structureClicked);
-							// refresh the view
-							fireEvent(ureq, Event.CHANGED_EVENT);
-						} else {
-							showError("last.page.not.deletable");
-						}
-					} else if(structureClicked instanceof EPStructureElement 
-							&& !(structureClicked instanceof EPAbstractMap)) {
-						//structures should always be deletable
-						eSTMgr.removeStructureRecursively(structureClicked);
-						// refresh the view
-						fireEvent(ureq, Event.CHANGED_EVENT);
-					} else {
-						showInfo("element.not.deletable");
-					}
-				}
-			}
-		} else if (source == treeCtr) {
-			if(event instanceof TreeEvent) {
-				TreeEvent te = (TreeEvent)event;
-				if(MenuTree.COMMAND_TREENODE_CLICKED.equals(te.getCommand())) {
-					doSelectTreeElement(ureq, te);
-				}
-			} else if(event instanceof TreeDropEvent) {
-				TreeDropEvent te = (TreeDropEvent)event;
-				doDrop(ureq, te.getDroppedNodeId(), te.getTargetNodeId(), te.isAsChild());
-			}
-		}
-	}
-	
-	private void doSelectTreeElement(UserRequest ureq, TreeEvent te) {
-		TreeNode selectedNode = treeCtr.getTreeModel().getNodeById(te.getNodeId());
-		Object userObj = selectedNode.getUserObject();
-		if (userObj instanceof PortfolioStructure){
-			//structure clicked
-			structureClicked = (PortfolioStructure)userObj;
-			refreshAddElements(ureq, structureClicked);
-			delButton.setVisible(true);
-			//send event to load this page
-			fireEvent(ureq, new EPStructureChangeEvent(EPStructureChangeEvent.SELECTED, structureClicked));
-		} else if (userObj instanceof AbstractArtefact) {
-			//artefact clicked
-			Object parentObj = ((TreeNode)selectedNode.getParent()).getUserObject();
-			if(parentObj instanceof PortfolioStructure) {
-				artefactClicked = (AbstractArtefact)userObj;
-				PortfolioStructure structure = (PortfolioStructure)parentObj;
-				refreshAddElements(ureq, null);
-				delButton.setVisible(true);
-				fireEvent(ureq, new EPArtefactClicked(ARTEFACT_NODE_CLICKED, structure));
-			}
-		} else {
-			// root tree node clicked, no add/delete link
-			delButton.setVisible(false);
-			refreshAddElements(ureq, null);
-			fireEvent(ureq, new Event(ARTEFACT_NODE_CLICKED));
-		}
-	}
-	
-	private void doDrop(UserRequest ureq, String droppedNodeId, String targetNodeId, boolean asChild) {
-		TreeNode droppedNode = treeCtr.getTreeModel().getNodeById(droppedNodeId);
-		TreeNode targetNode = treeCtr.getTreeModel().getNodeById(targetNodeId);
-		if(droppedNode == null || targetNode == null) return;
-		
-		Object droppedObj = droppedNode.getUserObject();
-		Object droppedParentObj = null;
-		if(droppedNode.getParent() != null) {
-			droppedParentObj = ((TreeNode)droppedNode.getParent()).getUserObject();
-		}
-		Object targetObj = targetNode.getUserObject();
-		Object targetParentObj = null;
-		if(targetNode.getParent() != null) {
-			targetParentObj = ((TreeNode)targetNode.getParent()).getUserObject();
-		}
-
-		if (droppedObj instanceof AbstractArtefact) {
-			AbstractArtefact artefact = (AbstractArtefact)droppedObj;
-			if (checkArtefactTarget(artefact, targetObj)){
-				moveArtefactToNewParent(ureq, artefact, droppedParentObj, targetObj);
-			} else if(targetParentObj != null && targetParentObj.equals(droppedParentObj)) {
-				reorder(ureq, artefact, (TreeNode)targetNode.getParent(), targetObj);
-			}
-		} else if (droppedObj instanceof PortfolioStructure) {
-			PortfolioStructure droppedStruct = (PortfolioStructure)droppedObj;
-			if (checkStructureTarget(droppedStruct, droppedParentObj, targetObj, targetParentObj, asChild)) {
-				if(asChild) {
-					int newPos = TreeHelper.indexOfByUserObject(targetObj, (TreeNode)targetNode.getParent());
-					moveStructureToNewParent(ureq, droppedStruct, droppedParentObj, targetObj, newPos);
-				} else if(droppedParentObj != null && targetParentObj != null && droppedParentObj.equals(targetParentObj)) {
-					int newPos = TreeHelper.indexOfByUserObject(targetObj, (TreeNode)targetNode.getParent());
-					moveStructureToNewParent(ureq, droppedStruct, droppedParentObj, targetParentObj, newPos);
-				} else {
-					int newPos = TreeHelper.indexOfByUserObject(targetObj, (TreeNode)targetNode.getParent());
-					moveStructureToNewParent(ureq, droppedStruct, droppedParentObj, targetParentObj, newPos);
-				}
-			}
-		}
-	}
-	
-	private boolean checkArtefactTarget(AbstractArtefact artefact, Object  targetObj) {
-		PortfolioStructure newParStruct;
-		if (targetObj instanceof EPAbstractMap ) {
-			return false;
-		} else if(targetObj instanceof PortfolioStructure) {
-			newParStruct = (PortfolioStructure)targetObj;
-		} else {
-			return false;
-		}
-
-		boolean sameTarget = ePFMgr.isArtefactInStructure(artefact, newParStruct);
-		if (sameTarget) {
-			return false;
-		}
-		return true;
-	}
-	
-	// really do the move!
-	private boolean moveArtefactToNewParent(UserRequest ureq, AbstractArtefact artefact, Object oldParent, Object newParent){
-		if(!(oldParent instanceof PortfolioStructure) || !(newParent instanceof PortfolioStructure)) {
-			return false;
-		}
-
-		try {
-			PortfolioStructure oldParStruct = (PortfolioStructure)oldParent;
-			PortfolioStructure newParStruct = (PortfolioStructure)newParent;
-			
-			if(ePFMgr.moveArtefactFromStructToStruct(artefact, oldParStruct, newParStruct)) {
-				reloadTreeModel(oldParStruct, newParStruct);
-				fireEvent(ureq, new EPMoveEvent());
-				return true;
-			}
-		} catch (Exception e) {
-			logError("could not load artefact, old and new parent", e);
-		}
-		return false;
-	}
-	
-	private boolean reorder(UserRequest ureq, AbstractArtefact artefact, TreeNode parentNode, Object target){
-		Object parentObj = parentNode.getUserObject();
-		if(!(parentObj instanceof PortfolioStructure)) {
-			return false;
-		}
-		
-		int position = TreeHelper.indexOfByUserObject(target, parentNode);
-		int current = TreeHelper.indexOfByUserObject(artefact, parentNode);
-		if(current == position) {
-			return false;//nothing to do
-		} else {
-			position++;//drop after
-		}
-
-		try {
-			PortfolioStructure parStruct = (PortfolioStructure)parentObj;
-			//translate in the position in the list of artefacts
-			int numOfChildren = ePFMgr.countStructureChildren(parStruct);
-			position = position - numOfChildren;
-			if(position < 0) {
-				position = 0;
-			}
-			
-			if(ePFMgr.moveArtefactInStruct(artefact, parStruct, position)) {
-				reloadTreeModel(parStruct, null);
-				fireEvent(ureq, new EPMoveEvent());
-				return true;
-			}
-		} catch (Exception e) {
-			logError("could not load artefact, old and new parent", e);
-		}
-		return false;
-	}
-	
-	private boolean checkStructureTarget(PortfolioStructure droppedObj, Object droppedParentObj,
-			Object targetObj, Object targetParentObj, boolean asChild) {
-		
-		if(targetObj == null || droppedParentObj == null) {
-			return false;
-		}
-		if (droppedParentObj != null && droppedParentObj.equals(targetParentObj)) {
-			return true; // seems only to be a move in order
-		}
-		
-		if(asChild) {
-			if (droppedParentObj != null && droppedParentObj.equals(targetParentObj)) {
-				return true; // seems only to be a move in order
-			}
-			if (droppedObj instanceof EPPage && targetObj instanceof EPPage) {
-				return false;
-			}
-			if (droppedObj instanceof EPStructureElement && !(targetObj instanceof EPPage)) {
-				return false;
-			}
-		} else {
-			
-			if (droppedObj instanceof EPPage && targetParentObj instanceof EPPage) {
-				return false;
-			}
-			if (droppedObj instanceof EPStructureElement && !(targetParentObj instanceof EPPage)) {
-				return false;
-			}
-		}
-		return true;
-	}
-	
-	private boolean moveStructureToNewParent(UserRequest ureq, PortfolioStructure structToBeMvd,
-			Object oldParent, Object newParent, int newPos) {
-		
-		if(oldParent instanceof PortfolioStructure && newParent instanceof PortfolioStructure) {
-			PortfolioStructure oldParStruct = (PortfolioStructure)oldParent;
-			PortfolioStructure newParStruct = (PortfolioStructure)newParent;
-			if (oldParStruct.equals(newParStruct)) {
-				// this is only a position move
-				if(ePFMgr.moveStructureToPosition(structToBeMvd, newPos)) {
-					reloadTreeModel(structToBeMvd, null);
-					fireEvent(ureq, new EPMoveEvent());
-					return true;
-				}
-			} else if(ePFMgr.moveStructureToNewParentStructure(structToBeMvd, oldParStruct, newParStruct, newPos)) {
-				reloadTreeModel(oldParStruct, newParStruct);
-				fireEvent(ureq, new EPMoveEvent());
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		if (source == addElCtrl){
-			// refresh the view, this is a EPStructureChangeEvent
-			fireEvent(ureq, event);	
-		}
-	}
-	
-	private PortfolioStructure getArtefactParentStruct(AbstractArtefact artefact) {
-		TreeNode artefactNode = TreeHelper.findNodeByUserObject(artefact, treeCtr.getTreeModel().getRootNode());
-		if(artefactNode != null && artefactNode.getParent() != null) {
-			Object parentObj = ((TreeNode)artefactNode.getParent()).getUserObject();
-			if(parentObj instanceof PortfolioStructure) {
-				return (PortfolioStructure)parentObj;
-			}
-		}
-
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		//
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/EPTOCTreeModel.java b/src/main/java/org/olat/portfolio/ui/structel/edit/EPTOCTreeModel.java
deleted file mode 100644
index 9203c1cd174d2b179ffcdb9bc5f3b6f1e57c4511..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/EPTOCTreeModel.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel.edit;
-
-import java.util.List;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.gui.components.tree.DnDTreeModel;
-import org.olat.core.gui.components.tree.GenericTreeModel;
-import org.olat.core.gui.components.tree.GenericTreeNode;
-import org.olat.core.gui.components.tree.TreeNode;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.EPAbstractMap;
-import org.olat.portfolio.model.structel.EPPage;
-import org.olat.portfolio.model.structel.EPStructureElement;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-
-/**
- * 
- * Initial date: 26.03.2013<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public class EPTOCTreeModel extends GenericTreeModel implements DnDTreeModel {
-
-	private static final long serialVersionUID = 7389921072899475506L;
-	
-	private final EPFrontendManager ePFMgr;
-	private final PortfolioStructureMap map;
-	
-	public EPTOCTreeModel(PortfolioStructureMap map, String tocLabel) {
-		ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-		this.map = map;
-
-		GenericTreeNode rootNode = new GenericTreeNode("toc", tocLabel, null);
-		rootNode.setIconCssClass("o_st_icon");
-		loadNode(map, rootNode);
-		setRootNode(rootNode);
-	}
-	
-	protected void reload() {
-		getRootNode().removeAllChildren();
-		loadNode(map, getRootNode());
-	}
-	
-	private GenericTreeNode loadNode(PortfolioStructure structure, TreeNode parentNode) {
-		String ident = structure.getKey().toString();
-		GenericTreeNode structureNode = new GenericTreeNode(ident, structure.getTitle(), structure);
-		structureNode.setIconCssClass(structure.getIcon());
-		parentNode.addChild(structureNode);
-		loadChildNode(structure, structureNode);
-		return structureNode;
-	}
-	
-	protected void loadChildNode(PortfolioStructure structure, TreeNode structureNode) {
-		structureNode.removeAllChildren();
-		
-		List<PortfolioStructure> structs = ePFMgr.loadStructureChildren(structure);
-		for (PortfolioStructure portfolioStructure : structs) {
-			loadNode(portfolioStructure, structureNode);
-		}
-		
-		List<AbstractArtefact> artList = ePFMgr.getArtefacts(structure);
-		for (AbstractArtefact artefact : artList) {
-			String artefactIdent = structureNode.getIdent() + artefact.getKey().toString();
-			GenericTreeNode artefactNode = new GenericTreeNode(artefactIdent, artefact.getTitle(), artefact);
-			artefactNode.setIconCssClass("o_icon o_ep_artefact " + artefact.getIcon());
-			structureNode.addChild(artefactNode);
-		}
-	}
-
-	@Override
-	public boolean isNodeDroppable(TreeNode node) {
-		return !getRootNode().getIdent().equals(node.getIdent());
-	}
-
-	@Override
-	public boolean isNodeDraggable(TreeNode node) {
-		return !getRootNode().getIdent().equals(node.getIdent())
-				&& !getRootNode().getIdent().equals(node.getParent().getIdent()) ;
-	}
-
-	/**
-	 * The check is done in javascript, the purpose of this method is only
-	 * historically and for analyse
-	 * 
-	 * @deprecated
-	 * @param droppedNode
-	 * @param targetNode
-	 * @param sibling
-	 * @return
-	 */
-	public boolean canDrop(TreeNode droppedNode, TreeNode targetNode, boolean sibling) {
-		Object droppedObj = droppedNode.getUserObject();
-		Object droppedParentObj = null;
-		if(droppedNode.getParent() != null) {
-			droppedParentObj = ((TreeNode)droppedNode.getParent()).getUserObject();
-		}
-		
-		Object targetParentObj = null;
-		if(targetNode.getParent() != null) {
-			targetParentObj = ((TreeNode)targetNode.getParent()).getUserObject();
-		}
-
-		Object targetObj = targetNode.getUserObject();
-		if (droppedObj instanceof AbstractArtefact) {
-			AbstractArtefact droppedArtefact = (AbstractArtefact)droppedObj;
-			if (checkArtefactTarget(droppedParentObj, droppedArtefact, targetObj, targetParentObj, sibling)) {
-				return true;
-			} else if(droppedParentObj.equals(targetObj)) {	
-				return true;
-			} else {	
-				return false;
-			}
-		} else if (droppedObj instanceof PortfolioStructure) {
-			PortfolioStructure droppedStructure = (PortfolioStructure)droppedObj;
-			if (checkStructureTarget(droppedParentObj, droppedStructure, targetObj, targetParentObj, sibling)) {
-				return true;
-			} else {				
-				return false;
-			}
-		} else {
-			return false;
-		}
-	}
-	
-	private boolean checkArtefactTarget(Object droppedParentObj, AbstractArtefact artefact,
-			Object targetObj, Object targetParentObj, boolean sibling) {
-		PortfolioStructure newParStruct;
-		if (targetObj instanceof EPAbstractMap ) {
-			return false;
-		} else if(targetObj instanceof PortfolioStructure) {
-			newParStruct = (PortfolioStructure)targetObj;
-		} else if (sibling) {
-			if(targetObj instanceof AbstractArtefact && targetParentObj instanceof PortfolioStructure) {
-				if(droppedParentObj != null && droppedParentObj.equals(targetParentObj)) {
-					return true; //reorder
-				} else {
-					newParStruct = (PortfolioStructure)targetParentObj;
-				}
-			} else {
-				return false;
-			}
-		} else {
-			return false;
-		}
-
-		boolean sameTarget = ePFMgr.isArtefactInStructure(artefact, newParStruct);
-		if (sameTarget) {
-			return false;
-		}
-		return true;
-	}
-	
-	private boolean checkStructureTarget(Object droppedParentObj, PortfolioStructure droppedStructure,
-			Object targetObj, Object targetParentObj, boolean sibling){
-	
-		if(targetObj == null || droppedParentObj == null) {
-			return false;
-		}
-
-		if(sibling) {
-			if(targetParentObj instanceof PortfolioStructure) {
-				if(droppedParentObj != null && targetParentObj != null && droppedParentObj.equals(targetParentObj)) {
-					return true; //reorder
-				} else {
-					return false;
-				}
-			}
-		} else {
-			if (droppedParentObj.equals(targetObj)) {
-				return true; // seems only to be a move in order
-			}
-			if (droppedStructure instanceof EPPage && targetObj instanceof EPPage) {
-				return false;
-			}
-			if (droppedStructure instanceof EPStructureElement && !(targetObj instanceof EPPage)) {
-				return false;
-			}
-		}
-		return true;
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/_content/editor.html b/src/main/java/org/olat/portfolio/ui/structel/edit/_content/editor.html
deleted file mode 100644
index 9cd7fb5379c202bd7dc716e74d8e438e8399b358..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/_content/editor.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<div class="o_eportfolio_edit">
-	#if($templateHelp)
-		$r.contextHelpWithWrapper("Five Steps to Your Portfolio Task#_edit")
-	#else
-		$r.contextHelpWithWrapper("Personal Menu#_sammelmappe")
-	#end
-	<div class="row">
-		<div class="col-xs-12 col-sm-6">
-			<fieldset class="o_form form-horizontal" role="form">
-				<div class="form-group">
-					<label class="col-sm-3">$r.translate("map.style")</label>
-					<div class="col-sm-9">$r.render("map.style")</div>
-				</div>
-			</fieldset>
-		</div>
-	</div>
-	<div class="row">
-		<div class="col-md-4 o_ep_toc_editor">$r.render("tocCtrl")</div>
-		<div class="col-md-8 o_ep_struct_editor">$r.render("editCtrl")</div>
-	</div> 
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/_content/restrictions.html b/src/main/java/org/olat/portfolio/ui/structel/edit/_content/restrictions.html
deleted file mode 100644
index 7aa757c249f735e293b4a41ae3dfeac1cb01030c..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/_content/restrictions.html
+++ /dev/null
@@ -1,14 +0,0 @@
-#foreach($count in $counts)
-<div class="o_block">
-	<div class="form-inline">
-		$r.render("collect.restriction.restriction.$count")
-		$r.render("collect.restriction.amount.$count")
-		$r.render("collect.restriction.artefacts.$count")
-		$r.render("collect.restriction.add.$count")
-		$r.render("collect.restriction.del.$count")
-	</div>
-	#if ($r.available("collect.restriction.error.$count") && $r.visible("collect.restriction.error.$count"))
-		<div class="o_error">$r.render("collect.restriction.error.$count")</div>
-	#end
-</div>
-#end
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/_content/restrictions_msg.html b/src/main/java/org/olat/portfolio/ui/structel/edit/_content/restrictions_msg.html
deleted file mode 100644
index af2db8790a2b5bc6aa4f7e2ff89125358f42e44f..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/_content/restrictions_msg.html
+++ /dev/null
@@ -1,18 +0,0 @@
-#if($messages)
-<div class="panel-group" id="o_ep_restrictions_$restrictionId">
-	<div class="panel #if($restrictionsPassed) panel-success #else panel-warning #end">
-    	<div class="panel-heading">
-      		<h4 class="panel-title">
-       			 <a data-toggle="collapse" data-parent="#o_ep_restrictions_$restrictionId" href="#collapseMessages_$restrictionId">$r.translate("collect.restriction")</a>
-      		</h4>
-    	</div>
-		<div id="collapseMessages_$restrictionId" class="panel-collapse collapse">
-			<div class="panel-body">
-			#foreach($message in $messages)
-				<p>$message</p>
-			#end
-			</div>
-		</div>
-	</div>
-</div>
-#end
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/_content/toc.html b/src/main/java/org/olat/portfolio/ui/structel/edit/_content/toc.html
deleted file mode 100644
index 4f3203701d19fa77dd61d83384a03ea762fb4956..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/_content/toc.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="o_eportfolio_toolbar o_toolbar">
-	$r.render("deleteButton")
-	#if($r.available("addElement")) 
- 		$r.render("addElement") 
-	#end
-</div>
-$r.render("tocTree")
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_de.properties
deleted file mode 100644
index e73a381624deee48c3c16d99ac98442891741836..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1,42 +0,0 @@
-collect.restriction=Einschr\u00e4nkungen
-collect.restriction.add=+
-collect.restriction.delete=-
-collect.restriction.duplicate.type=F\u00fcr diesen Artefakt-Typ existiert bereits eine Einschr\u00e4nkung!
-collect.restriction.incomplete=Bitte alle Felder der Einschr\u00e4nkung ausf\u00fcllen.
-toc.root=Inhaltsverzeichnis
-move.artefact.error.target=An dieser Stelle kann kein Artefakt abgelegt werden.
-move.artefact.error.move=Das Artefakt konnte nicht an die gew\u00fcnschte Stelle verschoben werden.
-move.error.title=Fehler beim Verschieben
-move.struct.error.target=Dieses Element darf nicht an dieser Stelle platziert werden.
-move.struct.error.move=Das Verschieben war nicht erfolgreich.
-deleteButton=L\u00f6schen
-element.not.deletable=Dieses Element kann nicht gel\u00f6scht werden.
-last.page.not.deletable=Eine Mappe muss mindestens eine Seite enthalten.
-restriction.max=h\u00f6chstens
-restriction.min=mindestens
-restriction.equal=genau
-restriction.error=Sie m\u00FCssen {0} {2} Artefakt(e) vom Typ {1} sammeln.
-restriction.handler.unknown=unbekannter Typ
-struct.title=Titel
-struct.description=Beschreibung
-save=Speichern
-no.edit.info=Sie haben ein Artefakt oder kein Element ausgew\u00e4hlt. W\u00e4hlen Sie links im Baum diejenige Struktur, welche Sie editieren m\u00f6chten. Die Daten eines Artefakts bearbeiten Sie unter "Home - Meine Artefakte".
-no.edit.info.label=Hinweis
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-view.mode=Artefakt-Darstellung
-view.mode.miniview=Miniatur-Ansicht
-view.mode.table=Tabelle
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_en.properties
deleted file mode 100644
index 3d88c1e4157dc92e5b794d0566f308ea871c3d28..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,39 +0,0 @@
-#Tue Apr 10 10:34:50 CEST 2012
-
-
-
-
-
-
-
-
-
-
-
-collect.restriction=Restrictions
-collect.restriction.add=+
-collect.restriction.delete=-
-collect.restriction.duplicate.type=There is already a restriction for this type of artefact.
-collect.restriction.incomplete=Please fill every input field for this restriction.
-deleteButton=Delete
-element.not.deletable=This element can't be deleted.
-last.page.not.deletable=A folder has to contain at least one page.
-move.artefact.error.move=Your artefact couldn't be moved to the position required.
-move.artefact.error.target=You can't put any artefacts at this position.
-move.error.title=Error while moving
-move.struct.error.move=Moving not successful.
-move.struct.error.target=This element mustn't be put at that position.
-no.edit.info=You haven't selected any artefact or element yet. Please choose the structure to be edited in the tree on your left. Artefact data can be edited in your Home, section "My artefacts."
-no.edit.info.label=Hint
-restriction.equal=equal
-restriction.error=You have to collect {0} {2} artefact(s) of the type {1}.
-restriction.handler.unknown=Type unknown
-restriction.max=max.
-restriction.min=min.
-save=Save
-struct.description=Description
-struct.title=Title
-toc.root=Table of contents
-view.mode=Display of artefact
-view.mode.miniview=Thumbnails
-view.mode.table=Table
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index a3bd58054acca775f31ffbf6dbd49fa6355ff0af..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,39 +0,0 @@
-#Mon Oct 22 16:59:15 CEST 2012
-
-
-
-
-
-
-
-
-
-
-
-collect.restriction=Limitations
-collect.restriction.add=+
-collect.restriction.delete=-
-collect.restriction.duplicate.type=Il existe d\u00E9j\u00E0 une restriction pour ce type d'artefact\!
-collect.restriction.incomplete=Veuillez remplir tous les champs de la restriction, s'il vous pla\u00EEt .
-deleteButton=\u00C9liminer
-element.not.deletable=Cet \u00E9l\u00E9ment ne peut pas \u00EAtre \u00E9limin\u00E9.
-last.page.not.deletable=Un classeur doit contenir au moins une page.
-move.artefact.error.move=L'artefact n'a pas \u00E9t\u00E9 d\u00E9plac\u00E9 vers la position d\u00E9sir\u00E9e.
-move.artefact.error.target=\u00C0 cet endroit, il est impossible de d\u00E9poser un artefact.
-move.error.title=Erreur durant le d\u00E9placement
-move.struct.error.move=Le d\u00E9placement n'a pas fonctionn\u00E9.
-move.struct.error.target=Cet \u00E9l\u00E9ment ne peut pas \u00EAtre plac\u00E9 \u00E0 cet endroit.
-no.edit.info=Vous avez s\u00E9lectionn\u00E9 un artefact ou aucun \u00E9l\u00E9ment. S\u00E9lectionnez dans l'arbre \u00E0 droite la structure que vous souhaitez \u00E9diter. Vous pouvez \u00E9diter les donn\u00E9es d'un artefact sur votre page d'accueil sous "ePortfolio - Mes artefacts".
-no.edit.info.label=Remarque
-restriction.equal=exactement
-restriction.error=Vous devez recueillir {0} {2} artefacts de type {1}.
-restriction.handler.unknown=type inconnu
-restriction.max=maximum
-restriction.min=minimum
-save=Enregistrer
-struct.description=Description
-struct.title=Titre
-toc.root=Indice du contenu
-view.mode=Affichage artefact
-view.mode.miniview=Miniature
-view.mode.table=Tableau
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_it.properties
deleted file mode 100644
index 5d07a481bc41fd3f52357a9d56c9693878fe5eff..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_it.properties
+++ /dev/null
@@ -1,28 +0,0 @@
-#Thu Jun 23 08:57:33 CEST 2016
-collect.restriction=Limitazioni
-collect.restriction.add=+
-collect.restriction.delete=-
-collect.restriction.duplicate.type=Esiste gi\u00E0 una restrizione per questo tipo di artefatto\!
-collect.restriction.incomplete=Compilare tutti i campi per questa restrizione.
-deleteButton=Eliminare
-element.not.deletable=Questo elemento non pu\u00F2 essere eliminato.
-last.page.not.deletable=Un raccoglitore deve contenere almeno una pagina.
-move.artefact.error.move=L'artefatto non \u00E8 stato spostato nella posizione desiderata.
-move.artefact.error.target=In questo luogo non \u00E8 possibile depositare un artefatto.
-move.error.title=Errore durante lo spostamento
-move.struct.error.move=Lo spostamento non \u00E8 riuscito.
-move.struct.error.target=Questo elemento non pu\u00F2 essere collocato in questo luogo.
-no.edit.info=Ha selezionato un artefatto o nessun elemento. Selezioni nell'albero a sinistra la struttura che intende editare. Pu\u00F2 editare i dati di un artefatto nella sua pagina iniziale sotto "ePortfolio - I miei artefatti".
-no.edit.info.label=Avvertenza
-restriction.equal=esattamente
-restriction.error=Deve raccogliere {0} {2} artefatti di tipo {1}.
-restriction.handler.unknown=tipo sconosciuto
-restriction.max=al massimo
-restriction.min=al minimo
-save=Salvare
-struct.description=Descrizione
-struct.title=Titolo
-toc.root=Indice del contenuto
-view.mode=Visualizzazione artefatto
-view.mode.miniview=Miniatura
-view.mode.table=Tabella
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_jp.properties
deleted file mode 100644
index 40f45c94c014bbc8c21dcb3b3609157933d2d7a0..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_jp.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-#Thu Sep 08 16:42:39 CEST 2011
-
-
-
-
-
-
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_nl_NL.properties
deleted file mode 100644
index 4f84f633264f761dabce4a42e32ddb34f0a9862d..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_nl_NL.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-#Thu Sep 08 16:42:47 CEST 2011
-
-
-
-
-
-
-
-
-
-
-
-collect.restriction=Restricties
-collect.restriction.add=+
-collect.restriction.delete=-
-deleteButton=Verwijderen
-element.not.deletable=Dit element kan niet verwijderd worden.
-last.page.not.deletable=Een map moet ten minste \u00E9\u00E9n pagina bevatten.
-move.artefact.error.move=Uw artefact kon niet verplaatst worden naar de gewenste positie.
-move.artefact.error.target=U kan geen artefacten plaatsen in deze positie.
-move.error.title=Fout opgetreden tijdens het verplaatsen
-move.struct.error.move=Verplaatsing niet succesvol.
-move.struct.error.target=Dit element moet niet op deze positie staan.
-no.edit.info=U hebt nog geen artefact of element geselecteerd. Gelieve een structuur te kiezen om aan te passen in de boom aan uw linkerkant. Artefact datakan aangepast worden in uw Home, sectie "Mijn artefacten".
-no.edit.info.label=Hint
-restriction.equal=gelijk
-restriction.error=U moet {0} {2} artefacten van het type {1} verzamelen.
-restriction.handler.unknown=Type onbekend
-restriction.max=max.
-restriction.min=min.
-save=Opslaan
-struct.description=Beschrijving
-struct.title=Titel
-toc.root=Inhoudstafel
-view.mode=Artefacten display
-view.mode.miniview=Duimspijkers
-view.mode.table=Tabel
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_pl.properties
deleted file mode 100644
index ef0bda62d11333579d81bbc8b44234e655f047bf..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_pl.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-#Thu Sep 08 16:42:41 CEST 2011
-collect.restriction=Ograniczenia
-collect.restriction.add=+
-collect.restriction.delete=-
-deleteButton=Usu\u0144
-element.not.deletable=Nie mo\u017Cna usun\u0105\u0107 tego elementu.
-last.page.not.deletable=Folder powinien zawiera\u0107 przynajmniej jedn\u0105 stron\u0119.
-move.artefact.error.move=Tw\u00F3j artefakt nie mo\u017Ce zosta\u0107 przesuni\u0119ty w wymagane miejsce.
-move.artefact.error.target=Nie mo\u017Cesz umieszcza\u0107 artefakt\u00F3w w tym miejscu.
-move.error.title=B\u0142\u0105d przy przenoszeniu
-move.struct.error.move=Przenoszenie nie powiod\u0142o si\u0119.
-move.struct.error.target=Nie mo\u017Cna umie\u015Bci\u0107 wybranego elementu w tym miejscu.
-no.edit.info=Nie wybra\u0142e\u015B jeszcze \u017Cadnego artefaktu lub elementu. Wybierz struktur\u0119 do edycji z drzewa po lewej. Artefakty mo\u017Cna edytowa\u0107 z poziomu Strony domowej, w sekcji "Moje artefakty".
-no.edit.info.label=Podpowied\u017A
-restriction.equal=r\u00F3wny
-restriction.error=Powiniene\u015B zgromadzi\u0107 {0} {2} artefakty(\u00F3w) typu {1}.
-restriction.handler.unknown=Nieznany typ
-restriction.max=maks.
-restriction.min=min.
-save=Zapisz
-struct.description=Opis
-struct.title=Tytu\u0142
-toc.root=Spis tre\u015Bci
-view.mode=Wy\u015Bwietlanie artefakt\u00F3w
-view.mode.miniview=Miniatury
-view.mode.table=Tabela
diff --git a/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_pt_BR.properties
deleted file mode 100644
index 8e39464a9b043e497262d9a39014a1a30fca93c4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/edit/_i18n/LocalStrings_pt_BR.properties
+++ /dev/null
@@ -1,39 +0,0 @@
-#Mon Apr 02 17:52:48 CEST 2012
-
-
-
-
-
-
-
-
-
-
-
-collect.restriction=Restri\u00E7\u00F5es
-collect.restriction.add=+
-collect.restriction.delete=-
-collect.restriction.duplicate.type=J\u00E1 existe uma restri\u00E7\u00E3o para este tipo de artefacto.
-collect.restriction.incomplete=Por favor, preencha todos os campos de entrada para essa restri\u00E7\u00E3o.
-deleteButton=Excluir
-element.not.deletable=Este elemento n\u00E3o pode ser exclu\u00EDdo.
-last.page.not.deletable=A pasta tem que conter pelo menos uma p\u00E1gina.
-move.artefact.error.move=Seu artefato n\u00E3o pode ser movido para a posi\u00E7\u00E3o desejada.
-move.artefact.error.target=Voc\u00EA n\u00E3o pode colocar qualquer artefato nesta posi\u00E7\u00E3o.
-move.error.title=Erro ao mover-se
-move.struct.error.move=Movimento n\u00E3o bem sucedido.
-move.struct.error.target=Este elemento n\u00E3o deve ser colocado naquela posi\u00E7\u00E3o.
-no.edit.info=Voc\u00EA n\u00E3o selecionou nenhum artefato ou elemento ainda. Por favor escolha a estrutura a ser editada no menu esquerda. Dados de artefato podem ser editados em seu Home se\u00E7\u00E3o "Meus artefatos".
-no.edit.info.label=Dica
-restriction.equal=igual
-restriction.error=Voc\u00EA tem que coletar {0} {2} artefato(s) do tipo {1}.
-restriction.handler.unknown=Tipo desconhecido
-restriction.max=max.
-restriction.min=min.
-save=Salvar
-struct.description=Descri\u00E7\u00E3o
-struct.title=T\u00EDtulo
-toc.root=Tabela de conte\u00FAdo
-view.mode=Exibi\u00E7\u00E3o do artefato
-view.mode.miniview=Miniaturas
-view.mode.table=Tabela
diff --git a/src/main/java/org/olat/portfolio/ui/structel/view/EPChangelogController.java b/src/main/java/org/olat/portfolio/ui/structel/view/EPChangelogController.java
deleted file mode 100644
index 267e57393e6e3f9fd62ac1333995755be96418de..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/view/EPChangelogController.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel.view;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import org.apache.logging.log4j.Logger;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.services.notifications.PublisherData;
-import org.olat.core.commons.services.notifications.SubscriptionContext;
-import org.olat.core.commons.services.notifications.model.SubscriptionListItem;
-import org.olat.core.commons.services.notifications.ui.ContextualSubscriptionController;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItem;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.DateChooser;
-import org.olat.core.gui.components.form.flexible.elements.FormLink;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.components.form.flexible.impl.FormEvent;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.Formatter;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.manager.EPNotificationsHandler;
-import org.olat.portfolio.manager.EPNotificationsHelper;
-import org.olat.portfolio.model.structel.EPAbstractMap;
-import org.olat.portfolio.model.structel.EPDefaultMap;
-import org.olat.portfolio.model.structel.EPMapShort;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.olat.portfolio.model.structel.EPStructuredMapTemplate;
-import org.olat.portfolio.ui.structel.EPMapKeyEvent;
-import org.olat.portfolio.ui.structel.EPStructureEvent;
-
-/**
- * 
- * Displays a changelog for the current EPMap<br />
- * ( this is the "Changelog/Änderungsprotokoll" Tab in a EPMap )
- * 
- * @author strentini, sergio.trentini@frentix.com, http://www.frentix.com
- * 
- */
-public class EPChangelogController extends FormBasicController {
-
-	private static final Logger logger = Tracing.createLoggerFor(EPChangelogController.class);
-
-	private ContextualSubscriptionController cSubscriptionCtrl;
-	private SubscriptionContext subsContext;
-	private EPAbstractMap map;
-	private DateChooser dateChooser;
-	private final EPFrontendManager ePFMgr;
-
-	public EPChangelogController(UserRequest ureq, WindowControl wControl, EPAbstractMap map) {
-		super(ureq, wControl, "changelog");
-		
-		ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-
-		this.map = map;
-		initForm(ureq);
-	}
-
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		// flc.contextPut("locale", getLocale());
-
-		/* the subscription context + component */
-		if (logger.isDebugEnabled())
-			logger.debug("creating subscriptionContext for Map: " + map.getTitle() + ", getResourceableId: ->" + map.getResourceableId() + ", key: "
-					+ map.getKey());
-		subsContext = new SubscriptionContext(EPNotificationsHandler.TYPENNAME, map.getResourceableId(), EPNotificationsHandler.TYPENNAME);
-		if (subsContext != null) {
-			String businessPath = "[EPDefaultMap:" + map.getKey() + "]";
-			PublisherData data = new PublisherData(EPNotificationsHandler.TYPENNAME, null, businessPath);
-			cSubscriptionCtrl = new ContextualSubscriptionController(ureq, getWindowControl(), subsContext, data);
-			listenTo(cSubscriptionCtrl);
-			flc.put("subscription", cSubscriptionCtrl.getInitialComponent());
-		}
-
-		/* the datechooser */
-		dateChooser = uifactory.addDateChooser("dateChooser", "news.since", null, formLayout);
-		dateChooser.setDate(new Date());
-		dateChooser.addActionListener(FormEvent.ONCHANGE);
-
-		/* display the changelog */
-		updateChangelogDisplay();
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.form.flexible.FormItem,
-	 *      org.olat.core.gui.components.form.flexible.impl.FormEvent)
-	 */
-	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
-		if (source == dateChooser && !dateChooser.hasError()) {
-			updateChangelogDisplay();
-		} else if (source instanceof FormLink) {
-			fireEvent(ureq, new EPMapKeyEvent(EPStructureEvent.SELECT, getKeyFromFormLink((FormLink) source)));
-		}
-	}
-
-	/**
-	 * gets the userObject from the given FormLink and tries to parse it as
-	 * Long. returns 0L if userObject cannot be parsed to Long
-	 * 
-	 * @param link
-	 * @return
-	 */
-	private Long getKeyFromFormLink(FormLink link) {
-		Long mapKeyFromLink = 0L;
-		try {
-			Object userObject = link.getUserObject();
-			if (userObject != null) {
-				mapKeyFromLink = Long.parseLong(userObject.toString());
-			}
-		} catch (NumberFormatException e) {
-			// key is not Long, ignore and return 0
-		}
-		return mapKeyFromLink;
-	}
-
-	/**
-	 * update the changelog-list according to selected date. this method is
-	 * invoked on initForm and again when user changes date in dateChooser
-	 */
-	private void updateChangelogDisplay() {
-		// init the helper;
-		String path = getWindowControl().getBusinessControl().getAsString();
-		EPNotificationsHelper helper = new EPNotificationsHelper(path, getLocale());
-
-		// get the date from the dateChooser component
-		Date compareDate = dateChooser.getDate();
-		EPMapShort mapShort = ePFMgr.loadMapShortByResourceId(map.getOlatResource().getResourceableId());
-		List<SubscriptionListItem> allItems = new ArrayList<>(0);
-		// get subscriptionListItems according to map type
-		if (map instanceof EPDefaultMap || map instanceof EPStructuredMapTemplate) {
-			allItems = helper.getAllSubscrItemsDefault(compareDate, mapShort);
-		} else if (map instanceof EPStructuredMap) {
-			allItems = helper.getAllSubscrItemsStructured(compareDate, mapShort);
-		}
-
-		List<SubscriptionItemBundle> bundles = getItemBundlesForSubscriptionItems(allItems);
-		flc.contextPut("subscriptionItems", bundles);
-	}
-
-	/**
-	 * 
-	 * @param subscriptionItems
-	 * @return
-	 */
-	private List<SubscriptionItemBundle> getItemBundlesForSubscriptionItems(List<SubscriptionListItem> subscriptionItems) {
-		List<SubscriptionItemBundle> bundles = new ArrayList<>();
-		Formatter f = Formatter.getInstance(getTranslator().getLocale());
-
-		for (int i = 0; i < subscriptionItems.size(); i++) {
-			SubscriptionListItem listItem = subscriptionItems.get(i);
-			SubscriptionItemBundle bundle = new SubscriptionItemBundle();
-			bundle.setDateString(f.formatDate(listItem.getDate()));
-			String linkName = "subscrIL_" + i;
-			bundle.setLinkName(linkName);
-			String text = listItem.getDescription();
-			FormLink link = uifactory.addFormLink(linkName, text, null, flc, Link.NONTRANSLATED);
-			link.setUserObject(listItem.getUserObject());
-			bundle.setCssClass(listItem.getIconCssClass());
-			bundles.add(bundle);
-		}
-		return bundles;
-	}
-
-	@Override
-	protected void doDispose() {
-		// cSubscriptionCtrl gets disposed
-	}
-
-	@Override
-	protected void formOK(UserRequest ureq) {
-		// nothing to do
-	}
-
-	/**
-	 * 
-	 * @author strentini
-	 * 
-	 */
-	public class SubscriptionItemBundle {
-		private String linkName;
-		private String dateString;
-		private String cssClass;
-
-		public void setDateString(String dateString) {
-			this.dateString = dateString;
-		}
-
-		public String getDateString() {
-			return dateString;
-		}
-
-		public void setLinkName(String linkName) {
-			this.linkName = linkName;
-		}
-
-		public String getLinkName() {
-			return linkName;
-		}
-
-		public void setCssClass(String cssClass) {
-			this.cssClass = cssClass;
-		}
-
-		public String getCssClass() {
-			return cssClass;
-		}
-	}
-
-	public void refreshNewsList() {
-		updateChangelogDisplay();
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/view/EPTOCReadOnlyController.java b/src/main/java/org/olat/portfolio/ui/structel/view/EPTOCReadOnlyController.java
deleted file mode 100644
index 967067531019faf3a7703f1952c287b8b5f7b841..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/view/EPTOCReadOnlyController.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel.view;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.services.commentAndRating.CommentAndRatingDefaultSecurityCallback;
-import org.olat.core.commons.services.commentAndRating.CommentAndRatingSecurityCallback;
-import org.olat.core.commons.services.commentAndRating.manager.UserCommentsDAO;
-import org.olat.core.commons.services.commentAndRating.model.UserCommentsCount;
-import org.olat.core.commons.services.commentAndRating.ui.UserCommentsAndRatingsController;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-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.StringHelper;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.EPPage;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.ui.structel.EPStructureEvent;
-
-/**
- * Description:<br>
- * presents a static TOC with links to elements
- * 
- * <P>
- * Initial Date: 25.10.2010 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPTOCReadOnlyController extends BasicController {
-
-	private static final String CONST_FOR_VC_STYLE_STRUCT = "struct"; // used to
-																		// style
-																		// in
-																		// velocity
-	private static final String CONST_FOR_VC_STYLE_PAGE = "page"; // used to
-																	// style in
-																	// velocity
-	private static final String LINK_CMD_OPEN_ARTEFACT = "oArtefact";
-	private static final String LINK_CMD_OPEN_STRUCT = "oStruct";
-	private static final String LINK_CMD_OPEN_COMMENTS = "oComments";
-	private VelocityContainer vC;
-	private EPFrontendManager ePFMgr;
-	private List<UserCommentsCount> commentCounts;
-	private UserCommentsAndRatingsController commentsAndRatingCtr;
-	private PortfolioStructure map;
-	private EPSecurityCallback secCallback;
-	private Link artOnOffLink;
-
-	private boolean displayArtefactsInTOC = false;
-
-	public EPTOCReadOnlyController(UserRequest ureq, WindowControl wControl, PortfolioStructure map, EPSecurityCallback secCallback) {
-		super(ureq, wControl);
-		this.map = map;
-		this.secCallback = secCallback;
-		ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-
-		commentCounts = CoreSpringFactory.getImpl(UserCommentsDAO.class).countCommentsWithSubPath(map.getOlatResource(), null);
-		 
-
-		vC = createVelocityContainer("toc");
-		// have a toggle to show with/without artefacts
-		artOnOffLink = LinkFactory.createButtonSmall("artOnOffLink", vC, this);
-		artOnOffLink.setCustomDisplayText(translate("artOnOffLink." + !displayArtefactsInTOC));
-		putInitialPanel(vC);
-		refreshTOC(ureq);
-	}
-
-	public void refreshTOC(UserRequest ureq) {
-		// do recursively
-		int level = 0;
-		List<TOCElement> tocList = new ArrayList<>();
-		buildTOCModel(map, tocList, level);
-
-		vC.contextPut("tocList", tocList);
-
-		if (secCallback.canCommentAndRate()) {
-			removeAsListenerAndDispose(commentsAndRatingCtr);
-			boolean anonym = ureq.getUserSession().getRoles().isGuestOnly();
-			CommentAndRatingSecurityCallback callback = new CommentAndRatingDefaultSecurityCallback(getIdentity(), false, anonym);
-			commentsAndRatingCtr = new UserCommentsAndRatingsController(ureq, getWindowControl(), map.getOlatResource(), null, callback, null, true, true, true);
-			listenTo(commentsAndRatingCtr);
-			vC.put("commentCtrl", commentsAndRatingCtr.getInitialComponent());
-		}
-
-	}
-
-	/**
-	 * builds the tocList recursively containing artefacts, pages and
-	 * struct-Elements
-	 * 
-	 * @param pStruct
-	 * @param tocList
-	 *            list with TOCElement's to use in velocity
-	 * @param level
-	 * @param withArtefacts
-	 *            set false, to skip artefacts
-	 */
-	private void buildTOCModel(PortfolioStructure pStruct, List<TOCElement> tocList, int level) {
-		level++;
-
-		if (displayArtefactsInTOC) {
-			List<AbstractArtefact> artList = ePFMgr.getArtefacts(pStruct);
-			if (artList != null && artList.size() != 0) {
-				for (AbstractArtefact artefact : artList) {
-					String key = String.valueOf(artefact.getKey());
-					String title = StringHelper.escapeHtml(artefact.getTitle());
-
-					Link iconLink = LinkFactory.createCustomLink("arte_" + key, LINK_CMD_OPEN_ARTEFACT, "", Link.NONTRANSLATED, vC, this);
-					iconLink.setIconRightCSS("o_icon o_icon_start");
-					iconLink.setUserObject(pStruct);
-
-					Link titleLink = LinkFactory.createCustomLink("arte_t_" + key, LINK_CMD_OPEN_ARTEFACT, title, Link.NONTRANSLATED, vC, this);
-					titleLink.setUserObject(pStruct);
-
-					TOCElement actualTOCEl = new TOCElement(level, "artefact", titleLink, iconLink, null, null);
-					tocList.add(actualTOCEl);
-				}
-			}
-		}
-
-		List<PortfolioStructure> childs = ePFMgr.loadStructureChildren(pStruct);
-		if (childs != null && childs.size() != 0) {
-			for (PortfolioStructure portfolioStructure : childs) {
-				String type = "";
-				if (portfolioStructure instanceof EPPage) {
-					type = CONST_FOR_VC_STYLE_PAGE;
-				} else {
-					// a structure element
-					type = CONST_FOR_VC_STYLE_STRUCT;
-				}
-
-				String key = String.valueOf(portfolioStructure.getKey());
-				String title = StringHelper.escapeHtml(portfolioStructure.getTitle());
-
-				Link iconLink = LinkFactory.createCustomLink("portstruct" + key, LINK_CMD_OPEN_STRUCT, "", Link.NONTRANSLATED, vC, this);
-				iconLink.setIconRightCSS("o_icon o_icon_start");
-				iconLink.setUserObject(portfolioStructure);
-
-				Link titleLink = LinkFactory.createCustomLink("portstruct_t_" + key, LINK_CMD_OPEN_STRUCT, title, Link.NONTRANSLATED, vC, this);
-				titleLink.setUserObject(portfolioStructure);
-
-				Link commentLink = null;
-				if (portfolioStructure instanceof EPPage && secCallback.canCommentAndRate()) {
-					UserCommentsCount comments = getUserCommentsCount(portfolioStructure);
-					String count = comments == null ? "0" : comments.getCount().toString();
-					String label = translate("commentLink", new String[] { count });
-					commentLink = LinkFactory.createCustomLink("commentLink" + key, LINK_CMD_OPEN_COMMENTS, label, Link.NONTRANSLATED, vC, this);
-					commentLink.setIconLeftCSS("o_icon o_icon_comments");
-					commentLink.setUserObject(portfolioStructure);
-				}
-
-				// prefetch children to keep reference on them
-				List<TOCElement> tocChildList = new ArrayList<>();
-				buildTOCModel(portfolioStructure, tocChildList, level);
-				TOCElement actualTOCEl = new TOCElement(level, type, titleLink, iconLink, commentLink, tocChildList);
-				tocList.add(actualTOCEl);
-
-				if (tocChildList.size() != 0) {
-					tocList.addAll(tocChildList);
-				}
-			}
-		}
-	}
-
-	protected UserCommentsCount getUserCommentsCount(PortfolioStructure portfolioStructure) {
-		if (commentCounts == null || commentCounts.isEmpty())
-			return null;
-
-		String keyStr = portfolioStructure.getKey().toString();
-		for (UserCommentsCount commentCount : commentCounts) {
-			if (keyStr.equals(commentCount.getSubPath())) {
-				return commentCount;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.Component,
-	 *      org.olat.core.gui.control.Event)
-	 */
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		if (source == artOnOffLink) {
-			displayArtefactsInTOC = !displayArtefactsInTOC;
-			artOnOffLink.setCustomDisplayText(translate("artOnOffLink." + !displayArtefactsInTOC));
-			refreshTOC(ureq);
-		} else if (source instanceof Link) {
-			// could be a TOC-Link
-			Link link = (Link) source;
-			String cmd = link.getCommand();
-			PortfolioStructure parentStruct = (PortfolioStructure) link.getUserObject();
-			if (cmd.equals(LINK_CMD_OPEN_STRUCT)) {
-				fireEvent(ureq, new EPStructureEvent(EPStructureEvent.SELECT, parentStruct));
-			} else if (cmd.equals(LINK_CMD_OPEN_ARTEFACT)) {
-				// open the parent structure
-				fireEvent(ureq, new EPStructureEvent(EPStructureEvent.SELECT, parentStruct));
-			} else if (cmd.equals(LINK_CMD_OPEN_COMMENTS)) {
-				fireEvent(ureq, new EPStructureEvent(EPStructureEvent.SELECT_WITH_COMMENTS, parentStruct));
-			}
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		//
-	}
-}
diff --git a/src/main/java/org/olat/portfolio/ui/structel/view/TOCElement.java b/src/main/java/org/olat/portfolio/ui/structel/view/TOCElement.java
deleted file mode 100644
index 99237e036fa4c2150482bdd7f8b6c206d9c26830..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/view/TOCElement.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.ui.structel.view;
-
-import java.util.List;
-
-import org.olat.core.gui.components.link.Link;
-
-/**
- * Description:<br>
- * data container for a TOC element
- * 
- * <P>
- * Initial Date:  26.10.2010 <br>
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class TOCElement {
-
-	private final int level;
-	private final String type;
-	private final Link iconLink;
-	private final Link titleLink;
-	private final Link userCommentLink;
-	private final List<TOCElement> childs;
-		
-	public TOCElement(int level, String type, Link titleLink, Link iconLink, Link userCommentLink, List<TOCElement> childs){
-		this.level = level;
-		this.type = type;
-		this.iconLink = iconLink;
-		this.titleLink = titleLink;
-		this.userCommentLink = userCommentLink;
-		this.childs = childs;
-	}
-	
-	/**
-	 * @return Returns the level.
-	 */
-	public int getLevel() {
-		return level;
-	}
-	/**
-	 * @return Returns the type.
-	 */
-	public String getType() {
-		return type;
-	}
-	/**
-	 * @return Returns the link with an icon.
-	 */
-	public Link getIconLink() {
-		return iconLink;
-	}
-	
-	/**
-	 * @return Returns the link with the title
-	 */
-	public Link getTitleLink() {
-		return titleLink;
-	}
-	
-	/**
-	 * @return Return the link for user comments
-	 */
-	public Link getCommentLink() {
-		return userCommentLink;
-	}
-	
-	public String getCommentLinkComponentName() {
-		return userCommentLink == null ? "comment-null" : userCommentLink.getComponentName();
-	}
-
-	/**
-	 * @return Returns the child.
-	 */
-	public List<TOCElement> getChilds() {
-		return childs;
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/view/_content/changelog.html b/src/main/java/org/olat/portfolio/ui/structel/view/_content/changelog.html
deleted file mode 100644
index fa69f1c41007971d869cc06558d6f0a65f346e6c..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/view/_content/changelog.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<div class="o_eportfolio_changelog">
-	## display subscription component
-	#if ($r.available("subscription"))
-		<div class="pull-right">
-			$r.render("subscription")
-		</div>
-	#end
-	
-	<h4>$r.translate('changelog')</h4>
-	<div class="o_notifications_news_datechooser o_block_large row">
-		<div class="col-xs-12 col-sm-6">
-			<fieldset class="o_form form-horizontal" role="form">
-				<div class="form-group">
-					<div class="col-sm-3">$r.render("dateChooser_LABEL")</div>
-					<div class="col-sm-9">$r.render("dateChooser")</div>
-				</div>
-			</fieldset>
-		</div>
-	</div>
-	
-	## loop over subscriptionListItems and display them
-	## display the date if it changes... ("groups" the items) 
-	<ul class="list-unstyled">
-	#set($preDate = "") 
-	#foreach($listElement in $subscriptionItems)
-		#set( $date = $listElement.getDateString() )
-		#set( $linkName = $listElement.getLinkName() )
-		#set( $cssClass = $listElement.getCssClass() )
-		#if( $date != $preDate)
-			#set($preDate = $date)
-			<li><h5>$date</h5></li> 
-		#end
-		<li><i class="o_icon o_icon-fw $cssClass"> </i> $r.render($linkName)</li>
-	#end
-	</ul>
-</div>
-
-
-
diff --git a/src/main/java/org/olat/portfolio/ui/structel/view/_content/toc.html b/src/main/java/org/olat/portfolio/ui/structel/view/_content/toc.html
deleted file mode 100644
index 945fcfae2adf51ab7551cc58716b8d75b4d7d820..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/view/_content/toc.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<div class="o_portfolio_toc">
-	<div class="pull-right">$r.render("artOnOffLink")</div>
-	<h4>$r.translate("toc.root")</h4>
-	#if ($tocList)
-	<ul class="list-unstyled">
-		#foreach($tocElement in $tocList)
-			<li class="level$tocElement.getLevel() type_$tocElement.getType()">
-			#set($titleLink = $tocElement.getTitleLink().getComponentName())
-			#set($iconLink = $tocElement.getIconLink().getComponentName())
-			#set($commentLink = $tocElement.getCommentLinkComponentName())
-			
-			$r.render($titleLink)
-			#if ($r.available($iconLink)) 
-				<span class="o_ep_link">$r.render($iconLink)</span>
-			#end
-			#if ($r.available($commentLink)) 
-				<span class="o_ep_commentlink">$r.render($commentLink)</span>
-			#end
-			</li>
-		#end
-	</ul>
-	#end
-	#if($r.available("commentCtrl"))
-		<div class="clearfix">
-			$r.render("commentCtrl")
-		</div>
-	#end
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_de.properties
deleted file mode 100644
index 0766ca9ce5ec9a0bacf8e88a12613689ab65b058..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-toc.root=Inhaltsverzeichnis
-artOnOffLink.true=Artefakte anzeigen
-artOnOffLink.false=Artefakte ausblenden
-commentLink=({0})
-li.newrating=Neues Rating f\u00fcr '{0}' von {1}
-li.changerating={1} \u00e4nderte Rating f\u00fcr '{0}'
-li.newcomment=Neuer Kommentar zu '{0}' von {1}
-li.newpage=Es wurde eine neue Seite '{0}' hinzugef\u00fcgt
-li.newstruct=Es wurde ein neues Strukturelement '{0}' hinzugef\u00fcgt
-li.newartefact=Es wurde ein neues Artefakt '{1}' auf '{2}' von {0} hinzugef\u00fcgt
-changelog=\u00c4nderungsprotokoll
-news.since=\u00c4nderungen seit:
diff --git a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_en.properties
deleted file mode 100644
index 8bd50dc18c5b2c907fa27bd3687ca8bb86bbeed1..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-#Mon Apr 02 14:39:49 CEST 2012
-artOnOffLink.false=Hide artefacts
-artOnOffLink.true=Show artefacts
-changelog=Changelog
-commentLink=({0})
-li.changerating={1} changed rating for '{0}'
-li.newartefact={0} linked an artefact
-li.newcomment=New comment on '{0}' from {1}
-li.newpage=New page '{0}' added
-li.newrating=New rating for '{0}' from {1}
-li.newstruct=New structural element '{0}' added
-news.since=Changes since\:
-toc.root=Table of contents
diff --git a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index 0ef681d9b9c41a133b2aa6bdfabf082736031f89..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-#Mon Oct 22 17:02:54 CEST 2012
-artOnOffLink.false=Cacher artefacts
-artOnOffLink.true=Afficher artefacts
-changelog=Compte-rendu des changements
-commentLink=({0})
-li.changerating={1} \u00E0 chang\u00E9 l'\u00E9valuation de '{0}'
-li.newartefact=Un nouvel artefact  '{1}' a \u00E9t\u00E9 ajout\u00E9 \u00E0 '{2}' par {0}
-li.newcomment=Nouveau commentaire de {1} sur '{0}'
-li.newpage=Une nouvelle page '{0}' a \u00E9t\u00E9 ajout\u00E9e
-li.newrating=Une nouvelle \u00E9valuation pour '{0}' par {1}
-li.newstruct=Un nouvel \u00E9l\u00E9ment structurel '{0}' a \u00E9t\u00E9 ajout\u00E9
-news.since=Changements depuis\:
-toc.root=Indice du contenu
diff --git a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_it.properties
deleted file mode 100644
index dd7c714edcd380d4ec4f799501f9381dd6457f4c..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_it.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-#Thu Jun 23 09:00:23 CEST 2016
-artOnOffLink.false=Nascondere artefatti
-artOnOffLink.true=Mostrare artefatti
-changelog=Registro dei cambiamenti
-commentLink=({0})
-li.changerating={1} ha cambiato la valutazione di '{0}'
-li.newartefact=Un nuovo artefatto '{1}' \u00E8 stato aggiunto a '{2}' da {0}
-li.newcomment=Nuovo commento su '{0}' da {1}
-li.newpage=Una nuova pagina '{0}' \u00E8 stata aggiunta
-li.newrating=Nuova valutazione per '{0}' da {1}
-li.newstruct=Nuovo elemento strutturale '{0}' aggiunto
-news.since=Cambiamenti da\:
-toc.root=Indice del contenuto
diff --git a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_nl_NL.properties
deleted file mode 100644
index d3204d90bc8d14e429327865c2d5a22ad3552a45..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_nl_NL.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Thu Sep 08 16:42:47 CEST 2011
-artOnOffLink.false=Verstop artefacten
-artOnOffLink.true=Toon artefacten
-commentLink=({0})
-toc.root=Inhoudstafel
diff --git a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_pl.properties
deleted file mode 100644
index 31055ec16cef4614fe9ab14ed564d02742877e18..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_pl.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-#Fri Nov 29 15:31:50 CET 2013
-artOnOffLink.false=Ukryj artefakty
-artOnOffLink.true=Poka\u017C artefakty
-changelog=Log zmian
-commentLink=({0})
-li.newpage=Dodano now\u0105 stron\u0119 '{0}'
-news.since=Zmiany od\:
-toc.root=Spis tre\u015Bci
diff --git a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_pt_BR.properties
deleted file mode 100644
index a775411a1458b26d32f5f058d593c0cc074f5d30..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_pt_BR.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-#Mon Apr 02 20:15:43 CEST 2012
-artOnOffLink.false=Esconder artefatos
-artOnOffLink.true=Mostrar artefatos
-changelog=Log de altera\u00E7\u00F5es
-commentLink=({0})
-li.changerating={1} mudou classifica\u00E7\u00E3o para '{0}'
-li.newartefact={0} ligou um artefato
-li.newcomment=Novo coment\u00E1rio sobre '{0}' de {1}
-li.newpage=Nova p\u00E1gina '{0}' adicionada
-li.newrating=Nova avalia\u00E7\u00E3o para '{0}' de {1}
-li.newstruct=Novo Elemento estrutural '{0}' adicionado
-news.since=Mudan\u00E7as desde\:
-toc.root=Tabela de conte\u00FAdos
diff --git a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_zh_CN.properties
deleted file mode 100644
index 937bb11b11465ea41b64cf046e19720f768e5470..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/portfolio/ui/structel/view/_i18n/LocalStrings_zh_CN.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Dec 27 04:56:23 CET 2010
-artOnOffLink.false=\u5386\u53F2\u9690\u85CF
-artOnOffLink.true=\u5386\u53F2\u5C55\u5F00
-commentLink=({0})
-toc.root=\u5185\u5BB9
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_ar.properties
index 24254b306f18a63c16d13bd5ffebf12daebe133b..ee8cb9c7def33756f86f5f1eba8c71d800b3bd0c 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_ar.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_ar.properties
@@ -381,7 +381,6 @@ tools.new.createtest=\u0627\u062E\u062A\u0628\u0627\u0631
 tools.new.glossary=\u0642\u0627\u0645\u0648\u0633
 tools.new.header=\u0625\u0646\u0634\u0627\u0621
 tools.new.podcast=\u0628\u0648\u062F\u0643\u0627\u0633\u062A
-tools.new.portfolio=\u0646\u0645\u0648\u0630\u062C \u0628\u0648\u0631\u062A\u0641\u0648\u0644\u064A\u0648
 tools.new.wiki=\u0648\u064A\u0643\u0649
 warn.config.reference.no.access=\u064A\u0631\u062C\u0649 \u0645\u0644\u0627\u062D\u0638\u0629 \u0623\u0646 \u0627\u0644\u0625\u0639\u062F\u0627\u062F "\u064A\u0645\u0643\u0646 \u0645\u0631\u062C\u0639\u064A\u062A\u0647" \u064A\u062A\u0645 \u062A\u0646\u0634\u064A\u0637\u0647 \u0641\u0642\u0637 \u0628\u0639\u062F \u0627\u0644\u062F\u062E\u0648\u0644 \u0625\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0645\u0635\u062F\u0631 \u0627\u0644\u0645\u0645\u0646\u0648\u062D \u0644\u0644\u0645\u0624\u0644\u0641\u064A\u0646 \u0627\u0644\u0622\u062E\u0631\u064A\u064A\u0646.
 warn.entry.meantimedeleted=\u062A\u0645 \u062D\u0630\u0641 \u0627\u0644\u0645\u062F\u062E\u0644 \u0628\u0648\u0627\u0633\u0637\u0629 \u0645\u0633\u062A\u062E\u062F\u0645 \u0622\u062E\u0631 \u0641\u0649 \u0647\u0630\u0647 \u0627\u0644\u0623\u062B\u0646\u0627\u0621.
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 fea4d17a8143a57e4fe4a268f8e7c0572c8e3ba5..d250b31423e2b25431e5eadb29f3e46402712a6f 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties
@@ -1,7 +1,6 @@
 #Wed Dec 19 17:19:40 CET 2018
 BinderTemplate=Portfolio 2.0 Vorlage
 CourseModule=Kurs
-EPStructuredMapTemplate=Portfoliovorlage
 Failed=Die \u00DCbermittlung der Datei ist fehlgeschlagen.
 FileResource.ANIM=Animation
 FileResource.BLOG=Blog
@@ -428,8 +427,6 @@ new.glossary=Glossar erstellen
 new.glossary.intro=Neues Glossar erstellen
 new.podcast=Podcast erstellen
 new.podcast.intro=Neuen Podcast erstellen
-new.portfolio=Portfoliovorlage
-new.portfolio.intro=Neue Portfoliovorlage erstellen
 new.portfoliov2=Portfoliovorlage 2.0
 new.portfoliov2.intro=Neue Portfoliovorlage 2.0 erstellen
 new.powerpoint=PowerPoint
@@ -730,7 +727,6 @@ tools.new.createtest=Test
 tools.new.glossary=Glossar
 tools.new.header=Herstellen
 tools.new.podcast=Podcast
-tools.new.portfolio=Portfoliovorlage
 tools.new.wiki=Wiki
 tools.restore=Wiederherstellen
 tools.send.mail=E-Mail versenden
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 742055961ba9c8b7e8756fbfba090e6f56b85d52..868a6844159916c9af323011b08e250fcd3f84ef 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties
@@ -1,7 +1,6 @@
 #Fri Nov 23 09:33:03 CET 2018
 BinderTemplate=Portfolio 2.0 template
 CourseModule=Course
-EPStructuredMapTemplate=Portfolio template
 Failed=The transmission of this file failed.
 FileResource.ANIM=Animation
 FileResource.BLOG=Blog
@@ -428,8 +427,6 @@ new.glossary=Create glossary
 new.glossary.intro=Create new glossary
 new.podcast=Create Podcast
 new.podcast.intro=Create new Podcast
-new.portfolio=Portfolio template
-new.portfolio.intro=Create new portfolio template
 new.portfoliov2=Portfolio 2.0 template
 new.portfoliov2.intro=Create new portfolio 2.0 template
 new.powerpoint=PowerPoint
@@ -730,7 +727,6 @@ tools.new.createtest=Test
 tools.new.glossary=Glossary
 tools.new.header=Create
 tools.new.podcast=Podcast
-tools.new.portfolio=Portfolio template
 tools.new.wiki=Wiki
 tools.restore=Restore
 tools.send.mail=Send E-mail
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 76b3f30175dc129e0231bf4d86f1241f8fd1415b..fe49b65cbf88e58396468aef8107ad88e2153e27 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties
@@ -1,7 +1,6 @@
 #Sun Mar 01 08:24:51 CET 2020
 BinderTemplate=Mod\u00E8le de portfolio 2.0
 CourseModule=Cours
-EPStructuredMapTemplate=Mod\u00E8le de portfolio
 Failed=La transmission du fichier a \u00E9chou\u00E9.
 FileResource.ANIM=Animation
 FileResource.BLOG=Blogue
@@ -427,8 +426,6 @@ new.glossary=Cr\u00E9er glossaire
 new.glossary.intro=Cr\u00E9er nouveau glossaire
 new.podcast=Cr\u00E9er podcast
 new.podcast.intro=Cr\u00E9er nouveau podcast
-new.portfolio=Mod\u00E8le de portfolio
-new.portfolio.intro=Cr\u00E9er un nouveau mod\u00E8le de portfolio
 new.portfoliov2=Mod\u00E8le portfolio 2.0
 new.portfoliov2.intro=Cr\u00E9er un mod\u00E8le de portfolio 2.0
 new.powerpoint=PowerPoint
@@ -729,7 +726,6 @@ tools.new.createtest=Test
 tools.new.glossary=Glossaire
 tools.new.header=Cr\u00E9er
 tools.new.podcast=Podcast
-tools.new.portfolio=Mod\u00E8le de portfolio
 tools.new.wiki=Wiki
 tools.restore=Restaurer
 tools.send.mail=Envoyez un courriel
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_it.properties
index ba06e10f0fdfe4773b35dc0c012b0b8cdf623700..6d7d22d0c3d3924b956524392c3c2dbdae380870 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_it.properties
@@ -1,7 +1,6 @@
 #Tue Mar 28 11:58:01 CEST 2017
 BinderTemplate=Portfolio 2.0 modello
 CourseModule=Corso
-EPStructuredMapTemplate=Modello di portfolio
 Failed=Il caricamento \u00E8 fallito.
 FileResource.ANIM=Animazione
 FileResource.BLOG=Blog
@@ -338,8 +337,6 @@ new.glossary=Creare glossario
 new.glossary.intro=Creare un nuovo glossario.
 new.podcast=Creare podcast
 new.podcast.intro=Creare un nuovo podcast
-new.portfolio=Modello di portfolio
-new.portfolio.intro=Creare un nuovo modello di portfolio
 new.portfoliov2=Portfolio 2.0 modello
 new.portfoliov2.intro=Creare un nuovo modello portfolio 2.0
 new.sharedfolder=Creare una nuova cartella delle risorse
@@ -581,7 +578,6 @@ tools.new.createtest=Test
 tools.new.glossary=Glossario
 tools.new.header=Creare
 tools.new.podcast=Podcast
-tools.new.portfolio=Modello di portfolio
 tools.new.wiki=Wiki
 tools.restore=Ripristinare
 user.notfound=I seguenti utenti non sono stati trovati\: {0}
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_nl_NL.properties
index ef31de99c03d5bd9ea632447e4c618c058367142..c4256e4f54b2aa1469b41a7c9735ccd39b5c4fcd 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_nl_NL.properties
@@ -1,6 +1,5 @@
 #Thu Sep 08 16:42:47 CEST 2011
 CourseModule=Cursus
-EPStructuredMapTemplate=Portfolio sjabloon
 Failed=De transmissie van dit bestand is mislukt
 FileResource.ANIM=Animatie
 FileResource.BLOG=Blog
@@ -275,8 +274,6 @@ new.glossary=Maak verklarende woordenlijst aan
 new.glossary.intro=Maak nieuwe verklarende woordenlijst aan
 new.podcast=Maak Podcast aan
 new.podcast.intro=Maak nieuwe Podcast aan
-new.portfolio=Portfolio sjabloon
-new.portfolio.intro=Ontwerp nieuw portfolio sjabloon
 new.sharedfolder=Maak bronmap aan
 new.sharedfolder.intro=Maak nieuwe bronmap aan
 new.survey=Maak vragenlijst aan
@@ -399,7 +396,6 @@ tools.new.createtest=Test
 tools.new.glossary=Verklarende woordenlijst
 tools.new.header=Maken
 tools.new.podcast=Podcast
-tools.new.portfolio=Portfolio sjabloon
 tools.new.wiki=Wiki
 warn.config.reference.no.access=Merk op dat de configuratie "Verwijzingen zijn mogelijk" enkel wordt geactiveerd nadat andere autheurs ook toegang hebben gekregen tot dit middel.
 warn.entry.meantimedeleted=Input werd ondertussen verwijderd door een andere gebruiker.
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_BR.properties
index a195e12aa994928b760f374b452a3683864feefb..3e13419aa8eb883a95aef7c861f4d20bad506e1c 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_BR.properties
@@ -1,7 +1,6 @@
 #Thu Sep 12 21:02:42 CEST 2019
 BinderTemplate=Modelo Portfolio 2.0
 CourseModule=Curso
-EPStructuredMapTemplate=Template/modelo de Portfolio
 Failed=A transmiss\u00E3o deste arquivo falhou.
 FileResource.ANIM=Anima\u00E7\u00E3o
 FileResource.BLOG=Blog
@@ -425,8 +424,6 @@ new.glossary=Criar gloss\u00E1rio
 new.glossary.intro=Criar novo gloss\u00E1rio
 new.podcast=Criar Podcast
 new.podcast.intro=Criar novo Podcast
-new.portfolio=Modelo Portfolio
-new.portfolio.intro=Criar um novo modelo de portfolio
 new.portfoliov2=Modelo Portf\u00F3lio 2.0
 new.portfoliov2.intro=Criar novo modelo de portf\u00F3lio 2.0
 new.powerpoint=PowerPoint
@@ -717,7 +714,6 @@ tools.new.createtest=Teste
 tools.new.glossary=Gloss\u00E1rio
 tools.new.header=Criar
 tools.new.podcast=Podcast
-tools.new.portfolio=Modelo Portfolio
 tools.new.wiki=Wiki
 tools.restore=Restaurar
 tools.send.mail=Enviar E-mail
diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_zh_CN.properties
index 3196d0dc4a96b08e1e623e77132e5216569b668d..9102c73edfbe4430022b4f99461e8911b00ee541 100644
--- a/src/main/java/org/olat/repository/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_zh_CN.properties
@@ -1,6 +1,5 @@
 #Sun Mar 19 10:15:41 CET 2017
 CourseModule=\u5B66\u7A0B
-EPStructuredMapTemplate=\u6863\u6848\u6A21\u677F
 Failed=\u6587\u4EF6\u4F20\u8F93\u5931\u8D25
 FileResource.ANIM=\u52A8\u753B
 FileResource.BLOG=\u535A\u5BA2
@@ -188,8 +187,6 @@ new.glossary=\u521B\u5EFA\u672F\u8BED\u8BCD\u6C47\u8868
 new.glossary.intro=\u521B\u5EFA\u65B0\u672F\u8BED\u8BCD\u6C47\u8868
 new.podcast=\u521B\u5EFA\u64AD\u5BA2
 new.podcast.intro=\u521B\u5EFA\u65B0\u64AD\u5BA2
-new.portfolio=\u6863\u6848\u6A21\u677F
-new.portfolio.intro=\u521B\u5EFA\u65B0\u6863\u6848\u6A21\u677F
 new.sharedfolder=\u5EFA\u7ACB\u8D44\u6E90\u6587\u4EF6\u5939
 new.sharedfolder.intro=\u521B\u5EFA\u65B0\u8D44\u6E90\u6587\u4EF6\u5939
 new.survey=\u5EFA\u7ACB\u95EE\u5377
@@ -405,7 +402,6 @@ tools.new.createtest=\u6D4B\u9A8C
 tools.new.glossary=\u672F\u8BED\u8BCD\u6C47\u8868
 tools.new.header=\u521B\u5EFA
 tools.new.podcast=\u64AD\u5BA2
-tools.new.portfolio=\u7EC4\u5408\u6A21\u677F
 tools.new.wiki=\u7EF4\u57FA
 user.notfound=\u4EE5\u4E0B\u7528\u6237\u4E0D\u5B58\u5728\uFF1A{0}
 warn.config.reference.no.access=\u8BF7\u60A8\u6CE8\u610F\uFF1A\u4EC5\u4EC5\u662F\u5728\u628A\u8FD9\u4E2A\u8D44\u6E90\u6388\u6743\u7ED9\u5176\u4ED6\u521B\u5EFA\u8005\uFF0C\u914D\u7F6E\u4E2D\u201C\u53EF\u4EE5\u4F5C\u4E3A\u8D44\u6599\u201D\u624D\u88AB\u6FC0\u6D3B\uFF01
diff --git a/src/main/java/org/olat/repository/_i18n/i18nBundleMetadata.properties b/src/main/java/org/olat/repository/_i18n/i18nBundleMetadata.properties
index bd2a3e63966a3cf4e1a36d4d996ad778947b473f..0670bf4f9788294ef335152e0688bd778ef13d55 100644
--- a/src/main/java/org/olat/repository/_i18n/i18nBundleMetadata.properties
+++ b/src/main/java/org/olat/repository/_i18n/i18nBundleMetadata.properties
@@ -23,4 +23,4 @@ FileResource.XLS.inlinetranslation=disabled
 
 wizard.step3.mail.subject.inlinetranslation=disabled
 wizard.step3.mail.body.inlinetranslation=disabled
-title.prefix.closed.inlinetranslation=disabled
\ No newline at end of file
+title.prefix.closed.inlinetranslation=disabled
diff --git a/src/main/java/org/olat/repository/controllers/SearchForm.java b/src/main/java/org/olat/repository/controllers/SearchForm.java
index 0ce29994f8aa23dc26d4f96cb606f8e74279a410..bd65a640650100d9ff335f3c37a0058469fa1d0a 100644
--- a/src/main/java/org/olat/repository/controllers/SearchForm.java
+++ b/src/main/java/org/olat/repository/controllers/SearchForm.java
@@ -65,7 +65,6 @@ import org.olat.fileresource.types.WikiResource;
 import org.olat.fileresource.types.XlsFileResource;
 import org.olat.ims.qti.fileresource.SurveyFileResource;
 import org.olat.ims.qti.fileresource.TestFileResource;
-import org.olat.portfolio.EPTemplateMapResource;
 import org.olat.repository.RepositoryService;
 
 /**
@@ -282,7 +281,6 @@ public class SearchForm extends FormBasicController {
 		resources.add(BlogFileResource.TYPE_NAME);
 		resources.add(TestFileResource.TYPE_NAME);
 		resources.add(SurveyFileResource.TYPE_NAME);
-		resources.add(EPTemplateMapResource.TYPE_NAME);
 		resources.add(SharedFolderFileResource.TYPE_NAME);
 		resources.add(GlossaryResource.TYPE_NAME);
 		resources.add(PdfFileResource.TYPE_NAME);
diff --git a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java
deleted file mode 100644
index ed3581163fdc6dd49ac11bb865cb669e3580e06e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.repository.handlers;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Locale;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.persistence.DBFactory;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.stack.TooledStackedPanel;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.layout.MainLayoutController;
-import org.olat.core.gui.control.generic.wizard.StepsMainRunController;
-import org.olat.core.gui.media.MediaResource;
-import org.olat.core.gui.media.StreamedMediaResource;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.Organisation;
-import org.olat.core.id.Roles;
-import org.olat.core.logging.AssertException;
-import org.apache.logging.log4j.Logger;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.Util;
-import org.olat.core.util.coordinate.CoordinatorManager;
-import org.olat.core.util.coordinate.LockResult;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.course.assessment.manager.UserCourseInformationsManager;
-import org.olat.fileresource.FileResourceManager;
-import org.olat.fileresource.types.ResourceEvaluation;
-import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.EPSecurityCallbackFactory;
-import org.olat.portfolio.EPTemplateMapResource;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.manager.EPStructureManager;
-import org.olat.portfolio.manager.EPXStreamHandler;
-import org.olat.portfolio.model.structel.EPStructuredMapTemplate;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.ui.EPTemplateRuntimeController;
-import org.olat.portfolio.ui.structel.EPCreateMapController;
-import org.olat.portfolio.ui.structel.EPMapViewController;
-import org.olat.repository.ErrorList;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryEntrySecurity;
-import org.olat.repository.RepositoryEntryStatusEnum;
-import org.olat.repository.RepositoryManager;
-import org.olat.repository.RepositoryService;
-import org.olat.resource.OLATResource;
-import org.olat.resource.references.ReferenceManager;
-
-/**
- * 
- * Description:<br>
- * Handler wihich allow the portfolio map in repository to be opened and launched.
- * 
- * <P>
- * Initial Date:  12 oct. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-// Loads of parameters are unused
-public class PortfolioHandler implements RepositoryHandler {
-	private static final Logger log = Tracing.createLoggerFor(PortfolioHandler.class);
-	
-	@Override
-	public boolean supportCreate(Identity identity, Roles roles) {
-		return false;
-	}
-	
-	@Override
-	public String getCreateLabelI18nKey() {
-		return "new.portfolio";
-	}
-	
-	@Override
-	public RepositoryEntry createResource(Identity initialAuthor, String displayname, String description,
-			Object createObject, Organisation organisation, Locale locale) {
-		EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-		EPStructureManager eSTMgr = CoreSpringFactory.getImpl(EPStructureManager.class);
-		RepositoryService repositoryService = CoreSpringFactory.getImpl(RepositoryService.class);
-		
-		OLATResource resource = eSTMgr.createPortfolioMapTemplateResource();
-		RepositoryEntry re = repositoryService.create(initialAuthor, null, "", displayname, description,
-				resource, RepositoryEntryStatusEnum.preparation, organisation);
-
-		PortfolioStructureMap mapTemp = eSTMgr.createAndPersistPortfolioMapTemplateFromEntry(initialAuthor, re);
-		// add a page, as each map should have at least one per default!
-		
-		Translator pt = Util.createPackageTranslator(EPCreateMapController.class, locale);
-		String pageTitle = pt.translate("new.page.title");
-		String pageDescription = pt.translate("new.page.desc");
-		ePFMgr.createAndPersistPortfolioPage(mapTemp, pageTitle, pageDescription);
-		
-		DBFactory.getInstance().commit();
-		return re;
-	}
-	
-	@Override
-	public boolean isPostCreateWizardAvailable() {
-		return false;
-	}
-
-	@Override
-	public boolean supportImport() {
-		return false;
-	}
-
-	@Override
-	public ResourceEvaluation acceptImport(File file, String filename) {
-		return ResourceEvaluation.notValid();
-	}
-
-	@Override
-	public boolean supportImportUrl() {
-		return false;
-	}
-	
-	@Override
-	public ResourceEvaluation acceptImport(String url) {
-		return ResourceEvaluation.notValid();
-	}
-	
-	@Override
-	public RepositoryEntry importResource(Identity initialAuthor, String initialAuthorAlt, String displayname, String description,
-			boolean withReferences, Organisation organisation, Locale locale, File file, String filename) {
-		EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-		EPStructureManager eSTMgr = CoreSpringFactory.getImpl(EPStructureManager.class);
-		
-		RepositoryEntry re = null;
-		PortfolioStructure structure = EPXStreamHandler.getAsObject(file, false);
-		if(structure != null) {
-			OLATResource resource = eSTMgr.createPortfolioMapTemplateResource();
-			re = CoreSpringFactory.getImpl(RepositoryService.class).create(initialAuthor, null, "", displayname, description,
-					resource, RepositoryEntryStatusEnum.preparation, organisation);
-			ePFMgr.importPortfolioMapTemplate(structure, resource);
-		}
-		return re;
-	}
-	
-	@Override
-	public RepositoryEntry importResource(Identity initialAuthor, String initialAuthorAlt, String displayname,
-			String description, Organisation organisation, Locale locale, String url) {
-		return null;
-	}
-	
-	@Override
-	public RepositoryEntry copy(Identity author, RepositoryEntry source, RepositoryEntry target) {
-		OLATResource sourceResource = source.getOlatResource();
-		OLATResource targetResource = target.getOlatResource();
-		
-		EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-		PortfolioStructure structure = ePFMgr.loadPortfolioStructure(sourceResource);
-		PortfolioStructure newStructure = EPXStreamHandler.copy(structure);
-		ePFMgr.importPortfolioMapTemplate(newStructure, targetResource);
-		return target;
-	}
-
-	@Override
-	public boolean supportsDownload() {
-		return false;
-	}
-
-	@Override
-	public EditionSupport supportsEdit(OLATResourceable resource, Identity identity, Roles roles) {
-		return EditionSupport.embedded;
-	}
-	
-	@Override
-	public boolean supportsAssessmentDetails() {
-		return false;
-	}
-	
-	@Override
-	public VFSContainer getMediaContainer(RepositoryEntry repoEntry) {
-		return FileResourceManager.getInstance()
-				.getFileResourceMedia(repoEntry.getOlatResource());
-	}
-
-	@Override
-	public boolean readyToDelete(RepositoryEntry entry, Identity identity, Roles roles, Locale locale, ErrorList errors) {
-		EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-		PortfolioStructure map = ePFMgr.loadPortfolioStructure(entry.getOlatResource());
-		if(map instanceof EPStructuredMapTemplate) {
-			EPStructuredMapTemplate exercise = (EPStructuredMapTemplate)map;
-			if (ePFMgr.isTemplateInUse(exercise, null, null, null)) {
-				return false;
-			}
-		}
-
-		ReferenceManager refM = CoreSpringFactory.getImpl(ReferenceManager.class);
-		String referencesSummary = refM.getReferencesToSummary(entry.getOlatResource(), locale);
-		if (referencesSummary != null) {
-			Translator translator = Util.createPackageTranslator(RepositoryManager.class, locale);
-			errors.setError(translator.translate("details.delete.error.references",
-					new String[] { referencesSummary, entry.getDisplayname() }));
-			return false;
-		}
-		return true;
-	}
-
-	@Override
-	public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) {
-		CoreSpringFactory.getImpl(EPFrontendManager.class).deletePortfolioMapTemplate(res);
-		return true;
-	}
-
-	/**
-	 * Transform the map in a XML file and zip it (Repository export want a zip)
-	 * @see org.olat.repository.handlers.RepositoryHandler#getAsMediaResource(org.olat.core.id.OLATResourceable)
-	 */
-	@Override
-	public MediaResource getAsMediaResource(OLATResourceable res) {
-		MediaResource mr = null;
-
-		EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-		PortfolioStructure structure = ePFMgr.loadPortfolioStructure(res);
-		try {
-			InputStream inOut = EPXStreamHandler.toStream(structure);
-			mr = new StreamedMediaResource(inOut, null, null, null);
-		} catch (IOException e) {
-			log.error("Cannot export this map: " + structure, e);
-		}
-		return mr;
-	}
-
-	@Override
-	public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl, TooledStackedPanel toolbar) {
-		return null;
-	}
-
-	@Override
-	public MainLayoutController createLaunchController(RepositoryEntry re, RepositoryEntrySecurity reSecurity, UserRequest ureq, WindowControl wControl) {
-		return new EPTemplateRuntimeController(ureq, wControl, re, reSecurity,
-				(uureq, wwControl, toolbarPanel, entry, security, assessmentMode) -> {
-			EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-			PortfolioStructureMap map = (PortfolioStructureMap)ePFMgr
-				.loadPortfolioStructure(entry.getOlatResource());
-			CoreSpringFactory.getImpl(UserCourseInformationsManager.class)
-				.updateUserCourseInformations(entry.getOlatResource(), uureq.getIdentity());
-			EPSecurityCallback secCallback = EPSecurityCallbackFactory.getSecurityCallback(uureq, map, ePFMgr);
-			return new EPMapViewController(uureq, wwControl, map, false, false, secCallback);
-		});
-	}
-
-	@Override
-	public Controller createAssessmentDetailsController(RepositoryEntry re, UserRequest ureq, WindowControl wControl,
-			TooledStackedPanel toolbar, Identity assessedIdentity) {
-		return null;
-	}
-
-	@Override
-	public String getSupportedType() {
-		return EPTemplateMapResource.TYPE_NAME;
-	}
-
-	@Override
-	public LockResult acquireLock(OLATResourceable ores, Identity identity) {
-		return CoordinatorManager.getInstance().getCoordinator().getLocker().acquireLock(ores, identity, "subkey");
-	}
-
-	@Override
-	public void releaseLock(LockResult lockResult) {
-		if(lockResult!=null) {
-			CoordinatorManager.getInstance().getCoordinator().getLocker().releaseLock(lockResult);
-		}
-	}
-
-	@Override
-	public boolean isLocked(OLATResourceable ores) {
-		return CoordinatorManager.getInstance().getCoordinator().getLocker().isLocked(ores, "subkey");
-	}
-
-	@Override
-	public StepsMainRunController createWizardController(OLATResourceable res, UserRequest ureq, WindowControl wControl) {
-		throw new AssertException("Trying to get wizard where no creation wizard is provided for this type.");
-	}
-}
diff --git a/src/main/java/org/olat/repository/handlers/RepositoryHandlerFactory.java b/src/main/java/org/olat/repository/handlers/RepositoryHandlerFactory.java
index 65f6d291dd15589e14ea210b1b8de410a1d8a4c9..19de5694a21199bddd5c6a7e317f1f7a21649e18 100644
--- a/src/main/java/org/olat/repository/handlers/RepositoryHandlerFactory.java
+++ b/src/main/java/org/olat/repository/handlers/RepositoryHandlerFactory.java
@@ -77,7 +77,6 @@ public class RepositoryHandlerFactory {
 		// 40-49 Supporting resources
 		registerHandler(new SharedFolderHandler(), 40);
 		registerHandler(new GlossaryHandler(), 41);
-		registerHandler(new PortfolioHandler(), 42);
 		
 		
 		DocumentEditorDelegate wordDelegate = new DocumentEditorDelegate(new WordVFSEditorDelegateType());
diff --git a/src/main/java/org/olat/restapi/system/OpenOLATStatisticsWebService.java b/src/main/java/org/olat/restapi/system/OpenOLATStatisticsWebService.java
index 7384ea96d34abf63a2468b0214416ac4dba15dfe..abf3bf67e8ae4fa7402abf6ac22add08045ed9bc 100644
--- a/src/main/java/org/olat/restapi/system/OpenOLATStatisticsWebService.java
+++ b/src/main/java/org/olat/restapi/system/OpenOLATStatisticsWebService.java
@@ -41,7 +41,7 @@ import org.olat.core.util.WorkThreadInformations;
 import org.olat.core.util.session.UserSessionManager;
 import org.olat.course.CourseModule;
 import org.olat.group.BusinessGroupService;
-import org.olat.portfolio.manager.InvitationDAO;
+import org.olat.modules.portfolio.manager.InvitationDAO;
 import org.olat.repository.RepositoryManager;
 import org.olat.restapi.system.vo.IndexerStatisticsVO;
 import org.olat.restapi.system.vo.OpenOLATStatisticsVO;
diff --git a/src/main/java/org/olat/search/_spring/searchContext.xml b/src/main/java/org/olat/search/_spring/searchContext.xml
index a5ff981b238274f90985d00b67a2cd1334902ca4..f4e20de3c925d4466a96a7812981a42bba079291 100644
--- a/src/main/java/org/olat/search/_spring/searchContext.xml
+++ b/src/main/java/org/olat/search/_spring/searchContext.xml
@@ -131,8 +131,6 @@
 				<ref bean="groupIndexer" />
 				<ref bean="repositoryIndexer" />
 				<ref bean="identityIndexer" />
-				<ref bean="epDefaultMapIndexer" />
-				<ref bean="epStructuredMapIndexer" />
 				<ref bean="documentPoolIndexer" />
 				<ref bean="libraryIndexer" />
 			</list>
@@ -156,7 +154,6 @@
 				<ref bean="imsCpRepositoryIndexer" /> 
 				<ref bean="sharedFolderRepositoryIndexer" /> 
 				<ref bean="scormRepositoryIndexer" />
-				<ref bean="portfolioRepositoryIndexer" />
 			</list>
 		</property>
 	</bean>
@@ -185,7 +182,6 @@
 				<ref bean="dialogCourseNodeIndexer" />
 				<ref bean="projectBrokerCourseNodeIndexer" />
 				<ref bean="scormCourseNodeIndexer" />
-				<ref bean="portfolioCourseNodeIndexer" />
 				<ref bean="infoCourseNodeIndexer" />
 				<ref bean="calCourseNodeIndexer" />
 				<ref bean="ltiCourseNodeIndexer" />
@@ -257,7 +253,6 @@
 				<ref bean="groupForumIndexer" />
 				<ref bean="groupFolderIndexer" />
 				<ref bean="groupWikiIndexer"	/>
-				<ref bean="groupPortfolioIndexer" />
 				<ref bean="groupInfoIndexer" />
 			</list>
 		</property>
@@ -271,28 +266,6 @@
 	<bean id="groupInfoIndexer" class="org.olat.search.service.indexer.group.GroupInfoIndexer">
 		<property name="infoMessageManager" ref="infoMessageManager"/>
 	</bean>	
-
-	<!-- Portfolio indexers -->
-	<bean id="epDefaultMapIndexer" class="org.olat.search.service.indexer.PortfolioMapIndexer">
-		<property name="frontendManager" ref="epFrontendManager"/>
-		<property name="portfolioModule" ref="portfolioModule"/>
-	</bean>
-	<bean id="epStructuredMapIndexer" class="org.olat.search.service.indexer.PortfolioStructuredMapIndexer">
-		<property name="frontendManager" ref="epFrontendManager"/>
-		<property name="portfolioModule" ref="portfolioModule"/>
-	</bean>
-	<bean id="portfolioRepositoryIndexer" class="org.olat.search.service.indexer.repository.PortfolioRepositoryIndexer" scope="prototype">
-		<property name="structureManager" ref="epStructureManager"/>
-		<property name="portfolioModule" ref="portfolioModule"/>
-	</bean>
-	<bean id="portfolioCourseNodeIndexer" class="org.olat.search.service.indexer.repository.course.PortfolioCourseNodeIndexer" scope="prototype">
-		<property name="structureManager" ref="epStructureManager"/>
-		<property name="portfolioModule" ref="portfolioModule"/>
-	</bean>
-	<bean id="groupPortfolioIndexer" class="org.olat.search.service.indexer.group.GroupPortfolioIndexer">
-		<property name="frontendManager" ref="epFrontendManager"/>
-		<property name="portfolioModule" ref="portfolioModule"/>
-	</bean>
 	
 	<!-- Identity indexers -->
 	<bean id="identityIndexer" class="org.olat.search.service.indexer.identity.IdentityIndexer" >
@@ -300,7 +273,6 @@
 			<list>
 				<ref bean="profileIndexer" />
 				<ref bean="publicFolderIndexer"	/>
-				<ref bean="artefactIndexer" />
 			</list>
 		</property>				
 	</bean>
@@ -319,10 +291,6 @@
 	
 	<bean id="profileIndexer"	class="org.olat.search.service.indexer.identity.ProfileIndexer"     />
 	<bean id="publicFolderIndexer"	class="org.olat.search.service.indexer.identity.PublicFolderIndexer" />
-	<bean id="artefactIndexer" class="org.olat.search.service.indexer.identity.PortfolioArtefactIndexer">
-		<property name="frontendManager" ref="epFrontendManager"/>
-		<property name="portfolioModule" ref="portfolioModule"/>
-	</bean>
 
 
 	<!-- SEARCH PROXY SIDE CONFIGURATION -->
diff --git a/src/main/java/org/olat/search/service/document/PortfolioMapDocument.java b/src/main/java/org/olat/search/service/document/PortfolioMapDocument.java
deleted file mode 100644
index fb84fa4a4f49bef29333b9a51cabe601e1d9d166..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/search/service/document/PortfolioMapDocument.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.search.service.document;
-
-import java.util.List;
-
-import org.apache.logging.log4j.Logger;
-import org.apache.lucene.document.Document;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.User;
-import org.olat.core.id.UserConstants;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.filter.Filter;
-import org.olat.core.util.filter.FilterFactory;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.manager.EPPolicyManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.EPAbstractMap;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.search.model.OlatDocument;
-import org.olat.search.service.SearchResourceContext;
-
-/**
- * 
- * Description:<br>
- * Deliver the lucene document made from a portfolio
- * 
- * <P>
- * Initial Date:  12 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class PortfolioMapDocument extends OlatDocument {
-
-	private static final long serialVersionUID = -7960651550499734346L;
-	private static final Logger log = Tracing.createLoggerFor(PortfolioMapDocument.class);
-	
-	private static EPFrontendManager ePFMgr; 
-	private static EPPolicyManager policyManager;
-	private static PortfolioModule portfolioModule;
-
-	public PortfolioMapDocument() {
-		super();
-		ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
-		policyManager = CoreSpringFactory.getImpl(EPPolicyManager.class);
-		portfolioModule = CoreSpringFactory.getImpl(PortfolioModule.class);
-	}
-
-	public static Document createDocument(SearchResourceContext searchResourceContext, PortfolioStructure map) {		
-		PortfolioMapDocument document = new PortfolioMapDocument();
-		if(map instanceof EPAbstractMap) {
-			EPAbstractMap abstractMap = (EPAbstractMap)map;
-  		if(abstractMap.getGroups() != null) {
-  			List<Identity> identities = policyManager.getOwners(abstractMap);
-  			StringBuilder authors = new StringBuilder();
-  			for(Identity identity:identities) {
-  				if(authors.length() > 0) {
-  					authors.append(", ");
-  				}
-  				User user = identity.getUser();
-  				authors.append(user.getProperty(UserConstants.FIRSTNAME, null))
-  					.append(' ').append(user.getProperty(UserConstants.LASTNAME, null));
-  			}
-  			document.setAuthor(authors.toString());
-  		}
-			document.setCreatedDate(abstractMap.getCreationDate());
-		}
-		
-		Filter filter = FilterFactory.getHtmlTagAndDescapingFilter();
-		
-  	document.setTitle(map.getTitle());
-  	document.setDescription(filter.filter(map.getDescription()));
-  	StringBuilder sb = new StringBuilder();
-  	getContent(map, searchResourceContext, sb, filter);
-		document.setContent(sb.toString());
-		document.setResourceUrl(searchResourceContext.getResourceUrl());
-		document.setDocumentType(searchResourceContext.getDocumentType());
-		document.setCssIcon("o_ep_icon");
-		document.setParentContextType(searchResourceContext.getParentContextType());
-		document.setParentContextName(searchResourceContext.getParentContextName());
-		
-		if (log.isDebugEnabled()) log.debug(document.toString());
-		return document.getLuceneDocument();
-	}
-	
-	private static String getContent(PortfolioStructure map, SearchResourceContext resourceContext, StringBuilder sb, Filter filter) {
-		sb.append(' ').append(map.getTitle());
-		if(StringHelper.containsNonWhitespace(map.getDescription())) {
-			sb.append(' ').append(filter.filter(map.getDescription()));
-		}
-		for(PortfolioStructure child:ePFMgr.loadStructureChildren(map)) {
-			getContent(child, resourceContext, sb, filter);
-		}
-		for(AbstractArtefact artefact:ePFMgr.getArtefacts(map)) {
-			String reflexion = artefact.getReflexion();
-			if(StringHelper.containsNonWhitespace(reflexion)) {
-				sb.append(' ').append(filter.filter(reflexion));
-			}
-			
-			OLATResourceable ores = OresHelper.createOLATResourceableInstance(AbstractArtefact.class.getSimpleName(), artefact.getKey());
-			EPArtefactHandler<?> handler = portfolioModule.getArtefactHandler(artefact.getResourceableTypeName());
-
-			SearchResourceContext artefactResourceContext = new SearchResourceContext(resourceContext);
-			artefactResourceContext.setBusinessControlFor(ores);
-			OlatDocument doc = handler.getIndexerDocument(artefactResourceContext, artefact, ePFMgr);
-			sb.append(' ').append(doc.getContent());
-		}
-		return sb.toString();
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/search/service/indexer/AbstractPortfolioMapIndexer.java b/src/main/java/org/olat/search/service/indexer/AbstractPortfolioMapIndexer.java
deleted file mode 100644
index 27144003808d79d57a5064d22058c247a7089bb6..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/search/service/indexer/AbstractPortfolioMapIndexer.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.search.service.indexer;
-
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.logging.log4j.Logger;
-import org.apache.lucene.document.Document;
-import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.Roles;
-import org.olat.core.id.context.BusinessControl;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.logging.Tracing;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.ElementType;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.search.service.SearchResourceContext;
-import org.olat.search.service.document.PortfolioMapDocument;
-
-/**
- * 
- * Description:<br>
- * Index portoflio maps
- * 
- * <P>
- * Initial Date:  15 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public abstract class AbstractPortfolioMapIndexer extends AbstractHierarchicalIndexer {
-
-	private static final Logger log = Tracing.createLoggerFor(AbstractHierarchicalIndexer.class);
-
-	private PortfolioModule portfolioModule;
-	private EPFrontendManager frontendManager;
-	
-	private static final int BATCH_SIZE = 500;
-	
-	/**
-	 * [used by Spring]
-	 * @param portfolioModule
-	 */
-	public void setPortfolioModule(PortfolioModule portfolioModule) {
-		this.portfolioModule = portfolioModule;
-	}
-
-	/**
-	 * [used by Spring]
-	 * @param frontendManager
-	 */
-	public void setFrontendManager(EPFrontendManager frontendManager) {
-		this.frontendManager = frontendManager;
-	}
-	
-	protected abstract String getDocumentType();
-	
-	protected abstract ElementType getElementType();
-	
-	/**
-	 * Allow to accept or refuse some map for indexing
-	 * @param map
-	 * @return
-	 */
-	protected boolean accept(PortfolioStructureMap map) {
-		return map != null;
-	}
-	
-	@Override
-	public void doIndex(SearchResourceContext searchResourceContext, Object object, OlatFullIndexer indexerWriter)
-	throws IOException, InterruptedException {
-		if(!portfolioModule.isEnabled()) return;
-		
-		SearchResourceContext resourceContext = new SearchResourceContext();
-
-		int firstResult = 0;
-		List<PortfolioStructure> structures = null;
-		do {
-			structures = frontendManager.getStructureElements(firstResult, 500, getElementType());
-			for(PortfolioStructure structure:structures) {
-				if(structure instanceof PortfolioStructureMap) {
-					PortfolioStructureMap map = (PortfolioStructureMap)structure;
-					if(accept(map)) {
-						resourceContext.setDocumentType(getDocumentType());
-						resourceContext.setBusinessControlFor(map.getOlatResource());
-						Document document = PortfolioMapDocument.createDocument(resourceContext, map);
-						indexerWriter.addDocument(document);
-					}
-				}
-			}
-			firstResult += structures.size();
-			
-		} while(structures != null && structures.size() == BATCH_SIZE);
-	}
-
-	@Override
-	public boolean checkAccess(ContextEntry contextEntry, BusinessControl businessControl, Identity identity, Roles roles) {
-		try {
-			OLATResourceable ores = contextEntry.getOLATResourceable();
-			return !roles.isGuestOnly() && frontendManager.isMapVisible(identity, ores) && super.checkAccess(contextEntry, businessControl, identity, roles);
-		} catch (Exception e) {
-			log.warn("Couldn't ask if map is visible: " + contextEntry, e);
-			return false;
-		}
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/search/service/indexer/PortfolioMapIndexer.java b/src/main/java/org/olat/search/service/indexer/PortfolioMapIndexer.java
deleted file mode 100644
index fde584c1ea674a97b44e45380e21dade8a43f409..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/search/service/indexer/PortfolioMapIndexer.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.search.service.indexer;
-
-import org.olat.portfolio.model.structel.EPDefaultMap;
-import org.olat.portfolio.model.structel.ElementType;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-
-/**
- * 
- * Description:<br>
- * Index the map of a user
- * 
- * <P>
- * Initial Date:  15 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class PortfolioMapIndexer extends AbstractPortfolioMapIndexer {
-
-	public static final String TYPE = "type.db." + EPDefaultMap.class.getSimpleName();
-	public static final String ORES_TYPE = EPDefaultMap.class.getSimpleName(); 
-	
-	@Override
-	protected String getDocumentType() {
-		return TYPE;
-	}
-	
-	@Override
-	protected ElementType getElementType() {
-		return ElementType.DEFAULT_MAP;
-	}
-
-	@Override
-	public String getSupportedTypeName() {
-		return ORES_TYPE;
-	}
-
-	@Override
-	protected boolean accept(PortfolioStructureMap map) {
-		return map instanceof EPDefaultMap && ((EPDefaultMap)map).getGroups() != null;
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/search/service/indexer/PortfolioStructuredMapIndexer.java b/src/main/java/org/olat/search/service/indexer/PortfolioStructuredMapIndexer.java
deleted file mode 100644
index 1c581058b450bd3e8606b8af617d9df5dc48c19c..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/search/service/indexer/PortfolioStructuredMapIndexer.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.search.service.indexer;
-
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.olat.portfolio.model.structel.ElementType;
-
-/**
- * 
- * Description:<br>
- * Index the map of a user
- * 
- * <P>
- * Initial Date:  15 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class PortfolioStructuredMapIndexer extends AbstractPortfolioMapIndexer {
-
-	public static final String STRUCTURED_TYPE = "type.db." + EPStructuredMap.class.getSimpleName();
-	public static final String STRUCTURED_ORES_TYPE = EPStructuredMap.class.getSimpleName(); 
-	
-
-	@Override
-	protected String getDocumentType() {
-		return STRUCTURED_TYPE;
-	}
-
-	@Override
-	protected ElementType getElementType() {
-		return ElementType.STRUCTURED_MAP;
-	}
-
-	@Override
-	public String getSupportedTypeName() {
-		return STRUCTURED_ORES_TYPE;
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/search/service/indexer/PortfolioStructuredMapTemplateIndexer.java b/src/main/java/org/olat/search/service/indexer/PortfolioStructuredMapTemplateIndexer.java
deleted file mode 100644
index bf2f5310b9056e1c15d20981e00cad8ac47e837f..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/search/service/indexer/PortfolioStructuredMapTemplateIndexer.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.search.service.indexer;
-
-import org.olat.portfolio.model.structel.EPStructuredMapTemplate;
-import org.olat.portfolio.model.structel.ElementType;
-
-/**
- * 
- * Description:<br>
- * Index the map of a user
- * 
- * <P>
- * Initial Date:  15 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class PortfolioStructuredMapTemplateIndexer extends AbstractPortfolioMapIndexer {
-
-	public static final String TEMPLATE_TYPE = "type.db." + EPStructuredMapTemplate.class.getSimpleName();
-	public static final String TEMPLATE_ORES_TYPE = EPStructuredMapTemplate.class.getSimpleName(); 
-	
-
-	@Override
-	protected String getDocumentType() {
-		return TEMPLATE_TYPE;
-	}
-
-	@Override
-	protected ElementType getElementType() {
-		return ElementType.TEMPLATE_MAP;
-	}
-
-	@Override
-	public String getSupportedTypeName() {
-		return TEMPLATE_ORES_TYPE;
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/search/service/indexer/group/GroupPortfolioIndexer.java b/src/main/java/org/olat/search/service/indexer/group/GroupPortfolioIndexer.java
deleted file mode 100644
index 7438489d0f80b2b0897b679d841328734bfbcb92..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/search/service/indexer/group/GroupPortfolioIndexer.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.search.service.indexer.group;
-
-import java.io.IOException;
-
-import org.apache.lucene.document.Document;
-import org.olat.collaboration.CollaborationTools;
-import org.olat.core.logging.AssertException;
-import org.olat.group.BusinessGroup;
-import org.olat.group.ui.run.BusinessGroupMainRunController;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.EPDefaultMap;
-import org.olat.portfolio.model.structel.ElementType;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.properties.NarrowedPropertyManager;
-import org.olat.properties.Property;
-import org.olat.search.service.SearchResourceContext;
-import org.olat.search.service.document.GroupDocument;
-import org.olat.search.service.document.PortfolioMapDocument;
-import org.olat.search.service.indexer.AbstractHierarchicalIndexer;
-import org.olat.search.service.indexer.OlatFullIndexer;
-
-/**
- * 
- * Description:<br>
- * Index the portfolio map in the groups
- * 
- * <P>
- * Initial Date:  17 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class GroupPortfolioIndexer extends AbstractHierarchicalIndexer  {
-	
-	public static final String TYPE = "type.group." + EPDefaultMap.class.getSimpleName();
-	public static final String ORES_TYPE = EPDefaultMap.class.getSimpleName(); 
-	
-	private PortfolioModule portfolioModule;
-	private EPFrontendManager frontendManager;
-	
-	/**
-	 * [used by Spring]
-	 * @param portfolioModule
-	 */
-	public void setPortfolioModule(PortfolioModule portfolioModule) {
-		this.portfolioModule = portfolioModule;
-	}
-
-	/**
-	 * [used by Spring]
-	 * @param frontendManager
-	 */
-	public void setFrontendManager(EPFrontendManager frontendManager) {
-		this.frontendManager = frontendManager;
-	}
-
-	protected String getDocumentType() {
-		return TYPE;
-	}
-
-	protected ElementType getElementType() {
-		return ElementType.DEFAULT_MAP;
-	}
-
-	@Override
-	public String getSupportedTypeName() {
-		return ORES_TYPE;
-	}
-	
-	@Override
-	public void doIndex(SearchResourceContext parentResourceContext, Object businessObj, OlatFullIndexer indexerWriter)
-	throws IOException, InterruptedException {
-		if(!portfolioModule.isEnabled()) return;
-		if (!(businessObj instanceof BusinessGroup) )
-			throw new AssertException("businessObj must be BusinessGroup");
-		
-		BusinessGroup businessGroup = (BusinessGroup)businessObj;
-		NarrowedPropertyManager npm = NarrowedPropertyManager.getInstance(businessGroup);
-		Property mapKeyProperty = npm.findProperty(null, null, CollaborationTools.PROP_CAT_BG_COLLABTOOLS, CollaborationTools.KEY_PORTFOLIO);
-		// Check if portfolio map property exist
-		if (mapKeyProperty != null) {
-			Long mapKey = mapKeyProperty.getLongValue();
-			String version = mapKeyProperty.getStringValue();
-			if(version == null || !version.equals("2")) {
-				PortfolioStructure map = frontendManager.loadPortfolioStructureByKey(mapKey);
-				if(map != null) {
-					SearchResourceContext resourceContext = new SearchResourceContext(parentResourceContext);
-					resourceContext.setBusinessControlFor(BusinessGroupMainRunController.ORES_TOOLPORTFOLIO);
-					resourceContext.setDocumentType(TYPE);
-					resourceContext.setParentContextType(GroupDocument.TYPE);
-					resourceContext.setParentContextName(businessGroup.getName());
-					Document document = PortfolioMapDocument.createDocument(resourceContext, map);
-					indexerWriter.addDocument(document);
-				}
-			}
-		}
-	}
-}
diff --git a/src/main/java/org/olat/search/service/indexer/identity/PortfolioArtefactIndexer.java b/src/main/java/org/olat/search/service/indexer/identity/PortfolioArtefactIndexer.java
deleted file mode 100644
index 151584a8986d6484869e0bddb400b726ec242cf7..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/search/service/indexer/identity/PortfolioArtefactIndexer.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.search.service.indexer.identity;
-
-import java.io.IOException;
-import java.util.List;
-
-import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.Roles;
-import org.olat.core.id.context.BusinessControl;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.portfolio.EPArtefactHandler;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.search.model.OlatDocument;
-import org.olat.search.service.SearchResourceContext;
-import org.olat.search.service.indexer.AbstractHierarchicalIndexer;
-import org.olat.search.service.indexer.OlatFullIndexer;
-
-/**
- * 
- * Description:<br>
- * Index artefacts
- * 
- * <P>
- * Initial Date:  12 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class PortfolioArtefactIndexer extends AbstractHierarchicalIndexer {
-	
-	public static final String TYPE = "type.identity." + AbstractArtefact.class.getSimpleName();
-		
-	private static final int MAX_RESULTS = 500;
-	
-	private PortfolioModule portfolioModule;
-	private EPFrontendManager frontendManager;
-	
-	/**
-	 * [used by Spring]
-	 * @param frontendManager
-	 */
-	public void setFrontendManager(EPFrontendManager frontendManager) {
-		this.frontendManager = frontendManager;
-	}
-	
-	/**
-	 * [used by Spring]
-	 * @param portfolioModule
-	 */
-	public void setPortfolioModule(PortfolioModule portfolioModule) {
-		this.portfolioModule = portfolioModule;
-	}
-
-	@Override
-	public String getSupportedTypeName() {
-		return AbstractArtefact.class.getSimpleName();
-	}
-	
-	@Override
-	public void doIndex(SearchResourceContext searchResourceContext, Object object, OlatFullIndexer indexerWriter)
-	throws IOException, InterruptedException {
-		if(!portfolioModule.isEnabled()) return;
-		Identity identity = (Identity)object;
-//		SearchResourceContext resourceContext = new SearchResourceContext(searchResourceContext); // dont do this way, as it would then try to open an artefact over visiting card -> not possible!
-		SearchResourceContext resourceContext = new SearchResourceContext();
-		resourceContext.setDocumentType(TYPE);
-		resourceContext.setParentContextType(null);
-		
-		int currentPosition = 0;
-		List<AbstractArtefact> artefacts;
-		do {
-			artefacts = frontendManager.getArtefacts(identity, currentPosition, MAX_RESULTS);
-			for(AbstractArtefact artefact:artefacts) {
-				OLATResourceable ores = OresHelper.createOLATResourceableInstance(AbstractArtefact.class.getSimpleName(), artefact.getKey());
-				EPArtefactHandler<?> handler = portfolioModule.getArtefactHandler(artefact.getResourceableTypeName());
-				resourceContext.setBusinessControlFor(ores);
-				OlatDocument doc = handler.getIndexerDocument(resourceContext, artefact, frontendManager);
-				Identity author = artefact.getAuthor();
-				if(author != null && author.getUser() != null) {
-					doc.setReservedTo(author.getKey().toString());
-				}
-				if(doc != null) {
-					indexerWriter.addDocument(doc.getLuceneDocument());
-				}
-			}
-			currentPosition += artefacts.size();
-		} while (artefacts.size() == MAX_RESULTS);
-
-		super.doIndex(searchResourceContext, object, indexerWriter);
-	}
-
-	@Override
-	public boolean checkAccess(ContextEntry contextEntry, BusinessControl businessControl, Identity identity, Roles roles) {
-		//reserved, check made by indexer with the RESERVEDTO field
-		return super.checkAccess(contextEntry, businessControl, identity, roles);
-	}
-}
diff --git a/src/main/java/org/olat/search/service/indexer/repository/PortfolioRepositoryIndexer.java b/src/main/java/org/olat/search/service/indexer/repository/PortfolioRepositoryIndexer.java
deleted file mode 100644
index de4fcc2231de5f4d147adf49d4aefae6c0589986..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/search/service/indexer/repository/PortfolioRepositoryIndexer.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.search.service.indexer.repository;
-
-import java.io.IOException;
-
-import org.apache.logging.log4j.Logger;
-import org.apache.lucene.document.Document;
-import org.olat.core.id.Identity;
-import org.olat.core.id.Roles;
-import org.olat.core.id.context.BusinessControl;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.logging.Tracing;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPStructureManager;
-import org.olat.portfolio.model.structel.EPStructuredMapTemplate;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.repository.RepositoryEntry;
-import org.olat.resource.OLATResource;
-import org.olat.search.service.SearchResourceContext;
-import org.olat.search.service.document.PortfolioMapDocument;
-import org.olat.search.service.indexer.AbstractHierarchicalIndexer;
-import org.olat.search.service.indexer.OlatFullIndexer;
-
-/**
- * 
- * Description:<br>
- * Index templates and only templates in the repository 
- * 
- * <P>
- * Initial Date:  12 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com
- */
-public class PortfolioRepositoryIndexer extends AbstractHierarchicalIndexer {
-	
-	private static final Logger log = Tracing.createLoggerFor(PortfolioRepositoryIndexer.class);
-	
-	public static final String TYPE = "type.repository.entry.ep";
-	public static final String ORES_TYPE_EP = "EPStructuredMapTemplate";
-	
-	private EPStructureManager structureManager;
-
-	private PortfolioModule portfolioModule;
-	
-	/**
-	 * [used by Spring]
-	 * @param structureManager
-	 */
-	public void setStructureManager(EPStructureManager structureManager) {
-		this.structureManager = structureManager;
-	}
-
-	/**
-	 * [used by Spring]
-	 * @param portfolioModule
-	 */
-	public void setPortfolioModule(PortfolioModule portfolioModule) {
-		this.portfolioModule = portfolioModule;
-	}
-	
-	@Override
-	public String getSupportedTypeName() {
-		return ORES_TYPE_EP;
-	}
-	
-	@Override
-	public void doIndex(SearchResourceContext resourceContext, Object object, OlatFullIndexer indexWriter)
-	throws IOException, InterruptedException {
-		if(!portfolioModule.isEnabled()) return;
-		if (log.isDebugEnabled()) log.debug("Index portfolio templates...");
-		
-		RepositoryEntry repositoryEntry = (RepositoryEntry)object;
-		OLATResource ores = repositoryEntry.getOlatResource();
-		PortfolioStructure element = structureManager.loadPortfolioStructure(ores);
-		// only index templates
-		if(element instanceof EPStructuredMapTemplate) {
-			resourceContext.setDocumentType(TYPE);
-			resourceContext.setParentContextType(TYPE);
-			resourceContext.setParentContextName(repositoryEntry.getDisplayname());
-			resourceContext.setFilePath(element.getKey().toString());
-
-			Document document = PortfolioMapDocument.createDocument(resourceContext, element);
-			indexWriter.addDocument(document);
-		}
-	}
-
-	@Override
-	public boolean checkAccess(ContextEntry contextEntry, BusinessControl businessControl, Identity identity, Roles roles) {
-		return super.checkAccess(contextEntry, businessControl, identity, roles);
-	}
-}
diff --git a/src/main/java/org/olat/search/service/indexer/repository/course/PortfolioCourseNodeIndexer.java b/src/main/java/org/olat/search/service/indexer/repository/course/PortfolioCourseNodeIndexer.java
deleted file mode 100644
index 52392eb09b94da8f97b577286d894e1273768fc4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/search/service/indexer/repository/course/PortfolioCourseNodeIndexer.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.search.service.indexer.repository.course;
-
-import java.io.IOException;
-
-import org.apache.lucene.document.Document;
-import org.olat.core.id.Identity;
-import org.olat.core.id.Roles;
-import org.olat.core.id.context.BusinessControl;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.course.ICourse;
-import org.olat.course.nodes.CourseNode;
-import org.olat.course.nodes.PortfolioCourseNode;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPStructureManager;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.repository.RepositoryEntry;
-import org.olat.resource.OLATResource;
-import org.olat.search.service.SearchResourceContext;
-import org.olat.search.service.document.CourseNodeDocument;
-import org.olat.search.service.document.PortfolioMapDocument;
-import org.olat.search.service.indexer.DefaultIndexer;
-import org.olat.search.service.indexer.OlatFullIndexer;
-
-
-/**
- * Description:<br>
- * Index template of a course node
- * 
- * <P>
- * Initial Date:  12 nov. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class PortfolioCourseNodeIndexer extends DefaultIndexer implements CourseNodeIndexer {
-	
-	public final static String NODE_TYPE = "type.course.node.ep";
-	private final static String SUPPORTED_TYPE_NAME = "org.olat.course.nodes.PortfolioCourseNode";
-	
-	private EPStructureManager structureManager;
-	private PortfolioModule portfolioModule;
-	
-/**
- * [used by Spring]
- * @param structureManager
- */
-	public void setStructureManager(EPStructureManager structureManager) {
-		this.structureManager = structureManager;
-	}
-	
-	/**
-	 * [used by Spring]
-	 * @param portfolioModule
-	 */
-	public void setPortfolioModule(PortfolioModule portfolioModule) {
-		this.portfolioModule = portfolioModule;
-	}
-
-	@Override
-	public String getSupportedTypeName() {
-		return SUPPORTED_TYPE_NAME;
-	}
-
-	@Override
-	public void doIndex(SearchResourceContext searchResourceContext, Object parentObject, OlatFullIndexer indexer)
-			throws IOException, InterruptedException {
-		//
-	}
-
-	@Override
-	public void doIndex(SearchResourceContext searchResourceContext, ICourse course, CourseNode courseNode, OlatFullIndexer indexWriter)
-	throws IOException, InterruptedException {
-		if(!portfolioModule.isEnabled()) return;
-		
-		SearchResourceContext courseNodeResourceContext = createSearchResourceContext(searchResourceContext, courseNode, NODE_TYPE);
-		Document document = CourseNodeDocument.createDocument(courseNodeResourceContext, courseNode);
-		indexWriter.addDocument(document);
-		
-		PortfolioCourseNode portfolioNode = (PortfolioCourseNode)courseNode;
-		RepositoryEntry repoEntry = portfolioNode.getReferencedRepositoryEntry();
-		if(repoEntry != null) {
-			OLATResource ores = repoEntry.getOlatResource();
-			PortfolioStructure element = structureManager.loadPortfolioStructure(ores);
-			if(element != null) {
-				Document pDocument = PortfolioMapDocument.createDocument(courseNodeResourceContext, element);
-				indexWriter.addDocument(pDocument);
-			}
-		}
-	}
-	
-	@Override
-	public boolean checkAccess(ContextEntry contextEntry, BusinessControl businessControl, Identity identity, Roles roles) {
-		if(roles.isGuestOnly()) {
-			return false;
-		}
-		return super.checkAccess(contextEntry, businessControl, identity, roles);
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_10_0_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_10_0_0.java
index 6f6c1438a0d0f835fd787f8355ed4821c5548e08..f45cce07835fe876cc9f8c943e619b6b7ad0b345 100644
--- a/src/main/java/org/olat/upgrade/OLATUpgrade_10_0_0.java
+++ b/src/main/java/org/olat/upgrade/OLATUpgrade_10_0_0.java
@@ -26,16 +26,12 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import javax.persistence.TypedQuery;
-
 import org.apache.commons.io.FileUtils;
 import org.apache.logging.log4j.Logger;
 import org.olat.admin.layout.LayoutModule;
 import org.olat.basesecurity.Group;
 import org.olat.basesecurity.GroupMembership;
 import org.olat.basesecurity.GroupRoles;
-import org.olat.basesecurity.Policy;
-import org.olat.basesecurity.PolicyImpl;
 import org.olat.basesecurity.SecurityGroup;
 import org.olat.basesecurity.SecurityGroupMembershipImpl;
 import org.olat.basesecurity.manager.GroupDAO;
@@ -45,15 +41,11 @@ import org.olat.core.commons.persistence.DB;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.WebappHelper;
-import org.olat.portfolio.manager.EPMapPolicy;
 import org.olat.properties.Property;
 import org.olat.properties.PropertyManager;
-import org.olat.repository.manager.RepositoryEntryRelationDAO;
 import org.olat.resource.OLATResource;
 import org.olat.upgrade.model.BGResourceRelation;
 import org.olat.upgrade.model.BusinessGroupUpgrade;
-import org.olat.upgrade.model.EPMapUpgrade;
-import org.olat.upgrade.model.EPMapUpgradeToGroupRelation;
 import org.olat.upgrade.model.InvitationUpgrade;
 import org.olat.upgrade.model.RepositoryEntryUpgrade;
 import org.olat.upgrade.model.RepositoryEntryUpgradeToGroupRelation;
@@ -69,14 +61,11 @@ public class OLATUpgrade_10_0_0 extends OLATUpgrade {
 	
 	private static final Logger log = Tracing.createLoggerFor(OLATUpgrade_10_0_0.class);
 
-	private static final String PERMISSION_READ = "read";
-	
 	private static final int BATCH_SIZE = 50;
 	private static final String TASK_BUSINESS_GROUPS = "Upgrade business groups";
 	private static final String TASK_REPOENTRIES = "Upgrade repository entries";
 	private static final String TASK_REPOENTRY_TO_BUSINESSGROUP = "Upgrade relation business groups to repository entries";
 	private static final String TASK_INVITATION = "Upgrade invitations";
-	private static final String TASK_UPGRADE_MAP = "Upgrade e-portfolio maps";
 	private static final String TASK_LOGO = "Upgrade custom logo";
 	private static final String VERSION = "OLAT_10.0.0";
 	
@@ -92,8 +81,6 @@ public class OLATUpgrade_10_0_0 extends OLATUpgrade {
 	@Autowired
 	private GroupDAO groupDao;
 	@Autowired
-	private RepositoryEntryRelationDAO repositoryEntryToGroupDAO;
-	@Autowired
 	private PropertyManager propertyManager;
 	@Autowired
 	private LayoutModule layoutModule;
@@ -123,7 +110,6 @@ public class OLATUpgrade_10_0_0 extends OLATUpgrade {
 		allOk &= upgradeRepositoryEntries(upgradeManager, uhd);
 		allOk &= upgradeRelationsRepoToBusinessGroups(upgradeManager, uhd);
 		allOk &= upgradeInvitation(upgradeManager, uhd);
-		allOk &= upgradeEPMap(upgradeManager, uhd);
 		
 		uhd.setInstallationComplete(allOk);
 		upgradeManager.setUpgradesHistory(uhd, VERSION);
@@ -375,189 +361,6 @@ public class OLATUpgrade_10_0_0 extends OLATUpgrade {
 			dbInstance.getCurrentEntityManager().merge(invitation);
 		}
 	}
-	
-	private boolean upgradeEPMap(UpgradeManager upgradeManager, UpgradeHistoryData uhd) {
-		if (!uhd.getBooleanDataValue(TASK_UPGRADE_MAP)) {
-			int counter = 0;
-			List<EPMapUpgrade> businessGroups;
-			do {
-				businessGroups = findMaps(counter, BATCH_SIZE);
-				for(EPMapUpgrade businessGroup:businessGroups) {
-					processMap(businessGroup);
-				}
-				counter += businessGroups.size();
-				log.info(Tracing.M_AUDIT, "Maps processed: " + businessGroups.size() + ", total processed (" + counter + ")");
-				dbInstance.commitAndCloseSession();
-			} while(businessGroups.size() == BATCH_SIZE);
-			uhd.setBooleanDataValue(TASK_UPGRADE_MAP, true);
-			upgradeManager.setUpgradesHistory(uhd, VERSION);
-		}
-		return true;
-	}
-	
-	private void processMap(EPMapUpgrade map) {
-		if(hasGroupsRelations(map)) {
-			return;
-		}
-		
-		Set<EPMapUpgradeToGroupRelation> relations = new HashSet<>();
-		SecurityGroup ownerGroup = map.getOwnerGroup();
-		if(ownerGroup != null) {
-			//create default group
-			RepositoryEntryUpgrade re = findMapRepoEntry(ownerGroup);
-			if(re != null) {
-				Group reGroup = repositoryEntryToGroupDAO.getDefaultGroup(re);
-				if(reGroup != null) {
-					relations.add(createDefaultGroup(map, reGroup));
-				}
-			}
-			if(relations.isEmpty()) {
-				Group group = groupDao.createGroup();
-				relations.add(createDefaultGroup(map, group));
-				processSecurityGroup(group, GroupRoles.owner.name(), ownerGroup);
-			}
-			
-			//create policy -> relation
-			List<Policy> policies = getPoliciesOfResource(map.getOlatResource(), null);
-			for(Policy policy:policies) {
-				if(policy.getPermission().contains(PERMISSION_READ)) {
-					EPMapUpgradeToGroupRelation policyRelation = processMapPolicy(policy, map);
-					if(policyRelation != null) {
-						relations.add(policyRelation);
-					}
-				}
-			}
-			
-			for(EPMapUpgradeToGroupRelation relation:relations) {
-				dbInstance.getCurrentEntityManager().persist(relation);
-			}
-		}
-	}
-	
-	private List<Policy> getPoliciesOfResource(OLATResource resource, SecurityGroup secGroup) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select poi from ").append(PolicyImpl.class.getName()).append(" poi where ")
-			.append(" poi.olatResource.key=:resourceKey ");
-		if(secGroup != null) {
-			sb.append(" and poi.securityGroup.key=:secGroupKey");
-		}
-		
-		TypedQuery<Policy> query = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), Policy.class)
-				.setParameter("resourceKey", resource.getKey());
-		if(secGroup != null) {
-			query.setParameter("secGroupKey", secGroup.getKey());
-		}
-		return query.getResultList();
-	}
-	
-	private boolean hasGroupsRelations(EPMapUpgrade map) {
-		String sb = "select count(rel.key) from structureuptogroup as rel where rel.entry.key=:mapKey";
-		
-		List<Number> counts = dbInstance.getCurrentEntityManager().createQuery(sb, Number.class)
-			.setParameter("mapKey", map.getKey())
-			.getResultList();
-		return counts != null && counts.size() > 0 && counts.get(0) != null && counts.get(0).intValue() > 0;
-	}
-	
-	private EPMapUpgradeToGroupRelation processMapPolicy(Policy policy, EPMapUpgrade element) {
-		String permission = policy.getPermission();
-		SecurityGroup secGroup = policy.getSecurityGroup();
-		Group group;
-		String role;
-		if(permission.startsWith(EPMapPolicy.Type.user.name())) {
-			group = groupDao.createGroup();
-			processSecurityGroup(group, GroupRoles.participant.name(), secGroup);
-			role = EPMapPolicy.Type.user.name();
-		} else if (permission.startsWith(EPMapPolicy.Type.group.name())) {
-			group = findGroupOfBusinessGroup(secGroup);
-			role = EPMapPolicy.Type.group.name();
-		} else if (permission.startsWith(EPMapPolicy.Type.invitation.name())) {
-			InvitationUpgrade invitation = findInvitation(policy.getSecurityGroup());
-			if(invitation == null) {
-				return null;
-			}
-			group = invitation.getBaseGroup();
-			role = EPMapPolicy.Type.invitation.name();
-		} else if (permission.startsWith(EPMapPolicy.Type.allusers.name())) {
-			group = groupDao.createGroup(EPMapPolicy.Type.allusers.name());
-			role = EPMapPolicy.Type.allusers.name();
-		} else {
-			return null;
-		}
-		
-		if(group == null) {
-			log.error("Group not resolve for policy of map: " + element.getKey() + " and policy: " + policy.getKey());
-			return null;
-		}
-		
-		EPMapUpgradeToGroupRelation relation = new EPMapUpgradeToGroupRelation();
-		relation.setDefaultGroup(false);
-		relation.setCreationDate(new Date());
-		relation.setEntry(element);
-		relation.setValidTo(policy.getTo());
-		relation.setValidFrom(policy.getFrom());
-		relation.setGroup(group);
-		relation.setRole(role);
-		return relation;
-	}
-	
-	private InvitationUpgrade findInvitation(SecurityGroup secGroup) {
-		String sb = "select invitation from invitationupgrade as invitation where invitation.securityGroup=:secGroup";
-		List<InvitationUpgrade> invitations = dbInstance.getCurrentEntityManager()
-				.createQuery(sb, InvitationUpgrade.class)
-				.setParameter("secGroup", secGroup)
-				.getResultList();
-		return invitations.isEmpty() ? null : invitations.get(0);
-	}
-	
-	private EPMapUpgradeToGroupRelation createDefaultGroup(EPMapUpgrade element, Group group) {
-		EPMapUpgradeToGroupRelation relation = new EPMapUpgradeToGroupRelation();
-		relation.setDefaultGroup(true);
-		relation.setCreationDate(new Date());
-		relation.setGroup(group);
-		relation.setEntry(element);
-		return relation;
-	}
-	
-	private Group findGroupOfBusinessGroup(SecurityGroup secGroup) {
-		StringBuilder sb = new StringBuilder(); 
-		sb.append("select bgi.baseGroup from ").append(BusinessGroupUpgrade.class.getName()).append(" as bgi ")
-		  .append(" where (bgi.partipiciantGroup=:secGroup or bgi.ownerGroup=:secGroup or bgi.waitingGroup=:secGroup)");
-
-		List<Group> res = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), Group.class)
-				.setParameter("secGroup", secGroup)
-				.getResultList();
-
-		if(res.isEmpty()) return null;
-		return res.get(0);
-	}
-	
-	private RepositoryEntryUpgrade findMapRepoEntry(SecurityGroup ownerGroup) {
-		StringBuilder sb = new StringBuilder();	
-		sb.append("select v from ").append(RepositoryEntryUpgrade.class.getName()).append(" as v")
-		  .append(" where v.ownerGroup=:ownerGroup");
-		List<RepositoryEntryUpgrade> res = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), RepositoryEntryUpgrade.class)
-				.setParameter("ownerGroup", ownerGroup)
-				.getResultList();
-		if(res.size() > 0) {
-			return res.get(0);
-		}
-		return null;
-	}
-	
-	private List<EPMapUpgrade> findMaps(int firstResult, int maxResults) {
-		StringBuilder sb = new StringBuilder();	
-		sb.append("select map from ").append(EPMapUpgrade.class.getName()).append(" map")
-		  .append(" where map.ownerGroup is not null")
-		  .append(" order by map.key");
-		return dbInstance.getCurrentEntityManager().createQuery(sb.toString(), EPMapUpgrade.class)
-				.setFirstResult(firstResult)
-				.setMaxResults(maxResults)
-				.getResultList();
-	}
 
 	private void processSecurityGroup(Group group, String role, SecurityGroup secGroup) {
 		if(secGroup == null) return;
diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_11_0_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_11_0_0.java
index ecbe9112ce2c3e283b3103cfd9e9dbb4282d15ff..bc78fa651331f0b5130495def96d3edaeb71e929 100644
--- a/src/main/java/org/olat/upgrade/OLATUpgrade_11_0_0.java
+++ b/src/main/java/org/olat/upgrade/OLATUpgrade_11_0_0.java
@@ -52,7 +52,6 @@ import org.olat.core.commons.persistence.DB;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.Identity;
 import org.olat.core.id.IdentityEnvironment;
-import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.Roles;
 import org.olat.core.logging.OLATRuntimeException;
 import org.olat.core.logging.Tracing;
@@ -62,14 +61,12 @@ import org.olat.core.util.Util;
 import org.olat.core.util.cache.CacheWrapper;
 import org.olat.core.util.io.SystemFileFilter;
 import org.olat.core.util.nodes.INode;
-import org.olat.core.util.resource.OresHelper;
 import org.olat.core.util.tree.TreeVisitor;
 import org.olat.core.util.tree.Visitor;
 import org.olat.core.util.vfs.LocalFolderImpl;
 import org.olat.core.util.vfs.VFSManager;
 import org.olat.course.CorruptedCourseException;
 import org.olat.course.CourseFactory;
-import org.olat.course.CourseModule;
 import org.olat.course.ICourse;
 import org.olat.course.assessment.CourseAssessmentService;
 import org.olat.course.assessment.handler.AssessmentConfig;
@@ -113,11 +110,6 @@ import org.olat.modules.assessment.model.AssessmentEntryStatus;
 import org.olat.modules.portfolio.PortfolioV2Module;
 import org.olat.modules.scorm.assessment.CmiData;
 import org.olat.modules.scorm.assessment.ScormAssessmentManager;
-import org.olat.portfolio.PortfolioModule;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.structel.EPStructureElement;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.model.structel.StructureStatusEnum;
 import org.olat.properties.Property;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntryRef;
@@ -152,8 +144,6 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade {
 	@Autowired
 	private GTAManager gtaManager;
 	@Autowired
-	private EPFrontendManager ePFMgr;
-	@Autowired
 	private QTIResultManager qtiResultManager;
 	@Autowired
 	private RepositoryService repositoryService;
@@ -162,9 +152,6 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade {
 	@Autowired
 	private BusinessGroupService businessGroupService;
 	
-
-	@Autowired
-	private PortfolioModule portfolioModule;
 	@Autowired
 	private PortfolioV2Module portfolioV2Module;
 
@@ -206,18 +193,9 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade {
 	private boolean upgradePortfolioSettings(UpgradeManager upgradeManager, UpgradeHistoryData uhd) {
 		boolean allOk = true;
 		if (!uhd.getBooleanDataValue(PORTFOLIO_SETTINGS)) {
-			if(portfolioModule.isEnabled()) {
-				portfolioV2Module.setEnabled(true);
-				
-				boolean hasMaps = hasMap();
-				if(!hasMaps) {
-					portfolioModule.setEnabled(false);
-				}
-			} else {
-				boolean hasBinder = hasBinder();
-				if(!hasBinder) {
-					portfolioV2Module.setEnabled(false);
-				}
+			boolean hasBinder = hasBinder();
+			if(!hasBinder) {
+				portfolioV2Module.setEnabled(false);
 			}
 			uhd.setBooleanDataValue(PORTFOLIO_SETTINGS, allOk);
 			upgradeManager.setUpgradesHistory(uhd, VERSION);
@@ -225,21 +203,6 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade {
 		return allOk;
 	}
 	
-	private boolean hasMap() {
-		try {
-			StringBuilder sb = new StringBuilder();
-			sb.append("select stEl.key from ").append(EPStructureElement.class.getName()).append(" stEl ");
-			List<Long> count =	dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Long.class)
-					.setFirstResult(0)
-					.setMaxResults(1)
-					.getResultList();
-			return count != null && count.size() > 0 && count.get(0) != null && count.get(0) >= 0;
-		} catch (Exception e) {
-			log.error("", e);
-			return true;
-		}
-	}
-	
 	private boolean hasBinder() {
 		try {
 			StringBuilder sb = new StringBuilder();
@@ -410,7 +373,6 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade {
 			
 			//check the transient qti ser
 			CourseNode rootNode = course.getRunStructure().getRootNode();
-			CourseAssessmentService courseAssessmentService = CoreSpringFactory.getImpl(CourseAssessmentService.class);
 			new TreeVisitor(new Visitor() {
 				@Override
 				public void visit(INode node) {
@@ -819,8 +781,6 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade {
 				processAssessmentPropertyForTA(assessedIdentity, entry, (TACourseNode)courseNode, course);
 			} else if(courseNode instanceof IQTESTCourseNode) {
 				processAssessmentPropertyForIQTEST(assessedIdentity, entry, (IQTESTCourseNode)courseNode, course);
-			} else if(courseNode instanceof PortfolioCourseNode) {
-				processAssessmentPropertyForPortfolio(assessedIdentity, entry, (PortfolioCourseNode)courseNode, course);
 			} else if(courseNode instanceof MSCourseNode) {
 				entry.setAssessmentStatus(AssessmentEntryStatus.inReview);
 			} else if(courseNode instanceof BasicLTICourseNode) {
@@ -948,29 +908,6 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade {
 		return false;
 	}
 	
-	private void processAssessmentPropertyForPortfolio(Identity assessedIdentity, AssessmentEntryImpl entry, PortfolioCourseNode cNode, ICourse course) {
-		entry.setAssessmentStatus(AssessmentEntryStatus.notStarted);
-		
-		Long courseResId = course.getCourseEnvironment().getCourseResourceableId();
-		RepositoryEntry mapEntry = cNode.getReferencedRepositoryEntry();
-		if(mapEntry != null) {
-			PortfolioStructureMap template = (PortfolioStructureMap) ePFMgr.loadPortfolioStructure(mapEntry.getOlatResource());
-			if(template != null) {
-				OLATResourceable courseOres = OresHelper.createOLATResourceableInstance(CourseModule.class, courseResId);
-				PortfolioStructureMap copy = ePFMgr.loadPortfolioStructureMap(assessedIdentity, template, courseOres, cNode.getIdent(), null);
-				if(copy != null) {
-					String status = copy.getStatus();
-					if(StructureStatusEnum.CLOSED.equals(status)) {
-						entry.setAssessmentStatus(AssessmentEntryStatus.inReview);
-						
-					} else {
-						entry.setAssessmentStatus(AssessmentEntryStatus.inProgress);
-					}
-				}
-			}
-		}
-	}
-	
 	/**
 	 * Search first for the status of the task, if not found, see if some documents
 	 * where dropped or returned, in this case, the status is in review, if not
diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_13_0_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_13_0_0.java
index 4a706d8f29c5b933dd17792f2b7c43bdc7dab72f..ce1f7d1701389e56444056982ef664dc9baa715f 100644
--- a/src/main/java/org/olat/upgrade/OLATUpgrade_13_0_0.java
+++ b/src/main/java/org/olat/upgrade/OLATUpgrade_13_0_0.java
@@ -51,8 +51,8 @@ import org.olat.modules.lecture.LectureBlockRollCall;
 import org.olat.modules.lecture.LectureService;
 import org.olat.modules.lecture.model.LectureBlockRollCallRefImpl;
 import org.olat.modules.portfolio.PortfolioService;
-import org.olat.portfolio.manager.InvitationDAO;
-import org.olat.portfolio.model.InvitationImpl;
+import org.olat.modules.portfolio.manager.InvitationDAO;
+import org.olat.modules.portfolio.model.InvitationImpl;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntryStatusEnum;
 import org.olat.repository.RepositoryService;
diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_15_pre_8.java b/src/main/java/org/olat/upgrade/OLATUpgrade_15_pre_8.java
new file mode 100644
index 0000000000000000000000000000000000000000..46d07e461251901de3c340a0c7c92d112d7f8b6c
--- /dev/null
+++ b/src/main/java/org/olat/upgrade/OLATUpgrade_15_pre_8.java
@@ -0,0 +1,103 @@
+/**
+ * <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>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.upgrade;
+
+import java.io.File;
+import java.nio.file.Files;
+
+import org.apache.logging.log4j.Logger;
+import org.olat.core.commons.persistence.DB;
+import org.olat.core.logging.Tracing;
+import org.olat.core.util.FileUtils;
+import org.olat.core.util.vfs.VFSManager;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 03.04.2020<br>
+ * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
+ *
+ */
+public class OLATUpgrade_15_pre_8 extends OLATUpgrade {
+
+	private static final Logger log = Tracing.createLoggerFor(OLATUpgrade_15_pre_8.class);
+
+	private static final String VERSION = "OLAT_15.pre.8";
+	private static final String DELETE_PORTFOLIO_V1 = "DELETE PORTFOLIO V1";
+
+	@Autowired
+	private DB dbInstance;
+
+	public OLATUpgrade_15_pre_8() {
+		super();
+	}
+
+	@Override
+	public String getVersion() {
+		return VERSION;
+	}
+
+	@Override
+	public boolean doPostSystemInitUpgrade(UpgradeManager upgradeManager) {
+		UpgradeHistoryData uhd = upgradeManager.getUpgradesHistory(VERSION);
+		if (uhd == null) {
+			// has never been called, initialize
+			uhd = new UpgradeHistoryData();
+		} else if (uhd.isInstallationComplete()) {
+			return false;
+		}
+
+		boolean allOk = true;
+		allOk &= deletePortfolioV1(upgradeManager, uhd);
+
+		uhd.setInstallationComplete(allOk);
+		upgradeManager.setUpgradesHistory(uhd, VERSION);
+		if(allOk) {
+			log.info(Tracing.M_AUDIT, "Finished OLATUpgrade_15_pre_8 successfully!");
+		} else {
+			log.info(Tracing.M_AUDIT, "OLATUpgrade_15_pre_8 not finished, try to restart OpenOlat!");
+		}
+		return allOk;
+	}
+
+
+	private boolean deletePortfolioV1(UpgradeManager upgradeManager, UpgradeHistoryData uhd) {
+		boolean allOk = true;
+		if (!uhd.getBooleanDataValue(DELETE_PORTFOLIO_V1)) {
+			
+			try {
+				File portfolioRoot = VFSManager.olatRootContainer(File.separator + "portfolio", null).getBasefile();
+				if(Files.exists(portfolioRoot.toPath())) {
+					FileUtils.deleteDirsAndFiles(portfolioRoot, true, true);
+					dbInstance.commitAndCloseSession();
+					log.info("Delete portfolio v1 root directory.");
+				}
+			} catch (Exception e) {
+				log.error("", e);
+				allOk = false;
+			}
+			
+			uhd.setBooleanDataValue(DELETE_PORTFOLIO_V1, allOk);
+			upgradeManager.setUpgradesHistory(uhd, VERSION);
+		}
+		return allOk;
+	}
+
+}
diff --git a/src/main/java/org/olat/upgrade/_spring/databaseUpgradeContext.xml b/src/main/java/org/olat/upgrade/_spring/databaseUpgradeContext.xml
index 2ce37b74df8c840c9bf297ed9488b097e7aebbd4..d169d781eed6b38fc7f1e0d3480671b545ab21e5 100644
--- a/src/main/java/org/olat/upgrade/_spring/databaseUpgradeContext.xml
+++ b/src/main/java/org/olat/upgrade/_spring/databaseUpgradeContext.xml
@@ -244,6 +244,10 @@
 					<constructor-arg index="0" value="OLAT_15.pre.7" />
 					<property name="alterDbStatements" value="alter_15_pre_6_to_15_pre_7.sql" />
 				</bean>
+				<bean id="database_upgrade_15_pre_8" class="org.olat.upgrade.DatabaseUpgrade">
+					<constructor-arg index="0" value="OLAT_15.pre.8" />
+					<property name="alterDbStatements" value="alter_15_pre_7_to_15_pre_8.sql" />
+				</bean>
 			</list>
 		</property>
 	</bean>
diff --git a/src/main/java/org/olat/upgrade/_spring/upgradeContext.xml b/src/main/java/org/olat/upgrade/_spring/upgradeContext.xml
index dd58b28dd83818bbb2cb6a2fe7cf2878eb7fd407..de3dfacd43564f8ae5bd8feb362a2515c59581d6 100644
--- a/src/main/java/org/olat/upgrade/_spring/upgradeContext.xml
+++ b/src/main/java/org/olat/upgrade/_spring/upgradeContext.xml
@@ -56,6 +56,7 @@
 				<bean id="upgrade_14_2_0" class="org.olat.upgrade.OLATUpgrade_14_2_0"/>
 				<bean id="upgrade_14_2_6" class="org.olat.upgrade.OLATUpgrade_14_2_6"/>
 				<bean id="upgrade_15_pre_6" class="org.olat.upgrade.OLATUpgrade_15_pre_6"/><!-- because really quicker as pre.0 -->
+				<bean id="upgrade_15_pre_8" class="org.olat.upgrade.OLATUpgrade_15_pre_8"/>
 				<bean id="upgrade_15_pre_0" class="org.olat.upgrade.OLATUpgrade_15_pre_0"/>
 				<bean id="upgrade_15_pre_6_ae" class="org.olat.upgrade.OLATUpgrade_15_pre_6_ae"/>
 			</list>
diff --git a/src/main/java/org/olat/upgrade/model/EPMapUpgrade.java b/src/main/java/org/olat/upgrade/model/EPMapUpgrade.java
deleted file mode 100644
index a02faa8f55d08821feb7e8225cbb5cb380f4f8b1..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/upgrade/model/EPMapUpgrade.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.upgrade.model;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
-
-import org.hibernate.annotations.GenericGenerator;
-import org.hibernate.annotations.Parameter;
-import org.olat.basesecurity.SecurityGroup;
-import org.olat.basesecurity.SecurityGroupImpl;
-import org.olat.core.id.Persistable;
-import org.olat.resource.OLATResource;
-import org.olat.resource.OLATResourceImpl;
-
-/**
- * Needed to upgrade the maps
- * 
- * Initial date: 28.02.2014<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-@Entity(name="epmapupgrade")
-@Table(name="o_ep_struct_el")
-public class EPMapUpgrade implements Persistable {
-
-	private static final long serialVersionUID = 9041327840189041360L;
-
-	@Id
-	@GeneratedValue(generator = "system-uuid")
-	@GenericGenerator(name = "system-uuid", strategy = "enhanced-sequence", parameters={
-		@Parameter(name="sequence_name", value="hibernate_unique_key"),
-		@Parameter(name="force_table_use", value="true"),
-		@Parameter(name="optimizer", value="legacy-hilo"),
-		@Parameter(name="value_column", value="next_hi"),
-		@Parameter(name="increment_size", value="32767"),
-		@Parameter(name="initial_value", value="32767")
-	})
-	@Column(name="structure_id", nullable=false, unique=true, insertable=true, updatable=false)
-	private Long key;
-
-	@ManyToOne(targetEntity=SecurityGroupImpl.class,fetch=FetchType.LAZY,optional=true)
-	@JoinColumn(name="fk_ownergroup", nullable=true, insertable=true, updatable=true)
-	private SecurityGroup ownerGroup;
-	
-	@ManyToOne(targetEntity=OLATResourceImpl.class,fetch=FetchType.LAZY, optional=false)
-	@JoinColumn(name="fk_olatresource", nullable=false, insertable=true, updatable=false)
-	private OLATResource olatResource;
-	 
-	public Long getKey() {
-		return key;
-	}
-
-	public void setKey(Long key) {
-		this.key = key;
-	}
-
-	public OLATResource getOlatResource() {
-		return olatResource;
-	}
-
-	public void setOlatResource(OLATResource olatResource) {
-		this.olatResource = olatResource;
-	}
-
-	public SecurityGroup getOwnerGroup() {
-		return ownerGroup;
-	}
-
-	public void setOwnerGroup(SecurityGroup ownerGroup) {
-		this.ownerGroup = ownerGroup;
-	}
-
-	@Override
-	public int hashCode() {
-		return getKey() == null ? -9544 : getKey().hashCode();
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if(obj == this) {
-			return true;
-		}
-		if(obj instanceof EPMapUpgrade) {
-			EPMapUpgrade map = (EPMapUpgrade)obj;
-			return getKey() != null && getKey().equals(map.getKey());
-		}
-		return false;
-	}
-
-	@Override
-	public boolean equalsByPersistableKey(Persistable persistable) {
-		return equals(persistable);
-	}
-}
diff --git a/src/main/java/org/olat/upgrade/model/EPMapUpgradeToGroupRelation.java b/src/main/java/org/olat/upgrade/model/EPMapUpgradeToGroupRelation.java
deleted file mode 100644
index 14a8be5c06228bf91e533ac5f6f85159b462c96c..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/upgrade/model/EPMapUpgradeToGroupRelation.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.upgrade.model;
-
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-
-import org.hibernate.annotations.GenericGenerator;
-import org.hibernate.annotations.Parameter;
-import org.olat.basesecurity.Group;
-import org.olat.basesecurity.model.GroupImpl;
-import org.olat.core.id.Persistable;
-import org.olat.portfolio.model.structel.EPStructureElement;
-
-/**
- * 
- * Initial date: 20.02.2014<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-@Entity(name="structureuptogroup")
-@Table(name="o_ep_struct_to_group")
-public class EPMapUpgradeToGroupRelation implements Persistable {
-
-	private static final long serialVersionUID = 2215547264646107606L;
-
-	@Id
-	@GeneratedValue(generator = "system-uuid")
-	@GenericGenerator(name = "system-uuid", strategy = "enhanced-sequence", parameters={
-		@Parameter(name="sequence_name", value="hibernate_unique_key"),
-		@Parameter(name="force_table_use", value="true"),
-		@Parameter(name="optimizer", value="legacy-hilo"),
-		@Parameter(name="value_column", value="next_hi"),
-		@Parameter(name="increment_size", value="32767"),
-		@Parameter(name="initial_value", value="32767")
-	})
-	@Column(name="id", nullable=false, unique=true, insertable=true, updatable=false)
-	private Long key;
-	
-	@Temporal(TemporalType.TIMESTAMP)
-	@Column(name="creationdate", nullable=false, insertable=true, updatable=false)
-	private Date creationDate;
-
-	@Column(name="r_defgroup", nullable=false, insertable=true, updatable=false)
-	private boolean defaultGroup = false;
-	
-	@Column(name="r_role", nullable=true, insertable=true, updatable=true)
-	private String role;
-	
-	@Temporal(TemporalType.TIMESTAMP)
-	@Column(name="r_valid_from", nullable=true, insertable=true, updatable=true)
-	private Date validFrom;
-	
-	@Temporal(TemporalType.TIMESTAMP)
-	@Column(name="r_valid_to", nullable=true, insertable=true, updatable=true)
-	private Date validTo;
-	
-	@ManyToOne(targetEntity=GroupImpl.class,fetch=FetchType.LAZY,optional=true)
-	@JoinColumn(name="fk_group_id", nullable=true, insertable=true, updatable=true)
-	private Group group;
-
-	@ManyToOne(targetEntity=EPStructureElement.class,fetch=FetchType.LAZY,optional=true)
-	@JoinColumn(name="fk_struct_id", nullable=false, insertable=true, updatable=true)
-	private EPMapUpgrade entry;
-	
-	public Long getKey() {
-		return key;
-	}
-
-	public void setKey(Long key) {
-		this.key = key;
-	}
-
-	public Date getCreationDate() {
-		return creationDate;
-	}
-
-	public void setCreationDate(Date creationDate) {
-		this.creationDate = creationDate;
-	}
-
-	public boolean isDefaultGroup() {
-		return defaultGroup;
-	}
-
-	public void setDefaultGroup(boolean defaultGroup) {
-		this.defaultGroup = defaultGroup;
-	}
-
-	public String getRole() {
-		return role;
-	}
-
-	public void setRole(String role) {
-		this.role = role;
-	}
-
-	public Date getValidFrom() {
-		return validFrom;
-	}
-
-	public void setValidFrom(Date validFrom) {
-		this.validFrom = validFrom;
-	}
-
-	public Date getValidTo() {
-		return validTo;
-	}
-
-	public void setValidTo(Date validTo) {
-		this.validTo = validTo;
-	}
-
-	public Group getGroup() {
-		return group;
-	}
-
-	public void setGroup(Group group) {
-		this.group = group;
-	}
-
-	public EPMapUpgrade getEntry() {
-		return entry;
-	}
-
-	public void setEntry(EPMapUpgrade entry) {
-		this.entry = entry;
-	}
-
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		sb.append("mapToGroup[resource=")
-			.append(entry.getKey()).append(":")
-			.append("group=").append(group.getKey())
-			.append("]");
-		return sb.toString();
-	}
-	
-	@Override
-	public int hashCode() {
-		return getKey() == null ? 29061 : getKey().hashCode();
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if(this == obj) {
-			return true;
-		}
-		if(obj instanceof EPMapUpgradeToGroupRelation) {
-			EPMapUpgradeToGroupRelation rel = (EPMapUpgradeToGroupRelation)obj;
-			return getKey() != null && getKey().equals(rel.getKey());
-		}
-		return false;
-	}
-
-	@Override
-	public boolean equalsByPersistableKey(Persistable persistable) {
-		return equals(persistable);
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/user/UserInfoMainController.java b/src/main/java/org/olat/user/UserInfoMainController.java
index 369cace7afcc0073db11413ae0aa569502c90bc3..9847e873797b08fd51d3ec68d42a87d824d5cbf6 100644
--- a/src/main/java/org/olat/user/UserInfoMainController.java
+++ b/src/main/java/org/olat/user/UserInfoMainController.java
@@ -30,7 +30,6 @@ package org.olat.user;
 
 import java.util.List;
 
-import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
@@ -54,7 +53,6 @@ import org.olat.core.util.StringHelper;
 import org.olat.core.util.UserSession;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.core.util.tree.TreeHelper;
-import org.olat.portfolio.PortfolioModule;
 import org.olat.user.ui.identity.AbstractUserInfoMainController;
 
 /**
@@ -233,17 +231,6 @@ public class UserInfoMainController extends AbstractUserInfoMainController imple
 			gtn.setCssClass("o_visiting_card_contact");
 			root.addChild(gtn);
 		}
-		if ( !isDeleted && ! isInvitee) {
-			PortfolioModule portfolioModule = (PortfolioModule) CoreSpringFactory.getBean("portfolioModule");
-			if (portfolioModule.isEnabled()) {
-				gtn = new GenericTreeNode();
-				gtn.setTitle(translate("menu.portfolio"));
-				gtn.setUserObject(CMD_PORTFOLIO);
-				gtn.setAltText(translate("menu.portfolio.alt"));
-				gtn.setCssClass("o_visiting_card_portfolio");
-				root.addChild(gtn);
-			}
-		}			
 		return gtm;
 	}
 
@@ -257,8 +244,6 @@ public class UserInfoMainController extends AbstractUserInfoMainController imple
 			controller = doOpenFolder(ureq);
 		} else if (menuCommand.equalsIgnoreCase(CMD_CONTACT)) {
 			controller = doOpenContact(ureq);
-		} else if (menuCommand.equalsIgnoreCase(CMD_PORTFOLIO)) {
-			controller = doOpenPortfolio(ureq);
 		}
 		return controller;
 	}
diff --git a/src/main/java/org/olat/user/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/user/_i18n/LocalStrings_de.properties
index 3a4557c08409725d02eee9936e07d2beb38607d1..e2560073d58169227c65f3d22cbdf1c5568c20f9 100644
--- a/src/main/java/org/olat/user/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/user/_i18n/LocalStrings_de.properties
@@ -73,8 +73,6 @@ menu.folder=Ordner
 menu.folder.alt=Ordner des ausgew\u00E4hlten Benutzers
 menu.homepage=Visitenkarte
 menu.homepage.alt=Visitenkarte des ausgew\u00E4hlten Benutzers
-menu.portfolio=Portfolio
-menu.portfolio.alt=Portfolio
 notallowedtochangepwd=Sie d\u00FCrfen das Passwort nicht selbst setzen. Bei Fragen wenden Sie sich bitte an {0}.
 password.failed=Ihr neues Passwort wurde nicht gespeichert. Ein unerwarteter Fehler ist aufgetreten. 
 password.successful=Ihr neues Passwort wurde erfolgreich gespeichert. Es ist ab sofort aktiv.
diff --git a/src/main/java/org/olat/user/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/user/_i18n/LocalStrings_en.properties
index 6e2056a61c407e49fbffb3a87d6102701891008d..e000737378eb21e59bbbad7f80b81ed42dba1ca1 100644
--- a/src/main/java/org/olat/user/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/user/_i18n/LocalStrings_en.properties
@@ -73,8 +73,6 @@ menu.folder=Folder
 menu.folder.alt=Folder of selected user
 menu.homepage=Visiting card
 menu.homepage.alt=Visiting card of selected user
-menu.portfolio=Portfolio
-menu.portfolio.alt=Portfolio
 notallowedtochangepwd=You are not allowed to change your password on your own. Please contact {0} if you have any questions.
 password.failed=Your new password could not be saved. An unexpected server error occurred.
 password.successful=Your new password has been saved successfully. It is valid from now on. 
diff --git a/src/main/java/org/olat/user/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/user/_i18n/LocalStrings_fr.properties
index c86ac9a36c73a53c282f053bd10c6b232b631875..d4e9dea74383572ce55b94789bb9661643df9cc5 100644
--- a/src/main/java/org/olat/user/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/user/_i18n/LocalStrings_fr.properties
@@ -73,8 +73,6 @@ menu.folder=Dossier
 menu.folder.alt=Dossier de l'utilisateur choisi
 menu.homepage=Carte de visite
 menu.homepage.alt=Carte de visite de l'utilisateur choisi
-menu.portfolio=Portfolio
-menu.portfolio.alt=Portfolio
 notallowedtochangepwd=Vous n'avez pas le droit d'attribuer le mot de passe vous-m\u00EAme. Pour toutes questions, adressez-vous \u00E0 {0}
 password.failed=Votre nouveau mot de passe n'a pas \u00E9t\u00E9 enregistr\u00E9e. Une erreur non attendue est apparue.
 password.successful=Votre nouveau mot de passe a \u00E9t\u00E9 enregistr\u00E9 avec succ\u00E8s. Il est valable d\u00E8s \u00E0 pr\u00E9sent.
diff --git a/src/main/java/org/olat/user/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/user/_i18n/LocalStrings_it.properties
index fbe5c93621a4a0f715f17184e7dd9972e91fbb41..02d8e175b1b1fc0abd5bd64e8684ef246d401d6b 100644
--- a/src/main/java/org/olat/user/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/user/_i18n/LocalStrings_it.properties
@@ -69,8 +69,6 @@ menu.folder=Cartella
 menu.folder.alt=Cartella dell'utente selezionato
 menu.homepage=Biglietto da visita
 menu.homepage.alt=Biglietto da visita dell'utente selezionato
-menu.portfolio=Portfolio
-menu.portfolio.alt=Portfolio
 notallowedtochangepwd=Non pu\u00F2 stabilire da s\u00E9 la password. Per qualsiasi domanda si rivolga a {0}
 password.failed=La Sua nuova password non \u00E8 stata salvata (errore inatteso).
 password.successful=La Sua nuova password \u00E8 stata salvata ed \u00E8 gi\u00E0 attivata.
diff --git a/src/main/java/org/olat/user/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/user/_i18n/LocalStrings_nl_NL.properties
index 808f6a0b43e21cc7a02e46b6e30223b72709153f..2354d2ca294fbc090792cc45b6eac25856026195 100644
--- a/src/main/java/org/olat/user/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/user/_i18n/LocalStrings_nl_NL.properties
@@ -58,8 +58,6 @@ menu.folder=Map
 menu.folder.alt=Map van de geselecteerde gebruiker
 menu.homepage=Visitekaartje
 menu.homepage.alt=Visitekaartje van de geselecteerde gebruiker
-menu.portfolio=Portfolio
-menu.portfolio.alt=Portfolio
 notallowedtochangepwd=U mag uw wachtwoord niet zelf wijzigen. Neem contact op met {0} indien u vragen hebt. 
 password.failed=Uw nieuw wachtwoord kon niet opgeslagen worden. Er trad een onverwachte serverfout op.
 password.successful=Uw nieuwe wachtwoord is met succes opgeslagen. Het is geldig vanaf nu.
diff --git a/src/main/java/org/olat/user/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/user/_i18n/LocalStrings_pl.properties
index 39a7de4cc04b0d29b9c28386e624becf0d88d4e7..2ea3ba37bade17c1aeb8316c965af302188a6006 100644
--- a/src/main/java/org/olat/user/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/user/_i18n/LocalStrings_pl.properties
@@ -64,7 +64,6 @@ menu.folder=Folder
 menu.folder.alt=Folder wybranego u\u017Cytkownika
 menu.homepage=Wizyt\u00F3wka
 menu.homepage.alt=Wizyt\u00F3wka wybranego u\u017Cytkownika
-menu.portfolio=Portfolio
 notallowedtochangepwd=Nie mo\u017Cesz zmieni\u0107 swojego has\u0142a. Skontaktuj si\u0119 z {0}
 password.failed=Twoje nowe has\u0142o nie mo\u017Ce zosta\u0107 zapisane. Wyst\u0105pi\u0142 nieoczekiwany b\u0142\u0105d serwera.
 password.successful=Nowe has\u0142o zosta\u0142o pomy\u015Blnie zapisane. Obowi\u0105zuje od teraz. 
diff --git a/src/main/java/org/olat/user/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/user/_i18n/LocalStrings_pt_BR.properties
index 5f63a06354162ef3da1d08e868802d1adbcff5c4..1f00bbb7d6b3ee5e89140f9d3ea5f1f89e5716e3 100644
--- a/src/main/java/org/olat/user/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/user/_i18n/LocalStrings_pt_BR.properties
@@ -74,8 +74,6 @@ menu.folder=Pasta
 menu.folder.alt=Pasta do usu\u00E1rio selecionado
 menu.homepage=Cart\u00E3o de Visita
 menu.homepage.alt=Cart\u00E3o de Visita do usu\u00E1rio selecionado
-menu.portfolio=Portfolio
-menu.portfolio.alt=Portfolio
 notallowedtochangepwd=Voc\u00EA n\u00E3o tem permiss\u00E3o para alterar sua senha. Favor contatar {0}
 password.failed=Sua nova senha n\u00E3o pode ser salva. Houver um erro inesperado no servidor.
 password.successful=Sua nova senha foi salva com sucesso. Ela \u00E9 v\u00E1lida de agora em diante.
diff --git a/src/main/java/org/olat/user/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/user/_i18n/LocalStrings_zh_CN.properties
index 2516b7fcba997bb38e7b6844e1d8d9d6be81e3c3..0c085e60a9e54ad2f4af91ec40a0ae43e2bef033 100644
--- a/src/main/java/org/olat/user/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/user/_i18n/LocalStrings_zh_CN.properties
@@ -61,7 +61,6 @@ menu.folder=\u6587\u4EF6\u5939
 menu.folder.alt=\u88AB\u9009\u4E2D\u7528\u6237\u7684\u6587\u4EF6\u5939
 menu.homepage=\u540D\u7247
 menu.homepage.alt=\u9009\u4E2D\u7684\u7528\u6237\u540D\u7247
-menu.portfolio.alt=\u6587\u4EF6\u5939
 notallowedtochangepwd=\u4F60\u4E0D\u80FD\u591F\u4FEE\u6539\u5BC6\u7801\uFF0C\u8BF7\u8054\u7CFB{0}
 password.failed=\u60A8\u7684\u65B0\u5BC6\u7801\u65E0\u6CD5\u4FDD\u5B58\u3002\u5DF2\u53D1\u751F\u4E86\u4E00\u4E2A\u65E0\u6CD5\u9884\u6599\u7684\u670D\u52A1\u5668\u9519\u8BEF\u3002
 password.successful=\u4F60\u7684\u65B0\u5BC6\u7801\u5DF2\u7ECF\u88AB\u4FDD\u5B58\u6210\u529F\uFF0C\u4ECE\u73B0\u5728\u5F00\u59CB\u751F\u6548\u3002
diff --git a/src/main/java/org/olat/user/ui/identity/AbstractUserInfoMainController.java b/src/main/java/org/olat/user/ui/identity/AbstractUserInfoMainController.java
index 30c8a9393b876f02c988525773816cc1c45b6db1..c25ec3be9abc1a3f540016b02f18958c933c09da 100644
--- a/src/main/java/org/olat/user/ui/identity/AbstractUserInfoMainController.java
+++ b/src/main/java/org/olat/user/ui/identity/AbstractUserInfoMainController.java
@@ -43,9 +43,7 @@ import org.olat.core.util.vfs.VFSManager;
 import org.olat.core.util.vfs.callbacks.ReadOnlyCallback;
 import org.olat.core.util.vfs.callbacks.VFSSecurityCallback;
 import org.olat.modules.co.ContactFormController;
-import org.olat.portfolio.manager.InvitationDAO;
-import org.olat.portfolio.ui.EPMapRunController;
-import org.olat.portfolio.ui.EPMapRunViewOption;
+import org.olat.modules.portfolio.manager.InvitationDAO;
 import org.olat.user.HomePageConfig;
 import org.olat.user.HomePageConfigManager;
 import org.olat.user.HomePageDisplayController;
@@ -64,13 +62,11 @@ public abstract class AbstractUserInfoMainController extends BasicController {
 	protected static final String CMD_CALENDAR = "calendar";
 	protected static final String CMD_FOLDER = "userfolder";
 	protected static final String CMD_CONTACT = "contact";
-	protected static final String CMD_PORTFOLIO = "portfolio";
 	
 	protected final Identity chosenIdentity;
 	protected final boolean isInvitee;
 	protected final boolean isDeleted;
 	
-	private EPMapRunController portfolioController;
 	private FolderRunController folderRunController;
 	private WeeklyCalendarController calendarController;
 	private ContactFormController contactFormController;
@@ -170,15 +166,5 @@ public abstract class AbstractUserInfoMainController extends BasicController {
 		listenTo(contactFormController);
 		return contactFormController;
 	}
-	
-	protected EPMapRunController doOpenPortfolio(UserRequest ureq) {
-		removeAsListenerAndDispose(portfolioController);
-		
-		OLATResourceable ores = OresHelper.createOLATResourceableType(CMD_PORTFOLIO);
-		WindowControl bwControl = addToHistory(ureq, ores, null);
-		portfolioController = new EPMapRunController(ureq, bwControl, false, EPMapRunViewOption.OTHER_MAPS, chosenIdentity);
-		listenTo(portfolioController);
-		return portfolioController;
-	}
 
 }
diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml
index 8ebf748198d67823b6ff7c366f5478ffb2c689a9..fa173f62b88b004609f9a0744511de619204e17f 100644
--- a/src/main/resources/META-INF/persistence.xml
+++ b/src/main/resources/META-INF/persistence.xml
@@ -28,15 +28,6 @@
 		<mapping-file>org/olat/course/nodes/projectbroker/datamodel/ProjectBroker.hbm.xml</mapping-file>
 		<mapping-file>org/olat/modules/openmeetings/model/OpenMeetingsReference.hbm.xml</mapping-file>
 		<mapping-file>org/olat/properties/Property.hbm.xml</mapping-file>
-		<mapping-file>org/olat/portfolio/model/artefacts/AbstractArtefact.hbm.xml</mapping-file>
-		<mapping-file>org/olat/modules/fo/portfolio/ForumArtefact.hbm.xml</mapping-file>
-		<mapping-file>org/olat/modules/wiki/portfolio/WikiArtefact.hbm.xml</mapping-file>
-		<mapping-file>org/olat/modules/webFeed/portfolio/BlogArtefact.hbm.xml</mapping-file>
-		<mapping-file>org/olat/modules/webFeed/portfolio/LiveBlogArtefact.hbm.xml</mapping-file>
-		<mapping-file>org/olat/course/assessment/portfolio/EfficiencyStatementArtefact.hbm.xml</mapping-file>
-		<mapping-file>org/olat/portfolio/model/structel/StructureElement.hbm.xml</mapping-file>
-		<mapping-file>org/olat/portfolio/model/notification/Notifications.hbm.xml</mapping-file>
-		<mapping-file>org/olat/portfolio/model/restriction/CollectRestriction.hbm.xml</mapping-file>
 		<mapping-file>org/olat/core/commons/services/mark/impl/MarkImpl.hbm.xml</mapping-file>
 		<mapping-file>org/olat/core/commons/services/tagging/model/TagImpl.hbm.xml</mapping-file>
 		<mapping-file>org/olat/core/util/mail/model/DBMail.hbm.xml</mapping-file>
@@ -49,8 +40,6 @@
 		<mapping-file>org/olat/upgrade/model/BGResourceRelation.hbm.xml</mapping-file>
 		<mapping-file>org/olat/upgrade/model/RepositoryEntryUpgrade.hbm.xml</mapping-file>
 		<class>org.olat.upgrade.model.RepositoryEntryUpgradeToGroupRelation</class>
-		<class>org.olat.upgrade.model.EPMapUpgrade</class>
-		<class>org.olat.upgrade.model.EPMapUpgradeToGroupRelation</class>
 		<class>org.olat.upgrade.model.InvitationUpgrade</class>
 		<class>org.olat.upgrade.model.UpgradeTaxonomyLevel</class>
 		<class>org.olat.upgrade.model.UpgradeQuestionItem</class>
@@ -235,6 +224,7 @@
 		<class>org.olat.modules.portfolio.model.AssessmentSectionImpl</class>
 		<class>org.olat.modules.portfolio.model.AssignmentImpl</class>
 		<class>org.olat.modules.portfolio.model.BinderUserInfosImpl</class>
+		<class>org.olat.modules.portfolio.model.InvitationImpl</class>
 		<class>org.olat.modules.qpool.model.PoolImpl</class>
 		<class>org.olat.modules.qpool.model.PoolToItem</class>
 		<class>org.olat.modules.qpool.model.PoolItemShortView</class>
@@ -274,8 +264,6 @@
 		<class>org.olat.modules.webFeed.model.FeedImpl</class>
 		<class>org.olat.modules.webFeed.model.ItemImpl</class>
 		<class>org.olat.ims.lti.model.LTIOutcomeImpl</class>
-		<class>org.olat.portfolio.model.InvitationImpl</class>
-		<class>org.olat.portfolio.model.structel.EPStructureElementToGroupRelation</class>
 		<class>org.olat.shibboleth.manager.ShibbolethAutoAccessMethod</class>
 		<class>org.olat.user.UserImpl</class>
 		<class>org.olat.user.model.AbsenceLeaveImpl</class>
diff --git a/src/main/resources/database/mysql/alter_15_pre_7_to_15_pre_8.sql b/src/main/resources/database/mysql/alter_15_pre_7_to_15_pre_8.sql
new file mode 100644
index 0000000000000000000000000000000000000000..47009d86b1895d3246fea9416095719915310778
--- /dev/null
+++ b/src/main/resources/database/mysql/alter_15_pre_7_to_15_pre_8.sql
@@ -0,0 +1,11 @@
+-- ePortfolio V1
+drop view o_ep_notifications_comment_v;
+drop view o_ep_notifications_rating_v;
+drop view o_ep_notifications_art_v;
+drop view o_ep_notifications_struct_v;
+drop table o_ep_struct_to_group;
+drop table o_ep_struct_artefact_link;
+drop table o_ep_struct_struct_link;
+drop table o_ep_artefact;
+drop table o_ep_collect_restriction;
+drop table o_ep_struct_el;
diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql
index 6c444f1bb568e2ab6b21a50edb233cea965184ed..9c8743b4fcc2067d80dd90ed45e0702e81b48151 100644
--- a/src/main/resources/database/mysql/setupDatabase.sql
+++ b/src/main/resources/database/mysql/setupDatabase.sql
@@ -855,95 +855,6 @@ create table if not exists o_bs_invitation (
    primary key (id)
 );
 
-create table if not exists o_ep_artefact (
-  artefact_id bigint not null,
-  artefact_type varchar(32) not null,
-  version mediumint unsigned not null,
-  creationdate datetime,
-  collection_date datetime,
-  title varchar(512),
-  description varchar(4000),
-  signature mediumint default 0,
-  businesspath varchar(2048),
-  fulltextcontent longtext,
-  reflexion longtext,
-  source varchar(2048),
-  add_prop1 varchar(2048),
-  add_prop2 varchar(2048),
-  add_prop3 varchar(2048),
-  fk_struct_el_id bigint,
-  fk_artefact_auth_id bigint not null,
-  primary key (artefact_id)
-);
-create table if not exists o_ep_collect_restriction (
-  collect_id bigint not null,
-  version mediumint unsigned not null,
-  creationdate datetime,
-  artefact_type varchar(256),
-  amount mediumint not null default -1,
-  restriction varchar(32),
-  pos mediumint unsigned not null default 0,
-  fk_struct_el_id bigint,
-  primary key (collect_id)
-);
-create table if not exists o_ep_struct_el (
-  structure_id bigint not null,
-  structure_type varchar(32) not null,
-  version mediumint unsigned not null,
-  creationdate datetime,
-  returndate datetime default null,
-  copydate datetime default null,
-  lastsyncheddate datetime default null,
-  deadline datetime default null,
-  title varchar(512),
-  description varchar(2048),
-  struct_el_source bigint,
-  target_resname varchar(50),
-  target_resid bigint,
-  target_ressubpath varchar(2048),
-  target_businesspath varchar(2048),
-  style varchar(128),
-  status varchar(32),
-  viewmode varchar(32),
-  fk_struct_root_id bigint,
-  fk_struct_root_map_id bigint,
-  fk_map_source_id bigint,
-  fk_group_id bigint,
-  fk_olatresource bigint not null,
-  primary key (structure_id)
-);
-create table if not exists o_ep_struct_struct_link (
-  link_id bigint not null,
-  version mediumint unsigned not null,
-  creationdate datetime,
-  pos mediumint unsigned not null default 0,
-  fk_struct_parent_id bigint not null,
-  fk_struct_child_id bigint not null,
-  primary key (link_id)
-);
-create table if not exists o_ep_struct_artefact_link (
-  link_id bigint not null,
-  version mediumint unsigned not null,
-  creationdate datetime,
-  pos mediumint unsigned not null default 0,
-  reflexion longtext,
-  fk_auth_id bigint,
-  fk_struct_id bigint not null,
-  fk_artefact_id bigint not null,
-  primary key (link_id)
-);
-create table o_ep_struct_to_group (
-   id bigint not null,
-   creationdate datetime not null,
-   r_defgroup boolean not null,
-   r_role varchar(64),
-   r_valid_from datetime,
-   r_valid_to datetime,
-   fk_group_id bigint,
-   fk_struct_id bigint,
-   primary key (id)
-);
-
 -- mail system
 
 create table if not exists o_mail (
@@ -3102,73 +3013,6 @@ create view o_bs_identity_short_v as (
    inner join o_user as us on (ident.id = us.fk_identity)
 );
 
--- eportfolio views
-create or replace view o_ep_notifications_struct_v as (
-   select
-      struct.structure_id as struct_id,
-      struct.structure_type as struct_type,
-      struct.title as struct_title,
-      struct.fk_struct_root_id as struct_root_id,
-      struct.fk_struct_root_map_id as struct_root_map_id,
-      (case when struct.structure_type = 'page' then struct.structure_id else parent_struct.structure_id end) as page_key,
-      struct_link.creationdate as creation_date
-   from o_ep_struct_el as struct
-   inner join o_ep_struct_struct_link as struct_link on (struct_link.fk_struct_child_id = struct.structure_id)
-   inner join o_ep_struct_el as parent_struct on (struct_link.fk_struct_parent_id = parent_struct.structure_id)
-   where struct.structure_type = 'page' or parent_struct.structure_type = 'page'
-);
-
-create or replace view o_ep_notifications_art_v as (
-   select
-      artefact.artefact_id as artefact_id,
-      artefact_link.link_id as link_id,
-      artefact.title as artefact_title,
-      (case when struct.structure_type = 'page' then struct.title else root_struct.title end ) as struct_title,
-      struct.structure_type as struct_type,
-      struct.structure_id as struct_id,
-      root_struct.structure_id as struct_root_id,
-      root_struct.structure_type as struct_root_type,
-      struct.fk_struct_root_map_id as struct_root_map_id,
-      (case when struct.structure_type = 'page' then struct.structure_id else root_struct.structure_id end ) as page_key,
-      artefact_link.fk_auth_id as author_id,
-      artefact_link.creationdate as creation_date
-   from o_ep_struct_el as struct
-   inner join o_ep_struct_artefact_link as artefact_link on (artefact_link.fk_struct_id = struct.structure_id)
-   inner join o_ep_artefact as artefact on (artefact_link.fk_artefact_id = artefact.artefact_id)
-   left join o_ep_struct_el as root_struct on (struct.fk_struct_root_id = root_struct.structure_id)
-);
-
-create or replace view o_ep_notifications_rating_v as (
-   select
-      urating.rating_id as rating_id,
-      map.structure_id as map_id,
-      map.title as map_title,
-      cast(urating.ressubpath as unsigned) as page_key,
-      page.title as page_title,
-      urating.creator_id as author_id,
-      urating.creationdate as creation_date,
-      urating.lastmodified as last_modified
-   from o_userrating as urating
-   inner join o_olatresource as rating_resource on (rating_resource.resid = urating.resid and rating_resource.resname = urating.resname)
-   inner join o_ep_struct_el as map on (map.fk_olatresource = rating_resource.resource_id)
-   left join o_ep_struct_el as page on (page.fk_struct_root_map_id = map.structure_id and page.structure_id = urating.ressubpath)
-);
-
-create or replace view o_ep_notifications_comment_v as (
-   select
-      ucomment.comment_id as comment_id,
-      map.structure_id as map_id,
-      map.title as map_title,
-      cast(ucomment.ressubpath as unsigned) as page_key,
-      page.title as page_title,
-      ucomment.creator_id as author_id,
-      ucomment.creationdate as creation_date
-   from o_usercomment as ucomment
-   inner join o_olatresource as comment_resource on (comment_resource.resid = ucomment.resid and comment_resource.resname = ucomment.resname)
-   inner join o_ep_struct_el as map on (map.fk_olatresource = comment_resource.resource_id)
-   left join o_ep_struct_el as page on (page.fk_struct_root_map_id = map.structure_id and page.structure_id = ucomment.ressubpath)
-);
-
 create view o_gp_business_to_repository_v as (
 	select
 		grp.group_id as grp_id,
@@ -3348,12 +3192,6 @@ alter table o_mark ENGINE = InnoDB;
 alter table o_info_message ENGINE = InnoDB;
 alter table o_tag ENGINE = InnoDB;
 alter table o_bs_invitation ENGINE = InnoDB;
-alter table o_ep_artefact ENGINE = InnoDB;
-alter table o_ep_collect_restriction ENGINE = InnoDB;
-alter table o_ep_struct_el ENGINE = InnoDB;
-alter table o_ep_struct_struct_link ENGINE = InnoDB;
-alter table o_ep_struct_artefact_link ENGINE = InnoDB;
-alter table o_ep_struct_to_group ENGINE = InnoDB;
 alter table o_co_db_entry ENGINE = InnoDB;
 alter table o_mail ENGINE = InnoDB;
 alter table o_mail_to_recipient ENGINE = InnoDB;
@@ -3792,27 +3630,6 @@ alter table o_bbb_meeting add constraint bbb_meet_entry_idx foreign key (fk_entr
 alter table o_bbb_meeting add constraint bbb_meet_grp_idx foreign key (fk_group_id) references o_gp_business (group_id);
 alter table o_bbb_meeting add constraint bbb_meet_template_idx foreign key (fk_template_id) references o_bbb_template (id);
 
--- eportfolio
-alter table o_ep_artefact add constraint FKF26C8375236F28X foreign key (fk_artefact_auth_id) references o_bs_identity (id);
-alter table o_ep_artefact add constraint FKA0070D12316A97B4 foreign key (fk_struct_el_id) references o_ep_struct_el (structure_id);
-
-alter table o_ep_struct_el add constraint FKF26C8375236F26X foreign key (fk_olatresource) references o_olatresource (resource_id);
-alter table o_ep_struct_el add constraint FK4ECC1C8D636191A1 foreign key (fk_map_source_id) references o_ep_struct_el (structure_id);
-alter table o_ep_struct_el add constraint FK4ECC1C8D76990817 foreign key (fk_struct_root_id) references o_ep_struct_el (structure_id);
-alter table o_ep_struct_el add constraint FK4ECC1C8D76990818 foreign key (fk_struct_root_map_id) references o_ep_struct_el (structure_id);
-
-alter table o_ep_collect_restriction add constraint FKA0070D12316A97B5 foreign key (fk_struct_el_id) references o_ep_struct_el (structure_id);
-
-alter table o_ep_struct_struct_link add constraint FKF26C8375236F22X foreign key (fk_struct_parent_id) references o_ep_struct_el (structure_id);
-alter table o_ep_struct_struct_link add constraint FKF26C8375236F23X foreign key (fk_struct_child_id) references o_ep_struct_el (structure_id);
-
-alter table o_ep_struct_artefact_link add constraint FKF26C8375236F24X foreign key (fk_struct_id) references o_ep_struct_el (structure_id);
-alter table o_ep_struct_artefact_link add constraint FKF26C8375236F25X foreign key (fk_artefact_id) references o_ep_artefact (artefact_id);
-alter table o_ep_struct_artefact_link add constraint FKF26C8375236F26Y foreign key (fk_auth_id) references o_bs_identity (id);
-
-alter table o_ep_struct_to_group add constraint struct_to_group_group_ctx foreign key (fk_group_id) references o_bs_group (id);
-alter table o_ep_struct_to_group add constraint struct_to_group_re_ctx foreign key (fk_struct_id) references o_ep_struct_el (structure_id);
-
 -- tag
 alter table o_tag add constraint FK6491FCA5A4FA5DC foreign key (fk_author_id) references o_bs_identity (id);
 
diff --git a/src/main/resources/database/oracle/alter_15_pre_7_to_15_pre_8.sql b/src/main/resources/database/oracle/alter_15_pre_7_to_15_pre_8.sql
new file mode 100644
index 0000000000000000000000000000000000000000..47009d86b1895d3246fea9416095719915310778
--- /dev/null
+++ b/src/main/resources/database/oracle/alter_15_pre_7_to_15_pre_8.sql
@@ -0,0 +1,11 @@
+-- ePortfolio V1
+drop view o_ep_notifications_comment_v;
+drop view o_ep_notifications_rating_v;
+drop view o_ep_notifications_art_v;
+drop view o_ep_notifications_struct_v;
+drop table o_ep_struct_to_group;
+drop table o_ep_struct_artefact_link;
+drop table o_ep_struct_struct_link;
+drop table o_ep_artefact;
+drop table o_ep_collect_restriction;
+drop table o_ep_struct_el;
diff --git a/src/main/resources/database/oracle/setupDatabase.sql b/src/main/resources/database/oracle/setupDatabase.sql
index c1d6bf122fe780ecc79f19b47107cc3db681824c..fc0bc33e467c0ee3289ec8245f2eca107e8490dd 100644
--- a/src/main/resources/database/oracle/setupDatabase.sql
+++ b/src/main/resources/database/oracle/setupDatabase.sql
@@ -808,97 +808,6 @@ CREATE TABLE o_info_message (
   PRIMARY KEY (info_id)
 );
 
-create table o_ep_artefact (
-  artefact_id number(20) not null,
-  artefact_type varchar(32 char) not null,
-  version number(20) not null,
-  creationdate date,
-  collection_date date,
-  title varchar(512 char),
-  description varchar(4000 char),
-  signature number(20) default 0,
-  businesspath varchar(2048 char),
-  fulltextcontent clob,
-  reflexion clob,
-  source varchar(2048 char),
-  add_prop1 varchar(2048 char),
-  add_prop2 varchar(2048 char),
-  add_prop3 varchar(2048 char),
-  fk_struct_el_id number(20),
-  fk_artefact_auth_id number(20) not null,
-  primary key (artefact_id)
-);
-
-create table o_ep_collect_restriction (
-  collect_id number(20) not null,
-  version number(20) not null,
-  creationdate date,
-  artefact_type varchar(256 char),
-  amount number(20) default -1,
-  restriction varchar(32 char),
-  pos number(20) default 0,
-  fk_struct_el_id number(20),
-  primary key (collect_id)
-);
-create table o_ep_struct_el (
-  structure_id number(20) not null,
-  structure_type varchar(32 char) not null,
-  version number(20) not null,
-  creationdate date,
-  returndate date,
-  copydate date,
-  lastsyncheddate date,
-  deadline date,
-  title varchar(512 char),
-  description varchar(2048 char),
-  struct_el_source number(20),
-  target_resname varchar(50 char),
-  target_resid number(20),
-  target_ressubpath varchar(2048 char),
-  target_businesspath varchar(2048 char),
-  style varchar(128 char),
-  status varchar(32 char),
-  viewmode varchar(32 char),
-  fk_struct_root_id number(20),
-  fk_struct_root_map_id number(20),
-  fk_map_source_id number(20),
-  fk_ownergroup number(20),
-  fk_olatresource number(20) not null,
-  primary key (structure_id)
-);
-
-create table o_ep_struct_struct_link (
-  link_id number(20) not null,
-  version number(20) not null,
-  creationdate date,
-  pos number(20) default 0,
-  fk_struct_parent_id number(20) not null,
-  fk_struct_child_id number(20) not null,
-  primary key (link_id)
-);
-
-create table o_ep_struct_artefact_link (
-  link_id number(20) not null,
-  version number(20) not null,
-  creationdate date,
-  pos number(20) default 0,
-  reflexion clob,
-  fk_auth_id number(20),
-  fk_struct_id number(20) not null,
-  fk_artefact_id number(20) not null,
-  primary key (link_id)
-);
-create table o_ep_struct_to_group (
-   id number(20) not null,
-   creationdate date not null,
-   r_defgroup number default 0 not null,
-   r_role varchar2(64 char),
-   r_valid_from date,
-   r_valid_to date,
-   fk_group_id number(20),
-   fk_struct_id number(20),
-   PRIMARY KEY (id)
-);
 create table o_bs_invitation (
    id number(20) not null,
    creationdate date,
@@ -3185,74 +3094,6 @@ create view o_bs_identity_short_v as (
    inner join o_user us on (ident.id = us.fk_identity)
 );
 
--- eportfolio views
-create or replace view o_ep_notifications_struct_v as (
-   select
-      struct.structure_id as struct_id,
-      struct.structure_type as struct_type,
-      struct.title as struct_title,
-      struct.fk_struct_root_id as struct_root_id,
-      struct.fk_struct_root_map_id as struct_root_map_id,
-      (case when struct.structure_type = 'page' then struct.structure_id else parent_struct.structure_id end) as page_key,
-      struct_link.creationdate as creation_date
-   from o_ep_struct_el struct
-   inner join o_ep_struct_struct_link struct_link on (struct_link.fk_struct_child_id = struct.structure_id)
-   inner join o_ep_struct_el parent_struct on (struct_link.fk_struct_parent_id = parent_struct.structure_id)
-   where struct.structure_type = 'page' or parent_struct.structure_type = 'page'
-);
-
-create or replace view o_ep_notifications_art_v as (
-   select
-      artefact.artefact_id as artefact_id,
-      artefact_link.link_id as link_id,
-      artefact.title as artefact_title,
-      (case when struct.structure_type = 'page' then struct.title else root_struct.title end ) as struct_title,
-      struct.structure_type as struct_type,
-      struct.structure_id as struct_id,
-      root_struct.structure_id as struct_root_id,
-      root_struct.structure_type as struct_root_type,
-      struct.fk_struct_root_map_id as struct_root_map_id,
-      (case when struct.structure_type = 'page' then struct.structure_id else root_struct.structure_id end ) as page_key,
-      artefact_link.fk_auth_id as author_id,
-      artefact_link.creationdate as creation_date
-   from o_ep_struct_el struct
-   inner join o_ep_struct_artefact_link artefact_link on (artefact_link.fk_struct_id = struct.structure_id)
-   inner join o_ep_artefact artefact on (artefact_link.fk_artefact_id = artefact.artefact_id)
-   left join o_ep_struct_el root_struct on (struct.fk_struct_root_id = root_struct.structure_id)
-);
-
-create or replace view o_ep_notifications_rating_v as (
-   select
-      urating.rating_id as rating_id,
-      map.structure_id as map_id,
-      map.title as map_title,
-      cast(urating.ressubpath as number(20)) as page_key,
-      page.title as page_title,
-      urating.creator_id as author_id,
-      urating.creationdate as creation_date,
-      urating.lastmodified as last_modified
-   from o_userrating urating
-   inner join o_olatresource rating_resource on (rating_resource.resid = urating.resid and rating_resource.resname = urating.resname)
-   inner join o_ep_struct_el map on (map.fk_olatresource = rating_resource.resource_id)
-   left join o_ep_struct_el page on (page.fk_struct_root_map_id = map.structure_id and page.structure_id = cast(urating.ressubpath as integer))
-);
-
-
-create or replace view o_ep_notifications_comment_v as (
-   select
-      ucomment.comment_id as comment_id,
-      map.structure_id as map_id,
-      map.title as map_title,
-      cast(ucomment.ressubpath as number(20)) as page_key,
-      page.title as page_title,
-      ucomment.creator_id as author_id,
-      ucomment.creationdate as creation_date
-   from o_usercomment ucomment
-   inner join o_olatresource comment_resource on (comment_resource.resid = ucomment.resid and comment_resource.resname = ucomment.resname)
-   inner join o_ep_struct_el map on (map.fk_olatresource = comment_resource.resource_id)
-   left join o_ep_struct_el page on (page.fk_struct_root_map_id = map.structure_id and page.structure_id = cast(ucomment.ressubpath as integer))
-);
-
 create view o_gp_business_to_repository_v as (
 	select
 		grp.group_id as grp_id,
@@ -3821,41 +3662,6 @@ create index idx_bbb_meet_grp_idx on o_bbb_meeting(fk_group_id);
 alter table o_bbb_meeting add constraint bbb_meet_template_idx foreign key (fk_template_id) references o_bbb_template (id);
 create index idx_bbb_meet_template_idx on o_bbb_meeting(fk_template_id);
 
--- eportfolio
-alter table o_ep_artefact add constraint FKF26C8375236F28X foreign key (fk_artefact_auth_id) references o_bs_identity (id);
-create index idx_artfeact_to_auth_idx on o_ep_artefact (fk_artefact_auth_id);
-alter table o_ep_artefact add constraint FKA0070D12316A97B4 foreign key (fk_struct_el_id) references o_ep_struct_el (structure_id);
-create index idx_artfeact_to_struct_idx on o_ep_artefact (fk_struct_el_id);
-
-alter table o_ep_struct_el add constraint FKF26C8375236F26X foreign key (fk_olatresource) references o_olatresource (resource_id);
-create index idx_structel_to_rsrc_idx on o_ep_struct_el (fk_olatresource);
-alter table o_ep_struct_el add constraint FK4ECC1C8D636191A1 foreign key (fk_map_source_id) references o_ep_struct_el (structure_id);
-create index idx_structel_to_map_idx on o_ep_struct_el (fk_map_source_id);
-alter table o_ep_struct_el add constraint FK4ECC1C8D76990817 foreign key (fk_struct_root_id) references o_ep_struct_el (structure_id);
-create index idx_structel_to_root_idx on o_ep_struct_el (fk_struct_root_id);
-alter table o_ep_struct_el add constraint FK4ECC1C8D76990818 foreign key (fk_struct_root_map_id) references o_ep_struct_el (structure_id);
-create index idx_structel_to_rootmap_idx on o_ep_struct_el (fk_struct_root_map_id);
-
-alter table o_ep_collect_restriction add constraint FKA0070D12316A97B5 foreign key (fk_struct_el_id) references o_ep_struct_el (structure_id);
--- index idx_collectrest_to_structel_idx created by unique constraint
-
-alter table o_ep_struct_struct_link add constraint FKF26C8375236F22X foreign key (fk_struct_parent_id) references o_ep_struct_el (structure_id);
-create index idx_structlink_to_parent_idx on o_ep_struct_struct_link (fk_struct_parent_id);
-alter table o_ep_struct_struct_link add constraint FKF26C8375236F23X foreign key (fk_struct_child_id) references o_ep_struct_el (structure_id);
-create index idx_structlink_to_child_idx on o_ep_struct_struct_link (fk_struct_child_id);
-
-alter table o_ep_struct_artefact_link add constraint FKF26C8375236F24X foreign key (fk_struct_id) references o_ep_struct_el (structure_id);
-create index idx_structart_to_struct_idx on o_ep_struct_artefact_link (fk_struct_id);
-alter table o_ep_struct_artefact_link add constraint FKF26C8375236F25X foreign key (fk_artefact_id) references o_ep_artefact (artefact_id);
-create index idx_structart_to_art_idx on o_ep_struct_artefact_link (fk_artefact_id);
-alter table o_ep_struct_artefact_link add constraint FKF26C8375236F26Y foreign key (fk_auth_id) references o_bs_identity (id);
-create index idx_structart_to_auth_idx on o_ep_struct_artefact_link (fk_auth_id);
-
-alter table o_ep_struct_to_group add constraint struct_to_group_group_ctx foreign key (fk_group_id) references o_bs_group (id);
-create index idx_struct_to_group_group_ctx on o_ep_struct_to_group (fk_group_id);
-alter table o_ep_struct_to_group add constraint struct_to_group_re_ctx foreign key (fk_struct_id) references o_ep_struct_el (structure_id);
-create index idx_struct_to_group_re_ctx on o_ep_struct_to_group (fk_struct_id);
-
 -- tag
 alter table o_tag add constraint FK6491FCA5A4FA5DC foreign key (fk_author_id) references o_bs_identity (id);
 create index idx_tag_to_auth_idx on o_tag (fk_author_id);
diff --git a/src/main/resources/database/postgresql/alter_15_pre_7_to_15_pre_8.sql b/src/main/resources/database/postgresql/alter_15_pre_7_to_15_pre_8.sql
new file mode 100644
index 0000000000000000000000000000000000000000..47009d86b1895d3246fea9416095719915310778
--- /dev/null
+++ b/src/main/resources/database/postgresql/alter_15_pre_7_to_15_pre_8.sql
@@ -0,0 +1,11 @@
+-- ePortfolio V1
+drop view o_ep_notifications_comment_v;
+drop view o_ep_notifications_rating_v;
+drop view o_ep_notifications_art_v;
+drop view o_ep_notifications_struct_v;
+drop table o_ep_struct_to_group;
+drop table o_ep_struct_artefact_link;
+drop table o_ep_struct_struct_link;
+drop table o_ep_artefact;
+drop table o_ep_collect_restriction;
+drop table o_ep_struct_el;
diff --git a/src/main/resources/database/postgresql/setupDatabase.sql b/src/main/resources/database/postgresql/setupDatabase.sql
index 16d32e938e992eff875f0005bf312b092b52d58e..cdcaf2b12c83ee70ed8926c459dd2c068c85ec98 100644
--- a/src/main/resources/database/postgresql/setupDatabase.sql
+++ b/src/main/resources/database/postgresql/setupDatabase.sql
@@ -747,98 +747,6 @@ create table o_co_db_entry (
    primary key (id)
 );
 
--- eportfolio arteafcts
-create table o_ep_artefact (
-  artefact_id int8 not null,
-  artefact_type varchar(32) not null,
-  version int4 not null,
-  creationdate timestamp,
-  collection_date timestamp,
-  title varchar(512),
-  description varchar(4000),
-  signature int4 default 0,
-  businesspath varchar(2048),
-  fulltextcontent text,
-  reflexion text,
-  source varchar(2048),
-  add_prop1 varchar(2048),
-  add_prop2 varchar(2048),
-  add_prop3 varchar(2048),
-  fk_struct_el_id int8,
-  fk_artefact_auth_id int8 not null,
-  primary key (artefact_id)
-);
-
--- eportfolio collect restrictions
-create table o_ep_collect_restriction (
-  collect_id int8 not null,
-  version int4 not null,
-  creationdate timestamp,
-  artefact_type varchar(256),
-  amount int4 not null default -1,
-  restriction varchar(32),
-  pos int4 not null default 0,
-  fk_struct_el_id int8,
-  primary key (collect_id)
-);
-create table o_ep_struct_el (
-  structure_id int8 not null,
-  structure_type varchar(32) not null,
-  version int4 not null,
-  creationdate timestamp,
-  returndate timestamp default null,
-  copydate timestamp default null,
-  lastsyncheddate timestamp default null,
-  deadline timestamp default null,
-  title varchar(512),
-  description varchar(2048),
-  struct_el_source int8,
-  target_resname varchar(50),
-  target_resid int8,
-  target_ressubpath varchar(2048),
-  target_businesspath varchar(2048),
-  style varchar(128),
-  status varchar(32),
-  viewmode varchar(32),
-  fk_struct_root_id int8,
-  fk_struct_root_map_id int8,
-  fk_map_source_id int8,
-  fk_group_id int8,
-  fk_olatresource int8 not null,
-  primary key (structure_id)
-);
-create table o_ep_struct_struct_link (
-  link_id int8 not null,
-  version int4 not null,
-  creationdate timestamp,
-  pos int4 not null default 0,
-  fk_struct_parent_id int8 not null,
-  fk_struct_child_id int8 not null,
-  primary key (link_id)
-);
-create table o_ep_struct_artefact_link (
-  link_id int8 not null,
-  version int4 not null,
-  creationdate timestamp,
-  pos int4 not null default 0,
-  reflexion text,
-  fk_auth_id int8,
-  fk_struct_id int8 not null,
-  fk_artefact_id int8 not null,
-  primary key (link_id)
-);
-create table o_ep_struct_to_group (
-   id int8 not null,
-   creationdate timestamp not null,
-   r_defgroup boolean not null,
-   r_role varchar(64),
-   r_valid_from timestamp,
-   r_valid_to timestamp,
-   fk_group_id int8,
-   fk_struct_id int8,
-   primary key (id)
-);
-
 -- invitation
 create table o_bs_invitation (
    id int8 not null,
@@ -3127,72 +3035,6 @@ create view o_bs_identity_short_v as (
    inner join o_user as us on (ident.id = us.fk_identity)
 );
 
--- eportfolio views
-create or replace view o_ep_notifications_struct_v as (
-   select
-      struct.structure_id as struct_id,
-      struct.structure_type as struct_type,
-      struct.title as struct_title,
-      struct.fk_struct_root_id as struct_root_id,
-      struct.fk_struct_root_map_id as struct_root_map_id,
-      (case when struct.structure_type = 'page' then struct.structure_id else parent_struct.structure_id end) as page_key,
-      struct_link.creationdate as creation_date
-   from o_ep_struct_el as struct
-   inner join o_ep_struct_struct_link as struct_link on (struct_link.fk_struct_child_id = struct.structure_id)
-   inner join o_ep_struct_el as parent_struct on (struct_link.fk_struct_parent_id = parent_struct.structure_id)
-   where struct.structure_type = 'page' or parent_struct.structure_type = 'page'
-);
-
-create or replace view o_ep_notifications_art_v as (
-   select
-      artefact.artefact_id as artefact_id,
-      artefact_link.link_id as link_id,
-      artefact.title as artefact_title,
-      (case when struct.structure_type = 'page' then struct.title else root_struct.title end ) as struct_title,
-      struct.structure_type as struct_type,
-      struct.structure_id as struct_id,
-      root_struct.structure_id as struct_root_id,
-      root_struct.structure_type as struct_root_type,
-      struct.fk_struct_root_map_id as struct_root_map_id,
-      (case when struct.structure_type = 'page' then struct.structure_id else root_struct.structure_id end ) as page_key,
-      artefact_link.fk_auth_id as author_id,
-      artefact_link.creationdate as creation_date
-   from o_ep_struct_el as struct
-   inner join o_ep_struct_artefact_link as artefact_link on (artefact_link.fk_struct_id = struct.structure_id)
-   inner join o_ep_artefact as artefact on (artefact_link.fk_artefact_id = artefact.artefact_id)
-   left join o_ep_struct_el as root_struct on (struct.fk_struct_root_id = root_struct.structure_id)
-);
-
-create or replace view o_ep_notifications_rating_v as (
-   select
-      urating.rating_id as rating_id,
-      map.structure_id as map_id,
-      map.title as map_title,
-      cast(urating.ressubpath as int8) as page_key,
-      page.title as page_title,
-      urating.creator_id as author_id,
-      urating.creationdate as creation_date,
-      urating.lastmodified as last_modified
-   from o_userrating as urating
-   inner join o_olatresource as rating_resource on (rating_resource.resid = urating.resid and rating_resource.resname = urating.resname)
-   inner join o_ep_struct_el as map on (map.fk_olatresource = rating_resource.resource_id)
-   left join o_ep_struct_el as page on (page.fk_struct_root_map_id = map.structure_id and page.structure_id = cast(urating.ressubpath as int8))
-);
-
-create or replace view o_ep_notifications_comment_v as (
-   select
-      ucomment.comment_id as comment_id,
-      map.structure_id as map_id,
-      map.title as map_title,
-      cast(ucomment.ressubpath as int8) as page_key,
-      page.title as page_title,
-      ucomment.creator_id as author_id,
-      ucomment.creationdate as creation_date
-   from o_usercomment as ucomment
-   inner join o_olatresource as comment_resource on (comment_resource.resid = ucomment.resid and comment_resource.resname = ucomment.resname)
-   inner join o_ep_struct_el as map on (map.fk_olatresource = comment_resource.resource_id)
-   left join o_ep_struct_el as page on (page.fk_struct_root_map_id = map.structure_id and page.structure_id = cast(ucomment.ressubpath as int8))
-);
 
 create view o_gp_business_to_repository_v as (
 	select
@@ -3710,41 +3552,6 @@ create index idx_bbb_meet_grp_idx on o_bbb_meeting(fk_group_id);
 alter table o_bbb_meeting add constraint bbb_meet_template_idx foreign key (fk_template_id) references o_bbb_template (id);
 create index idx_bbb_meet_template_idx on o_bbb_meeting(fk_template_id);
 
--- eportfolio
-alter table o_ep_artefact add constraint FKF26C8375236F28X foreign key (fk_artefact_auth_id) references o_bs_identity (id);
-create index idx_artfeact_to_auth_idx on o_ep_artefact (fk_artefact_auth_id);
-alter table o_ep_artefact add constraint FKA0070D12316A97B4 foreign key (fk_struct_el_id) references o_ep_struct_el (structure_id);
-create index idx_artfeact_to_struct_idx on o_ep_artefact (fk_struct_el_id);
-
-alter table o_ep_struct_el add constraint FKF26C8375236F26X foreign key (fk_olatresource) references o_olatresource (resource_id);
-create index idx_structel_to_rsrc_idx on o_ep_struct_el (fk_olatresource);
-alter table o_ep_struct_el add constraint FK4ECC1C8D636191A1 foreign key (fk_map_source_id) references o_ep_struct_el (structure_id);
-create index idx_structel_to_map_idx on o_ep_struct_el (fk_map_source_id);
-alter table o_ep_struct_el add constraint FK4ECC1C8D76990817 foreign key (fk_struct_root_id) references o_ep_struct_el (structure_id);
-create index idx_structel_to_root_idx on o_ep_struct_el (fk_struct_root_id);
-alter table o_ep_struct_el add constraint FK4ECC1C8D76990818 foreign key (fk_struct_root_map_id) references o_ep_struct_el (structure_id);
-create index idx_structel_to_rootmap_idx on o_ep_struct_el (fk_struct_root_map_id);
-
-alter table o_ep_collect_restriction add constraint FKA0070D12316A97B5 foreign key (fk_struct_el_id) references o_ep_struct_el (structure_id);
-create index idx_collectrest_to_structel_idx on o_ep_collect_restriction (fk_struct_el_id);
-
-alter table o_ep_struct_struct_link add constraint FKF26C8375236F22X foreign key (fk_struct_parent_id) references o_ep_struct_el (structure_id);
-create index idx_structlink_to_parent_idx on o_ep_struct_struct_link (fk_struct_parent_id);
-alter table o_ep_struct_struct_link add constraint FKF26C8375236F23X foreign key (fk_struct_child_id) references o_ep_struct_el (structure_id);
-create index idx_structlink_to_child_idx on o_ep_struct_struct_link (fk_struct_child_id);
-
-alter table o_ep_struct_artefact_link add constraint FKF26C8375236F24X foreign key (fk_struct_id) references o_ep_struct_el (structure_id);
-create index idx_structart_to_struct_idx on o_ep_struct_artefact_link (fk_struct_id);
-alter table o_ep_struct_artefact_link add constraint FKF26C8375236F25X foreign key (fk_artefact_id) references o_ep_artefact (artefact_id);
-create index idx_structart_to_art_idx on o_ep_struct_artefact_link (fk_artefact_id);
-alter table o_ep_struct_artefact_link add constraint FKF26C8375236F26Y foreign key (fk_auth_id) references o_bs_identity (id);
-create index idx_structart_to_auth_idx on o_ep_struct_artefact_link (fk_auth_id);
-
-alter table o_ep_struct_to_group add constraint struct_to_group_group_ctx foreign key (fk_group_id) references o_bs_group (id);
-create index idx_struct_to_group_group_ctx on o_ep_struct_to_group (fk_group_id);
-alter table o_ep_struct_to_group add constraint struct_to_group_re_ctx foreign key (fk_struct_id) references o_ep_struct_el (structure_id);
-create index idx_struct_to_group_re_ctx on o_ep_struct_to_group (fk_struct_id);
-
 -- tag
 alter table o_tag add constraint FK6491FCA5A4FA5DC foreign key (fk_author_id) references o_bs_identity (id);
 create index idx_tag_to_auth_idx on o_tag (fk_author_id);
diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties
index 3acb4018032387a8cb76ae0ba9733c8a3a546da4..aa7af4cb5c76496652ee85e2dc439d402e210074 100644
--- a/src/main/resources/serviceconfig/olat.properties
+++ b/src/main/resources/serviceconfig/olat.properties
@@ -1403,15 +1403,6 @@ course.node.en.enabled=true
 # the contact / mail course element
 course.node.co.enabled=true
 
-########################################
-# Options for e-portfolio
-########################################
-#List of styles avaialbe for the e-portfolio maps. The separator is a ,
-portfolio.map.styles=default,comic,leather,epmst-green,epmst-blue,epmst-red
-portfolio.map.styles.values=default,comic,leather,epmst-green,epmst-blue,epmst-red
-#offer a list of all maps shared to public. Don't enable if > 500 public maps exist! The maps can still be viewed by opening a users vcard.
-portfolio.offer.public.map.list=true
-
 ########################################
 # Options for content editor
 ########################################
diff --git a/src/test/java/org/olat/admin/user/delete/service/UserDeletionManagerTest.java b/src/test/java/org/olat/admin/user/delete/service/UserDeletionManagerTest.java
index 965ae6f9ba92c6b45b3ff4dfe6263781b17e45ba..977c413c18f282ecef29afa894f7108da5f9b84b 100644
--- a/src/test/java/org/olat/admin/user/delete/service/UserDeletionManagerTest.java
+++ b/src/test/java/org/olat/admin/user/delete/service/UserDeletionManagerTest.java
@@ -51,13 +51,6 @@ import org.olat.core.id.UserConstants;
 import org.olat.core.util.StringHelper;
 import org.olat.group.BusinessGroup;
 import org.olat.group.BusinessGroupService;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.manager.EPStructureManager;
-import org.olat.portfolio.manager.EPStructureManagerTest;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.ElementType;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryService;
 import org.olat.test.JunitTestHelper;
@@ -82,10 +75,6 @@ public class UserDeletionManagerTest extends OlatTestCase {
 	@Autowired
 	private RepositoryService repositoryService;
 	@Autowired
-	private EPFrontendManager epFrontendManager;
-	@Autowired
-	private EPStructureManager epStructureManager;
-	@Autowired
 	private UserDeletionManager userDeletionManager;
 	@Autowired
 	private BusinessGroupService businessGroupService;
@@ -103,16 +92,6 @@ public class UserDeletionManagerTest extends OlatTestCase {
 		dbInstance.commitAndCloseSession();
 		// add some stuff
 		
-		//a default map
-		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioDefaultMap(identity, "A map to delete", "This map must be deleted");
-		Assert.assertNotNull(map);
-		//a template
-		PortfolioStructureMap template = EPStructureManagerTest.createPortfolioMapTemplate(identity, "A template to delete", "This template must be deleted");
-		epStructureManager.savePortfolioStructure(template);
-		//an artefact
-		AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(identity, "Forum");
-		dbInstance.commit();
-		Assert.assertNotNull(artefact);
 		//a group
 		BusinessGroup group = businessGroupService.createBusinessGroup(identity, "Group", "Group", -1, -1, false, false, null);
 		Assert.assertNotNull(group);
@@ -131,17 +110,6 @@ public class UserDeletionManagerTest extends OlatTestCase {
 		Identity deletedIdentity = securityManager.loadIdentityByKey(identity.getKey());
 		Assert.assertNotNull(deletedIdentity);
 		
-		//check that the artefacts are deleted
-		List<AbstractArtefact> artefacts = epFrontendManager.getArtefactPoolForUser(deletedIdentity);
-		Assert.assertNull(artefacts);
-		//check that the maps are deleted (1)
-		List<PortfolioStructure> maps = epFrontendManager.getStructureElementsForUser(deletedIdentity, ElementType.DEFAULT_MAP);
-		Assert.assertNotNull(maps);
-		Assert.assertEquals(0, maps.size());
-		//check that the maps are deleted (2)
-		PortfolioStructure deletedMap = epStructureManager.loadPortfolioStructureByKey(map.getKey());
-		Assert.assertNull(deletedMap);
-		
 		//check membership of group
 		boolean isMember = businessGroupService.isIdentityInBusinessGroup(deletedIdentity, group);
 		Assert.assertFalse(isMember);
diff --git a/src/test/java/org/olat/portfolio/manager/InvitationDAOTest.java b/src/test/java/org/olat/modules/portfolio/manager/InvitationDAOTest.java
similarity index 79%
rename from src/test/java/org/olat/portfolio/manager/InvitationDAOTest.java
rename to src/test/java/org/olat/modules/portfolio/manager/InvitationDAOTest.java
index 3a351d06a32efcce3356af1233c395e613d39296..8a1f8ca0ad78249badbab21f3e9f1f2298bc44a3 100644
--- a/src/test/java/org/olat/portfolio/manager/InvitationDAOTest.java
+++ b/src/test/java/org/olat/modules/portfolio/manager/InvitationDAOTest.java
@@ -17,9 +17,8 @@
  * frentix GmbH, http://www.frentix.com
  * <p>
  */
-package org.olat.portfolio.manager;
+package org.olat.modules.portfolio.manager;
 
-import java.util.Collections;
 import java.util.Date;
 import java.util.Locale;
 import java.util.UUID;
@@ -32,8 +31,6 @@ import org.olat.basesecurity.Invitation;
 import org.olat.basesecurity.manager.GroupDAO;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.test.JunitTestHelper;
 import org.olat.test.OlatTestCase;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -53,10 +50,6 @@ public class InvitationDAOTest extends OlatTestCase {
 	private InvitationDAO invitationDao;
 	@Autowired
 	private BaseSecurity securityManager;
-	@Autowired
-	private EPPolicyManager policyManager;
-	@Autowired
-	private EPFrontendManager epFrontendManager;
 	
 	
 	@Test
@@ -105,7 +98,7 @@ public class InvitationDAOTest extends OlatTestCase {
 	public void hasInvitationPolicies_testHQL() {
 		String token = UUID.randomUUID().toString();
 		Date atDate = new Date();
-		boolean hasInvitation = invitationDao.hasInvitations(token, atDate);
+		boolean hasInvitation = invitationDao.hasInvitations(token);
 		Assert.assertFalse(hasInvitation);
 	}
 	
@@ -183,41 +176,5 @@ public class InvitationDAOTest extends OlatTestCase {
 		long numOfInvitations = invitationDao.countInvitations();
 		Assert.assertTrue(numOfInvitations > 0l);
 	}
-	
-	/**
-	 * Check the HQL code of the the method, and that it doesn't delete to much invitations
-	 */
-	@Test
-	public void cleanUpInvitation() {
-		Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("Policy-User-2-");
-		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioDefaultMap(user, "Title", "Description");
-		Invitation invitation = invitationDao.createAndPersistInvitation();
-		dbInstance.commit();
-		
-		invitation.setFirstName("John");
-		invitation.setLastName("Smith Portfolio");
-		EPMapPolicy policy = new EPMapPolicy();
-		policy.setType(EPMapPolicy.Type.invitation);
-		policy.setInvitation(invitation);
-		
-		policyManager.updateMapPolicies(map, Collections.singletonList(policy));
-		dbInstance.commitAndCloseSession();
-		
-		//convert invitation to identity
-		Identity invitee = invitationDao.createIdentityFrom(invitation, Locale.ENGLISH);
-		dbInstance.commitAndCloseSession();
-
-		//and check 
-		boolean visible = epFrontendManager.isMapVisible(invitee, map.getOlatResource());
-		Assert.assertTrue(visible);
-		
-		//clean the invitations
-		invitationDao.cleanUpInvitations();
-		dbInstance.commitAndCloseSession();
-		
-		//check that the invitation not was not deleted
-		boolean afterVisible = epFrontendManager.isMapVisible(invitee, map.getOlatResource());
-		Assert.assertTrue(afterVisible);
-	}
 
 }
diff --git a/src/test/java/org/olat/portfolio/Course_including_Blog.zip b/src/test/java/org/olat/portfolio/Course_including_Blog.zip
deleted file mode 100644
index 85a2445ac14ad8f81ffe596dac796d2ba64bc049..0000000000000000000000000000000000000000
Binary files a/src/test/java/org/olat/portfolio/Course_including_Blog.zip and /dev/null differ
diff --git a/src/test/java/org/olat/portfolio/Course_including_Forum.zip b/src/test/java/org/olat/portfolio/Course_including_Forum.zip
deleted file mode 100644
index 9bf5602c46cbfe918cea1fb326886550aba49d3c..0000000000000000000000000000000000000000
Binary files a/src/test/java/org/olat/portfolio/Course_including_Forum.zip and /dev/null differ
diff --git a/src/test/java/org/olat/portfolio/EPArtefactManagerTest.java b/src/test/java/org/olat/portfolio/EPArtefactManagerTest.java
deleted file mode 100644
index 064326191375e843150ac45563e0d63e54ceaffc..0000000000000000000000000000000000000000
--- a/src/test/java/org/olat/portfolio/EPArtefactManagerTest.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.portfolio;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.Date;
-import java.util.List;
-import java.util.UUID;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.olat.core.commons.persistence.DB;
-import org.olat.core.id.Identity;
-import org.olat.core.util.vfs.LocalFolderImpl;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.core.util.vfs.VFSItem;
-import org.olat.core.util.vfs.filters.VFSSystemItemFilter;
-import org.olat.modules.fo.portfolio.ForumArtefact;
-import org.olat.portfolio.manager.EPArtefactManager;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.artefacts.EPStructureElementArtefact;
-import org.olat.portfolio.model.artefacts.FileArtefact;
-import org.olat.portfolio.model.structel.EPStructureElement;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.test.JunitTestHelper;
-import org.olat.test.OlatTestCase;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * 
- * Description:<br>
- * This is an integration test of the EPArtefactManager to test the DB
- * 
- * <P>
- * Initial Date:  24 jun. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, www.frentix.com
- */
-public class EPArtefactManagerTest extends OlatTestCase {
-	
-	private static Identity ident1;
-	private static boolean isInitialized = false;
-	
-	@Autowired
-	private DB dbInstance;
-	
-	@Autowired
-	private PortfolioModule portfolioModule;
-	
-	@Autowired
-	private EPArtefactManager epArtefactManager;
-	
-	@Autowired
-	private EPFrontendManager epFrontendManager;
-	
-	@Before
-	public void setUp() {
-		if(!isInitialized) {
-			ident1 = JunitTestHelper.createAndPersistIdentityAsUser(UUID.randomUUID().toString());
-		}
-	}
-	
-	@Test
-	public void testManagers() {
-		assertNotNull(dbInstance);
-		assertNotNull(epArtefactManager);
-		assertNotNull(portfolioModule);
-		assertNotNull(epFrontendManager);
-	}
-	
-	@Test
-	public void testDeleteArtefact() {
-		AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		dbInstance.commitAndCloseSession();
-		
-		long artKey = artefact.getKey();
-		AbstractArtefact loadedArtefact = epFrontendManager.loadArtefactByKey(artKey);
-		// assure the artefact exists in db before deletion
-		assertEquals(artefact.getKey(), loadedArtefact.getKey());
-		epFrontendManager.deleteArtefact(loadedArtefact);
-		AbstractArtefact loadedArtefact2 = epFrontendManager.loadArtefactByKey(artKey);
-		assertNull(loadedArtefact2);
-	}
-		
-	@Test
-	public void testDeleteArtefactReferences() {
-		// test deletion of references to artefact
-		AbstractArtefact artefact2 = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		PortfolioStructure el = epFrontendManager.createAndPersistPortfolioStructureElement(null, "structure-el", "structure-element");
-		epFrontendManager.addArtefactToStructure(ident1, artefact2, el);
-		assertTrue(epFrontendManager.getArtefacts(el).get(0).equalsByPersistableKey(artefact2));
-		epFrontendManager.deleteArtefact(artefact2);
-		assertEquals(0, epFrontendManager.getArtefacts(el).size());
-	}
-		
-	@Test
-	public void testDeleteArtefactVFSContainer() {
-		// test deletion of vfs-artefactContainer
-		AbstractArtefact artefact3 = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		VFSContainer artCont = epFrontendManager.getArtefactContainer(artefact3);
-		artCont.createChildLeaf("testfile.txt");
-		assertEquals(1, artCont.getItems(new VFSSystemItemFilter()).size());
-		Long artKey3 = artefact3.getKey();
-		epFrontendManager.deleteArtefact(artefact3);
-		VFSItem item = epFrontendManager.getArtefactsRoot().resolve(artKey3.toString());
-		assertNull(item);
-	}
-	
-	@Test
-	public void testGetArtefactPoolForUser() {
-		AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		AbstractArtefact artefact2 = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		List<AbstractArtefact> artefactList = epFrontendManager.getArtefactPoolForUser(ident1);
-		assertEquals(2, artefactList.size());
-		assertTrue(artefactList.contains(artefact));
-		assertTrue(artefactList.contains(artefact2));
-	}
-	
-	@Test
-	public void testCreateForumArtefact() {
-		EPArtefactHandler<?> handler = portfolioModule.getArtefactHandler("Forum");
-		AbstractArtefact artefact = handler.createArtefact();
-		artefact.setAuthor(ident1);
-		assertNotNull(artefact);
-		assertTrue(artefact instanceof ForumArtefact);
-
-		//update the artefact
-		AbstractArtefact persistedArtefact = epFrontendManager.updateArtefact(artefact);
-		assertNotNull(persistedArtefact);
-		assertTrue(persistedArtefact instanceof ForumArtefact);
-		dbInstance.commitAndCloseSession();
-		
-		//reload the artefact
-		AbstractArtefact loadedArtefact = epFrontendManager.loadArtefactByKey(artefact.getKey());
-		assertNotNull(loadedArtefact);
-		assertTrue(loadedArtefact instanceof ForumArtefact);
-		
-		//get the VFS container of the artefact
-		VFSContainer container = epFrontendManager.getArtefactContainer(loadedArtefact);
-		assertNotNull(container);
-		if(container instanceof LocalFolderImpl) {
-			LocalFolderImpl folder = (LocalFolderImpl)container;
-			assertNotNull(folder.getBasefile());
-			assertTrue(folder.getBasefile().exists());
-			assertTrue(folder.getBasefile().isDirectory());
-		}
-	}
-	
-	@Test
-	public void testCreateForumArtefactAlternateVersion() {
-		AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		assertNotNull(artefact);
-		assertTrue(artefact instanceof ForumArtefact);
-		dbInstance.commitAndCloseSession();
-		assertNotNull(artefact.getKey());
-
-		//reload the artefact
-		AbstractArtefact persistedArtefact = epFrontendManager.loadArtefactByKey(artefact.getKey());
-		assertNotNull(persistedArtefact);
-		assertTrue(persistedArtefact instanceof ForumArtefact);
-	}
-	
-	@Test
-	public void testSaveFileArtefactWithAllProperties() {
-		AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(ident1, "bc");
-		assertNotNull(artefact);
-		assertTrue(artefact instanceof FileArtefact);
-		FileArtefact fileArtefact = (FileArtefact)artefact;
-		fileArtefact.setBusinessPath("[CourseModule:526834956][path=/test/test.html:0]");
-		fileArtefact.setCollectionDate(new Date());
-		fileArtefact.setDescription("A description of the file artefact");
-		fileArtefact.setFulltextContent("The text of the artefact");
-		fileArtefact.setReflexion("A deep reflexion caused by this artefact");
-		fileArtefact.setSignature(90);
-		fileArtefact.setSource("A file");
-		fileArtefact.setTitle("File artefact");
-		epFrontendManager.updateArtefact(artefact);
-		dbInstance.commitAndCloseSession();
-		assertNotNull(artefact.getKey());
-
-		//reload the artefact
-		AbstractArtefact persistedArtefact = epFrontendManager.loadArtefactByKey(artefact.getKey());
-		assertNotNull(persistedArtefact);
-		assertTrue(persistedArtefact instanceof FileArtefact);
-		assertEquals("[CourseModule:526834956][path=/test/test.html:0]", persistedArtefact.getBusinessPath());
-		assertNotNull(persistedArtefact.getCollectionDate());
-		assertEquals("A description of the file artefact", persistedArtefact.getDescription());
-		assertEquals("The text of the artefact", persistedArtefact.getFulltextContent());
-		assertEquals("A deep reflexion caused by this artefact", persistedArtefact.getReflexion());
-		assertEquals(90, persistedArtefact.getSignature());
-		assertEquals("A file", persistedArtefact.getSource());
-		assertEquals("File artefact", persistedArtefact.getTitle());
-	}
-	
-	@Test
-	public void testCreateStructureElementArtefact() {
-		AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(ident1, "ep-structure-element");
-		if (artefact != null) { // handler is disabled or another error occurred while
-														// trying to create the artefact
-			assertNotNull(artefact);
-			assertTrue(artefact instanceof EPStructureElementArtefact);
-
-			EPStructureElementArtefact elementArtefact = (EPStructureElementArtefact)artefact;
-			PortfolioStructure el = epFrontendManager.createAndPersistPortfolioStructureElement(null, "structure-el-for-artefact", "structure-element-for-artefact");
-			elementArtefact.setStructureElement((EPStructureElement)el);
-			
-			dbInstance.commitAndCloseSession();
-			assertNotNull(artefact.getKey());
-	
-			//reload the artefact
-			AbstractArtefact persistedArtefact = epFrontendManager.loadArtefactByKey(artefact.getKey());
-			assertNotNull(persistedArtefact);
-			assertTrue(persistedArtefact instanceof EPStructureElementArtefact);
-			EPStructureElementArtefact persistedElementArtefact = (EPStructureElementArtefact)persistedArtefact;
-			assertNotNull(persistedElementArtefact.getStructureElement());
-			assertEquals(el.getKey(), persistedElementArtefact.getStructureElement().getKey());
-		}
-	}
-}
diff --git a/src/test/java/org/olat/portfolio/EPFrontendManagerTest.java b/src/test/java/org/olat/portfolio/EPFrontendManagerTest.java
deleted file mode 100644
index d0aed5fc80108a8e01bb876d8e036abe751e5774..0000000000000000000000000000000000000000
--- a/src/test/java/org/olat/portfolio/EPFrontendManagerTest.java
+++ /dev/null
@@ -1,841 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.portfolio;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Locale;
-
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.olat.basesecurity.BaseSecurity;
-import org.olat.basesecurity.Invitation;
-import org.olat.basesecurity.OrganisationService;
-import org.olat.core.commons.persistence.DB;
-import org.olat.core.id.Identity;
-import org.olat.core.id.Organisation;
-import org.olat.core.id.Roles;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.manager.EPMapPolicy;
-import org.olat.portfolio.manager.EPMapPolicy.Type;
-import org.olat.portfolio.manager.EPStructureManager;
-import org.olat.portfolio.manager.InvitationDAO;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.EPDefaultMap;
-import org.olat.portfolio.model.structel.EPPage;
-import org.olat.portfolio.model.structel.EPStructureElement;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.olat.portfolio.model.structel.EPStructuredMapTemplate;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.portfolio.model.structel.StructureStatusEnum;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryEntryStatusEnum;
-import org.olat.repository.RepositoryService;
-import org.olat.resource.OLATResource;
-import org.olat.test.JunitTestHelper;
-import org.olat.test.OlatTestCase;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * 
- * Description:<br>
- * This an integration test for the frontend manager. The goal of this test is
- * to check the hibernate mapping and the constraints on the database too and
- * not only the manager.
- * 
- * This will only test methods, which are really implemented in the
- * frontendManager and not the ones which mainly pass through artefact- or
- * structure- manager
- * 
- * <P>
- * Initial Date: 28 jun. 2010 <br>
- * 
- * @author srosse, stephane.rosse@frentix.com, http.//www.frentix.com
- */
-public class EPFrontendManagerTest extends OlatTestCase {
-	
-	private static Identity ident1, ident2, ident3;
-	private static boolean isInitialized = false;
-	
-	@Autowired
-	private DB dbInstance;
-	@Autowired
-	private EPFrontendManager epFrontendManager;
-	@Autowired
-	private EPStructureManager epStructureManager;
-	@Autowired
-	private BaseSecurity securityManager;
-	@Autowired
-	private InvitationDAO invitationDao;
-	@Autowired
-	private RepositoryService repositoryService;
-	@Autowired
-	private OrganisationService organisationService;
-	
-	@Before
-	public void setUp() {
-		if(!isInitialized) {
-			ident1 = JunitTestHelper.createAndPersistIdentityAsUser("frtuse-1");
-			ident2 = JunitTestHelper.createAndPersistIdentityAsUser("frtuse-2");
-			ident3 = JunitTestHelper.createAndPersistIdentityAsUser("frtuse-3");
-		}
-	}
-	
-	@Test
-	public void testManagers() {
-		assertNotNull(dbInstance);
-		assertNotNull(epFrontendManager);
-		assertNotNull(securityManager);
-	}
-	
-	@Test
-	public void testAssignMapTemplateToUser() {
-		//create a template
-		OLATResource resource = epStructureManager.createPortfolioMapTemplateResource();
-		//create a repository entry
-		Organisation defOrganisation = organisationService.getDefaultOrganisation();
-		RepositoryEntry addedEntry = repositoryService.create(ident1, null, "-", "template-1", "map-template-1", resource,
-				RepositoryEntryStatusEnum.preparation, defOrganisation);
-		dbInstance.commitAndCloseSession();
-		//create the template owned by ident1
-		PortfolioStructureMap templateEl = epStructureManager.createAndPersistPortfolioMapTemplateFromEntry(ident1, addedEntry);
-		//first page
-		PortfolioStructure page1 = epFrontendManager.createAndPersistPortfolioPage(templateEl, "template-page-1", "template-page-1");
-		//structure element 1 from page 1
-		PortfolioStructure struct11 = epFrontendManager.createAndPersistPortfolioStructureElement(page1, "template-structure-1.1", "template-structure-1.1");
-		epStructureManager.addCollectRestriction(struct11, "Forum", "minimum", 2);
-		epStructureManager.savePortfolioStructure(struct11);
-		//structure element 2 from page 1
-		PortfolioStructure struct12 = epFrontendManager.createAndPersistPortfolioStructureElement(page1, "template-structure-1.2", "template-structure-1.2");
-		assertNotNull(struct12);
-		//first page
-		PortfolioStructure page2 = epFrontendManager.createAndPersistPortfolioPage(templateEl, "template-page-2", "template-page-2");
-		//structure element 1 from page 2
-		PortfolioStructure struct21 = epFrontendManager.createAndPersistPortfolioStructureElement(page2, "template-structure-2.1", "template-structure-2.1");
-		epStructureManager.addCollectRestriction(struct21, "bc", "maximum", 4);
-		epStructureManager.savePortfolioStructure(struct21);
-		//save the template
-		dbInstance.commitAndCloseSession();
-		
-		
-		//make the copy
-		PortfolioStructureMap map = epFrontendManager.assignStructuredMapToUser(ident2, templateEl, addedEntry, null, null, null);
-		dbInstance.commitAndCloseSession();
-		assertNotNull(map);
-		
-		//check the copy
-		PortfolioStructure retrievedMap = epFrontendManager.loadPortfolioStructureByKey(map.getKey());
-		assertNotNull(retrievedMap);
-		assertTrue(retrievedMap instanceof EPStructuredMap);
-		assertNotNull(((EPStructuredMap)retrievedMap).getStructuredMapSource());
-		assertEquals(templateEl.getKey(), ((EPStructuredMap)retrievedMap).getStructuredMapSource().getKey());
-
-		
-		//check pages of the copied map
-		List<PortfolioStructure> pages = epFrontendManager.loadStructureChildren(retrievedMap);
-		assertNotNull(pages);
-		assertEquals(2, pages.size());
-		assertTrue(pages.get(0) instanceof EPPage);
-		assertTrue(pages.get(1) instanceof EPPage);
-		assertEquals("template-page-1", ((EPStructureElement)pages.get(0)).getTitle());
-		assertEquals("template-page-2", ((EPStructureElement)pages.get(1)).getTitle());
-		//check root
-		assertNotNull(((EPStructureElement)pages.get(0)).getRoot());
-		assertEquals(retrievedMap.getKey(), ((EPStructureElement)pages.get(0)).getRoot().getKey());
-		
-		//check children of the pages
-		List<PortfolioStructure> structs1 = epFrontendManager.loadStructureChildren(pages.get(0));
-		assertNotNull(structs1);
-		assertEquals(2, structs1.size());
-		assertTrue(structs1.get(0) instanceof EPStructureElement);
-		assertTrue(structs1.get(1) instanceof EPStructureElement);
-		EPStructureElement struct11El = (EPStructureElement)structs1.get(0);
-		assertEquals("template-structure-1.1", struct11El.getTitle());
-		assertEquals("template-structure-1.2", ((EPStructureElement)structs1.get(1)).getTitle());
-		//check root
-		assertNotNull(((EPStructureElement)structs1.get(0)).getRoot());
-		assertEquals(retrievedMap.getKey(), ((EPStructureElement)structs1.get(0)).getRoot().getKey());
-		assertNotNull(((EPStructureElement)structs1.get(1)).getRoot());
-		assertEquals(retrievedMap.getKey(), ((EPStructureElement)structs1.get(1)).getRoot().getKey());
-		//check collect restriction
-		assertNotNull(struct11El.getCollectRestrictions());
-		assertEquals("Forum", struct11El.getCollectRestrictions().get(0).getArtefactType());
-		assertEquals("minimum", struct11El.getCollectRestrictions().get(0).getRestriction());
-		assertEquals(2, struct11El.getCollectRestrictions().get(0).getAmount());
-
-		List<PortfolioStructure> structs2 = epFrontendManager.loadStructureChildren(pages.get(1));
-		assertNotNull(structs2);
-		assertEquals(1, structs2.size());
-		assertTrue(structs2.get(0) instanceof EPStructureElement);
-		EPStructureElement struct21El = (EPStructureElement)structs2.get(0);
-		assertEquals("template-structure-2.1", struct21El.getTitle());
-		//check root
-		assertNotNull(struct21El.getRoot());
-		assertEquals(retrievedMap.getKey(), struct21El.getRoot().getKey());
-		//check collect restriction
-		assertNotNull(struct21El.getCollectRestrictions());
-		assertEquals("bc", struct21El.getCollectRestrictions().get(0).getArtefactType());
-		assertEquals("maximum", struct21El.getCollectRestrictions().get(0).getRestriction());
-		assertEquals(4, struct21El.getCollectRestrictions().get(0).getAmount());
-	}
-	
-	@Test
-	public void testSyncMapTemplateToUserMap() {
-		//create a template
-		OLATResource resource = epStructureManager.createPortfolioMapTemplateResource();
-		//create a repository entry
-		Organisation defOrganisation = organisationService.getDefaultOrganisation();
-		RepositoryEntry addedEntry = repositoryService.create(ident1, null, "-", "Template in user", "Template in use", resource,
-				RepositoryEntryStatusEnum.preparation, defOrganisation);
-		//create the template owned by ident1
-		PortfolioStructureMap templateEl = epStructureManager.createAndPersistPortfolioMapTemplateFromEntry(ident1, addedEntry);
-		//create five pages
-		List<PortfolioStructure> pageRefs = new ArrayList<>();
-		List<PortfolioStructure> elementRefs = new ArrayList<>();
-		
-		for(int i=0; i<5; i++) {
-			PortfolioStructure page = epFrontendManager.createAndPersistPortfolioPage(templateEl, "sync-template-page-" + i, "sync-template-page-" + i);
-			pageRefs.add(page);
-			
-			for(int j=0; j<5; j++) {
-				PortfolioStructure struct = epFrontendManager.createAndPersistPortfolioStructureElement(page, "template-structure-" + i + "." + j, "template-structure-" + i + "." + j);
-				epStructureManager.addCollectRestriction(struct, "Forum", "minimum", 2);
-				epStructureManager.savePortfolioStructure(struct);
-				elementRefs.add(struct);
-			}
-		}
-		//save the template
-		dbInstance.commitAndCloseSession();
-		//end create template
-		//////////////////////
-
-		//make the copy
-		PortfolioStructureMap map = epFrontendManager.assignStructuredMapToUser(ident2, templateEl, addedEntry, null, null, null);
-		dbInstance.commitAndCloseSession();
-		assertNotNull(map);
-		
-		//////////////////////////////////
-		//shuffle the pages and delete one
-		PortfolioStructure retrievedTemplateEl = epFrontendManager.loadPortfolioStructureByKey(templateEl.getKey());
-		List<PortfolioStructure> pages = epFrontendManager.loadStructureChildren(retrievedTemplateEl);
-		epStructureManager.moveUp(retrievedTemplateEl, pages.get(1));
-		epStructureManager.moveDown(retrievedTemplateEl, pages.get(2));
-		epStructureManager.removeStructure(retrievedTemplateEl, pages.get(3));
-		epStructureManager.savePortfolioStructure(retrievedTemplateEl);
-		//shuffle a page 
-		List<PortfolioStructure> page1Children = epFrontendManager.loadStructureChildren(pages.get(1));
-		epStructureManager.moveUp(pages.get(1), page1Children.get(3));
-		epStructureManager.moveUp(pages.get(1), page1Children.get(2));
-		epStructureManager.moveUp(pages.get(1), page1Children.get(4));
-		//and add an element and sub-elements
-		PortfolioStructure newStruct = epFrontendManager.createAndPersistPortfolioStructureElement(pages.get(1), "new-template-structure-1.6", "template-structure-1.6");
-		epStructureManager.addCollectRestriction(pages.get(1), "Forum", "minimum", 2);
-		epStructureManager.savePortfolioStructure(newStruct);
-		epStructureManager.savePortfolioStructure(pages.get(1));
-		for(int k=0; k<5; k++) {
-			PortfolioStructure struct = epFrontendManager.createAndPersistPortfolioStructureElement(newStruct, "new-template-structure-2." + k, "template-structure-2." + k);
-			epStructureManager.addCollectRestriction(struct, "bc", "minimum", 2);
-			epStructureManager.savePortfolioStructure(struct);
-			elementRefs.add(struct);
-		}
-		dbInstance.commitAndCloseSession();
-		//end shuffle the pages
-		//////////////////////////////////
-		
-		////////////////////
-		//check the template
-		PortfolioStructure retrievedTemplate2El = epFrontendManager.loadPortfolioStructureByKey(templateEl.getKey());
-		assertNotNull(retrievedTemplate2El);
-		assertTrue(retrievedTemplate2El instanceof EPStructuredMapTemplate);
-		List<PortfolioStructure> retrievedPages2 = epFrontendManager.loadStructureChildren(retrievedTemplate2El);
-		assertEquals(4, retrievedPages2.size());
-		assertEquals(4, ((EPStructuredMapTemplate)retrievedTemplate2El).getInternalChildren().size());
-		//check the shuffled pages
-		assertEquals(pageRefs.get(1).getKey(), retrievedPages2.get(0).getKey());
-		assertEquals(pageRefs.get(0).getKey(), retrievedPages2.get(1).getKey());
-		assertEquals(pageRefs.get(2).getKey(), retrievedPages2.get(2).getKey());
-		assertEquals(pageRefs.get(4).getKey(), retrievedPages2.get(3).getKey());
-		//check added element
-		List<PortfolioStructure> retrievedChildren2 = epFrontendManager.loadStructureChildren(retrievedPages2.get(0));
-		assertEquals(6, retrievedChildren2.size());
-		
-		dbInstance.commitAndCloseSession();
-		//check the template
-		////////////////////
-		
-
-		//sync the map
-		epFrontendManager.synchronizeStructuredMapToUserCopy(map);
-		dbInstance.commitAndCloseSession();
-		
-		
-		/////////////////
-		//check the sync
-		PortfolioStructure synchedMap = epFrontendManager.loadPortfolioStructureByKey(map.getKey());
-		assertNotNull(synchedMap);
-		assertTrue(synchedMap instanceof EPStructuredMap);
-		List<PortfolioStructure> synchedPages = epFrontendManager.loadStructureChildren(synchedMap);
-		assertNotNull(synchedPages);
-		assertEquals(4, synchedPages.size());
-		assertEquals(((EPStructureElement)pageRefs.get(1)).getTitle(), ((EPStructureElement)synchedPages.get(0)).getTitle());
-		assertEquals(((EPStructureElement)pageRefs.get(0)).getTitle(), ((EPStructureElement)synchedPages.get(1)).getTitle());
-		assertEquals(((EPStructureElement)pageRefs.get(2)).getTitle(), ((EPStructureElement)synchedPages.get(2)).getTitle());
-		assertEquals(((EPStructureElement)pageRefs.get(4)).getTitle(), ((EPStructureElement)synchedPages.get(3)).getTitle());
-		
-		//check synched key
-		assertEquals(((EPStructureElement)pageRefs.get(1)).getKey(), ((EPStructureElement)synchedPages.get(0)).getStructureElSource());
-		assertEquals(((EPStructureElement)pageRefs.get(0)).getKey(), ((EPStructureElement)synchedPages.get(1)).getStructureElSource());
-		assertEquals(((EPStructureElement)pageRefs.get(2)).getKey(), ((EPStructureElement)synchedPages.get(2)).getStructureElSource());
-		assertEquals(((EPStructureElement)pageRefs.get(4)).getKey(), ((EPStructureElement)synchedPages.get(3)).getStructureElSource());
-		
-		//check the new elements
-		List<PortfolioStructure> retrievedPage1Children = epFrontendManager.loadStructureChildren(synchedPages.get(0));
-		assertEquals(6, retrievedPage1Children.size());
-		PortfolioStructure retrievedNewStruct = retrievedPage1Children.get(5);
-		assertEquals("new-template-structure-1.6", ((EPStructureElement)retrievedNewStruct).getTitle());
-		List<PortfolioStructure> retrievedNewStructChildren = epFrontendManager.loadStructureChildren(retrievedNewStruct);
-		assertNotNull(retrievedNewStructChildren);
-		assertEquals(5, retrievedNewStructChildren.size());
-		for(int k=0; k<5; k++) {
-			assertEquals("new-template-structure-2." + k, ((EPStructureElement)retrievedNewStructChildren.get(k)).getTitle());
-		}
-		//end check the sync
-		////////////////////
-	}
-	
-	@Test
-	public void testTaggingOfArtefacts() {
-		AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		dbInstance.commitAndCloseSession();
-		assertNotNull(artefact);
-		
-		epFrontendManager.setArtefactTag(ident1, artefact, "Hello");
-		epFrontendManager.setArtefactTag(ident2, artefact, "Hello");
-		epFrontendManager.setArtefactTag(ident2, artefact, "Tchao");
-		dbInstance.commitAndCloseSession();
-		
-		List<String> tags = epFrontendManager.getArtefactTags(artefact);
-		assertNotNull(tags);
-		assertEquals(2, tags.size());
-		assertTrue(tags.get(0).equals("Hello") || tags.get(1).equals("Hello"));
-		assertTrue(tags.get(0).equals("Tchao") || tags.get(1).equals("Tchao"));
-	}
-	
-	@Test
-	public void testCopyMap() {
-		//create two artefacts
-		AbstractArtefact artefact1 = epFrontendManager.createAndPersistArtefact(ident1, "text");
-		assertNotNull(artefact1);
-		
-		AbstractArtefact artefact2 = epFrontendManager.createAndPersistArtefact(ident1, "bc");
-		assertNotNull(artefact2);
-		
-		dbInstance.commitAndCloseSession();
-		
-		//create a map with a page and the page has two artefacts
-		PortfolioStructureMap originalMap = epFrontendManager.createAndPersistPortfolioDefaultMap(ident1, "Title", "Description");
-		PortfolioStructure newPage = epFrontendManager.createAndPersistPortfolioPage(originalMap, "Page title", "Page description");
-		boolean successfullLink1 = epFrontendManager.addArtefactToStructure(ident1, artefact1, newPage);
-		assertTrue(successfullLink1);
-		
-		boolean successfullLink2 = epFrontendManager.addArtefactToStructure(ident1, artefact2, newPage);
-		assertTrue(successfullLink2);
-
-		dbInstance.commitAndCloseSession();
-		
-		//1 test: copy the map one shoot
-		PortfolioStructureMap copyMap = epFrontendManager.createAndPersistPortfolioDefaultMap(ident1, "Title copy", "Description copy");
-		epFrontendManager.copyStructureRecursively(originalMap, copyMap, true);
-		assertNotNull(copyMap.getKey());
-		
-		dbInstance.commitAndCloseSession();
-		
-		//2 test: copy the map two shoota
-		PortfolioStructureMap copyMap2 = epFrontendManager.createAndPersistPortfolioDefaultMap(ident1, "Title copy 2", "Description copy 2");
-		dbInstance.commitAndCloseSession();
-		assertNotNull(copyMap2.getKey());
-		
-		epFrontendManager.copyStructureRecursively(originalMap, copyMap2, true);
-		dbInstance.commitAndCloseSession();
-	}
-	
-	@Test
-	public void closedArtefacts() {
-		//create two artefacts
-		AbstractArtefact artefact1 = epFrontendManager.createAndPersistArtefact(ident1, "text");
-		assertNotNull(artefact1);
-		
-		AbstractArtefact artefact2 = epFrontendManager.createAndPersistArtefact(ident1, "bc");
-		assertNotNull(artefact2);
-		
-		dbInstance.commitAndCloseSession();
-		
-		//create a map with a page and the page has two artefacts
-		PortfolioStructureMap originalMap = epFrontendManager.createAndPersistPortfolioDefaultMap(ident1, "Title", "Description");
-		PortfolioStructure newPage = epFrontendManager.createAndPersistPortfolioPage(originalMap, "Page title", "Page description");
-		
-		boolean successfullLink1 = epFrontendManager.addArtefactToStructure(ident1, artefact1, newPage);
-		assertTrue(successfullLink1);
-		boolean successfullLink2 = epFrontendManager.addArtefactToStructure(ident1, artefact2, newPage);
-		assertTrue(successfullLink2);
-		
-		dbInstance.commitAndCloseSession();
-		
-		//check if the artefact is in a closed map
-		assertFalse(epFrontendManager.isArtefactClosed(artefact1));
-		assertFalse(epFrontendManager.isArtefactClosed(artefact2));
-		
-		//closed the map artificially
-		((EPDefaultMap)originalMap).setStatus(StructureStatusEnum.CLOSED);
-		dbInstance.updateObject(originalMap);
-		dbInstance.commitAndCloseSession();
-
-		//check if the artefact is in a closed map
-		assertTrue(epFrontendManager.isArtefactClosed(artefact1));
-		assertTrue(epFrontendManager.isArtefactClosed(artefact2));
-	}
-	
-	@Test
-	public void isArtefactsInStructure() {
-		
-		//create two artefacts
-		AbstractArtefact artefact1 = epFrontendManager.createAndPersistArtefact(ident1, "text");
-		assertNotNull(artefact1);
-		
-		AbstractArtefact artefact2 = epFrontendManager.createAndPersistArtefact(ident1, "bc");
-		assertNotNull(artefact2);
-		
-		dbInstance.commitAndCloseSession();
-		
-		//create a map with a page and the page has two artefacts
-		PortfolioStructureMap originalMap = epFrontendManager.createAndPersistPortfolioDefaultMap(ident1, "Title", "Description");
-		PortfolioStructure page1 = epFrontendManager.createAndPersistPortfolioPage(originalMap, "Page title", "Page description");
-		PortfolioStructure page2 = epFrontendManager.createAndPersistPortfolioPage(originalMap, "Page title", "Page description");
-		
-		boolean successfullLink1 = epFrontendManager.addArtefactToStructure(ident1, artefact1, page1);
-		assertTrue(successfullLink1);
-		boolean successfullLink2 = epFrontendManager.addArtefactToStructure(ident1, artefact2, page2);
-		assertTrue(successfullLink2);
-		
-		dbInstance.commitAndCloseSession();
-
-		assertTrue(epFrontendManager.isArtefactInStructure(artefact1, page1));
-		assertFalse(epFrontendManager.isArtefactInStructure(artefact1, page2));
-		assertFalse(epFrontendManager.isArtefactInStructure(artefact2, page1));
-		assertTrue(epFrontendManager.isArtefactInStructure(artefact2, page2));
-	}
-	
-	@Test
-	public void isMapOwner() {
-		//create a map
-		PortfolioStructureMap originalMap = epFrontendManager.createAndPersistPortfolioDefaultMap(ident1, "Title", "Description");
-		PortfolioStructure page1 = epFrontendManager.createAndPersistPortfolioPage(originalMap, "Page title", "Page description");
-		assertNotNull(page1);
-		
-		dbInstance.commitAndCloseSession();
-		
-		//check if ident1 is owner
-		assertTrue(epFrontendManager.isMapOwner(ident1, originalMap.getOlatResource()));
-		//check if ident2 is not owner
-		assertFalse(epFrontendManager.isMapOwner(ident2, originalMap.getOlatResource()));
-	}
-	
-	/**
-	 * Same workflow as the repository. This workflow is pretty critical.
-	 */
-	@Test
-	public void isStructuredMapOwner() {
-		OLATResource resource = epStructureManager.createPortfolioMapTemplateResource();
-		
-		//create a repository entry
-		Organisation defOrganisation = organisationService.getDefaultOrganisation();
-		RepositoryEntry addedEntry = repositoryService.create(ident1, null, "-", "test repo", "desc repo", resource,
-				RepositoryEntryStatusEnum.preparation, defOrganisation);
-		dbInstance.commitAndCloseSession();
-		
-		//create the template owned by ident1
-		PortfolioStructureMap template = epStructureManager.createAndPersistPortfolioMapTemplateFromEntry(ident1, addedEntry);
-		PortfolioStructure page1 = epFrontendManager.createAndPersistPortfolioPage(template, "Page title", "Page description");
-		assertNotNull(page1);
-
-		dbInstance.commitAndCloseSession();
-		
-		//assign the template to ident2
-		PortfolioStructureMap map = epFrontendManager.assignStructuredMapToUser(ident2, template, addedEntry, null, null, null);
-		assertNotNull(map);
-		dbInstance.commitAndCloseSession();
-		
-		//check if ident2 is owner of the map
-		assertTrue(epFrontendManager.isMapOwner(ident2, map.getOlatResource()));
-		//check if ident1 is not the owner of the map
-		assertFalse(epFrontendManager.isMapOwner(ident1, map.getOlatResource()));
-		//check if ident1 is owner of the template
-		assertTrue(epFrontendManager.isMapOwner(ident1, template.getOlatResource()));
-	}
-	
-	@Test
-	public void isTemplateInUse() {
-		//create a template
-		OLATResource resource = epStructureManager.createPortfolioMapTemplateResource();
-		//create a repository entry
-		Organisation defOrganisation = organisationService.getDefaultOrganisation();
-		RepositoryEntry addedEntry = repositoryService.create(ident1, null, "-", "Template in user", "Template in use", resource,
-				RepositoryEntryStatusEnum.preparation, defOrganisation);
-		//create the template owned by ident1
-		PortfolioStructureMap template = epStructureManager.createAndPersistPortfolioMapTemplateFromEntry(ident1, addedEntry);
-		dbInstance.commitAndCloseSession();
-		//add a page to it
-		PortfolioStructure page1 = epFrontendManager.createAndPersistPortfolioPage(template, "Page title", "Page description");
-		assertNotNull(page1);
-		dbInstance.commitAndCloseSession();
-		
-		//check: the template is not in use
-		assertFalse(epFrontendManager.isTemplateInUse(template, null, null, null));
-		
-		//use the template: assign the template to ident2
-		PortfolioStructureMap map = epFrontendManager.assignStructuredMapToUser(ident2, template, addedEntry, null, null, null);
-		assertNotNull(map);
-		dbInstance.commitAndCloseSession();
-		
-		//check: the template is  in use
-		assertTrue(epFrontendManager.isTemplateInUse(template, null, null, null));
-	}
-	
-	@Test
-	public void saveMapPolicy() {
-		//create a map
-		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioDefaultMap(ident1, "Policies", "Description");
-		PortfolioStructure page1 = epFrontendManager.createAndPersistPortfolioPage(map, "Page policies", "Page description");
-		assertNotNull(page1);
-		dbInstance.commitAndCloseSession();
-
-		//policies are empty
-		List<EPMapPolicy> policies = epFrontendManager.getMapPolicies(map);
-		assertEquals(0, policies.size());//owner policy
-		
-		//save a user policy
-		EPMapPolicy userPolicy = new EPMapPolicy();
-		userPolicy.setType(Type.user);
-		userPolicy.getIdentities().add(ident2);
-		epFrontendManager.updateMapPolicies(map, Collections.singletonList(userPolicy));
-		dbInstance.commitAndCloseSession();
-		
-		//one policy
-		List<EPMapPolicy> policies1 = epFrontendManager.getMapPolicies(map);
-		assertEquals(1, policies1.size());
-
-		//check visiblity (is owner)
-		assertTrue(epFrontendManager.isMapVisible(ident1, map.getOlatResource()));
-		//check visibility (is in policy)
-		assertTrue(epFrontendManager.isMapVisible(ident2, map.getOlatResource()));
-		//check not visible (not in policy)
-		assertFalse(epFrontendManager.isMapVisible(ident3, map.getOlatResource()));
-	}
-	
-	@Test
-	public void allUserPolicies() {
-		//create a map
-		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioDefaultMap(ident1, "Policies", "Description");
-		PortfolioStructure page1 = epFrontendManager.createAndPersistPortfolioPage(map, "Page policies", "Page description");
-		assertNotNull(page1);
-		dbInstance.commitAndCloseSession();
-		
-		//check visiblity (is owner)
-		assertTrue(epFrontendManager.isMapVisible(ident1, map.getOlatResource()));
-		//check visibility (no policy)
-		assertFalse(epFrontendManager.isMapVisible(ident2, map.getOlatResource()));
-		//check not visible (no policy)
-		assertFalse(epFrontendManager.isMapVisible(ident3, map.getOlatResource()));
-
-		//add all user policy
-		EPMapPolicy userPolicy = new EPMapPolicy();
-		userPolicy.setType(Type.allusers);
-		epFrontendManager.updateMapPolicies(map, Collections.singletonList(userPolicy));
-		dbInstance.commitAndCloseSession();
-		
-		//one policy
-		List<EPMapPolicy> policies1 = epFrontendManager.getMapPolicies(map);
-		assertEquals(1, policies1.size());
-
-		//check visiblity (is owner)
-		assertTrue(epFrontendManager.isMapVisible(ident1, map.getOlatResource()));
-		//check visibility (is user)
-		assertTrue(epFrontendManager.isMapVisible(ident2, map.getOlatResource()));
-		//check not visible (is user)
-		assertTrue(epFrontendManager.isMapVisible(ident3, map.getOlatResource()));
-	}
-	
-	@Test
-	public void allMapPolicies() {
-		//create a map
-		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioDefaultMap(ident1, "Policies", "Description");
-		PortfolioStructure page1 = epFrontendManager.createAndPersistPortfolioPage(map, "Page policies", "Page description");
-		assertNotNull(page1);
-		dbInstance.commitAndCloseSession();
-		
-		//save a list of policies
-		List<EPMapPolicy> policies = new ArrayList<>();
-		
-		//user policy
-		EPMapPolicy userPolicy = new EPMapPolicy();
-		userPolicy.setType(Type.user);
-		userPolicy.getIdentities().add(ident2);
-		userPolicy.getIdentities().add(ident3);
-		policies.add(userPolicy);
-		
-		//invitation
-		Invitation invitation = invitationDao.createAndPersistInvitation();
-		invitation.setFirstName("John");
-		invitation.setLastName("Doe");
-		invitation.setMail("john@doe.ch");
-		EPMapPolicy invitationPolicy = new EPMapPolicy();
-		invitationPolicy.setType(Type.invitation);
-		invitationPolicy.setInvitation(invitation);
-		policies.add(invitationPolicy);
-	
-		epFrontendManager.updateMapPolicies(map, policies);
-		dbInstance.commitAndCloseSession();
-		
-		//check visiblity (is owner)
-		assertTrue(epFrontendManager.isMapVisible(ident1, map.getOlatResource()));
-		//check visibility (is in policy)
-		assertTrue(epFrontendManager.isMapVisible(ident2, map.getOlatResource()));
-		//check visible (is in policy)
-		assertTrue(epFrontendManager.isMapVisible(ident3, map.getOlatResource()));
-		
-		//retrieved policies
-		List<EPMapPolicy> savedPolicies = epFrontendManager.getMapPolicies(map);
-		assertTrue(!savedPolicies.isEmpty());
-	}
-	
-	@Test
-	public void removePolicyWithInvitation() {
-	//create a map
-		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioDefaultMap(ident1, "Remove policies", "Description");
-		PortfolioStructure page1 = epFrontendManager.createAndPersistPortfolioPage(map, "Page policies", "Page description");
-		assertNotNull(page1);
-		dbInstance.commitAndCloseSession();
-		
-		//save a list of policies
-		List<EPMapPolicy> policies = new ArrayList<>();
-		//invitation
-		Invitation invitation = invitationDao.createAndPersistInvitation();
-		invitation.setFirstName("John");
-		invitation.setLastName("Doe");
-		invitation.setMail("john2@doe.ch");
-		EPMapPolicy invitationPolicy = new EPMapPolicy();
-		invitationPolicy.setType(Type.invitation);
-		invitationPolicy.setInvitation(invitation);
-		policies.add(invitationPolicy);
-		map = epFrontendManager.updateMapPolicies(map, policies);
-		dbInstance.commitAndCloseSession();
-		
-		//remove the policy
-		policies.clear();
-		epFrontendManager.updateMapPolicies(map, policies);
-		dbInstance.commitAndCloseSession();
-
-		//check if the policies and the invitation are deleted
-		List<EPMapPolicy> deletedPolicies = epFrontendManager.getMapPolicies(map);
-		assertNotNull(deletedPolicies);
-		assertTrue(deletedPolicies.isEmpty());
-	}
-	
-	@Test
-	public void mergeTwoUserPolicies() {
-		//create a map
-		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioDefaultMap(ident1, "Remove policies", "Description");
-		PortfolioStructure page1 = epFrontendManager.createAndPersistPortfolioPage(map, "Page policies", "Page description");
-		assertNotNull(page1);
-		dbInstance.commitAndCloseSession();
-
-		//save a list of policies
-		List<EPMapPolicy> policies = new ArrayList<>();
-		//first user policy
-		EPMapPolicy userPolicy1 = new EPMapPolicy();
-		userPolicy1.setType(Type.user);
-		userPolicy1.getIdentities().add(ident2);
-		userPolicy1.getIdentities().add(ident3);
-		policies.add(userPolicy1);
-		//second user policy
-		EPMapPolicy userPolicy2 = new EPMapPolicy();
-		userPolicy2.setType(Type.user);
-		userPolicy2.getIdentities().add(ident1);
-		policies.add(userPolicy2);
-		epFrontendManager.updateMapPolicies(map, policies);
-		dbInstance.commitAndCloseSession();
-		
-		
-		//check if the policies are correctly merged
-		List<EPMapPolicy> mergedPolicies = epFrontendManager.getMapPolicies(map);
-		assertNotNull(mergedPolicies);
-		assertEquals(1, mergedPolicies.size());
-		
-		EPMapPolicy mergedPolicy = mergedPolicies.get(0);
-		List<Identity> identities = mergedPolicy.getIdentities();
-		assertEquals(3, identities.size());
-		
-		int count1, count2, count3;
-		count1 = count2 = count3 = 0;
-		for(Identity identity:identities) {
-			if(identity.equalsByPersistableKey(ident1)) {
-				count1++;
-			} else if(identity.equalsByPersistableKey(ident2)) {
-				count2++;
-			} else if(identity.equalsByPersistableKey(ident3)) {
-				count3++;
-			}
-		}
-		assertEquals(1, count1);
-		assertEquals(1, count2);
-		assertEquals(1, count3);
-	}
-	
-	/**
-	 * Create a map with a page and an artefact. Delete it.
-	 */
-	@Test
-	public void deleteMap_pageAndArtefact() {
-		Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("frtuse-4");
-		
-		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioDefaultMap(id, "Delete map", "Description");
-		PortfolioStructure page = epFrontendManager.createAndPersistPortfolioPage(map, "Page while be deleted", "Page description");
-		assertNotNull(page);
-		dbInstance.commitAndCloseSession();
-		//create artefact
-		AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(id, "Forum");
-		dbInstance.commitAndCloseSession();		
-		//create the link
-		epFrontendManager.addArtefactToStructure(id, artefact, page);
-		dbInstance.commitAndCloseSession();
-		
-		//reload and check
-		PortfolioStructure reloadedMap = epFrontendManager.loadPortfolioStructureByKey(map.getKey());
-		Assert.assertNotNull(reloadedMap);
-		Assert.assertEquals(map, reloadedMap);
-		List<PortfolioStructure> reloadedPages = epFrontendManager.loadStructureChildren(reloadedMap);
-		Assert.assertNotNull(reloadedPages);
-		Assert.assertEquals(1, reloadedPages.size());
-		PortfolioStructure reloadedPage = reloadedPages.get(0);
-		Assert.assertEquals(page, reloadedPage);
-		List<AbstractArtefact> reloadedArtefacts = epFrontendManager.getArtefacts(reloadedPage);
-		Assert.assertNotNull(reloadedArtefacts);
-		Assert.assertEquals(1, reloadedArtefacts.size());
-		AbstractArtefact reloadedArtefact = reloadedArtefacts.get(0);
-		Assert.assertEquals(artefact, reloadedArtefact);
-		dbInstance.commitAndCloseSession();
-		
-		//delete the map
-		epFrontendManager.deletePortfolioStructure(reloadedMap);
-		dbInstance.commit();
-		
-		//what is deleted?
-		AbstractArtefact notDeletedArtefact = epFrontendManager.loadArtefactByKey(artefact.getKey());
-		Assert.assertNotNull(notDeletedArtefact);
-		PortfolioStructure deletedMap = epFrontendManager.loadPortfolioStructureByKey(map.getKey());
-		Assert.assertNull(deletedMap);
-		PortfolioStructure deletedPage = epFrontendManager.loadPortfolioStructureByKey(page.getKey());
-		Assert.assertNull(deletedPage);
-	}
-	
-	/**
-	 * Delete a map with policies
-	 */
-	@Test
-	public void deleteMap_pageAndPolicy() {
-		Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("frtuse-5");
-		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioDefaultMap(id, "Delete map", "Description");
-		PortfolioStructure page = epFrontendManager.createAndPersistPortfolioPage(map, "Page while be deleted", "Page description");
-		AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(id, "Forum");
-		epFrontendManager.addArtefactToStructure(id, artefact, page);
-		dbInstance.commitAndCloseSession();
-		//add policy
-		List<EPMapPolicy> policies = new ArrayList<>();
-		EPMapPolicy userPolicy = new EPMapPolicy();
-		userPolicy.setType(Type.user);
-		userPolicy.getIdentities().add(ident2);
-		userPolicy.getIdentities().add(ident3);
-		policies.add(userPolicy);
-		epFrontendManager.updateMapPolicies(map, policies);
-		dbInstance.commitAndCloseSession();
-
-		//reload and check
-		PortfolioStructure reloadedMap = epFrontendManager.loadPortfolioStructureByKey(map.getKey());
-		Assert.assertNotNull(reloadedMap);
-		OLATResource reloadedResource = reloadedMap.getOlatResource();
-		Assert.assertNotNull(reloadedResource);		
-		Assert.assertEquals(map, reloadedMap);
-		boolean shared = epFrontendManager.isMapShared(reloadedResource);
-		Assert.assertTrue(shared);
-		boolean visibleToIdent2 = epFrontendManager.isMapVisible(ident2, reloadedResource);
-		Assert.assertTrue(visibleToIdent2);
-		
-		//delete the map
-		epFrontendManager.deletePortfolioStructure(reloadedMap);
-		dbInstance.commit();
-		boolean deletedShared = epFrontendManager.isMapShared(reloadedResource);
-		Assert.assertFalse(deletedShared);
-		boolean deletedVisibleToIdent2 = epFrontendManager.isMapVisible(ident2, reloadedResource);
-		Assert.assertFalse(deletedVisibleToIdent2);
-	}
-	
-	/**
-	 * Delete a portfolio template
-	 */
-	@Test
-	public void deleteMap_template() {
-		Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("frtuse-6");
-		//save parent and 20 children
-		
-		OLATResource resource = epStructureManager.createPortfolioMapTemplateResource();
-		Organisation defOrganisation = organisationService.getDefaultOrganisation();
-		RepositoryEntry re = repositoryService.create(id, null, "", "Template to delete", "", resource,
-				RepositoryEntryStatusEnum.preparation, defOrganisation);
-		PortfolioStructureMap template = epStructureManager.createAndPersistPortfolioMapTemplateFromEntry(id, re);
-		PortfolioStructure page = epFrontendManager.createAndPersistPortfolioPage(template, "Page while be deleted", "Page description");
-		dbInstance.commitAndCloseSession();
-		
-		//reload and check
-		PortfolioStructure reloadedTemplate = epFrontendManager.loadPortfolioStructureByKey(template.getKey());
-		Assert.assertNotNull(reloadedTemplate);
-		OLATResource reloadedResource = reloadedTemplate.getOlatResource();
-		Assert.assertNotNull(reloadedResource);		
-		Assert.assertEquals(template, reloadedTemplate);
-		List<PortfolioStructure> reloadedPages = epFrontendManager.loadStructureChildren(reloadedTemplate);
-		Assert.assertNotNull(reloadedPages);
-		Assert.assertEquals(1, reloadedPages.size());
-		Assert.assertEquals(page, reloadedPages.get(0));
-
-		//delete
-		RepositoryEntry reloadedRe = repositoryService.loadByKey(re.getKey());
-		Roles roles = Roles.administratorRoles();
-		repositoryService.deletePermanently(reloadedRe, id, roles, Locale.GERMAN);
-		dbInstance.commit();	
-	}
-}
diff --git a/src/test/java/org/olat/portfolio/EPImportTest.java b/src/test/java/org/olat/portfolio/EPImportTest.java
deleted file mode 100644
index cfd1763bc01b41c773c08670d753de34f8369e27..0000000000000000000000000000000000000000
--- a/src/test/java/org/olat/portfolio/EPImportTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio;
-
-import static org.junit.Assert.assertNotNull;
-
-import java.io.File;
-import java.net.URISyntaxException;
-import java.net.URL;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.olat.core.commons.persistence.DB;
-import org.olat.core.id.Identity;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.manager.EPStructureManager;
-import org.olat.portfolio.manager.EPStructureManagerTest;
-import org.olat.portfolio.manager.EPXStreamHandler;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryManager;
-import org.olat.repository.RepositoryService;
-import org.olat.resource.OLATResource;
-import org.olat.resource.OLATResourceManager;
-import org.olat.test.JunitTestHelper;
-import org.olat.test.OlatTestCase;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Test different imports
- * 
- * 
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class EPImportTest extends OlatTestCase {
-
-	@Autowired
-	private DB dbInstance;
-	@Autowired
-	private OLATResourceManager resourceManager;
-	@Autowired
-	private EPFrontendManager epFrontendManager;
-	@Autowired
-	private EPStructureManager epStructureManager;
-	@Autowired
-	private RepositoryManager repositoryManager;
-	@Autowired
-	private RepositoryService repositoryService;
-	
-	
-	@Test
-	public void testImportFromOpenOLAT_81_Hibernate3() throws URISyntaxException  {
-		URL mapUrl = EPImportTest.class.getResource("map_81.xml.zip");
-		assertNotNull(mapUrl);
-		File mapFile = new File(mapUrl.toURI());
-		PortfolioStructure rootStructure = EPXStreamHandler.getAsObject(mapFile, false);
-		OLATResource resource = epStructureManager.createPortfolioMapTemplateResource();
-	
-		//import the map
-		PortfolioStructureMap importedMap = epFrontendManager.importPortfolioMapTemplate(rootStructure, resource);
-		Assert.assertNotNull(importedMap);
-		dbInstance.commitAndCloseSession();
-	}
-	
-	@Test
-	public void testCopy() throws URISyntaxException  {
-		Identity ident = JunitTestHelper.createAndPersistIdentityAsRndUser("ImPort-1");
-		//save the map
-		PortfolioStructureMap map = EPStructureManagerTest.createPortfolioMapTemplate(ident, "import-map-1", "map-template");
-		epStructureManager.savePortfolioStructure(map);
-		dbInstance.commitAndCloseSession();
-		
-		//check that the author are in the
-		OLATResource resource = resourceManager.findResourceable(map.getResourceableId(), map.getResourceableTypeName());
-		RepositoryEntry re = repositoryManager.lookupRepositoryEntry(resource, false);
-		Assert.assertNotNull(re);
-		dbInstance.commitAndCloseSession();
-
-		RepositoryEntry copy = repositoryService.copy(re, ident, "ImPort - (Copy 1)");
-		Assert.assertNotNull(copy);
-		dbInstance.commitAndCloseSession();
-		
-		PortfolioStructure copiedMap = epFrontendManager.loadPortfolioStructure(copy.getOlatResource());
-		Assert.assertNotNull(copiedMap);
-	}
-}
diff --git a/src/test/java/org/olat/portfolio/EPPerformanceTest.java b/src/test/java/org/olat/portfolio/EPPerformanceTest.java
deleted file mode 100644
index 3285b3662192bb5473ee7491fbd9828b8487ca2a..0000000000000000000000000000000000000000
--- a/src/test/java/org/olat/portfolio/EPPerformanceTest.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.UUID;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.olat.core.commons.persistence.DB;
-import org.olat.core.commons.persistence.DBFactory;
-import org.olat.core.id.Identity;
-import org.olat.core.id.Roles;
-import org.olat.modules.fo.portfolio.ForumArtefact;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.manager.EPMapPolicy;
-import org.olat.portfolio.manager.EPMapPolicy.Type;
-import org.olat.portfolio.model.EPFilterSettings;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.ElementType;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.test.JunitTestHelper;
-import org.olat.test.OlatTestCase;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description:<br>
- * do queries to check for performance bottlenecks: 
- * - Create a lot of artefacts, do load and searches 
- * - create a lot of huge maps, publish them for all users, do searches
- * 
- * <P>
- * Initial Date: 26.01.2011 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
- */
-public class EPPerformanceTest extends OlatTestCase {
-
-	private static final String LOREM_STRING_512 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean id sapien ac justo congue mollis. " +
-			"Sed pulvinar magna nec nulla gravida eu ullamcorper dolor mattis. Phasellus quis neque dolor. Aliquam non odio ligula. Integer purus nisi, " +
-			"cursus accumsan ultricies eget, gravida sed eros. Maecenas malesuada commodo nisl, sit amet aliquam elit dapibus ut. Duis ultricies nibh at " +
-			"felis commodo a rutrum ipsum tristique. Nulla facilisi. Vivamus convallis faucibus augue quis ultrices. Sed quam orci, dignissim metus. ";
-	private static final List<String> tagList1 = new ArrayList<>(Arrays.asList("Haus", "baum", "Wald"));
-	private static final List<String> tagList2 = new ArrayList<>(Arrays.asList("Schule", "Lehrer"));
-	
-
-	@Autowired
-	private DB dbInstance;
-
-	@Autowired
-	private EPFrontendManager epFrontendManager;
-	
-	private static Identity ident1, ident2;
-	private static boolean isInitialized = false;
-
-	@Before
-	public void setUp() {
-		if (!isInitialized) {
-			ident1 = JunitTestHelper.createAndPersistIdentityAsUser(UUID.randomUUID().toString());
-			ident2 = JunitTestHelper.createAndPersistIdentityAsUser(UUID.randomUUID().toString());
-		}
-	}
-
-	@After
-	public void tearDown() {
-		deleteMaps();
-		dbInstance.commitAndCloseSession();
-	}
-
-	@Test
-	public void testManagers() {
-		assertNotNull(dbInstance);
-		assertNotNull(epFrontendManager);
-	}
-	
-	@Test
-	public void testRealisticArtefactAmount(){
-		internalTestManyArtefactCreation(200);
-	}
-		
-	private void internalTestManyArtefactCreation(int artefactAmount){
-		long start = System.currentTimeMillis();
-		Runtime r = Runtime.getRuntime();
-		for (int j = 0; j < artefactAmount; j++) {
-			AbstractArtefact artefact = createAndFillArtefact(j);
-//			 tag the artefacts
-			if (j %2 == 0) {
-				epFrontendManager.setArtefactTags(ident1, artefact, tagList1);
-			} else {
-				epFrontendManager.setArtefactTags(ident1, artefact, tagList2);
-			}
-			
-			if (j % 10 == 0) {
-				DBFactory.getInstance().closeSession();
-			}
-			if (j % 100 == 0){
-				logger.info("created another 100 artefacts! -> " + j);
-				logger.info("  free memory: " + r.freeMemory());
-			}
-		} // for
-		
-		
-		// load the whole artefact list
-		long now = System.currentTimeMillis();
-		logger.info("created " + artefactAmount + " artefacts in: " + (now - start) + " ms.");
-		start = System.currentTimeMillis();
-		List<AbstractArtefact> artList = epFrontendManager.getArtefactPoolForUser(ident1);
-		now = System.currentTimeMillis();
-		logger.info("querying all of them took: " + (now - start) + " ms.");
-		assertEquals(artList.size(), artefactAmount);
-		
-		// filter artefacts by tags
-		EPFilterSettings filterSettings = new EPFilterSettings();
-		filterSettings.setTagFilter(new ArrayList<>(Arrays.asList("Schule")));
-		start = System.currentTimeMillis();
-		artList = epFrontendManager.filterArtefactsByFilterSettings(filterSettings, ident1, Roles.userRoles(), Locale.ENGLISH);
-		now = System.currentTimeMillis();
-		logger.info("filter artefacts by one tag took: " + (now - start) + " ms.");
-		assertEquals(artList.size(), artefactAmount/2);
-		
-		filterSettings.setTagFilter(tagList1);
-		start = System.currentTimeMillis();
-		artList = epFrontendManager.filterArtefactsByFilterSettings(filterSettings, ident1, Roles.userRoles(), Locale.ENGLISH);
-		now = System.currentTimeMillis();
-		logger.info("filter artefacts by tagList1 took: " + (now - start) + " ms.");
-		assertEquals(artList.size(), artefactAmount/2);
-		
-	}
-
-	/**
-	 * create a heavy filled artefact!
-	 * @param j number of artefact
-	 * @return
-	 */
-	private AbstractArtefact createAndFillArtefact(int j) {
-		AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(ident1, ForumArtefact.FORUM_ARTEFACT_TYPE);
-		artefact.setFulltextContent(getLoremStringFactor512(2));
-		artefact.setReflexion(getLoremStringFactor512(3));
-		artefact.setDescription(LOREM_STRING_512);
-		artefact.setTitle("Test Artefact number" + j);
-		artefact.setSignature(60);
-		artefact.setCollectionDate(new Date());
-		artefact.setBusinessPath("a dummy businessPath entry");
-		artefact.setSource("some Forum was my source");
-		return epFrontendManager.updateArtefact(artefact);
-	}
-	
-	@Test
-	public void testMaps500(){
-		internalTestCreateManyMaps(500);
-	}
-	
-	private void deleteMaps(){
-		List<PortfolioStructure> publicMaps = epFrontendManager.getStructureElementsFromOthers(ident2, null, ElementType.STRUCTURED_MAP, ElementType.DEFAULT_MAP);
-		int i=1;
-		for (PortfolioStructure portfolioStructure : publicMaps) {
-			i++;
-			epFrontendManager.deletePortfolioStructure(portfolioStructure);
-			if (i % 100 == 0) {
-				DBFactory.getInstance().closeSession();
-			}
-		}
-	}
-	
-	private void internalTestCreateManyMaps(int mapAmount){		
-		long start = System.currentTimeMillis();
-		// prepare some artefacts to link to maps later
-		ArrayList<AbstractArtefact> artefacts = new ArrayList<>(10);
-		for (int i = 1; i < 11; i++) {
-			artefacts.add(createAndFillArtefact(i));
-		}
-		
-		for (int k = 1; k < mapAmount; k++) {
-			PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioDefaultMap(ident1, "a test map number " + k, LOREM_STRING_512);
-			// attach sites and structures to it
-			ArrayList<PortfolioStructure> structs = new ArrayList<>();
-			PortfolioStructure page1 = epFrontendManager.createAndPersistPortfolioPage(map, "test page1 for map " + k, LOREM_STRING_512);
-			structs.add(page1);
-			PortfolioStructure struct11 = epFrontendManager.createAndPersistPortfolioStructureElement(page1, "struct1 in page1 for map" + k, LOREM_STRING_512);
-			structs.add(struct11);
-			PortfolioStructure struct12 = epFrontendManager.createAndPersistPortfolioStructureElement(page1, "struct2 in page1 for map" + k, LOREM_STRING_512);
-			structs.add(struct12);
-			PortfolioStructure page2 = epFrontendManager.createAndPersistPortfolioPage(map, "test page2 for map " + k, LOREM_STRING_512);
-			structs.add(page2);
-			PortfolioStructure struct21 = epFrontendManager.createAndPersistPortfolioStructureElement(page2, "struct1 in page2 for map" + k, LOREM_STRING_512);
-			structs.add(struct21);
-			PortfolioStructure struct22 = epFrontendManager.createAndPersistPortfolioStructureElement(page2, "struct2 in page2 for map" + k, LOREM_STRING_512);	
-			structs.add(struct22);
-			
-			// attach different artefacts to several places in map
-			int l = 1;
-			for (Iterator<PortfolioStructure> iterator = structs.iterator(); iterator.hasNext();) {
-				PortfolioStructure portfolioStructure = iterator.next();
-				epFrontendManager.addArtefactToStructure(ident1, artefacts.get(l), portfolioStructure);
-				// add two artefacts 
-				if (l % 2 == 0){
-					epFrontendManager.addArtefactToStructure(ident1, artefacts.get(l+1), portfolioStructure);
-				}
-				l++;
-			} // for attach
-		
-			// share the map with all users
-			EPMapPolicy userPolicy = new EPMapPolicy();
-			userPolicy.setType(Type.allusers);
-			epFrontendManager.updateMapPolicies(map, Collections.singletonList(userPolicy));
-			dbInstance.commitAndCloseSession();
-			
-		} // for maps
-		long now = System.currentTimeMillis();
-		logger.info("created " + mapAmount + " maps, attached artefacts and shared maps to public in: " + (now - start) + " ms.");
-
-		// load all maps
-		start = System.currentTimeMillis();
-		List<PortfolioStructure> publicMaps = epFrontendManager.getStructureElementsFromOthers(ident2, null, ElementType.STRUCTURED_MAP, ElementType.DEFAULT_MAP);
-		now = System.currentTimeMillis();
-		logger.info("got all public maps in: " + (now - start) + " ms.");
-		
-		// simulate queries done in EPMultipleMapController for all public maps:
-		start = System.currentTimeMillis();
-		long sharedQ = 0;
-		long countArtefactQ = 0;
-		long countChildQ = 0;
-		long qstart = 0;
-		int j = 0;
-		Runtime r = Runtime.getRuntime();
-		for (PortfolioStructure map : publicMaps) {
-			j++;
-			qstart = System.currentTimeMillis();
-			epFrontendManager.isMapShared((PortfolioStructureMap) map);
-			sharedQ += System.currentTimeMillis() - qstart;
-			qstart = System.currentTimeMillis();
-			epFrontendManager.countArtefactsInMap((PortfolioStructureMap) map);
-			countArtefactQ += System.currentTimeMillis() - qstart;
-			// lookup structured maps: if received from a template, would also do a lookup on repository entry!
-//			EPTargetResource resource = structMap.getTargetResource();
-//			RepositoryEntry repoEntry = RepositoryManager.getInstance().lookupRepositoryEntry(resource.getOLATResourceable(), false);
-			qstart = System.currentTimeMillis();
-			epFrontendManager.countStructureChildren(map);
-			countChildQ += System.currentTimeMillis() - qstart;
-			
-			if (j % 100 == 0){
-				showStatsForStep(j, start, sharedQ, countArtefactQ, countChildQ, r);		
-			}
-		}
-		logger.info("============= get overall stats ==============");
-		showStatsForStep(mapAmount, start, sharedQ, countArtefactQ, countChildQ, r);		
-	}
-
-	/**
-	 * @param mapAmount
-	 * @param start
-	 * @param sharedQ
-	 * @param countArtefactQ
-	 * @param countChildQ
-	 */
-	private void showStatsForStep(int step, long start, long sharedQ, long countArtefactQ, long countChildQ, Runtime r) {
-		long now;
-		now = System.currentTimeMillis();
-		logger.info("---------------------------------------------");
-		logger.info("show actual query stats for step with " + step + " maps processed.");
-		logger.info(" free memory: " + r.freeMemory());
-		logger.info(" simulated queries to show all public maps, took: " + (now - start) + " ms so far.");
-		logger.info("  Q: share state average:			" + (sharedQ / step) 				+ "		total: " + sharedQ);
-		logger.info("  Q: artefact count average:		" + (countArtefactQ / step) + "		total: " + countArtefactQ);
-		logger.info("  Q: child count average: 		" + (countChildQ / step) 		+ "		total: " + countChildQ);		
-	}
-	
-	
-	
-	private String getLoremStringFactor512(int factor){
-		StringBuffer sb = new StringBuffer();
-		for (int i = 0; i < factor; i++) {
-			sb.append(LOREM_STRING_512);
-		}
-		return sb.toString();
-	}
-	
-}
diff --git a/src/test/java/org/olat/portfolio/EPStructureToArtefactTest.java b/src/test/java/org/olat/portfolio/EPStructureToArtefactTest.java
deleted file mode 100644
index 8decf76e88b1df067dc7b6242dd779ad719812ee..0000000000000000000000000000000000000000
--- a/src/test/java/org/olat/portfolio/EPStructureToArtefactTest.java
+++ /dev/null
@@ -1,414 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.portfolio;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.olat.core.commons.persistence.DB;
-import org.olat.core.id.Identity;
-import org.olat.modules.fo.portfolio.ForumArtefact;
-import org.olat.portfolio.manager.EPFrontendManager;
-import org.olat.portfolio.manager.EPStructureManager;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.restriction.RestrictionsConstants;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.test.JunitTestHelper;
-import org.olat.test.OlatTestCase;
-import org.springframework.beans.factory.annotation.Autowired;
-
-
-/**
- * 
- * Description:<br>
- * Integration test for the link between structure element and artefact on the DB
- * 
- * <P>
- * Initial Date:  24 jun. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, www.frentix.com
- */
-public class EPStructureToArtefactTest extends OlatTestCase {
-
-	private static Identity ident1;
-	private static boolean isInitialized = false;
-	
-	@Autowired
-	private DB dbInstance;
-	
-	@Autowired
-	private EPStructureManager epStructureManager;
-	
-	@Autowired
-	private EPFrontendManager epFrontendManager;
-	
-	@Before
-	public void setUp() {
-		if(!isInitialized) {
-			ident1 = JunitTestHelper.createAndPersistIdentityAsUser("artuse-1");
-		}
-	}
-	
-	@Test
-	public void createStructureToArtefactLink() {
-		//create structure element
-		PortfolioStructure structure = epFrontendManager.createAndPersistPortfolioStructureElement(null, "struc-to-art-el", "structure-to-artefact-element");
-
-		//create artefact
-		AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		dbInstance.commitAndCloseSession();
-		
-		//test if all is ok
-		assertNotNull(structure);
-		assertNotNull(artefact);
-		assertTrue(artefact instanceof ForumArtefact);
-		
-		//create the link
-		epFrontendManager.addArtefactToStructure(ident1, artefact, structure);
-		dbInstance.commitAndCloseSession();
-		
-		//test if the link is persisted
-		List<AbstractArtefact> linkedArtfeacts = epFrontendManager.getArtefacts(structure);
-		assertNotNull(linkedArtfeacts);
-		assertEquals(1, linkedArtfeacts.size());
-		assertEquals(artefact.getKey(), linkedArtfeacts.get(0).getKey());
-	}
-	
-	@Test
-	public void addArtefactsToStructure() {
-		//create structure element
-		PortfolioStructure structure = epFrontendManager.createAndPersistPortfolioStructureElement(null, "struc-to-art-el", "structure-to-artefact-element");
-
-		//create artefact
-		AbstractArtefact artefact1 = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		AbstractArtefact artefact2 = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		AbstractArtefact artefact3 = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		epFrontendManager.addArtefactToStructure(ident1, artefact1, structure);
-		epFrontendManager.addArtefactToStructure(ident1, artefact2, structure);
-		epFrontendManager.addArtefactToStructure(ident1, artefact3, structure);
-		dbInstance.commitAndCloseSession();
-
-		//test if the link is persisted
-		List<AbstractArtefact> linkedArtfeacts = epFrontendManager.getArtefacts(structure);
-		assertNotNull(linkedArtfeacts);
-		assertEquals(3, linkedArtfeacts.size());
-		assertEquals(artefact1.getKey(), linkedArtfeacts.get(0).getKey());
-		assertEquals(artefact2.getKey(), linkedArtfeacts.get(1).getKey());
-		assertEquals(artefact3.getKey(), linkedArtfeacts.get(2).getKey());
-	}
-	
-	@Test
-	public void removeArtefactsToStructure() {
-		//create structure element
-		PortfolioStructure structure = epFrontendManager.createAndPersistPortfolioStructureElement(null, "struc-to-art-el", "structure-to-artefact-element");
-
-		//create artefact
-		AbstractArtefact artefact1 = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		AbstractArtefact artefact2 = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		AbstractArtefact artefact3 = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		epFrontendManager.addArtefactToStructure(ident1, artefact1, structure);
-		epFrontendManager.addArtefactToStructure(ident1, artefact2, structure);
-		epFrontendManager.addArtefactToStructure(ident1, artefact3, structure);
-		dbInstance.commitAndCloseSession();
-		
-		epFrontendManager.removeArtefactFromStructure(artefact2, structure);
-		dbInstance.commitAndCloseSession();
-
-		//test if the link is persisted
-		List<AbstractArtefact> linkedArtfeacts = epFrontendManager.getArtefacts(structure);
-		assertNotNull(linkedArtfeacts);
-		assertEquals(2, linkedArtfeacts.size());
-		assertEquals(artefact1.getKey(), linkedArtfeacts.get(0).getKey());
-		assertEquals(artefact3.getKey(), linkedArtfeacts.get(1).getKey());
-	}
-	
-	/**
-	 * Persist all properties and check them
-	 */
-	@Test
-	public void saveArtefact() {
-		//create artefact
-		Calendar cal = Calendar.getInstance();
-		cal.setTime(new Date());
-		cal.set(Calendar.MILLISECOND, 0);
-		Date collectionDate = cal.getTime();
-		
-		AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		artefact.setTitle("artefact-title");
-		artefact.setBusinessPath("business-path");
-		artefact.setCollectionDate(collectionDate);
-		artefact.setDescription("artefact-description");
-		artefact.setReflexion("artefact-reflexion");
-		artefact.setSignature(70);
-		artefact.setFulltextContent("fulltext-content");
-		artefact.setSource("artefact-source");
-		artefact = epFrontendManager.updateArtefact(artefact);
-		dbInstance.commitAndCloseSession();
-
-		//test if the link is persisted
-		AbstractArtefact retrievedArtefact = epFrontendManager.loadArtefactByKey(artefact.getKey());
-		assertNotNull(retrievedArtefact);
-		assertEquals(artefact.getKey(), retrievedArtefact.getKey());
-		assertEquals("artefact-title", retrievedArtefact.getTitle());
-		assertEquals("business-path", retrievedArtefact.getBusinessPath());
-		assertEquals("artefact-description", retrievedArtefact.getDescription());
-		assertEquals("artefact-reflexion", retrievedArtefact.getReflexion());
-		assertEquals(70, retrievedArtefact.getSignature());
-		assertEquals("fulltext-content", retrievedArtefact.getFulltextContent());
-		assertEquals("artefact-source", retrievedArtefact.getSource());
-		assertEquals(ident1.getKey(), retrievedArtefact.getAuthor().getKey());
-		
-		//check date
-		assertNotNull(retrievedArtefact.getCollectionDate());
-		Calendar cal1 = Calendar.getInstance();
-		cal1.setTime(collectionDate);
-		Calendar cal2 = Calendar.getInstance();
-		cal2.setTime(retrievedArtefact.getCollectionDate());
-		assertTrue(cal1.compareTo(cal2) == 0);
-	}
-	
-	@Test
-	public void testArtefactsPaging() {
-		//save parent and 20 children
-		PortfolioStructure structureEl = epFrontendManager.createAndPersistPortfolioStructureElement(null, "paged-structure-el", "paged-structure-element");
-		
-		List<AbstractArtefact> children = new ArrayList<>();
-		for(int i=0;i<20;i++) {
-			AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-			artefact.setTitle("paged-artefact-" + i);
-			artefact = epFrontendManager.updateArtefact(artefact);
-			epFrontendManager.addArtefactToStructure(ident1, artefact, structureEl);
-			children.add(artefact);
-		}
-		dbInstance.commitAndCloseSession();
-		
-		List<AbstractArtefact> childrenSubset = epStructureManager.getArtefacts(structureEl, 15, 10);
-		assertNotNull(childrenSubset);
-		assertEquals(5, childrenSubset.size());
-		assertEquals(children.get(15).getKey(), childrenSubset.get(0).getKey());
-		assertEquals(children.get(16).getKey(), childrenSubset.get(1).getKey());
-		assertEquals(children.get(17).getKey(), childrenSubset.get(2).getKey());
-		assertEquals(children.get(18).getKey(), childrenSubset.get(3).getKey());
-		assertEquals(children.get(19).getKey(), childrenSubset.get(4).getKey());
-	}
-	
-	@Test
-	public void moveUpArtefact() {
-		//save parent and 5 children
-		PortfolioStructure structureEl = epFrontendManager.createAndPersistPortfolioStructureElement(null, "move-up-structure-el-1", "move-up-structure-element");
-		
-		List<AbstractArtefact> children = new ArrayList<>();
-		for(int i=0;i<5;i++) {
-			AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-			artefact.setTitle("move-up-artefact-1-" + i);
-			artefact = epFrontendManager.updateArtefact(artefact);
-			epFrontendManager.addArtefactToStructure(ident1, artefact, structureEl);
-			children.add(artefact);
-		}
-		dbInstance.commitAndCloseSession();
-		
-		//move up the first place
-		epStructureManager.moveUp(structureEl, children.get(0));
-		dbInstance.commitAndCloseSession();
-		//check that all is the same
-		List<AbstractArtefact> persistedChildren1 = epFrontendManager.getArtefacts(structureEl);
-		assertNotNull(persistedChildren1);
-		assertEquals(5, persistedChildren1.size());
-		assertEquals(children.get(0).getKey(), persistedChildren1.get(0).getKey());
-		assertEquals(children.get(1).getKey(), persistedChildren1.get(1).getKey());
-		assertEquals(children.get(2).getKey(), persistedChildren1.get(2).getKey());
-		assertEquals(children.get(3).getKey(), persistedChildren1.get(3).getKey());
-		assertEquals(children.get(4).getKey(), persistedChildren1.get(4).getKey());
-		dbInstance.commitAndCloseSession();
-		
-		
-		//move the second to the first place
-		epStructureManager.moveUp(structureEl, children.get(1));
-		dbInstance.commitAndCloseSession();
-		//check that all is the same
-		List<AbstractArtefact> persistedChildren2 = epFrontendManager.getArtefacts(structureEl);
-		assertNotNull(persistedChildren2);
-		assertEquals(5, persistedChildren2.size());
-		assertEquals(children.get(1).getKey(), persistedChildren2.get(0).getKey());
-		assertEquals(children.get(0).getKey(), persistedChildren2.get(1).getKey());
-		assertEquals(children.get(2).getKey(), persistedChildren2.get(2).getKey());
-		assertEquals(children.get(3).getKey(), persistedChildren2.get(3).getKey());
-		assertEquals(children.get(4).getKey(), persistedChildren2.get(4).getKey());
-		dbInstance.commitAndCloseSession();
-		
-		
-		//move up the last
-		epStructureManager.moveUp(structureEl, children.get(4));
-		dbInstance.commitAndCloseSession();
-		//check that all is the same
-		List<AbstractArtefact> persistedChildren3 = epFrontendManager.getArtefacts(structureEl);
-		assertNotNull(persistedChildren3);
-		assertEquals(5, persistedChildren3.size());
-		assertEquals(children.get(1).getKey(), persistedChildren3.get(0).getKey());
-		assertEquals(children.get(0).getKey(), persistedChildren3.get(1).getKey());
-		assertEquals(children.get(2).getKey(), persistedChildren3.get(2).getKey());
-		assertEquals(children.get(4).getKey(), persistedChildren3.get(3).getKey());
-		assertEquals(children.get(3).getKey(), persistedChildren3.get(4).getKey());
-	}
-	
-	@Test
-	public void moveDownArtefact() {
-		//save parent and 5 children
-		PortfolioStructure structureEl = epFrontendManager.createAndPersistPortfolioStructureElement(null, "move-down-structure-el-1", "move-down-structure-element");
-		
-		List<AbstractArtefact> children = new ArrayList<>();
-		for(int i=0;i<5;i++) {
-			AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-			artefact.setTitle("move-down-artefact-1-" + i);
-			artefact = epFrontendManager.updateArtefact(artefact);
-			epFrontendManager.addArtefactToStructure(ident1, artefact, structureEl);
-			children.add(artefact);
-		}
-		dbInstance.commitAndCloseSession();
-		
-		//move down the last
-		epStructureManager.moveDown(structureEl, children.get(4));
-		dbInstance.commitAndCloseSession();
-		//check that all is the same
-		List<AbstractArtefact> persistedChildren1 = epFrontendManager.getArtefacts(structureEl);
-		assertNotNull(persistedChildren1);
-		assertEquals(5, persistedChildren1.size());
-		assertEquals(children.get(0).getKey(), persistedChildren1.get(0).getKey());
-		assertEquals(children.get(1).getKey(), persistedChildren1.get(1).getKey());
-		assertEquals(children.get(2).getKey(), persistedChildren1.get(2).getKey());
-		assertEquals(children.get(3).getKey(), persistedChildren1.get(3).getKey());
-		assertEquals(children.get(4).getKey(), persistedChildren1.get(4).getKey());
-		dbInstance.commitAndCloseSession();
-		
-		
-		//move to the last place
-		epStructureManager.moveDown(structureEl, children.get(3));
-		dbInstance.commitAndCloseSession();
-		//check that all is the same
-		List<AbstractArtefact> persistedChildren2 = epFrontendManager.getArtefacts(structureEl);
-		assertNotNull(persistedChildren2);
-		assertEquals(5, persistedChildren2.size());
-		assertEquals(children.get(0).getKey(), persistedChildren2.get(0).getKey());
-		assertEquals(children.get(1).getKey(), persistedChildren2.get(1).getKey());
-		assertEquals(children.get(2).getKey(), persistedChildren2.get(2).getKey());
-		assertEquals(children.get(4).getKey(), persistedChildren2.get(3).getKey());
-		assertEquals(children.get(3).getKey(), persistedChildren2.get(4).getKey());
-		dbInstance.commitAndCloseSession();
-		
-		
-		//move down the first
-		epStructureManager.moveDown(structureEl, children.get(0));
-		dbInstance.commitAndCloseSession();
-		//check that all is the same
-		List<AbstractArtefact> persistedChildren3 = epFrontendManager.getArtefacts(structureEl);
-		assertNotNull(persistedChildren3);
-		assertEquals(5, persistedChildren3.size());
-		assertEquals(children.get(1).getKey(), persistedChildren3.get(0).getKey());
-		assertEquals(children.get(0).getKey(), persistedChildren3.get(1).getKey());
-		assertEquals(children.get(2).getKey(), persistedChildren3.get(2).getKey());
-		assertEquals(children.get(4).getKey(), persistedChildren3.get(3).getKey());
-		assertEquals(children.get(3).getKey(), persistedChildren3.get(4).getKey());
-	}
-	
-	@Test
-	public void collectRestrictionTestByAdding() {
-		PortfolioStructure structureEl = epFrontendManager.createAndPersistPortfolioStructureElement(null, "move-down-structure-el-1", "move-down-structure-element");
-		epStructureManager.addCollectRestriction(structureEl, ForumArtefact.FORUM_ARTEFACT_TYPE, RestrictionsConstants.MAX, 2);
-		epStructureManager.savePortfolioStructure(structureEl);
-		dbInstance.commitAndCloseSession();
-		
-		//check collect restriction
-		AbstractArtefact artefact1 = epFrontendManager.createAndPersistArtefact(ident1, ForumArtefact.FORUM_ARTEFACT_TYPE);
-		artefact1.setTitle("collect-restriction-1");
-		assertTrue(epFrontendManager.addArtefactToStructure(ident1, artefact1, structureEl));
-		
-		AbstractArtefact artefact2 = epFrontendManager.createAndPersistArtefact(ident1, "bc");
-		artefact2.setTitle("collect-restriction-2");
-		assertFalse(epFrontendManager.addArtefactToStructure(ident1, artefact2, structureEl));
-		
-		AbstractArtefact artefact3 = epFrontendManager.createAndPersistArtefact(ident1, ForumArtefact.FORUM_ARTEFACT_TYPE);
-		artefact3.setTitle("collect-restriction-3");
-		assertTrue(epFrontendManager.addArtefactToStructure(ident1, artefact3, structureEl));
-		
-		AbstractArtefact artefact4 = epFrontendManager.createAndPersistArtefact(ident1, ForumArtefact.FORUM_ARTEFACT_TYPE);
-		artefact4.setTitle("collect-restriction-4");
-		assertFalse(epFrontendManager.addArtefactToStructure(ident1, artefact4, structureEl));
-		dbInstance.commitAndCloseSession();
-		
-		//check if the artefacts are really what we want
-		List<AbstractArtefact> retrievedArtefacts = epFrontendManager.getArtefacts(structureEl);
-		assertNotNull(retrievedArtefacts);
-		assertEquals(2, retrievedArtefacts.size());
-		
-		//2 forums artefact, is ok
-		assertTrue(epFrontendManager.checkCollectRestriction(structureEl));
-	}
-	
-	@Test
-	public void collectRestrictionTestAfterMin() {
-		PortfolioStructure structureEl = epFrontendManager.createAndPersistPortfolioStructureElement(null, "move-down-structure-el-1", "move-down-structure-element");
-		epStructureManager.addCollectRestriction(structureEl, ForumArtefact.FORUM_ARTEFACT_TYPE, RestrictionsConstants.MIN, 2);
-		epStructureManager.savePortfolioStructure(structureEl);
-		dbInstance.commitAndCloseSession();
-		
-		//try to add some artefacts
-		AbstractArtefact artefact1 = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		artefact1.setTitle("collect-restriction-1");
-		assertTrue(epFrontendManager.addArtefactToStructure(ident1, artefact1, structureEl));
-		
-		AbstractArtefact artefact2 = epFrontendManager.createAndPersistArtefact(ident1, "bc");
-		artefact2.setTitle("collect-restriction-2");
-		assertFalse(epFrontendManager.addArtefactToStructure(ident1, artefact2, structureEl));
-		dbInstance.commitAndCloseSession();
-		
-		//check if the structure element is not ok, need two artefacts, there is only one
-		assertFalse(epFrontendManager.checkCollectRestriction(structureEl));
-	}
-	
-	@Test
-	public void collectRestrictionTestAfterMax() {
-		PortfolioStructure structureEl = epFrontendManager.createAndPersistPortfolioStructureElement(null, "move-down-structure-el-1", "move-down-structure-element");
-		epStructureManager.addCollectRestriction(structureEl, ForumArtefact.FORUM_ARTEFACT_TYPE, RestrictionsConstants.MAX, 2);
-		epStructureManager.savePortfolioStructure(structureEl);
-		dbInstance.commitAndCloseSession();
-		
-		//try to add some artefacts
-		AbstractArtefact artefact1 = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		artefact1.setTitle("collect-restriction-1");
-		assertTrue(epFrontendManager.addArtefactToStructure(ident1, artefact1, structureEl));
-		
-		AbstractArtefact artefact2 = epFrontendManager.createAndPersistArtefact(ident1, "bc");
-		artefact2.setTitle("collect-restriction-2");
-		assertFalse(epFrontendManager.addArtefactToStructure(ident1, artefact2, structureEl));
-		dbInstance.commitAndCloseSession();
-		
-		//check if the structure element is ok, it must be
-		assertTrue(epFrontendManager.checkCollectRestriction(structureEl));
-	}
-}
diff --git a/src/test/java/org/olat/portfolio/PortfolioModuleTest.java b/src/test/java/org/olat/portfolio/PortfolioModuleTest.java
deleted file mode 100644
index 32486e9a7334a2b2c9b15cc7f65e107bbe5ba2b6..0000000000000000000000000000000000000000
--- a/src/test/java/org/olat/portfolio/PortfolioModuleTest.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.portfolio;
-
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.List;
-
-import org.junit.Test;
-import org.olat.core.gui.translator.PackageTranslator;
-import org.olat.core.gui.translator.Translator;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.test.OlatTestCase;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * 
- * Description:<br>
- * Integration test of the PortfolioModule
- * 
- * <P>
- * Initial Date:  23 . 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, www.frentix.com
- */
-public class PortfolioModuleTest extends OlatTestCase {
-
-	@Autowired
-	private PortfolioModule portfolioModule;
-	
-	@Test
-	public void testGetModule() {
-		assertNotNull(portfolioModule);
-	}
-	
-	@Test
-	public void testAddArtefactHandler() {
-		DummyArtefactHandler artefactHandler = new DummyArtefactHandler();
-		portfolioModule.addArtefactHandler(artefactHandler);
-		
-		List<EPArtefactHandler<?>> handlers = portfolioModule.getAllAvailableArtefactHandlers();
-		boolean found = false;
-		for(EPArtefactHandler<?> handler:handlers) {
-			if(handler == artefactHandler) {
-				found = true;
-			}
-		}
-		assertTrue(found);
-	}
-	
-	@Test
-	public void testRemoveArtefactHandler() {
-		//prepare the dummy artefact handler
-		EPArtefactHandler<?> handler = portfolioModule.getArtefactHandler(DummyArtefact.TYPE);
-		if(handler == null) {
-			handler = new DummyArtefactHandler();
-			portfolioModule.addArtefactHandler(handler);
-		}
-		
-		//remove it
-		portfolioModule.removeArtefactHandler(handler);
-		
-		//check if
-		EPArtefactHandler<?> removedHandler = portfolioModule.getArtefactHandler(DummyArtefact.TYPE);
-		assertNull(removedHandler);
-	}
-	
-	@Test
-	public void testGetArtefactHandlers() {
-		List<EPArtefactHandler<?>> handlers = portfolioModule.getArtefactHandlers();
-		assertFalse(handlers.isEmpty());
-	}
-	
-	@Test
-	public void testGetAllAvailableArtefactHandlers() {
-		List<EPArtefactHandler<?>> handlers = portfolioModule.getAllAvailableArtefactHandlers();
-		assertFalse(handlers.isEmpty());
-	}
-	
-	@Test
-	public void testSetEnableArtefactHandler() {
-		//prepare the dummy artefact handler
-		EPArtefactHandler<?> dummyHandler = portfolioModule.getArtefactHandler(DummyArtefact.TYPE);
-		if(dummyHandler == null) {
-			dummyHandler = new DummyArtefactHandler();
-			portfolioModule.addArtefactHandler(dummyHandler);
-		}
-		
-		//////////////////////////////////
-		// disable
-		//////////////////////////////////
-		portfolioModule.setEnableArtefactHandler(dummyHandler, false);
-		sleep(2000);//settings asynchronous
-		
-		//found in the list of all available handlers
-		List<EPArtefactHandler<?>> allHandlers = portfolioModule.getAllAvailableArtefactHandlers();
-		boolean foundInAll = false;
-		for(EPArtefactHandler<?> handler:allHandlers) {
-			if(handler == dummyHandler) {
-				foundInAll = true;
-				assertFalse(handler.isEnabled());
-			}
-		}
-		assertTrue(foundInAll);
-		
-		//not found in the list of handlers
-		List<EPArtefactHandler<?>> enabledHandlers = portfolioModule.getArtefactHandlers();
-		boolean foundInEnabled = false;
-		for(EPArtefactHandler<?> handler:enabledHandlers) {
-			if(handler == dummyHandler) {
-				foundInEnabled = true;
-				assertFalse(handler.isEnabled());
-			}
-		}
-		assertFalse(foundInEnabled);
-		
-		//found but disabled in get with type
-		EPArtefactHandler<?> disabledDummyHandler = portfolioModule.getArtefactHandler(DummyArtefact.TYPE);
-		assertFalse(disabledDummyHandler.isEnabled());
-		
-		//////////////////////////////////
-		// enable
-		//////////////////////////////////
-		portfolioModule.setEnableArtefactHandler(dummyHandler, false);
-		sleep(2000);//settings asynchronous
-		
-		//found in the list of all available handlers
-		allHandlers = portfolioModule.getAllAvailableArtefactHandlers();
-		foundInAll = false;
-		for(EPArtefactHandler<?> handler:allHandlers) {
-			if(handler == dummyHandler) {
-				foundInAll = true;
-				assertFalse(handler.isEnabled());
-			}
-		}
-		assertTrue(foundInAll);
-		
-		//not found in the list of handlers
-		enabledHandlers = portfolioModule.getArtefactHandlers();
-		foundInEnabled = false;
-		for(EPArtefactHandler<?> handler:enabledHandlers) {
-			if(handler == dummyHandler) {
-				foundInEnabled = true;
-				assertFalse(handler.isEnabled());
-			}
-		}
-		assertFalse(foundInEnabled);
-		
-		//found but disabled in get with type
-		EPArtefactHandler<?> enabledDummyHandler = portfolioModule.getArtefactHandler(DummyArtefact.TYPE);
-		assertFalse(enabledDummyHandler.isEnabled());
-	}
-	
-	@Test
-	public void testSetEnabled() {
-		portfolioModule.setEnabled(true);
-		assertTrue(portfolioModule.isEnabled());
-		portfolioModule.setEnabled(false);
-		assertFalse(portfolioModule.isEnabled());
-		portfolioModule.setEnabled(true);
-	}
-	
-	public class DummyArtefactHandler extends EPAbstractHandler<DummyArtefact> {
-		@Override
-		public String getType() {
-			return DummyArtefact.TYPE;
-		}
-
-		@Override
-		public DummyArtefact createArtefact() {
-			return new DummyArtefact();
-		}
-
-		@Override
-		public PackageTranslator getHandlerTranslator(Translator fallBackTrans) {
-			return null;
-		}
-
-		@Override
-		public boolean isProvidingSpecialMapViewController() {
-			return false;
-		}
-	}
-	
-	public class DummyArtefact extends AbstractArtefact {
-		private static final long serialVersionUID = -7986085106701245624L;
-		public static final String TYPE = "dummy";
-
-		@Override
-		public String getResourceableTypeName() {
-			return TYPE;
-		}
-
-		@Override
-		public String getIcon() {
-			return "o_ep_dummy";
-		}
-		
-	}
-}
diff --git a/src/test/java/org/olat/portfolio/blog.zip b/src/test/java/org/olat/portfolio/blog.zip
deleted file mode 100644
index faac98707d2b2959672b11c56b4cd6f8f7c9134c..0000000000000000000000000000000000000000
Binary files a/src/test/java/org/olat/portfolio/blog.zip and /dev/null differ
diff --git a/src/test/java/org/olat/portfolio/manager/EPPolicyManagerTest.java b/src/test/java/org/olat/portfolio/manager/EPPolicyManagerTest.java
deleted file mode 100644
index ef7f9218cf3dfa798b9a0ed96bd956cfeab321fb..0000000000000000000000000000000000000000
--- a/src/test/java/org/olat/portfolio/manager/EPPolicyManagerTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.portfolio.manager;
-
-import static org.junit.Assert.assertNotNull;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Locale;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.olat.basesecurity.Invitation;
-import org.olat.core.commons.persistence.DB;
-import org.olat.core.id.Identity;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.test.JunitTestHelper;
-import org.olat.test.OlatTestCase;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * 
- * Initial date: 24.06.2014<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public class EPPolicyManagerTest extends OlatTestCase {
-
-	@Autowired
-	private DB dbInstance;
-	@Autowired
-	private InvitationDAO invitationDao;
-	@Autowired
-	private EPPolicyManager policyManager;
-	@Autowired
-	private EPFrontendManager epFrontendManager;
-	
-	@Test
-	public void getOwners() {
-		//create a map
-		Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("Policy-User-1-");
-		PortfolioStructureMap originalMap = epFrontendManager.createAndPersistPortfolioDefaultMap(user, "Title", "Description");
-		PortfolioStructure page1 = epFrontendManager.createAndPersistPortfolioPage(originalMap, "Page title", "Page description");
-		assertNotNull(page1);
-		dbInstance.commitAndCloseSession();
-
-		List<Identity> owners = policyManager.getOwners(originalMap);
-		Assert.assertNotNull(owners);
-		Assert.assertEquals(1, owners.size());
-		Assert.assertEquals(user, owners.get(0));
-	}
-	
-	@Test
-	public void isMapShared_HQL() {
-		Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("Policy-User-2-");
-		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioDefaultMap(user, "Title", "Description");
-		dbInstance.commitAndCloseSession();
-		
-		boolean shared = policyManager.isMapShared(map.getOlatResource());
-		Assert.assertFalse(shared);
-	}
-	
-	@Test
-	public void createPolicy_invitation() {
-		Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("Policy-User-2-");
-		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioDefaultMap(user, "Title", "Description");
-		Invitation invitation = invitationDao.createAndPersistInvitation();
-		dbInstance.commit();
-		
-		invitation.setFirstName("John");
-		invitation.setLastName("Smith Portfolio");
-		EPMapPolicy policy = new EPMapPolicy();
-		policy.setType(EPMapPolicy.Type.invitation);
-		policy.setInvitation(invitation);
-		
-		policyManager.updateMapPolicies(map, Collections.singletonList(policy));
-		dbInstance.commitAndCloseSession();
-		
-		//check that the policy is saved
-		List<EPMapPolicy> policies = policyManager.getMapPolicies(map);
-		Assert.assertNotNull(policies);
-		Assert.assertEquals(1, policies.size());
-		EPMapPolicy invitationPolicy = policies.get(0);
-		Assert.assertEquals(EPMapPolicy.Type.invitation, invitationPolicy.getType());
-		
-		//convert invitation to identity
-		Identity invitee = invitationDao.createIdentityFrom(invitation, Locale.ENGLISH);
-		dbInstance.commitAndCloseSession();
-
-		//check is shared
-		boolean shared = policyManager.isMapShared(map.getOlatResource());
-		Assert.assertTrue(shared);
-		
-		boolean visible = epFrontendManager.isMapVisible(invitee, map.getOlatResource());
-		Assert.assertTrue(visible);
-	}
-}
\ No newline at end of file
diff --git a/src/test/java/org/olat/portfolio/manager/EPStructureManagerTest.java b/src/test/java/org/olat/portfolio/manager/EPStructureManagerTest.java
deleted file mode 100644
index 662daaf5422ee4529fa3dd1dec777a55e492a56c..0000000000000000000000000000000000000000
--- a/src/test/java/org/olat/portfolio/manager/EPStructureManagerTest.java
+++ /dev/null
@@ -1,744 +0,0 @@
-/**
- * <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>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.portfolio.manager;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.UUID;
-
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.olat.basesecurity.Group;
-import org.olat.basesecurity.GroupRoles;
-import org.olat.basesecurity.OrganisationService;
-import org.olat.basesecurity.manager.SecurityGroupDAO;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.persistence.DB;
-import org.olat.core.id.Identity;
-import org.olat.core.id.Organisation;
-import org.olat.core.id.Persistable;
-import org.olat.core.id.Roles;
-import org.olat.portfolio.model.artefacts.AbstractArtefact;
-import org.olat.portfolio.model.structel.EPStructureElement;
-import org.olat.portfolio.model.structel.EPStructureElementToGroupRelation;
-import org.olat.portfolio.model.structel.EPStructureToStructureLink;
-import org.olat.portfolio.model.structel.EPStructuredMap;
-import org.olat.portfolio.model.structel.EPStructuredMapTemplate;
-import org.olat.portfolio.model.structel.EPTargetResource;
-import org.olat.portfolio.model.structel.ElementType;
-import org.olat.portfolio.model.structel.PortfolioStructure;
-import org.olat.portfolio.model.structel.PortfolioStructureMap;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryEntryRelationType;
-import org.olat.repository.RepositoryEntryStatusEnum;
-import org.olat.repository.RepositoryManager;
-import org.olat.repository.RepositoryService;
-import org.olat.resource.OLATResource;
-import org.olat.resource.OLATResourceManager;
-import org.olat.test.JunitTestHelper;
-import org.olat.test.OlatTestCase;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * 
- * Description:<br>
- * Integration test for the DB
- * 
- * <P>
- * Initial Date:  24 juin 2010 <br>
- * @author srosse, stephane.rosse@frentix.com
- */
-public class EPStructureManagerTest extends OlatTestCase {
-	
-	@Autowired
-	private DB dbInstance;
-	@Autowired
-	private EPStructureManager epStructureManager;
-	@Autowired
-	private EPFrontendManager epFrontendManager;
-	@Autowired
-	private RepositoryManager repositoryManager;
-	@Autowired
-	private RepositoryService repositoryService;
-	@Autowired
-	private OLATResourceManager resourceManager;
-	@Autowired
-	private SecurityGroupDAO securityGroupDao;
-	
-	private static Identity ident1, ident2;
-	private static boolean isInitialized = false;
-	
-	@Before
-	public void setUp() {
-		if(!isInitialized) {
-			ident1 = JunitTestHelper.createAndPersistIdentityAsUser(UUID.randomUUID().toString());
-			ident2 = JunitTestHelper.createAndPersistIdentityAsUser(UUID.randomUUID().toString());
-		}
-	}
-	
-	@Test
-	public void testManagers() {
-		assertNotNull(dbInstance);
-		assertNotNull(epStructureManager);
-	}
-	
-	@Test
-	public void testGetStructureElementsForUser() {
-		Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("EP-1-");
-		
-		PortfolioStructure el = epFrontendManager.createAndPersistPortfolioDefaultMap(user, "users-test-map", "a-map-to-test-get-afterwards");
-		Assert.assertNotNull(el);
-		dbInstance.commitAndCloseSession();
-		
-		List<PortfolioStructure> elRes = epStructureManager.getStructureElementsForUser(user, ElementType.DEFAULT_MAP);
-		Assert.assertNotNull(elRes);
-		Assert.assertEquals(1, elRes.size());
-		Assert.assertEquals("users-test-map", elRes.get(0).getTitle());
-
-		// get another map
-		PortfolioStructure el2 = epFrontendManager.createAndPersistPortfolioDefaultMap(user, "users-test-map-2", "2-a-map-to-test-get-afterwards");
-		Assert.assertNotNull(el2);
-		dbInstance.commitAndCloseSession();
-		List<PortfolioStructure> elRes2 = epStructureManager.getStructureElementsForUser(user);
-		Assert.assertNotNull(elRes2);
-		Assert.assertEquals(2, elRes2.size());
-	}
-	
-	@Test
-	public void testGetStructureElementsForUser_byElementTypes() {
-		Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("EP-1-");
-		
-		PortfolioStructure el = epFrontendManager.createAndPersistPortfolioDefaultMap(user, "users-def-map", "");
-		Assert.assertNotNull(el);
-		dbInstance.commitAndCloseSession();
-		
-		//by default map
-		List<PortfolioStructure> defaultRes = epStructureManager.getStructureElementsForUser(user, ElementType.DEFAULT_MAP);
-		Assert.assertNotNull(defaultRes);
-		Assert.assertEquals(1, defaultRes.size());
-		Assert.assertEquals("users-def-map", defaultRes.get(0).getTitle());
-		
-		//by default map and structured
-		List<PortfolioStructure> multipleRes = epStructureManager.getStructureElementsForUser(user, ElementType.DEFAULT_MAP, ElementType.STRUCTURED_MAP);
-		Assert.assertNotNull(multipleRes);
-		Assert.assertEquals(1, multipleRes.size());
-		Assert.assertEquals("users-def-map", multipleRes.get(0).getTitle());
-		
-		//by structured
-		List<PortfolioStructure> structuredRes = epStructureManager.getStructureElementsForUser(user, ElementType.STRUCTURED_MAP);
-		Assert.assertNotNull(structuredRes);
-		Assert.assertTrue(structuredRes.isEmpty());
-	}
-	
-	@Test
-	public void testGetReferencedMapsForArtefact() {
-		PortfolioStructure el = epFrontendManager.createAndPersistPortfolioStructureElement(null, "structure-el", "structure-element");
-		dbInstance.commitAndCloseSession();
-		
-		AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(ident1, "Forum");
-		epFrontendManager.addArtefactToStructure(ident1, artefact, el);
-		dbInstance.commitAndCloseSession();
-		
-		//get the referenced maps
-		List<PortfolioStructure> mapList = epFrontendManager.getReferencedMapsForArtefact(artefact);
-		assertTrue(((Persistable)el).equalsByPersistableKey((Persistable)mapList.get(0)));
-		dbInstance.commitAndCloseSession();
-		
-		//make the test more complex
-		//reload the structure element
-		el = epFrontendManager.loadPortfolioStructureByKey(el.getKey());
-		// add artefact to substructure (page) and check for the same map
-		PortfolioStructure childEl = epFrontendManager.createAndPersistPortfolioStructureElement(el, "child-structure-el", "child-structure-element");
-		el = epFrontendManager.removeArtefactFromStructure(artefact, el);
-		
-		epFrontendManager.addArtefactToStructure(ident1, artefact, childEl);
-		dbInstance.commitAndCloseSession();
-		
-		//get the referenced maps
-		List<PortfolioStructure> mapList2 = epFrontendManager.getReferencedMapsForArtefact(artefact);
-		assertTrue(((Persistable)el).equalsByPersistableKey((Persistable)mapList2.get(0)));
-		dbInstance.commitAndCloseSession();
-		
-		// add artefact to 3 maps and check to get all of them
-		PortfolioStructure el2 = epFrontendManager.createAndPersistPortfolioStructureElement(null, "structure-el-2", "structure-element-2");
-		epFrontendManager.addArtefactToStructure(ident1, artefact, el2);
-		
-		PortfolioStructure el3 = epFrontendManager.createAndPersistPortfolioStructureElement(null, "structure-el-3", "structure-element-3");
-		epFrontendManager.addArtefactToStructure(ident1, artefact, el3);
-		
-		List<PortfolioStructure> mapList3 = epFrontendManager.getReferencedMapsForArtefact(artefact);
-		assertEquals(3, mapList3.size());
-		boolean found = false;
-		for(PortfolioStructure mapValue:mapList3) {
-			if(((Persistable)mapValue).equalsByPersistableKey((Persistable)el)) {
-				found= true;
-			}
-		}
-		assertTrue(found);
-	}
-	
-	@Test
-	public void testCreateAndSaveElement() {
-		PortfolioStructure el = epFrontendManager.createAndPersistPortfolioStructureElement(null, "structure-el", "structure-element");
-		dbInstance.commitAndCloseSession();
-		
-		assertNotNull(el);
-		assertNotNull(el.getOlatResource());
-		
-		PortfolioStructure retrievedEl = epFrontendManager.loadPortfolioStructureByKey(el.getKey());
-		assertNotNull(retrievedEl);
-		assertNotNull(retrievedEl.getOlatResource());
-		
-		OLATResource resource = resourceManager.findResourceable(el.getResourceableId(), el.getResourceableTypeName());
-		assertNotNull(resource);
-	}
-	
-	@Test
-	public void testCreateAndSaveTreeOfElements() {
-		//test save parent and child
-		PortfolioStructure parentEl = epFrontendManager.createAndPersistPortfolioStructureElement(null, "parent-structure-el", "parent-structure-element");
-		PortfolioStructure childEl = epFrontendManager.createAndPersistPortfolioStructureElement(parentEl, "child-structure-el", "child-structure-element");
-		dbInstance.commitAndCloseSession();
-		
-		//test load by key
-		PortfolioStructure retrievedParentEl = epFrontendManager.loadPortfolioStructureByKey(parentEl.getKey());
-		assertNotNull(retrievedParentEl);
-		assertNotNull(retrievedParentEl.getOlatResource());
-		
-		//test load by key
-		PortfolioStructure retrievedChildEl = epFrontendManager.loadPortfolioStructureByKey(childEl.getKey());
-		PortfolioStructure retrievedParentEl2 = epFrontendManager.loadStructureParent(retrievedChildEl);
-		assertNotNull(retrievedChildEl);
-		assertNotNull(retrievedChildEl.getOlatResource());
-		assertNotNull(retrievedParentEl2);
-		assertEquals(parentEl.getKey(), retrievedParentEl2.getKey());
-		dbInstance.commitAndCloseSession();
-		
-		//test get children
-		List<PortfolioStructure> retrievedChilrenEl = epFrontendManager.loadStructureChildren(parentEl);
-		assertNotNull(retrievedChilrenEl);
-		assertEquals(1, retrievedChilrenEl.size());
-		assertEquals(childEl.getKey(), retrievedChilrenEl.get(0).getKey());
-		assertNotNull(((EPStructureElement)retrievedChilrenEl.get(0)).getRoot());
-		assertEquals(parentEl.getKey(), ((EPStructureElement)retrievedChilrenEl.get(0)).getRoot().getKey());
-	}
-	
-	@Test
-	public void testCreateAndRetrieveElement() {
-		PortfolioStructure el = epFrontendManager.createAndPersistPortfolioStructureElement(null, "structure-el-2", "structure-element-2");
-		dbInstance.commitAndCloseSession();
-		
-		PortfolioStructure el2 = epStructureManager.loadPortfolioStructure(el.getOlatResource());
-		assertNotNull(el2);
-	}
-	
-	@Test
-	public void testCreateAndRetrieveCollectRestrictionElement() {
-		PortfolioStructure el = epFrontendManager.createAndPersistPortfolioStructureElement(null, "structure-el-3", "structure-element-3");
-		epStructureManager.addCollectRestriction(el, "Forum", "minimum", 3);
-		epStructureManager.savePortfolioStructure(el);
-		dbInstance.commitAndCloseSession();
-		
-		PortfolioStructure retrievedEl = epStructureManager.loadPortfolioStructure(el.getOlatResource());
-		assertNotNull(retrievedEl);
-		assertTrue(retrievedEl instanceof EPStructureElement);
-		EPStructureElement retrievedStructEl = (EPStructureElement)retrievedEl;
-		assertNotNull(retrievedStructEl.getCollectRestrictions());
-		assertEquals("Forum", retrievedStructEl.getCollectRestrictions().get(0).getArtefactType());
-		assertEquals("minimum", retrievedStructEl.getCollectRestrictions().get(0).getRestriction());
-		assertEquals(3, retrievedStructEl.getCollectRestrictions().get(0).getAmount());
-	}
-	
-	@Test
-	public void testChildrenBetweenSeveralSessions() {
-		//test save parent and child
-		PortfolioStructure parentEl = epFrontendManager.createAndPersistPortfolioStructureElement(null, "parent-structure-el", "parent-structure-element");
-		PortfolioStructure childEl1 = epFrontendManager.createAndPersistPortfolioStructureElement(parentEl, "multi-session-structure-el-1", "child-structure-element");
-		dbInstance.commitAndCloseSession();
-
-		PortfolioStructure childEl2 = epFrontendManager.createAndPersistPortfolioStructureElement(parentEl, "multi-session-structure-el-2", "child-structure-element");
-		dbInstance.commitAndCloseSession();
-		
-		PortfolioStructure childEl3 = epFrontendManager.createAndPersistPortfolioStructureElement(parentEl, "multi-session-structure-el-3", "child-structure-element");
-		((EPStructureElement)parentEl).setTitle("parent-structure-el-prime");
-		epStructureManager.savePortfolioStructure(parentEl);
-		dbInstance.commitAndCloseSession();	
-		
-		//test if all children are saved
-		List<PortfolioStructure> retrievedChilrenEl = epFrontendManager.loadStructureChildren(parentEl);
-		assertNotNull(retrievedChilrenEl);
-		assertEquals(3, retrievedChilrenEl.size());
-		//test if they are ordered
-		assertEquals(childEl1.getKey(), retrievedChilrenEl.get(0).getKey());
-		assertEquals(childEl2.getKey(), retrievedChilrenEl.get(1).getKey());
-		assertEquals(childEl3.getKey(), retrievedChilrenEl.get(2).getKey());
-		//test the title too (why not?)
-		assertEquals("multi-session-structure-el-1", ((EPStructureElement)retrievedChilrenEl.get(0)).getTitle());
-		assertEquals("multi-session-structure-el-2", ((EPStructureElement)retrievedChilrenEl.get(1)).getTitle());
-		assertEquals("multi-session-structure-el-3", ((EPStructureElement)retrievedChilrenEl.get(2)).getTitle());
-		
-		//test if the change to the parent was not lost
-		PortfolioStructure retrievedParentEl = epFrontendManager.loadPortfolioStructureByKey(parentEl.getKey());
-		assertEquals("parent-structure-el-prime", ((EPStructureElement)retrievedParentEl).getTitle());
-		dbInstance.commitAndCloseSession();
-		
-		//test that the children are not always loaded
-		PortfolioStructure retrievedParentEl2 = epFrontendManager.loadPortfolioStructureByKey(parentEl.getKey());
-		dbInstance.commitAndCloseSession();
-		
-		boolean failedToLazyLoadChildren;
-		try {
-			List<EPStructureToStructureLink> children = ((EPStructureElement)retrievedParentEl2).getInternalChildren();
-			failedToLazyLoadChildren = (children == null || children.isEmpty());
-		} catch(Exception e) {
-			failedToLazyLoadChildren = true;
-		}
-		assertTrue(failedToLazyLoadChildren);
-		dbInstance.commitAndCloseSession();
-		
-		//test load parent
-		PortfolioStructure retrievedParentEl3 = epFrontendManager.loadStructureParent(childEl1);
-		assertNotNull(retrievedParentEl3);
-		assertEquals(parentEl.getKey(), retrievedParentEl3.getKey());
-		PortfolioStructure retrievedParentEl4 = epFrontendManager.loadStructureParent(childEl2);
-		assertNotNull(retrievedParentEl4);
-		assertEquals(parentEl.getKey(), retrievedParentEl4.getKey());
-		PortfolioStructure retrievedParentEl5 = epFrontendManager.loadStructureParent(childEl3);
-		assertNotNull(retrievedParentEl5);
-		assertEquals(parentEl.getKey(), retrievedParentEl5.getKey());
-	}
-	
-	@Test
-	public void testDeleteChildren() {
-		//test save parent and 3 children
-		PortfolioStructure parentEl = epFrontendManager.createAndPersistPortfolioStructureElement(null, "remove-parent-structure-el", "parent-structure-element");
-		PortfolioStructure childEl1 = epFrontendManager.createAndPersistPortfolioStructureElement(parentEl, "remove-structure-el-1", "remove-child-structure-element");
-		PortfolioStructure childEl2 = epFrontendManager.createAndPersistPortfolioStructureElement(parentEl, "remove-structure-el-2", "remove-child-structure-element");
-		PortfolioStructure childEl3 = epFrontendManager.createAndPersistPortfolioStructureElement(parentEl, "remove-structure-el-3", "remove-child-structure-element");
-		dbInstance.commitAndCloseSession();
-		
-		//remove a child
-		epStructureManager.removeStructure(parentEl, childEl2);
-		dbInstance.commitAndCloseSession();
-		
-		//check if the structure element has been removed
-		List<PortfolioStructure> retrievedChildrenEl = epFrontendManager.loadStructureChildren(parentEl);
-		assertNotNull(retrievedChildrenEl);
-		assertEquals(2, retrievedChildrenEl.size());
-		assertEquals(childEl1.getKey(), retrievedChildrenEl.get(0).getKey());
-		assertEquals(childEl3.getKey(), retrievedChildrenEl.get(1).getKey());
-	}
-	
-	@Test
-	public void testChildrenPaging() {
-		//save parent and 20 children
-		PortfolioStructure parentEl = epFrontendManager.createAndPersistPortfolioStructureElement(null, "paged-parent-structure-el", "parent-structure-element");
-		
-		List<PortfolioStructure> children = new ArrayList<>();
-		for(int i=0;i<20;i++) {
-			PortfolioStructure childEl = epFrontendManager.createAndPersistPortfolioStructureElement(parentEl, "paged-structure-el-" + i, "paged-child-structure-element");
-			children.add(childEl);
-		}
-		dbInstance.commitAndCloseSession();
-		
-		//check if the paging return the right children
-		List<PortfolioStructure> childrenSubset = epFrontendManager.loadStructureChildren(parentEl, 15, 10);
-		assertNotNull(childrenSubset);
-		assertEquals(5, childrenSubset.size());
-		assertEquals(children.get(15).getKey(), childrenSubset.get(0).getKey());
-		assertEquals(children.get(16).getKey(), childrenSubset.get(1).getKey());
-		assertEquals(children.get(17).getKey(), childrenSubset.get(2).getKey());
-		assertEquals(children.get(18).getKey(), childrenSubset.get(3).getKey());
-		assertEquals(children.get(19).getKey(), childrenSubset.get(4).getKey());
-	}
-	
-	@Test
-	public void testCreateStructureMapTemplate() {
-		//save parent and 20 children
-		PortfolioStructureMap template = createPortfolioMapTemplate(ident1, "paged-parent-structure-el", "parent-structure-element");
-		epStructureManager.savePortfolioStructure(template);
-		dbInstance.commitAndCloseSession();
-		
-		//not very usefull but...
-		assertNotNull(template);
-		//check if the olat resource is persisted
-		OLATResource resource = resourceManager.findResourceable(template.getResourceableId(), template.getResourceableTypeName());
-		assertNotNull(resource);
-		//check if the repository entry is persisted
-		RepositoryEntry re = repositoryManager.lookupRepositoryEntry(resource, false);
-		assertNotNull(re);
-	}
-	
-	@Test
-	public void testUseStructureMapTemplate() {
-		//save parent and 20 children
-		PortfolioStructureMap template = createPortfolioMapTemplate(ident1, "paged-parent-structure-el", "parent-structure-element");
-		epStructureManager.savePortfolioStructure(template);
-		dbInstance.commitAndCloseSession();
-		
-		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioStructuredMap(template, ident1, "cloned-map", "cloned-map-from-template", null, null, null);
-		
-		((EPStructuredMap)map).setReturnDate(new Date());
-		EPTargetResource targetResource = ((EPStructuredMap)map).getTargetResource();
-		targetResource.setResourceableTypeName("CourseModule");
-		targetResource.setResourceableId(234l);
-		targetResource.setSubPath("3894580");
-		targetResource.setBusinessPath("[RepositoryEntry:23647598][CourseNode:934598]");
-		
-		epStructureManager.savePortfolioStructure(map);
-		dbInstance.commitAndCloseSession();
-		
-		//test
-		PortfolioStructureMap retrievedMap = (PortfolioStructureMap)epFrontendManager.loadPortfolioStructureByKey(map.getKey());
-		assertNotNull(retrievedMap);
-		assertNotNull(((EPStructuredMap)retrievedMap).getReturnDate());
-		assertNotNull(((EPStructuredMap)retrievedMap).getStructuredMapSource());
-		assertNotNull(((EPStructuredMap)retrievedMap).getTargetResource());
-		
-		EPTargetResource retriviedTargetResource = ((EPStructuredMap)retrievedMap).getTargetResource();
-		assertEquals("CourseModule", retriviedTargetResource.getResourceableTypeName());
-		assertEquals(new Long(234l), retriviedTargetResource.getResourceableId());
-		assertEquals("3894580", retriviedTargetResource.getSubPath());
-		assertEquals("[RepositoryEntry:23647598][CourseNode:934598]", retriviedTargetResource.getBusinessPath());
-	}
-	
-	@Test
-	public void testLoadPortfolioStructuredMap(){
-		Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("EP-tmp-");
-		//create a template
-		PortfolioStructureMap template = createPortfolioMapTemplate(user, "paged-parent-structure-el", "parent-structure-element");
-		epStructureManager.savePortfolioStructure(template);
-		dbInstance.commitAndCloseSession();
-		//clone the template
-		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioStructuredMap(template, user, "cloned-map", "cloned-map-from-template", null, null, null);
-		((EPStructuredMap)map).setReturnDate(new Date());
-		EPTargetResource targetResource = ((EPStructuredMap)map).getTargetResource();
-		targetResource.setResourceableTypeName("CourseModule");
-		targetResource.setResourceableId(234l);
-		targetResource.setSubPath(UUID.randomUUID().toString());
-		targetResource.setBusinessPath("[RepositoryEntry:23647599][CourseNode:934599]");
-		
-		epStructureManager.savePortfolioStructure(map);
-		dbInstance.commitAndCloseSession();
-
-		//load the cloned map another map
-		PortfolioStructureMap myClonedMap = epStructureManager.loadPortfolioStructuredMap(user, template,
-				targetResource.getOLATResourceable(), targetResource.getSubPath(), targetResource.getBusinessPath());
-		Assert.assertNotNull(myClonedMap);
-	}
-	
-	@Test
-	public void testLoadPortfolioStructuredMaps() {
-		Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("EP-tmp-");
-		//a template
-		PortfolioStructureMap template = createPortfolioMapTemplate(user, "paged-parent-structure-el", "parent-structure-element");
-		epStructureManager.savePortfolioStructure(template);
-		dbInstance.commitAndCloseSession();
-		//clone the template
-		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioStructuredMap(template, user, "cloned-map", "cloned-map-from-template", null, null, null);
-		((EPStructuredMap)map).setReturnDate(new Date());
-		EPTargetResource targetResource = ((EPStructuredMap)map).getTargetResource();
-		targetResource.setResourceableTypeName("CourseModule");
-		targetResource.setResourceableId(234l);
-		targetResource.setSubPath(UUID.randomUUID().toString());
-		targetResource.setBusinessPath("[RepositoryEntry:23647600][CourseNode:934600]");
-		
-		epStructureManager.savePortfolioStructure(map);
-		dbInstance.commitAndCloseSession();
-
-		//load the cloned map another map
-		List<PortfolioStructureMap> myCloneAlt = epStructureManager.loadPortfolioStructuredMaps(user,
-				targetResource.getOLATResourceable(), targetResource.getSubPath(), targetResource.getBusinessPath());
-		Assert.assertNotNull(myCloneAlt);
-		Assert.assertEquals(1, myCloneAlt.size());
-		Assert.assertEquals(map, myCloneAlt.get(0));
-	}
-	
-	@Test
-	public void loadPortfolioStructure_resourceable() {
-		Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("EP-res-tmp-");
-		//a template
-		PortfolioStructureMap template = createPortfolioMapTemplate(user, "resourced-el", "resource-element");
-		epStructureManager.savePortfolioStructure(template);
-		dbInstance.commitAndCloseSession();
-		
-		OLATResource resource = template.getOlatResource();
-		PortfolioStructure structure = epStructureManager.loadPortfolioStructure(resource);
-		Assert.assertNotNull(structure);
-		Assert.assertEquals(template, structure);
-	}
-	
-	@Test
-	public void testCountStructureElementsFromOthers() {
-		Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("EP-tmp-");
-		
-		PortfolioStructureMap map = epStructureManager.createPortfolioDefaultMap("map-el", "map-element");
-		epStructureManager.savePortfolioStructure(map);
-		dbInstance.commitAndCloseSession();
-		
-		//clone the template
-		int count = epStructureManager.countStructureElementsFromOthers(user, null);
-		Assert.assertEquals(0, count);
-	}
-	
-	@Test
-	public void testMoveUp() {
-		//save parent and 5 children
-		PortfolioStructure parentEl = epFrontendManager.createAndPersistPortfolioStructureElement(null, "move-up-parent-structure-el-1", "move-up-structure-element");
-		
-		List<PortfolioStructure> children = new ArrayList<>();
-		for(int i=0;i<5;i++) {
-			PortfolioStructure childEl = epFrontendManager.createAndPersistPortfolioStructureElement(parentEl, "paged-structure-el-" + i, "paged-child-structure-element");
-			children.add(childEl);
-		}
-		dbInstance.commitAndCloseSession();
-		
-		//check if the paging return the right children
-		List<PortfolioStructure> childrenSubset = epFrontendManager.loadStructureChildren(parentEl);
-		assertNotNull(childrenSubset);
-		assertEquals(5, childrenSubset.size());
-		assertEquals(children.get(0).getKey(), childrenSubset.get(0).getKey());
-		assertEquals(children.get(1).getKey(), childrenSubset.get(1).getKey());
-		assertEquals(children.get(2).getKey(), childrenSubset.get(2).getKey());
-		assertEquals(children.get(3).getKey(), childrenSubset.get(3).getKey());
-		assertEquals(children.get(4).getKey(), childrenSubset.get(4).getKey());
-		dbInstance.commitAndCloseSession();
-		
-		
-		//move up the first place
-		epStructureManager.moveUp(parentEl, children.get(0));
-		dbInstance.commitAndCloseSession();
-		//check that all is the same
-		List<PortfolioStructure> persistedChildren1 = epFrontendManager.loadStructureChildren(parentEl);
-		assertNotNull(persistedChildren1);
-		assertEquals(5, persistedChildren1.size());
-		assertEquals(children.get(0).getKey(), persistedChildren1.get(0).getKey());
-		assertEquals(children.get(1).getKey(), persistedChildren1.get(1).getKey());
-		assertEquals(children.get(2).getKey(), persistedChildren1.get(2).getKey());
-		assertEquals(children.get(3).getKey(), persistedChildren1.get(3).getKey());
-		assertEquals(children.get(4).getKey(), persistedChildren1.get(4).getKey());
-		dbInstance.commitAndCloseSession();
-		
-		
-		//move the second to the first place
-		epStructureManager.moveUp(parentEl, children.get(1));
-		dbInstance.commitAndCloseSession();
-		//check that all is the same
-		List<PortfolioStructure> persistedChildren2 = epFrontendManager.loadStructureChildren(parentEl);
-		assertNotNull(persistedChildren2);
-		assertEquals(5, persistedChildren2.size());
-		assertEquals(children.get(1).getKey(), persistedChildren2.get(0).getKey());
-		assertEquals(children.get(0).getKey(), persistedChildren2.get(1).getKey());
-		assertEquals(children.get(2).getKey(), persistedChildren2.get(2).getKey());
-		assertEquals(children.get(3).getKey(), persistedChildren2.get(3).getKey());
-		assertEquals(children.get(4).getKey(), persistedChildren2.get(4).getKey());
-		dbInstance.commitAndCloseSession();
-		
-		
-		//move up the last
-		epStructureManager.moveUp(parentEl, children.get(4));
-		epStructureManager.savePortfolioStructure(parentEl);
-		dbInstance.commitAndCloseSession();
-		//check that all is the same
-		List<PortfolioStructure> persistedChildren3 = epFrontendManager.loadStructureChildren(parentEl);
-		assertNotNull(persistedChildren3);
-		assertEquals(5, persistedChildren3.size());
-		assertEquals(children.get(1).getKey(), persistedChildren3.get(0).getKey());
-		assertEquals(children.get(0).getKey(), persistedChildren3.get(1).getKey());
-		assertEquals(children.get(2).getKey(), persistedChildren3.get(2).getKey());
-		assertEquals(children.get(4).getKey(), persistedChildren3.get(3).getKey());
-		assertEquals(children.get(3).getKey(), persistedChildren3.get(4).getKey());
-	}
-	
-
-	@Test
-	public void testMoveDown() {
-		//save parent and 5 children
-		PortfolioStructure parentEl = epFrontendManager.createAndPersistPortfolioStructureElement(null, "move-up-parent-structure-el-1", "move-up-structure-element");
-		
-		List<PortfolioStructure> children = new ArrayList<>();
-		for(int i=0;i<5;i++) {
-			PortfolioStructure childEl = epFrontendManager.createAndPersistPortfolioStructureElement(parentEl, "paged-structure-el-" + i, "paged-child-structure-element");
-			children.add(childEl);
-		}
-		dbInstance.commitAndCloseSession();
-		
-		//check if the paging return the right children
-		List<PortfolioStructure> childrenSubset = epFrontendManager.loadStructureChildren(parentEl);
-		assertNotNull(childrenSubset);
-		assertEquals(5, childrenSubset.size());
-		assertEquals(children.get(0).getKey(), childrenSubset.get(0).getKey());
-		assertEquals(children.get(1).getKey(), childrenSubset.get(1).getKey());
-		assertEquals(children.get(2).getKey(), childrenSubset.get(2).getKey());
-		assertEquals(children.get(3).getKey(), childrenSubset.get(3).getKey());
-		assertEquals(children.get(4).getKey(), childrenSubset.get(4).getKey());
-		dbInstance.commitAndCloseSession();
-		
-		
-		//move down the last
-		epStructureManager.moveDown(parentEl, children.get(4));
-		dbInstance.commitAndCloseSession();
-		//check that all is the same
-		List<PortfolioStructure> persistedChildren1 = epFrontendManager.loadStructureChildren(parentEl);
-		assertNotNull(persistedChildren1);
-		assertEquals(5, persistedChildren1.size());
-		assertEquals(children.get(0).getKey(), persistedChildren1.get(0).getKey());
-		assertEquals(children.get(1).getKey(), persistedChildren1.get(1).getKey());
-		assertEquals(children.get(2).getKey(), persistedChildren1.get(2).getKey());
-		assertEquals(children.get(3).getKey(), persistedChildren1.get(3).getKey());
-		assertEquals(children.get(4).getKey(), persistedChildren1.get(4).getKey());
-		dbInstance.commitAndCloseSession();
-		
-		
-		//move down to the last place
-		epStructureManager.moveDown(parentEl, children.get(3));
-		dbInstance.commitAndCloseSession();
-		//check that all is the same
-		List<PortfolioStructure> persistedChildren2 = epFrontendManager.loadStructureChildren(parentEl);
-		assertNotNull(persistedChildren2);
-		assertEquals(5, persistedChildren2.size());
-		assertEquals(children.get(0).getKey(), persistedChildren2.get(0).getKey());
-		assertEquals(children.get(1).getKey(), persistedChildren2.get(1).getKey());
-		assertEquals(children.get(2).getKey(), persistedChildren2.get(2).getKey());
-		assertEquals(children.get(4).getKey(), persistedChildren2.get(3).getKey());
-		assertEquals(children.get(3).getKey(), persistedChildren2.get(4).getKey());
-		dbInstance.commitAndCloseSession();
-		
-		
-		//move down the first to the second position
-		epStructureManager.moveDown(parentEl, children.get(0));
-		epStructureManager.savePortfolioStructure(parentEl);
-		dbInstance.commitAndCloseSession();
-		//check that all is the same
-		List<PortfolioStructure> persistedChildren3 = epFrontendManager.loadStructureChildren(parentEl);
-		assertNotNull(persistedChildren3);
-		assertEquals(5, persistedChildren3.size());
-		assertEquals(children.get(1).getKey(), persistedChildren3.get(0).getKey());
-		assertEquals(children.get(0).getKey(), persistedChildren3.get(1).getKey());
-		assertEquals(children.get(2).getKey(), persistedChildren3.get(2).getKey());
-		assertEquals(children.get(4).getKey(), persistedChildren3.get(3).getKey());
-		assertEquals(children.get(3).getKey(), persistedChildren3.get(4).getKey());
-	}
-	
-	@Test
-	public void testAddAuthorToMap() {
-		//save the map
-		PortfolioStructureMap map = createPortfolioMapTemplate(ident1, "add-author-map-1", "add-an-author-to-map-template");
-		epStructureManager.savePortfolioStructure(map);
-		dbInstance.commitAndCloseSession();
-		
-		//add an author
-		epStructureManager.addAuthor(map, ident2);
-		dbInstance.commitAndCloseSession();
-		
-		//check that the author are in the
-		OLATResource resource = resourceManager.findResourceable(map.getResourceableId(), map.getResourceableTypeName());
-		assertNotNull(resource);
-		RepositoryEntry re = repositoryManager.lookupRepositoryEntry(resource, false);
-		assertNotNull(re);
-		List<Identity> authors = repositoryService.getMembers(re, RepositoryEntryRelationType.defaultGroup, GroupRoles.owner.name());
-		assertEquals(2, authors.size());
-		assertTrue(authors.contains(ident1));//owner
-		assertTrue(authors.contains(ident2));//owner
-	}
-	
-	@Test
-	public void testRemoveAuthorToMap() {
-		//save the map
-		PortfolioStructureMap map = createPortfolioMapTemplate(ident1, "add-author-map-1", "add-an-author-to-map-template");
-		epStructureManager.savePortfolioStructure(map);
-		dbInstance.commitAndCloseSession();
-		
-		//add an author
-		epStructureManager.addAuthor(map, ident2);
-		dbInstance.commitAndCloseSession();
-		
-		//check that the author are in the
-		OLATResource resource = resourceManager.findResourceable(map.getResourceableId(), map.getResourceableTypeName());
-		assertNotNull(resource);
-		RepositoryEntry re = repositoryManager.lookupRepositoryEntry(resource, false);
-		assertNotNull(re);
-		List<Identity> authors = repositoryService.getMembers(re, RepositoryEntryRelationType.defaultGroup, GroupRoles.owner.name());
-		assertEquals(2, authors.size());
-		dbInstance.commitAndCloseSession();
-		
-		//and remove the author
-		epStructureManager.removeAuthor(map, ident2);
-		dbInstance.commitAndCloseSession();
-		
-		List<Identity> singleAuthor = repositoryService.getMembers(re, RepositoryEntryRelationType.defaultGroup, GroupRoles.owner.name());
-		assertEquals(1, singleAuthor.size());
-		assertTrue(singleAuthor.contains(ident1));//owner
-		assertFalse(singleAuthor.contains(ident2));//owner
-		
-		securityGroupDao.getSecurityGroupsForIdentity(ident1);
-		repositoryManager.queryResourcesLimitType(ident1, Roles.userRoles(), false, null, null, null, null, true, false);
-	}
-	
-	
-	/**
-	 * Create a map template, create an OLAT resource and a repository entry with a security group
-	 * of type owner to the repository and add the identity has an owner.
-	 * @param identity
-	 * @param title
-	 * @param description
-	 * @return The structure element
-	 */
-	public static PortfolioStructureMap createPortfolioMapTemplate(Identity identity, String title, String description) {
-		EPStructureManager epStructureManager = CoreSpringFactory.getImpl(EPStructureManager.class);
-		RepositoryService repositoryService = CoreSpringFactory.getImpl(RepositoryService.class);
-		OrganisationService organisationService = CoreSpringFactory.getImpl(OrganisationService.class);
-		DB dbInstance = CoreSpringFactory.getImpl(DB.class);
-		
-		
-		EPStructuredMapTemplate el = new EPStructuredMapTemplate();
-		Organisation defOrganisation = organisationService.getDefaultOrganisation();
-		
-		epStructureManager.fillStructureElement(el, title, description);
-
-		//create a repository entry with default security settings
-		RepositoryEntry re = repositoryService.create(identity, null, "-", title, null, el.getOlatResource(),
-				RepositoryEntryStatusEnum.preparation, defOrganisation);
-				
-		dbInstance.commit();
-		
-		Group ownerGroup = repositoryService.getDefaultGroup(re);
-		
-		EPStructureElementToGroupRelation relation = epStructureManager.createBaseRelation(el, ownerGroup);
-		Set<EPStructureElementToGroupRelation> relations = new HashSet<>();
-		relations.add(relation);
-		el.setGroups(relations);
-		return el;
-	}
-	
-	
-	
-	
-}
\ No newline at end of file
diff --git a/src/test/java/org/olat/portfolio/map_81.xml.zip b/src/test/java/org/olat/portfolio/map_81.xml.zip
deleted file mode 100644
index 4c751bf9e016f4b4279a94c7aa5c09006324af70..0000000000000000000000000000000000000000
Binary files a/src/test/java/org/olat/portfolio/map_81.xml.zip and /dev/null differ
diff --git a/src/test/java/org/olat/portfolio/wiki.zip b/src/test/java/org/olat/portfolio/wiki.zip
deleted file mode 100644
index 8d750dcfe383b800de4165543656356d35f1f060..0000000000000000000000000000000000000000
Binary files a/src/test/java/org/olat/portfolio/wiki.zip and /dev/null differ
diff --git a/src/test/java/org/olat/test/AllTestsJunit4.java b/src/test/java/org/olat/test/AllTestsJunit4.java
index 6afb375e3ad8434fb2bc5a770fbdde1099238436..a643adc1a555b47f1cc3ac8b2cba4e084e444e91 100644
--- a/src/test/java/org/olat/test/AllTestsJunit4.java
+++ b/src/test/java/org/olat/test/AllTestsJunit4.java
@@ -257,6 +257,7 @@ import org.junit.runners.Suite;
 	org.olat.modules.portfolio.manager.SharedWithMeQueriesTest.class,
 	org.olat.modules.portfolio.manager.PortfolioServiceTest.class,
 	org.olat.modules.portfolio.manager.BinderUserInformationsDAOTest.class,
+	org.olat.modules.portfolio.manager.InvitationDAOTest.class,
 	org.olat.modules.quality.analysis.manager.AnalysisFilterDAOTest.class,
 	org.olat.modules.quality.analysis.manager.AnalysisPresentationDAOTest.class,
 	org.olat.modules.quality.analysis.manager.EvaluationFormDAOTest.class,
@@ -387,14 +388,6 @@ import org.junit.runners.Suite;
 	org.olat.course.auditing.UserNodeAuditManagerTest.class,
 	org.olat.shibboleth.handler.SpringShibbolethAttributeHandlerFactoryTest.class,
 	org.olat.core.CoreSpringFactoryTest.class,
-	org.olat.portfolio.PortfolioModuleTest.class,
-	org.olat.portfolio.EPArtefactManagerTest.class,
-	org.olat.portfolio.EPFrontendManagerTest.class,
-	org.olat.portfolio.manager.EPStructureManagerTest.class,
-	org.olat.portfolio.manager.EPPolicyManagerTest.class,
-	org.olat.portfolio.manager.InvitationDAOTest.class,
-	org.olat.portfolio.EPStructureToArtefactTest.class,
-	org.olat.portfolio.EPImportTest.class,
 	org.olat.modules.openmeetings.OpenMeetingsTest.class,
 	org.olat.modules.openmeetings.manager.OpenMeetingsDAOTest.class,
 	org.olat.commons.info.InfoManagerTest.class,