diff --git a/pom.xml b/pom.xml index ac7886f018e5de2d5dc9a4ac79564edd7eb2956f..6665c43951e0e78902f71b4bafe69257a4a4418d 100644 --- a/pom.xml +++ b/pom.xml @@ -71,7 +71,7 @@ <org.mysql.version>5.1.29</org.mysql.version> <org.postgresql.version>9.3-1100-jdbc41</org.postgresql.version> <org.infinispan.version>6.0.1.Final</org.infinispan.version> - <lucene.version>4.5.1</lucene.version> + <lucene.version>4.8.0</lucene.version> <!-- properties for testing and Q&A --> <!-- by default no tests are executed so far (April 2011). Use appropriate profiles and properties on the command line --> @@ -1095,7 +1095,7 @@ <id>central</id> <name>Maven Repository Switchboard</name> <layout>default</layout> - <url>http://repo1.maven.org/maven2</url> + <url>http://central.maven.org/maven2</url> <snapshots> <enabled>false</enabled> </snapshots> @@ -1683,7 +1683,7 @@ <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> - <version>1.8.4</version> + <version>1.8.5</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> @@ -2174,13 +2174,13 @@ <dependency> <groupId>io.undertow</groupId> <artifactId>undertow-core</artifactId> - <version>1.0.0.Final</version> + <version>1.0.9.Final</version> <scope>test</scope> </dependency> <dependency> <groupId>io.undertow</groupId> <artifactId>undertow-servlet</artifactId> - <version>1.0.0.Final</version> + <version>1.0.9.Final</version> <scope>test</scope> </dependency> @@ -2273,17 +2273,15 @@ <version>2.9</version> </plugin> <!-- Javadoc --> - - <!-- <reportSets> <reportSet> <reports> <report>javadoc</report> --> <!-- Note: leave this line commented out if unit tests are not to be documented <report>test-javadoc</report>report> --> <!-- </reports> </reportSet> </reportSets> </plugin> --> <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jxr-plugin</artifactId> - <version>2.3</version> - </plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jxr-plugin</artifactId> + <version>2.3</version> + </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> diff --git a/src/main/java/org/olat/commons/servlets/RSSServlet.java b/src/main/java/org/olat/commons/servlets/RSSServlet.java index 196cedb6e5f205de7db7df62e4585053a46a3d32..5b874f0efac567c38893014fe10a55e67bc8dc1c 100644 --- a/src/main/java/org/olat/commons/servlets/RSSServlet.java +++ b/src/main/java/org/olat/commons/servlets/RSSServlet.java @@ -212,8 +212,6 @@ public class RSSServlet extends HttpServlet { } // create rss feed for user notifications - SyndFeed feed = new PersonalRSSFeed(identity, idToken); - //TODO implements some caching - return feed; + return new PersonalRSSFeed(identity); } } \ No newline at end of file diff --git a/src/main/java/org/olat/core/commons/services/commentAndRating/ui/UserCommentsAndRatingsController.java b/src/main/java/org/olat/core/commons/services/commentAndRating/ui/UserCommentsAndRatingsController.java index 42444297165767b14b19145e7ace2474aaf93b17..caa011ddf5b8104f399a44615860dfb5fbadb469 100644 --- a/src/main/java/org/olat/core/commons/services/commentAndRating/ui/UserCommentsAndRatingsController.java +++ b/src/main/java/org/olat/core/commons/services/commentAndRating/ui/UserCommentsAndRatingsController.java @@ -168,7 +168,7 @@ public class UserCommentsAndRatingsController extends BasicController implements * * @param ureq */ - public void collapseComments(UserRequest ureq) { + void collapseComments() { if (!canExpandToFullView) { throw new AssertException("Can not collapse messages when controller initialized as not expandable"); } userCommentsAndRatingsVC.remove(commentsCtr.getInitialComponent()); removeAsListenerAndDispose(commentsCtr); @@ -236,7 +236,7 @@ public class UserCommentsAndRatingsController extends BasicController implements if (canExpandToFullView) { if (isExpanded) { // Collapse - collapseComments(ureq); + collapseComments(); } else { // Expand now expandComments(ureq); diff --git a/src/main/java/org/olat/core/commons/services/notifications/PersonalRSSFeed.java b/src/main/java/org/olat/core/commons/services/notifications/PersonalRSSFeed.java index c443b19c619ba9cba45ca07e90d6aab559ca7ff7..a4079f26009028933a109013dce9401ac15ebed1 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/PersonalRSSFeed.java +++ b/src/main/java/org/olat/core/commons/services/notifications/PersonalRSSFeed.java @@ -63,7 +63,7 @@ public class PersonalRSSFeed extends SyndFeedImpl { * @param identity The users identity * @param token The users RSS-authentication token */ - public PersonalRSSFeed(Identity identity, String token) { + public PersonalRSSFeed(Identity identity) { super(); setFeedType("rss_2.0"); setEncoding(RSSServlet.DEFAULT_ENCODING); diff --git a/src/main/java/org/olat/core/commons/services/notifications/model/NoSubscriptionInfo.java b/src/main/java/org/olat/core/commons/services/notifications/model/NoSubscriptionInfo.java index 858de5333c1fb0c4bfa47fa505c93b78569e6065..eaf8d3f66a54cfcf732c19ef0949b8661ba05645 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/model/NoSubscriptionInfo.java +++ b/src/main/java/org/olat/core/commons/services/notifications/model/NoSubscriptionInfo.java @@ -25,6 +25,8 @@ package org.olat.core.commons.services.notifications.model; +import java.util.Locale; + import org.olat.core.commons.services.notifications.SubscriptionInfo; /** @@ -38,23 +40,16 @@ import org.olat.core.commons.services.notifications.SubscriptionInfo; */ public class NoSubscriptionInfo extends SubscriptionInfo { - /** - * - */ public NoSubscriptionInfo() { super(null, null, null, null); } - /** - * @see org.olat.core.commons.services.notifications.SubscriptionInfo#getSpecificInfo(java.lang.String) - */ - public String getSpecificInfo(String mimeType) { + @Override + public String getSpecificInfo(String mimeType, Locale locale) { return ""; } - /** - * @see org.olat.core.commons.services.notifications.SubscriptionInfo#hasNews() - */ + @Override public boolean hasNews() { return false; } @@ -68,6 +63,5 @@ public class NoSubscriptionInfo extends SubscriptionInfo { public String getCustomUrl() { return null; } - } diff --git a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java index 3abe3cedee1f87d44925ee8c0c76e4c9206d70f9..adec8f63db5d0e90a675e43dcd49e5480d035a66 100644 --- a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java +++ b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java @@ -76,7 +76,7 @@ public class BreadcrumbedStackedPanel extends Panel implements StackedPanel, Bre // Add back link before the bread crumbs, when pressed delegates click to current bread-crumb - 1 closeLink = LinkFactory.createCustomLink("close", "close", null, Link.NONTRANSLATED + Link.LINK_CUSTOM_CSS, null, this); closeLink.setIconLeftCSS("o_icon o_icon_close_tab"); - closeLink.setCustomDisplayText(translator.translate("doclose")); + closeLink.setCustomDisplayText(translator.translate("close")); closeLink.setAccessKey("x"); // allow navigation using keyboard } diff --git a/src/main/java/org/olat/core/id/context/HistoryManager.java b/src/main/java/org/olat/core/id/context/HistoryManager.java index 583e5793b56e4e52e36b3d6ab797cf55cb0a8653..fd641af6c7e3c09ba596bf240c14f9d3af385de5 100644 --- a/src/main/java/org/olat/core/id/context/HistoryManager.java +++ b/src/main/java/org/olat/core/id/context/HistoryManager.java @@ -65,6 +65,7 @@ public class HistoryManager extends BasicManager { historyReadStream.omitField(RepositoryEntry.class, "participantGroup"); historyReadStream.omitField(RepositoryEntry.class, "tutorGroup"); historyReadStream.omitField(RepositoryEntry.class, "metaDataElements"); + historyReadStream.alias("org.olat.core.util.resource.OresHelper$1", Resourceable.class); historyReadStream.alias("org.olat.core.util.resource.OresHelper$2", Resourceable.class); historyReadStream.alias("org.olat.core.util.resource.OresHelper$3", Resourceable.class); diff --git a/src/main/java/org/olat/core/util/mail/MailHelper.java b/src/main/java/org/olat/core/util/mail/MailHelper.java index 4726711c64074493078382fce23e79f05a7731fd..440cda4f91fb08bb6795dce3ba68a12da6100b4e 100644 --- a/src/main/java/org/olat/core/util/mail/MailHelper.java +++ b/src/main/java/org/olat/core/util/mail/MailHelper.java @@ -71,7 +71,10 @@ public class MailHelper { } public static String getMailFooter(MailBundle bundle) { - return getMailFooter(bundle.getFromId()); + if(bundle.getFromId() != null) { + return getMailFooter(bundle.getFromId()); + } + return getMailFooter(I18nModule.getDefaultLocale()); } diff --git a/src/main/java/org/olat/core/util/prefs/db/DbStorage.java b/src/main/java/org/olat/core/util/prefs/db/DbStorage.java index d5ec81d572b9b75e033c99f9d21b9db627ddbcc3..994aee976cd4fe80390cd0ee9ebfc5c7674fd360 100644 --- a/src/main/java/org/olat/core/util/prefs/db/DbStorage.java +++ b/src/main/java/org/olat/core/util/prefs/db/DbStorage.java @@ -116,7 +116,7 @@ public class DbStorage extends LogDelegator implements PreferencesStorage{ private DbPrefs getPreferencesForProperty(Identity identity, Property guiProperty) { DbPrefs prefs; try { - prefs = createDbPrefsFrom(identity, guiProperty, guiProperty.getTextValue()); + prefs = createDbPrefsFrom(identity, guiProperty.getTextValue()); } catch (Exception e) { prefs = doGuiPrefsMigration( guiProperty, identity); } @@ -130,7 +130,7 @@ public class DbStorage extends LogDelegator implements PreferencesStorage{ return prefs; } - private DbPrefs createDbPrefsFrom(Identity identity, Property guiProperty, String textValue) { + private DbPrefs createDbPrefsFrom(Identity identity, String textValue) { DbPrefs prefs = (DbPrefs) xstream.fromXML(textValue); prefs.setIdentity(identity); // reset transient value return prefs; @@ -140,7 +140,7 @@ public class DbStorage extends LogDelegator implements PreferencesStorage{ String migratedTextValue = doCalendarRefactoringMigration(guiProperty.getTextValue()); // add new migration methode here try { - return createDbPrefsFrom(identity, guiProperty, migratedTextValue); + return createDbPrefsFrom(identity, migratedTextValue); } catch (Exception e) { // Migration failed => return empty db-prefs return createEmptyDbPrefs(identity,false); diff --git a/src/main/java/org/olat/course/CourseFactory.java b/src/main/java/org/olat/course/CourseFactory.java index e82f4c620edf9f5b80bec75da0611015b5fda8c7..ff3a7d6d91d7be27ea01d3191d0b4d170c52fa7a 100644 --- a/src/main/java/org/olat/course/CourseFactory.java +++ b/src/main/java/org/olat/course/CourseFactory.java @@ -294,19 +294,11 @@ public class CourseFactory extends BasicManager { OLATResourceable courseResourceable = OresHelper.createOLATResourceableInstance(PersistingCourseImpl.class, resourceableId); course = CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(courseResourceable, new SyncerCallback<PersistingCourseImpl>() { public PersistingCourseImpl execute() { - PersistingCourseImpl theCourse = null; - theCourse = getCourseFromCache(resourceableId); + PersistingCourseImpl theCourse = getCourseFromCache(resourceableId); if (theCourse == null) { - long startTime = 0; - long endTime = 0; - if (log.isDebug()) startTime = System.currentTimeMillis(); theCourse = new PersistingCourseImpl(resourceableId); theCourse.load(); - if (log.isDebug()) endTime = System.currentTimeMillis(); putCourseInCache(resourceableId, theCourse); - long diff = 0; - if (log.isDebug()) diff = Long.valueOf(endTime - startTime); - if (log.isDebug()) log.debug("[[" + resourceableId + "[[" + diff + "[[" + theCourse.getCourseTitle()); } return theCourse; } diff --git a/src/main/java/org/olat/course/PersistingCourseImpl.java b/src/main/java/org/olat/course/PersistingCourseImpl.java index 656700a9f86c33070009270035a6ec2fef4b5390..26c9f60dcbff4acc4bc1c40e49e2d609a46f2779 100644 --- a/src/main/java/org/olat/course/PersistingCourseImpl.java +++ b/src/main/java/org/olat/course/PersistingCourseImpl.java @@ -126,7 +126,7 @@ public class PersistingCourseImpl implements ICourse, OLATResourceable, Serializ // prepare filesystem and set course base path and course folder paths prepareFilesystem(); courseConfig = CourseConfigManagerImpl.getInstance().loadConfigFor(this); // load or init defaults - courseEnvironment = new CourseEnvironmentImpl(this); + courseEnvironment = new CourseEnvironmentImpl(this); } diff --git a/src/main/java/org/olat/course/assessment/EfficiencyStatementManager.java b/src/main/java/org/olat/course/assessment/EfficiencyStatementManager.java index c03e1e59ba2947acd3405e70a2faa289cfc858da..0329bc61641b901fd7e2831adb2dbe544a0ab3cc 100644 --- a/src/main/java/org/olat/course/assessment/EfficiencyStatementManager.java +++ b/src/main/java/org/olat/course/assessment/EfficiencyStatementManager.java @@ -34,8 +34,6 @@ import java.util.List; import java.util.Map; import org.olat.core.commons.persistence.DB; -import org.olat.core.commons.persistence.DBFactory; -import org.olat.core.commons.persistence.DBQuery; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.manager.BasicManager; @@ -281,10 +279,11 @@ public class EfficiencyStatementManager extends BasicManager implements UserData sb.append("select statement from ").append(UserEfficiencyStatementImpl.class.getName()).append(" as statement ") .append(" where statement.identity.key=:identityKey and statement.courseRepoKey=:repoKey"); - DBQuery query = dbInstance.createQuery(sb.toString()); - query.setLong("identityKey", identity.getKey()); - query.setLong("repoKey", courseRepoEntryKey); - List<UserEfficiencyStatementImpl> statement = query.list(); + List<UserEfficiencyStatementImpl> statement = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), UserEfficiencyStatementImpl.class) + .setParameter("identityKey", identity.getKey()) + .setParameter("repoKey", courseRepoEntryKey) + .getResultList(); if(statement.isEmpty()) { return null; } @@ -301,10 +300,11 @@ public class EfficiencyStatementManager extends BasicManager implements UserData sb.append("select statement from ").append(UserEfficiencyStatementLight.class.getName()).append(" as statement ") .append(" where statement.identity.key=:identityKey and statement.courseRepoKey=:repoKey"); - DBQuery query = dbInstance.createQuery(sb.toString()); - query.setLong("identityKey", identity.getKey()); - query.setLong("repoKey", courseRepoEntryKey); - List<UserEfficiencyStatement> statement = query.list(); + List<UserEfficiencyStatement> statement = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), UserEfficiencyStatement.class) + .setParameter("identityKey", identity.getKey()) + .setParameter("repoKey", courseRepoEntryKey) + .getResultList(); if(statement.isEmpty()) { return null; } @@ -321,9 +321,10 @@ public class EfficiencyStatementManager extends BasicManager implements UserData sb.append("select statement from ").append(UserEfficiencyStatementImpl.class.getName()).append(" as statement ") .append(" where statement.key=:key"); - DBQuery query = dbInstance.createQuery(sb.toString()); - query.setLong("key", key); - List<UserEfficiencyStatementImpl> statement = query.list(); + List<UserEfficiencyStatementImpl> statement = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), UserEfficiencyStatementImpl.class) + .setParameter("key", key) + .getResultList(); if(statement.isEmpty()) { return null; } @@ -426,15 +427,14 @@ public class EfficiencyStatementManager extends BasicManager implements UserData protected List<EfficiencyStatement> findEfficiencyStatements(Identity identity) { List<EfficiencyStatement> efficiencyStatements = new ArrayList<EfficiencyStatement>(); try { - dbInstance = DBFactory.getInstance(); - StringBuilder sb = new StringBuilder(); sb.append("select statement from ").append(UserEfficiencyStatementImpl.class.getName()).append(" as statement ") .append(" where statement.identity.key=:identityKey"); - DBQuery query = dbInstance.createQuery(sb.toString()); - query.setLong("identityKey", identity.getKey()); - List<UserEfficiencyStatementImpl> statements = query.list(); + List<UserEfficiencyStatementImpl> statements = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), UserEfficiencyStatementImpl.class) + .setParameter("identityKey", identity.getKey()) + .getResultList(); for(UserEfficiencyStatementImpl statement:statements) { EfficiencyStatement s = (EfficiencyStatement)xstream.fromXML(statement.getStatementXml()); efficiencyStatements.add(s); @@ -474,10 +474,10 @@ public class EfficiencyStatementManager extends BasicManager implements UserData sb.append("select distinct(statement.identity) from ").append(UserEfficiencyStatementImpl.class.getName()).append(" as statement ") .append(" where statement.courseRepoKey=:repoKey"); - DBQuery query = dbInstance.createQuery(sb.toString()); - query.setLong("repoKey", courseRepoEntryKey); - List<Identity> identities = query.list(); - return identities; + return dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), Identity.class) + .setParameter("repoKey", courseRepoEntryKey) + .getResultList(); } catch (Exception e) { logError("findIdentitiesWithEfficiencyStatements: " + courseRepoEntryKey, e); return Collections.emptyList(); @@ -495,9 +495,10 @@ public class EfficiencyStatementManager extends BasicManager implements UserData sb.append("select statement from ").append(UserEfficiencyStatementImpl.class.getName()).append(" as statement ") .append(" where statement.courseRepoKey=:repoKey"); - DBQuery query = dbInstance.createQuery(sb.toString()); - query.setLong("repoKey", courseRepoEntryKey); - List<UserEfficiencyStatementImpl> statements = query.list(); + List<UserEfficiencyStatementImpl> statements = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), UserEfficiencyStatementImpl.class) + .setParameter("repoKey", courseRepoEntryKey) + .getResultList(); for(UserEfficiencyStatementImpl statement:statements) { dbInstance.deleteObject(statement); } diff --git a/src/main/java/org/olat/course/editor/PublishStep01.java b/src/main/java/org/olat/course/editor/PublishStep01.java index 7e212089cd1250e41b3334a7187c8bc4f26b765d..740ebfc551ba2d253bd6e5fd2d1923c83543d400 100644 --- a/src/main/java/org/olat/course/editor/PublishStep01.java +++ b/src/main/java/org/olat/course/editor/PublishStep01.java @@ -48,7 +48,7 @@ import org.olat.course.ICourse; import org.olat.login.LoginModule; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryModule; -import org.olat.repository.ui.author.PropPupForm; +import org.olat.repository.RepositoryService; /** * Description:<br> @@ -129,9 +129,9 @@ class PublishStep01 extends BasicStep { @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { - Translator pt = Util.createPackageTranslator(PropPupForm.class, getLocale(), getTranslator()); + Translator pt = Util.createPackageTranslator(RepositoryService.class, getLocale(), getTranslator()); - FormItemContainer fic = FormLayoutContainer.createCustomFormLayout("access", pt, this.velocity_root+"/publish_courseaccess.html"); + FormItemContainer fic = FormLayoutContainer.createCustomFormLayout("access", pt, velocity_root + "/publish_courseaccess.html"); formLayout.add(fic); List<String> keyList = new ArrayList<String>(); diff --git a/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java b/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java index cfb3478500adb266d5b23e6df2daf2ebf566ce8b..0497e41d0d330e70c9009befc8879fd33ea64dd0 100644 --- a/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java +++ b/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java @@ -56,7 +56,9 @@ import org.olat.course.run.userview.NodeEvaluation; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.modules.ModuleConfiguration; 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.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryImportExport; import org.olat.repository.RepositoryManager; @@ -426,8 +428,11 @@ public class PortfolioCourseNode extends AbstractAccessableCourseNode implements RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(EPTemplateMapResource.TYPE_NAME); RepositoryEntry re = handler.importResource(owner, rie.getDisplayName(), rie.getDescription(), false, locale, rie.importGetExportedFile(), null); - //TODO missing map - PortfolioCourseNodeEditController.setReference(re, null, getModuleConfiguration()); + if(re != null) { + EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class); + PortfolioStructure map = ePFMgr.loadPortfolioStructure(re.getOlatResource()); + PortfolioCourseNodeEditController.setReference(re, map, getModuleConfiguration()); + } } } } \ No newline at end of file diff --git a/src/main/java/org/olat/ims/qti/repository/handlers/QTISurveyHandler.java b/src/main/java/org/olat/ims/qti/repository/handlers/QTISurveyHandler.java index cad6852aa4aeeb0577bc8b09cf3e52f3b5611e72..1726e0620784f752f8bb770bcfb152ff2fcbe6fe 100644 --- a/src/main/java/org/olat/ims/qti/repository/handlers/QTISurveyHandler.java +++ b/src/main/java/org/olat/ims/qti/repository/handlers/QTISurveyHandler.java @@ -26,7 +26,6 @@ package org.olat.ims.qti.repository.handlers; import java.io.File; -import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -68,18 +67,6 @@ import de.bps.onyx.plugin.run.OnyxRunController; * */ public class QTISurveyHandler extends QTIHandler { - private static final boolean LAUNCHEABLE = true; - private static final boolean DOWNLOADEABLE = true; - private static final boolean EDITABLE = true; - - static List<String> supportedTypes; - - /** - * Default constructor. - */ - public QTISurveyHandler() { - super(); - } @Override public boolean isCreate() { @@ -108,43 +95,30 @@ public class QTISurveyHandler extends QTIHandler { return super.importResource(initialAuthor, displayname, description, new SurveyFileResource(), file, filename); } - /** - * @see org.olat.repository.handlers.RepositoryHandler#getSupportedTypes() - */ - public List<String> getSupportedTypes() { - return supportedTypes; + @Override + public String getSupportedType() { + return SurveyFileResource.TYPE_NAME; } - static { // initialize supported types - supportedTypes = new ArrayList<String>(1); - supportedTypes.add(SurveyFileResource.TYPE_NAME); - } - - /** - * @see org.olat.repository.handlers.RepositoryHandler#supportsLaunch() - */ + @Override public boolean supportsLaunch(RepositoryEntry repoEntry) { - return LAUNCHEABLE; + return true; } - /** - * @see org.olat.repository.handlers.RepositoryHandler#supportsDownload() - */ + + @Override public boolean supportsDownload(RepositoryEntry repoEntry) { - return DOWNLOADEABLE; + return true; } - /** - * @see org.olat.repository.handlers.RepositoryHandler#supportsEdit() - */ + + @Override public boolean supportsEdit(RepositoryEntry repoEntry) { if (OnyxModule.isOnyxTest(repoEntry.getOlatResource())) { return false; } - return EDITABLE; + return true; } - /** - * @see org.olat.repository.handlers.RepositoryHandler#getCreateWizardController(org.olat.core.id.OLATResourceable, org.olat.core.gui.UserRequest, org.olat.core.gui.control.WindowControl) - */ + @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."); } @@ -174,9 +148,6 @@ public class QTISurveyHandler extends QTIHandler { return layoutCtr; } - /** - * @see org.olat.repository.handlers.RepositoryHandler#getEditorController(org.olat.core.id.OLATResourceable org.olat.core.gui.UserRequest, org.olat.core.gui.control.WindowControl) - */ @Override public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl) { OLATResource res = re.getOlatResource(); @@ -199,11 +170,13 @@ public class QTISurveyHandler extends QTIHandler { return null; } } - + + @Override protected String getDeletedFilePrefix() { return "del_qtisurvey_"; } - + + @Override public WizardCloseResourceController createCloseResourceController(UserRequest ureq, WindowControl wControl, RepositoryEntry repositoryEntry) { throw new AssertException("not implemented"); } diff --git a/src/main/java/org/olat/ims/qti/repository/handlers/QTITestHandler.java b/src/main/java/org/olat/ims/qti/repository/handlers/QTITestHandler.java index 785f7e81ab543a4c695552f1c651681b1b2df4ca..5837e7b100da544333ae57f37dcb852342451e8f 100644 --- a/src/main/java/org/olat/ims/qti/repository/handlers/QTITestHandler.java +++ b/src/main/java/org/olat/ims/qti/repository/handlers/QTITestHandler.java @@ -26,7 +26,6 @@ package org.olat.ims.qti.repository.handlers; import java.io.File; -import java.util.Collections; import java.util.List; import java.util.Locale; @@ -68,13 +67,6 @@ import de.bps.onyx.plugin.run.OnyxRunController; * */ public class QTITestHandler extends QTIHandler { - - private static List<String> supportedTypes = Collections.singletonList(TestFileResource.TYPE_NAME); - - /** - * Default construcotr. - */ - public QTITestHandler() { super(); } @Override public boolean isCreate() { @@ -104,8 +96,8 @@ public class QTITestHandler extends QTIHandler { } @Override - public List<String> getSupportedTypes() { - return supportedTypes; + public String getSupportedType() { + return TestFileResource.TYPE_NAME; } @Override diff --git a/src/main/java/org/olat/login/AfterLoginInterceptionController.java b/src/main/java/org/olat/login/AfterLoginInterceptionController.java index d87eafb5a31e7f45d95ec2c5662d73bd1b6de60a..3170b4acf34083f73bf6224647bc6b399e7a0354 100644 --- a/src/main/java/org/olat/login/AfterLoginInterceptionController.java +++ b/src/main/java/org/olat/login/AfterLoginInterceptionController.java @@ -153,7 +153,7 @@ public class AfterLoginInterceptionController extends BasicController { listenTo(wiz); // get first Ctrl into Wizard - putControllerToPanel(ureq, wControl, 0); + putControllerToPanel(0); vC.put("actualPanel", actualPanel); cmc = new CloseableModalController(getWindowControl(), translate("close"), vC, true, translate("runonce.title"), false); @@ -201,7 +201,7 @@ public class AfterLoginInterceptionController extends BasicController { * @param wControl * @param ctrNr */ - private void putControllerToPanel(UserRequest ureq, WindowControl wControl, int ctrNr) { + private void putControllerToPanel(int ctrNr) { if (aftctrls.get(ctrNr) == null) return; actualCtrNr = ctrNr; wiz.setCurStep(ctrNr + 1); @@ -277,7 +277,7 @@ public class AfterLoginInterceptionController extends BasicController { */ private void activateNextOrCloseModal(UserRequest ureq){ if ((actualCtrNr + 1) < aftctrls.size()) { - putControllerToPanel(ureq, getWindowControl(), actualCtrNr + 1); + putControllerToPanel(actualCtrNr + 1); } else { removeAsListenerAndDispose(actCtrl); cmc.deactivate(); diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java index 1a6baf9138f3e1ed893e2c47fa28e5091b0c699c..e47f6973dfcb9267fd6a7a1c7536f21a954c07f6 100644 --- a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java +++ b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java @@ -80,6 +80,7 @@ import org.olat.repository.handlers.RepositoryHandler; import org.olat.repository.handlers.RepositoryHandlerFactory; import org.olat.repository.ui.author.CreateRepositoryEntryController; import org.olat.search.service.indexer.LifeFullIndexer; +import org.springframework.beans.factory.annotation.Autowired; /** * @@ -122,15 +123,16 @@ public class QuestionListController extends AbstractItemListController implement private ReferencableEntriesSearchController importTestCtrl; private QuestionItemCollection itemCollection; - - private final LifeFullIndexer lifeFullIndexer; - private final RepositoryManager repositoryManager; + + @Autowired + private LifeFullIndexer lifeFullIndexer; + @Autowired + private RepositoryManager repositoryManager; + @Autowired + private RepositoryHandlerFactory repositoryHandlerFactory; public QuestionListController(UserRequest ureq, WindowControl wControl, QuestionItemsSource source, String key) { super(ureq, wControl, source, key); - - lifeFullIndexer = CoreSpringFactory.getImpl(LifeFullIndexer.class); - repositoryManager = CoreSpringFactory.getImpl(RepositoryManager.class); } @Override @@ -639,8 +641,8 @@ public class QuestionListController extends AbstractItemListController implement removeAsListenerAndDispose(addController); String type = TestFileResource.TYPE_NAME; - RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(type); - addController = new CreateRepositoryEntryController(ureq, getWindowControl(), type, handler); + RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(type); + addController = new CreateRepositoryEntryController(ureq, getWindowControl(), handler); addController.setUserObject(new QItemList(items)); listenTo(addController); cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent()); diff --git a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java index 96c2bc52dfb4d3735fee37acfcd12668e2c7c3a2..38ff0314b2571e473deb7c8fcce343ca478c5c2d 100755 --- a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java +++ b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java @@ -1541,13 +1541,13 @@ public class EPStructureManager extends BasicManager { StringBuilder sb = new StringBuilder(); sb.append("select element from ").append(EPStructureElement.class.getName()).append(" element") .append(" left join fetch element.olatResource as oRes") - .append(" left join fetch element.group as baseGroup"); + .append(" left join fetch element.group as baseGroup") + .append(" where element.key=:key");; - DBQuery query = dbInstance.createQuery(sb.toString()); - query.setLong("key", key); - - @SuppressWarnings("unchecked") - List<PortfolioStructure> resources = query.list(); + 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); 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 index f02902fad10fc21b948f1758bf71af3bc364f819..e20b126fdd2d691ee5923bd1c3a70c7affac92a3 100644 --- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_ar.properties +++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_ar.properties @@ -40,6 +40,8 @@ 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 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 index dbf9c0c338f7829abf9e9c7f7638315a8f847258..c3ac415340a47cd11a377bda729bd0785e83e49d 100644 --- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_de.properties @@ -69,8 +69,8 @@ othermaps.intro=$\:othermaps.menu.title.alt othermap.title=$\:admin.menu.title - Mappe othermap.intro=$\:othermaps.menu.title.alt -site.title=ePortfolio - +site.title=$\:admin.menu.title +site.title.alt=$\:admin.menu.title viewTab.all=Artefakte viewTab.browse=Tag-Browser viewTab.search=Suche 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 index 72602daad4c4cb317b2bab3dbf850482f05da19c..c0aa0f9757f2b05674087cde987eae4cc7d33153 100644 --- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_en.properties @@ -56,6 +56,8 @@ portfolio.intro=With this you can (de)activate the entire ePortfolio functionali 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 +site.title=$\:admin.menu.title +site.title.alt=$\:admin.menu.title view.mode=View\: view.mode.details=Details view.mode.table=Table 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 index dd810faf63eae4bb3ac05ffbfb5e0b9f6787d48e..e2f741614a2c93f4e710bdfd8097d73e9631a0d4 100644 --- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_fr.properties @@ -56,6 +56,8 @@ portfolio.intro=Toutes les fonctions de l'ePortfolio peuvent \u00EAtre activ\u00 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 +site.title=$\:admin.menu.title +site.title.alt=$\:admin.menu.title view.mode=Affichage\: view.mode.details=D\u00E9tails view.mode.table=Tableau 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 index 122fce4a45d7509f5bfa8d2ea950b6ac8d31b7bb..3210b87fc8cdae3e19653c7cbdfac6c478ab9fbc 100644 --- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_it.properties @@ -55,6 +55,8 @@ othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title portfolio.intro=Tutte le funzioni dell'ePortfolio possono essere attivate o disattivate. portfolio.module.enabled=Attivare ePortfolio portfolio.title=$\:admin.menu.title +site.title=$\:admin.menu.title +site.title.alt=$\:admin.menu.title view.mode=Visualizzazione\: view.mode.details=Dettagli view.mode.table=Tabella 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 index 0be404ee7f6b450d89af69679b4626b88eb07bec..4bbd61c25f583696c0e4e50d9a238c2b1444f198 100644 --- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_jp.properties +++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_jp.properties @@ -54,6 +54,8 @@ 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 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 index 5f6be12a537561d880a3bde81109b9675a653716..0cae4c495d481f09675d796879433d85643d40bf 100644 --- 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 @@ -55,6 +55,8 @@ 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 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 index 89ae0816b4d9c304f67f62f90e2e586cad94c4e3..faf58a361d0fc934cbcdcc132d637ac999f1cb21 100644 --- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_pl.properties @@ -41,6 +41,8 @@ portfolio.intro=Mo\u017Cesz tu w\u0142\u0105czy\u0107 lub wy\u0142\u0105czy\u010 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 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 index 74e18e6a5b597cd1301a8c2d4c60736979d1088a..b2eef955edfbd5fc9a21be5010194e7ffeb1aa8d 100644 --- 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 @@ -56,6 +56,8 @@ portfolio.intro=Com isso voc\u00EA pode (des)ativar a funcionalidade ePortfolio 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 +site.title=$\:admin.menu.title +site.title.alt=$\:admin.menu.title view.mode=Visualizar\: view.mode.details=Detalhes view.mode.table=Tabela 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 index f8ffff39529cc1fddfe5619f167608511b7af095..2fc9658334e476ee6bbbdf5ec3395215dd49baac 100644 --- 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 @@ -55,6 +55,8 @@ othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title portfolio.intro=\u901A\u8FC7\u6B64\u529F\u80FD\uFF0C\u60A8\u53EF\u4EE5\uFF08\u64A4\u9500\uFF09\u6FC0\u6D3BOLAT\u4E2D\u7684\u6574\u4E2A\u7535\u5B50\u6587\u6863\u7684\u529F\u80FD\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 diff --git a/src/main/java/org/olat/repository/RepositoryEntry.java b/src/main/java/org/olat/repository/RepositoryEntry.java index 87787bab5c2f79957cd77a03b9051876504d30b8..a340c04b1c21d40534c413b519088af3f4c0151e 100644 --- a/src/main/java/org/olat/repository/RepositoryEntry.java +++ b/src/main/java/org/olat/repository/RepositoryEntry.java @@ -197,8 +197,9 @@ public class RepositoryEntry implements CreateInfo, Persistable , RepositoryEntr * @param softkey */ public void setSoftkey(String softkey) { - if (softkey.length() > 36) + if (softkey.length() > 36) { throw new AssertException("Trying to set a softkey which is too long..."); + } this.softkey = softkey; } diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java index 11d22005b96746e7857e97dec8ab14650f11a029..d0873bf20f2a5eefaaca52cd6c48cfac98ce3423 100644 --- a/src/main/java/org/olat/repository/RepositoryManager.java +++ b/src/main/java/org/olat/repository/RepositoryManager.java @@ -36,9 +36,9 @@ import java.util.List; import java.util.Map; import javax.persistence.LockModeType; +import javax.persistence.Query; import javax.persistence.TypedQuery; -import org.hibernate.type.StandardBasicTypes; import org.olat.admin.securitygroup.gui.IdentitiesAddEvent; import org.olat.basesecurity.BaseSecurity; import org.olat.basesecurity.Group; @@ -1168,23 +1168,23 @@ public class RepositoryManager extends BasicManager { } public int countGenericANDQueryWithRolesRestriction(SearchRepositoryEntryParameters params) { - DBQuery dbQuery = createGenericANDQueryWithRolesRestriction(params, false, true); - Number count = (Number)dbQuery.uniqueResult(); + Query dbQuery = createGenericANDQueryWithRolesRestriction(params, false, true); + Number count = (Number)dbQuery.getSingleResult(); return count.intValue(); } public List<RepositoryEntry> genericANDQueryWithRolesRestriction(SearchRepositoryEntryParameters params, int firstResult, int maxResults, boolean orderBy) { - DBQuery dbQuery = createGenericANDQueryWithRolesRestriction(params, orderBy, false); + Query dbQuery = createGenericANDQueryWithRolesRestriction(params, orderBy, false); dbQuery.setFirstResult(firstResult); if(maxResults > 0) { dbQuery.setMaxResults(maxResults); } - List<RepositoryEntry> res = dbQuery.list(); + List<RepositoryEntry> res = dbQuery.getResultList(); return res; } - private DBQuery createGenericANDQueryWithRolesRestriction(SearchRepositoryEntryParameters params, boolean orderBy, boolean count) { + private Query createGenericANDQueryWithRolesRestriction(SearchRepositoryEntryParameters params, boolean orderBy, boolean count) { String displayName = params.getDisplayName(); String author = params.getAuthor(); String desc = params.getDesc(); @@ -1241,20 +1241,20 @@ public class RepositoryManager extends BasicManager { .append(")))"); } else if (params.isOnlyOwnedResources()) { - query.append(" where v.access>0 and exists (select rel from repoentrytogroup as rel, bgroup as baseGroup, bgroupmember as membership ") + query.append(" where (v.access>0 and exists (select rel from repoentrytogroup as rel, bgroup as baseGroup, bgroupmember as membership ") .append(" where rel.entry=v and rel.group=baseGroup and membership.group=baseGroup") .append(" and membership.identity.key=:identityKey and membership.role='").append(GroupRoles.owner.name()).append("'") - .append(" )"); + .append(" ))"); setIdentity = true; } else if (params.isOnlyExplicitMember()) { - query.append(" where v.access>=").append(RepositoryEntry.ACC_USERS) + query.append(" where (v.access>=").append(RepositoryEntry.ACC_USERS) .append(" or (") .append(" v.access=").append(RepositoryEntry.ACC_OWNERS).append(" and v.membersOnly=true") .append(" and exists (select rel from repoentrytogroup as rel, bgroup as baseGroup, bgroupmember as membership ") .append(" where rel.entry=v and rel.group=baseGroup and membership.group=baseGroup and membership.identity.key=:identityKey ") .append(" and membership.role in ('").append(GroupRoles.owner.name()).append("','").append(GroupRoles.coach.name()).append("','").append(GroupRoles.participant.name()).append("')") .append(" )") - .append(" )"); + .append(" ))"); setIdentity = true; } else { @@ -1333,8 +1333,8 @@ public class RepositoryManager extends BasicManager { if(!count && orderBy) { query.append(" order by v.displayname, v.key ASC"); } - - DBQuery dbQuery = dbInstance.createQuery(query.toString()); + + Query dbQuery = dbInstance.getCurrentEntityManager().createQuery(query.toString()); if(institut) { dbQuery.setParameter("institution", institution); } @@ -1351,10 +1351,10 @@ public class RepositoryManager extends BasicManager { dbQuery.setParameter("desc", desc); } if (var_resourcetypes) { - dbQuery.setParameterList("resourcetypes", resourceTypes, StandardBasicTypes.STRING); + dbQuery.setParameter("resourcetypes", resourceTypes); } if(params.getRepositoryEntryKeys() != null && !params.getRepositoryEntryKeys().isEmpty()) { - dbQuery.setParameterList("entryKeys", params.getRepositoryEntryKeys()); + dbQuery.setParameter("entryKeys", params.getRepositoryEntryKeys()); } if(StringHelper.containsNonWhitespace(params.getExternalId())) { dbQuery.setParameter("externalId", params.getExternalId()); diff --git a/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java b/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java index 4979f0e9ed0033866a3b9eb7b57945b3ed4099b3..ef7851879a41d2aed9cde16300e79bba578b4929 100644 --- a/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java +++ b/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java @@ -32,6 +32,7 @@ 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.dropdown.Dropdown; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.LinkFactory; import org.olat.core.gui.components.segmentedview.SegmentViewComponent; @@ -55,13 +56,14 @@ import org.olat.ims.qti.fileresource.SurveyFileResource; import org.olat.ims.qti.fileresource.TestFileResource; import org.olat.portfolio.EPTemplateMapResource; import org.olat.repository.RepositoryEntry; -import org.olat.repository.RepositoryManager; +import org.olat.repository.RepositoryService; import org.olat.repository.controllers.RepositorySearchController.Can; import org.olat.repository.handlers.RepositoryHandler; import org.olat.repository.handlers.RepositoryHandlerFactory; import org.olat.repository.ui.RepositoryTableModel; import org.olat.repository.ui.author.CreateRepositoryEntryController; import org.olat.repository.ui.author.ImportRepositoryEntryController; +import org.springframework.beans.factory.annotation.Autowired; /** * @@ -91,7 +93,10 @@ public class ReferencableEntriesSearchController extends BasicController { private SegmentViewComponent segmentView; private Link myEntriesLink, allEntriesLink, searchEntriesLink, adminEntriesLink; - private Link createRessourceButton, importRessourceButton; + private Link importRessourceButton; + private Component createRessourceCmp; + private List<Link> createRessourceButtons; + private CreateRepositoryEntryController createController; private ImportRepositoryEntryController importController; private CloseableModalController cmc; @@ -104,10 +109,12 @@ public class ReferencableEntriesSearchController extends BasicController { private final Can canBe; private Object userObject; + + @Autowired + private RepositoryHandlerFactory repositoryHandlerFactory; public ReferencableEntriesSearchController(WindowControl wControl, UserRequest ureq, String limitType, String commandLabel) { - this(wControl, ureq, new String[]{limitType}, null, commandLabel, true, true, true, false, false, Can.referenceable); - setBasePackage(RepositoryManager.class); + this(wControl, ureq, new String[]{ limitType }, null, commandLabel, true, true, true, false, false, Can.referenceable); } public ReferencableEntriesSearchController(WindowControl wControl, UserRequest ureq, String[] limitTypes, String commandLabel) { @@ -129,7 +136,7 @@ public class ReferencableEntriesSearchController extends BasicController { this.canImport = canImport; this.canCreate = canCreate; this.limitTypes = limitTypes; - setBasePackage(RepositoryManager.class); + setBasePackage(RepositoryService.class); mainVC = createVelocityContainer("referencableSearch"); if(limitTypes != null && limitTypes.length == 1 && limitTypes[0] != null) { @@ -142,8 +149,21 @@ public class ReferencableEntriesSearchController extends BasicController { // do instantiate buttons if (canCreate && isCreateButtonVisible()) { - createRessourceButton = LinkFactory.createButtonSmall("cmd.create.ressource", mainVC, this); - createRessourceButton.setElementCssClass("o_sel_repo_popup_create_resource"); + if(limitTypes != null && limitTypes.length == 1) { + Link createButton = LinkFactory.createButtonSmall("cmd.create.ressource", mainVC, this); + createButton.setElementCssClass("o_sel_repo_popup_create_resource"); + RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(limitTypes[0]); + createButton.setUserObject(handler); + createRessourceCmp = createButton; + } else if(limitTypes != null && limitTypes.length > 1) { + Dropdown dropdown = new Dropdown("cmd.create.ressource", "cmd.create.ressource", false, getTranslator()); + for(String limitType:limitTypes) { + RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(limitType); + Link createLink = LinkFactory.createLink(handler.getSupportedType(), getTranslator(), this); + dropdown.addComponent(createLink); + } + createRessourceCmp = dropdown; + } } if (canImport && isImportButtonVisible()) { importRessourceButton = LinkFactory.createButtonSmall("cmd.import.ressource", mainVC, this); @@ -263,11 +283,7 @@ public class ReferencableEntriesSearchController extends BasicController { return selectedRepositoryEntries; } - /** - * @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 public void event(UserRequest ureq, Component source, Event event) { if(source == segmentView) { if(event instanceof SegmentViewEvent) { @@ -294,11 +310,10 @@ public class ReferencableEntriesSearchController extends BasicController { searchCtr.displayAdminSearchForm(); } } - } else if(source == createRessourceButton) { + } else if(source == createRessourceCmp || createRessourceButtons.contains(source)) { removeAsListenerAndDispose(createController); - String type = null; - RepositoryHandler handler = null; - createController = new CreateRepositoryEntryController(ureq, getWindowControl(), type, handler); + RepositoryHandler handler = (RepositoryHandler)((Link)source).getUserObject(); + createController = new CreateRepositoryEntryController(ureq, getWindowControl(), handler); listenTo(createController); removeAsListenerAndDispose(cmc); @@ -322,11 +337,7 @@ public class ReferencableEntriesSearchController extends BasicController { } } - - /** - * @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 public void event(UserRequest ureq, Controller source, Event event) { String cmd = event.getCommand(); if (source == searchCtr) { diff --git a/src/main/java/org/olat/repository/controllers/RepositorySearchController.java b/src/main/java/org/olat/repository/controllers/RepositorySearchController.java index e8d0ea0d436bf18306a5bc71ff6aace3c6b4cc77..b9c84435e5199261b4c01f1bc81bd9f2b83dc6df 100644 --- a/src/main/java/org/olat/repository/controllers/RepositorySearchController.java +++ b/src/main/java/org/olat/repository/controllers/RepositorySearchController.java @@ -50,7 +50,6 @@ 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.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.id.Roles; import org.olat.core.id.UserConstants; @@ -59,6 +58,7 @@ import org.olat.core.id.context.StateEntry; import org.olat.core.util.Util; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; +import org.olat.repository.RepositoryService; import org.olat.repository.model.SearchRepositoryEntryParameters; import org.olat.repository.ui.RepositoryTableModel; @@ -79,10 +79,9 @@ import org.olat.repository.ui.RepositoryTableModel; */ public class RepositorySearchController extends BasicController implements Activateable2 { - private static final String VELOCITY_ROOT = Util.getPackageVelocityRoot(RepositoryManager.class); + private static final String VELOCITY_ROOT = Util.getPackageVelocityRoot(RepositorySearchController.class); protected VelocityContainer vc; - protected Translator translator; protected RepositoryTableModel repoTableModel; protected SearchForm searchForm; protected TableController tableCtr; @@ -106,8 +105,7 @@ public class RepositorySearchController extends BasicController implements Activ */ public RepositorySearchController(String selectButtonLabel, UserRequest ureq, WindowControl myWControl, boolean withCancel, boolean enableDirectLaunch, boolean multiSelect) { - //fxdiff VCRP-10: repository search with type filter - super(ureq, myWControl, Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale())); + super(ureq, myWControl, Util.createPackageTranslator(RepositoryService.class, ureq.getLocale())); init(selectButtonLabel, ureq, withCancel, enableDirectLaunch, multiSelect, new String[]{}, null); } @@ -127,8 +125,7 @@ public class RepositorySearchController extends BasicController implements Activ public RepositorySearchController(String selectButtonLabel, UserRequest ureq, WindowControl myWControl, boolean withCancel, boolean enableDirectLaunch, boolean multiSelect, String[] limitTypes, RepositoryEntryFilter filter) { - //fxdiff VCRP-10: repository search with type filter - super(ureq, myWControl, Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale())); + super(ureq, myWControl, Util.createPackageTranslator(RepositoryService.class, ureq.getLocale())); init(selectButtonLabel, ureq, withCancel, enableDirectLaunch, multiSelect, limitTypes, filter); } @@ -136,18 +133,16 @@ public class RepositorySearchController extends BasicController implements Activ * @param myWControl */ public RepositorySearchController(UserRequest ureq, WindowControl myWControl) { - //fxdiff VCRP-10: repository search with type filter - super(ureq, myWControl, Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale())); + super(ureq, myWControl, Util.createPackageTranslator(RepositoryService.class, ureq.getLocale())); } private void init(String selectButtonLabel, UserRequest ureq, boolean withCancel, boolean enableDirectLaunch, boolean multiSelect, String[] limitTypes, RepositoryEntryFilter filter) { this.filter = filter; - translator = Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale()); Roles roles = ureq.getUserSession().getRoles(); - vc = new VelocityContainer("reposearch", VELOCITY_ROOT + "/search.html", translator, this); + vc = new VelocityContainer("reposearch", VELOCITY_ROOT + "/search.html", getTranslator(), this); removeAsListenerAndDispose(searchForm); searchForm = new SearchForm(ureq, getWindowControl(), withCancel, roles.isOLATAdmin(), limitTypes); @@ -161,17 +156,16 @@ public class RepositorySearchController extends BasicController implements Activ tableConfig.setPreferencesOffered(true, "repositorySearchResult_v2"); } - //fxdiff VCRP-10: repository search with type filter - String filterTitle = translator.translate("search.filter.type"); - String noFilterOption = translator.translate("search.filter.showAll"); - tableCtr = new TableController(tableConfig, ureq, getWindowControl(), null, null, filterTitle, noFilterOption, true, translator); + String filterTitle = translate("search.filter.type"); + String noFilterOption = translate("search.filter.showAll"); + tableCtr = new TableController(tableConfig, ureq, getWindowControl(), null, null, filterTitle, noFilterOption, true, getTranslator()); if(multiSelect) { tableCtr.setMultiSelect(multiSelect); tableCtr.addLabeledMultiSelectAction(selectButtonLabel, "mselect"); } listenTo(tableCtr); - repoTableModel = new RepositoryTableModel(translator); + repoTableModel = new RepositoryTableModel(getTranslator()); ColumnDescriptor sortCol = repoTableModel.addColumnDescriptors(tableCtr, selectButtonLabel, enableDirectLaunch); tableCtr.setTableDataModel(repoTableModel); tableCtr.setSortColumn(sortCol, true); diff --git a/src/main/java/org/olat/repository/controllers/SearchForm.java b/src/main/java/org/olat/repository/controllers/SearchForm.java index d9e06e3b529a76dd49bcfdf2fc957c9cc7918301..1eade49a472de95b6066e009a0c23c012ac7e4c9 100644 --- a/src/main/java/org/olat/repository/controllers/SearchForm.java +++ b/src/main/java/org/olat/repository/controllers/SearchForm.java @@ -47,6 +47,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.logging.AssertException; +import org.olat.core.util.Util; import org.olat.course.CourseModule; import org.olat.fileresource.types.AnimationFileResource; import org.olat.fileresource.types.BlogFileResource; @@ -68,6 +69,7 @@ import org.olat.ims.qti.fileresource.SurveyFileResource; import org.olat.ims.qti.fileresource.TestFileResource; import org.olat.portfolio.EPTemplateMapResource; import org.olat.repository.RepositoryModule; +import org.olat.repository.RepositoryService; /** * Initial Date: 08.07.2003 @@ -113,6 +115,12 @@ public class SearchForm extends FormBasicController{ } } + public SearchForm(UserRequest ureq, WindowControl wControl, boolean withCancel, boolean isAdmin, String[] limitTypes) { + this(ureq, wControl, withCancel, isAdmin); + this.limitTypes = limitTypes; + update(); + } + /** * Generic search form. * @param name Internal form name. @@ -121,18 +129,15 @@ public class SearchForm extends FormBasicController{ * @param isAdmin Is calling identity an administrator? If yes, allow search by ID * @param limitTypes Limit searches to specific types. */ - public SearchForm(UserRequest ureq, WindowControl wControl, boolean withCancel, boolean isAdmin) { + private SearchForm(UserRequest ureq, WindowControl wControl, boolean withCancel, boolean isAdmin) { super(ureq, wControl); + setTranslator(Util.createPackageTranslator(RepositoryService.class, getLocale(), getTranslator())); + this.withCancel = withCancel; this.isAdmin = isAdmin; managedEnabled = CoreSpringFactory.getImpl(RepositoryModule.class).isManagedRepositoryEntries(); initForm(ureq); } - public SearchForm(UserRequest ureq, WindowControl wControl, boolean withCancel, boolean isAdmin, String[] limitTypes) { - this(ureq, wControl, withCancel, isAdmin); - this.limitTypes = limitTypes; - update(); - } @Override protected boolean validateFormLogic(UserRequest ureq) { @@ -148,7 +153,9 @@ public class SearchForm extends FormBasicController{ /** * @return Is ID field available? */ - public boolean hasId() { return (id != null && !id.isEmpty()); } + public boolean hasId() { + return (id != null && !id.isEmpty()); + } /** * @return Return value of ID field. @@ -182,7 +189,7 @@ public class SearchForm extends FormBasicController{ } /** - * @return Descritpion field value. + * @return Description field value. */ public String getDescription() { return description.getValue(); diff --git a/src/main/java/org/olat/repository/controllers/_content/results.html b/src/main/java/org/olat/repository/controllers/_content/results.html new file mode 100644 index 0000000000000000000000000000000000000000..776fa38221e27f8df1305e1a5233f0d8295ae2d7 --- /dev/null +++ b/src/main/java/org/olat/repository/controllers/_content/results.html @@ -0,0 +1,24 @@ +#if ($withBack) + $r.render("backLink") + <br /> + <br /> +#end +#if ($isGuest) + <div class="b_warning" >${r.translate("filtered.first")}${r.render("repo.login")}${r.translate("filtered.second")}</div> +#end +$r.render("repotable") +#if ($hasResults) + <div class="b_xsmall">$r.translate("table.header.access.desc")</div> + #if ($withCancel) + <p> + $r.render("cancel") + <p> + #end +#else + <br /> + #if ($withCancel) + <p> + $r.render("cancel") + <p> + #end +#end diff --git a/src/main/java/org/olat/repository/_content/search.html b/src/main/java/org/olat/repository/controllers/_content/search.html similarity index 100% rename from src/main/java/org/olat/repository/_content/search.html rename to src/main/java/org/olat/repository/controllers/_content/search.html diff --git a/src/main/java/org/olat/repository/handlers/BlogHandler.java b/src/main/java/org/olat/repository/handlers/BlogHandler.java index 7b5a3a370037274b08dceb9312188510d861a209..b0ee44eda8308764e843c2aefcf53995aaf4e59a 100644 --- a/src/main/java/org/olat/repository/handlers/BlogHandler.java +++ b/src/main/java/org/olat/repository/handlers/BlogHandler.java @@ -20,8 +20,6 @@ package org.olat.repository.handlers; import java.io.File; -import java.util.Collections; -import java.util.List; import java.util.Locale; import org.olat.core.CoreSpringFactory; @@ -74,8 +72,6 @@ import org.olat.resource.references.ReferenceManager; // Loads of parameters are unused public class BlogHandler implements RepositoryHandler { - private static final List<String> supportedTypes = Collections.singletonList(BlogFileResource.TYPE_NAME); - @Override public boolean isCreate() { return true; @@ -200,8 +196,8 @@ public class BlogHandler implements RepositoryHandler { } @Override - public List<String> getSupportedTypes() { - return supportedTypes; + public String getSupportedType() { + return BlogFileResource.TYPE_NAME; } @Override diff --git a/src/main/java/org/olat/repository/handlers/CourseHandler.java b/src/main/java/org/olat/repository/handlers/CourseHandler.java index 6a578c39cbe20065b834b0f2bf630e306716bc16..e2aee84ad9aededd32778b8bc0774397c471cb51 100644 --- a/src/main/java/org/olat/repository/handlers/CourseHandler.java +++ b/src/main/java/org/olat/repository/handlers/CourseHandler.java @@ -33,8 +33,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; -import java.util.Collections; -import java.util.List; import java.util.Locale; import java.util.UUID; @@ -132,8 +130,6 @@ public class CourseHandler implements RepositoryHandler { public static final String EDITOR_XML = "editortreemodel.xml"; private static final OLog log = Tracing.createLoggerFor(CourseHandler.class); - - private static final List<String> supportedTypes = Collections.singletonList(CourseModule.getCourseTypeName()); @Override public boolean isCreate() { @@ -445,8 +441,8 @@ public class CourseHandler implements RepositoryHandler { } @Override - public List<String> getSupportedTypes() { - return supportedTypes; + public String getSupportedType() { + return CourseModule.getCourseTypeName(); } @Override diff --git a/src/main/java/org/olat/repository/handlers/GlossaryHandler.java b/src/main/java/org/olat/repository/handlers/GlossaryHandler.java index 80e5f9f3c7269f7d994df34c94ddeea9819ac64b..a88f97e7d3af27cbe9c01b2be89f5749aab09268 100644 --- a/src/main/java/org/olat/repository/handlers/GlossaryHandler.java +++ b/src/main/java/org/olat/repository/handlers/GlossaryHandler.java @@ -26,8 +26,6 @@ package org.olat.repository.handlers; import java.io.File; -import java.util.Collections; -import java.util.List; import java.util.Locale; import java.util.Properties; @@ -82,7 +80,6 @@ import org.olat.resource.references.ReferenceManager; */ public class GlossaryHandler implements RepositoryHandler { - private static final List<String> supportedTypes = Collections.singletonList(GlossaryResource.TYPE_NAME); public static final String PROCESS_CREATENEW = "cn"; public static final String PROCESS_UPLOAD = "pu"; @@ -154,8 +151,8 @@ public class GlossaryHandler implements RepositoryHandler { } @Override - public List<String> getSupportedTypes() { - return supportedTypes; + public String getSupportedType() { + return GlossaryResource.TYPE_NAME; } @Override diff --git a/src/main/java/org/olat/repository/handlers/ImsCPHandler.java b/src/main/java/org/olat/repository/handlers/ImsCPHandler.java index 282f9440f8feee9a431e581086264fedf740b348..45b0fb268c60808552f88062d8fdf1e521686fb3 100644 --- a/src/main/java/org/olat/repository/handlers/ImsCPHandler.java +++ b/src/main/java/org/olat/repository/handlers/ImsCPHandler.java @@ -26,8 +26,6 @@ package org.olat.repository.handlers; import java.io.File; -import java.util.Collections; -import java.util.List; import java.util.Locale; import org.olat.admin.quota.QuotaConstants; @@ -90,11 +88,6 @@ public class ImsCPHandler extends FileHandler { private static final OLog log = Tracing.createLoggerFor(ImsCPHandler.class); - public static final String PROCESS_CREATENEW = "new"; - public static final String PROCESS_IMPORT = "add"; - - private static final List<String> supportedTypes = Collections.singletonList(ImsCPFileResource.TYPE_NAME); - @Override public boolean isCreate() { return true; @@ -204,8 +197,8 @@ public class ImsCPHandler extends FileHandler { } @Override - public List<String> getSupportedTypes() { - return supportedTypes; + public String getSupportedType() { + return ImsCPFileResource.TYPE_NAME; } @Override diff --git a/src/main/java/org/olat/repository/handlers/PodcastHandler.java b/src/main/java/org/olat/repository/handlers/PodcastHandler.java index ad7026d1e6a636e0d09ef79f7b303f6b11544858..58d04ea109d91e1df69f78b3eb4bb32f6fe2f504 100644 --- a/src/main/java/org/olat/repository/handlers/PodcastHandler.java +++ b/src/main/java/org/olat/repository/handlers/PodcastHandler.java @@ -20,8 +20,6 @@ package org.olat.repository.handlers; import java.io.File; -import java.util.Collections; -import java.util.List; import java.util.Locale; import org.olat.core.CoreSpringFactory; @@ -73,10 +71,6 @@ import org.olat.resource.references.ReferenceManager; */ // Loads of parameters are unused public class PodcastHandler implements RepositoryHandler { - public static final String PROCESS_CREATENEW = "create_new"; - public static final String PROCESS_UPLOAD = "upload"; - - private static final List<String> supportedTypes = Collections.singletonList(PodcastFileResource.TYPE_NAME); @Override public boolean isCreate() { @@ -200,8 +194,8 @@ public class PodcastHandler implements RepositoryHandler { } @Override - public List<String> getSupportedTypes() { - return supportedTypes; + public String getSupportedType() { + return PodcastFileResource.TYPE_NAME; } @Override diff --git a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java index 1602daf15ae0a3f826825ae3e1a0da9218f6650b..ef3b9cf2493c047d01d4d03ac612df771f2911e6 100644 --- a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java +++ b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java @@ -22,8 +22,6 @@ package org.olat.repository.handlers; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.util.Collections; -import java.util.List; import java.util.Locale; import org.olat.core.CoreSpringFactory; @@ -84,11 +82,6 @@ import de.bps.onyx.plugin.StreamMediaResource; public class PortfolioHandler implements RepositoryHandler { private static final OLog log = Tracing.createLoggerFor(PortfolioHandler.class); - public static final String PROCESS_CREATENEW = "create_new"; - public static final String PROCESS_UPLOAD = "upload"; - - private static final List<String> supportedTypes = Collections.singletonList(EPTemplateMapResource.TYPE_NAME); - @Override public boolean isCreate() { return true; @@ -133,7 +126,16 @@ public class PortfolioHandler implements RepositoryHandler { @Override public RepositoryEntry importResource(Identity initialAuthor, String displayname, String description, boolean withReferences, Locale locale, File file, String filename) { - return null; + EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class); + EPStructureManager eSTMgr = CoreSpringFactory.getImpl(EPStructureManager.class); + + PortfolioStructure structure = EPXStreamHandler.getAsObject(file, false); + OLATResource resource = eSTMgr.createPortfolioMapTemplateResource(); + RepositoryEntry re = CoreSpringFactory.getImpl(RepositoryService.class) + .create(initialAuthor, "", displayname, description, resource, RepositoryEntry.ACC_OWNERS); + + ePFMgr.importPortfolioMapTemplate(structure, resource); + return re; } @Override @@ -243,7 +245,7 @@ public class PortfolioHandler implements RepositoryHandler { @Override public MainLayoutController createLaunchController(RepositoryEntry re, UserRequest ureq, WindowControl wControl) { - EPFrontendManager ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager"); + EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class); PortfolioStructureMap map = (PortfolioStructureMap)ePFMgr.loadPortfolioStructure(re.getOlatResource()); EPSecurityCallback secCallback = EPSecurityCallbackFactory.getSecurityCallback(ureq, map, ePFMgr); Controller epCtr = EPUIFactory.createPortfolioStructureMapController(ureq, wControl, map, secCallback); @@ -252,14 +254,12 @@ public class PortfolioHandler implements RepositoryHandler { layoutCtr.addActivateableDelegate((Activateable2)epCtr); } layoutCtr.addDisposableChildController(epCtr); - //fxdiff VCRP-1: access control of learn resources - RepositoryMainAccessControllerWrapper wrapper = new RepositoryMainAccessControllerWrapper(ureq, wControl, re, layoutCtr); - return wrapper; + return new RepositoryMainAccessControllerWrapper(ureq, wControl, re, layoutCtr); } @Override - public List<String> getSupportedTypes() { - return supportedTypes; + public String getSupportedType() { + return EPTemplateMapResource.TYPE_NAME; } @Override diff --git a/src/main/java/org/olat/repository/handlers/RepositoryHandler.java b/src/main/java/org/olat/repository/handlers/RepositoryHandler.java index 7a30061a5cd6400b9e1d3d10e04f9e9489f44475..8676234caaf511b4f44fe6d91c02c25263d1abc2 100644 --- a/src/main/java/org/olat/repository/handlers/RepositoryHandler.java +++ b/src/main/java/org/olat/repository/handlers/RepositoryHandler.java @@ -26,7 +26,6 @@ package org.olat.repository.handlers; import java.io.File; -import java.util.List; import java.util.Locale; import org.olat.core.gui.UserRequest; @@ -58,7 +57,7 @@ public interface RepositoryHandler { /** * @return Return the typeNames of OLATResourceable this Handler can handle. */ - public List<String> getSupportedTypes(); + public String getSupportedType(); /** * This resource support creation within OpenOLAT. diff --git a/src/main/java/org/olat/repository/handlers/RepositoryHandlerFactory.java b/src/main/java/org/olat/repository/handlers/RepositoryHandlerFactory.java index 95773cdb594f5ceac8834e8fe4adc3ef58863a4a..6f91ecc6abc5e8e4e7b3ffd2ca160af297482b2c 100644 --- a/src/main/java/org/olat/repository/handlers/RepositoryHandlerFactory.java +++ b/src/main/java/org/olat/repository/handlers/RepositoryHandlerFactory.java @@ -32,6 +32,15 @@ import java.util.Set; import org.olat.core.CoreSpringFactory; import org.olat.core.id.OLATResourceable; import org.olat.core.logging.AssertException; +import org.olat.fileresource.types.AnimationFileResource; +import org.olat.fileresource.types.DocFileResource; +import org.olat.fileresource.types.FileResource; +import org.olat.fileresource.types.ImageFileResource; +import org.olat.fileresource.types.MovieFileResource; +import org.olat.fileresource.types.PdfFileResource; +import org.olat.fileresource.types.PowerpointFileResource; +import org.olat.fileresource.types.SoundFileResource; +import org.olat.fileresource.types.XlsFileResource; import org.olat.repository.RepositoryEntry; import org.springframework.stereotype.Service; @@ -50,7 +59,6 @@ public class RepositoryHandlerFactory { static { handlerMap = new HashMap<String, RepositoryHandler>(21); - registerHandler(new WebDocumentHandler()); registerHandler(new ImsCPHandler()); registerHandler(new SCORMCPHandler()); registerHandler(new CourseHandler()); @@ -60,12 +68,20 @@ public class RepositoryHandlerFactory { registerHandler(new BlogHandler()); registerHandler(new GlossaryHandler()); registerHandler(new PortfolioHandler()); + + registerHandler(new WebDocumentHandler(FileResource.GENERIC_TYPE_NAME)); + registerHandler(new WebDocumentHandler(DocFileResource.TYPE_NAME)); + registerHandler(new WebDocumentHandler(XlsFileResource.TYPE_NAME)); + registerHandler(new WebDocumentHandler(PowerpointFileResource.TYPE_NAME)); + registerHandler(new WebDocumentHandler(PdfFileResource.TYPE_NAME)); + registerHandler(new WebDocumentHandler(SoundFileResource.TYPE_NAME)); + registerHandler(new WebDocumentHandler(MovieFileResource.TYPE_NAME)); + registerHandler(new WebDocumentHandler(AnimationFileResource.TYPE_NAME)); + registerHandler(new WebDocumentHandler(ImageFileResource.TYPE_NAME)); } public static void registerHandler(RepositoryHandler handler) { - for (String type : handler.getSupportedTypes()) { - handlerMap.put(type, handler); - } + handlerMap.put(handler.getSupportedType(), handler); } public static RepositoryHandlerFactory getInstance() { diff --git a/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java b/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java index ecbf68b3fa220f4e5656e060729689a72c526a62..425940dd16e59b21637199b4d95497d4cdacd743 100644 --- a/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java +++ b/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java @@ -26,8 +26,6 @@ package org.olat.repository.handlers; import java.io.File; -import java.util.Collections; -import java.util.List; import java.util.Locale; import org.olat.core.CoreSpringFactory; @@ -70,12 +68,6 @@ import org.olat.util.logging.activity.LoggingResourceable; * */ public class SCORMCPHandler extends FileHandler { - - private static final List<String> supportedTypes = Collections.singletonList(ScormCPFileResource.TYPE_NAME); - - public SCORMCPHandler() { - // - } @Override public boolean isCreate() { @@ -166,8 +158,8 @@ public class SCORMCPHandler extends FileHandler { } @Override - public List<String> getSupportedTypes() { - return supportedTypes; + public String getSupportedType() { + return ScormCPFileResource.TYPE_NAME; } @Override diff --git a/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java b/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java index 28978aa7ee81111d07bb3ffbe3db44ca65cf1dad..29ae4255ea7c55af1225b550ee0fbb3d709e607e 100644 --- a/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java +++ b/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java @@ -26,8 +26,6 @@ package org.olat.repository.handlers; import java.io.File; -import java.util.Collections; -import java.util.List; import java.util.Locale; import org.olat.basesecurity.GroupRoles; @@ -77,13 +75,6 @@ import org.olat.resource.references.ReferenceManager; * @author gnaegi */ public class SharedFolderHandler implements RepositoryHandler { - - private static final List<String> supportedTypes = Collections.singletonList(SharedFolderFileResource.TYPE_NAME); - - /** - * Comment for <code>PROCESS_CREATENEW</code> - */ - public static final String PROCESS_CREATENEW = "cn"; @Override public boolean isCreate() { @@ -139,8 +130,8 @@ public class SharedFolderHandler implements RepositoryHandler { } @Override - public List<String> getSupportedTypes() { - return supportedTypes; + public String getSupportedType() { + return SharedFolderFileResource.TYPE_NAME; } @Override diff --git a/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java b/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java index 9d515bcd3132b7d8f5400b4f606aee9ca3adf51e..c3e2ba9dccdaa3ef652f0f22eeeb63a89c0b5041 100644 --- a/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java +++ b/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java @@ -29,8 +29,6 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.StandardCopyOption; -import java.util.ArrayList; -import java.util.List; import java.util.Locale; import org.olat.core.CoreSpringFactory; @@ -78,18 +76,10 @@ import org.olat.resource.OLATResourceManager; public class WebDocumentHandler extends FileHandler { private static final OLog log = Tracing.createLoggerFor(WebDocumentHandler.class); - private static final List<String> supportedTypes; - static { // initialize supported types - supportedTypes = new ArrayList<String>(10); - supportedTypes.add(FileResource.GENERIC_TYPE_NAME); - supportedTypes.add(DocFileResource.TYPE_NAME); - supportedTypes.add(XlsFileResource.TYPE_NAME); - supportedTypes.add(PowerpointFileResource.TYPE_NAME); - supportedTypes.add(PdfFileResource.TYPE_NAME); - supportedTypes.add(SoundFileResource.TYPE_NAME); - supportedTypes.add(MovieFileResource.TYPE_NAME); - supportedTypes.add(AnimationFileResource.TYPE_NAME); - supportedTypes.add(ImageFileResource.TYPE_NAME); + private final String supportedType; + + public WebDocumentHandler(String type) { + supportedType = type; } @Override @@ -121,21 +111,21 @@ public class WebDocumentHandler extends FileHandler { ResourceEvaluation eval = new ResourceEvaluation(false); String extension = FileUtils.getFileSuffix(filename); if(StringHelper.containsNonWhitespace(extension)) { - if (DocFileResource.validate(filename)) { + if (DocFileResource.TYPE_NAME.equals(supportedType) && DocFileResource.validate(filename)) { eval.setValid(true); - } else if (XlsFileResource.validate(filename)) { + } else if (XlsFileResource.TYPE_NAME.equals(supportedType) && XlsFileResource.validate(filename)) { eval.setValid(true); - } else if (PowerpointFileResource.validate(filename)) { + } else if (PowerpointFileResource.TYPE_NAME.equals(supportedType) && PowerpointFileResource.validate(filename)) { eval.setValid(true); - } else if (PdfFileResource.validate(filename)) { + } else if (PdfFileResource.TYPE_NAME.equals(supportedType) && PdfFileResource.validate(filename)) { eval.setValid(true); - } else if (ImageFileResource.validate(filename)) { + } else if (ImageFileResource.TYPE_NAME.equals(supportedType) && ImageFileResource.validate(filename)) { eval.setValid(true); - } else if (MovieFileResource.validate(filename)) { + } else if (MovieFileResource.TYPE_NAME.equals(supportedType) && MovieFileResource.validate(filename)) { eval.setValid(true); - } else if (SoundFileResource.validate(filename)) { + } else if (SoundFileResource.TYPE_NAME.equals(supportedType) && SoundFileResource.validate(filename)) { eval.setValid(true); - } else if (AnimationFileResource.validate(filename)) { + } else if (AnimationFileResource.TYPE_NAME.equals(supportedType) && AnimationFileResource.validate(filename)) { eval.setValid(true); } } @@ -147,21 +137,21 @@ public class WebDocumentHandler extends FileHandler { Locale locale, File file, String filename) { FileResource ores; - if (DocFileResource.validate(filename)) { + if (DocFileResource.TYPE_NAME.equals(supportedType) && DocFileResource.validate(filename)) { ores = new DocFileResource(); - } else if (XlsFileResource.validate(filename)) { + } else if (XlsFileResource.TYPE_NAME.equals(supportedType) && XlsFileResource.validate(filename)) { ores = new XlsFileResource(); - } else if (PowerpointFileResource.validate(filename)) { + } else if (PowerpointFileResource.TYPE_NAME.equals(supportedType) && PowerpointFileResource.validate(filename)) { ores = new PowerpointFileResource(); - } else if (PdfFileResource.validate(filename)) { + } else if (PdfFileResource.TYPE_NAME.equals(supportedType) && PdfFileResource.validate(filename)) { ores = new PdfFileResource(); - } else if (ImageFileResource.validate(filename)) { + } else if (ImageFileResource.TYPE_NAME.equals(supportedType) && ImageFileResource.validate(filename)) { ores = new ImageFileResource(); - } else if (MovieFileResource.validate(filename)) { + } else if (MovieFileResource.TYPE_NAME.equals(supportedType) && MovieFileResource.validate(filename)) { ores = new MovieFileResource(); - } else if (SoundFileResource.validate(filename)) { + } else if (SoundFileResource.TYPE_NAME.equals(supportedType) && SoundFileResource.validate(filename)) { ores = new SoundFileResource(); - } else if (AnimationFileResource.validate(filename)) { + } else if (AnimationFileResource.TYPE_NAME.equals(supportedType) && AnimationFileResource.validate(filename)) { ores = new AnimationFileResource(); } else { return null; @@ -200,8 +190,8 @@ public class WebDocumentHandler extends FileHandler { } @Override - public List<String> getSupportedTypes() { - return supportedTypes; + public String getSupportedType() { + return supportedType; } @Override diff --git a/src/main/java/org/olat/repository/handlers/WikiHandler.java b/src/main/java/org/olat/repository/handlers/WikiHandler.java index 83cd35fa202f74993a8de260ee094cf3e37272c0..a510ac66ca14e76685705a72e0eee05c450db8a6 100644 --- a/src/main/java/org/olat/repository/handlers/WikiHandler.java +++ b/src/main/java/org/olat/repository/handlers/WikiHandler.java @@ -29,7 +29,6 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -import java.util.Collections; import java.util.List; import java.util.Locale; @@ -98,14 +97,7 @@ import org.olat.resource.references.ReferenceManager; public class WikiHandler implements RepositoryHandler { private static final OLog log = Tracing.createLoggerFor(WikiHandler.class); - private static final List<String> supportedTypes = Collections.singletonList(WikiResource.TYPE_NAME); - /** - * Comment for <code>PROCESS_CREATENEW</code> - */ - public static final String PROCESS_CREATENEW = "cn"; - public static final String PROCESS_UPLOAD = "pu"; - @Override public boolean isCreate() { return true; @@ -203,8 +195,8 @@ public class WikiHandler implements RepositoryHandler { } @Override - public List<String> getSupportedTypes() { - return supportedTypes; + public String getSupportedType() { + return WikiResource.TYPE_NAME; } @Override diff --git a/src/main/java/org/olat/repository/handlers/package.html b/src/main/java/org/olat/repository/handlers/package.html deleted file mode 100644 index 9475ca9fd7576b3c65aacacbe8c379f5fcc70782..0000000000000000000000000000000000000000 --- a/src/main/java/org/olat/repository/handlers/package.html +++ /dev/null @@ -1,4 +0,0 @@ -<html><body> -<h3>Repository handlers</h3> -<p></p> -</body></html> diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryStatisticsDAO.java b/src/main/java/org/olat/repository/manager/RepositoryEntryStatisticsDAO.java index 317b21c6f23de631b6502fc9ccd9961b4d553e67..5459cc0992abd0cf46cadbc0897f83b3488dde3f 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryEntryStatisticsDAO.java +++ b/src/main/java/org/olat/repository/manager/RepositoryEntryStatisticsDAO.java @@ -139,6 +139,12 @@ public class RepositoryEntryStatisticsDAO implements UserRatingsDelegate, UserCo } private RepositoryEntryStatistics loadStatisticsForUpdate(OLATResourceable repositoryEntryRes) { + if(repositoryEntryRes instanceof RepositoryEntry) { + RepositoryEntry re = (RepositoryEntry)repositoryEntryRes; + dbInstance.getCurrentEntityManager().detach(re); + dbInstance.getCurrentEntityManager().detach(re.getStatistics()); + } + StringBuilder sb = new StringBuilder(); sb.append("select stats from ").append(RepositoryEntryStatistics.class.getName()).append(" as stats") .append(" where stats.key in (select v.statistics.key from ").append(RepositoryEntry.class.getName()).append(" as v where v.key=:key)"); diff --git a/src/main/java/org/olat/repository/ui/RepositoryEntryAccessColumnDescriptor.java b/src/main/java/org/olat/repository/ui/RepositoryEntryAccessColumnDescriptor.java index 7c59346826d82440b837acf2ccff51aa8a3ad5ce..5214df3b0c13f707026d625770346f1195204b60 100644 --- a/src/main/java/org/olat/repository/ui/RepositoryEntryAccessColumnDescriptor.java +++ b/src/main/java/org/olat/repository/ui/RepositoryEntryAccessColumnDescriptor.java @@ -49,7 +49,6 @@ public class RepositoryEntryAccessColumnDescriptor implements CustomCellRenderer public void render(StringOutput sb, Renderer renderer, Object val, Locale locale, int alignment, String action) { if(val instanceof RepositoryEntry) { RepositoryEntry re = (RepositoryEntry)val; - //fxdiff VCRP-1,2: access control of resources if(re.isMembersOnly()) { sb.append(translator.translate("table.header.access.membersonly")); } else { @@ -70,8 +69,7 @@ public class RepositoryEntryAccessColumnDescriptor implements CustomCellRenderer sb.append(translator.translate("table.header.access.guest")); } break; - } - default: + } default: // OLAT-6272 in case of broken repo entries with no access code // return error instead of nothing sb.append("ERROR"); diff --git a/src/main/java/org/olat/repository/ui/author/AuthorListController.java b/src/main/java/org/olat/repository/ui/author/AuthorListController.java index ece913a71d1ae6ebd07cd59d65992a17231d722b..b2a4377a3429f5da1537be38452bce2597a365ea 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthorListController.java +++ b/src/main/java/org/olat/repository/ui/author/AuthorListController.java @@ -62,6 +62,7 @@ import org.olat.core.gui.control.generic.wizard.StepsMainRunController; import org.olat.core.gui.translator.Translator; 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.StateEntry; import org.olat.core.logging.activity.ThreadLocalUserActivityLogger; @@ -134,7 +135,7 @@ public class AuthorListController extends FormBasicController implements Activat for(String type:types) { RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(type); if(handler != null && handler.isCreate()) { - addCreateLink(type, createDropdown); + addCreateLink(handler, createDropdown); } } @@ -154,9 +155,9 @@ public class AuthorListController extends FormBasicController implements Activat return super.getTranslator(); } - private void addCreateLink(String type, Dropdown dropdown) { - Link createLink = LinkFactory.createLink(type, getTranslator(), this); - createLink.setUserObject(type); + private void addCreateLink(RepositoryHandler handler, Dropdown dropdown) { + Link createLink = LinkFactory.createLink(handler.getSupportedType(), getTranslator(), this); + createLink.setUserObject(handler); dropdown.addComponent(createLink); } @@ -249,10 +250,9 @@ public class AuthorListController extends FormBasicController implements Activat if(importLink == source) { doImport(ureq); } else if(source instanceof Link && ((Link)source).getUserObject() instanceof String) { - String type = (String)((Link)source).getUserObject(); - RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(type); + RepositoryHandler handler = (RepositoryHandler)((Link)source).getUserObject(); if(handler != null) { - doCreate(ureq, type, handler); + doCreate(ureq, handler); } } super.event(ureq, source, event); @@ -265,7 +265,7 @@ public class AuthorListController extends FormBasicController implements Activat } else if(createCtrl == source) { cmc.deactivate(); if(Event.DONE_EVENT.equals(event)) { - doOpenDetails(ureq, createCtrl.getAddedEntry()); + doOpenDetailsSettings(ureq, createCtrl.getAddedEntry()); cleanUp(); } else if(CreateRepositoryEntryController.CREATION_WIZARD.equals(event)) { doPostCreateWizard(ureq, createCtrl.getAddedEntry(), createCtrl.getHandler()); @@ -275,7 +275,7 @@ public class AuthorListController extends FormBasicController implements Activat } else if(importCtrl == source) { cmc.deactivate(); if(Event.DONE_EVENT.equals(event)) { - doOpenDetails(ureq, importCtrl.getImportedEntry()); + doOpenDetailsSettings(ureq, importCtrl.getImportedEntry()); cleanUp(); } else { cleanUp(); @@ -285,7 +285,7 @@ public class AuthorListController extends FormBasicController implements Activat getWindowControl().pop(); RepositoryEntry newEntry = (RepositoryEntry)wizardCtrl.getRunContext().get("authoringNewEntry"); cleanUp(); - doOpenDetails(ureq, newEntry); + doOpenDetailsSettings(ureq, newEntry); } } else if(searchCtrl == source) { if(event instanceof SearchEvent) { @@ -400,6 +400,18 @@ public class AuthorListController extends FormBasicController implements Activat return detailsCtrl; } + private AuthoringEntryDetailsController doOpenDetailsSettings(UserRequest ureq, RepositoryEntryRef entry) { + RepositoryEntryAuthorView view = repositoryService.loadAuthorView(getIdentity(), entry); + String fullnameAuthor = ""; + AuthoringEntryRow row = new AuthoringEntryRow(view, fullnameAuthor); + detailsCtrl = doOpenDetails(ureq, row); + + ContextEntry editEntry = BusinessControlFactory.getInstance().createContextEntry(AuthoringEntryDetailsController.EDIT_SETTINGS_ORES); + List<ContextEntry> entries = Collections.singletonList(editEntry); + detailsCtrl.activate(ureq, entries, null); + return detailsCtrl; + } + private void doImport(UserRequest ureq) { if(importCtrl != null) return; @@ -415,11 +427,11 @@ public class AuthorListController extends FormBasicController implements Activat cmc.activate(); } - private void doCreate(UserRequest ureq, String type, RepositoryHandler handler) { + private void doCreate(UserRequest ureq, RepositoryHandler handler) { if(createCtrl != null) return; removeAsListenerAndDispose(createCtrl); - createCtrl = new CreateRepositoryEntryController(ureq, getWindowControl(), type, handler); + createCtrl = new CreateRepositoryEntryController(ureq, getWindowControl(), handler); listenTo(createCtrl); removeAsListenerAndDispose(cmc); diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataModel.java b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataModel.java index 5c192435914a036f0f56f4e5405b6cf5fd6236fb..1193684ecd5a33cd9bebfadefd9032b0074494dc 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataModel.java +++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataModel.java @@ -91,7 +91,7 @@ class AuthoringEntryDataModel extends DefaultFlexiTableDataSourceModel<Authoring displayName("cif.displayname"), author("table.header.author"), authors("table.header.author"), - access("table.header.author"), + access("table.header.access"), creationDate("table.header.date"), lastUsage("table.header.lastusage"), mark("table.header.mark"); diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java index 77ea17e048e7e0660cab160eb90cb12b314291d8..0f4b5a5bb49aae527b13318ce7feb5807d19430a 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java +++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java @@ -107,6 +107,8 @@ import org.springframework.beans.factory.annotation.Autowired; */ public class AuthoringEntryDetailsController extends FormBasicController implements Activateable2 { + public static final OLATResourceable EDIT_SETTINGS_ORES = OresHelper.createOLATResourceableInstance("Settings", 0l); + private FormLink markLink, startLink; private Link editLink, launchLink, @@ -423,7 +425,13 @@ public class AuthoringEntryDetailsController extends FormBasicController impleme @Override public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { - // + if(entries == null || entries.isEmpty()) return; + + ContextEntry entry = entries.get(0); + String segment = entry.getOLATResourceable().getResourceableTypeName(); + if(EDIT_SETTINGS_ORES.getResourceableTypeName().equals(segment)) { + doEditSettings(ureq); + } } @Override diff --git a/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java b/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java index 163346a94ec6c03798cf61f73b6f24eaa1b55754..a503cac69e9963078857be0bd328dd831f279004 100644 --- a/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java +++ b/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java @@ -24,7 +24,6 @@ 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.TextElement; import org.olat.core.gui.components.form.flexible.impl.FormBasicController; import org.olat.core.gui.components.form.flexible.impl.FormEvent; @@ -56,18 +55,15 @@ public class CreateRepositoryEntryController extends FormBasicController { private FormLink wizardButton; private TextElement displaynameEl; - private RichTextElement descriptionEl; private RepositoryEntry addedEntry; - private final String type; private final RepositoryHandler handler; private Object userObject; - public CreateRepositoryEntryController(UserRequest ureq, WindowControl wControl, String type, RepositoryHandler handler) { + public CreateRepositoryEntryController(UserRequest ureq, WindowControl wControl, RepositoryHandler handler) { super(ureq, wControl); setTranslator(Util.createPackageTranslator(RepositoryManager.class, getLocale(), getTranslator())); - this.type = type; this.handler = handler; initForm(ureq); } @@ -91,8 +87,8 @@ public class CreateRepositoryEntryController extends FormBasicController { @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { String typeName; - if (type != null) { - typeName = NewControllerFactory.translateResourceableTypeName(type, getLocale()); + if (handler != null) { + typeName = NewControllerFactory.translateResourceableTypeName(handler.getSupportedType(), getLocale()); } else { typeName = translate("cif.type.na"); } @@ -101,11 +97,6 @@ public class CreateRepositoryEntryController extends FormBasicController { displaynameEl = uifactory.addTextElement("cif.displayname", "cif.displayname", 100, "", formLayout); displaynameEl.setDisplaySize(30); displaynameEl.setMandatory(true); - - descriptionEl = uifactory.addRichTextElementForStringData("cif.description", "cif.description", - "", 10, -1, false, null, null, formLayout, ureq.getUserSession(), getWindowControl()); - descriptionEl.getEditorConfiguration().setFileBrowserUploadRelPath("media"); - descriptionEl.setMandatory(true); FormLayoutContainer buttonContainer = FormLayoutContainer.createButtonLayout("buttonContainer", getTranslator()); formLayout.add("buttonContainer", buttonContainer); @@ -137,14 +128,6 @@ public class CreateRepositoryEntryController extends FormBasicController { displaynameEl.clearError(); } - // Check for empty description - if (!StringHelper.containsNonWhitespace(descriptionEl.getValue())) { - descriptionEl.setErrorKey("cif.error.description.empty", new String[] {}); - allOk = false; - } else { - descriptionEl.clearError(); - } - return allOk & super.validateFormLogic(ureq); } @@ -173,9 +156,8 @@ public class CreateRepositoryEntryController extends FormBasicController { private void doCreate() { String displayname = displaynameEl.getValue(); - String description = descriptionEl.getValue(); - addedEntry = handler.createResource(getIdentity(), displayname, description, getLocale()); + addedEntry = handler.createResource(getIdentity(), displayname, "", getLocale()); ThreadLocalUserActivityLogger.log(LearningResourceLoggingAction.LEARNING_RESOURCE_CREATE, getClass(), LoggingResourceable.wrap(addedEntry, OlatResourceableType.genRepoEntry)); diff --git a/src/main/java/org/olat/repository/ui/author/ImportRepositoryEntryController.java b/src/main/java/org/olat/repository/ui/author/ImportRepositoryEntryController.java index 00303f913ee4cf5d68151e01f29841a56dc604de..298b40d69f0a80c3633efb10c851db108988a2f7 100644 --- a/src/main/java/org/olat/repository/ui/author/ImportRepositoryEntryController.java +++ b/src/main/java/org/olat/repository/ui/author/ImportRepositoryEntryController.java @@ -27,7 +27,6 @@ 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.FileElement; import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; -import org.olat.core.gui.components.form.flexible.elements.RichTextElement; import org.olat.core.gui.components.form.flexible.elements.SpacerElement; import org.olat.core.gui.components.form.flexible.elements.StaticTextElement; import org.olat.core.gui.components.form.flexible.elements.TextElement; @@ -46,7 +45,6 @@ import org.olat.core.util.Util; import org.olat.fileresource.types.ResourceEvaluation; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; -import org.olat.repository.controllers.EntryChangedEvent; import org.olat.repository.handlers.RepositoryHandler; import org.olat.repository.handlers.RepositoryHandlerFactory; import org.olat.util.logging.activity.LoggingResourceable; @@ -68,7 +66,6 @@ public class ImportRepositoryEntryController extends FormBasicController { private FileElement uploadFileEl; private StaticTextElement typeEl; private TextElement displaynameEl; - private RichTextElement descriptionEl; private MultipleSelectionElement referencesEl; private final static String[] refKeys = new String[]{ "checked" }; @@ -102,12 +99,6 @@ public class ImportRepositoryEntryController extends FormBasicController { String[] refValues = new String[]{ "" }; referencesEl = uifactory.addCheckboxesHorizontal("references", "references", formLayout, refKeys, refValues, null); referencesEl.setVisible(false); - - descriptionEl = uifactory.addRichTextElementForStringData("cif.description", "cif.description", - "", 10, -1, false, null, null, formLayout, ureq.getUserSession(), getWindowControl()); - descriptionEl.getEditorConfiguration().setFileBrowserUploadRelPath("media"); - descriptionEl.setMandatory(true); - descriptionEl.setVisible(false); FormLayoutContainer buttonContainer = FormLayoutContainer.createButtonLayout("buttonContainer", getTranslator()); formLayout.add("buttonContainer", buttonContainer); @@ -144,7 +135,6 @@ public class ImportRepositoryEntryController extends FormBasicController { if(handlerForUploadedResource != null) { doImport(); fireEvent(ureq, Event.DONE_EVENT); - fireEvent(ureq, new EntryChangedEvent(importedEntry, EntryChangedEvent.ADDED)); } } @@ -165,14 +155,6 @@ public class ImportRepositoryEntryController extends FormBasicController { } else { displaynameEl.clearError(); } - - // Check for empty description - if (!StringHelper.containsNonWhitespace(descriptionEl.getValue())) { - descriptionEl.setErrorKey("cif.error.description.empty", new String[] {}); - allOk = false; - } else { - descriptionEl.clearError(); - } return allOk & handlerForUploadedResource != null & super.validateFormLogic(ureq); } @@ -181,12 +163,11 @@ public class ImportRepositoryEntryController extends FormBasicController { if(handlerForUploadedResource == null) return; String displayname = displaynameEl.getValue(); - String description = descriptionEl.getValue(); File uploadedFile = uploadFileEl.getUploadFile(); String uploadedFilename = uploadFileEl.getUploadFileName(); boolean withReferences = referencesEl.isAtLeastSelected(1); - importedEntry = handlerForUploadedResource.importResource(getIdentity(), displayname, description, + importedEntry = handlerForUploadedResource.importResource(getIdentity(), displayname, "", withReferences, getLocale(), uploadedFile, uploadedFilename); ThreadLocalUserActivityLogger.log(LearningResourceLoggingAction.LEARNING_RESOURCE_CREATE, getClass(), @@ -201,17 +182,17 @@ public class ImportRepositoryEntryController extends FormBasicController { RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(type); ResourceEvaluation eval = handler.acceptImport(uploadedFile, uploadedFilename); if(eval != null && eval.isValid()) { - updateResourceInfos(eval, type, handler); + updateResourceInfos(eval, handler); break; } } } - private void updateResourceInfos(ResourceEvaluation eval, String type, RepositoryHandler handler) { + private void updateResourceInfos(ResourceEvaluation eval, RepositoryHandler handler) { handlerForUploadedResource = handler; typeEl.setVisible(true); - if (type != null) { // add image and typename code - String tName = NewControllerFactory.translateResourceableTypeName(type, getLocale()); + if (handler != null) { // add image and typename code + String tName = NewControllerFactory.translateResourceableTypeName(handler.getSupportedType(), getLocale()); typeEl.setValue(tName); } else { typeEl.setValue(translate("cif.type.na")); @@ -222,8 +203,6 @@ public class ImportRepositoryEntryController extends FormBasicController { if(eval.isReferences()) { referencesEl.select(refKeys[0], true); } - descriptionEl.setVisible(true); - descriptionEl.setValue(eval.getDescription()); importButton.setEnabled(handler != null); } } \ No newline at end of file diff --git a/src/main/java/org/olat/repository/ui/author/PropPupForm.java b/src/main/java/org/olat/repository/ui/author/PropPupForm.java index 70e279448df38ed5123386d6aabd03d3e406154b..513063cb9474e01a06bcfabc05f403726e3ecdef 100644 --- a/src/main/java/org/olat/repository/ui/author/PropPupForm.java +++ b/src/main/java/org/olat/repository/ui/author/PropPupForm.java @@ -38,12 +38,14 @@ 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.util.Util; import org.olat.fileresource.types.ScormCPFileResource; import org.olat.ims.qti.fileresource.SurveyFileResource; import org.olat.ims.qti.fileresource.TestFileResource; import org.olat.login.LoginModule; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryManagedFlag; +import org.olat.repository.RepositoryService; import org.olat.repository.handlers.RepositoryHandler; import org.olat.repository.handlers.RepositoryHandlerFactory; @@ -76,6 +78,7 @@ public class PropPupForm extends FormBasicController { */ public PropPupForm(UserRequest ureq, WindowControl wControl, RepositoryEntry entry) { super(ureq, wControl); + setTranslator(Util.createPackageTranslator(RepositoryService.class, getLocale(), getTranslator())); this.entry = entry; String typeName = entry.getOlatResource().getResourceableTypeName(); diff --git a/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java b/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java index 21285047c0952edb8cd107fa7e60bd92d2327047..d6ed91a4e81ca54abb1f587f02ac34dd32a91f06 100644 --- a/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java +++ b/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java @@ -378,9 +378,7 @@ public class RepositoryEditDescriptionController extends FormBasicController { flc.setDirty(true); } } else if (source == deleteImage) { - VFSLeaf img = repositoryManager.getImage(repositoryEntry); - if(fileUpload.getUploadFile() != null) { fileUpload.reset(); diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java b/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java index e1618ff233eea64566be0405bf719ca68dc54125..b9dd93279fb4b1f1b320bd02841c88814aa8547d 100644 --- a/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java +++ b/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java @@ -26,7 +26,6 @@ import java.util.Date; import java.util.List; import java.util.Map; -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.FormItem; @@ -52,6 +51,7 @@ import org.olat.resource.accesscontrol.model.AccessMethod; import org.olat.resource.accesscontrol.model.Offer; import org.olat.resource.accesscontrol.model.OfferAccess; import org.olat.resource.accesscontrol.model.OfferImpl; +import org.springframework.beans.factory.annotation.Autowired; /** * @@ -67,8 +67,6 @@ public class AccessConfigurationController extends FormBasicController { private List<FormLink> addMethods = new ArrayList<FormLink>(); private final String displayName; private final OLATResource resource; - private final AccessControlModule acModule; - private final ACService acService; private CloseableModalController cmc; private FormLayoutContainer confControllerContainer; @@ -81,6 +79,11 @@ public class AccessConfigurationController extends FormBasicController { private boolean allowPaymentMethod; private final boolean editable; + @Autowired + private ACService acService; + @Autowired + private AccessControlModule acModule; + public AccessConfigurationController(UserRequest ureq, WindowControl wControl, OLATResource resource, String displayName, boolean allowPaymentMethod, boolean editable) { super(ureq, wControl, "access_configuration"); @@ -88,8 +91,6 @@ public class AccessConfigurationController extends FormBasicController { this.resource = resource; this.displayName = displayName; this.allowPaymentMethod = allowPaymentMethod; - acModule = (AccessControlModule)CoreSpringFactory.getBean("acModule"); - acService = CoreSpringFactory.getImpl(ACService.class); embbed = false; this.editable = editable; emptyConfigGrantsFullAccess = true; @@ -105,8 +106,6 @@ public class AccessConfigurationController extends FormBasicController { this.resource = resource; this.displayName = displayName; this.allowPaymentMethod = allowPaymentMethod; - acModule = CoreSpringFactory.getImpl(AccessControlModule.class); - acService = CoreSpringFactory.getImpl(ACService.class); embbed = true; emptyConfigGrantsFullAccess = false; @@ -116,10 +115,6 @@ public class AccessConfigurationController extends FormBasicController { public int getNumOfBookingConfigurations() { return confControllers.size(); } - - public FormItem getInitialFormItem() { - return flc; - } @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { @@ -134,7 +129,7 @@ public class AccessConfigurationController extends FormBasicController { String title = handler.getMethodName(getLocale()); FormLink add = uifactory.addFormLink("create." + handler.getType(), title, null, formLayout, Link.LINK | Link.NONTRANSLATED); add.setUserObject(method); - add.setIconLeftCSS((method.getMethodCssClass() + "_icon").intern()); + add.setIconLeftCSS( ("o_icon " + method.getMethodCssClass() + "_icon o_icon-lg").intern()); addMethods.add(add); formLayout.add(add.getName(), add); } diff --git a/src/main/java/org/olat/restapi/repository/RepositoryEntriesResource.java b/src/main/java/org/olat/restapi/repository/RepositoryEntriesResource.java index 35b41e2f156c55296a599bf06d53e43dccbb4b0f..9960690469f32eb8c1551e435e68052ef037838e 100644 --- a/src/main/java/org/olat/restapi/repository/RepositoryEntriesResource.java +++ b/src/main/java/org/olat/restapi/repository/RepositoryEntriesResource.java @@ -342,7 +342,9 @@ public class RepositoryEntriesResource { RepositoryService repositoryService = CoreSpringFactory.getImpl(RepositoryService.class); OLATResource ores = OLATResourceManager.getInstance().findOrPersistResourceable(newResource); RepositoryEntry addedEntry = repositoryService.create(identity, resourcename, displayname, null, ores, 0); - addedEntry.setSoftkey(softkey); + if(StringHelper.containsNonWhitespace(softkey)) { + addedEntry.setSoftkey(softkey); + } //TODO repository // Do set access for owner at the end, because unfinished course should be invisible diff --git a/src/main/java/org/olat/search/service/indexer/IndexWriterHolder.java b/src/main/java/org/olat/search/service/indexer/IndexWriterHolder.java index cecb97430f33f23e097d425fc499fca5b472c9c1..51b300b075a2b36aad96899008857528b7cddbff 100644 --- a/src/main/java/org/olat/search/service/indexer/IndexWriterHolder.java +++ b/src/main/java/org/olat/search/service/indexer/IndexWriterHolder.java @@ -82,12 +82,12 @@ public class IndexWriterHolder { int used = counter.decrementAndGet(); if(used == 0) { long start = System.currentTimeMillis(); - indexWriter.commit(); - indexWriter.close(); - writerRef = null; + //indexWriter.commit(); + //indexWriter.close(); + //writerRef = null; log.info("Close writer takes (ms): " + (System.currentTimeMillis() - start)); } - } catch (IOException e) { + } catch (Exception e) { log.error("", e); } } diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql index 922c672b572023eeb5207b70a2501b14a903904c..746c65f45364dfc996cca5c36ccddd27bc1823a0 100644 --- a/src/main/resources/database/mysql/setupDatabase.sql +++ b/src/main/resources/database/mysql/setupDatabase.sql @@ -295,7 +295,7 @@ create table if not exists o_repositoryentry ( version mediumint unsigned not null, lastmodified datetime, creationdate datetime, - softkey varchar(30) not null unique, + softkey varchar(36) not null unique, external_id varchar(64), external_ref varchar(64), managed_flags varchar(255), diff --git a/src/test/java/org/olat/core/id/context/HistoryManagerTest.java b/src/test/java/org/olat/core/id/context/HistoryManagerTest.java index 5d2d09e2233bb8b182552952574d92c1cb7d8159..34580a65860bd05098ddb34b19747d1f3987b9c7 100644 --- a/src/test/java/org/olat/core/id/context/HistoryManagerTest.java +++ b/src/test/java/org/olat/core/id/context/HistoryManagerTest.java @@ -28,6 +28,7 @@ import java.net.URL; import junit.framework.Assert; +import org.junit.Ignore; import org.junit.Test; import org.olat.test.OlatTestCase; import org.springframework.beans.factory.annotation.Autowired; @@ -103,7 +104,7 @@ public class HistoryManagerTest extends OlatTestCase { * @throws IOException * @throws URISyntaxException */ - @Test + @Test @Ignore public void testRead_v83_repoMetadaElements() throws IOException, URISyntaxException { URL xmlUrl = HistoryManagerTest.class.getResource("resume_ver83b.xml"); assertNotNull(xmlUrl); diff --git a/src/test/java/org/olat/course/assessment/AssessmentManagerTest.java b/src/test/java/org/olat/course/assessment/AssessmentManagerTest.java index dce14e941d792f770b813ba1ed2edf56549f6ed7..5c147b5cb123d3b729692854e3bb8d1f1d1716c3 100644 --- a/src/test/java/org/olat/course/assessment/AssessmentManagerTest.java +++ b/src/test/java/org/olat/course/assessment/AssessmentManagerTest.java @@ -40,6 +40,7 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.olat.core.commons.persistence.DBFactory; @@ -51,6 +52,7 @@ import org.olat.core.util.resource.OresHelper; import org.olat.course.CourseFactory; import org.olat.course.CourseModule; import org.olat.course.ICourse; +import org.olat.course.config.CourseConfig; import org.olat.course.nodes.AssessableCourseNode; import org.olat.course.nodes.CourseNode; import org.olat.course.run.scoring.ScoreEvaluation; @@ -60,6 +62,7 @@ import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.test.JunitTestHelper; import org.olat.test.OlatTestCase; +import org.springframework.beans.factory.annotation.Autowired; /** * @@ -83,24 +86,33 @@ public class AssessmentManagerTest extends OlatTestCase { private final Boolean passed = Boolean.TRUE; private final Boolean fullyAssessed = Boolean.TRUE; + @Autowired + private EfficiencyStatementManager efficiencyStatementManager; + @Before public void setUp() throws Exception { try { log.info("setUp start ------------------------"); - tutor = JunitTestHelper.createAndPersistIdentityAsUser("junit_tutor_" + UUID.randomUUID().toString().replace("-", "")); - student = JunitTestHelper.createAndPersistIdentityAsUser("junit_student_" + UUID.randomUUID().toString().replace("-", "")); + Identity author = JunitTestHelper.createAndPersistIdentityAsUser("junit_auth-" + UUID.randomUUID().toString()); + tutor = JunitTestHelper.createAndPersistIdentityAsUser("junit_tutor-" + UUID.randomUUID().toString()); + student = JunitTestHelper.createAndPersistIdentityAsUser("junit_student-" + UUID.randomUUID().toString()); - //import "Demo course" into the bcroot_junittest - RepositoryEntry repositoryEntry = JunitTestHelper.deployDemoCourse(); + //import "Demo course" into the bcroot_junittest + RepositoryEntry repositoryEntry = JunitTestHelper.deployDemoCourse(author); Long resourceableId = repositoryEntry.getOlatResource().getResourceableId(); System.out.println("Demo course imported - resourceableId: " + resourceableId); course = CourseFactory.loadCourse(resourceableId); DBFactory.getInstance().closeSession(); - course.getCourseEnvironment().getCourseConfig().setEfficencyStatementIsEnabled(true); + CourseConfig config = course.getCourseEnvironment().getCourseConfig(); + config.setEfficencyStatementIsEnabled(true); + CourseFactory.setCourseConfig(course.getResourceableId(), config); + course = CourseFactory.loadCourse(resourceableId); + config = course.getCourseEnvironment().getCourseConfig(); + Assert.assertTrue(config.isEfficencyStatementEnabled()); log.info("setUp done ------------------------"); } catch (RuntimeException e) { @@ -149,39 +161,39 @@ public class AssessmentManagerTest extends OlatTestCase { UserCourseEnvironment userCourseEnv = new UserCourseEnvironmentImpl(ienv, course.getCourseEnvironment()); boolean incrementAttempts = true; //assessableCourseNode.updateUserScoreEvaluation(scoreEvaluation, userCourseEnv, tutor, incrementAttempts); //alternative - assessmentManager.saveScoreEvaluation(assessableCourseNode, tutor, student, scoreEvaluation, userCourseEnv, incrementAttempts); - DBFactory.getInstance().closeSession(); - //the attempts mut have been incremented - //assertEquals(attempts, assessableCourseNode.getUserAttempts(userCourseEnv)); //alternative - assertEquals(attempts, assessmentManager.getNodeAttempts(assessableCourseNode, student)); - + assessmentManager.saveScoreEvaluation(assessableCourseNode, tutor, student, scoreEvaluation, userCourseEnv, incrementAttempts); + DBFactory.getInstance().closeSession(); + //the attempts mut have been incremented + //assertEquals(attempts, assessableCourseNode.getUserAttempts(userCourseEnv)); //alternative + assertEquals(attempts, assessmentManager.getNodeAttempts(assessableCourseNode, student)); + assessmentManager.saveNodeCoachComment(assessableCourseNode, student, coachComment); //assessableCourseNode.updateUserCoachComment(coachComment, userCourseEnv); //alternative - assessmentManager.saveNodeComment(assessableCourseNode, tutor, student, userComment); + assessmentManager.saveNodeComment(assessableCourseNode, tutor, student, userComment); //assessableCourseNode.updateUserUserComment(userComment, userCourseEnv, tutor); //alternative - attempts++; - assessmentManager.saveNodeAttempts(assessableCourseNode, tutor, student, attempts); - assertEquals(attempts, assessmentManager.getNodeAttempts(assessableCourseNode, student)); + attempts++; + assessmentManager.saveNodeAttempts(assessableCourseNode, tutor, student, attempts); + assertEquals(attempts, assessmentManager.getNodeAttempts(assessableCourseNode, student)); //assessableCourseNode.updateUserAttempts(attempts, userCourseEnv, tutor); //alternative - - assertEquals(score, assessmentManager.getNodeScore(assessableCourseNode, student)); - assertEquals(passed, assessmentManager.getNodePassed(assessableCourseNode, student)); - assertEquals(assessmentID, assessmentManager.getAssessmentID(assessableCourseNode, student)); - - assertEquals(coachComment, assessmentManager.getNodeCoachComment(assessableCourseNode, student)); - assertEquals(userComment, assessmentManager.getNodeComment(assessableCourseNode, student)); - - System.out.println("Finish testing AssessmentManager read/write methods"); - - checkEfficiencyStatementManager(); - assertNotNull("no course at the end of test",course); - try { - course = CourseFactory.loadCourse(course.getResourceableId()); - } catch (Exception ex ) { - fail("Could not load course at the end of test Exception=" + ex); - } + + assertEquals(score, assessmentManager.getNodeScore(assessableCourseNode, student)); + assertEquals(passed, assessmentManager.getNodePassed(assessableCourseNode, student)); + assertEquals(assessmentID, assessmentManager.getAssessmentID(assessableCourseNode, student)); + + assertEquals(coachComment, assessmentManager.getNodeCoachComment(assessableCourseNode, student)); + assertEquals(userComment, assessmentManager.getNodeComment(assessableCourseNode, student)); + + System.out.println("Finish testing AssessmentManager read/write methods"); + + checkEfficiencyStatementManager(); + assertNotNull("no course at the end of test",course); + try { + course = CourseFactory.loadCourse(course.getResourceableId()); + } catch (Exception ex ) { + fail("Could not load course at the end of test Exception=" + ex); + } assertNotNull("no course after loadCourse", course); } @@ -201,10 +213,8 @@ public class AssessmentManagerTest extends OlatTestCase { RepositoryEntry courseRepositoryEntry = RepositoryManager.getInstance().lookupRepositoryEntry( OresHelper.createOLATResourceableInstance(CourseModule.class, courseResId), false); assertNotNull(courseRepositoryEntry); - // check the stored EfficiencyStatement + // check the stored EfficiencyStatement EfficiencyStatement efficiencyStatement = checkEfficiencyStatement(courseRepositoryEntry); - - EfficiencyStatementManager efficiencyStatementManager = EfficiencyStatementManager.getInstance(); //force the storing of the efficiencyStatement - this is usually done only at Learnresource/modify properties/Efficiency statement (ON) efficiencyStatementManager.updateEfficiencyStatements(course, identitiyList); DBFactory.getInstance().closeSession(); @@ -254,9 +264,9 @@ public class AssessmentManagerTest extends OlatTestCase { * @return */ private EfficiencyStatement checkEfficiencyStatement(RepositoryEntry courseRepositoryEntry) { - EfficiencyStatementManager efficiencyStatementManager = EfficiencyStatementManager.getInstance(); - //check the stored EfficiencyStatement - EfficiencyStatement efficiencyStatement = efficiencyStatementManager.getUserEfficiencyStatement(courseRepositoryEntry.getKey(), student); + //check the stored EfficiencyStatement + EfficiencyStatement efficiencyStatement = efficiencyStatementManager + .getUserEfficiencyStatement(courseRepositoryEntry.getKey(), student); assertNotNull(efficiencyStatement); List<Map<String,Object>> assessmentNodes = efficiencyStatement.getAssessmentNodes(); Iterator<Map<String,Object>> listIterator = assessmentNodes.iterator(); @@ -274,5 +284,4 @@ public class AssessmentManagerTest extends OlatTestCase { assertEquals(passed,efficiencyStatementManager.getPassed(assessableCourseNode.getIdent(), efficiencyStatement)); return efficiencyStatement; } - } diff --git a/src/test/java/org/olat/course/auditing/UserNodeAuditManagerTest.java b/src/test/java/org/olat/course/auditing/UserNodeAuditManagerTest.java index b20ca4cfe254f700cf20103aaace9645565d13af..ab237c00e23f97f19c1c6fabca2c740d66dd905e 100644 --- a/src/test/java/org/olat/course/auditing/UserNodeAuditManagerTest.java +++ b/src/test/java/org/olat/course/auditing/UserNodeAuditManagerTest.java @@ -30,9 +30,12 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import java.util.UUID; + import org.junit.Before; import org.junit.Test; import org.olat.core.commons.persistence.DBFactory; +import org.olat.core.id.Identity; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.course.CourseFactory; @@ -56,8 +59,9 @@ public class UserNodeAuditManagerTest extends OlatTestCase { try { log.info("setUp start ------------------------"); - //import "Demo course" into the bcroot_junittest - RepositoryEntry repositoryEntry = JunitTestHelper.deployDemoCourse(); + //import "Demo course" into the bcroot_junittest + Identity author = JunitTestHelper.createAndPersistIdentityAsUser("auth-" + UUID.randomUUID().toString()); + RepositoryEntry repositoryEntry = JunitTestHelper.deployDemoCourse(author); Long resourceableId = repositoryEntry.getOlatResource().getResourceableId(); System.out.println("Demo course imported - resourceableId: " + resourceableId); diff --git a/src/test/java/org/olat/course/condition/ConditionTest.java b/src/test/java/org/olat/course/condition/ConditionTest.java index 5e6d8bfe2cc91b265645e7bd4534452332c8ef32..49e0aaf819a1370fab18d07d1c907e22dae97e15 100644 --- a/src/test/java/org/olat/course/condition/ConditionTest.java +++ b/src/test/java/org/olat/course/condition/ConditionTest.java @@ -20,6 +20,7 @@ package org.olat.course.condition; import java.util.Collection; +import java.util.UUID; import junit.framework.Assert; @@ -84,9 +85,10 @@ public class ConditionTest extends OlatTestCase { } private UserCourseEnvironment getUserDemoCourseEnvironment() { + Identity author = JunitTestHelper.createAndPersistIdentityAsUser("junit_auth-" + UUID.randomUUID().toString()); Identity id = JunitTestHelper.createAndPersistIdentityAsUser("condition"); Roles roles = new Roles(false, false, false, false, false, false, false); - RepositoryEntry re = JunitTestHelper.deployDemoCourse(); + RepositoryEntry re = JunitTestHelper.deployDemoCourse(author); ICourse course = CourseFactory.loadCourse(re.getOlatResource()); IdentityEnvironment identityEnv = new IdentityEnvironment(id, roles); UserCourseEnvironment uce = new UserCourseEnvironmentImpl(identityEnv, course.getCourseEnvironment()); diff --git a/src/test/java/org/olat/course/nodes/projectbroker/ProjectBrokerManagerTest.java b/src/test/java/org/olat/course/nodes/projectbroker/ProjectBrokerManagerTest.java index 43345f56c7c922385f8b9dafc19352ef25d549de..c28c65ae5dbdfaaa42a1204d0cbccb923aa4a1a2 100644 --- a/src/test/java/org/olat/course/nodes/projectbroker/ProjectBrokerManagerTest.java +++ b/src/test/java/org/olat/course/nodes/projectbroker/ProjectBrokerManagerTest.java @@ -94,7 +94,8 @@ public class ProjectBrokerManagerTest extends OlatTestCase { id2 = JunitTestHelper.createAndPersistIdentityAsUser("project-id2-" + UUID.randomUUID().toString()); if (resourceableId == null) { - RepositoryEntry repositoryEntry = JunitTestHelper.deployDemoCourse(); + Identity author = JunitTestHelper.createAndPersistIdentityAsUser("project-auth-" + UUID.randomUUID().toString()); + RepositoryEntry repositoryEntry = JunitTestHelper.deployDemoCourse(author); resourceableId = repositoryEntry.getOlatResource().getResourceableId(); System.out.println("Demo course imported - resourceableId: " + resourceableId); } diff --git a/src/test/java/org/olat/portfolio/EPImportTest.java b/src/test/java/org/olat/portfolio/EPImportTest.java index 039953b9ce49f82a15d5ee0173b212d5622f3788..962bc94b852cc16b1c145afb092ca8a28b3dbeb2 100644 --- a/src/test/java/org/olat/portfolio/EPImportTest.java +++ b/src/test/java/org/olat/portfolio/EPImportTest.java @@ -29,10 +29,14 @@ import junit.framework.Assert; import org.junit.Test; import org.olat.core.commons.persistence.DB; +import org.olat.core.id.OLATResourceable; +import org.olat.core.util.resource.OresHelper; import org.olat.portfolio.manager.EPFrontendManager; import org.olat.portfolio.manager.EPXStreamHandler; import org.olat.portfolio.model.structel.PortfolioStructure; import org.olat.portfolio.model.structel.PortfolioStructureMap; +import org.olat.resource.OLATResource; +import org.olat.resource.OLATResourceManager; import org.olat.test.OlatTestCase; import org.springframework.beans.factory.annotation.Autowired; @@ -47,6 +51,8 @@ public class EPImportTest extends OlatTestCase { @Autowired private DB dbInstance; @Autowired + private OLATResourceManager resourceManager; + @Autowired private EPFrontendManager epFrontendManager; @@ -55,9 +61,12 @@ public class EPImportTest extends OlatTestCase { URL mapUrl = EPImportTest.class.getResource("map_81.xml.zip"); assertNotNull(mapUrl); File mapFile = new File(mapUrl.toURI()); + + OLATResourceable ores = OresHelper.createOLATResourceableType("EPMapTemplate"); + OLATResource resource = resourceManager.createAndPersistOLATResourceInstance(ores); //import the map PortfolioStructure rootStructure = EPXStreamHandler.getAsObject(mapFile, false); - PortfolioStructureMap importedMap = epFrontendManager.importPortfolioMapTemplate(rootStructure, null); + PortfolioStructureMap importedMap = epFrontendManager.importPortfolioMapTemplate(rootStructure, resource); Assert.assertNotNull(importedMap); dbInstance.commitAndCloseSession(); } diff --git a/src/test/java/org/olat/repository/RepositoryManagerTest.java b/src/test/java/org/olat/repository/RepositoryManagerTest.java index 162715a85c874b69c3ef95f5e96a96e9cc24e296..a73bcd18ec423f1df8767379da9b89f0d4597c0c 100644 --- a/src/test/java/org/olat/repository/RepositoryManagerTest.java +++ b/src/test/java/org/olat/repository/RepositoryManagerTest.java @@ -866,10 +866,12 @@ public class RepositoryManagerTest extends OlatTestCase { dbInstance.commitAndCloseSession(); //check - Roles roles = new Roles(false, false, false, false, false, true, false); - boolean institutionMgr1 = repositoryManager.isInstitutionalRessourceManagerFor(owner1, roles, re); - boolean institutionMgr2 = repositoryManager.isInstitutionalRessourceManagerFor(owner2, roles, re); - boolean institutionMgr3 = repositoryManager.isInstitutionalRessourceManagerFor(part3, roles, re); + Roles rolesOwner1 = securityManager.getRoles(owner1); + Roles rolesOwner2 = securityManager.getRoles(owner2); + Roles rolesPart3 = securityManager.getRoles(part3); + boolean institutionMgr1 = repositoryManager.isInstitutionalRessourceManagerFor(owner1, rolesOwner1, re); + boolean institutionMgr2 = repositoryManager.isInstitutionalRessourceManagerFor(owner2, rolesOwner2, re); + boolean institutionMgr3 = repositoryManager.isInstitutionalRessourceManagerFor(part3, rolesPart3, re); Assert.assertTrue(institutionMgr1); Assert.assertFalse(institutionMgr2); diff --git a/src/test/java/org/olat/repository/manager/RepositoryEntryStatisticsDAOTest.java b/src/test/java/org/olat/repository/manager/RepositoryEntryStatisticsDAOTest.java index 629db4b0eb0de360876e5380538ac4bfc8f0ed9c..d5f664eaa6ad02a561d61762a08c41b3453e9913 100644 --- a/src/test/java/org/olat/repository/manager/RepositoryEntryStatisticsDAOTest.java +++ b/src/test/java/org/olat/repository/manager/RepositoryEntryStatisticsDAOTest.java @@ -209,7 +209,9 @@ public class RepositoryEntryStatisticsDAOTest extends OlatTestCase { log.info("testIncrementDownloadCounter finished"); } - + /** + * Test concurrent increment of the launch counter + */ @Test public void concurrentIncrementLaunchCounter() { final List<Exception> exceptionHolder = Collections.synchronizedList(new ArrayList<Exception>(1)); diff --git a/src/test/java/org/olat/restapi/UserMgmtTest.java b/src/test/java/org/olat/restapi/UserMgmtTest.java index 888c7d182e74e349d95f250b080595141ae83bad..3ffe417a110fd7ead52cdaa55ef513975bd4e935 100644 --- a/src/test/java/org/olat/restapi/UserMgmtTest.java +++ b/src/test/java/org/olat/restapi/UserMgmtTest.java @@ -241,7 +241,8 @@ public class UserMgmtTest extends OlatJerseyTestCase { dbInstance.commitAndCloseSession(); //prepare some courses - RepositoryEntry entry = JunitTestHelper.deployDemoCourse(); + Identity author = JunitTestHelper.createAndPersistIdentityAsUser("auth-" + UUID.randomUUID().toString()); + RepositoryEntry entry = JunitTestHelper.deployDemoCourse(author); if (!repositoryService.hasRole(id1, entry, GroupRoles.participant.name())){ repositoryService.addRole(id1, entry, GroupRoles.participant.name()); } diff --git a/src/test/java/org/olat/test/JunitTestHelper.java b/src/test/java/org/olat/test/JunitTestHelper.java index b88467250a62f949126f1b9b905d8777a0798df9..d40ea03f8e031651344b6867fdb34a4bd1f77a11 100644 --- a/src/test/java/org/olat/test/JunitTestHelper.java +++ b/src/test/java/org/olat/test/JunitTestHelper.java @@ -28,7 +28,9 @@ */ package org.olat.test; -import java.util.List; +import java.io.File; +import java.net.URL; +import java.util.Locale; import java.util.Random; import java.util.UUID; @@ -42,20 +44,21 @@ import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.id.Roles; import org.olat.core.id.User; +import org.olat.core.logging.OLog; +import org.olat.core.logging.Tracing; import org.olat.core.util.CodeHelper; import org.olat.core.util.StringHelper; import org.olat.core.util.resource.OresHelper; import org.olat.course.CourseFactory; -import org.olat.course.DeployableCourseExport; -import org.olat.properties.Property; -import org.olat.properties.PropertyManager; +import org.olat.course.CourseModule; +import org.olat.course.ICourse; import org.olat.repository.RepositoryEntry; -import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryService; +import org.olat.repository.handlers.RepositoryHandler; +import org.olat.repository.handlers.RepositoryHandlerFactory; import org.olat.resource.OLATResource; import org.olat.resource.OLATResourceManager; import org.olat.user.UserManager; -import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Description:<br> @@ -70,6 +73,8 @@ import org.springframework.context.support.ClassPathXmlApplicationContext; */ public class JunitTestHelper { + private static final OLog log = Tracing.createLoggerFor(JunitTestHelper.class); + public static final String PWD = "A6B7C8"; private static final Random randomResId = new Random(); @@ -190,44 +195,24 @@ public class JunitTestHelper { * Deploys/imports the "Demo Course". * @return the created RepositoryEntry */ - public static RepositoryEntry deployDemoCourse() { - + public static RepositoryEntry deployDemoCourse(Identity initialAuthor) { + String displayname = "Demo-Kurs-7.1"; + String description = ""; + RepositoryEntry re = null; - PropertyManager propertyManager = PropertyManager.getInstance(); - List<Property> l = propertyManager.findProperties(null, null, null, "_o3_", "deployedCourses"); - if (l.size() > 0) { - re = RepositoryManager.getInstance().lookupRepositoryEntry(l.get(0).getLongValue()); - if (re != null) { - //try to load it - try { - CourseFactory.loadCourse(re.getOlatResource()); - return re; - } catch(Exception ex) { - propertyManager.deleteProperties(null, null, null, "_o3_", "deployedCourses"); - RepositoryManager.getInstance().deleteRepositoryEntry(re); - } - } - } - - ClassPathXmlApplicationContext beanContext = null; try { - createAndPersistIdentityAsAdmin("administrator"); - beanContext = new ClassPathXmlApplicationContext("/org/olat/test/_spring/demoCourseExport.xml"); - DeployableCourseExport export = (DeployableCourseExport)beanContext.getBean("demoCourse"); - if (!export.getDeployableCourseZipFile().exists()) { - //do not throw exception as users may upload bad file - System.out.println("Cannot deploy course from file: " + export.getIdentifier()); - return null; - } - re = CourseFactory.deployCourseFromZIP(export.getDeployableCourseZipFile(), 4); - if (re != null) { - Property prop = propertyManager.createPropertyInstance(null, null, null, "_o3_", "deployedCourses", export.getVersion(), re.getKey(), export.getIdentifier(), null); - propertyManager.saveProperty(prop); - } - } finally { - beanContext.close(); + URL courseUrl = JunitTestHelper.class.getResource("file_resources/Demo-Kurs-7.1.zip"); + File courseFile = new File(courseUrl.toURI()); + + RepositoryHandler courseHandler = RepositoryHandlerFactory.getInstance() + .getRepositoryHandler(CourseModule.getCourseTypeName()); + re = courseHandler.importResource(initialAuthor, displayname, description, true, Locale.ENGLISH, courseFile, null); + + ICourse course = CourseFactory.loadCourse(re.getOlatResource()); + CourseFactory.publishCourse(course, RepositoryEntry.ACC_USERS, false, initialAuthor, Locale.ENGLISH); + } catch (Exception e) { + log.error("", e); } return re; } - } diff --git a/src/test/java/org/olat/test/_spring/demoCourseExport.xml b/src/test/java/org/olat/test/_spring/demoCourseExport.xml deleted file mode 100644 index 4de7af91f4ecf87473d21b7b1532e4ac5c353e5b..0000000000000000000000000000000000000000 --- a/src/test/java/org/olat/test/_spring/demoCourseExport.xml +++ /dev/null @@ -1,18 +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-3.0.xsd - http://www.springframework.org/schema/context - http://www.springframework.org/schema/context/spring-context-3.0.xsd"> - - -<bean id="demoCourse" class="org.olat.course.DeployableCourseExport"> - <property name="courseUrl" value="http://nexus.openolat.org/nexus/content/repositories/openolat-snapshots/org/openolat/course/Demo-Kurs/7.1-SNAPSHOT/Demo-Kurs-7.1-SNAPSHOT.zip" /> - <property name="identifier" value="Demo Kurs" /> - <property name="version" value="1" /> -</bean> - -</beans> \ No newline at end of file diff --git a/src/test/java/org/olat/test/_spring/readme b/src/test/java/org/olat/test/_spring/readme deleted file mode 100644 index 7a7f170f29cb4ecba920c2d53a7bc1372c9dc39d..0000000000000000000000000000000000000000 --- a/src/test/java/org/olat/test/_spring/readme +++ /dev/null @@ -1,2 +0,0 @@ -Do not name the spring context files xyzContext.xml otherwise they may get loaded when olat starts. See web.xml for all -generic names which are searched on the classpath. \ No newline at end of file diff --git a/src/test/java/org/olat/test/file_resources/Demo-Kurs-7.1.zip b/src/test/java/org/olat/test/file_resources/Demo-Kurs-7.1.zip new file mode 100644 index 0000000000000000000000000000000000000000..74d45cf865e346b5a167012347ea3fcd50d855df Binary files /dev/null and b/src/test/java/org/olat/test/file_resources/Demo-Kurs-7.1.zip differ