/* * * Copyright 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved. * * This file is part of jAPS software. * jAPS is a free software; * you can redistribute it and/or modify it * under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2. * * See the file License for the specific language governing permissions * and limitations under the License * * * * Copyright 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved. * */ package com.agiletec.apsadmin.portal.specialshowlet.navigator; import java.util.ArrayList; import java.util.List; import com.agiletec.aps.system.ApsSystemUtils; import com.agiletec.aps.system.services.page.IPage; import com.agiletec.aps.system.services.page.Showlet; import com.agiletec.aps.system.services.page.showlet.INavigatorParser; import com.agiletec.aps.system.services.page.showlet.NavigatorExpression; import com.agiletec.apsadmin.portal.specialshowlet.SimpleShowletConfigAction; /** * Classe action per la gestione della configurazione delle showlet tipo Navigatore. * @author E.Santoboni */ public class NavigatorShowletConfigAction extends SimpleShowletConfigAction implements INavigatorShowletConfigAction { @Override public void validate() { super.validate(); if (this.getActionErrors().size()>0 || this.getFieldErrors().size()>0) { super.extractInitConfig(); this.createExpressions(this.getNavSpec()); } } @Override protected String extractInitConfig() { try { String result = super.extractInitConfig(); if (!result.equals(SUCCESS)) return result; Showlet showlet = this.getShowlet(); String navSpec = null; if (null != showlet.getConfig()) { navSpec = showlet.getConfig().getProperty("navSpec"); } this.createExpressions(navSpec); this.setNavSpec(navSpec); } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "extractInitConfig"); return FAILURE; } return SUCCESS; } @Override public String addExpression() { try { NavigatorExpression newExpression = this.createNewExpression(); List<NavigatorExpression> expressions = this.getNavigatorParser().getExpressions(this.getNavSpec()); expressions.add(newExpression); this.createNavigatorParams(expressions); } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "addExpression"); return FAILURE; } return SUCCESS; } /** * Crea una nuova espressione in base ai parametri della richiesta corrente. * @return La nuova espressione. */ protected NavigatorExpression createNewExpression() { NavigatorExpression navExpression = new NavigatorExpression(); navExpression.setSpecId(this.getSpecId()); navExpression.setSpecAbsLevel(this.getSpecAbsLevel()); navExpression.setSpecCode(this.getSpecCode()); navExpression.setSpecSuperLevel(this.getSpecSuperLevel()); if (this.getOperatorId() > 0) { navExpression.setOperatorId(this.getOperatorId()); navExpression.setOperatorSubtreeLevel(this.getOperatorSubtreeLevel()); } return navExpression; } @Override public String moveExpression() { try { String navSpec = this.getNavSpec(); List<NavigatorExpression> expressions = this.getNavigatorParser().getExpressions(navSpec); this.executeMoveExpression(expressions); this.createNavigatorParams(expressions); } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "moveExpression"); return FAILURE; } return SUCCESS; } /** * Esegue il movimento richiesto sulla lista di espressioni specificata. * Il tipo di movimento richiesto viene ricavato in base ai parametri della richiesta corrente. * @param expressions La lista di espressioni nel quale eseguire il movimento richiesto. */ protected void executeMoveExpression(List<NavigatorExpression> expressions) { int elementIndex = this.getExpressionIndex(); if (elementIndex < 0 || elementIndex >= expressions.size()) return; String movement = this.getMovement(); if (!(elementIndex==0 && movement.equals(INavigatorShowletConfigAction.MOVEMENT_UP_CODE)) && !(elementIndex == expressions.size()-1 && movement.equals(INavigatorShowletConfigAction.MOVEMENT_DOWN_CODE))) { NavigatorExpression elementToMove = expressions.get(elementIndex); expressions.remove(elementIndex); if (movement.equals(INavigatorShowletConfigAction.MOVEMENT_UP_CODE)) { expressions.add(elementIndex-1, elementToMove); } if (movement.equals(INavigatorShowletConfigAction.MOVEMENT_DOWN_CODE)) { expressions.add(elementIndex+1, elementToMove); } } } @Override public String removeExpression() { try { String navSpec = this.getNavSpec(); List<NavigatorExpression> expressions = this.getNavigatorParser().getExpressions(navSpec); int elementIndex = this.getExpressionIndex(); if (elementIndex >= 0 && elementIndex < expressions.size()) { expressions.remove(elementIndex); } this.createNavigatorParams(expressions); } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "removeExpression"); return FAILURE; } return SUCCESS; } /** * Crea e valorizza l'action corrente in base ai parametri ricavati da una lista di espressioni. * @param expressions La lista di espressioni tramite il quale valorizzare l'action corrente. * @throws Throwable Il caso di errore. */ protected void createNavigatorParams(List<NavigatorExpression> expressions) throws Throwable { Showlet prototype = this.createNewShowlet(); //COSTRUISCE SHOWLET PROTOTIPO VUOTA E SETTA SPECIFICATORE String navSpec = this.getNavigatorParser().getSpec(expressions); prototype.getConfig().setProperty("navSpec", navSpec); //COSTRUISCE LE NUOVE ESPRESSIONI IN BASE AL NUOVO PARAMETRO this.createExpressions(expressions); this.setShowlet(prototype); //SETTA LA SHOWLET COSTRUITA this.setNavSpec(navSpec); } public String getNavSpec() { return _navSpec; } public void setNavSpec(String navSpec) { this._navSpec = navSpec; } protected void createExpressions(String navSpec) { List<NavigatorExpression> expressions = this.getNavigatorParser().getExpressions(navSpec); this.createExpressions(expressions); } protected void createExpressions(List<NavigatorExpression> expressions) { if (this.getExpressions() == null) { this.setExpressions(new ArrayList<NavigatorExpression>()); } this.getExpressions().addAll(expressions); } /** * Restituisce una lista piatta delle pagine del portale. * @return La lista delle pagine del portale. */ public List<IPage> getPages() { IPage root = this.getPageManager().getRoot(); List<IPage> pages = new ArrayList<IPage>(); this.addPages(root, pages); return pages; } private void addPages(IPage page, List<IPage> pages) { pages.add(page); IPage[] children = page.getChildren(); for (int i=0; i<children.length; i++) { this.addPages(children[i], pages); } } @Override public List<NavigatorExpression> getExpressions() { return _expressions; } protected void setExpressions(List<NavigatorExpression> expressions) { this._expressions = expressions; } protected INavigatorParser getNavigatorParser() { return _navigatorParser; } public void setNavigatorParser(INavigatorParser navigatorParser) { this._navigatorParser = navigatorParser; } public int getOperatorId() { return _operatorId; } public void setOperatorId(int operatorId) { this._operatorId = operatorId; } public int getSpecId() { return _specId; } public void setSpecId(int specId) { this._specId = specId; } public int getSpecAbsLevel() { return _specAbsLevel; } public void setSpecAbsLevel(int specAbsLevel) { this._specAbsLevel = specAbsLevel; } public String getSpecCode() { return _specCode; } public void setSpecCode(String specCode) { this._specCode = specCode; } public int getSpecSuperLevel() { return _specSuperLevel; } public void setSpecSuperLevel(int specSuperLevel) { this._specSuperLevel = specSuperLevel; } public int getOperatorSubtreeLevel() { return _operatorSubtreeLevel; } public void setOperatorSubtreeLevel(int operatorLevel) { this._operatorSubtreeLevel = operatorLevel; } public String getMovement() { return _movement; } public void setMovement(String movement) { this._movement = movement; } public int getExpressionIndex() { return _expressionIndex; } public void setExpressionIndex(int expressionIndex) { this._expressionIndex = expressionIndex; } private String _navSpec; private List<NavigatorExpression> _expressions; private INavigatorParser _navigatorParser; private int _specId; private int _specSuperLevel = -1; private int _specAbsLevel = -1; private String _specCode; private int _operatorId = -1; private int _operatorSubtreeLevel = -1; private String _movement; private int _expressionIndex = -1; }