/** * <a href="http://www.openolat.org"> * OpenOLAT - Online Learning and Training</a><br> * <p> * Licensed under the Apache License, Version 2.0 (the "License"); <br> * you may not use this file except in compliance with the License.<br> * You may obtain a copy of the License at the * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> * <p> * Unless required by applicable law or agreed to in writing,<br> * software distributed under the License is distributed on an "AS IS" BASIS, <br> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> * See the License for the specific language governing permissions and <br> * limitations under the License. * <p> * Initial code contributed and copyrighted by<br> * frentix GmbH, http://www.frentix.com * <p> */ package org.olat.portfolio.ui.structel; import java.util.ArrayList; import java.util.List; import org.olat.core.CoreSpringFactory; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.velocity.VelocityContainer; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; import org.olat.portfolio.EPSecurityCallback; import org.olat.portfolio.EPUIFactory; import org.olat.portfolio.manager.EPFrontendManager; import org.olat.portfolio.model.artefacts.AbstractArtefact; import org.olat.portfolio.model.restriction.CollectRestriction; import org.olat.portfolio.model.structel.PortfolioStructure; import org.olat.portfolio.ui.artefacts.view.EPMultiArtefactsController; import org.olat.portfolio.ui.structel.edit.EPCollectRestrictionResultController; /** * Description:<br> * displays child structure elements on page or on a map * * <P> * Initial Date: 24.08.2010 <br> * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com */ public class EPStructureElementsController extends BasicController { private List<PortfolioStructure> structElements; List<Controller> tableCtrls; List<Controller> addBtnCtrls; private final EPSecurityCallback secCallback; private final EPFrontendManager ePFMgr; private boolean parentMapClosed; private int maxStructAmount; private final VelocityContainer flc; public EPStructureElementsController(UserRequest ureq, WindowControl wControl, List<PortfolioStructure> structElements, EPSecurityCallback secCallback, boolean parentMapClosed) { super(ureq, wControl); this.structElements = structElements; this.secCallback = secCallback; this.parentMapClosed = parentMapClosed; this.maxStructAmount = 1; ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager"); flc = createVelocityContainer("structElements"); initForm(ureq); putInitialPanel(flc); } /** * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer, org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest) */ protected void initForm(UserRequest ureq) { flc.contextPut("structElements", structElements); tableCtrls = new ArrayList<Controller>(); addBtnCtrls = new ArrayList<Controller>(); int i = 1; removeComponents(); for (PortfolioStructure portStruct : structElements) { if(secCallback.isRestrictionsEnabled()) { List<CollectRestriction> restrictions = portStruct.getCollectRestrictions(); if(!restrictions.isEmpty()) { boolean check = ePFMgr.checkCollectRestriction(portStruct); EPCollectRestrictionResultController resultCtrl = new EPCollectRestrictionResultController(ureq, getWindowControl()); resultCtrl.setMessage(portStruct.getCollectRestrictions(), check); flc.put("checkResults" + i, resultCtrl.getInitialComponent()); listenTo(resultCtrl); } } // get artefacts for this structure List<AbstractArtefact> artefacts = ePFMgr.getArtefacts(portStruct); if (artefacts.size() != 0) { EPMultiArtefactsController artefactCtrl = EPUIFactory.getConfigDependentArtefactsControllerForStructure(ureq, getWindowControl(), artefacts, portStruct, secCallback); flc.put("artefacts" + i, artefactCtrl.getInitialComponent()); listenTo(artefactCtrl); tableCtrls.add(artefactCtrl); } if(!parentMapClosed && secCallback.canAddArtefact()) { // get an addElement-button for each structure EPAddElementsController addButton = new EPAddElementsController(ureq, getWindowControl(), portStruct); listenTo(addButton); addButton.setShowLink(EPAddElementsController.ADD_ARTEFACT); flc.put("addButton" + i, addButton.getInitialComponent()); addBtnCtrls.add(addButton); } i++; } if (i!=maxStructAmount) maxStructAmount = i; } // remove components which were put before to be able to update flc by initForm private void removeComponents(){ for (int j = 1; j < maxStructAmount; j++) { flc.remove(flc.getComponent("artefacts" + j)); flc.remove(flc.getComponent("addButton" + j)); } } /** * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event) */ @Override protected void event(UserRequest ureq, Controller source, Event event) { super.event(ureq, source, event); if (event instanceof EPStructureChangeEvent){ //update the elements EPStructureChangeEvent changeEvent = (EPStructureChangeEvent)event; PortfolioStructure changedEl = changeEvent.getPortfolioStructure(); if(changedEl != null) { int index = 0; for(PortfolioStructure strucEl:structElements) { if(changedEl.getKey().equals(strucEl.getKey())) { structElements.set(index, changedEl); break; } index++; } } // something changed initForm(ureq); //pass it on, parent controllers (EPPageViewController) might need to update fireEvent(ureq, changeEvent); } } @Override protected void event(UserRequest ureq, Component source, Event event) { // } /** * @see org.olat.core.gui.control.DefaultController#doDispose() */ @Override protected void doDispose() { // dispose all in table-ctrls, button-ctrls List<Controller> allCtrls = new ArrayList<Controller>(); allCtrls.addAll(addBtnCtrls); allCtrls.addAll(tableCtrls); for (Controller ctrl : allCtrls) { removeAsListenerAndDispose(ctrl); } addBtnCtrls = null; tableCtrls = null; } }