/** * Copyright (C) 2008-2010, Squale Project - http://www.squale.org * * This file is part of Squale. * * Squale is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the * License, or any later version. * * Squale is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Squale. If not, see <http://www.gnu.org/licenses/>. */ package org.squale.squaleweb.applicationlayer.action.results.project; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.squale.jraf.helper.AccessDelegateHelper; import org.squale.jraf.spi.accessdelegate.IApplicationComponent; import org.squale.squalecommon.datatransfertobject.rule.AbstractFormulaDTO; import org.squale.squalecommon.datatransfertobject.rule.ConditionFormulaDTO; import org.squale.squalecommon.datatransfertobject.rule.PracticeRuleDTO; import org.squale.squalecommon.datatransfertobject.rule.QualityRuleDTO; import org.squale.squalecommon.datatransfertobject.rule.SimpleFormulaDTO; import org.squale.squaleweb.applicationlayer.action.accessRights.DefaultAction; import org.squale.squaleweb.applicationlayer.formbean.information.PracticeInformationForm; import org.squale.squaleweb.resources.WebMessages; /** */ public class InformationAction extends DefaultAction { /** * r�cup�re les informations li�es � un facteur/crit�re/pratique * * @param pMapping le mapping. * @param pForm le formulaire � lire. * @param pRequest la requ�te HTTP. * @param pResponse la r�ponse de la servlet. * @return l'action � r�aliser. */ public ActionForward retrieveInformation( ActionMapping pMapping, ActionForm pForm, HttpServletRequest pRequest, HttpServletResponse pResponse ) { ActionForward forward = null; ActionErrors errors = new ActionErrors(); try { forward = pMapping.findForward( "information" ); // la cl� de l'�l�ment sur lequel on veut des d�tails String elementKey = pRequest.getParameter( "elementName" ); // l'id de l'�l�ment (pour r�cup�rer la formule) String ruleId = pRequest.getParameter( "ruleId" ); // r�cup�re les informations li�es a l'�l�ment IApplicationComponent ac = AccessDelegateHelper.getInstance( "QualityGrid" ); QualityRuleDTO rule = new QualityRuleDTO(); rule.setId( new Long( ruleId ).longValue() ); Object[] param = new Object[] { rule, new Boolean( true ) }; Object[] ruleAndTre = (Object[]) ac.execute( "getQualityRuleAndUsedTres", param ); QualityRuleDTO ruleResult = (QualityRuleDTO) ruleAndTre[0]; Object[] triggerAndFormula = formatFormula( pRequest, ruleResult ); String trigger = (String) triggerAndFormula[0]; String key = ruleResult.getHelpKey(); if ( key != null && !key.equals( "" ) ) { elementKey = ruleResult.getHelpKey(); } String description = WebMessages.getString( pRequest, elementKey + ".description" ); String correction = WebMessages.getString( pRequest, elementKey + ".correction" ); ( (PracticeInformationForm) pForm ).setTrigger( trigger ); // Suivant le type de la formule, on a r�cup�r� une formule simple // ou une formule avec des conditions Object formula = triggerAndFormula[1]; if ( formula instanceof String ) { ( (PracticeInformationForm) pForm ).setFormula( (String) formula ); } if ( formula instanceof String[] ) { ( (PracticeInformationForm) pForm ).setFormulaCondition( (String[]) formula ); } ( (PracticeInformationForm) pForm ).setDescription( description ); ( (PracticeInformationForm) pForm ).setCorrection( correction ); ( (PracticeInformationForm) pForm ).setName( WebMessages.getString( pRequest, elementKey ) ); ( (PracticeInformationForm) pForm ).setUsedTres( (Collection) ruleAndTre[1] ); } catch ( Exception e ) { // Traitement factoris� des exceptions handleException( e, errors, pRequest ); } if ( !errors.isEmpty() ) { // Sauvegarde des messages saveMessages( pRequest, errors ); // Routage vers la page d'erreur forward = pMapping.findForward( "total_failure" ); } return forward; } /** * @param ruleDto la r�gle * @param pRequest la requete * @return un tableau de deux Strings et une liste : le trigger, la formule et les m�triques utilis�es dans la * formule format�e pour l'affichage */ public Object[] formatFormula( HttpServletRequest pRequest, QualityRuleDTO ruleDto ) { final int ITEMS = 3; Object[] result = new Object[ITEMS]; // initialisation par d�faut � des messages // indiquant que le trigger et la formule n'ont pas �t� d�finies. result[0] = WebMessages.getString( pRequest, "qualityRule.trigger.undefined" ); result[1] = WebMessages.getString( pRequest, "qualityRule.formula.undefined" ); result[2] = new ArrayList(); // code d�fensif: normalement on est forc�ment sur une practiceRuleDTO // si on n'est pas sur une practice alors il n'y a pas d'aide if ( ruleDto instanceof PracticeRuleDTO ) { // On r�cup�re la formule et on l'adapte pour l'affichage // 2 cas : // * SimpleFormula --> r�cup�ration simple de la formule // * ConditionFormula --> r�cup�ration des conditions AbstractFormulaDTO formula = ( (PracticeRuleDTO) ruleDto ).getFormula(); if ( formula != null ) { result[2] = formula.getMeasureKinds(); String trigger = formula.getTriggerCondition(); if ( trigger != null ) { result[0] = trigger; } if ( formula instanceof SimpleFormulaDTO ) { result[1] = ( (SimpleFormulaDTO) formula ).getFormula(); } if ( formula instanceof ConditionFormulaDTO ) { Collection coll = ( (ConditionFormulaDTO) formula ).getMarkConditions(); String[] conditions = new String[coll.size()]; Iterator it = coll.iterator(); String formulaResult = ""; // 3 conditions : // * index = 0 --> accept� // * index = 1 --> accept� avec r�serve // * index = 2 --> refus� String accepted = WebMessages.getString( pRequest, "mark.less.1" ); String reserves = WebMessages.getString( pRequest, "mark.less.2" ); String refused = WebMessages.getString( pRequest, "mark.less.3" ); int counter = 0; String rule = ""; while ( it.hasNext() ) { switch ( counter ) { case 0: rule = accepted; break; case 1: rule = reserves; break; case 2: rule = refused; break; default: break; } formulaResult = rule + ": " + it.next(); conditions[counter] = formulaResult; counter++; } result[1] = conditions; } } } return result; } }