org.squale.squaleweb.applicationlayer.action.results.audit.AuditAction.java Source code

Java tutorial

Introduction

Here is the source code for org.squale.squaleweb.applicationlayer.action.results.audit.AuditAction.java

Source

/**
 * 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.applicationlayer.action.results.audit;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.servlet.ServletUtilities;

import org.squale.jraf.commons.exception.JrafEnterpriseException;
import org.squale.jraf.helper.AccessDelegateHelper;
import org.squale.jraf.spi.accessdelegate.IApplicationComponent;
import org.squale.squalecommon.datatransfertobject.component.AuditDTO;
import org.squale.squalecommon.datatransfertobject.component.ComponentDTO;
import org.squale.squalecommon.enterpriselayer.businessobject.component.AuditBO;
import org.squale.squaleweb.applicationlayer.action.ActionUtils;
import org.squale.squaleweb.applicationlayer.action.accessRights.ReaderAction;
import org.squale.squaleweb.applicationlayer.formbean.component.AuditForm;
import org.squale.squaleweb.applicationlayer.formbean.component.AuditListForm;
import org.squale.squaleweb.applicationlayer.formbean.component.SplitAuditsListForm;
import org.squale.squaleweb.applicationlayer.tracker.TrackerStructure;
import org.squale.squaleweb.comparator.AuditComparator;
import org.squale.squaleweb.resources.WebMessages;
import org.squale.squaleweb.transformer.ApplicationTransformer;
import org.squale.squaleweb.transformer.AuditListTransformer;
import org.squale.squaleweb.transformer.AuditTransformer;
import org.squale.squaleweb.transformer.ServeurListTransformer;
import org.squale.squaleweb.util.SqualeWebActionUtils;
import org.squale.squaleweb.util.graph.AuditTimeMaker;
import org.squale.squaleweb.util.graph.AuditsSizeMaker;
import org.squale.squaleweb.util.graph.GraphMaker;
import org.squale.welcom.struts.bean.WActionForm;
import org.squale.welcom.struts.transformer.WTransformerException;
import org.squale.welcom.struts.transformer.WTransformerFactory;

/**
 * Permet de manipuler le choix des audits.
 * 
 * @version 1.0
 * @author
 */
public class AuditAction extends ReaderAction {

    /** Cl pour rcuprer le nom du serveur */
    public static final String SERVER_NAME_KEY = "serverName";

    /** Cl pour rcuprer la liste des serveurs */
    public static final String SERVER_LIST_KEY = "serverList";

    /**
     * Obtention de la mthode componentAccess  utiliser Le nom de la mthode  appeler dpend du type d'audit
     * visualis
     * 
     * @param pKind type d'audit
     * @return mthode  appeler
     */
    private String getMethodForKind(String pKind) {
        String result = null;
        // Pas d'utilisation de map car trop peu de donnes
        // La mthode utilise dpend du type d'audit
        if (pKind.equals("terminated")) {
            result = "getTerminatedAudits"; // Tous les audits
        } else if (pKind.equals("periodic")) {
            result = "getLastPeriodicAudits"; // Audits priodiques
        } else if (pKind.equals("milestone")) {
            result = "getLastMilestones"; // Audits de jalon
        } else if (pKind.equals("failed")) {
            result = "getFailedAudits"; // Audits en chec
        } else if (pKind.equals("partial")) {
            result = "getPartialAudits"; // Audits partiels
        }
        return result;
    }

    /**
     * Permet la rcupration de tous les audits de l'application
     * 
     * @param pMapping le mapping.
     * @param pForm le formulaire  lire.
     * @param pRequest la requte HTTP.
     * @param pResponse la rponse de la servlet.
     * @return l'action  raliser.
     */
    public ActionForward list(ActionMapping pMapping, ActionForm pForm, HttpServletRequest pRequest,
            HttpServletResponse pResponse) {

        ActionErrors errors = new ActionErrors();
        ActionForward forward = pMapping.findForward("total_failure");
        String kind = pRequest.getParameter("kind");
        try {
            // On efface ces forms contenant car si on passe par ici
            // Ces forms ne peuvent que contenir les informations pour une autre application
            pRequest.getSession().removeAttribute("applicationErrorForm");
            pRequest.getSession().removeAttribute("resultListForm");
            List audits = getAudits(pRequest, getMethodForKind(kind));
            WTransformerFactory.objToForm(AuditListTransformer.class, (SplitAuditsListForm) pForm, audits);
            forward = pMapping.findForward("list");
            // Place l'attribut dans la forme pour etre recuper dans la jsp
            ((SplitAuditsListForm) pForm).setKind(kind);
        } catch (Exception e) {
            handleException(e, errors, pRequest);
        }
        if (!errors.isEmpty()) {
            saveMessages(pRequest, errors);
        }
        // On est pass par un menu donc on rinitialise le traceur
        // et on rajoute la page courante
        String displayName = WebMessages.getString(pRequest.getLocale(), "tracker.audits.list." + kind);
        updateHistTracker(displayName, "audits.do?action=list&kind=" + kind, TrackerStructure.UNDEFINED, pRequest,
                true);
        return (forward);
    }

    /**
     * Purge des audits
     * 
     * @param pMapping le mapping.
     * @param pForm le formulaire  lire.
     * @param pRequest la requte HTTP.
     * @param pResponse la rponse de la servlet.
     * @return l'action  raliser.
     */
    public ActionForward purge(ActionMapping pMapping, ActionForm pForm, HttpServletRequest pRequest,
            HttpServletResponse pResponse) {
        ActionForward forward = pMapping.findForward("purge");
        return (forward);
    }

    /**
     * Permet la slection d'audits  afficher.
     * 
     * @param pMapping le mapping.
     * @param pForm le formulaire  lire.
     * @param pRequest la requte HTTP.
     * @param pResponse la rponse de la servlet.
     * @return l'action  raliser.
     */
    public ActionForward select(ActionMapping pMapping, ActionForm pForm, HttpServletRequest pRequest,
            HttpServletResponse pResponse) {
        ActionErrors errors = new ActionErrors();
        ActionForward forward = new ActionForward();
        try {
            List auditsSelected = getAuditsSelected(pForm, pRequest);
            // Vrification de la slection
            if (auditsSelected.size() < 1 || auditsSelected.size() > 2) {
                ActionError error = new ActionError("error.invalid_audits_selection");
                errors.add("invalid.selection", error);
            } else {
                Long applicationId = new Long(((AuditForm) auditsSelected.get(0)).getApplicationId());
                pRequest.setAttribute("currentAuditId", "" + ((AuditForm) auditsSelected.get(0)).getId());
                if (auditsSelected.size() == 1) {
                    // S'il n'y en a qu'un de slectionn, on choisit aussi le prcdent de la liste
                    // s'il existe
                    AuditForm audit = getPreviousAudit((AuditForm) auditsSelected.get(0));
                    if (null != audit) {
                        auditsSelected.add(audit);
                    }
                }
                // On trie les audits dans l'ordre inverse chronologique
                AuditComparator ac = new AuditComparator();
                Collections.sort(auditsSelected, ac);
                Collections.reverse(auditsSelected);

                // On remplit le formulaire qui sera mis en session
                AuditListForm listForm = new AuditListForm();
                listForm.setAudits(auditsSelected);
                // on a russi  rcuprer l'audit prcdent et il n'est pas nul
                if (auditsSelected.size() == 2) {
                    pRequest.setAttribute("previousAuditId", "" + ((AuditForm) auditsSelected.get(1)).getId());
                }

                pRequest.removeAttribute("id");
                pRequest.setAttribute("applicationId", applicationId.toString());
                // on dfinit l'audit en cours pour vrification (audit le plus rcent)
                pRequest.setAttribute("audit", auditsSelected.get(0));
                // Forward diffrent selon le type de l'audit
                if (pRequest.getParameter("kind") != null && pRequest.getParameter("kind").equals("failed")) {
                    String oldAuditId = pRequest.getParameter("oldAudit");
                    String oldPreviousAuditId = pRequest.getParameter("oldPreviousAudit");
                    if (null != oldAuditId) {
                        // On le rajoute dans le requte pour pouvoir rcuprer l'action du bouton retour
                        pRequest.setAttribute("oldAuditId", oldAuditId);
                        pRequest.setAttribute("oldPreviousAuditId", oldPreviousAuditId);
                    } else {
                        // On met une valeur par dfaut
                        pRequest.setAttribute("oldAuditId", "none");
                        pRequest.setAttribute("oldPreviousAuditId", "none");
                    }
                    forward = pMapping.findForward("applicationErrors");
                } else {
                    forward = pMapping.findForward("application");
                }
                // In all cases, add user access for the application
                addUserAccess(pRequest, applicationId.longValue());
            }
        } catch (Exception e) {
            // Traitement factoris des exceptions
            handleException(e, errors, pRequest);
        }
        if (!errors.isEmpty()) {
            // Enregistrement du message et retour sur la page pour afficher l'erreur
            saveErrors(pRequest, errors);
            forward = pMapping.findForward("failure");
        }
        // pas de tracker ici
        return forward;
    }

    /**
     * Donne la liste des audits slectionns par l'utilisateur. La slection peut venir d'une liste de checkbox ou par
     * un lien donnant l'id de l'audit
     * 
     * @param pForm le formulaire
     * @param pRequest la requte
     * @return les audits slectionns
     * @throws WTransformerException si erreur lors de la transformation
     * @throws JrafEnterpriseException si erreur Jraf
     * @throws NumberFormatException si erreur de parsing
     */
    private List getAuditsSelected(ActionForm pForm, HttpServletRequest pRequest)
            throws WTransformerException, JrafEnterpriseException, NumberFormatException {
        SplitAuditsListForm form = (SplitAuditsListForm) pForm;
        // On remet  jour les form en session permettant d'accder aux diffrents types d'audits
        List auditsSession = ActionUtils.getCurrentAuditsAsDTO(pRequest);
        form.resetAudits(auditsSession);
        pRequest.getSession().setAttribute("splitAuditsListForm", form);

        Object param = pRequest.getParameter("currentAuditId");
        ArrayList auditsSelected = new ArrayList();
        // Dans le cas o l'audit est donn en paramtre, on va le chercher directement en base
        // Sinon on recherche les audits dans la liste en session car il s'agit d'une slection
        // par checkbox
        if (null != param) {
            // Recheche en base
            IApplicationComponent ac = AccessDelegateHelper.getInstance("Component");
            Object[] auditIdParam = new Object[] { new Long(Long.parseLong((String) param)) };
            AuditDTO auditDTO = (AuditDTO) ac.execute("getById", auditIdParam);
            if (null != auditDTO) {
                // On recherche l'application associe
                ac = AccessDelegateHelper.getInstance("ApplicationAdmin");
                ComponentDTO appli = (ComponentDTO) ac.execute("loadByAuditId", auditIdParam);
                auditDTO.setApplicationId(appli.getID());
                auditDTO.setApplicationName(appli.getName());
                // On le transforme
                WActionForm auditForm = WTransformerFactory.objToForm(AuditTransformer.class, auditDTO);
                // et on l'ajoute  la liste des audits slectionns
                auditsSelected.add(auditForm);
            }
        } else {
            // Recherche par liste
            ArrayList audits = new ArrayList(form.getAudits());
            audits.addAll(form.getPublicAudits());
            auditsSelected.addAll(new AuditUtils().getSelection(audits));
        }
        return auditsSelected;
    }

    /**
     * Retourne l'audit prcdent celui avec l'id paramtre dans la liste fournie. <br />
     * La prcdence est calcule  partir de la date.
     * 
     * @param pAudit l'audit de rfrence
     * @return l'AuditForm suivant, ou null s'il n'en existe pas.
     * @throws WTransformerException si un probleme de transformation apparait.
     * @throws JrafEnterpriseException si un probleme hibernate apparait.
     */
    private AuditForm getPreviousAudit(final AuditForm pAudit)
            throws WTransformerException, JrafEnterpriseException {
        AuditForm auditTemp = null;
        AuditForm audit = null;
        AuditDTO auditDTO = (AuditDTO) WTransformerFactory.formToObj(AuditTransformer.class, pAudit)[0];
        IApplicationComponent ac = AccessDelegateHelper.getInstance("Results");
        Object[] paramIn = { auditDTO };
        auditDTO = (AuditDTO) ac.execute("getPreviousAudit", paramIn);
        if (auditDTO != null) {
            audit = (AuditForm) WTransformerFactory.objToForm(AuditTransformer.class, new Object[] { auditDTO });
        }

        return audit;
    }

    /**
     * Execute la rcupration des audits avec la mthode de l'application component donne.
     * 
     * @param pRequest la requete http.
     * @param pMethod la methode  excuter.
     * @return une liste trie d'audits.
     * @throws JrafEnterpriseException si un pb d'appel  l'AC survient.
     * @throws WTransformerException si un pb de transformation apparait.
     */
    private List getAudits(final HttpServletRequest pRequest, final String pMethod)
            throws JrafEnterpriseException, WTransformerException {
        IApplicationComponent ac = AccessDelegateHelper.getInstance("Component");
        ComponentDTO application = (ComponentDTO) WTransformerFactory.formToObj(ApplicationTransformer.class,
                ActionUtils.getCurrentApplication(pRequest))[0];
        // on a juste besoin de l'application, la mthode a dj t dfinie
        Object[] paramIn = new Object[] { application, null, null };
        Collection audits = (Collection) ac.execute(pMethod, paramIn);
        ArrayList results = new ArrayList();
        results.addAll(audits);
        return results;
    }

    /**
     * Permet de rcuprer les audits programms, ainsi que ceux interrompus/en cours
     * 
     * @param pMapping le mapping.
     * @param pForm le formulaire  lire.
     * @param pRequest la requte HTTP.
     * @param pResponse la rponse de la servlet.
     * @return l'action  raliser.
     */
    public ActionForward displayNotAttemptedAndRunning(ActionMapping pMapping, ActionForm pForm,
            HttpServletRequest pRequest, HttpServletResponse pResponse) {

        ActionErrors errors = new ActionErrors();
        ActionForward forward = new ActionForward();

        try {
            // On veut les audits de suivis qui sont programms
            AuditListForm notAttemptedListForm = initAuditsList(AuditBO.NORMAL, new Integer(AuditBO.NOT_ATTEMPTED));
            // On veut tous les audits qui sont termins,
            AuditListForm shutDownListForm = initAuditsList(AuditBO.ALL_TYPES, new Integer(AuditBO.RUNNING));
            // Met  jour les 2 champs
            ((SplitAuditsListForm) pForm).setNotAttemptedAudits(notAttemptedListForm.getAudits());
            ((SplitAuditsListForm) pForm).setShutDownAudits(shutDownListForm.getAudits());
            forward = pMapping.findForward("display");
        } catch (Exception e) {
            handleException(e, errors, pRequest);
        }
        if (!errors.isEmpty()) {
            // Enregistrement du message et routage vers la page d'erreur
            saveErrors(pRequest, errors);
            forward = pMapping.findForward("total_failure");
        }
        // On est pass par un menu donc on rinitialise le traceur
        resetTracker(pRequest);
        return forward;
    }

    /**
     * Permet de rcuprer les audits partiels ou en chec
     * 
     * @param pMapping le mapping.
     * @param pForm le formulaire  lire.
     * @param pRequest la requte HTTP.
     * @param pResponse la rponse de la servlet.
     * @return l'action  raliser.
     */
    public ActionForward displayFailedOrPartial(ActionMapping pMapping, ActionForm pForm,
            HttpServletRequest pRequest, HttpServletResponse pResponse) {

        ActionErrors errors = new ActionErrors();
        ActionForward forward = new ActionForward();

        try {
            // On veut les audits en chec
            AuditListForm failedListForm = initAuditsList(AuditBO.ALL_TYPES, new Integer(AuditBO.FAILED));
            // On veut tous les audits partiels
            AuditListForm partialListForm = initAuditsList(AuditBO.ALL_TYPES, new Integer(AuditBO.PARTIAL));
            List partialAndFailed = failedListForm.getAudits();
            partialAndFailed.addAll(partialListForm.getAudits());
            // Met  jour le champ
            ((SplitAuditsListForm) pForm).setFailedOrPartialAudits(partialAndFailed);
            forward = pMapping.findForward("display");
        } catch (Exception e) {
            handleException(e, errors, pRequest);
        }
        if (!errors.isEmpty()) {
            // Enregistrement du message et routage vers la page d'erreur
            saveErrors(pRequest, errors);
            forward = pMapping.findForward("total_failure");
        }
        // On est pass par un menu donc on rinitialise le traceur
        resetTracker(pRequest);
        return forward;
    }

    /**
     * Permet de rcuprer les audits partiels ou en chec
     * 
     * @param pMapping le mapping.
     * @param pForm le formulaire  lire.
     * @param pRequest la requte HTTP.
     * @param pResponse la rponse de la servlet.
     * @return l'action  raliser.
     */
    public ActionForward changeStatus(ActionMapping pMapping, ActionForm pForm, HttpServletRequest pRequest,
            HttpServletResponse pResponse) {
        ActionErrors errors = new ActionErrors();
        ActionForward forward = pMapping.findForward("displayFailed");
        ActionMessages messages = new ActionMessages();

        try {
            List audits = ((SplitAuditsListForm) pForm).getFailedOrPartialAudits();
            ArrayList changedAudits = new ArrayList();
            for (int i = 0; i < audits.size(); i++) {
                AuditForm auditForm = (AuditForm) audits.get(i);
                // Si un audit est slectionn, c'est qu'on veut passer son status de failed  partiel
                // ou rciproquement
                if (auditForm.isSelected()) {
                    if (auditForm.getStatus() == AuditBO.PARTIAL) {
                        auditForm.setStatus(AuditBO.FAILED);
                    } else { // sinon c'est forcment dans l'autre sens
                        auditForm.setStatus(AuditBO.PARTIAL);
                    }
                    // on enlve la slection
                    auditForm.setSelected(false);
                    // On transforme en dto
                    // On l'ajoute  la liste des audits  mettre  jour
                    changedAudits
                            .add(WTransformerFactory.formToObj(AuditTransformer.class, (WActionForm) auditForm)[0]);
                }
            }
            // Sauvegarde les modifications en base
            // Le nombre d'audits  modifier
            Integer nbChanged = new Integer(changedAudits.size());
            if (nbChanged.intValue() > 0) {
                IApplicationComponent ac = AccessDelegateHelper.getInstance("Component");
                // On update les audits
                Object[] paramIn = new Object[] { changedAudits };
                nbChanged = (Integer) ac.execute("updateAuditsDateOrStatus", paramIn);
            }
            // On affiche le nombre d'audits modifis
            ActionMessage msg = new ActionMessage("message.nbChangedAudits", nbChanged);
            messages.add("informations", msg);
            saveMessages(pRequest, messages);
        } catch (Exception e) {
            handleException(e, errors, pRequest);
        }
        if (!errors.isEmpty()) {
            // Enregistrement du message et routage vers la page d'erreur
            saveErrors(pRequest, errors);
            forward = pMapping.findForward("total_failure");
        }
        // On est pass par un menu donc on rinitialise le traceur
        resetTracker(pRequest);
        return forward;
    }

    /**
     * Permet de rcuprer les audits termins
     * 
     * @param pMapping le mapping.
     * @param pForm le formulaire  lire.
     * @param pRequest la requte HTTP.
     * @param pResponse la rponse de la servlet.
     * @return l'action  raliser.
     */
    public ActionForward displayTerminated(ActionMapping pMapping, ActionForm pForm, HttpServletRequest pRequest,
            HttpServletResponse pResponse) {

        ActionErrors errors = new ActionErrors();
        ActionForward forward = new ActionForward();

        try {
            // Rcupre le dernier audit russi de chaque application
            IApplicationComponent ac = AccessDelegateHelper.getInstance("Component");
            Collection audits = (Collection) ac.execute("getLastTerminatedAudits");
            AuditListForm listForm = (AuditListForm) WTransformerFactory.objToForm(AuditListTransformer.class,
                    audits);
            List auditsList = listForm.getAudits();
            // Met  jour le champ
            ((SplitAuditsListForm) pForm).setTerminatedAudits(auditsList);
            // On rcupre le nom du serveur slectionn
            String serverName = (String) pRequest.getParameter(SERVER_NAME_KEY);
            // Construction des graphes de statistiques par serveur
            GraphMaker timeGraph = null;
            GraphMaker sizeGraph = null;
            if (null != serverName && serverName.length() > 0) {
                GraphMaker[] graphics = buildStatGraphics(pRequest, auditsList, serverName);
                // Ajoute les makers au form pour pouvoir l'afficher (appel dans la jsp)
                // sur le temps
                timeGraph = graphics[0];
                // sur la taille
                sizeGraph = graphics[1];
            } else {
                serverName = "";
            }
            // Affectation des graphes (null si il ne doivent pas appratre dans la jsp)
            ((SplitAuditsListForm) pForm).setTimeMaker(timeGraph);
            ((SplitAuditsListForm) pForm).setSizeMaker(sizeGraph);
            // chargement de la liste des serveurs
            IApplicationComponent acServer = AccessDelegateHelper.getInstance("Serveur");
            Collection serversDTO = (Collection) acServer.execute("listeServeurs");
            // On place la liste des serveurs dans la session (et non dans la requte pour les tris welcom)
            pRequest.getSession().setAttribute(SERVER_LIST_KEY,
                    WTransformerFactory.objToForm(ServeurListTransformer.class, serversDTO));
            // Ainsi que le nom slectionn
            pRequest.setAttribute(SERVER_NAME_KEY, serverName);
            forward = pMapping.findForward("list_terminated");
        } catch (Exception e) {
            handleException(e, errors, pRequest);
        }
        if (!errors.isEmpty()) {
            // Enregistrement du message et routage vers la page d'erreur
            saveErrors(pRequest, errors);
            forward = pMapping.findForward("total_failure");
        }
        // On est pass par un menu donc on rinitialise le traceur
        resetTracker(pRequest);
        return forward;
    }

    /**
     * Consrtuit les grpahes reprsentant les statistiques par serveur sur le temps et la taille des audits
     * 
     * @param pRequest la requte
     * @param auditsList la liste des audits
     * @param serverName le nom du serveur
     * @return un tableau de GraphMaker  deux lment : [TimeMaker, SizeMaker]
     * @throws IOException si erreur  la transformation des graphes en image
     */
    private GraphMaker[] buildStatGraphics(HttpServletRequest pRequest, List auditsList, String serverName)
            throws IOException {
        // Initialisation
        GraphMaker timeMaker = null;
        List durationList = new ArrayList(0);
        List fsSizeList = new ArrayList(0);
        GraphMaker sizeMaker = null;
        // ajoute les valeurs dj rcupres aux maps
        for (int i = 0; i < auditsList.size(); i++) {
            AuditForm form = (AuditForm) auditsList.get(i);
            if (serverName.equals(form.getServerName())) {
                String auditDate = SqualeWebActionUtils.getFormattedDate(pRequest.getLocale(), form.getDate(),
                        "date.format.simple.short");
                durationList.add(new Object[] { auditDate, form.getDuration(), form.getApplicationName() });
                fsSizeList.add(new Object[] { auditDate, form.getMaxFileSystemSize(), form.getApplicationName() });
            }
        }
        // construit le maker et lui passe les valeurs afin qu'il construise
        // les diffrentes courbes si il y a des donnes
        if (durationList.size() > 0) {
            AuditTimeMaker statsTimeMaker = new AuditTimeMaker(pRequest);
            statsTimeMaker.setValues(durationList);
            AuditsSizeMaker statsSizeMaker = new AuditsSizeMaker(pRequest);
            statsSizeMaker.addCurve(fsSizeList);
            JFreeChart timeChart = statsTimeMaker.getChart();
            JFreeChart sizeChart = statsSizeMaker.getChart();
            ChartRenderingInfo infoStats = new ChartRenderingInfo(new StandardEntityCollection());
            // Initialisation des graphs
            String fileNameTime = ServletUtilities.saveChartAsPNG(timeChart, statsTimeMaker.getDefaultWidth(),
                    statsTimeMaker.getDefaultHeight(), infoStats, pRequest.getSession());
            timeMaker = new GraphMaker(pRequest, fileNameTime, infoStats);
            infoStats = new ChartRenderingInfo(new StandardEntityCollection());
            String fileNameSize = ServletUtilities.saveChartAsPNG(sizeChart, statsSizeMaker.getDefaultWidth(),
                    statsSizeMaker.getDefaultHeight(), infoStats, pRequest.getSession());
            sizeMaker = new GraphMaker(pRequest, fileNameSize, infoStats);
        }
        return new GraphMaker[] { timeMaker, sizeMaker };
    }

    /**
     * Factorisation de code Permet de rcuprer une liste d'audits en fonction du type d'audits et du status de
     * l'audit, en rcuprant galement l'application associ.
     * 
     * @param pAuditType le type de l'audit
     * @param pAuditStatus le status de l'audit
     * @throws JrafEnterpriseException en cas d'chec
     * @throws WTransformerException en cas d'chec de la transformation des DTO en form correspondants
     * @return la liste des auditsForm
     */
    private AuditListForm initAuditsList(String pAuditType, Integer pAuditStatus)
            throws JrafEnterpriseException, WTransformerException {
        IApplicationComponent ac = AccessDelegateHelper.getInstance("Component");
        Object[] paramIn = new Object[] { pAuditType, pAuditStatus };
        Collection audits = (Collection) ac.execute("getAudits", paramIn);
        AuditListForm ListForm = (AuditListForm) WTransformerFactory.objToForm(AuditListTransformer.class, audits);
        // Rcupre les diffrents auditsForm de la liste, rcupre l'application associe
        // et l'affecte au form
        for (int i = 0; i < ListForm.getAudits().size(); i++) {
            AuditForm auditForm = (AuditForm) ListForm.getAudits().get(i);
            ComponentDTO appliDTO = new ComponentDTO();
            appliDTO.setID(new Long(auditForm.getApplicationId()).longValue());
            appliDTO = (ComponentDTO) ac.execute("get", new Object[] { appliDTO });
            auditForm.setApplicationName(appliDTO.getName());
        }
        return ListForm;
    }

    /**
     * Permet de changer la date d'un audit de suivi.
     * 
     * @param pMapping le mapping.
     * @param pForm le formulaire  lire.
     * @param pRequest la requte HTTP.
     * @param pResponse la rponse de la servlet.
     * @return l'action  raliser.
     */
    public ActionForward changeDate(ActionMapping pMapping, ActionForm pForm, HttpServletRequest pRequest,
            HttpServletResponse pResponse) {
        ActionMessages messages = new ActionMessages();
        ActionErrors errors = new ActionErrors();
        ActionForward forward = pMapping.findForward("display");
        try {
            // On rcupre les audits modifis
            AuditListForm form = (AuditListForm) pForm;
            ArrayList changedAudits = new ArrayList();
            // On parcours tous les audits pour ne mettre  jour que ceux qui
            // ont t modifis
            for (int i = 0; i < form.getNotAttemptedAudits().size(); i++) {
                AuditForm auditForm = (AuditForm) form.getNotAttemptedAudits().get(i);
                if (auditForm.isEdited()) {
                    // On transforme en dto
                    // On l'ajoute  la liste des audits  mettre  jour
                    changedAudits
                            .add(WTransformerFactory.formToObj(AuditTransformer.class, (WActionForm) auditForm)[0]);
                    // Les champs d'dition sont mis  false
                    auditForm.setChanged(false);
                    auditForm.setEdited(false);
                }
            }
            // Le nombre d'audits  modifier
            Integer nbChanged = new Integer(changedAudits.size());
            if (nbChanged.intValue() > 0) {
                IApplicationComponent ac = AccessDelegateHelper.getInstance("Component");
                // On update les audits
                Object[] paramIn = new Object[] { changedAudits };
                nbChanged = (Integer) ac.execute("updateAuditsDateOrStatus", paramIn);
            }
            // On affiche le nombre d'audits modifis
            ActionMessage msg = new ActionMessage("message.nbChangedAudits", nbChanged);
            messages.add("informations", msg);
            saveMessages(pRequest, messages);
        } catch (Exception e) {
            // Exception
            handleException(e, errors, pRequest);
            // Enregistrement du message
            saveErrors(pRequest, errors);
        }
        return forward;
    }

}