/**
* 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 r�cup�rer le nom du serveur */
public static final String SERVER_NAME_KEY = "serverName";
/** Cl� pour r�cup�rer la liste des serveurs */
public static final String SERVER_LIST_KEY = "serverList";
/**
* Obtention de la m�thode componentAccess � utiliser Le nom de la m�thode � appeler d�pend du type d'audit
* visualis�
*
* @param pKind type d'audit
* @return m�thode � appeler
*/
private String getMethodForKind( String pKind )
{
String result = null;
// Pas d'utilisation de map car trop peu de donn�es
// La m�thode utilis�e d�pend du type d'audit
if ( pKind.equals( "terminated" ) )
{
result = "getTerminatedAudits"; // Tous les audits
}
else if ( pKind.equals( "periodic" ) )
{
result = "getLastPeriodicAudits"; // Audits p�riodiques
}
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 r�cup�ration de tous les audits de l'application
*
* @param pMapping le mapping.
* @param pForm le formulaire � lire.
* @param pRequest la requ�te HTTP.
* @param pResponse la r�ponse de la servlet.
* @return l'action � r�aliser.
*/
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 r�initialise 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 requ�te HTTP.
* @param pResponse la r�ponse de la servlet.
* @return l'action � r�aliser.
*/
public ActionForward purge( ActionMapping pMapping, ActionForm pForm, HttpServletRequest pRequest,
HttpServletResponse pResponse )
{
ActionForward forward = pMapping.findForward( "purge" );
return ( forward );
}
/**
* Permet la s�lection d'audits � afficher.
*
* @param pMapping le mapping.
* @param pForm le formulaire � lire.
* @param pRequest la requ�te HTTP.
* @param pResponse la r�ponse de la servlet.
* @return l'action � r�aliser.
*/
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 );
// V�rification de la s�lection
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 s�lectionn�, on choisit aussi le pr�c�dent 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 r�ussi � r�cup�rer l'audit pr�c�dent 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 d�finit l'audit en cours pour v�rification (audit le plus r�cent)
pRequest.setAttribute( "audit", auditsSelected.get( 0 ) );
// Forward diff�rent 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 requ�te pour pouvoir r�cup�rer l'action du bouton retour
pRequest.setAttribute( "oldAuditId", oldAuditId );
pRequest.setAttribute( "oldPreviousAuditId", oldPreviousAuditId );
}
else
{
// On met une valeur par d�faut
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 s�lectionn�s par l'utilisateur. La s�lection peut venir d'une liste de checkbox ou par
* un lien donnant l'id de l'audit
*
* @param pForm le formulaire
* @param pRequest la requ�te
* @return les audits s�lectionn�s
* @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'acc�der aux diff�rents 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 param�tre, on va le chercher directement en base
// Sinon on recherche les audits dans la liste en session car il s'agit d'une s�lection
// 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 associ�e
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 s�lectionn�s
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 pr�c�dent celui avec l'id param�tre dans la liste fournie. <br />
* La pr�c�dence est calcul�e � partir de la date.
*
* @param pAudit l'audit de r�f�rence
* @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 r�cup�ration des audits avec la m�thode de l'application component donn�e.
*
* @param pRequest la requete http.
* @param pMethod la methode � ex�cuter.
* @return une liste tri�e 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 m�thode a d�j� �t� d�finie
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 r�cup�rer les audits programm�s, ainsi que ceux interrompus/en cours
*
* @param pMapping le mapping.
* @param pForm le formulaire � lire.
* @param pRequest la requ�te HTTP.
* @param pResponse la r�ponse de la servlet.
* @return l'action � r�aliser.
*/
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 programm�s
AuditListForm notAttemptedListForm = initAuditsList( AuditBO.NORMAL, new Integer( AuditBO.NOT_ATTEMPTED ) );
// On veut tous les audits qui sont termin�s,
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 r�initialise le traceur
resetTracker( pRequest );
return forward;
}
/**
* Permet de r�cup�rer les audits partiels ou en �chec
*
* @param pMapping le mapping.
* @param pForm le formulaire � lire.
* @param pRequest la requ�te HTTP.
* @param pResponse la r�ponse de la servlet.
* @return l'action � r�aliser.
*/
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 r�initialise le traceur
resetTracker( pRequest );
return forward;
}
/**
* Permet de r�cup�rer les audits partiels ou en �chec
*
* @param pMapping le mapping.
* @param pForm le formulaire � lire.
* @param pRequest la requ�te HTTP.
* @param pResponse la r�ponse de la servlet.
* @return l'action � r�aliser.
*/
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 s�lectionn�, c'est qu'on veut passer son status de failed � partiel
// ou r�ciproquement
if ( auditForm.isSelected() )
{
if ( auditForm.getStatus() == AuditBO.PARTIAL )
{
auditForm.setStatus( AuditBO.FAILED );
}
else
{ // sinon c'est forc�ment dans l'autre sens
auditForm.setStatus( AuditBO.PARTIAL );
}
// on enl�ve la s�lection
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 modifi�s
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 r�initialise le traceur
resetTracker( pRequest );
return forward;
}
/**
* Permet de r�cup�rer les audits termin�s
*
* @param pMapping le mapping.
* @param pForm le formulaire � lire.
* @param pRequest la requ�te HTTP.
* @param pResponse la r�ponse de la servlet.
* @return l'action � r�aliser.
*/
public ActionForward displayTerminated( ActionMapping pMapping, ActionForm pForm, HttpServletRequest pRequest,
HttpServletResponse pResponse )
{
ActionErrors errors = new ActionErrors();
ActionForward forward = new ActionForward();
try
{
// R�cup�re le dernier audit r�ussi 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 r�cup�re le nom du serveur s�lectionn�
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 appra�tre 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 requ�te pour les tris welcom)
pRequest.getSession().setAttribute(
SERVER_LIST_KEY,
WTransformerFactory.objToForm( ServeurListTransformer.class, serversDTO ) );
// Ainsi que le nom s�lectionn�
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 r�initialise le traceur
resetTracker( pRequest );
return forward;
}
/**
* Consrtuit les grpahes repr�sentant les statistiques par serveur sur le temps et la taille des audits
*
* @param pRequest la requ�te
* @param auditsList la liste des audits
* @param serverName le nom du serveur
* @return un tableau de GraphMaker � deux �l�ment : [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 d�j� r�cup�r�es 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 diff�rentes courbes si il y a des donn�es
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 r�cup�rer une liste d'audits en fonction du type d'audits et du status de
* l'audit, en r�cup�rant �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 );
// R�cup�re les diff�rents auditsForm de la liste, r�cup�re l'application associ�e
// 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 requ�te HTTP.
* @param pResponse la r�ponse de la servlet.
* @return l'action � r�aliser.
*/
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 r�cup�re les audits modifi�s
AuditListForm form = (AuditListForm) pForm;
ArrayList changedAudits = new ArrayList();
// On parcours tous les audits pour ne mettre � jour que ceux qui
// ont �t� modifi�s
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 modifi�s
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;
}
}