/**
* 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 org.squale.squalecommon.datatransfertobject.rule.CriteriumRuleDTO;
import org.squale.squalecommon.datatransfertobject.rule.FactorRuleDTO;
import org.squale.squalecommon.datatransfertobject.rule.PracticeRuleDTO;
import org.squale.squalecommon.datatransfertobject.rule.QualityRuleDTO;
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.QualityRuleBO;
import org.squale.squalecommon.enterpriselayer.businessobject.rule.QualityRuleBOVisitor;
/**
* Transformation d'une r�gle qualit�
*/
public class QualityRuleTransform
implements QualityRuleBOVisitor
{
/** Le prefixe de la r�gle */
private static String RULE_PREFIX = "rule.";
/**
* Conversion
*
* @param pQualityRuleRule objet � convertir
* @param pQualityRuleDTO r�sultat de la conversion
*/
public static void bo2Dto( QualityRuleDTO pQualityRuleDTO, QualityRuleBO pQualityRuleRule )
{
pQualityRuleDTO.setId( pQualityRuleRule.getId() );
pQualityRuleDTO.setName( RULE_PREFIX + pQualityRuleRule.getName() );
pQualityRuleDTO.setHelpKey( RULE_PREFIX + pQualityRuleRule.getHelpKey() );
pQualityRuleDTO.setId( pQualityRuleRule.getId() );
}
/**
* Conversion d'une r�gle qualit�
*
* @param pQualityRuleRule r�gle qualit�
* @param pDeepTransform indique si les objets li�s sont aussi transform�s
* @return r�gle qualit�
*/
public static QualityRuleDTO bo2Dto( QualityRuleBO pQualityRuleRule, boolean pDeepTransform )
{
QualityRuleDTO result =
(QualityRuleDTO) pQualityRuleRule.accept( new QualityRuleTransform(), Boolean.valueOf( pDeepTransform ) );
return result;
}
/**
* (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 )
{
FactorRuleDTO result = new FactorRuleDTO();
bo2Dto( result, pFactorRule );
if ( ( (Boolean) pArgument ).booleanValue() )
{
Iterator factorIt = pFactorRule.getCriteria().keySet().iterator();
while ( factorIt.hasNext() )
{
CriteriumRuleBO currentCriteriumBO = (CriteriumRuleBO) factorIt.next();
result.addCriterium( (CriteriumRuleDTO) ( currentCriteriumBO ).accept( this, pArgument ),
(Float) pFactorRule.getCriteria().get( currentCriteriumBO ) );
}
}
return result;
}
/**
* (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 )
{
CriteriumRuleDTO result = new CriteriumRuleDTO();
bo2Dto( result, pCriteriumRule );
if ( ( (Boolean) pArgument ).booleanValue() )
{
Iterator practiceIt = pCriteriumRule.getPractices().keySet().iterator();
while ( practiceIt.hasNext() )
{
PracticeRuleBO currentPracticeBO = (PracticeRuleBO) practiceIt.next();
result.addPractice( (PracticeRuleDTO) currentPracticeBO.accept( this, pArgument ),
(Float) pCriteriumRule.getPractices().get( currentPracticeBO ) );
}
}
return result;
}
/**
* (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 )
{
PracticeRuleDTO result = new PracticeRuleDTO();
bo2Dto( result, pPracticeRule );
// Traitement de la formule
if ( pPracticeRule.getFormula() != null )
{
// Traitement du cas de RuleChecking
if ( ( pPracticeRule.getFormula() != null )
&& pPracticeRule.getFormula().getComponentLevel().equals( "project" ) )
{ // TODO externaliser cette cha�ne
result.setRuleChecking( true );
}
// Conversion de la formule et de la fonction de pond�ration si demand�
result.setFormulaType( pPracticeRule.getFormula().getType() );
if ( ( (Boolean) pArgument ).booleanValue() )
{
result.setFormula( AbstractFormulaTransform.bo2Dto( pPracticeRule.getFormula() ) );
result.setWeightingFunction( pPracticeRule.getWeightFunction() );
}
}
// time limitation
result.setTimeLimitation( pPracticeRule.getTimeLimitation() );
// l'effort
result.setEffort( pPracticeRule.getEffort() );
return result;
}
/**
* dto -> bo On ne peut modifier que les formules et l'effort
*
* @param practiceBO le bo
* @param pRuleDTO le dto
*/
public static void dto2Bo( PracticeRuleBO practiceBO, PracticeRuleDTO pRuleDTO )
{
practiceBO.setEffort( pRuleDTO.getEffort() );
if ( pRuleDTO.getWeightingFunction() != null )
{
practiceBO.setWeightFunction( pRuleDTO.getWeightingFunction() );
}
if ( pRuleDTO.getFormula() != null )
{
practiceBO.setFormula( AbstractFormulaTransform.dto2Bo( pRuleDTO.getFormula() ) );
}
}
}