/** * 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.squalecommon.datatransfertobject.transform.rule; import java.util.Iterator; import java.util.Map; import java.util.TreeSet; import org.squale.squalecommon.enterpriselayer.businessobject.rule.AbstractFormulaBO; import org.squale.squalecommon.enterpriselayer.businessobject.rule.CriteriumRuleBO; import org.squale.squalecommon.enterpriselayer.businessobject.rule.FactorRuleBO; import org.squale.squalecommon.enterpriselayer.businessobject.rule.PracticeRuleBO; import org.squale.squalecommon.enterpriselayer.businessobject.rule.QualityGridBO; import org.squale.squalecommon.enterpriselayer.businessobject.rule.QualityRuleBOVisitor; import org.squale.squalecommon.enterpriselayer.businessobject.rule.PracticeRuleBO.MeasureExtractor; /** * Transformation d'une grille qualit� en m�triques Cette transformation est utilis�e pour la construction du menu top * de fa�on dynamique */ public class GridMetricsTransform implements QualityRuleBOVisitor { /** Extracteur de mesure */ private MeasureExtractor mMeasureExtractor; /** * Constructeur * * @param pMeasureExtractor extracteur de mesure */ public GridMetricsTransform( PracticeRuleBO.MeasureExtractor pMeasureExtractor ) { mMeasureExtractor = pMeasureExtractor; } /** * Transformation d'une grille qualit� en m�triques * * @param pGrid grille qualit� * @param pDto m�triques sous la forme de map avec en clef * @param pMeasureExtractor extracteur de mesure le type de composant et en valer la liste des m�triques */ static public void bo2dto( QualityGridBO pGrid, Map pDto, PracticeRuleBO.MeasureExtractor pMeasureExtractor ) { GridMetricsTransform tr = new GridMetricsTransform( pMeasureExtractor ); // Transformation de chaque facteur Iterator factorIt = pGrid.getFactors().iterator(); while ( factorIt.hasNext() ) { FactorRuleBO factor = (FactorRuleBO) factorIt.next(); factor.accept( tr, pDto ); } } /** * (non-Javadoc) * * @see org.squale.squalecommon.enterpriselayer.businessobject.rule.QualityRuleBOVisitor#visit(org.squale.squalecommon.enterpriselayer.businessobject.rule.FactorRuleBO, * java.lang.Object) */ public Object visit( FactorRuleBO pFactorRule, Object pArgument ) { Iterator criteriumIt = pFactorRule.getCriteria().keySet().iterator(); while ( criteriumIt.hasNext() ) { ( (CriteriumRuleBO) criteriumIt.next() ).accept( this, pArgument ); } return null; } /** * (non-Javadoc) * * @see org.squale.squalecommon.enterpriselayer.businessobject.rule.QualityRuleBOVisitor#visit(org.squale.squalecommon.enterpriselayer.businessobject.rule.CriteriumRuleBO, * java.lang.Object) */ public Object visit( CriteriumRuleBO pCriteriumRule, Object pArgument ) { Iterator practiceIt = pCriteriumRule.getPractices().keySet().iterator(); while ( practiceIt.hasNext() ) { ( (PracticeRuleBO) practiceIt.next() ).accept( this, pArgument ); } return null; } /** * (non-Javadoc) * * @see org.squale.squalecommon.enterpriselayer.businessobject.rule.QualityRuleBOVisitor#visit(org.squale.squalecommon.enterpriselayer.businessobject.rule.PracticeRuleBO, * java.lang.Object) */ public Object visit( PracticeRuleBO pPracticeRule, Object pArgument ) { AbstractFormulaBO formula = pPracticeRule.getFormula(); if ( formula != null && !formula.getComponentLevel().equals( "project" ) ) { Map map = (Map) pArgument; String level = "component." + formula.getComponentLevel(); TreeSet metrics = (TreeSet) map.get( level ); if ( metrics == null ) { metrics = new TreeSet(); map.put( level, metrics ); } String[] used = mMeasureExtractor.getUsedMeasures( formula ); for ( int i = 0; i < used.length; i++ ) { metrics.add( used[i] ); } } return null; } }