/** * <a href="http://www.openolat.org"> * OpenOLAT - Online Learning and Training</a><br> * <p> * Licensed under the Apache License, Version 2.0 (the "License"); <br> * you may not use this file except in compliance with the License.<br> * You may obtain a copy of the License at the * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> * <p> * Unless required by applicable law or agreed to in writing,<br> * software distributed under the License is distributed on an "AS IS" BASIS, <br> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> * See the License for the specific language governing permissions and <br> * limitations under the License. * <p> * Initial code contributed and copyrighted by<br> * frentix GmbH, http://www.frentix.com * <p> */ package org.olat.portfolio.ui; import java.util.List; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.LinkFactory; import org.olat.core.gui.components.panel.MainPanel; import org.olat.core.gui.components.segmentedview.SegmentViewComponent; import org.olat.core.gui.components.segmentedview.SegmentViewEvent; import org.olat.core.gui.components.segmentedview.SegmentViewFactory; import org.olat.core.gui.components.velocity.VelocityContainer; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.generic.dtabs.Activateable2; import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.StateEntry; import org.olat.core.util.resource.OresHelper; import org.olat.portfolio.manager.EPFrontendManager; import org.springframework.beans.factory.annotation.Autowired; /** * * Initial date: 24.03.2014<br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ public class EPOverviewController extends BasicController implements Activateable2 { private EPMapRunController myMapsCtrl; private EPMapRunController myTasksCtrl; private EPMapRunController publicMapsCtrl; private EPArtefactPoolRunController artefactsCtrl; private final VelocityContainer mainVC; private final SegmentViewComponent segmentView; private final Link myArtefactLink, myMapLink, myTaskLink, publicMapLink; @Autowired private EPFrontendManager ePFMgr; public EPOverviewController(UserRequest ureq, WindowControl wControl) { super(ureq, wControl); mainVC = createVelocityContainer("segments"); segmentView = SegmentViewFactory.createSegmentView("segments", mainVC, this); myArtefactLink = LinkFactory.createLink("myartefacts.menu.title", mainVC, this); myArtefactLink.setElementCssClass("o_sel_ep_my_artfeacts"); segmentView.addSegment(myArtefactLink, true); myMapLink = LinkFactory.createLink("mymaps.menu.title", mainVC, this); myMapLink.setElementCssClass("o_sel_ep_my_maps"); segmentView.addSegment(myMapLink, false); myTaskLink = LinkFactory.createLink("mystructuredmaps.menu.title", mainVC, this); myTaskLink.setElementCssClass("o_sel_ep_my_tasks"); segmentView.addSegment(myTaskLink, false); publicMapLink = LinkFactory.createLink("othermaps.menu.title", mainVC, this); publicMapLink.setElementCssClass("o_sel_ep_public_maps"); segmentView.addSegment(publicMapLink, false); doOpenMyArtefacts(ureq); MainPanel panel = new MainPanel("portfolio"); panel.setContent(mainVC); putInitialPanel(panel); } @Override protected void doDispose() { // } @Override protected void event(UserRequest ureq, Component source, Event event) { if(source == segmentView) { if(event instanceof SegmentViewEvent) { SegmentViewEvent sve = (SegmentViewEvent)event; String segmentCName = sve.getComponentName(); Component clickedLink = mainVC.getComponent(segmentCName); if (clickedLink == myArtefactLink) { doOpenMyArtefacts(ureq); } else if (clickedLink == myMapLink) { doOpenMyMaps(ureq); } else if (clickedLink == myTaskLink) { doOpenMyTasks(ureq); } else if (clickedLink == publicMapLink) { doOpenPublicMaps(ureq); } } } } @Override public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { if(entries == null || entries.isEmpty()) return; String type = entries.get(0).getOLATResourceable().getResourceableTypeName(); if("EPDefaultMap".equalsIgnoreCase(type)) { Long mapKey = entries.get(0).getOLATResourceable().getResourceableId(); if(mapKey == 0l) { doOpenMyMaps(ureq).activate(ureq, entries, state); segmentView.select(myMapLink); } else { boolean owner = ePFMgr.isMapOwner(getIdentity(), mapKey); if(owner) { doOpenMyMaps(ureq).activate(ureq, entries, state); segmentView.select(myMapLink); } else { doOpenPublicMaps(ureq).activate(ureq, entries, state); segmentView.select(publicMapLink); } } } else if("EPStructuredMap".equalsIgnoreCase(type)) { doOpenMyTasks(ureq).activate(ureq, entries, state); segmentView.select(myTaskLink); } else if("Artefact".equalsIgnoreCase(type)) { List<ContextEntry> subEntries = entries.subList(1, entries.size()); doOpenMyArtefacts(ureq).activate(ureq, subEntries, entries.get(0).getTransientState()); segmentView.select(myArtefactLink); } } private EPArtefactPoolRunController doOpenMyArtefacts(UserRequest ureq) { OLATResourceable ores = OresHelper.createOLATResourceableInstance("Artefact", 0l); addToHistory(ureq, ores, null);// pool run controller set its own business path after if(artefactsCtrl == null) { WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ores, null, getWindowControl()); artefactsCtrl = new EPArtefactPoolRunController(ureq, addToHistory(ureq, bwControl)); listenTo(artefactsCtrl); } mainVC.put("segmentCmp", artefactsCtrl.getInitialComponent()); return artefactsCtrl; } private EPMapRunController doOpenMyMaps(UserRequest ureq) { if(myMapsCtrl == null) { myMapsCtrl = new EPMapRunController(ureq, getWindowControl(), true, EPMapRunViewOption.MY_DEFAULTS_MAPS, null); listenTo(myMapsCtrl); } mainVC.put("segmentCmp", myMapsCtrl.getInitialComponent()); addToHistory(ureq, OresHelper.createOLATResourceableType("EPDefaultMap"), null); return myMapsCtrl; } private EPMapRunController doOpenMyTasks(UserRequest ureq) { if(myTasksCtrl == null) { myTasksCtrl = new EPMapRunController(ureq, getWindowControl(), false, EPMapRunViewOption.MY_EXERCISES_MAPS, null); listenTo(myTasksCtrl); } mainVC.put("segmentCmp", myTasksCtrl.getInitialComponent()); addToHistory(ureq, OresHelper.createOLATResourceableType("EPStructuredMap"), null); return myTasksCtrl; } private EPMapRunController doOpenPublicMaps(UserRequest ureq) { if(publicMapsCtrl == null) { publicMapsCtrl = new EPMapRunController(ureq, getWindowControl(), false, EPMapRunViewOption.OTHERS_MAPS, null); listenTo(publicMapsCtrl); } mainVC.put("segmentCmp", publicMapsCtrl.getInitialComponent()); addToHistory(ureq, OresHelper.createOLATResourceableInstance("EPDefaultMap", 0l), null); return publicMapsCtrl; } }