diff --git a/src/main/java/org/olat/NewControllerFactory.java b/src/main/java/org/olat/NewControllerFactory.java index 1998c8bdadbb9a30542489c0818f423ac175961c..d5c8aa14617136cb0cf1474e92b225a76504bc44 100644 --- a/src/main/java/org/olat/NewControllerFactory.java +++ b/src/main/java/org/olat/NewControllerFactory.java @@ -45,7 +45,7 @@ import org.olat.core.id.context.BusinessControl; import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.ContextEntryControllerCreator; -import org.olat.core.id.context.ContextEntryControllerCreator2; +import org.olat.core.id.context.TabContext; import org.olat.core.logging.AssertException; import org.olat.core.logging.LogDelegator; import org.olat.core.util.resource.OresHelper; @@ -177,12 +177,7 @@ public class NewControllerFactory extends LogDelegator { } //fxdiff BAKS-7 Resume function - String siteClassName; - if(typeHandler instanceof ContextEntryControllerCreator2) { - siteClassName = ((ContextEntryControllerCreator2)typeHandler).getSiteClassName(ureq, mainCe); - } else { - siteClassName = typeHandler.getSiteClassName(mainCe); - } + String siteClassName = typeHandler.getSiteClassName(mainCe, ureq); // open in existing site if (siteClassName != null) { @@ -218,23 +213,23 @@ public class NewControllerFactory extends LogDelegator { } } } - dts.activateStatic(ureq, siteClassName, viewIdentifyer, entries); + + TabContext context = typeHandler.getTabContext(ureq, ores, mainCe, entries); + dts.activateStatic(ureq, siteClassName, viewIdentifyer, context.getContext()); } else { List<ContextEntry> entries = new ArrayList<ContextEntry>(); + while(bc.hasContextEntry()) { + entries.add(bc.popLauncherContextEntry()); + } + TabContext context = typeHandler.getTabContext(ureq, ores, mainCe, entries); // or create new tab - String tabName = typeHandler.getTabName(mainCe); + //String tabName = typeHandler.getTabName(mainCe, ureq); // create and add Tab - dt = dts.createDTab(ores, re, tabName); + dt = dts.createDTab(context.getTabResource(), re, context.getName()); if (dt == null) { - // tabs are full: TODO - // user error message is generated in BaseFullWebappController, nothing - // to do here + // user error message is generated in BaseFullWebappController, nothing to do here } else { - while(bc.hasContextEntry()) { - entries.add(bc.popLauncherContextEntry()); - } - WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(bc, dt.getWindowControl()); Controller launchC = typeHandler.createController(mainCe, ureq, bwControl); if (launchC == null) { @@ -244,7 +239,7 @@ public class NewControllerFactory extends LogDelegator { dt.setController(launchC); dts.addDTab(dt); - dts.activate(ureq, dt, null, entries); // null: do not activate to a certain view + dts.activate(ureq, dt, null, context.getContext()); // null: do not activate to a certain view } } } diff --git a/src/main/java/org/olat/admin/user/UserAdminContextEntryControllerCreator.java b/src/main/java/org/olat/admin/user/UserAdminContextEntryControllerCreator.java index be416451358b6f37e517bec0b9afe37a234bf6b8..4180151f2cfef5c356673a1ccb8a4ed4a7aab62d 100644 --- a/src/main/java/org/olat/admin/user/UserAdminContextEntryControllerCreator.java +++ b/src/main/java/org/olat/admin/user/UserAdminContextEntryControllerCreator.java @@ -24,7 +24,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; /** * Description:<br> @@ -35,7 +35,7 @@ import org.olat.core.id.context.ContextEntryControllerCreator; * * @author srosse */ -public class UserAdminContextEntryControllerCreator implements ContextEntryControllerCreator { +public class UserAdminContextEntryControllerCreator extends DefaultContextEntryControllerCreator { /** * @see org.olat.core.id.context.ContextEntryControllerCreator#createController(org.olat.core.id.context.ContextEntry, @@ -49,7 +49,8 @@ public class UserAdminContextEntryControllerCreator implements ContextEntryContr /** * @see org.olat.core.id.context.ContextEntryControllerCreator#getSiteClassName(org.olat.core.id.context.ContextEntry) */ - public String getSiteClassName(ContextEntry ce) { + @Override + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { // opened as site not tab return UserAdminSite.class.getName(); } @@ -57,7 +58,8 @@ public class UserAdminContextEntryControllerCreator implements ContextEntryContr /** * @see org.olat.core.id.context.ContextEntryControllerCreator#getTabName(org.olat.core.id.context.ContextEntry) */ - public String getTabName(ContextEntry ce) { + @Override + public String getTabName(ContextEntry ce, UserRequest ureq) { return null; } diff --git a/src/main/java/org/olat/core/gui/components/table/TableController.java b/src/main/java/org/olat/core/gui/components/table/TableController.java index ed8c00b8846b1a7f785956846a66a9aa5d68f798..51ebae905c194a614725626e8c3ae823d85582ac 100644 --- a/src/main/java/org/olat/core/gui/components/table/TableController.java +++ b/src/main/java/org/olat/core/gui/components/table/TableController.java @@ -647,6 +647,22 @@ public class TableController extends BasicController { public void setSelectedRowId(final int selectedRowId) { table.setSelectedRowId(selectedRowId); } + + /** + * Set the page viewed if pageing is enabled + * @param pageNr + */ + public void setPage(Integer pageNr) { + table.updatePageing(pageNr); + } + + /** + * Return the number of items per page if pageing is enable + * @return + */ + public int getPageSize() { + return table.getResultsPerPage(); + } /** * Sets the sortColumn to a specific colun id. Check if the column can be accessed diff --git a/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator.java b/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator.java index b2de3cfd2f995c3df643c1fb8a0e8c022dd0f26d..45a2788266066f88cc72b932502289b6eb93d673 100644 --- a/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator.java +++ b/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator.java @@ -28,9 +28,12 @@ */ package org.olat.core.id.context; +import java.util.List; + import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; +import org.olat.core.id.OLATResourceable; /** * Description:<br> @@ -61,16 +64,6 @@ public interface ContextEntryControllerCreator { */ public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl); - /** - * The name of the dynamic tab if such a tab should be created or NULL if - * opened as Site - * - * @param ce - * @return Return tab name for certain context entry or NULL if the target is - * the opeing of an existing site - */ - public String getTabName(ContextEntry ce); - /** * The class name of the site that must be activated or NULL if opened as dTab * @@ -78,7 +71,7 @@ public interface ContextEntryControllerCreator { * @return Return the class name that is used to activate an existing site or * NULL if the target is a new dtab */ - public String getSiteClassName(ContextEntry ce); + public String getSiteClassName(ContextEntry ce, UserRequest ureq); /** * @@ -88,4 +81,12 @@ public interface ContextEntryControllerCreator { * @return true, if this contextentry can be launched */ public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl); + + /** + * Allow to rewrite the business path + * @param ureq + * @param entries + * @return + */ + public TabContext getTabContext(UserRequest ureq, OLATResourceable ores, ContextEntry mainEntry, List<ContextEntry> entries); } diff --git a/src/main/java/org/olat/core/id/context/DefaultContextEntryControllerCreator.java b/src/main/java/org/olat/core/id/context/DefaultContextEntryControllerCreator.java new file mode 100644 index 0000000000000000000000000000000000000000..ef132378678b50f29bbd2d9f1556985648a980e5 --- /dev/null +++ b/src/main/java/org/olat/core/id/context/DefaultContextEntryControllerCreator.java @@ -0,0 +1,56 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.core.id.context; + +import java.util.List; + +import org.olat.core.gui.UserRequest; +import org.olat.core.gui.control.Controller; +import org.olat.core.gui.control.WindowControl; +import org.olat.core.id.OLATResourceable; + +/** + * + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class DefaultContextEntryControllerCreator implements ContextEntryControllerCreator { + + public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { + return null; + } + + public String getTabName(ContextEntry ce, UserRequest ureq) { + return null; + } + + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + return null; + } + + public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { + return true; + } + + @Override + public TabContext getTabContext(UserRequest ureq, OLATResourceable ores, ContextEntry mainEntry, List<ContextEntry> entries) { + return new TabContext(getTabName(mainEntry, ureq), ores, entries); + } +} \ No newline at end of file diff --git a/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java b/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java index 866bf605f4b3d90cf8d44282dd7365c46082b908..ab8766a54be6f98c76ccd609dafe676c1bf858d3 100644 --- a/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java +++ b/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java @@ -34,7 +34,7 @@ import org.olat.core.gui.control.navigation.SiteInstance; * * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ -public class SiteContextEntryControllerCreator implements ContextEntryControllerCreator { +public class SiteContextEntryControllerCreator extends DefaultContextEntryControllerCreator { private final Class<? extends SiteInstance> site; public SiteContextEntryControllerCreator(Class<? extends SiteInstance> site) { @@ -45,11 +45,13 @@ public class SiteContextEntryControllerCreator implements ContextEntryController return null; } - public String getSiteClassName(ContextEntry ce) { + @Override + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return site.getName(); } - public String getTabName(ContextEntry ce) { + @Override + public String getTabName(ContextEntry ce, UserRequest ureq) { return null; } diff --git a/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator2.java b/src/main/java/org/olat/core/id/context/TabContext.java similarity index 51% rename from src/main/java/org/olat/core/id/context/ContextEntryControllerCreator2.java rename to src/main/java/org/olat/core/id/context/TabContext.java index d91775a6e51f0ad9802cb9b3e8fa7746d38dcec5..1aa6cd2123602941d2ebdc895d9f669299111beb 100644 --- a/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator2.java +++ b/src/main/java/org/olat/core/id/context/TabContext.java @@ -19,11 +19,46 @@ */ package org.olat.core.id.context; -import org.olat.core.gui.UserRequest; +import java.util.List; -//fxdiff BAKS-7 Resume function -public interface ContextEntryControllerCreator2 extends ContextEntryControllerCreator { +import org.olat.core.id.OLATResourceable; +/** + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +public class TabContext { + + private final String name; + private final OLATResourceable resource; + private final List<ContextEntry> contextEntries; + + public TabContext (String name, OLATResourceable resource, List<ContextEntry> contextEntries) { + this.name = name; + this.resource = resource; + this.contextEntries = contextEntries; + } + + /** + * The name of the tab + * @return + */ + public String getName() { + return name; + } + + /** + * The resource which identified the tab + * @return + */ + public OLATResourceable getTabResource() { + return resource; + } - public String getSiteClassName(UserRequest ureq, ContextEntry ce); -} + /** + * + * @return + */ + public List<ContextEntry> getContext() { + return contextEntries; + } +} \ No newline at end of file diff --git a/src/main/java/org/olat/core/util/mail/MailBoxExtension.java b/src/main/java/org/olat/core/util/mail/MailBoxExtension.java index 70939502e10c27cb4b45860739080064c82b4b3e..1eefcd7c7190aced6ec5f839dc5e606285f73bf0 100644 --- a/src/main/java/org/olat/core/util/mail/MailBoxExtension.java +++ b/src/main/java/org/olat/core/util/mail/MailBoxExtension.java @@ -32,7 +32,7 @@ import org.olat.core.id.Identity; import org.olat.core.id.context.BusinessControl; import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.manager.BasicManager; @@ -67,20 +67,20 @@ public class MailBoxExtension extends BasicManager implements MailContextResolve } public void init() { - NewControllerFactory.getInstance().addContextEntryControllerCreator("Inbox", new ContextEntryControllerCreator(){ + NewControllerFactory.getInstance().addContextEntryControllerCreator("Inbox", new DefaultContextEntryControllerCreator(){ @Override public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { return null; } @Override - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { // opens in home-tab return null; } @Override - public String getSiteClassName(ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return HomeSite.class.getName(); } diff --git a/src/main/java/org/olat/group/BusinessGroupContextEntryControllerCreator.java b/src/main/java/org/olat/group/BusinessGroupContextEntryControllerCreator.java index 81d6f4da56b629b1b658adb3c2640261c79bbb80..2acab2c2c8fbe9466895de37d8e0828a93ba8d58 100644 --- a/src/main/java/org/olat/group/BusinessGroupContextEntryControllerCreator.java +++ b/src/main/java/org/olat/group/BusinessGroupContextEntryControllerCreator.java @@ -27,7 +27,7 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.group.ui.BGControllerFactory; import org.olat.resource.OLATResource; import org.olat.resource.OLATResourceManager; @@ -44,7 +44,7 @@ import org.olat.resource.accesscontrol.manager.ACFrontendManager; * * @author gnaegi, gnaegi@frentix.com, www.frentix.com */ -public class BusinessGroupContextEntryControllerCreator implements ContextEntryControllerCreator { +public class BusinessGroupContextEntryControllerCreator extends DefaultContextEntryControllerCreator { /** * @see org.olat.core.id.context.ContextEntryControllerCreator#createController(org.olat.core.id.context.ContextEntry, @@ -71,7 +71,8 @@ public class BusinessGroupContextEntryControllerCreator implements ContextEntryC /** * @see org.olat.core.id.context.ContextEntryControllerCreator#getTabName(org.olat.core.id.context.ContextEntry) */ - public String getTabName(ContextEntry ce) { + @Override + public String getTabName(ContextEntry ce, UserRequest ureq) { OLATResourceable ores = ce.getOLATResourceable(); Long gKey = ores.getResourceableId(); BusinessGroupManager bman = BusinessGroupManagerImpl.getInstance(); @@ -79,13 +80,6 @@ public class BusinessGroupContextEntryControllerCreator implements ContextEntryC return bgroup.getName(); } - /** - * @see org.olat.core.id.context.ContextEntryControllerCreator#getSiteClassName(org.olat.core.id.context.ContextEntry) - */ - public String getSiteClassName(ContextEntry ce) { - return null; - } - @Override public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { OLATResourceable ores = ce.getOLATResourceable(); diff --git a/src/main/java/org/olat/home/controllerCreators/GuestHomeCEControllerCreator.java b/src/main/java/org/olat/home/controllerCreators/GuestHomeCEControllerCreator.java index 7eba1fe6a4318dcb62904bb82917f841154b01f0..8505c16671c8e49f14808e778adaceae1edc53a8 100644 --- a/src/main/java/org/olat/home/controllerCreators/GuestHomeCEControllerCreator.java +++ b/src/main/java/org/olat/home/controllerCreators/GuestHomeCEControllerCreator.java @@ -23,7 +23,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.home.HomeSite; /** @@ -35,7 +35,7 @@ import org.olat.home.HomeSite; * Initial Date: 15 juil. 2011 <br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ -public class GuestHomeCEControllerCreator implements ContextEntryControllerCreator { +public class GuestHomeCEControllerCreator extends DefaultContextEntryControllerCreator { public GuestHomeCEControllerCreator() { @@ -45,11 +45,11 @@ public class GuestHomeCEControllerCreator implements ContextEntryControllerCrea return null; } - public String getSiteClassName(ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return HomeSite.class.getName(); } - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { return null; } diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java index e6fd7a693871f413dc6d002334e4b862d68b70c7..dee63e8550ca95f8f3dac9f73b4b1a04a44e4e81 100644 --- a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java +++ b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java @@ -28,7 +28,7 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.modules.webFeed.FeedResourceSecurityCallback; @@ -53,7 +53,7 @@ public class LiveBlogContextEntryControllerCreator { public LiveBlogContextEntryControllerCreator(final FeedManager feedManager) { - NewControllerFactory.getInstance().addContextEntryControllerCreator("LiveBlog", new ContextEntryControllerCreator(){ + NewControllerFactory.getInstance().addContextEntryControllerCreator("LiveBlog", new DefaultContextEntryControllerCreator(){ @Override public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { @@ -67,14 +67,14 @@ public class LiveBlogContextEntryControllerCreator { } @Override - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { OLATResourceable ores = ce.getOLATResourceable(); Feed feed = feedManager.getFeed(ores); return feed.getTitle(); } @Override - public String getSiteClassName(ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return null; } diff --git a/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java b/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java index 0c75197a98300e8aea630f05f08acd948155a5dc..8612c380d36db99696b4c4a60d8c04b8101e08a8 100644 --- a/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java +++ b/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java @@ -19,12 +19,19 @@ */ package org.olat.portfolio; +import java.util.ArrayList; +import java.util.List; + import org.olat.NewControllerFactory; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; +import org.olat.core.id.Identity; +import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; +import org.olat.core.id.context.TabContext; +import org.olat.core.util.resource.OresHelper; import org.olat.home.HomeSite; import org.olat.portfolio.model.artefacts.AbstractArtefact; @@ -41,29 +48,30 @@ public class EPArtefactPoolExtension { public EPArtefactPoolExtension() { - NewControllerFactory.getInstance().addContextEntryControllerCreator(AbstractArtefact.class.getSimpleName(), new ContextEntryControllerCreator(){ + NewControllerFactory.getInstance().addContextEntryControllerCreator(AbstractArtefact.class.getSimpleName(), new DefaultContextEntryControllerCreator(){ @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return null; + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + return HomeSite.class.getName(); } @Override - public String getTabName(ContextEntry ce) { - // opens in home-tab - return null; + public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { + return true; } @Override - public String getSiteClassName(ContextEntry ce) { - return HomeSite.class.getName(); - } + public TabContext getTabContext(UserRequest ureq, OLATResourceable ores, ContextEntry mainEntry, List<ContextEntry> entries) { + Identity identity = ureq.getIdentity(); - @Override - public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return true; + OLATResourceable mapsRes = OresHelper.createOLATResourceableType("EPArtefacts"); + ContextEntry mapsEntry = BusinessControlFactory.getInstance().createContextEntry(mapsRes); + List<ContextEntry> rewritedEntries = new ArrayList<ContextEntry>(); + rewritedEntries.add(mapsEntry);//Menu node + rewritedEntries.add(mainEntry);//Map + OLATResourceable homeRes = OresHelper.createOLATResourceableInstance("HomeSite", identity.getKey()); + return new TabContext("", homeRes, rewritedEntries); } - }); } } diff --git a/src/main/java/org/olat/portfolio/EPMapExtension.java b/src/main/java/org/olat/portfolio/EPMapExtension.java new file mode 100644 index 0000000000000000000000000000000000000000..1621c8c37af035928a2605c01dd8595af0e8f0cc --- /dev/null +++ b/src/main/java/org/olat/portfolio/EPMapExtension.java @@ -0,0 +1,105 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.portfolio; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.olat.NewControllerFactory; +import org.olat.core.CoreSpringFactory; +import org.olat.core.gui.UserRequest; +import org.olat.core.gui.control.WindowControl; +import org.olat.core.id.Identity; +import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.BusinessControlFactory; +import org.olat.core.id.context.ContextEntry; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; +import org.olat.core.id.context.TabContext; +import org.olat.core.util.resource.OresHelper; +import org.olat.home.HomeSite; +import org.olat.portfolio.manager.EPFrontendManager; +import org.olat.portfolio.model.structel.EPDefaultMap; +import org.olat.resource.OLATResource; + +/** + * Rewrite the business path to map + * @author srosse + * + */ +public class EPMapExtension { + + public EPMapExtension() { + NewControllerFactory.getInstance().addContextEntryControllerCreator(EPDefaultMap.class.getSimpleName(), new MapContextEntryControllerCreator()); + } + + private class MapContextEntryControllerCreator extends DefaultContextEntryControllerCreator { + + @Override + public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { + return true; + } + + @Override + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + return HomeSite.class.getName(); + } + + @Override + public TabContext getTabContext(UserRequest ureq, OLATResourceable ores, ContextEntry mainEntry, List<ContextEntry> entries) { + Identity identity = ureq.getIdentity(); + EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class); + + String nodeTypeName = null; + OLATResource mapOres = ePFMgr.loadOlatResourceFromByKey(mainEntry.getOLATResourceable().getResourceableId()); + if(mapOres == null) { + //nothing to do; + } else if(ePFMgr.isMapOwner(identity, mapOres)) { + if("EPStructuredMap".equals(mapOres.getResourceableTypeName())) { + nodeTypeName = "EPStructuredMaps"; + } else { + nodeTypeName = "EPMaps"; + } + } else if(ePFMgr.isMapVisible(ureq.getIdentity(), mapOres)) { + //go to the shared pane + if(ePFMgr.isMapShared(mapOres)) { + nodeTypeName = "EPSharedMaps"; + } + } + + if(nodeTypeName == null) { + OLATResourceable homeRes = OresHelper.createOLATResourceableInstance("HomeSite", identity.getKey()); + return new TabContext("", homeRes, Collections.<ContextEntry>emptyList()); + } + + OLATResourceable mapsRes = OresHelper.createOLATResourceableType(nodeTypeName); + ContextEntry mapsEntry = BusinessControlFactory.getInstance().createContextEntry(mapsRes); + List<ContextEntry> rewritedEntries = new ArrayList<ContextEntry>(); + rewritedEntries.add(mapsEntry);//Menu node + rewritedEntries.add(mainEntry);//Map + if(entries != null && !entries.isEmpty()) { + rewritedEntries.addAll(entries);//more details + } + // -> HomeSite + OLATResourceable homeRes = OresHelper.createOLATResourceableInstance("HomeSite", identity.getKey()); + return new TabContext("", homeRes, rewritedEntries); + } + } +} diff --git a/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java b/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java index 3b80a6fe5bb41c622bd0743fbc401824bac046a5..1b095e4518aa156761b5375710190c7a36426670 100644 --- a/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java +++ b/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java @@ -26,7 +26,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.portfolio.manager.EPFrontendManager; import org.olat.portfolio.model.structel.PortfolioStructureMap; @@ -45,7 +45,7 @@ public class EPMapOnInvitationExtension { public EPMapOnInvitationExtension() { - NewControllerFactory.getInstance().addContextEntryControllerCreator("MapInvitation", new ContextEntryControllerCreator(){ + NewControllerFactory.getInstance().addContextEntryControllerCreator("MapInvitation", new DefaultContextEntryControllerCreator(){ @Override public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { @@ -64,13 +64,13 @@ public class EPMapOnInvitationExtension { } @Override - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { PortfolioStructureMap map = getMapFromContext(ce); return map.getTitle(); } @Override - public String getSiteClassName(ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return null; } diff --git a/src/main/java/org/olat/portfolio/EPMyMapsExtension.java b/src/main/java/org/olat/portfolio/EPMyMapsExtension.java index aff9ce29378afb689fda9ce0104302375996a18f..7a2848de5c35dcf12dc13a7ce502daa1b88d9274 100644 --- a/src/main/java/org/olat/portfolio/EPMyMapsExtension.java +++ b/src/main/java/org/olat/portfolio/EPMyMapsExtension.java @@ -24,7 +24,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.home.HomeSite; import org.olat.portfolio.model.structel.EPDefaultMap; @@ -43,7 +43,7 @@ public class EPMyMapsExtension { public EPMyMapsExtension() { - NewControllerFactory.getInstance().addContextEntryControllerCreator(EPDefaultMap.class.getSimpleName(), new ContextEntryControllerCreator(){ + NewControllerFactory.getInstance().addContextEntryControllerCreator(EPDefaultMap.class.getSimpleName(), new DefaultContextEntryControllerCreator(){ @Override public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { @@ -51,13 +51,13 @@ public class EPMyMapsExtension { } @Override - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { // opens in home-tab return null; } @Override - public String getSiteClassName(ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return HomeSite.class.getName(); } diff --git a/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java b/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java index 2f3d3f12a50bfd00a3b97644eed2becf57affcfd..add40d4c96505b006201298b52c2b86c01d9ea5c 100644 --- a/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java +++ b/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java @@ -24,7 +24,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.home.HomeSite; import org.olat.portfolio.model.structel.EPStructuredMap; @@ -41,7 +41,7 @@ public class EPMyStructuredMapsExtension { public EPMyStructuredMapsExtension() { - NewControllerFactory.getInstance().addContextEntryControllerCreator(EPStructuredMap.class.getSimpleName(), new ContextEntryControllerCreator(){ + NewControllerFactory.getInstance().addContextEntryControllerCreator(EPStructuredMap.class.getSimpleName(), new DefaultContextEntryControllerCreator(){ @Override public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { @@ -49,13 +49,13 @@ public class EPMyStructuredMapsExtension { } @Override - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { // opens in home-tab return null; } @Override - public String getSiteClassName(ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return HomeSite.class.getName(); } diff --git a/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java b/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java index b9a88dd15e0e7bbbee9372812b0cb92c33c37df9..5d5bcf3c06d778ade0e196001279b803aaf36f6e 100644 --- a/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java +++ b/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java @@ -24,7 +24,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.home.HomeSite; /** @@ -43,7 +43,7 @@ public class EPOtherMapsExtension { public EPOtherMapsExtension() { NewControllerFactory.getInstance().addContextEntryControllerCreator("Map", - new ContextEntryControllerCreator() { + new DefaultContextEntryControllerCreator() { @Override public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { @@ -51,13 +51,13 @@ public class EPOtherMapsExtension { } @Override - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { // opens in home-tab return null; } @Override - public String getSiteClassName(ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return HomeSite.class.getName(); } diff --git a/src/main/java/org/olat/portfolio/_spring/portfolioContext.xml b/src/main/java/org/olat/portfolio/_spring/portfolioContext.xml index 33d6c7f72dc7086f682a63e4f505de51d4c4f3f2..98f870f9720ffef38f363de7160afc739626a252 100644 --- a/src/main/java/org/olat/portfolio/_spring/portfolioContext.xml +++ b/src/main/java/org/olat/portfolio/_spring/portfolioContext.xml @@ -77,16 +77,10 @@ <bean class="org.olat.portfolio.EPArtefactPoolExtension"/> <!-- Portfolio map view in users Home --> - <bean class="org.olat.portfolio.EPMyMapsExtension"/> + <bean class="org.olat.portfolio.EPMapExtension"/> <!-- Portfolio map view for invitee --> <bean class="org.olat.portfolio.EPMapOnInvitationExtension"/> - - <!-- Portfolio map view in users Home --> - <bean class="org.olat.portfolio.EPMyStructuredMapsExtension"/> - - <!-- Portfolio map view in users Home --> - <bean class="org.olat.portfolio.EPOtherMapsExtension"/> <bean name="epArtefactManager" class="org.olat.portfolio.manager.EPArtefactManager"> <property name="dbInstance" ref="database"/> diff --git a/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java b/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java index f4fbccbe06723f77f917ad3064b48e92b230aa54..fd7aadee845dcd61cd7e233e4e42ffd701ccec7b 100755 --- a/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java +++ b/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java @@ -926,6 +926,15 @@ public class EPFrontendManager extends BasicManager { return structureManager.loadPortfolioStructureByKey(key); } + /** + * Load the OLAT resource with the primary of the structure element + * @param key cannot be null + * @return The resource or null if not found + */ + public OLATResource loadOlatResourceFromByKey(Long key) { + return structureManager.loadOlatResourceFromStructureElByKey(key); + } + /** * Retrieve the parent of the structure * @param structure @@ -1033,6 +1042,10 @@ public class EPFrontendManager extends BasicManager { public boolean isMapShared(PortfolioStructureMap map) { OLATResource resource = map.getOlatResource(); + return isMapShared(resource); + } + + public boolean isMapShared(OLATResourceable resource) { List<Policy> policies = securityManager.getPoliciesOfResource(resource, null); for(Policy policy:policies) { if(policy.getPermission().contains(Constants.PERMISSION_READ)) { diff --git a/src/main/java/org/olat/portfolio/manager/EPNotificationsHandler.java b/src/main/java/org/olat/portfolio/manager/EPNotificationsHandler.java index ed54fc4a7f076c2cf65acf9e0b24d4ab90ed7c4c..473487fd20ae64082644d7d90f111dcb4576290b 100644 --- a/src/main/java/org/olat/portfolio/manager/EPNotificationsHandler.java +++ b/src/main/java/org/olat/portfolio/manager/EPNotificationsHandler.java @@ -66,7 +66,8 @@ public class EPNotificationsHandler implements NotificationsHandler { // only do that if a map was found. // init the helper; - EPNotificationsHelper helper = new EPNotificationsHelper(p.getBusinessPath(), locale, subscriber.getIdentity()); + String businessPath = "[EPDefaultMap:" + amap.getKey() + "]"; + EPNotificationsHelper helper = new EPNotificationsHelper(businessPath, locale, subscriber.getIdentity()); // gather all changes for the current map if (NotificationsManager.getInstance().isPublisherValid(p)) { diff --git a/src/main/java/org/olat/portfolio/manager/EPNotificationsHelper.java b/src/main/java/org/olat/portfolio/manager/EPNotificationsHelper.java index 67a958970141c25d0f1421e0794096619725c758..be78f41a909bca11699a0dabde2d130d98d29951 100644 --- a/src/main/java/org/olat/portfolio/manager/EPNotificationsHelper.java +++ b/src/main/java/org/olat/portfolio/manager/EPNotificationsHelper.java @@ -115,8 +115,14 @@ public class EPNotificationsHelper { allItems.add(new SubscriptionListItem(translator.translate("li.newpage", new String[] { childPage.getTitle() }), urlToSend, structLink .getCreationDate(), "b_ep_page_icon")); } else { + String urlToSend = ""; + if(structLink.getParent() instanceof EPPage) { + EPPage childPage = (EPPage) structLink.getParent(); + String businessPath = rootBusinessPath + "[EPPage:" + childPage.getKey() + "]"; + urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(businessPath); + } allItems.add(new SubscriptionListItem(translator.translate("li.newstruct", new String[] { structLink.getChild().getTitle() }), - "", structLink.getCreationDate(), "b_ep_struct_icon")); + urlToSend, structLink.getCreationDate(), "b_ep_struct_icon")); } } } @@ -129,8 +135,9 @@ public class EPNotificationsHelper { } for (AbstractArtefact artfc : allAs) { if (artfc.getCollectionDate().after(compareDate)) { + String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(rootBusinessPath); allItems.add(new SubscriptionListItem(translator.translate("li.newartefact", new String[] { getFullNameFromUser(artfc.getAuthor() - .getUser()) }), "", artfc.getCollectionDate(), "b_eportfolio_link")); + .getUser()) }), urlToSend, artfc.getCollectionDate(), "b_eportfolio_link")); } } @@ -172,8 +179,9 @@ public class EPNotificationsHelper { } for (AbstractArtefact artfc : allAs) { if (artfc.getCollectionDate().after(compareDate)) { + String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(rootBusinessPath); allItems.add(new SubscriptionListItem( - translator.translate("li.newartefact", new String[] { getFullNameFromUser(artfc.getAuthor()) }), "", artfc + translator.translate("li.newartefact", new String[] { getFullNameFromUser(artfc.getAuthor()) }), urlToSend, artfc .getCollectionDate(), "b_eportfolio_link")); } } diff --git a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java index 6345033db8a3eb1cd8af9e09cc26a33bea0a3bd3..160b87c350ee78c6fd7f7a910acb776db8aca93d 100755 --- a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java +++ b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java @@ -1530,6 +1530,23 @@ public class EPStructureManager extends BasicManager { if (resources.isEmpty()) return null; return resources.get(0); } + + public OLATResource loadOlatResourceFromStructureElByKey(Long key) { + if (key == null) throw new NullPointerException(); + + StringBuilder sb = new StringBuilder(); + sb.append("select element.olatResource from ").append(EPStructureElement.class.getName()).append(" element") + .append(" where element.key=:key or element.olatResource.resId=:key "); + + DBQuery query = dbInstance.createQuery(sb.toString()); + query.setLong("key", key); + + @SuppressWarnings("unchecked") + List<OLATResource> resources = query.list(); + // if not found, it is an empty list + if (resources.isEmpty()) return null; + return resources.get(0); + } /** * Create a basic structure element diff --git a/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java b/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java index 66a2652997ca3ace34b4a5b6351000ed8574fc06..1310f4d8791a5994e50d768b7b7e5d2fba40ea75 100755 --- a/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java +++ b/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java @@ -35,6 +35,10 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; +import org.olat.core.gui.control.generic.dtabs.Activateable2; +import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.ContextEntry; +import org.olat.core.id.context.StateEntry; import org.olat.portfolio.EPSecurityCallback; import org.olat.portfolio.EPSecurityCallbackImpl; import org.olat.portfolio.PortfolioModule; @@ -61,7 +65,7 @@ import org.olat.portfolio.ui.filter.PortfolioFilterEditEvent; * * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com */ -public class EPArtefactPoolRunController extends BasicController { +public class EPArtefactPoolRunController extends BasicController implements Activateable2 { private VelocityContainer vC; private EPFrontendManager ePFMgr; @@ -290,6 +294,15 @@ public class EPArtefactPoolRunController extends BasicController { } } + @Override + public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { + if(entries == null || entries.isEmpty()) return; + + if(artCtrl != null) { + artCtrl.activate(ureq, entries, state); + } + } + private enum Filter { read_only, tags, diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultiArtefactsController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultiArtefactsController.java index f83b1ce64ac14f69f6c9eea458134b379173f1b7..d253301b03bb3b004b2672b89b8ea77c63419951 100644 --- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultiArtefactsController.java +++ b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultiArtefactsController.java @@ -23,6 +23,7 @@ import java.util.List; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; +import org.olat.core.gui.control.generic.dtabs.Activateable2; import org.olat.portfolio.model.artefacts.AbstractArtefact; /** @@ -34,7 +35,7 @@ import org.olat.portfolio.model.artefacts.AbstractArtefact; * Initial Date: 16.11.2010 <br> * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com */ -public interface EPMultiArtefactsController extends Controller { +public interface EPMultiArtefactsController extends Controller, Activateable2 { /** * signal the controller to refresh its childs or artefact-representations diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactPreviewController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactPreviewController.java index 3d6314f234d57247d1add566acc22ef0ca76b7ad..2955e02c744dfb12ba20684461b80d0c5f533dfe 100644 --- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactPreviewController.java +++ b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactPreviewController.java @@ -40,6 +40,9 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowController; import org.olat.core.id.Identity; +import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.ContextEntry; +import org.olat.core.id.context.StateEntry; import org.olat.portfolio.manager.EPFrontendManager; import org.olat.portfolio.model.artefacts.AbstractArtefact; @@ -228,6 +231,27 @@ public class EPMultipleArtefactPreviewController extends BasicController impleme } + @Override + public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { + if(entries == null || entries.isEmpty()) return; + + OLATResourceable ores = entries.get(0).getOLATResourceable(); + if("AbstractArtefact".equals(ores.getResourceableTypeName())) { + Long resId = ores.getResourceableId(); + + int index = 0; + for(AbstractArtefact artefact: artefactsFullList) { + if(artefact.getKey().equals(resId) || artefact.getResourceableId().equals(resId)) { + int rest = (index % artefactsPerPage); + int page = (index - rest) / artefactsPerPage; + preparePaging(ureq, page + 1); + break; + } + index++; + } + } + } + private Map<String, Boolean> getArtefactAttributeDisplayConfig(Identity ident) { if (artAttribConfig == null) { artAttribConfig = ePFMgr.getArtefactAttributeConfig(ident); diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactSmallReadOnlyPreviewController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactSmallReadOnlyPreviewController.java index 39f9429538b9ae5d54c647289a006a09873bbaf8..e3a98f3ddafafb17a735badf0f2693df41f30bc1 100644 --- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactSmallReadOnlyPreviewController.java +++ b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactSmallReadOnlyPreviewController.java @@ -32,6 +32,9 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; +import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.ContextEntry; +import org.olat.core.id.context.StateEntry; import org.olat.portfolio.EPArtefactHandler; import org.olat.portfolio.EPSecurityCallback; import org.olat.portfolio.PortfolioModule; @@ -180,6 +183,22 @@ public class EPMultipleArtefactSmallReadOnlyPreviewController extends BasicContr super.event(ureq, source, event); fireEvent(ureq, event); // pass to others } + + @Override + public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { + if(entries == null || entries.isEmpty()) return; + + OLATResourceable ores = entries.get(0).getOLATResourceable(); + if("AbstractArtefact".equals(ores.getResourceableTypeName())) { + Long resId = ores.getResourceableId(); + for(AbstractArtefact artefact: artefacts) { + if(artefact.getKey().equals(resId) || artefact.getResourceableId().equals(resId)) { + System.out.println("Match"); + } + } + } + + } /** * @see org.olat.core.gui.control.DefaultController#doDispose() diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactsAsTableController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactsAsTableController.java index 9360667fe9b4d943935b8710f61e77c20e64d6ea..1c327b24cb1c90bc80efa8e533d12a53f598dd5f 100644 --- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactsAsTableController.java +++ b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactsAsTableController.java @@ -40,6 +40,9 @@ import org.olat.core.gui.control.generic.closablewrapper.CloseableModalWindowWra import org.olat.core.gui.control.generic.modal.DialogBoxController; import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory; import org.olat.core.gui.translator.Translator; +import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.ContextEntry; +import org.olat.core.id.context.StateEntry; import org.olat.portfolio.EPArtefactHandler; import org.olat.portfolio.EPSecurityCallback; import org.olat.portfolio.EPUIFactory; @@ -259,6 +262,27 @@ public class EPMultipleArtefactsAsTableController extends BasicController implem super.event(ureq, source, event); } + @Override + public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { + if(entries == null || entries.isEmpty()) return; + + OLATResourceable ores = entries.get(0).getOLATResourceable(); + if("AbstractArtefact".equals(ores.getResourceableTypeName())) { + Long resId = ores.getResourceableId(); + ArtefactTableDataModel model = (ArtefactTableDataModel) artefactListTblCtrl.getTableDataModel(); + for(int i=0; i< model.getRowCount(); i++) { + AbstractArtefact artefact = (AbstractArtefact)model.getObject(i); + if(artefact.getKey().equals(resId)) { + int artefactsPerPage = artefactListTblCtrl.getPageSize(); + int rest = (i % artefactsPerPage); + int page = (i - rest) / artefactsPerPage; + artefactListTblCtrl.setPage(new Integer(page + 1)); + break; + } + } + } + } + private void showMoveTree(UserRequest ureq, AbstractArtefact artefact){ moveTreeCtrl = new EPCollectStepForm04(ureq, getWindowControl(), artefact, struct); listenTo(moveTreeCtrl); diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPMapViewController.java b/src/main/java/org/olat/portfolio/ui/structel/EPMapViewController.java index 7653dec380636d048be01c3ef9be885bc3e2330a..cbb2f8512084be92da06123792866c371479a705 100644 --- a/src/main/java/org/olat/portfolio/ui/structel/EPMapViewController.java +++ b/src/main/java/org/olat/portfolio/ui/structel/EPMapViewController.java @@ -232,6 +232,10 @@ public class EPMapViewController extends BasicController implements Activateable pageCtrl.activate(ureq, entries, state); } + public PortfolioStructureMap getMap() { + return map; + } + private EPPage getSelectedPage(PortfolioStructure structure) { PortfolioStructure current = structure; diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPMultipleMapController.java b/src/main/java/org/olat/portfolio/ui/structel/EPMultipleMapController.java index 1f89a093bf807ce7ae46ee1dec17df97c0fa4afe..9519a636d2073be656fb315fed51193da0dbe4fc 100644 --- a/src/main/java/org/olat/portfolio/ui/structel/EPMultipleMapController.java +++ b/src/main/java/org/olat/portfolio/ui/structel/EPMultipleMapController.java @@ -23,7 +23,6 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import org.olat.basesecurity.BaseSecurityManager; import org.olat.core.CoreSpringFactory; import org.olat.core.gui.UserRequest; import org.olat.core.gui.Windows; @@ -44,11 +43,9 @@ import org.olat.core.gui.control.generic.modal.DialogBoxController; import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory; import org.olat.core.helpers.Settings; import org.olat.core.id.Identity; -import org.olat.core.id.UserConstants; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.StateEntry; import org.olat.core.logging.activity.ThreadLocalUserActivityLogger; -import org.olat.core.util.StringHelper; import org.olat.core.util.resource.OresHelper; import org.olat.home.HomeSite; import org.olat.portfolio.EPLoggingAction; @@ -480,14 +477,29 @@ public class EPMultipleMapController extends BasicController implements Activate private void activateMap(UserRequest ureq, Long mapKey) { if(mapKey == null) return; - // we have a key, find the corresponding map + boolean foundTheMap = false; + // we have a key, find the corresponding map with the current option (restrcited view or not) for(PortfolioStructureMap map: userMaps) { if(map.getKey().equals(mapKey) || (map.getResourceableId().equals(mapKey))) { activateMap(ureq, map); fireEvent(ureq, new EPMapEvent(EPStructureEvent.SELECT, map)); + foundTheMap = true; break; } } + + if(!foundTheMap) { + // map not found, switch the option and retry to found the map + restrictShareView = !restrictShareView; + initOrUpdateMaps(ureq); + for(PortfolioStructureMap map: userMaps) { + if(map.getKey().equals(mapKey) || (map.getResourceableId().equals(mapKey))) { + activateMap(ureq, map); + fireEvent(ureq, new EPMapEvent(EPStructureEvent.SELECT, map)); + break; + } + } + } } public void activateMap(UserRequest ureq, PortfolioStructureMap struct){ diff --git a/src/main/java/org/olat/repository/CatalogContextEntryControllerCreator.java b/src/main/java/org/olat/repository/CatalogContextEntryControllerCreator.java index 0a4fd9b0c68dec19aa22f2e0196f8e1a04065d50..6f1a58b3745f8c59ccb101e5f450a612bb73cb11 100644 --- a/src/main/java/org/olat/repository/CatalogContextEntryControllerCreator.java +++ b/src/main/java/org/olat/repository/CatalogContextEntryControllerCreator.java @@ -24,7 +24,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.repository.site.RepositorySite; /** @@ -34,7 +34,7 @@ import org.olat.repository.site.RepositorySite; * Initial Date: 11 fev. 2010 <br> * @author srosse, stephane.rosse@frentix.com */ -public class CatalogContextEntryControllerCreator implements ContextEntryControllerCreator { +public class CatalogContextEntryControllerCreator extends DefaultContextEntryControllerCreator { @Override public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { @@ -42,12 +42,12 @@ public class CatalogContextEntryControllerCreator implements ContextEntryControl } @Override - public String getSiteClassName(ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return RepositorySite.class.getName(); } @Override - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { return null; } diff --git a/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java b/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java index 643caf2e19a5554ff7245b526e90423479b94218..f09e8d5cc07cfcc51ebf19051c596e084045d281 100644 --- a/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java +++ b/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java @@ -24,7 +24,7 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; /** * <h3>Description:</h3> @@ -36,7 +36,7 @@ import org.olat.core.id.context.ContextEntryControllerCreator; * * @author gnaegi, gnaegi@frentix.com, www.frentix.com */ -public class RepositoryContextEntryControllerCreator implements ContextEntryControllerCreator { +public class RepositoryContextEntryControllerCreator extends DefaultContextEntryControllerCreator { /** * @see org.olat.core.id.context.ContextEntryControllerCreator#createController(org.olat.core.id.context.ContextEntry, @@ -56,7 +56,8 @@ public class RepositoryContextEntryControllerCreator implements ContextEntryCont /** * @see org.olat.core.id.context.ContextEntryControllerCreator#getTabName(org.olat.core.id.context.ContextEntry) */ - public String getTabName(ContextEntry ce) { + @Override + public String getTabName(ContextEntry ce, UserRequest ureq) { OLATResourceable ores = ce.getOLATResourceable(); RepositoryManager repom = RepositoryManager.getInstance(); @@ -67,7 +68,8 @@ public class RepositoryContextEntryControllerCreator implements ContextEntryCont /** * @see org.olat.core.id.context.ContextEntryControllerCreator#getSiteClassName(org.olat.core.id.context.ContextEntry) */ - public String getSiteClassName(ContextEntry ce) { + @Override + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return null; } diff --git a/src/main/java/org/olat/user/IdentityContextEntryControllerCreator.java b/src/main/java/org/olat/user/IdentityContextEntryControllerCreator.java index 35ac132fa70a2bd0a50f740a90349cad4612b613..eac01605c6e919ddb178907cd2c535690629eb25 100644 --- a/src/main/java/org/olat/user/IdentityContextEntryControllerCreator.java +++ b/src/main/java/org/olat/user/IdentityContextEntryControllerCreator.java @@ -26,10 +26,9 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator2; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; - import org.olat.home.HomeSite; /** @@ -42,7 +41,7 @@ import org.olat.home.HomeSite; * * @author gnaegi, gnaegi@frentix.com, www.frentix.com */ -public class IdentityContextEntryControllerCreator implements ContextEntryControllerCreator2 { +public class IdentityContextEntryControllerCreator extends DefaultContextEntryControllerCreator { private static final OLog log = Tracing.createLoggerFor(IdentityContextEntryControllerCreator.class); /** @@ -57,17 +56,9 @@ public class IdentityContextEntryControllerCreator implements ContextEntryContro return uimc; } - /** - * @see org.olat.core.id.context.ContextEntryControllerCreator#getSiteClassName(org.olat.core.id.context.ContextEntry) - */ - public String getSiteClassName(ContextEntry ce) { - // opened as tab not site - return null; - } - @Override //fxdiff BAKS-7 Resume function - public String getSiteClassName(UserRequest ureq, ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { Long resId = ce.getOLATResourceable().getResourceableId(); if(resId != null && resId.equals(ureq.getIdentity().getKey())) { return HomeSite.class.getName(); @@ -78,7 +69,7 @@ public class IdentityContextEntryControllerCreator implements ContextEntryContro /** * @see org.olat.core.id.context.ContextEntryControllerCreator#getTabName(org.olat.core.id.context.ContextEntry) */ - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { Identity identity = extractIdentity(ce); if (identity == null) return null; return identity.getName();