/**
* 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/>.
*/
/*
* Cr�� le 12 d�c. 05
*
* Pour changer le mod�le de ce fichier g�n�r�, allez � :
* Fen�tre>Pr�f�rences>Java>G�n�ration de code>Code et commentaires
*/
package org.squale.welcom.struts.action;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Locale;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspException;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.validator.GenericValidator;
import org.apache.struts.Globals;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.RequestProcessor;
import org.squale.welcom.outils.Util;
import org.squale.welcom.outils.WelcomConfigurator;
import org.squale.welcom.struts.plugin.WelcomContext;
import org.squale.welcom.taglib.field.util.LayoutUtils;
import org.squale.welcom.taglib.field.util.TagUtils;
import org.squale.welcom.taglib.onglet.JSOnglet;
import org.squale.welcom.taglib.table.InternalTableUtil;
/**
* @author M325379 Pour changer le mod�le de ce commentaire de type g�n�r�, allez � :
* Fen�tre>Pr�f�rences>Java>G�n�ration de code>Code et commentaires
*/
public class WRequestProcessor
extends RequestProcessor
{
/** Date key */
public static final String DATE_FORMAT_KEY = "dateformats";
/**
* Ajoute le mise en place du WelcomContext
*
* @see org.apache.struts.action.RequestProcessor#process(javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse)
*/
public void process( final HttpServletRequest arg0, final HttpServletResponse arg1 )
throws IOException, ServletException
{
// Reinitialise le WelcomContext;
WelcomContext.resetWelcomContextName();
super.process( arg0, arg1 );
}
/**
* effectue un populate welcom
*
* @throws ServletException : Exception
* @param form : fomulaire
* @param request : request
* @param response : response
* @param mapping : mapping
*/
protected void processPopulate( final HttpServletRequest request, final HttpServletResponse response,
final ActionForm form, final ActionMapping mapping )
throws ServletException
{
try
{
super.processPopulate( request, response, form, mapping );
// Recupere tous les parameters
Hashtable onglets = (Hashtable) request.getSession().getAttribute( JSOnglet.SELECTED_TABS );
if ( onglets == null )
{
onglets = new Hashtable();
}
final Enumeration enumeration = request.getParameterNames();
while ( enumeration.hasMoreElements() )
{
final String element = (String) enumeration.nextElement();
if ( form != null )
{
processPopulateDate( request, form, element );
}
processPopulateSelectedTabs( request, element, onglets );
}
// Stocke les onglets
request.getSession().setAttribute( JSOnglet.SELECTED_TABS, onglets );
processPopulateRazCheckBox( request, form );
}
catch ( final Exception ex )
{
try
{
try
{
WActionUtil.checkSessionTimeout( request );
}
catch ( final TimeOutException e )
{
log.error( "Timeout : ", e );
processException( request, response, e, form, mapping );
}
processException( request, response, ex, form, mapping );
}
catch ( final IOException ioe )
{
throw new ServletException( ioe );
}
}
}
/**
* effectue un populate sur le RZA des check box quand l'autoRaz des checkbox est a false pour les tables
*
* @param form : fomulaire
* @param request : request
* @parem element : Nom du champs
*/
private void processPopulateRazCheckBox( final HttpServletRequest request, final ActionForm form )
{
// Persistance des cases a coch�s
if ( Util.isFalse( WelcomConfigurator.getMessage( WelcomConfigurator.OPTIFLUX_AUTORESET_CHECKBOX ) ) )
{
InternalTableUtil.razCheckBoxListe( request, form );
}
}
/**
* effectue un populate en conction des dates
*
* @param request : request
* @parem element : Nom du champs
*/
private void processPopulateSelectedTabs( final HttpServletRequest request, final String element,
final Hashtable onglets )
{
if ( element.indexOf( "selectedtab" ) > 0 )
{
final String onglet = request.getParameter( element );
if ( !GenericValidator.isBlankOrNull( onglet ) )
{
onglets.put( element, onglet );
}
}
}
/**
* effectue un populate en conction des dates
*
* @param form : fomulaire
* @param request : request
* @parem element : Nom du champs
*/
private void processPopulateDate( final HttpServletRequest request, final ActionForm form, final String element )
{
if ( element.endsWith( "WDate" ) && !element.equals( "WDate" ) )
{
final String field = element.substring( 0, element.lastIndexOf( "WDate" ) );
String formattedDate = TagUtils.getDateHeureFromDateTag( request, field );
final HashMap formatMaps = (HashMap) request.getSession().getAttribute( DATE_FORMAT_KEY );
try
{
final Class propertyType = PropertyUtils.getPropertyType( form, field );
if ( propertyType != null )
{
boolean isTypeDate = propertyType.equals( Date.class );
Object emptyValue = null;
if ( !isTypeDate )
{
emptyValue = "";
}
if ( ( formatMaps != null ) && ( formatMaps.get( field + "WDate" ) != null ) )
{
String pattern = (String) formatMaps.get( field + "WDate" );
if ( formatMaps.get( field + "WHour" ) != null )
{
pattern = pattern + " " + formatMaps.get( field + "WHour" );
}
if ( GenericValidator.isBlankOrNull( formattedDate ) )
{
BeanUtils.setProperty( form, field, emptyValue );
}
else
{
Locale locale = (Locale) request.getSession().getAttribute( Globals.LOCALE_KEY );
SimpleDateFormat dateFormat = new SimpleDateFormat( pattern, locale );
dateFormat.setLenient( false );
try
{
Date newDate = dateFormat.parse( formattedDate );
if ( dateFormat.format( newDate ).equals( formattedDate ) )
{
try
{
if ( isTypeDate )
{
LayoutUtils.setProperty( form, field, newDate );
}
else
{
LayoutUtils.setProperty( form, field, String.valueOf( newDate.getTime() ) );
}
}
catch ( SecurityException e1 )
{
e1.printStackTrace();
}
}
else
{
BeanUtils.setProperty( form, field, emptyValue );
}
}
catch ( ParseException e )
{
e.printStackTrace();
LayoutUtils.setProperty( form, field, emptyValue );
}
}
}
else
{
if ( formattedDate == null )
{
formattedDate = "";
}
BeanUtils.setProperty( form, field, formattedDate );
}
}
}
catch ( final JspException e1 )
{
e1.printStackTrace();
}
catch ( final IllegalAccessException e3 )
{
e3.printStackTrace();
}
catch ( final InvocationTargetException e3 )
{
e3.printStackTrace();
}
catch ( final NoSuchMethodException e3 )
{
e3.printStackTrace();
}
}
}
}