Java tutorial
/** * 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.enterpriselayer.applicationcomponent.display; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.squale.jraf.commons.exception.JrafEnterpriseException; import org.squale.jraf.provider.accessdelegate.DefaultExecuteComponent; import org.squale.squalecommon.daolayer.result.QualityResultDAOImpl; import org.squale.squalecommon.datatransfertobject.component.AuditDTO; import org.squale.squalecommon.datatransfertobject.component.AuditGridDTO; import org.squale.squalecommon.datatransfertobject.component.ComponentDTO; import org.squale.squalecommon.datatransfertobject.result.MarkDTO; import org.squale.squalecommon.datatransfertobject.result.QualityResultDTO; import org.squale.squalecommon.datatransfertobject.result.ResultsDTO; import org.squale.squalecommon.datatransfertobject.rule.PracticeRuleDTO; import org.squale.squalecommon.enterpriselayer.applicationcomponent.ACMessages; import org.squale.squalecommon.enterpriselayer.businessobject.component.AuditBO; import org.squale.squalecommon.enterpriselayer.facade.component.AuditFacade; import org.squale.squalecommon.enterpriselayer.facade.component.ComponentFacade; import org.squale.squalecommon.enterpriselayer.facade.export.audit.AuditReportFacade; import org.squale.squalecommon.enterpriselayer.facade.quality.ErrorFacade; import org.squale.squalecommon.enterpriselayer.facade.quality.MeasureFacade; import org.squale.squalecommon.enterpriselayer.facade.quality.QualityResultFacade; import org.squale.squalecommon.enterpriselayer.facade.quality.SqualeReferenceFacade; import org.squale.squalecommon.enterpriselayer.facade.rule.QualityGridFacade; import org.squale.squalecommon.util.messages.CommonMessages; /** * Classe permetant d'effectuer la rcupration des rsultats * <p> * Title : ResultsApplicationComponentAccess.java * </p> * <p> * Description : Application component d'affichage de resultats * </p> * * @author m400841 */ public class ResultsApplicationComponentAccess extends DefaultExecuteComponent { /** log */ private static Log LOG = LogFactory.getLog(ResultsApplicationComponentAccess.class); /** * Nombre d'audits a rcuprer par defaut */ private static final Integer NB_AUDITS = new Integer(CommonMessages.getInt("audit.nombre")); /** * Index a partir duquel on souhaite rcuprer les audits par defaut Les donnes sont rcupres du plus rcent au * plus vieux */ private static final Integer INDEX_DEPART_AUDIT = new Integer(CommonMessages.getInt("audit.index")); /** * Constructeur par dfaut * * @roseuid 42CBFBFC02AF */ public ResultsApplicationComponentAccess() { } /** * Permet de rcuprer une liste de valeurs pour une liste de types de rsultat, un type de composant et un audit * donn * * @param pAudit AuditDTO renseignant l'ID de l'audit sinon <code>null</code> pour le dernier audit de suivi * @param pComponent ComponentDTO renseignant l'ID du composant * @param pMetrics indique si l'on veut les mtriques ou les rsultats qualit * @return ResultsDTO <br/> Format de ResultsDTO : 2 lignes : <br/> -- Cl : null -- Valeur : liste des cls des * TREs<br/> -- Cl : ComponentDTO -- Valeur : liste des rsultats associes en valeur * @throws JrafEnterpriseException Exception JRAF * @roseuid 42CBFBFD0008 */ public ResultsDTO getComponentResults(AuditDTO pAudit, ComponentDTO pComponent, Boolean pMetrics) throws JrafEnterpriseException { // Initialisation ResultsDTO results = null; // retour de la methode ComponentDTO currentComponent = validateComponent(pComponent); // parametre de la facade AuditDTO currentAudit = initAudit(pAudit, pComponent); // parametre de la facade ResultsDTO measuresResults = null; ResultsDTO qresultsResults = null; if (currentAudit != null && currentComponent != null) { // Envoi des collections aux facades et recuperation des resultats if (pMetrics.booleanValue()) { measuresResults = MeasureFacade.getAllMeasures(currentAudit, currentComponent); results = measuresResults; } else { qresultsResults = QualityResultFacade.getAllQResults(currentAudit, currentComponent); results = qresultsResults; } } else { LOG.error(ACMessages.getString("ac.exception.results.getbytre.auditorcomponentnull")); } return results; } /** * @param pAudit l'audit concern * @param pProject le projet * @return la liste des pratiques * @throws JrafEnterpriseException en cas d'chec */ public Collection getAllPractices(AuditDTO pAudit, ComponentDTO pProject) throws JrafEnterpriseException { return QualityResultFacade.findPracticesWhere(new Long(pProject.getID()), new Long(pAudit.getID())); } /** * Rcupre les noms de toutes les pratiques lies un audit et un projet * * @param pAudit l'audit concern * @param pProject le projet * @return la liste des noms des pratiques * @throws JrafEnterpriseException en cas d'chec */ public Collection getAllPracticeNames(AuditDTO pAudit, ComponentDTO pProject) throws JrafEnterpriseException { return QualityResultFacade.findPracticeNameWhere(new Long(pProject.getID()), new Long(pAudit.getID())); } /** * Permet de rcuprer des valeurs pour un type de rsultat, un type de composant et plusieurs audits donns * * @param pProject ComponentDTO renseignant l'ID du composant * @param pRuleId Cl du TRE * @param pAuditDTOs liste des IDs des audits. Si <code>null</code> alors recuperation des deux derniers audits de * suivi * @return ResultsDTO <br/> Format de ResultsDTO : 2 lignes : <br/> -- Cl : null -- Valeur : liste des AuditDTOs<br/> -- * Cl : ComponentDTO -- Valeur : liste des rsultats associes<br/> * @throws JrafEnterpriseException Exception JRAF * @roseuid 42CBFBFD01E9 */ public ResultsDTO getByAudit(List pAuditDTOs, ComponentDTO pProject, Long pRuleId) throws JrafEnterpriseException { // Initialisation ResultsDTO results = null; // retour de l'AC ComponentDTO currentComponent = validateComponent(pProject); // parametre de la facade List currentAudits = initAuditList(pAuditDTOs, pProject); // parametre de la facade if (currentAudits != null && currentComponent != null) { results = QualityResultFacade.getQResultsByAudit(currentAudits, pRuleId, pProject); } else { LOG.error(ACMessages.getString("ac.exception.results.getbyaudit.notvalidparameter")); } return results; } /** * Permet de rcuprer des valeurs pour une liste de types de rsultat, une liste de types de composant et un audit * donns * * @param pAudit AuditDTO renseignant l'ID de l'audit. Si <code>null</code> pass en parametre, alors recuperation * des deux derniers audits de suivi. * @param pComponentDTOs liste des IDs des composants * @return ResultsDTO <br/> Format de ResultsDTO : n+1 lignes : <br/> -- Cl : null -- Valeur : liste des cls de * TREs <br/> -- Cl : ComponentDTO -- Valeur : liste des rsultats associes ( n fois ) <br/> * @throws JrafEnterpriseException Exception JRAF * @roseuid 42CBFBFD0289 */ private ResultsDTO getByFactorAndProject(AuditDTO pAudit, List pComponentDTOs) throws JrafEnterpriseException { // Initialisation ResultsDTO results = null; // retour de la facade List currentComponents = validateComponents(pComponentDTOs); // parametre pour la facade AuditDTO currentAudit = pAudit; if (currentComponents != null) { currentAudit = initAudit(pAudit, (ComponentDTO) currentComponents.iterator().next()); // parametre de la facade } if (currentComponents != null && currentAudit != null) { results = QualityResultFacade.getQResultsByFactorAndProject(currentComponents, currentAudit); } return results; } /** * Permet de rcuprer des valeurs pour une liste de types de rsultat, un type de composant et une liste d'audits * donns * * @param pProject ComponentDTO renseignant l'ID du composant * @param pAuditDTOs liste des IDs des audits. Si <code>null</code> pass en parametre, alors recuperation des * deux derniers audits de suivi. * @return ResultsDTO <br/> Format de ResultsDTO : n+1 lignes : <br/> -- Cl : null -- Valeur : liste des cls de * TREs <br/> -- Cl : AuditDTO -- Valeur : liste des rsultats associes en valeur ( n fois ) * @throws JrafEnterpriseException Exception JRAF * @roseuid 42CBFBFD030B */ public ResultsDTO getProjectResults(List pAuditDTOs, ComponentDTO pProject) throws JrafEnterpriseException { // Initialisation ResultsDTO results = null; // retour de l'AC List currentAudits = initAuditList(pAuditDTOs, pProject); // parametre de la facade if (currentAudits != null && pProject != null) { // Envoi des collections aux facades et recuperation des resultats results = QualityResultFacade.getQResultsByTREAndAudit(currentAudits, pProject); } return results; } /** * Obtention de la grille d'audit correspondant un projet * * @param pProject projet * @param pAudit audit * @return grille d'audit * @throws JrafEnterpriseException si erreur */ public AuditGridDTO getProjectAuditGrid(ComponentDTO pProject, AuditDTO pAudit) throws JrafEnterpriseException { return QualityResultFacade.getAuditGrid(pProject, pAudit); } /** * Permet de rcuprer la volumtrie d'un projet * * @param pProject ComponentDTO renseignant l'ID du composant * @param pAuditId l'ID de l'audit. * @return ResultsDTO <br/> Format de ResultsDTO : n+1 lignes : <br/> -- Cl : null -- Valeur : liste des cls de * TREs <br/> -- Cl : ComponentDTO -- Valeur : liste des rsultats associes en valeur ( n fois ) * @throws JrafEnterpriseException Exception JRAF */ public ResultsDTO getProjectVolumetry(Long pAuditId, ComponentDTO pProject) throws JrafEnterpriseException { // Appel mthode de la faade return MeasureFacade.getProjectVolumetry(pAuditId, pProject); } /** * Permet de rcuprer les rsultats de tous les projets dans le rfrentiel * * @param pNbLignes nombre de lignes, sinon <code>null</code> pour tous les projets avec le parametre pIndexDepart * <code>null</code> * @param pIndexDepart index de depart, sinon <code>null</code> pour tous les projets * @param pIsAdmin boolen permettant de savoir si on doit rcuprer les projets masqus ou non * @param pUserId l'id de l'utilisateur * @return Collection de SqualeReferenceDTO * @throws JrafEnterpriseException Exception JRAF */ public Collection getReference(Integer pNbLignes, Integer pIndexDepart, Boolean pIsAdmin, Long pUserId) throws JrafEnterpriseException { Collection collection = null; collection = SqualeReferenceFacade.getProjectResults(pNbLignes, pIndexDepart, pIsAdmin.booleanValue(), pUserId); return collection; } /** * Obtention des mtriques d'applications * * @param pComponentDTOs collection d'applications * @return mtriques associs au projet * @throws JrafEnterpriseException si erreur */ public List getApplicationResults(Collection pComponentDTOs) throws JrafEnterpriseException { List result = new ArrayList(); // Initialisation de la recuperation de projets Iterator componentIterator = pComponentDTOs.iterator(); // iterateur while (componentIterator.hasNext()) { // Obtention du composant ComponentDTO currentComponent = (ComponentDTO) componentIterator.next(); // Recuperation des composants fils Iterator children = new ArrayList(ComponentFacade.getChildren(currentComponent, null, null, null)) .iterator(); // Obtention du dernier audit AuditDTO lastAudit = initAudit(null, currentComponent); // Ce cas se prsente sur une nouvelle application ou bien // en cas de purge d'audit if (lastAudit != null) { while (children.hasNext()) { ComponentDTO currentChild = (ComponentDTO) children.next(); // Obtention des mesures lies cet audit pour chacun des fils ResultsDTO results = MeasureFacade.getAllMeasures(lastAudit, currentChild); result.add(results); } } } return result; } /** * Permet de rcuprer les rsultats relatifs aux applications * * @param pComponentDTOs Collection de ComponentDTOs renseignant l'ID du composant * @param pAudits liste des audits souhaits, sinon <code>null</code> pour le cas ou on souhaite les deux derniers * audits (paramtr dans le fichier de proprits) * @return liste de liste de resultDTOs tris dans le meme ordre que les pComponentDTOs<br/> Format de la liste : * <br/> liste de liste - le nombre d'lment tant gal au nombre d'lments de pComponentDTOs {ResultsDTO * du dernier audit, ResultsDTO de l'avant-dernier audit, etc. }<br/><br/> Format du ResultsDTO :<br/> -- * Cl : null -- Valeur : liste des TREs disponibles<br/> -- Cl : ComponentDTO relatif au projet -- Valeur : * liste de valeurs associs (n fois) (n fois avec n le nombre total de projets appartenant a l'utilisateur) * @throws JrafEnterpriseException Exception JRAF * @roseuid 42CBFBFE0154 */ public List getApplicationResults(Collection pComponentDTOs, List pAudits) throws JrafEnterpriseException { // Initialisation List resultDTOs = new ArrayList(); // retour de la fonction List children = new ArrayList(); // retour de la facade ComponentFacade List currentAudits = null; // parametre des facades de resultats // Validation des composants List componentTemps = new ArrayList(pComponentDTOs); List currentComponents = validateComponents(componentTemps); // Initialisation de la recuperation de projets Iterator componentIterator = pComponentDTOs.iterator(); // iterateur ComponentDTO currentComponent = null; // ApplicationDTO sous forme de ComponentDTO // Initialisation du retour de la methode ResultsDTO resultsTemp = null; if (currentComponents != null) { // ajout de tous les projets concerns while (componentIterator.hasNext()) { // Obtention du composant currentComponent = (ComponentDTO) componentIterator.next(); // Recuperation des composants fils children = new ArrayList(ComponentFacade.getChildren(currentComponent, null, null, null)); // Initialisation des audits currentAudits = initAuditList(pAudits, currentComponent); List currentResults = new ArrayList(); // Initialisation du retour de la methode if (currentAudits != null) { // Construction de la liste des rsultats intermdiaires for (int i = 0; i < currentAudits.size(); i++) { resultsTemp = new ResultsDTO(); currentResults.add(resultsTemp); } // Obtention des rsultats currentResults = getProjectResultList(currentResults, currentAudits, children); } // Ajout des rsultats vides pour les applications non encore audits if (currentResults == null || currentResults.size() == 0) { currentResults = new ArrayList(); currentResults.add(createEmptyResults(children)); } // Ajout des rsultats resultDTOs.add(currentResults); } } else { resultDTOs = null; } return resultDTOs; } /** * Cration de rsultats nuls pour des projets * * @param pChildren applications * @return rsultats vides respectant le format suivant : -- Cl : null -- Valeur : liste des TREs demands<br/> -- * Cl : ComponentDTO relatif chaque sous-projet -- Valeur : liste de valeurs nulles */ private ResultsDTO createEmptyResults(List pChildren) { ResultsDTO result = new ResultsDTO(); if (result != null) { return result; } // TODO extraire la liste des facteurs associs // et renvoyer celle-ci return result; } /** * @param pAuditId l'id de l'audit * @param pProjectId l'id du projet * @return un boolen indiquant si le projet a provoqu des erreurs * @throws JrafEnterpriseException en cas d'chec */ public Boolean getHaveErrors(Long pAuditId, Long pProjectId) throws JrafEnterpriseException { return new Boolean(getNumberOfErrors(pAuditId, pProjectId).intValue() > 0); } /** * @param pAuditId l'id de l'audit * @param pProjectId l'id du projet * @return le nombre d'erreurs provoqu par le projet * @throws JrafEnterpriseException en cas d'chec */ public Integer getNumberOfErrors(Long pAuditId, Long pProjectId) throws JrafEnterpriseException { return new Integer(ErrorFacade.getNumberOfErrors(pAuditId, pProjectId)); } /** * @param pAuditId l'id de l'audit * @param pProjectId l'id du projet * @return le nombre d'erreurs provoqu par le projet par niveau * @throws JrafEnterpriseException en cas d'chec */ public Integer[] getErrorsRepartition(Long pAuditId, Long pProjectId) throws JrafEnterpriseException { return ErrorFacade.getErrorsRepartition(pAuditId, pProjectId); } /** * @param pAuditId l'id de l'audit * @param pProjectId l'id du projet * @return les noms des tches en chec * @throws JrafEnterpriseException en cas d'chec */ public List getFailedTasks(Long pAuditId, Long pProjectId) throws JrafEnterpriseException { return ErrorFacade.getFailedTasks(pAuditId, pProjectId); } /** * Ajoute pResultDTOs les ResultDTO correspondant.Recupere pour tous les audits les ResultsDTO au format composant * en fonction des tres, et les ajoute a la liste de ResultsDTO renvoyer l'utilisateur. * * @param pResultDTOs la liste de ResultDTO donnant les projets * @param pCurrentAudits liste des AuditDTO concerns * @param pChildren enfants dont on veut les rsultats parametres des facades MeasureFacade et QResultFacade * @return une liste de ResultDTO au mme format que dans la methode getApplicationResults() * @throws JrafEnterpriseException Exception JRAF */ private List getProjectResultList(List pResultDTOs, List pCurrentAudits, List pChildren) throws JrafEnterpriseException { ListIterator auditIterator = pCurrentAudits.listIterator(); AuditDTO currentAudit = null; // audit sur lequel on requiert des resultats ResultsDTO currentResults = null; // ResultsDTO pour les projets et les TREs List newResultDTOs = pResultDTOs; while (auditIterator.hasNext() && newResultDTOs != null) { // Initialisation de l'audit courant et chargement de resultats projets / TREs currentAudit = (AuditDTO) auditIterator.next(); currentResults = getByFactorAndProject(currentAudit, pChildren); // Ajout a des resultats des projets / TREs a la collection de ResultsDTO pour un audit donn // L'indice dans la liste de ResultsDTO correspond a l'indice dans la liste d'audits /* * TODO tester que la premiere ligne de resultsDTO pour chaque projet est la meme SINON throw une exception */ if (currentResults != null) { // Ajout des rsultats sur le RsultDTO de pResultDTOs correspondant au bon audit ResultsDTO resultDTO = ((ResultsDTO) newResultDTOs.get(auditIterator.nextIndex() - 1)); resultDTO.getResultMap().putAll(currentResults.getResultMap()); } else { newResultDTOs = null; } } return newResultDTOs; } /** * Permet d'effectuer la navigation par qualite * * @param pComponent composant concern par la navigation qualite (projet) * @param pTreParent tre parent dont on souahite les fils * @param pAudits audits concernes * @return ResultsDTO du format suivant :<br /> -- Cl : null -- Valeur : liste des cls de TREs<br /> -- Cl : * AuditDTO -- Valeur : liste des rsultats associes ( n fois )<br /> * @throws JrafEnterpriseException exception Jraf */ public ResultsDTO getTreChildrenResults(ComponentDTO pComponent, Long pTreParent, List pAudits) throws JrafEnterpriseException { // Initialisation ResultsDTO resultsDTO = null; // retour de l'AC Collection treChildren = null; // liste des TREs enfants // Validation du composant (id et test de nullit) ComponentDTO currentComponent = validateComponent(pComponent); // parametre de la facade if (currentComponent != null) { // rcupre les audits si la liste d'audits est nulles List currentAudits = initAuditList(pAudits, currentComponent); try { // rcupration des tre enfants treChildren = ComponentFacade.getTREChildren(pTreParent); if (treChildren != null) { List treChildrenList = new ArrayList(treChildren); // rcupration des rsultats correspondant aux TREs enfants, aux audits et au composant concern resultsDTO = QualityResultFacade.getQResults(currentAudits, currentComponent, treChildrenList); } } catch (JrafEnterpriseException e) { String obj[] = { String.valueOf(currentComponent.getID()) }; LOG.error(ACMessages.getString("ac.exception.results.gettrechildrenresults", obj), e); } } return resultsDTO; } /** * Permet de recuperer les resultats d'une pratique ainsi que sa repartition * * @param pAudits liste des AuditDTOs ou <code>null</code> pour rcuprer les derniers audits * @param pProject ComponentDTO relatif a un projet * @param pPractice pratique * @return ResultsDTO avec les deux Map renseignes ResultsMap : <br/> -- Cl : null -- Valeur : Liste d'AuditDTO * <br/> -- Cl : ComponentDTO -- Valuer : valeurs associ au tre <br/> <br/> PracticeMap : n lignes de la * forme suivante :<br/> -- Cl : AuditDTO -- Valeur : tableau de Integer correspondant a la repartition * @throws JrafEnterpriseException exception Jraf */ public ResultsDTO getRepartitionResults(List pAudits, ComponentDTO pProject, PracticeRuleDTO pPractice) throws JrafEnterpriseException { // Initialisation ResultsDTO repartitionResults = null; // retour de la methode ComponentDTO currentComponent = validateComponent(pProject); // composant test List currentAudits = null; // audits initialises if (currentComponent != null) { currentAudits = initAuditList(pAudits, pProject); } if (currentAudits != null) { repartitionResults = QualityResultFacade.getRepartition(currentAudits, currentComponent, pPractice); } return repartitionResults; } /** * Obtention des rsultats de rulecheking sur un projet * * @param pAudits liste des AuditDTOs ou <code>null</code> pour rcuprer les derniers audits * @param pProject ComponentDTO relatif a un projet * @param pPractice pratique * @return ResultsDTO avec les deux Map renseignes ResultsMap : <br/> -- Cl : null -- Valeur : Liste d'AuditDTO * <br/> -- Cl : ComponentDTO -- Valeurs : notes associes aux audits dans le mme ordre que la liste * d'audit de type java.lang.Float<br/> <br/> PracticeMap : n lignes de la forme suivante :<br/> -- Cl : * AuditDTO -- Valeur : map de <RuleCheckingDTO,java.lang.Integer> * @throws JrafEnterpriseException exception Jraf */ public ResultsDTO getRuleCheckingResults(List pAudits, ComponentDTO pProject, PracticeRuleDTO pPractice) throws JrafEnterpriseException { // Initialisation ResultsDTO repartitionResults = null; // retour de la methode ComponentDTO currentComponent = validateComponent(pProject); // composant test List currentAudits = null; // audits initialises if (currentComponent != null) { currentAudits = initAuditList(pAudits, pProject); } if (currentAudits != null) { repartitionResults = QualityResultFacade.getRuleChecking(currentAudits, currentComponent, pPractice); } return repartitionResults; } /** * Rcupre les dtails d'une transgressions pour une rgle donne. * * @param pMeasureID l'id de la mesure * @param pRuleID l'id de la rgle * @return les dtails de la mesure concernant la rgle d'id <code>pRuleID</code> * @throws JrafEnterpriseException si erreur */ public Collection getRuleCheckingItemResults(Long pMeasureID, Long pRuleID) throws JrafEnterpriseException { return QualityResultFacade.getRuleCheckingItems(pMeasureID, pRuleID); } /** * Permet de recuperer les composants et leurs resultats associs a une valeur donne d'une note et un audit * * @param pAudit AuditDTO renseignant l'identifiant. Ne peut etre <code>null</code> * @param pProject ComponentDTO relatif au projet * @param pTreKey cl de tre relatif a une pratique * @param pValue Integer representant l'index de rpartition * @param pMax Nombre maximum de composants retourn * @return ResultsDTO de la forme suivante :<br/> -- Cl : null -- Valeur : Liste de cls de tre relatifs a une * pratique -- Cl : ComponentDTO -- Valeur : Liste de valeur associe * @throws JrafEnterpriseException exception Jraf */ public ResultsDTO getValueResults(AuditDTO pAudit, ComponentDTO pProject, Long pTreKey, Integer pValue, Integer pMax) throws JrafEnterpriseException { // Initialisation ResultsDTO results = null; // retour de la methode Collection components = null; // composants ayant la valeur donne List componentList = null; // liste associee aux composants recuperes Collection treChildren = null; // liste des tres fils List treKeyList = null; // liste associee aux tres recuperes AuditDTO currentAudit = pAudit; ComponentDTO currentProject = validateComponent(pProject); if (currentProject != null) { currentAudit = initAudit(currentAudit, currentProject); } // rcupration des composants souhaits et des tres de mesures if (pValue != null) { components = ComponentFacade.get(pAudit, currentProject, pTreKey, pValue, pMax); treChildren = ComponentFacade.getTREChildren(pTreKey); // Initialisation des listes if (components != null && treChildren != null) { componentList = new ArrayList(components); treKeyList = new ArrayList(treChildren); /* recuperation des resultats */ results = MeasureFacade.getMeasuresByTREAndComponent(pTreKey, treKeyList, componentList, pAudit); } } return results; } /** * Permet de recuperer les composants et leurs resultats associs a une valeur donne d'une note et un audit * * @param pAudit AuditDTO renseignant l'identifiant. Ne peut etre <code>null</code> * @param pProject ComponentDTO relatif au projet * @param pTreKey cl de tre relatif a une pratique * @param pMinValue Integer representant la note min de l'interval * @param pMaxValue Integer representant la note max de l'interval * @param pMax Nombre maximum de composants retourn * @return ResultsDTO de la forme suivante :<br/> -- Cl : null -- Valeur : Liste de cls de tre relatifs a une * pratique -- Cl : ComponentDTO -- Valeur : Liste de valeur associe * @throws JrafEnterpriseException exception Jraf */ public ResultsDTO getValueResultsForInterval(AuditDTO pAudit, ComponentDTO pProject, Long pTreKey, Double pMinValue, Double pMaxValue, Integer pMax) throws JrafEnterpriseException { // Initialisation ResultsDTO results = null; // retour de la methode Collection components = null; // composants ayant la valeur donne List componentList = null; // liste associee aux composants recuperes Collection treChildren = null; // liste des tres fils List treKeyList = null; // liste associee aux tres recuperes AuditDTO currentAudit = pAudit; ComponentDTO currentProject = validateComponent(pProject); if (currentProject != null) { currentAudit = initAudit(currentAudit, currentProject); } // rcupration des composants souhaits et des tres de mesures if (pMinValue != null && pMaxValue != null) { components = ComponentFacade.getComponentsInInterval(pAudit, currentProject, pTreKey, pMinValue, pMaxValue, pMax); treChildren = ComponentFacade.getTREChildren(pTreKey); // Initialisation des listes if (components != null && treChildren != null) { componentList = new ArrayList(components); treKeyList = new ArrayList(treChildren); /* recuperation des resultats */ results = MeasureFacade.getMeasuresByTREAndComponent(pTreKey, treKeyList, componentList, pAudit); } } return results; } /** * @param pAudit audit courant * @return l'audit prcdent * @throws JrafEnterpriseException si pb hibernate */ public AuditDTO getPreviousAudit(AuditDTO pAudit) throws JrafEnterpriseException { return AuditFacade.getPreviousAudit(pAudit, null); } /** * Permet de rcuprer les notes de tous les composants d'un type donn relatifs a un projet * * @param pProject ComponentDTO de type projet * @param pComponentType type du composant fils souhait * @param pAudit AuditDTO * @param pTre Tre dont on souhaite connatre le classment * @param pMax nombre maximum de top remont * @return ResultsDTO du meme format que dans getByComponent() * @throws JrafEnterpriseException exception Jraf */ public ResultsDTO getTopResults(ComponentDTO pProject, String pComponentType, AuditDTO pAudit, String pTre, Integer pMax) throws JrafEnterpriseException { // Initiailisation ResultsDTO results = null; // retour de la methode ComponentDTO currentProject = null; // sous-projet apres verification AuditDTO currentAudit = null; // audit apres verification Collection children = null; // fils du sous-projet d'un type donn currentProject = validateComponent(pProject); if (currentProject != null) { currentAudit = initAudit(pAudit, currentProject); } if (currentAudit != null) { results = MeasureFacade.getTop(currentProject, pComponentType, currentAudit, pTre, pMax); } return results; } /** * Retrieves components which have a precise score for some tres * * @param pProjectId project id * @param pAuditId Audit id * @param pTreKeys keys of tres to find * @param pTreValues value of tres * @param pMax number of components max to return * @return list of components * @throws JrafEnterpriseException if error */ public List<ComponentDTO> getComponentsWhereTres(Long pProjectId, Long pAuditId, String[] pTreKeys, String[] pTreValues, Integer pMax) throws JrafEnterpriseException { return MeasureFacade.getComponentsWhereTres(pProjectId, pAuditId, pTreKeys, pTreValues, pMax); } /** * Initialise l'audit si celui-ci n'est pas renseigne (null ou identifiant negatif) * * @param pAudit AuditDTO valider * @param pComponent ComponentDTO associ l'audit * @return AuditDTO renseignant un identifiant valide * @throws JrafEnterpriseException exception Jraf */ private AuditDTO initAudit(AuditDTO pAudit, ComponentDTO pComponent) throws JrafEnterpriseException { // Initialisation AuditDTO audit = pAudit; // retour de la methode if (audit == null || audit.getID() < 0) { audit = AuditFacade.getLastAudit(pComponent, null); } // Test si le composant possede bien un audit pour loguer l'erreur if (audit == null) { String obj[] = { String.valueOf(pComponent.getID()) }; LOG.error(ACMessages.getString("ac.exception.results.initAudit.noauditforcomponent", obj)); } return audit; } /** * Initialise les audits si ceux-ci ne sont pas renseignes * * @param pAudits liste des AuditsDTO a renseigner * @param pComponent composant associe * @return liste de AuditDTO renseignant un identifiant valide * @throws JrafEnterpriseException exception Jraf */ private List initAuditList(List pAudits, ComponentDTO pComponent) throws JrafEnterpriseException { // Initialisation List audits = pAudits; // retour de la methode if (audits == null) { audits = AuditFacade.getLastAudits(pComponent, NB_AUDITS, INDEX_DEPART_AUDIT, null, AuditBO.TERMINATED); } else { /* TODO : lancer une methode d'integrite des audits */ } return audits; } /** * Verifie que le composant n'est pas null et que son identifiant est >= 0 * * @param pComponent ComponentDTO * @return ComponentDTO si valide, sinon <code>null</code> */ private ComponentDTO validateComponent(ComponentDTO pComponent) { ComponentDTO newComponent = pComponent; if (newComponent != null) { if (newComponent.getID() < 0) { newComponent = null; LOG.error(ACMessages.getString("ac.exception.results.validatecomponent.idnegative")); } } else { LOG.error(ACMessages.getString("ac.exception.results.validatecomponent.componentnull")); } return newComponent; } /** * Verifie que la liste de composants est valide * * @param pComponents Liste de ComponentDTO * @return Liste de ComponentDTO avec les composants uniquement valides */ private List validateComponents(List pComponents) { // Initialisation List components = pComponents; // retour de la methode // On parcourt chaque composant pour // les valider un par un if (pComponents != null) { Object currentObject = null; Iterator componentIterator = pComponents.iterator(); // Verification de l'integrite de chaque composant while ((componentIterator.hasNext()) && (components != null)) { currentObject = componentIterator.next(); // TODO voir si on doit faire ce test ou supposer que // la collection est bien compose exclusivement de componentDTO // code defensif ? if (currentObject instanceof ComponentDTO) { ComponentDTO componentTemp = validateComponent((ComponentDTO) currentObject); if (componentTemp == null) { components = null; } } else { // objets differents de ComponentDTO components = null; } } } else { LOG.error(ACMessages.getString("ac.exception.results.validatecomponents.componentlistnull")); } return components; } /** * @param firstAudit le premier audit * @param secondAudit le second pour comparer * @param project le projet * @param filter le filtre utiliser * @param pLimit le nombre max de rsultats rcuprer * @return les changements entre le premier et le second audit * @throws JrafEnterpriseException si erreur */ public Collection getChangedComponentResults(AuditDTO firstAudit, AuditDTO secondAudit, ComponentDTO project, Object[] filter, Integer pLimit) throws JrafEnterpriseException { // On rcupre la liste des nouveaux composants, des composants qui ont t supprims // et ceux dont la note sur une ou plusieurs pratiques a chang. Collection components = QualityResultFacade.getChangedComponents(firstAudit, secondAudit, project, filter, pLimit); return components; } /** * Rcupre les pratiques corriger pour le plan d'action (sous forme ActionPlanDTO) * * @param pAuditId l'id de l'audit * @param pProjectId l'id du projet * @param pHasLimit indique si il y a une limite du nombre de corrections remonter * @return les 100 (au maximum) composants ou transgressions " corriger" (si <code>pHasLimit</code>) tris par * pratique (de la pratique la plus facile corriger la moins facile). Une pratique est plus facile * corriger si l'effort * nombre de corrections faire est bas. * @throws JrafEnterpriseException si erreur */ public Collection getWorstPractices(String pAuditId, String pProjectId, Boolean pHasLimit) throws JrafEnterpriseException { return QualityResultFacade.getWorstPractices(pAuditId, pProjectId, pHasLimit.booleanValue()); } /** * Build list of projects for audit report * * @param pAppliId application id * @param pCurAuditId current audit id * @param pPrevAuditId previous audit id * @param nbTop number of top to retrieve (maximum) * @param maxScore maximal score for score's components for top * @return list of project for audit report * @throws JrafEnterpriseException if error */ public List getProjectReports(Long pAppliId, Long pCurAuditId, Long pPrevAuditId, Integer nbTop, Float maxScore) throws JrafEnterpriseException { return AuditReportFacade.getProjectReports(pAppliId, pCurAuditId, pPrevAuditId, nbTop, maxScore); } /** * Get back the list of manual practices for a project * * @param projectId Id of the project * @return a list of QualityResultDTO * @throws JrafEnterpriseException exception happened during the process */ public List<QualityResultDTO> listOfManualMark(Long projectId) throws JrafEnterpriseException { // Recover the practices link to the project HashSet<PracticeRuleDTO> practicesRuleList = QualityGridFacade .loadManualPracticesRulesByProjectId(projectId); ArrayList<QualityResultDTO> manualResult = new ArrayList<QualityResultDTO>(); // For each practices for (PracticeRuleDTO ruleDTO : practicesRuleList) { // We search the last manual mark linked to the rule QualityResultDTO result = QualityResultFacade.findManualQualityResult(projectId, ruleDTO.getId()); if (result == null) { result = new QualityResultDTO(); ComponentDTO compoDto = new ComponentDTO(); compoDto.setID(projectId); result.setProject(compoDto); result.setRule(ruleDTO); } // We add the result to the map manualResult.add(result); } return manualResult; } /** * This method save a result for a manual practice * * @param dto The QualityresultDTO to save * @throws JrafEnterpriseException Exception happen during the record */ public void saveManualResult(QualityResultDTO dto) throws JrafEnterpriseException { QualityResultFacade.createManualResult(dto); } /** * This method get back the last result record for a manual practice * * @param projectId The id of the project * @param ruleId The id of the rule * @return The last mark * @throws JrafEnterpriseException exception happen during the serach in the db */ public QualityResultDTO lastManualMark(Long projectId, Long ruleId) throws JrafEnterpriseException { QualityResultDTO result = QualityResultFacade.findManualQualityResult(projectId, ruleId); return result; } /** * This method gets back the last result record for a manual practice and an audit * * @param projectId The ID of the project * @param ruleId The ID of the practice rule * @param auditId The ID of the audit * @return The last mark for this audit * @throws JrafEnterpriseException exception happen during the serach in the db */ public QualityResultDTO lastManualMarkByAudit(Long projectId, Long ruleId, Long auditId) throws JrafEnterpriseException { QualityResultDTO result = QualityResultFacade.findManualQualityResultByAudit(projectId, ruleId, auditId); return result; } /** * Get back the result link to the project , audit and rule guive in argument * * @param projectId The id of the project * @param auditId The id of the audit * @param ruleId the id of the rule * @return the result link to the three argument * @throws JrafEnterpriseException Exception happen during the search in the db */ public MarkDTO auditManualMark(Long projectId, Long auditId, Long ruleId) throws JrafEnterpriseException { MarkDTO dto = QualityResultFacade.getPracticeByAuditRuleProject(projectId, auditId, ruleId); return dto; } }