/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package de.unioninvestment.eai.portal.portlet.crud.scripting.model; import de.unioninvestment.eai.portal.portlet.crud.domain.events.*; import de.unioninvestment.eai.portal.portlet.crud.domain.model.Portlet; import groovy.lang.Closure; import java.util.*; import static java.util.Collections.unmodifiableMap; /** * Repräsentation das Portlets. * * @author siva.selvarajah */ public class ScriptPortlet { private Portlet portlet; private ScriptPanel scriptPage; private ScriptTabs scriptTabs; private List<ScriptDialog> scriptDialogs = new ArrayList<ScriptDialog>(); @SuppressWarnings("unused") private ScriptUser currentUser; private Map<String, Object> elementsById = new HashMap<String, Object>(); private Closure<?> onLoad; private Closure<?> onReload; private Closure<?> onRefresh; private boolean inTest = false; /** * Konstruktor mit Parameter. * * @param portlet * Portlet */ /** * @param portlet */ ScriptPortlet(Portlet portlet, boolean inTest) { this.portlet = portlet; addEventHandlerForOnRefresh(); addEventHandlerForOnLoad(); addEventHandlerForOnReload(); this.inTest = inTest; } private void addEventHandlerForOnLoad() { this.portlet.addLoadHandler(new PortletLoadedEventHandler() { private static final long serialVersionUID = 1L; @Override public void onPortletLoad(PortletLoadedEvent event) { if (onLoad != null) { onLoad.call(ScriptPortlet.this); } } }); } private void addEventHandlerForOnReload() { this.portlet.addReloadHandler(new PortletReloadedEventHandler() { private static final long serialVersionUID = 1L; @Override public void onPortletReload(PortletReloadedEvent event) { if (onReload != null) { onReload.call(ScriptPortlet.this); } } }); } private void addEventHandlerForOnRefresh() { this.portlet.addRefreshHandler(new PortletRefreshedEventHandler() { private static final long serialVersionUID = 1L; @Override public void onPortletRefresh(PortletRefreshedEvent event) { if (onRefresh != null) { onRefresh.call(ScriptPortlet.this); } } }); } /** * @return Seite */ public ScriptPanel getPage() { return scriptPage; } /** * @return Alle dem Portlet direkt untergeordneten Tabs */ public ScriptTabs getTabs() { return scriptTabs; } List<ScriptDialog> getDialogs() { return scriptDialogs; } void addDialog(ScriptDialog scriptDialog) { scriptDialogs.add(scriptDialog); } /** * @return Titel */ public String getTitle() { return portlet.getTitle(); } /** * Fügt eine Seite dem Portlet hinzu. * * @param scriptPage * Seite */ void setPage(ScriptPage scriptPage) { this.scriptPage = scriptPage; scriptPage.setPortlet(this); } /** * Fügt eine Liste von Reitern dem Portlet hinzu. * * @param scriptTabs * Reiterliste */ void setTabs(ScriptTabs scriptTabs) { this.scriptTabs = scriptTabs; scriptTabs.setPortlet(this); } /** * @param id * die ID der Komponente * @return die entsprechende Script-Komponente */ public Object getElementById(String id) { Object result = elementsById.get(id); if (result == null) { throw new NoSuchElementException( "Unknown Component id '" + id + "'. The element does not exist or is excluded from build by permissions"); } return result; } /** * Fügt ein Element hinzu. * * @param id * Id des Elements * @param scriptElement * Element */ void addElementById(String id, Object scriptElement) { this.elementsById.put(id, scriptElement); } /** * @param onReload * Closure mit dem Parameter { ScriptPortlet it -> ... }, die * nach dem Reload des Portlets aufgerufen wird */ public void setOnReload(Closure<?> onReload) { this.onReload = onReload; } /** * @param onLoad * Closure mit dem Parameter { ScriptPortlet it -> ... }, die * nach dem Laden des Portlets aufgerufen wird */ public void setOnLoad(Closure<?> onLoad) { this.onLoad = onLoad; } /** * @param onRefresh * Closure mit dem Parameter { ScriptPortlet it -> ... }, die * nach dem Refresh des Portlets aufgerufen wird */ public void setOnRefresh(Closure<?> onRefresh) { this.onRefresh = onRefresh; } /** * @return Closure mit dem Parameter { ScriptPortlet it -> ... }, die nach * dem Reload des Portlets aufgerufen wird */ public Closure<?> getOnReload() { return onReload; } /** * @return Closure mit dem Parameter { ScriptPortlet it -> ... }, die nach * dem Laden des Portlets aufgerufen wird */ public Closure<?> getOnLoad() { return onLoad; } /** * @return Closure mit dem Parameter { ScriptPortlet it -> ... }, die nach * dem Refresh des Portlets aufgerufen wird */ public Closure<?> getOnRefresh() { return onRefresh; } /** * Triggers a refresh of all components of the portlet */ public void refresh() { portlet.refresh(); } public boolean isInTest() { return inTest; } public Map<String, Object> getElements() { return inTest ? elementsById : unmodifiableMap(elementsById); } /** * @return Preferences as Map */ public Map<String, String> getPreferences() { return new ScriptPreferences(portlet.getPreferences()); } /** * @return Zugriff auf Caching-Mechanismen */ public ScriptPortletCaching getCaching() { return new ScriptPortletCaching(portlet.getCaching()); } }