/**
* 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.component;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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.squale.jraf.helper.AccessDelegateHelper;
import org.squale.jraf.spi.accessdelegate.IApplicationComponent;
import org.squale.squalecommon.datatransfertobject.component.ApplicationConfDTO;
import org.squale.squalecommon.datatransfertobject.component.UserDTO;
import org.squale.squalecommon.util.SqualeCommonConstants;
import org.squale.squalecommon.util.SqualeCommonUtils;
import org.squale.squalecommon.util.mail.MailerHelper;
import org.squale.squaleweb.applicationlayer.action.ActionUtils;
import org.squale.squaleweb.applicationlayer.action.accessRights.DefaultAction;
import org.squale.squaleweb.applicationlayer.formbean.LogonBean;
import org.squale.squaleweb.applicationlayer.formbean.creation.CreateApplicationForm;
import org.squale.squaleweb.applicationlayer.formbean.config.ServeurListForm;
import org.squale.squaleweb.resources.WebMessages;
import org.squale.squaleweb.transformer.ApplicationConfTransformer;
import org.squale.squaleweb.transformer.ServeurListTransformer;
import org.squale.welcom.struts.transformer.WTransformerFactory;
import org.squale.welcom.struts.util.WConstants;
import java.util.Collection;
/**
* @version 1.0
* @author
*/
public class CreateApplicationAction
extends DefaultAction
{
/**
* @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 create( ActionMapping pMapping, ActionForm pForm, HttpServletRequest pRequest,
HttpServletResponse pResponse )
{
ActionMessages errors = new ActionMessages();
ActionForward forward = null;
try
{
// On r�cup�re le formulaire de cr�ation de l'application
CreateApplicationForm form = (CreateApplicationForm) pForm;
// On v�rifie que le nom de l'application est valide
if ( null != form.getApplicationName() && form.getApplicationName().trim().length() > 0 )
{
ApplicationConfDTO application = new ApplicationConfDTO();
// On change le nom de l'utilisateur
application.setLastUser( ( (LogonBean) pRequest.getSession().getAttribute( WConstants.USER_KEY ) ).getMatricule() );
application.setLastUpdate( Calendar.getInstance().getTime() );
application.setName( form.getApplicationName() );
// L'utilisateur peut ne pas exister dans la base, on le cr�e donc si besoin
// Recup�ration du user pour sa creation eventuelle dans la base
UserDTO user = getUserAsDTO( pRequest );
IApplicationComponent acLogin = AccessDelegateHelper.getInstance( "Login" );
Object[] paramInLogin = { user, Boolean.valueOf( isUserAdmin( pRequest ) ) };
user = (UserDTO) acLogin.execute( "verifyUser", paramInLogin );
IApplicationComponent ac = AccessDelegateHelper.getInstance( "ApplicationAdmin" );
Object[] paramIn = { application, user };
// Cr�ation de l'application
application = ( (ApplicationConfDTO) ac.execute( "createApplication", paramIn ) );
if ( null == application )
{
ActionMessage error = new ActionMessage( "application_creation.name_already_exists" );
errors.add( ActionMessages.GLOBAL_MESSAGE, error );
forward = pMapping.findForward( "failure" );
saveMessages( pRequest, errors );
}
else
{
// met l'id de l'application nouvellement cr�e en requete
// car on en a besoin pour les actions suivantes
pRequest.setAttribute( "applicationId", "" + application.getId() );
// On met � jour le form
Object[] paramIn2 = { application };
CreateApplicationForm form2 =
(CreateApplicationForm) WTransformerFactory.objToForm( ApplicationConfTransformer.class,
paramIn2 );
// On ne met � jour que l'id, les droits et le serveur sinon les valeurs par d�faut
// attribu�es sur la form sont �cras�es avec les valeurs par d�faut de java
form.setApplicationId( form2.getApplicationId() );
form.setRights( form2.getRights() );
form.setServeurForm( form2.getServeurForm() );
// Mise � jour de la form dans la session
pRequest.getSession().setAttribute( "createApplicationForm", form );
// On recharge les profils de l'utilisateur
ActionUtils.refreshUser( pRequest );
// chargement de la liste des serveurs
IApplicationComponent acServeur = AccessDelegateHelper.getInstance( "Serveur" );
Collection lListeServeurDTO = (Collection) acServeur.execute( "listeServeurs" );
ServeurListForm lListeServeurForm = new ServeurListForm();
WTransformerFactory.objToForm( ServeurListTransformer.class, lListeServeurForm, lListeServeurDTO );
pRequest.setAttribute( "listeServeur", lListeServeurForm );
// initialisation en session du prochain audit de suivi programm�
pRequest.getSession().setAttribute( "auditForm2", null );
// Redirection vers la page de configuration
forward = pMapping.findForward( "config_application" );
// Envoi d'un mail aux administrateurs pour leur signaler qu'une application
// suppl�mentaire a �t� cr��e et doit donc etre valid�e
String sender = WebMessages.getString( getLocale( pRequest ), "mail.sender.squale" );
String header = WebMessages.getString( getLocale( pRequest ), "mail.headerForAdmin" );
String object = sender + WebMessages.getString( pRequest, "mail.appli.to_valid.object" );
SimpleDateFormat formator = new SimpleDateFormat( "yyyy-MM-dd" );
String today = formator.format( Calendar.getInstance().getTime() );
Object[] params = { application.getName(), today, user.getMatricule() };
String content =
header
+ MessageFormat.format( WebMessages.getString( pRequest, "mail.appli.to_valid.content" ),
params );
SqualeCommonUtils.notifyByEmail( MailerHelper.getMailerProvider(),
SqualeCommonConstants.ONLY_ADMINS, null, object, content, false );
}
}
else
{
ActionMessage error = new ActionMessage( "error.invalid_name" );
errors.add( ActionMessages.GLOBAL_MESSAGE, error );
forward = pMapping.findForward( "failure" );
saveMessages( pRequest, errors );
}
}
catch ( Exception e )
{
// Traitement factoris� des exceptions et transfert vers la page d'erreur
handleException( e, errors, pRequest );
saveMessages( pRequest, errors );
forward = pMapping.findForward( "total_failure" );
}
// On est pass� par un menu donc on r�initialise le traceur
resetTracker( pRequest );
return ( forward );
}
}