/** * 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.transformer.component.parameters; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import org.squale.squalecommon.datatransfertobject.component.parameters.MapParameterDTO; import org.squale.squalecommon.datatransfertobject.component.parameters.StringParameterDTO; import org.squale.squalecommon.datatransfertobject.config.TaskDTO; import org.squale.squalecommon.datatransfertobject.config.TaskParameterDTO; import org.squale.squalecommon.datatransfertobject.rulechecking.PmdRuleSetDTO; import org.squale.squalecommon.enterpriselayer.businessobject.component.parameters.ParametersConstants; import org.squale.squaleweb.applicationlayer.formbean.component.parameters.PmdForm; import org.squale.welcom.struts.bean.WActionForm; import org.squale.welcom.struts.transformer.WITransformer; import org.squale.welcom.struts.transformer.WTransformerException; /** * Transformation des param�tres PMD Les param�tres PMD sont communs dans un contexte java pur ou java avec jsp, le * transformer tient compte du contexte */ public class PmdConfTransformer implements WITransformer { /** * @see org.squale.welcom.struts.transformer.WITransformer#objToForm(java.lang.Object[]) {@inheritDoc} */ public WActionForm objToForm( Object[] pObject ) throws WTransformerException { PmdForm cpdForm = new PmdForm(); objToForm( pObject, cpdForm ); return cpdForm; } /** * @see org.squale.welcom.struts.transformer.WITransformer#formToObj(org.squale.welcom.struts.bean.WActionForm) * {@inheritDoc} */ public Object[] formToObj( WActionForm pForm ) throws WTransformerException { Object[] obj = { new MapParameterDTO() }; formToObj( pForm, obj ); return obj; } /** * @see org.squale.welcom.struts.transformer.WITransformer#formToObj(org.squale.welcom.struts.bean.WActionForm, * java.lang.Object[]) {@inheritDoc} */ public void formToObj( WActionForm pForm, Object[] pObject ) throws WTransformerException { PmdForm pmdForm = (PmdForm) pForm; MapParameterDTO projectParams = (MapParameterDTO) pObject[0]; MapParameterDTO pmdParams = new MapParameterDTO(); projectParams.getParameters().put( ParametersConstants.PMD, pmdParams ); StringParameterDTO param = new StringParameterDTO(); param.setValue( pmdForm.getSelectedJavaRuleSet() ); pmdParams.getParameters().put( ParametersConstants.PMD_JAVA_RULESET_NAME, param ); if ( pmdForm.isJspSourcesRequired() ) { param = new StringParameterDTO(); param.setValue( pmdForm.getSelectedJspRuleSet() ); pmdParams.getParameters().put( ParametersConstants.PMD_JSP_RULESET_NAME, param ); } } /** * @see org.squale.welcom.struts.transformer.WITransformer#objToForm(java.lang.Object[], * org.squale.welcom.struts.bean.WActionForm) {@inheritDoc} */ public void objToForm( Object[] pObject, WActionForm pForm ) throws WTransformerException { PmdForm pmdForm = (PmdForm) pForm; MapParameterDTO projectParams = (MapParameterDTO) pObject[0]; TaskDTO task = (TaskDTO) pObject[1]; Collection versions = (Collection) pObject[2]; MapParameterDTO pmdParams = (MapParameterDTO) projectParams.getParameters().get( ParametersConstants.PMD ); if ( pmdForm.isNewConf() ) { // First configuration --> get default rulesets values pmdParams = getOrBuildPmdParams( task, projectParams ); } // On construit la liste des rulesets pour le java et le jsp HashSet javaSet = new HashSet(); HashSet jspSet = new HashSet(); for ( Iterator it = versions.iterator(); it.hasNext(); ) { PmdRuleSetDTO dto = (PmdRuleSetDTO) it.next(); if ( dto.getLanguage().equals( "java" ) ) { javaSet.add( dto.getName() ); } else { // Il s'agit forcement de jsp jspSet.add( dto.getName() ); } } // Placement du ruleset pour java pmdForm.setJavaRuleSets( (String[]) javaSet.toArray( new String[] {} ) ); // Les param�tre PMD peuvent ne pas �tre pr�sents if ( pmdParams != null ) { StringParameterDTO param = (StringParameterDTO) pmdParams.getParameters().get( ParametersConstants.PMD_JAVA_RULESET_NAME ); // Le param�tre peut ne pas �tre renseign� if ( param != null ) { pmdForm.setSelectedJavaRuleSet( param.getValue() ); } } // On r�cup�re les param�tres pour savoir s'il s'agit d'un profil JSP ou pas if ( jspRequired( task ) ) { pmdForm.setJspSourcesRequired( true ); pmdForm.setJspRuleSets( (String[]) jspSet.toArray( new String[] {} ) ); // Les param�tre PMD peuvent ne pas �tre pr�sents if ( pmdParams != null ) { StringParameterDTO param = (StringParameterDTO) pmdParams.getParameters().get( ParametersConstants.PMD_JSP_RULESET_NAME ); // Le param�tre peut ne pas �tre renseign� if ( param != null ) { pmdForm.setSelectedJspRuleSet( param.getValue() ); } } } } /** * @param pTask pmd task * @param projectParams project parameters * @return pmd's parameters set by user or the default ones */ private MapParameterDTO getOrBuildPmdParams( TaskDTO pTask, MapParameterDTO projectParams ) { MapParameterDTO pmdParams = (MapParameterDTO) projectParams.getParameters().get( ParametersConstants.PMD ); if ( null == pmdParams ) { pmdParams = new MapParameterDTO(); } if ( null == pmdParams.getParameters().get( ParametersConstants.PMD_JAVA_RULESET_NAME ) ) { StringParameterDTO param = new StringParameterDTO( getDefaultRuleSet( pTask, "java" ) ); if ( param.getValue().length() > 0 ) { pmdParams.getParameters().put( ParametersConstants.PMD_JAVA_RULESET_NAME, param ); } } if ( null == pmdParams.getParameters().get( ParametersConstants.PMD_JSP_RULESET_NAME ) ) { StringParameterDTO param = new StringParameterDTO( getDefaultRuleSet( pTask, "jsp" ) ); if ( param.getValue().length() > 0 ) { pmdParams.getParameters().put( ParametersConstants.PMD_JSP_RULESET_NAME, param ); } } projectParams.getParameters().put( ParametersConstants.PMD, pmdParams ); return pmdParams; } /** * @param pTask task * @param pLanguage java or jsp language * @return java ruleset default value */ private String getDefaultRuleSet( TaskDTO pTask, String pLanguage ) { String result = ""; for ( Iterator it = pTask.getParameters().iterator(); it.hasNext() && ( result.length() == 0 ); ) { TaskParameterDTO param = (TaskParameterDTO) it.next(); if ( param.getName().equals( pLanguage + "ruleset" ) ) { result = param.getValue(); } } return result; } /** * @param pTask t�che * @return true si la t�che requiert le JSP */ private boolean jspRequired( TaskDTO pTask ) { boolean result = false; for ( Iterator it = pTask.getParameters().iterator(); it.hasNext() && ( result == false ); ) { TaskParameterDTO param = (TaskParameterDTO) it.next(); result = param.getName().equals( "language" ) && param.getValue().equals( "jsp" ); } return result; } }