/**
* 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/>.
*/
//Source file: D:\\CC_VIEWS\\SQUALE_V0_0_ACT\\SQUALE\\SRC\\squaleCommon\\src\\org\\squale\\squalecommon\\datatransfertobject\\ResultsDTO.java
package org.squale.squalecommon.datatransfertobject.result;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.squale.squalecommon.datatransfertobject.DTOMessages;
import org.squale.squalecommon.datatransfertobject.component.ComponentDTO;
/**
*/
public class ResultsDTO
implements Serializable
{
/** log */
private static Log LOG = LogFactory.getLog( ResultsDTO.class );
/**
* Contient : Une liste pValues qui contient : [ une liste colTypes : [ typeY | typeX1 | typeX2 | ... | typeXn ] |
* et une � n liste(s) de valeurs (la premi�re valeur etant le type de la ligne) : [ typeY1 | val11 | val21 | ... |
* valn1 ] | ... | [ typeYm | val1m | val2m | ... | valnm ] ] n > 0, m > 0 (=> (n+1)*(m+1) �l�ments)
*/
private Map mResultMap;
/**
* Cl� : AuditDTO (ou ComponentDTO) Valeur : Tableau de r�partitions des pratiques sur des intervalles de pas = 1
*/
private Map mIntRepartitionPracticeMap;
/**
* Cl� : AuditDTO (ou ComponentDTO) Valeur : Tableau de r�partitions des pratiques sur des intervalles de pas = 0.1
*/
private Map mFloatRepartitionPracticeMap;
/**
* Constructeur par defaut
*
* @roseuid 42CB94450018
*/
public ResultsDTO()
{
Map resultMap = new HashMap();
setResultMap( resultMap );
}
/**
* Access method for the mResultMap property.
*
* @return the current value of the mResultMap property
* @roseuid 42CB94450040
*/
public Map getResultMap()
{
return mResultMap;
}
/**
* Sets the value of the mResultMap property.
*
* @param pResultMap the new value of the mResultMap property
* @roseuid 42CB94450072
*/
private void setResultMap( Map pResultMap )
{
mResultMap = pResultMap;
}
/**
* Permet d'ajouter au resultMap une ligne supplementaire Verifie que le format est le suivant : null en cle --
* liste d'objets en valeur ( n fois ) objet en cle -- liste de meme taille en valeur
*
* @param pKey cl� � ajouter
* @param pValue valeur associ�e a la cle
*/
public void put( Object pKey, List pValue )
{
List firstList = (List) mResultMap.get( null );
if ( firstList != null )
{ // s'il n'y a pas de premier element
if ( firstList.size() != pValue.size() )
{
/* Peut arriver dans les cas de la QualityResultsFacade */
LOG.warn( DTOMessages.getString( "dto.exception.results.put.sizelist" ) );
}
else
{
// on ajoute la liste a la HashMap
mResultMap.put( pKey, pValue );
}
}
else
{
if ( pKey != null )
{
// si la cle null du premier element n'existe pas
LOG.debug( DTOMessages.getString( "dto.exception.results.put.nofirstelement" ) );
}
// on ajoute la liste a la HashMap
mResultMap.put( pKey, pValue );
}
}
/**
* Permet de concatener une collection de resultsDTO
*
* @param pResultsSrc ResultsDTO qui ajoute ses donn�es au pResultsDest
* @return ResultsDTO unique
*/
public ResultsDTO add( ResultsDTO pResultsSrc )
{
// Chargement des cl�s de chacune des Maps
Map resultSrcMap = pResultsSrc.getResultMap();
Iterator result1Iterator = mResultMap.keySet().iterator();
Object currentKey = null;
/*
* Parcours des cles du premier ResultsDTO et concatenation de la liste (valeur) du deuxieme ResultsDTO
* correspondant a la cle courante
*/
while ( result1Iterator.hasNext() )
{
currentKey = result1Iterator.next();
if ( resultSrcMap.get( currentKey ) != null )
{
( (List) mResultMap.get( currentKey ) ).addAll( (List) resultSrcMap.get( currentKey ) );
}
}
/*
* Verification que tous les element du 2eme ResultsDTO sont presents dans le premier
*/
// TODO chemin non teste
if ( !mResultMap.keySet().containsAll( resultSrcMap.keySet() ) )
{
Iterator result2Iterator = resultSrcMap.keySet().iterator();
currentKey = null;
// Ajout de la premiere liste
while ( result2Iterator.hasNext() )
{
currentKey = result2Iterator.next();
/*
* SI la cl� n'existe pas dans le premier ResultsDTO ALORS on ajoute une liste avec des nulls de la
* taille des listes du premier ResultsDTO PUIS on concatene la liste de deuxieme ResultsDTO
*/
if ( mResultMap.get( currentKey ) == null )
{
List result1ListTemp = new ArrayList( ( (List) mResultMap.get( null ) ).size() );
Collections.fill( result1ListTemp, null );
result1ListTemp.addAll( (List) resultSrcMap.get( currentKey ) );
}
}
}
return this;
}
/**
* Access method for the mIntRepartitionPracticeMap property.
*
* @return Map contenant une liste de r�partitions des pratiques
*/
public Map getIntRepartitionPracticeMap()
{
return mIntRepartitionPracticeMap;
}
/**
* Sets the value of the mIntRepartitionPracticeMap property.
*
* @param pPracticeMap Map contenant une liste de r�partitions des pratiques
*/
public void setIntRepartitionPracticeMap( Map pPracticeMap )
{
mIntRepartitionPracticeMap = pPracticeMap;
}
/**
* Access method for the mIntRepartitionPracticeMap property.
*
* @return Map contenant une liste de r�partitions des pratiques
*/
public Map getFloatRepartitionPracticeMap()
{
return mFloatRepartitionPracticeMap;
}
/**
* Sets the value of the mFloatRepartitionPracticeMap property.
*
* @param pPracticeMap Map contenant une liste de r�partitions des pratiques
*/
public void setFloatRepartitionPracticeMap( Map pPracticeMap )
{
mFloatRepartitionPracticeMap = pPracticeMap;
}
/**
* @param pProject le projet
* @return la note courante
*/
public Float getCurrentMark( ComponentDTO pProject )
{
return ( (Float) ( ( (List) getResultMap().get( pProject ) ).get( 0 ) ) );
}
/**
* @param pProject le projet
* @return la note pr�c�dente
*/
public Float getPreviousMark( ComponentDTO pProject )
{
return (Float) ( ( (List) getResultMap().get( pProject ) ).get( 1 ) );
}
}