/** * 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.stats; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.squale.squalecommon.datatransfertobject.stats.AuditsStatsDTO; import org.squale.squalecommon.datatransfertobject.stats.FactorsStatsDTO; import org.squale.squalecommon.datatransfertobject.stats.ProfilStatsDTO; import org.squale.squalecommon.datatransfertobject.stats.SetOfStatsDTO; import org.squale.squalecommon.datatransfertobject.stats.SiteStatsDTO; import org.squale.squalecommon.datatransfertobject.transform.config.ServeurTransform; import org.squale.squalecommon.enterpriselayer.businessobject.stats.SiteAndProfilStatsDICTBO; import org.squale.squalecommon.enterpriselayer.businessobject.stats.SiteStatsDICTBO; /** */ public class StatsTransform { /** * Id (fictif) du serveur associ� au dto stockant le calcul de totaux */ public final static long STATS_TOTAL_ID = 9999; /** * bo2dto avec un comportement un peu particulier. Les objets repr�sentant les donn�es stock�es en base ne * correspondent (volontairement) pas � la repr�sentation souhait�e, le transform effectue donc la mise en forme * pour avoir des objets permettant de faciliter l'affichage * * @param pSiteAndProfile l'objet contenant les stats pour un site et profil * @param pSite l'objet contenant les stats pour un site sans tenir compte du profil * @return l'objet DTO contenant toutes les r�sultats */ public SetOfStatsDTO bo2dto( Collection pSiteAndProfile, Collection pSite ) { SetOfStatsDTO set = new SetOfStatsDTO(); List siteList = new ArrayList( 0 ), profileList = new ArrayList( 0 ); Iterator pSiteIt = pSite.iterator(), pSiteAndProfileIt; // 2 objets suppl�mentaires que l'on stocke correspondant au total, // afin de faciliter l'affichage SiteStatsDTO siteTotal = new SiteStatsDTO(); ProfilStatsDTO siteAndProfilTotal = new ProfilStatsDTO(); // les donn�es sur les audits int nbAuditFailed = 0, nbAuditPartial = 0, nbAuditSuccessfuls = 0, nbAuditsNotAttempted = 0; // les donn�es sur les facteurs int nbFactorsRefused = 0, nbFactorsReserved = 0, nbFactorsAccepted = 0; // Boucle principale, permet de r�cup�rer toutes les principales informations sauf les LOC while ( pSiteIt.hasNext() ) { SiteStatsDICTBO site = (SiteStatsDICTBO) pSiteIt.next(); // On r�cup�re les donn�es sur les audits nbAuditFailed += site.getNbFailedAudits(); nbAuditPartial += site.getNbPartialAudits(); nbAuditsNotAttempted += site.getNbNotAttemptedAudit(); nbAuditSuccessfuls += site.getNbSuccessfulAudits(); SiteStatsDTO siteDto = new SiteStatsDTO(); nbFactorsAccepted += site.getNbOfAcceptedFactors(); nbFactorsRefused += site.getNbOfRefusedFactors(); nbFactorsReserved += site.getNbOfAcceptedWithReservesFactors(); // On transforme les statistiques par site bo2dto( siteDto, site, pSiteAndProfile.iterator() ); // Ajoute � la liste final siteList.add( siteDto ); } // On affecte les valeurs par profil : pSiteAndProfileIt = pSiteAndProfile.iterator(); while ( pSiteAndProfileIt.hasNext() ) { SiteAndProfilStatsDICTBO siteAndProfil = (SiteAndProfilStatsDICTBO) pSiteAndProfileIt.next(); String profileName = siteAndProfil.getProfil(); // on regarde si on a d�j� stock� un objet pour ce profil ProfilStatsDTO profilDto = null; boolean alreadyExists = false; for ( int i = 0; i < profileList.size() && !alreadyExists; i++ ) { profilDto = (ProfilStatsDTO) profileList.get( i ); alreadyExists = profilDto.getProfileName().equals( profileName ); } // il n'existe pas d�j�, on l'initialise if ( !alreadyExists ) { profilDto = new ProfilStatsDTO(); profilDto.setProfileName( profileName ); // On l'ajoute � la liste des profils profileList.add( profilDto ); } // On peut lui affecter les valeurs, en faisant un cumul profilDto.setLoc( profilDto.getLoc() + siteAndProfil.getNbOfCodesLines() ); profilDto.setNbProjects( profilDto.getNbProjects() + siteAndProfil.getNbProjects() ); } // rempli les 2 objets totaux compl�mentaires setSiteTotal( siteTotal, siteList ); setProfilTotal( siteAndProfilTotal, profileList ); // Rempli les 2 listes du DTO de haut niveau set.setListOfSiteStatsDTO( siteList ); set.setListOfProfilsStatsDTO( profileList ); // Rempli le form contenant les donn�es sur les audits et l'ajoute � l'objet r�capitulant AuditsStatsDTO auditsDto = new AuditsStatsDTO(); auditsDto.setNbFailed( nbAuditFailed ); auditsDto.setNbPartial( nbAuditPartial ); auditsDto.setNbNotAttempted( nbAuditsNotAttempted ); auditsDto.setNbSuccessfuls( nbAuditSuccessfuls ); auditsDto.setNbTotal( nbAuditFailed + nbAuditsNotAttempted + nbAuditSuccessfuls + nbAuditPartial ); set.setAuditsStatsDTO( auditsDto ); // Rempli le form contenant les donn�es sur les audits et l'ajoute � l'objet r�capitulant FactorsStatsDTO factorsDto = new FactorsStatsDTO(); factorsDto.setNbFactorsAccepted( nbFactorsAccepted ); factorsDto.setNbFactorsRefused( nbFactorsRefused ); factorsDto.setNbFactorsReserved( nbFactorsReserved ); factorsDto.setNbTotal( nbFactorsAccepted + nbFactorsRefused + nbFactorsReserved ); set.setFactorsStatsDTO( factorsDto ); return set; } /** * Transforme le dto � partir du bo * * @param siteDto les statistiques par site sous forme DTO * @param site les statistiques par site sous forme DTO * @param pSiteAndProfileIt l'iterateur sur les statistiques par profil */ private void bo2dto( SiteStatsDTO siteDto, SiteStatsDICTBO site, Iterator pSiteAndProfileIt ) { if ( site.getServeurBO() != null ) { siteDto.setServeurDTO( ServeurTransform.bo2dto( site.getServeurBO() ) ); } siteDto.setNbAppliToValidate( site.getNbAppliToValidate() ); siteDto.setNbAppliWithAuditsSuccessful( site.getNbTotalAppliWithSuccesfulAudit() ); siteDto.setNbAppliWithoutSuccessfulAudits( site.getNbTotalAppliWithAudit() ); siteDto.setNbValidatedApplis( site.getNbTotalAppliWithoutAudit() ); // Cette boucle sert seulement pour les LOC et le nombre de projets while ( pSiteAndProfileIt.hasNext() ) { SiteAndProfilStatsDICTBO siteAndProfil = (SiteAndProfilStatsDICTBO) pSiteAndProfileIt.next(); long lSiteId = siteAndProfil.getServeurBO().getServeurId(); // L'objet actuellement parcouru contient des informations pour le site en question // on les r�cup�re et on les ajoute aux donn�es d�j� trouv�es if ( siteDto.getServeurDTO().getServeurId() == lSiteId ) { siteDto.setLoc( siteDto.getLoc() + siteAndProfil.getNbOfCodesLines() ); siteDto.setNbProjects( siteDto.getNbProjects() + +siteAndProfil.getNbProjects() ); } } } /** * @param siteAndProfilTotal l'objet faisant le total * @param profileList la liste des profiles */ private void setProfilTotal( ProfilStatsDTO siteAndProfilTotal, List profileList ) { siteAndProfilTotal.setProfileName( "Total" ); for ( int i = 0; i < profileList.size(); i++ ) { ProfilStatsDTO current = (ProfilStatsDTO) profileList.get( i ); siteAndProfilTotal.setLoc( siteAndProfilTotal.getLoc() + current.getLoc() ); siteAndProfilTotal.setNbProjects( siteAndProfilTotal.getNbProjects() + current.getNbProjects() ); } profileList.add( siteAndProfilTotal ); } /** * @param siteTotal l'objet faisant le total * @param siteList la liste des sites */ private void setSiteTotal( SiteStatsDTO siteTotal, List siteList ) { siteTotal.getServeurDTO().setServeurId( STATS_TOTAL_ID ); siteTotal.getServeurDTO().setName( "Total" ); for ( int i = 0; i < siteList.size(); i++ ) { SiteStatsDTO current = (SiteStatsDTO) siteList.get( i ); siteTotal.setNbAppliToValidate( siteTotal.getNbAppliToValidate() + current.getNbAppliToValidate() ); siteTotal.setNbAppliWithAuditsSuccessful( siteTotal.getNbAppliWithAuditsSuccessful() + current.getNbAppliWithAuditsSuccessful() ); siteTotal.setNbAppliWithoutSuccessfulAudits( siteTotal.getNbAppliWithoutSuccessfulAudits() + current.getNbAppliWithoutSuccessfulAudits() ); siteTotal.setLoc( siteTotal.getLoc() + current.getLoc() ); siteTotal.setNbProjects( siteTotal.getNbProjects() + current.getNbProjects() ); siteTotal.setNbValidatedApplis( siteTotal.getNbValidatedApplis() + current.getNbValidatedApplis() ); } siteList.add( siteTotal ); } // la version dto2bo n'a pas de sens }