/** * 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.squalix.tools.macker; import java.io.File; import java.io.IOException; import java.util.List; import java.util.Map; import org.squale.jraf.commons.exception.JrafDaoException; import org.squale.jraf.spi.persistence.ISession; import org.squale.squalecommon.enterpriselayer.businessobject.component.AbstractComponentBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.ClassBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.JspBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.ProjectBO; import org.squale.squalix.util.file.FileUtility; import org.squale.squalix.util.file.JspFileUtility; import org.squale.squalix.util.parser.J2EEParser; /** * */ public class J2eeStorageListener extends JavaStorageListener { /** La liste des chemins absolus vers les pages jsps */ private List mJspPaths; /** R�pertoire contenant les jsps compil�es */ private String mCompiledJsp; /** le lien entre le nom des fichiers .java g�n�r�s et le nom initial des jsps */ private Map mJspMapNames; /** * Constructeur par d�faut * * @param pSession la session * @param pProject le projet � auditer * @param pConfiguration la configuration Macker * @param jspNamesMap le lien entre le nom des fichiers .java g�n�r�s et le nom initial des jsps */ public J2eeStorageListener( ISession pSession, ProjectBO pProject, MackerConfiguration pConfiguration, Map jspNamesMap ) { super( pSession, pProject, pConfiguration ); this.mParser = new J2EEParser( pProject ); mJspPaths = pConfiguration.getJsps(); mCompiledJsp = pConfiguration.getJspRoot(); mJspMapNames = jspNamesMap; } /** * Cr�er et fait persister la page JSP dont le nom absolu est <code>pFullName</code> si celle-ci appartient au * projet � auditer et n'appartient pas � un des r�pertoires exclus. * * @param pFullName le nom absolu de la classe * @throws IOException si erreur de flux * @throws JrafDaoException si erreur de persistance * @return le composant persist� */ protected AbstractComponentBO getComponent( String pFullName ) throws IOException, JrafDaoException { AbstractComponentBO jspOrClassBO = null; String absoluteFileName = null; // On r�cup�re le nom absolu du fichier compil� associ� � la classe String classFileName = FileUtility.getClassFileName( mFilesToAnalyse, pFullName ); if ( null != classFileName ) { // On a trouv� le .class associ� File compiledJspDir = new File( mCompiledJsp ); if ( classFileName.startsWith( compiledJspDir.getCanonicalPath() ) ) { // Il s'agit d'une jsp compil�e // On r�cup�re le nom absolu du fichier parmis les jsps // si elle existe et peut �tre persist�e absoluteFileName = (String) mJspMapNames.get( pFullName ); if ( null != absoluteFileName && mIncludedFiles.contains( absoluteFileName ) ) { // Il faut cr�er une jsp // On r�cup�re la jsp String name = absoluteFileName.substring( absoluteFileName.lastIndexOf( "/" ) + 1, absoluteFileName.lastIndexOf( "." ) ); int id = JspFileUtility.getJspDirectoryId( mJspPaths, pFullName.substring( 0, pFullName.indexOf( "." ) ) ); File rootDir = new File( (String) mJspPaths.get( id ) ); String relativeRootDir = FileUtility.getRelativeFileName( rootDir.getAbsolutePath(), mViewPath ); String relativeFileName = FileUtility.getRelativeFileName( absoluteFileName, mViewPath ); jspOrClassBO = ( (J2EEParser) mParser ).getJsp( name, relativeFileName, relativeRootDir, id ); // On fait persister la jsp jspOrClassBO = (JspBO) mRepository.persisteComponent( jspOrClassBO ); } } else { // On v�rifie que le nom absolu du fichier .java correspondant // appartient � la liste des fichiers qui peuvent �tre analys�s String relativeFileName = isInclude( pFullName ); if ( null != relativeFileName ) { // Il faut cr�er une classe // On r�cup�re la classe jspOrClassBO = mParser.getClass( pFullName, relativeFileName ); // On fait persister la classe jspOrClassBO = (ClassBO) mRepository.persisteComponent( jspOrClassBO ); } } } return jspOrClassBO; } /** * True si le nom absolu du fichier jsp correspondant � la classe <code>pFullName</code> appartient � la liste des * fichiers qui peuvent �tre analys�s * * @param pFullName le nom absolu de la classe JSP * @return le nom absolu du fichier dans lequel la jsp est d�finie * @throws IOException si erreur de flux */ protected String getAbsoluteFileName( String pFullName ) throws IOException { String absoluteFileName = null; // On r�cup�re le nom absolu du fichier compil� associ� � la classe absoluteFileName = JspFileUtility.getAbsoluteJspFileName( mJspPaths, pFullName ); if ( null != absoluteFileName ) { // On v�rifie que la jsp peut �tre persist�e // On remplace le s�parateur par celui par d�faut absoluteFileName = absoluteFileName.replaceAll( "\\\\", "/" ); String parentName = absoluteFileName.substring( 0, absoluteFileName.lastIndexOf( "/" ) ); if ( !mIncludedFiles.contains( absoluteFileName ) ) { absoluteFileName = null; } } return absoluteFileName; } }