/** * 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 14 mai 04 * * 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.taglib.canvas; import java.io.File; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.validator.GenericValidator; import org.apache.struts.util.RequestUtils; import org.apache.struts.util.ResponseUtils; import org.squale.welcom.outils.Util; import org.squale.welcom.outils.WelcomConfigurator; import org.squale.welcom.struts.bean.WResultAction; import org.squale.welcom.struts.util.WConstants; import org.squale.welcom.taglib.menu.JSMenuBase; import org.squale.welcom.taglib.renderer.RendererFactory; /** * CanvasTag */ public class CanvasTag extends CanvasBodyEventHandler { /** * */ private static final long serialVersionUID = -3017335470744229202L; /** logger */ private static Log log = LogFactory.getLog( CanvasTag.class ); /** parametre du tag */ private String navigationMenuKey = ""; /** parametre du tag */ private String navigationMenuName = JSMenuBase.DEFAULT_NAME; /** parametre du tag */ private String canvasHeaderPageInclude = WelcomConfigurator.getMessage( WelcomConfigurator.BODY_CANVAS_HEADER_PAGE_INCLUDE ); /** parametre du tag */ private String canvasLeftPageInclude = WelcomConfigurator.getMessage( WelcomConfigurator.BODY_CANVAS_LEFT_PAGE_INCLUDE ); /** clef du body */ public static final String CANVASTAG_KEY = "org.squale.welcom.tag.body"; /** bufferization du menu */ private String bufMenu = ""; /** render */ private ICanvasRenderer render = (ICanvasRenderer) RendererFactory.getRenderer( RendererFactory.CANVAS ); /** * @see javax.servlet.jsp.tagext.TagSupport#doStartTag() */ public int doStartTag() throws JspException { // Ajoute la fenetre d'erreur de popup onload = addMessagePopupOnOnLoad( pageContext, onload ); // Se memorise dans la page pageContext.getRequest().setAttribute( CANVASTAG_KEY, this ); addHeader(); final StringBuffer sb = new StringBuffer(); sb.append( render.drawStart( prepareEventHandlers() ) ); // Si la navigation n'est pas vide if ( !GenericValidator.isBlankOrNull( navigationMenuKey ) && WelcomConfigurator.getCharte().isV2() ) { sb.append( doTraceur() + "\n" ); } ResponseUtils.write( pageContext, sb.toString() ); doCanvasHeader(); doCanvasLeft(); return EVAL_PAGE; } /** * surcharge du on load * * @param pageContext contexte * @param oldOnLoad ancien onload su body * @return le onload formatte */ public static String addMessagePopupOnOnLoad( final PageContext pageContext, final String oldOnLoad ) { // on gere un 2eme stringbuffer au cas ou on aurait pas besoin de onload final StringBuffer sbOnload = new StringBuffer(); final Object logonBean = ( pageContext.getSession().getAttribute( WConstants.USER_KEY ) ); final String msg = WResultAction.readMessage( pageContext.getRequest() ); if ( !GenericValidator.isBlankOrNull( msg ) ) { sbOnload.append( "javascript:alert(\'" + Util.formatJavaScript( msg ) + "\');" ); // message afficher, suppression du message WResultAction.resetMessage( pageContext.getRequest() ); } if ( !GenericValidator.isBlankOrNull( oldOnLoad ) ) { sbOnload.append( ResponseUtils.filter( oldOnLoad ) + ";" ); } return sbOnload.toString(); } /** * Ajoute le header si non sp�cifie * * @throws JspException exception pouvant etre levee */ private void addHeader() throws JspException { if ( pageContext.getRequest().getAttribute( HeadTag.KEY_TAG ) == null ) { final HeadTag tag = new HeadTag(); tag.setPageContext( pageContext ); tag.setParent( this ); tag.doStartTag(); tag.doEndTag(); } } /** * appelle le canvasHeader * * @throws JspException exception pouvant etre levee */ private void doCanvasHeader() throws JspException { // Si un menuPageInclude est sp�cifie alors il le mets if ( !GenericValidator.isBlankOrNull( canvasHeaderPageInclude ) && !Util.isEqualsIgnoreCase( canvasHeaderPageInclude, "none" ) ) { final String path = pageContext.getServletContext().getRealPath( getAbsolutePathRelativeToContext( canvasHeaderPageInclude ) ); final File f = new File( path ); if ( f.exists() ) { try { pageContext.include( canvasHeaderPageInclude ); } catch ( final Exception e ) { log.error( e, e ); throw new JspException( e ); } } else { throw new JspException( "Impossible d'inclure le fichier : " + path ); } } } /** * Recupere le chemin complete en fonction de la servlet * * @param s : fichier a recherche * @return : chain complet .... */ private final String getAbsolutePathRelativeToContext( final String s ) { String s1 = s; if ( !s1.startsWith( "/" ) ) { String s2 = (String) pageContext.getRequest().getAttribute( "javax.servlet.include.servlet_path" ); if ( s2 == null ) { s2 = ( (HttpServletRequest) pageContext.getRequest() ).getServletPath(); } final String s3 = s2.substring( 0, s2.lastIndexOf( '/' ) ); s1 = s3 + '/' + s1; } return s1; } /** * appelle le canvasLeft * * @throws JspException exception pouvant etre levee */ private void doCanvasLeft() throws JspException { // Si un menuPageInclude est sp�cifie alors il le mets if ( !GenericValidator.isBlankOrNull( canvasLeftPageInclude ) && !Util.isEqualsIgnoreCase( canvasLeftPageInclude, "none" ) ) { try { pageContext.include( canvasLeftPageInclude ); } catch ( final Exception e ) { log.error( e, e ); throw new JspException( e.getMessage() ); } } } /** * gere le traceur * * @return le html genere * @throws JspException exception pouvant etre levee */ private String doTraceur() throws JspException { String navigationMenuLabel = RequestUtils.message( super.pageContext, "org.apache.struts.action.MESSAGE", "org.apache.struts.action.LOCALE", navigationMenuKey ); if ( GenericValidator.isBlankOrNull( navigationMenuLabel ) ) { navigationMenuLabel = navigationMenuKey; } return render.drawTraceur( navigationMenuName, navigationMenuLabel ); } /** * @see javax.servlet.jsp.tagext.TagSupport#doEndTag() */ public int doEndTag() throws JspException { ResponseUtils.write( pageContext, render.drawFooter( bufMenu ) ); // Si la navigation n'est pas vide if ( !GenericValidator.isBlankOrNull( navigationMenuKey ) && WelcomConfigurator.getCharte().isV3() ) { ResponseUtils.write( pageContext, doTraceur() + "\n" ); } ResponseUtils.write( pageContext, render.drawEnd() ); release(); return EVAL_PAGE; } /** * Accesseur * * @return navigationMenuKey */ public String getNavigationMenuKey() { return navigationMenuKey; } /** * Accesseur * * @param string le navigationMenuKey */ public void setNavigationMenuKey( final String string ) { navigationMenuKey = string; } /** * Accesseur * * @return navigationMenuName */ public String getNavigationMenuName() { return navigationMenuName; } /** * Accesseur * * @param string le navigationMenuName */ public void setNavigationMenuName( final String string ) { navigationMenuName = string; } /** * Accesseur * * @return le canvasHeaderPageInclude */ public String getCanvasHeaderPageInclude() { return canvasHeaderPageInclude; } /** * Accesseur * * @return le canvasLeftPageInclude */ public String getCanvasLeftPageInclude() { return canvasLeftPageInclude; } /** * Accesseur * * @param string le canvasHeaderPageInclude */ public void setCanvasHeaderPageInclude( final String string ) { canvasHeaderPageInclude = string; } /** * Accesseur * * @param string le canvasLeftPageInclude */ public void setCanvasLeftPageInclude( final String string ) { canvasLeftPageInclude = string; } /** * @see javax.servlet.jsp.tagext.TagSupport#release() */ public void release() { super.release(); navigationMenuKey = ""; navigationMenuName = JSMenuBase.DEFAULT_NAME; canvasHeaderPageInclude = WelcomConfigurator.getMessage( WelcomConfigurator.BODY_CANVAS_HEADER_PAGE_INCLUDE ); canvasLeftPageInclude = WelcomConfigurator.getMessage( WelcomConfigurator.BODY_CANVAS_LEFT_PAGE_INCLUDE ); onload = ""; onscroll = ""; onclick = ""; bufMenu = ""; } /** * @return accesseur */ public String getBufMenu() { return bufMenu; } /** * @param string accesseur */ public void setBufMenu( final String string ) { bufMenu = string; } /** * @param string ajoute le menu derriere */ public void pushBufMenu( final String string ) { if ( WelcomConfigurator.getCharte().isV2() ) { bufMenu = string + bufMenu; } else { bufMenu = bufMenu + string; } } }