/**
* 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;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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.squale.jraf.commons.exception.JrafEnterpriseException;
import org.squale.jraf.helper.AccessDelegateHelper;
import org.squale.jraf.spi.accessdelegate.IApplicationComponent;
import org.squale.squalecommon.datatransfertobject.component.ComponentDTO;
import org.squale.squalecommon.datatransfertobject.result.SqualeReferenceDTO;
import org.squale.squaleweb.applicationlayer.action.accessRights.DefaultAction;
import org.squale.squaleweb.applicationlayer.formbean.LogonBean;
import org.squale.squaleweb.applicationlayer.formbean.reference.ReferenceForm;
import org.squale.squaleweb.applicationlayer.formbean.reference.ReferenceGridForm;
import org.squale.squaleweb.applicationlayer.formbean.reference.SetOfReferencesListForm;
import org.squale.squaleweb.resources.WebMessages;
import org.squale.squaleweb.transformer.ReferenceTransformer;
import org.squale.squaleweb.util.SqualeWebActionUtils;
import org.squale.welcom.struts.transformer.WTransformerException;
import org.squale.welcom.struts.transformer.WTransformerFactory;
import org.squale.welcom.struts.util.WConstants;
/**
*/
public class ReferenceListAction
extends DefaultAction
{
/**
* Affichage des applications du r�f�rentiel
*
* @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 )
{
// Initialisation
ActionForward forward; // return value
// ReferenceListForm renseign� ou non
SetOfReferencesListForm form = (SetOfReferencesListForm) pForm;
try
{
// Renseigne le form
populateForm( form, pRequest );
// met un nom de grille avec la date afin de distinguer les diff�rentes mises � jour
// setDisplayedGridName(pRequest, form);
// Provoquer le forward
forward = pMapping.findForward( "success" );
}
catch ( Exception e )
{
ActionErrors errors = new ActionErrors();
handleException( e, errors, pRequest );
saveMessages( pRequest, errors );
forward = pMapping.findForward( "failure" );
}
// Finish with
return forward;
}
/**
* Peuplement du form avec les liste des r�f�rences Le form pass� en param�tre est mis � jour pour contenir les
* objets � afficher dans la JSP Les applications de l'utilisateur sont affich�es si celui-ci n'est pas
* administrateur du portail
*
* @param pForm form
* @param pRequest requ�te
* @throws JrafEnterpriseException exception
* @throws WTransformerException exception
*/
public void populateForm( SetOfReferencesListForm pForm, HttpServletRequest pRequest )
throws WTransformerException, JrafEnterpriseException
{
List applicationsList = new ArrayList( 0 );
// R�cup�ration de la liste des applications
// Toutes si on est admin, les publiques et celles dont l'utilisateur est gestionnaire sinon
if ( isUserAdmin( pRequest ) )
{
applicationsList = getUserAdminApplicationListAsDTO( pRequest );
}
else
{
applicationsList = getUserApplicationListAsDTO( pRequest );
}
// On v�rifie que l'on r�cup�re que les applications qui sont effectivement stock�es en base et non pas que
// celles
// qui ont des r�sultats (cas pouvant arriver dans des conditions particuli�res)
IApplicationComponent ac = AccessDelegateHelper.getInstance( "Validation" );
Collection referencedApplis = (Collection) ac.execute( "listReferentiel" );
// les applications de l'utilisateur qui sont �galement r�f�renc�s
List commonApplis = new ArrayList( 0 );
for ( int i = 0; i < applicationsList.size(); i++ )
{
if ( referencedApplis.contains( ( (ComponentDTO) applicationsList.get( i ) ).getName() ) )
{
commonApplis.add( ( (ComponentDTO) applicationsList.get( i ) ).getName() );
}
}
// Comme le form est en session, on le remet � jour
SetOfReferencesListForm newForm = new SetOfReferencesListForm();
// R�cup�re les r�f�rences et les structures
getReferences( commonApplis, isUserAdmin( pRequest ), pRequest, newForm );
// Remet � jour le form en session
pRequest.getSession().removeAttribute( "setOfReferencesListForm" );
pRequest.getSession().setAttribute( "setOfReferencesListForm", newForm );
}
/**
* Permet de r�cup�rer tous les projets qui se trouvent dans le r�f�rentiel Les r�sultats renvoy�s sont rendus
* anonymes en fonction du privil�ge administrateur, des projets connus par l'utilisateur et du caract�re public du
* r�f�rentiel
*
* @param pApplicationsList liste des applications de l'utilisateur
* @param pAdmin indique un privil�ge administrateur
* @param pRequest la requete http
* @param pSetForm le form g�n�ral
* @throws JrafEnterpriseException exception
* @throws WTransformerException exception
*/
private void getReferences( List pApplicationsList, boolean pAdmin, HttpServletRequest pRequest,
SetOfReferencesListForm pSetForm )
throws JrafEnterpriseException, WTransformerException
{
// Obtention des r�sultats
IApplicationComponent ac = AccessDelegateHelper.getInstance( "Results" );
LogonBean sessionUser = (LogonBean) pRequest.getSession().getAttribute( WConstants.USER_KEY );
Object[] paramIn = { null, null, new Boolean( pAdmin ), new Long( sessionUser.getId() ) };
List references = ( (List) ac.execute( "getReference", paramIn ) );
SqualeReferenceDTO squaleReference = null;
ReferenceForm refForm = null;
Iterator referencesIterator = references.iterator();
while ( referencesIterator.hasNext() )
{
squaleReference = (SqualeReferenceDTO) referencesIterator.next();
// Conversion welcom
Object[] obj = { squaleReference };
refForm = (ReferenceForm) WTransformerFactory.objToForm( ReferenceTransformer.class, obj );
// On rend les projets anonymes si on n'est pas admin, qu'on a pas les droits de lecture
// et s'il ne sont pas publics
if ( !pAdmin && !refForm.isPublic() && !pApplicationsList.contains( refForm.getApplicationName() ) )
{
anonymize( refForm, pRequest );
}
// Met � jour le caract�re masqu� ou affich�
if ( refForm.isHidden() )
{
refForm.setState( WebMessages.getString( pRequest, ReferenceForm.HIDDEN ) );
}
else
{
refForm.setState( WebMessages.getString( pRequest, ReferenceForm.DISPLAYED ) );
}
// On convertit la grille qualit� associ�e
ReferenceGridForm gridForm = new ReferenceGridForm();
gridForm.setName( squaleReference.getGrid().getName() );
gridForm.setUpdateDate( squaleReference.getGrid().getUpdateDate() );
gridForm.setFormattedDate( SqualeWebActionUtils.getFormattedDate(
squaleReference.getGrid().getUpdateDate(),
pRequest.getLocale() ) );
pSetForm.add( gridForm, refForm );
}
}
/**
* Anonymisation du form de r�f�rence Les projets qui ne font pas partie des projets de l'utilisateur sont rendus
* anonymes en effa�ant le nom de l'application et du projet
*
* @param pReferenceForm form de la r�f�rence
* @param pRequest la requete http
*/
private void anonymize( ReferenceForm pReferenceForm, HttpServletRequest pRequest )
{
// Effacement des informations
String textAnonym = WebMessages.getString( pRequest, "reference.project.anonyme" );
pReferenceForm.setApplicationName( textAnonym );
String projectName = textAnonym;
pReferenceForm.setName( projectName );
}
}