PluginFile.java

/*
 * Copyright (c) 2002-2022, City of Paris
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  1. Redistributions of source code must retain the above copyright notice
 *     and the following disclaimer.
 *
 *  2. Redistributions in binary form must reproduce the above copyright notice
 *     and the following disclaimer in the documentation and/or other materials
 *     provided with the distribution.
 *
 *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
 *     contributors may be used to endorse or promote products derived from
 *     this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * License 1.0
 */
package fr.paris.lutece.portal.service.plugin;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.validation.constraints.NotNull;

import org.apache.commons.digester3.Digester;
import org.apache.commons.digester3.Substitutor;
import org.apache.commons.digester3.binder.DigesterLoader;
import org.apache.commons.digester3.substitution.MultiVariableExpander;
import org.apache.commons.digester3.substitution.VariableSubstitutor;
import org.apache.commons.digester3.xmlrules.FromXmlRulesModule;
import org.xml.sax.SAXException;

import fr.paris.lutece.portal.business.portlet.PortletType;
import fr.paris.lutece.portal.business.right.Right;
import fr.paris.lutece.portal.service.content.ContentServiceEntry;
import fr.paris.lutece.portal.service.daemon.DaemonEntry;
import fr.paris.lutece.portal.service.dashboard.DashboardComponentEntry;
import fr.paris.lutece.portal.service.filter.FilterEntry;
import fr.paris.lutece.portal.service.includes.PageIncludeEntry;
import fr.paris.lutece.portal.service.init.LuteceInitException;
import fr.paris.lutece.portal.service.insert.InsertService;
import fr.paris.lutece.portal.service.rbac.RBACResourceTypeEntry;
import fr.paris.lutece.portal.service.search.SearchIndexerEntry;
import fr.paris.lutece.portal.service.servlet.ServletEntry;
import fr.paris.lutece.portal.service.sessionlistener.HttpSessionListenerEntry;
import fr.paris.lutece.portal.service.util.AppPropertiesService;
import fr.paris.lutece.portal.web.xpages.XPageApplicationEntry;

/**
 * This class is the plugin file element
 */
public class PluginFile
{
    private static final String FILE_RULES = "/fr/paris/lutece/portal/service/plugin/plugin-digester-rules.xml";

    // Variables
    private String _strName;
    private String _strVersion;
    private String _strDescription;
    private String _strProvider;
    private String _strProviderUrl;
    private String _strCopyright;
    private String _strPluginClass;
    private String _strIconUrl;
    private String _strDocumentationUrl;
    private String _strMinCoreVersion;
    private String _strMaxCoreVersion;
    private boolean _bIsInstalled;
    private boolean _bDbPoolRequired;
    private Map<Integer, List<String>> _listCssStyleSheets = new HashMap<>( );
    private Map<Integer, List<String>> _listJavascriptFiles = new HashMap<>( );
    private List<String> _listAdminCssStyleSheets = new ArrayList<>( );
    private List<String> _listAdminJavascriptFiles = new ArrayList<>( );
    private List<String> _listFreemarkerMacrosFiles = new ArrayList<>( );
    private List<Right> _listRights = new ArrayList<>( );
    private List<PortletType> _listPortletTypes = new ArrayList<>( );
    private List<DaemonEntry> _listDaemons = new ArrayList<>( );
    private List<XPageApplicationEntry> _listApplications = new ArrayList<>( );
    private List<FilterEntry> _listFilters = new ArrayList<>( );
    private List<ServletEntry> _listServlets = new ArrayList<>( );
    private List<HttpSessionListenerEntry> _listListeners = new ArrayList<>( );
    private List<ContentServiceEntry> _listContentServices = new ArrayList<>( );
    private List<SearchIndexerEntry> _listSearchIndexers = new ArrayList<>( );
    private List<InsertService> _listInsertServices = new ArrayList<>( );
    private List<RBACResourceTypeEntry> _listRBACResourceTypes = new ArrayList<>( );
    private List<PageIncludeEntry> _listPageIncludes = new ArrayList<>( );
    private List<DashboardComponentEntry> _listDashboardComponents = new ArrayList<>( );
    private List<DashboardComponentEntry> _listAdminDashboardComponents = new ArrayList<>( );
    private Map<String, String> _mapParams = new HashMap<>( );
    private String _strSearchIndexerClass;
    private String _strCssStylesheetsScope;
    private String _strJavascriptFilesScope;

    /**
     * Load plugin data from the XML file using Jakarta Commons Digester
     * 
     * @param strFilename
     *            The XML plugin filename
     * @throws fr.paris.lutece.portal.service.init.LuteceInitException
     *             If a problem occured during the loading
     */
    public void load( String strFilename ) throws LuteceInitException
    {
        // Configure Digester from XML ruleset
        DigesterLoader digesterLoader = DigesterLoader.newLoader( new FromXmlRulesModule( )
        {
            @Override
            protected void loadRules( )
            {
                loadXMLRules( getClass( ).getResource( FILE_RULES ) );
            }
        } );

        Digester digester = digesterLoader.newDigester( );

        // Allow variables in plugin files
        MultiVariableExpander expander = new MultiVariableExpander( );
        expander.addSource( "$", ( (Map) AppPropertiesService.getPropertiesAsMap( ) ) );

        Substitutor substitutor = new VariableSubstitutor( expander );
        digester.setSubstitutor( substitutor );

        // Push empty List onto Digester's Stack
        digester.push( this );
        digester.setValidating( false );

        try
        {
            InputStream input = new FileInputStream( strFilename );
            digester.parse( input );
        }
        catch( IOException | IllegalArgumentException | SAXException e )
        {
            throw new LuteceInitException( "Error loading plugin file : " + strFilename, e );
        }
    }

    /**
     * Returns the name of the plugin
     *
     * @return the plugin name as a String
     */
    public String getName( )
    {
        return _strName;
    }

    /**
     * Sets the name of the plugin to the specified string.
     *
     * @param strName
     *            The name of the plugin
     */
    public void setName( String strName )
    {
        _strName = strName;
    }

    /**
     * Returns the version of the plugin
     *
     * @return the plugin version as a String
     */
    public String getVersion( )
    {
        return _strVersion;
    }

    /**
     * Sets the version of the plugin to the specified string.
     *
     * @param strVersion
     *            The version of the plugin
     */
    public void setVersion( String strVersion )
    {
        _strVersion = strVersion;
    }

    /**
     * Returns the description of the plugin
     *
     * @return the plugin description as a String
     */
    public String getDescription( )
    {
        return _strDescription;
    }

    /**
     * Sets the description of the plugin to the specified string.
     *
     * @param strDescription
     *            The description
     */
    public void setDescription( String strDescription )
    {
        _strDescription = strDescription;
    }

    /**
     * Returns the Provider of the plugin
     *
     * @return the plugin Provider as a String
     */
    public String getProvider( )
    {
        return _strProvider;
    }

    /**
     * Sets the provider of the plugin to the specified string.
     *
     * @param strProvider
     *            The provider
     */
    public void setProvider( String strProvider )
    {
        _strProvider = strProvider;
    }

    /**
     * Returns the Provider's URL of the plugin
     *
     * @return the plugin Provider's URL as a String
     */
    public String getProviderUrl( )
    {
        return _strProviderUrl;
    }

    /**
     * Sets the provider url to the specified string.
     *
     * @param strProviderUrl
     *            The url of the provider
     */
    public void setProviderUrl( String strProviderUrl )
    {
        _strProviderUrl = strProviderUrl;
    }

    /**
     * Returns the Icon's URL of the plugin
     *
     * @return the plugin Icon's URL as a String
     */
    public String getIconUrl( )
    {
        return _strIconUrl;
    }

    /**
     * Sets the url of the icon of the plugin to the specified string.
     *
     * @param strIconUrl
     *            The url of the icon
     */
    public void setIconUrl( String strIconUrl )
    {
        _strIconUrl = strIconUrl;
    }

    /**
     * Returns the Documentation's URL of the plugin
     *
     * @return the plugin Documentation's URL as a String
     */
    public String getDocumentationUrl( )
    {
        return _strDocumentationUrl;
    }

    /**
     * Sets the url of the Documentation of the plugin to the specified string.
     *
     * @param strDocumentationUrl
     *            the url of the documentation
     */
    public void setDocumentationUrl( String strDocumentationUrl )
    {
        _strDocumentationUrl = strDocumentationUrl;
    }

    /**
     * Returns the Copyright of the plugin
     *
     * @return the plugin Copyright as a String
     */
    public String getCopyright( )
    {
        return _strCopyright;
    }

    /**
     * Sets the copyright of the plugin to the specified string.
     *
     * @param strCopyright
     *            The copyright
     */
    public void setCopyright( String strCopyright )
    {
        _strCopyright = strCopyright;
    }

    /**
     * Returns the main Class of the plugin
     *
     * @return the Class as a String
     */
    public String getPluginClass( )
    {
        return _strPluginClass;
    }

    /**
     * Sets the class name of the plugin to the specified string.
     *
     * @param strPluginClass
     *            The name of the class
     */
    public void setPluginClass( String strPluginClass )
    {
        _strPluginClass = strPluginClass;
    }

    /**
     * Returns the installation status of the plugin
     *
     * @return the installation status as an int
     */
    public boolean isInstalled( )
    {
        return _bIsInstalled;
    }

    /**
     * Sets the boolean wich shows if the plugin is installed
     *
     * @param bIsInstalled
     *            The installed boolean
     */
    public void setIsInstalled( boolean bIsInstalled )
    {
        _bIsInstalled = bIsInstalled;
    }

    /**
     * Returns the min core version compatibility for the plugin
     *
     * @return the min core version as a String
     */
    public String getMinCoreVersion( )
    {
        return _strMinCoreVersion;
    }

    /**
     * Sets the the min core version compatibility for the plugin
     *
     * @param strMinCoreVersion
     *            The min core version
     */
    public void setMinCoreVersion( String strMinCoreVersion )
    {
        _strMinCoreVersion = strMinCoreVersion;
    }

    /**
     * Returns the max core version compatibility for the plugin
     *
     * @return the max core version as a String
     */
    public String getMaxCoreVersion( )
    {
        return _strMaxCoreVersion;
    }

    /**
     * Sets the the max core version compatibility for the plugin
     *
     * @param strMaxCoreVersion
     *            The max core version
     */
    public void setMaxCoreVersion( String strMaxCoreVersion )
    {
        _strMaxCoreVersion = strMaxCoreVersion;
    }

    /**
     * convert a mode as a string into an integer
     * 
     * @param mode
     *            the mode to convert
     * @return the mode as an {@link java.lang.Integer} or <code>null</code> if mode is <code>null</code>
     */
    private Integer getMode( String mode )
    {
        Integer nMode = null;

        if ( mode != null )
        {
            nMode = Integer.valueOf( mode );
        }

        return nMode;
    }

    /**
     * Add an CSS stylesheet to the plugin definition with no mode associated
     * 
     * @param strStyleSheet
     *            The StyleSheet path
     */
    public void addCssStyleSheet( String strStyleSheet )
    {
        addCssStyleSheet( strStyleSheet, null );
    }

    /**
     * Add an CSS stylesheet to the plugin definition
     * 
     * @param strStyleSheet
     *            The StyleSheet path
     * @param mode
     *            mode associated with the stylesheet. Can be <code>null</code>, must be an integer
     */
    public void addCssStyleSheet( String strStyleSheet, String mode )
    {
        Integer nMode = getMode( mode );
        List<String> cssStyleSheets = _listCssStyleSheets.computeIfAbsent( nMode, s -> new ArrayList<>( ) );
        cssStyleSheets.add( strStyleSheet );
    }

    /**
     * Add an CSS stylesheet to the plugin
     * 
     * @param strStyleSheet
     *            The StyleSheet path
     * @since 5.1
     */
    public void addAdminCssStyleSheet( String strStyleSheet )
    {
        _listAdminCssStyleSheets.add( strStyleSheet );
    }

    /**
     * Add an Javascript File to the plugin
     * 
     * @param strJavascriptFile
     *            The Javascript File path
     * @since 5.1
     */
    public void addAdminJavascriptFile( String strJavascriptFile )
    {
        _listAdminJavascriptFiles.add( strJavascriptFile );
    }

    /**
     * Returns all CSS Style Sheets of the plugin not associated with a mode
     * 
     * @return The list of CSS Style Sheets not associated with a mode
     */
    @NotNull
    public List<String> getCssStyleSheets( )
    {
        List<String> res = _listCssStyleSheets.get( null );

        if ( res == null )
        {
            return Collections.emptyList( );
        }

        return res;
    }

    /**
     * Return all CSS Style Sheets of the plugin for all modes
     * 
     * @return the list of CSS style Sheets for all modes
     * @since 5.1.0
     */
    @NotNull
    public Map<Integer, List<String>> getCssStyleSheetsForAllModes( )
    {
        return _listCssStyleSheets;
    }

    /**
     * Add an Javascript File to the plugin definition with no mode associated
     * 
     * @param strJavascriptFile
     *            The Javascript File path
     */
    public void addJavascriptFile( String strJavascriptFile )
    {
        addJavascriptFile( strJavascriptFile, null );
    }

    /**
     * Add an Javascript File to the plugin definition
     * 
     * @param strJavascriptFile
     *            The Javascript File path
     * @param mode
     *            mode associated with the Javascript file. Can be <code>null</code>, must be an integer
     */
    public void addJavascriptFile( String strJavascriptFile, String mode )
    {
        Integer nMode = getMode( mode );
        List<String> javascriptFiles = _listJavascriptFiles.computeIfAbsent( nMode, s -> new ArrayList<>( ) );
        javascriptFiles.add( strJavascriptFile );
    }

    /**
     * Returns all Javascript File of the plugin not associated with a mode
     * 
     * @return The list of Javascript File not associated with a mode
     */
    @NotNull
    public List<String> getJavascriptFiles( )
    {
        List<String> res = _listJavascriptFiles.get( null );

        if ( res == null )
        {
            return Collections.emptyList( );
        }

        return res;
    }

    /**
     * Return all CSS Style Sheets of the plugin for all modes
     * 
     * @return the list of CSS style Sheets for all modes
     * @since 5.1.0
     */
    @NotNull
    public Map<Integer, List<String>> getJavascriptFilesForAllModes( )
    {
        return _listJavascriptFiles;
    }

    /**
     * Adds the file to freemarker autoinclude configuration
     * 
     * @param strFileName
     *            the file
     */
    public void addFreemarkerMacrosFile( String strFileName )
    {
        _listFreemarkerMacrosFiles.add( strFileName );
    }

    /**
     * Gets the freemarker macros files.
     *
     * @return the freemarker macros files
     */
    public List<String> getFreemarkerMacrosFiles( )
    {
        return _listFreemarkerMacrosFiles;
    }

    /**
     * Add an AdminFeature Right to the plugin definition
     * 
     * @param right
     *            The Right to Add
     */
    public void addRight( Right right )
    {
        _listRights.add( right );
    }

    /**
     * Returns right list of the plugin
     *
     * @return the list of rights
     */
    public List<Right> getRights( )
    {
        // Initialize plugin name attribute of all rights (not made by digester)
        for ( Right right : _listRights )
        {
            right.setPluginName( _strName );
        }

        return _listRights;
    }

    /**
     * Add an Application to the plugin definition
     * 
     * @param application
     *            The application to Add
     */
    public void addXPageApplication( XPageApplicationEntry application )
    {
        _listApplications.add( application );
    }

    /**
     * Returns application list of the plugin
     *
     * @return the list of applications
     */
    public List<XPageApplicationEntry> getXPageApplications( )
    {
        return _listApplications;
    }

    /**
     * Add a filter to the plugin definition
     * 
     * @param entry
     *            The filter entry
     */
    public void addFilter( FilterEntry entry )
    {
        _listFilters.add( entry );
    }

    /**
     * Returns filter list of the plugin
     *
     * @return the list of filters
     */
    public List<FilterEntry> getFilters( )
    {
        return _listFilters;
    }

    /**
     * Add a servlet to the plugin definition
     * 
     * @param entry
     *            The servlet entry
     */
    public void addServlet( ServletEntry entry )
    {
        _listServlets.add( entry );
    }

    /**
     * Returns servlet list of the plugin
     *
     * @return the list of servlets
     */
    public List<ServletEntry> getServlets( )
    {
        return _listServlets;
    }

    /**
     * Add a listener to the plugin definition
     * 
     * @param entry
     *            The listener entry
     */
    public void addListener( HttpSessionListenerEntry entry )
    {
        _listListeners.add( entry );
    }

    /**
     * Returns listener list of the plugin
     * 
     * @return the list of listeners
     */
    public List<HttpSessionListenerEntry> getListeners( )
    {
        return _listListeners;
    }

    /**
     * Add a portlet type to the plugin definition
     * 
     * @param portletType
     *            a portlet type to the plugin definition
     */
    public void addPortletType( PortletType portletType )
    {
        _listPortletTypes.add( portletType );
    }

    /**
     * Returns the portlet types list of the plugin
     * 
     * @return the portlet types list
     */
    public List<PortletType> getPortletTypes( )
    {
        // Initialize plugin name attribute of all rights (not made by digester)
        for ( PortletType portletType : _listPortletTypes )
        {
            portletType.setPluginName( _strName );
        }

        return _listPortletTypes;
    }

    /**
     * Add an Content Service to the plugin definition
     * 
     * @param entry
     *            The entry
     */
    public void addContentService( ContentServiceEntry entry )
    {
        _listContentServices.add( entry );
    }

    /**
     * Returns all Content Services of the plugin
     * 
     * @return The list of Content Services
     */
    public List<ContentServiceEntry> getContentServices( )
    {
        return _listContentServices;
    }

    /**
     * Add an Insert Service to the plugin definition
     * 
     * @param is
     *            The Insert Service
     */
    public void addInsertService( InsertService is )
    {
        _listInsertServices.add( is );
    }

    /**
     * Returns all Insert Services of the plugin
     * 
     * @return The list of Insert Services
     */
    public List<InsertService> getInsertServices( )
    {
        return _listInsertServices;
    }

    /**
     * Add a SearchIndexer to the plugin definition
     * 
     * @param entry
     *            The Search Indexer Entry
     */
    public void addSearchIndexer( SearchIndexerEntry entry )
    {
        _listSearchIndexers.add( entry );
    }

    /**
     * Returns all Search Indexer of the plugin
     * 
     * @return The list of Search Indexers
     */
    public List<SearchIndexerEntry> getSearchIndexers( )
    {
        return _listSearchIndexers;
    }

    /**
     * Add an Page Include to the plugin definition
     * 
     * @param entry
     *            The Page Include Entry
     */
    public void addPageInclude( PageIncludeEntry entry )
    {
        _listPageIncludes.add( entry );
    }

    /**
     * Returns all Page Include Services of the plugin
     * 
     * @return The list of Page Include Services
     */
    public List<PageIncludeEntry> getPageIncludes( )
    {
        return _listPageIncludes;
    }

    /**
     * Add an Dashboard Component to the plugin definition
     * 
     * @param entry
     *            The Dashboard Component Entry
     */
    public void addDashboardComponent( DashboardComponentEntry entry )
    {
        _listDashboardComponents.add( entry );
    }

    /**
     * Returns all Dashboard Component Services of the plugin
     * 
     * @return The list of Dashboard Component Services
     */
    public List<DashboardComponentEntry> getDashboardComponents( )
    {
        return _listDashboardComponents;
    }

    /**
     * Add a {@link DashboardComponentEntry} to the plugin definition
     * 
     * @param dashboardComponent
     *            the admin dashboard component
     */
    public void addAdminDashboardComponent( DashboardComponentEntry dashboardComponent )
    {
        _listAdminDashboardComponents.add( dashboardComponent );
    }

    /**
     * Returns all admin dashbaord compopents of the plugin
     * 
     * @return the list of admin dashbaord components
     */
    public List<DashboardComponentEntry> getAdminDashboardComponents( )
    {
        return _listAdminDashboardComponents;
    }

    /**
     * Add an RBAC Resource Type to the plugin definition
     * 
     * @param entry
     *            The RBACResourceType
     */
    public void addRBACResourceType( RBACResourceTypeEntry entry )
    {
        _listRBACResourceTypes.add( entry );
    }

    /**
     * Returns all RBAC Resource Types of the plugin
     * 
     * @return The list of RBACResourceType
     */
    public List<RBACResourceTypeEntry> getRBACResourceTypes( )
    {
        return _listRBACResourceTypes;
    }

    /**
     * Add a Daemon to the plugin definition
     * 
     * @param daemonEntry
     *            The daemon entry to add
     */
    public void addDaemon( DaemonEntry daemonEntry )
    {
        _listDaemons.add( daemonEntry );
    }

    /**
     * Returns all Daemons of the plugin
     * 
     * @return The list of Daemons
     */
    public List<DaemonEntry> getDaemons( )
    {
        return _listDaemons;
    }

    /**
     * Returns if the plugin needs a database connection pool
     *
     * @return <b>true</b> if the plugin needs a database connection pool, otherwise <b>false</b>
     */
    public boolean isDbPoolRequired( )
    {
        return _bDbPoolRequired;
    }

    /**
     * Sets the boolean which shows if a pool is required for the plugin
     *
     * @param bDbPoolRequired
     *            The required boolean
     */
    public void setIsDbPoolRequired( boolean bDbPoolRequired )
    {
        _bDbPoolRequired = bDbPoolRequired;
    }

    /**
     * Gets plugin parameters defined in the XML file
     * 
     * @return The hashtable of the parameters
     */
    public Map<String, String> getParams( )
    {
        return _mapParams;
    }

    /**
     * Add a parameter to the plugin definition
     * 
     * @param strName
     *            The parameter name
     * @param strValue
     *            The parameter value
     */
    public void addParameter( String strName, String strValue )
    {
        _mapParams.put( strName, strValue );
    }

    /**
     * Returns the SearchIndexer Class of the plugin
     *
     * @return the Class as a String
     * @since 2.0.0
     */
    public String getSearchIndexerClass( )
    {
        return _strSearchIndexerClass;
    }

    /**
     * Sets the class service of plugin
     * 
     * @since 2.0.0
     * @param strSearchIndexerClass
     *            The Class name
     */
    public void setSearchIndexerClass( String strSearchIndexerClass )
    {
        _strSearchIndexerClass = strSearchIndexerClass;
    }

    /**
     * Returns the Css Stylesheet Scope
     *
     * @return the scope
     * @since 3.0.0
     */
    public String getCssStylesheetsScope( )
    {
        return _strCssStylesheetsScope;
    }

    /**
     * Sets the css stylesheets scope
     * 
     * @since 3.0.0
     * @param strCssStylesheetScope
     *            The scope
     */
    public void setCssStylesheetsScope( String strCssStylesheetScope )
    {
        _strCssStylesheetsScope = strCssStylesheetScope;
    }

    /**
     * Returns the javascripts Scope
     *
     * @return the scope
     * @since 3.0.0
     */
    public String getJavascriptFilesScope( )
    {
        return _strJavascriptFilesScope;
    }

    /**
     * Sets the javascripts scope
     * 
     * @since 3.0.0
     * @param strJavascriptFilescope
     *            The scope
     */
    public void setJavascriptFilesScope( String strJavascriptFilescope )
    {
        _strJavascriptFilesScope = strJavascriptFilescope;
    }

    /**
     * Get the list of CSS stylesheets for the admin
     * 
     * @return list of CSS stylesheets for the admin
     * @since 5.1
     */
    public List<String> getAdminCssStyleSheets( )
    {
        return _listAdminCssStyleSheets;
    }

    /**
     * Get the list of Javascript Files for the admin
     * 
     * @return the list of Javascript Files for the admin
     * @since 5.1
     */
    public List<String> getAdminJavascriptFiles( )
    {
        return _listAdminJavascriptFiles;
    }
}