/** * 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; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.TreeMap; import java.util.Set; import org.squale.squalecommon.datatransfertobject.component.AuditGridDTO; import org.squale.squalecommon.datatransfertobject.result.ReferenceFactorDTO; import org.squale.squalecommon.datatransfertobject.result.SqualeReferenceDTO; import org.squale.squalecommon.datatransfertobject.rule.FactorRuleDTO; import org.squale.squaleweb.applicationlayer.formbean.reference.ReferenceForm; import org.squale.welcom.struts.bean.WActionForm; import org.squale.welcom.struts.transformer.WITransformer; import org.squale.welcom.struts.transformer.WTransformerException; import org.squale.welcom.struts.transformer.WTransformerFactory; import org.squale.squaleweb.resources.WebMessages; /** * Transformation d'une r�f�rence */ public class ReferenceTransformer implements WITransformer { /** * Transforme une liste de r�sultats de facteurs (les listes doivent directement contenir les valeurs) en un form. * * @param pObject l'objet � transformer * @throws WTransformerException si un pb apparait. * @return le formulaire. */ public WActionForm objToForm( Object[] pObject ) throws WTransformerException { ReferenceForm form = new ReferenceForm(); objToForm( pObject, form ); return form; } /** * @param pObject l'objet � transformer * @param pForm le formulaire � remplir. * @throws WTransformerException si un pb apparait. */ public void objToForm( Object[] pObject, WActionForm pForm ) throws WTransformerException { int index = 0; ReferenceForm form = (ReferenceForm) pForm; // La transformation d'une r�f�rence se fait soit avec des // donn�es provenant du r�f�rentiel, soit avec des donn�es // provenant des applications de l'utilisateur if ( pObject[0] instanceof SqualeReferenceDTO ) { objToForm( (SqualeReferenceDTO) pObject[0], form ); } else { objToForm( (AuditGridDTO) pObject[++index], (Collection) pObject[++index], (Collection) pObject[++index], (Map) pObject[++index], form ); } } /** * Conversion des donn�es d'une r�f�rence * * @param pReference l'objet � transformer * @param pForm le formulaire � remplir. * @throws WTransformerException si un pb apparait. */ private void objToForm( SqualeReferenceDTO pReference, ReferenceForm pForm ) throws WTransformerException { pForm.setId( pReference.getId() ); pForm.setApplicationName( pReference.getApplicationName() ); pForm.setHidden( pReference.getHidden() ); pForm.setPublic( pReference.isPublic() ); pForm.setName( pReference.getProjectName() ); pForm.setTechnology( pReference.getLanguage() ); pForm.setAuditType( pReference.getAuditType() ); Iterator values = pReference.getFactorValues().iterator(); // Traitement des valeurs de chacun des facteurs while ( values.hasNext() ) { ReferenceFactorDTO dto = (ReferenceFactorDTO) values.next(); pForm.addFactor( objToForm( dto, dto.getValue() ) ); } //Traitement des donn�es de volum�trie avec modification du libell� suivant le langage de programmation String programmingLanguage = pReference.getProgrammingLanguage(); TreeMap<String,Integer> volumeData = new TreeMap<String,Integer>(); TreeMap<String,Integer> languageVolumeData = new TreeMap<String,Integer>(); volumeData.put("mccabe.project.sloc", pReference.getCodeLineNumber() ); volumeData.put("mccabe.project.numberOfClasses", pReference.getClassNumber() ); volumeData.put("mccabe.project.numberOfMethods", pReference.getMethodNumber() ); // Modification des valeurs de la HashMap suivant le langage Set keys = volumeData.keySet(); Iterator it = keys.iterator(); //Parcours des cl�s et modification while (it.hasNext()) { Object key = it.next(); String skey = key.toString(); boolean verif = WebMessages.existString(skey + "." + programmingLanguage); if ( (programmingLanguage!=null) & (verif) ) { languageVolumeData.put(skey + "." + programmingLanguage, volumeData.get(key) ); } else { languageVolumeData.put(skey, volumeData.get(key)); } } pForm.setVolumetry(languageVolumeData); } /** * Conversion des donn�es d'un projet * * @param pAuditGrid audit et grille associ�e * @param pValues valeurs * @param pApplications applications * @param pApplicationMeasures mesures sur les applications * @param pForm le formulaire � remplir. * @throws WTransformerException si un pb apparait. */ private void objToForm( AuditGridDTO pAuditGrid, Collection pValues, Collection pApplications, Map pApplicationMeasures, ReferenceForm pForm ) throws WTransformerException { Iterator values = pValues.iterator(); pForm.setId( pAuditGrid.getProject().getID() ); pForm.setApplicationName( TransformerUtils.getApplicationName( pAuditGrid.getProject().getIDParent(), pApplications ) ); pForm.setName( pAuditGrid.getProject().getName() ); pForm.setTechnology( pAuditGrid.getProject().getTechnology() ); pForm.setAuditType( pAuditGrid.getAudit().getType() ); // Parcours de la grille et des valeurs associ�es Iterator factors = pAuditGrid.getGrid().getFactors().iterator(); while ( factors.hasNext() ) { FactorRuleDTO dto = (FactorRuleDTO) factors.next(); Float value = (Float) values.next(); pForm.addFactor( objToForm( dto, value ) ); } List measuresKeys = (List) pApplicationMeasures.get( null ); List projectMeasures = (List) pApplicationMeasures.get( pAuditGrid.getProject() ); // Traitement de chacune des mesures if ( projectMeasures != null ) { TreeMap<String,String> volumeData = new TreeMap<String,String>(); // On prot�ge le code dans le cas o� tous les calculs n'auraient pas �t� fait int index = measuresKeys.indexOf( "rsm.project.sloc" ); if ( index != -1 ) { Integer nbLOC = (Integer) projectMeasures.get( index ); volumeData.put("mccabe.project.sloc", Integer.toString(nbLOC)); } else{ index = measuresKeys.indexOf( "mccabe.project.projectnl" ); if ( index!= -1 ) { Integer nbLOC = (Integer) projectMeasures.get( index ); volumeData.put("mccabe.project.sloc", Integer.toString(nbLOC)); } } index = measuresKeys.indexOf( "mccabe.project.numberOfClasses" ); if ( index != -1 ) { Integer nbClasses = (Integer) projectMeasures.get( index ); volumeData.put("mccabe.project.sloc", Integer.toString(nbClasses)); } index = measuresKeys.indexOf( "mccabe.project.numberOfMethods" ); if ( index != -1 ) { Integer nbMethods = (Integer) projectMeasures.get( index ); volumeData.put("mccabe.project.sloc", Integer.toString(nbMethods)); } pForm.setVolumetry(volumeData); } } /** * Conversion d'une note de facteur * * @param pFactorDTO facteur * @param pValue valeur * @return form * @throws WTransformerException si erreur */ private WActionForm objToForm( FactorRuleDTO pFactorDTO, Float pValue ) throws WTransformerException { Object[] params; // Une valeur peut �tre affect�e ou pas if ( ( pValue != null ) && ( pValue.floatValue() != -1 ) ) { params = new Object[] { pFactorDTO, "" + pValue.floatValue() }; } else { params = new Object[] { pFactorDTO }; } return WTransformerFactory.objToForm( ProjectFactorTransformer.class, params ); } /** * @param pForm le formulaire � lire. * @throws WTransformerException si un pb apparait. * @return le tableaux des objets. */ public Object[] formToObj( WActionForm pForm ) throws WTransformerException { Object[] result = new Object[] { new SqualeReferenceDTO() }; formToObj( pForm, result ); return result; } /** * @param pObject l'objet � remplir * @param pForm le formulaire � lire. * @throws WTransformerException si un pb apparait. */ public void formToObj( WActionForm pForm, Object[] pObject ) throws WTransformerException { SqualeReferenceDTO dto = (SqualeReferenceDTO) pObject[0]; ReferenceForm form = (ReferenceForm) pForm; dto.setAuditType( form.getAuditType() ); dto.setId( form.getId() ); dto.setHidden( form.isHidden() ); dto.setApplicationName( form.getApplicationName() ); dto.setProjectName( form.getName() ); } }