/**
* 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.welcom.struts.action;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspException;
import org.apache.commons.validator.GenericValidator;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.config.ModuleConfig;
import org.squale.welcom.outils.Util;
import org.squale.welcom.outils.WelcomConfigurator;
import org.squale.welcom.struts.bean.WIChanged;
import org.squale.welcom.struts.util.ServletUtils;
import org.squale.welcom.taglib.field.util.LayoutUtils;
import org.squale.welcom.taglib.table.InternalTableUtil;
/**
* WForwardAction
*/
public class WForwardAction
extends WAction
{
/**
* The request attribute under which the path information is stored for processing during a
* RequestDispatcher.include() call.
*/
public static final String INCLUDE_PATH_INFO = "javax.servlet.include.path_info";
/**
* The request attribute under which the servlet path information is stored for processing during a
* RequestDispatcher.include() call.
*/
public static final String INCLUDE_SERVLET_PATH = "javax.servlet.include.servlet_path";
/**
* @see org.squale.welcom.struts.action.WAction#wExecute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse)
*/
public ActionForward wExecute( final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response )
throws IOException, ServletException, JspException
{
final String oldAction = request.getParameter( "oldAction" );
// Permer de rester dansle contexte.
final String forward = request.getParameter( "wforward" );
if ( forward != null )
{
return mapping.findForward( forward );
}
if ( !GenericValidator.isBlankOrNull( oldAction ) )
{
// Effectue le populate
final ModuleConfig moduleConfig = mapping.getModuleConfig();
final String path = ServletUtils.processPath( servlet, request, response, oldAction, moduleConfig );
final ActionMapping mappingGenerique = ServletUtils.processMapping( request, response, moduleConfig, path );
if ( mappingGenerique != null )
{
// Process any ActionForm bean related to this request
final ActionForm formGenerique =
ServletUtils.processActionForm( request, response, moduleConfig, mappingGenerique, servlet );
// remis a zero
// D�active si optimization.checkbox.javascript a true
if ( Util.isFalse( WelcomConfigurator.getMessage( WelcomConfigurator.OPTIFLUX_AUTORESET_CHECKBOX ) ) )
{
InternalTableUtil.razCheckBoxListe( request, formGenerique );
}
// Appele le reset du formulaire
formGenerique.reset( mappingGenerique, request );
// Effectue la populate
ServletUtils.processPopulate( request, response, formGenerique, mappingGenerique, servlet );
// on gere le cas ColOrder :
final String action = request.getParameter( "action" );
if ( ( action != null ) && ( action.equals( "order" ) ) )
{
final String property = request.getParameter( "property" );
final String sens = request.getParameter( "sens" );
final List list =
(List) LayoutUtils.getProperty( formGenerique, request.getParameter( "collection" ) );
final int index1 = Integer.parseInt( request.getParameter( "position" ) );
int index2;
final Object obj1 = list.get( index1 );
Object obj2;
if ( sens.equals( "up" ) )
{
index2 = index1 - 1;
obj2 = list.get( index2 );
}
else
{
index2 = index1 + 1;
obj2 = list.get( index2 );
}
// on echange la property d'ordre
final Object oldProperty1 = LayoutUtils.getProperty( obj1, property );
final Object oldProperty2 = LayoutUtils.getProperty( obj2, property );
LayoutUtils.setProperty( obj1, property, oldProperty2 );
LayoutUtils.setProperty( obj2, property, oldProperty1 );
// on modifie l'ordre dans la liste
Collections.swap( list, index1, index2 );
// on position a true l'attribut changed :
( (WIChanged) obj1 ).setChanged( true );
( (WIChanged) obj2 ).setChanged( true );
}
}
}
final String referer = request.getParameter( "requestURI" );
if ( !GenericValidator.isBlankOrNull( referer ) && ( referer.length() > 1 ) && ( referer.charAt( 0 ) == '/' ) )
{
final String contextPath = request.getContextPath();
if ( referer.indexOf( contextPath, 0 ) > -1 )
{
return new ActionForward( referer.substring( contextPath.length(), referer.length() ) );
}
else
{
return new ActionForward( referer );
}
}
else
{
return new ActionForward( referer );
}
}
}