Plugin.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 fr.paris.lutece.portal.business.portlet.PortletType;
import fr.paris.lutece.portal.business.portlet.PortletTypeHome;
import fr.paris.lutece.portal.business.right.Right;
import fr.paris.lutece.portal.business.right.RightHome;
import fr.paris.lutece.portal.business.style.Theme;
import fr.paris.lutece.portal.service.content.ContentService;
import fr.paris.lutece.portal.service.content.ContentServiceEntry;
import fr.paris.lutece.portal.service.content.XPageAppService;
import fr.paris.lutece.portal.service.daemon.AppDaemonService;
import fr.paris.lutece.portal.service.daemon.DaemonEntry;
import fr.paris.lutece.portal.service.dashboard.DashboardComponentEntry;
import fr.paris.lutece.portal.service.dashboard.DashboardService;
import fr.paris.lutece.portal.service.dashboard.admin.AdminDashboardService;
import fr.paris.lutece.portal.service.database.PluginConnectionService;
import fr.paris.lutece.portal.service.filter.FilterEntry;
import fr.paris.lutece.portal.service.filter.FilterService;
import fr.paris.lutece.portal.service.includes.PageIncludeEntry;
import fr.paris.lutece.portal.service.includes.PageIncludeService;
import fr.paris.lutece.portal.service.init.LuteceInitException;
import fr.paris.lutece.portal.service.insert.InsertService;
import fr.paris.lutece.portal.service.insert.InsertServiceManager;
import fr.paris.lutece.portal.service.portal.PortalService;
import fr.paris.lutece.portal.service.rbac.RBACResourceTypeEntry;
import fr.paris.lutece.portal.service.rbac.ResourceIdService;
import fr.paris.lutece.portal.service.search.IndexationService;
import fr.paris.lutece.portal.service.search.SearchIndexer;
import fr.paris.lutece.portal.service.search.SearchIndexerEntry;
import fr.paris.lutece.portal.service.servlet.ServletEntry;
import fr.paris.lutece.portal.service.servlet.ServletService;
import fr.paris.lutece.portal.service.sessionlistener.HttpSessionListenerEntry;
import fr.paris.lutece.portal.service.sessionlistener.HttpSessionListenerService;
import fr.paris.lutece.portal.service.util.AppPropertiesService;
import fr.paris.lutece.portal.web.xpages.XPageApplicationEntry;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.collections.CollectionUtils;
/**
* This class is the general plugin element
*/
public abstract class Plugin implements Comparable<Plugin>
{
// Constantes
public static final int PLUGIN_TYPE_FEATURE = 0x01;
public static final int PLUGIN_TYPE_PORTLET = 0x02;
public static final int PLUGIN_TYPE_APPLICATION = 0x04;
public static final int PLUGIN_TYPE_INSERTSERVICE = 0x08;
public static final int PLUGIN_TYPE_CONTENTSERVICE = 0x10;
public static final int PLUGIN_TYPE_DAEMON = 0x20;
private static final String PROPERTY_DEFAULT_ICON_URL = "plugin.image.defaultIconUrl";
private static final String SCOPE_PORTAL = "portal";
private static final String SCOPE_XPAGE = "xpage";
// Variables
private String _strName;
private String _strVersion;
private String _strDescription;
private String _strProvider;
private String _strProviderUrl;
private String _strCopyright;
private String _strPluginClass;
private String _strDbPoolName;
private String _strIconUrl;
private String _strDocumentationUrl;
private String _strMinCoreVersion;
private String _strMaxCoreVersion;
private boolean _bIsInstalled;
private boolean _bDbPoolRequired;
private ContentService _contentService;
private String _strCssStylesheetsScope;
private String _strJavascriptFilesScope;
// Lists of rights and portlets of the plugin
private List<XPageApplicationEntry> _listXPageApplications;
private List<FilterEntry> _listFilters;
private List<ServletEntry> _listServlets;
private List<HttpSessionListenerEntry> _listListeners;
private Map<Integer, List<String>> _listCssStyleSheets;
private Map<Integer, List<String>> _listJavascriptFiles;
private List<String> _listAdminCssStyleSheets;
private List<String> _listAdminJavascriptFiles;
private List<Right> _listRights;
private List<PortletType> _listPortletTypes;
private List<ContentServiceEntry> _listContentServices;
private List<SearchIndexerEntry> _listSearchIndexers;
private List<InsertService> _listInsertServices;
private List<PageIncludeEntry> _listPageIncludes;
private List<DashboardComponentEntry> _listDashboardComponents;
private List<DashboardComponentEntry> _listAdminDashboardComponents;
private List<RBACResourceTypeEntry> _listRBACResourceTypes;
private List<DaemonEntry> _listDaemons;
private List<String> _listFreemarkerMacrosFiles;
// hashtable which contains all the params described in the xml plugin file
private Map<String, String> _mapParams = new HashMap<>( );
private PluginConnectionService _connectionService;
/**
* Initializes the plugin at the first load
*
*/
public abstract void init( );
/**
* Load plugin's data from the plugin's xml file.
*
* @param pluginFile
* The plugin file object
* @throws LuteceInitException
* If an error occured
*/
void load( PluginFile pluginFile ) throws LuteceInitException
{
try
{
_strName = pluginFile.getName( );
_strVersion = pluginFile.getVersion( );
_strDescription = pluginFile.getDescription( );
_strProvider = pluginFile.getProvider( );
_strProviderUrl = pluginFile.getProviderUrl( );
String strDefaultIconUrl = AppPropertiesService.getProperty( PROPERTY_DEFAULT_ICON_URL );
_strIconUrl = pluginFile.getIconUrl( ).equals( "" ) ? strDefaultIconUrl : pluginFile.getIconUrl( );
_strDocumentationUrl = pluginFile.getDocumentationUrl( );
_strCopyright = pluginFile.getCopyright( );
_strPluginClass = pluginFile.getPluginClass( );
_strMinCoreVersion = pluginFile.getMinCoreVersion( );
_strMaxCoreVersion = pluginFile.getMaxCoreVersion( );
_listXPageApplications = pluginFile.getXPageApplications( );
_listFilters = pluginFile.getFilters( );
_listServlets = pluginFile.getServlets( );
_listListeners = pluginFile.getListeners( );
_listRights = pluginFile.getRights( );
_listPortletTypes = pluginFile.getPortletTypes( );
_listContentServices = pluginFile.getContentServices( );
_listInsertServices = pluginFile.getInsertServices( );
_listSearchIndexers = pluginFile.getSearchIndexers( );
_listPageIncludes = pluginFile.getPageIncludes( );
_listDashboardComponents = pluginFile.getDashboardComponents( );
_listAdminDashboardComponents = pluginFile.getAdminDashboardComponents( );
_listRBACResourceTypes = pluginFile.getRBACResourceTypes( );
_listDaemons = pluginFile.getDaemons( );
_mapParams = pluginFile.getParams( );
_bDbPoolRequired = pluginFile.isDbPoolRequired( );
_listCssStyleSheets = pluginFile.getCssStyleSheetsForAllModes( );
_strCssStylesheetsScope = ( pluginFile.getCssStylesheetsScope( ) != null ) ? pluginFile.getCssStylesheetsScope( ) : SCOPE_XPAGE;
_listJavascriptFiles = pluginFile.getJavascriptFilesForAllModes( );
_strJavascriptFilesScope = ( pluginFile.getJavascriptFilesScope( ) != null ) ? pluginFile.getJavascriptFilesScope( ) : SCOPE_XPAGE;
_listFreemarkerMacrosFiles = pluginFile.getFreemarkerMacrosFiles( );
_listAdminCssStyleSheets = pluginFile.getAdminCssStyleSheets( );
_listAdminJavascriptFiles = pluginFile.getAdminJavascriptFiles( );
// Register plugin components
registerXPageApplications( );
registerFilters( );
registerServlets( );
registerListeners( );
registerContentServices( );
registerInsertServices( );
registerSearchIndexers( );
registerPageIncludes( );
registerDashboardComponents( );
registerAdminDashboardComponents( );
registerRBACResourceTypes( );
registerDaemons( );
}
catch( Exception e )
{
throw new LuteceInitException( "Error loading plugin : " + e.getMessage( ), e );
}
}
/**
*
* @return the content service
*/
public ContentService getContentService( )
{
return _contentService;
}
/**
* Returns weither or not plugin has portlet.
*
* @return true if the plugin contains one or more portlet
*/
public boolean hasPortlets( )
{
return CollectionUtils.isNotEmpty( _listPortletTypes );
}
/**
* Returns weither or not plugin has daemon.
*
* @return true if the plugin contains one or more daemon
*/
public boolean hasDaemons( )
{
return CollectionUtils.isNotEmpty( _listDaemons );
}
/**
* Returns The daemons list of the plugin.
*
* @return The daemons list of the plugin
*/
public List<DaemonEntry> getDaemons( )
{
return _listDaemons;
}
/**
* Updates the plg file
*/
protected void update( )
{
PluginService.updatePluginData( this );
}
/**
* Modify the plugin status
*
* @param bStatus
* true installed, false uninstalled
*/
public void setStatus( boolean bStatus )
{
_bIsInstalled = bStatus;
}
/**
* Updates a database connection pool associated to the plugin and stores it
*
* @param strPoolName
* the name of the pool
*/
public void updatePoolName( String strPoolName )
{
_strDbPoolName = strPoolName;
_connectionService.setPool( strPoolName );
update( );
notifyListeners( PluginEvent.PLUGIN_POOL_CHANGED );
}
/**
* Updates a database connection pool associated to the plugin and stores it
*
* @param strPoolName
* The name of the pool
*/
public void setPoolName( String strPoolName )
{
_strDbPoolName = strPoolName;
}
/**
* Gets the current database connection pool associated to the plugin
*
* @return The name of the database for the pool checked
*/
public String getDbPoolName( )
{
return _strDbPoolName;
}
/**
* Creates a new right in the rights set
*/
protected void registerRights( )
{
for ( Right right : _listRights )
{
RightHome.remove( right.getId( ) );
if ( !( right.getId( ).equals( "" ) ) )
{
RightHome.create( right );
}
}
}
/**
* Remove a right from the rights set.
*/
protected void unregisterRights( )
{
for ( Right right : _listRights )
{
if ( ( right != null ) && ( !( right.getId( ).equals( "" ) ) ) )
{
RightHome.remove( right.getId( ) );
}
}
}
/**
* Creates a new portlet in the portlets type set
*/
protected void registerPortlets( )
{
for ( PortletType portletType : _listPortletTypes )
{
PortletTypeHome.remove( portletType.getId( ) );
if ( ( portletType.getHomeClass( ) != null ) && ( !( portletType.getHomeClass( ).equals( "" ) ) ) )
{
PortletTypeHome.create( portletType );
}
}
}
/**
* Remove a portlet from the portlets type set.
*/
protected void unregisterPortlets( )
{
for ( PortletType portletType : _listPortletTypes )
{
PortletTypeHome.remove( portletType.getId( ) );
}
}
/**
* Register XPage applications
*
* @throws LuteceInitException
* If an error occurs
*/
protected void registerXPageApplications( ) throws LuteceInitException
{
for ( XPageApplicationEntry entry : _listXPageApplications )
{
entry.setPluginName( getName( ) );
XPageAppService.registerXPageApplication( entry );
}
}
/**
* Register Filters
*
* @throws LuteceInitException
* If an error occurs
*/
protected void registerFilters( ) throws LuteceInitException
{
for ( FilterEntry entry : _listFilters )
{
FilterService.getInstance( ).registerFilter( entry, this );
}
}
/**
* Register Servlets
*
* @throws LuteceInitException
* If an error occurs
*/
protected void registerServlets( ) throws LuteceInitException
{
for ( ServletEntry entry : _listServlets )
{
ServletService.getInstance( ).registerServlet( entry, this );
}
}
/**
* Register listeners
*
* @throws LuteceInitException
* if an error occurs
*/
protected void registerListeners( ) throws LuteceInitException
{
for ( HttpSessionListenerEntry entry : _listListeners )
{
HttpSessionListenerService.registerListener( entry );
}
}
/**
* Register Content Services
*
* @throws LuteceInitException
* If an error occurs
*/
protected void registerContentServices( ) throws LuteceInitException
{
for ( ContentServiceEntry entry : _listContentServices )
{
try
{
ContentService cs = (ContentService) Class.forName( entry.getClassName( ) ).newInstance( );
cs.setPluginName( getName( ) );
PortalService.registerContentService( cs.getName( ), cs );
}
catch( InstantiationException | ClassNotFoundException | IllegalAccessException e )
{
throw new LuteceInitException( e.getMessage( ), e );
}
}
}
/**
* Register Insert Services
*
* @throws LuteceInitException
* If an error occurs
*/
protected void registerInsertServices( ) throws LuteceInitException
{
for ( InsertService is : _listInsertServices )
{
is.setPluginName( getName( ) );
InsertServiceManager.registerInsertService( is );
}
}
/**
* Register Search Indexers
*
* @throws LuteceInitException
* If an error occurs
*/
protected void registerSearchIndexers( ) throws LuteceInitException
{
for ( SearchIndexerEntry entry : _listSearchIndexers )
{
try
{
SearchIndexer indexer = (SearchIndexer) Class.forName( entry.getClassName( ) ).newInstance( );
IndexationService.registerIndexer( indexer );
}
catch( IllegalAccessException | ClassNotFoundException | InstantiationException e )
{
throw new LuteceInitException( e.getMessage( ), e );
}
}
}
/**
* Register Page Includes
*
* @throws LuteceInitException
* If an error occured
*/
protected void registerPageIncludes( ) throws LuteceInitException
{
for ( PageIncludeEntry entry : _listPageIncludes )
{
entry.setPluginName( getName( ) );
PageIncludeService.registerPageInclude( entry );
}
}
/**
* Register Dashboard Components
*
* @throws LuteceInitException
* If an error occured
*/
protected void registerDashboardComponents( ) throws LuteceInitException
{
for ( DashboardComponentEntry entry : _listDashboardComponents )
{
DashboardService.getInstance( ).registerDashboardComponent( entry, this );
}
}
/**
* Register Admin Dashboard Components
*
* @throws LuteceInitException
* If an error occured
*/
protected void registerAdminDashboardComponents( ) throws LuteceInitException
{
for ( DashboardComponentEntry entry : _listAdminDashboardComponents )
{
AdminDashboardService.getInstance( ).registerDashboardComponent( entry, this );
}
}
/**
* Register RBAC Resource Types
*
* @throws LuteceInitException
* If an error occurs
*/
protected void registerRBACResourceTypes( ) throws LuteceInitException
{
for ( RBACResourceTypeEntry entry : _listRBACResourceTypes )
{
ResourceIdService ris;
try
{
ris = (ResourceIdService) Class.forName( entry.getClassName( ) ).newInstance( );
// Each resource id service should register itself and its permissions
ris.register( );
}
catch( InstantiationException | ClassNotFoundException | IllegalAccessException e )
{
throw new LuteceInitException( e.getMessage( ), e );
}
}
}
/**
* Register Daemons
*
* @throws LuteceInitException
* If an error occurs
*/
protected void registerDaemons( ) throws LuteceInitException
{
for ( DaemonEntry entry : _listDaemons )
{
entry.setPluginName( getName( ) );
AppDaemonService.registerDaemon( entry );
}
}
/**
* Installs a Plugin
*/
public void install( )
{
// Register a new right for the plugin
registerRights( );
// Register a new portlets as plugin
registerPortlets( );
_bIsInstalled = true;
update( );
notifyListeners( PluginEvent.PLUGIN_INSTALLED );
}
/**
* Uninstalls a Plugin
*/
public void uninstall( )
{
// Unregister a new right for the plugin
unregisterRights( );
// Unregister a new portlets as plugin
unregisterPortlets( );
_bIsInstalled = false;
update( );
notifyListeners( PluginEvent.PLUGIN_UNINSTALLED );
}
/**
* Notifiy Listener
*
* @param nEventType
* The event type
*/
private void notifyListeners( int nEventType )
{
PluginEvent event = new PluginEvent( this, nEventType );
PluginService.notifyListeners( event );
}
/**
* Returns the type of the plugin
*
* @return the plugin type as a int
*/
public int getType( )
{
// Load the Type
int nPluginTypeFlags = 0;
if ( CollectionUtils.isNotEmpty( _listXPageApplications ) )
{
nPluginTypeFlags |= PLUGIN_TYPE_APPLICATION;
}
if ( CollectionUtils.isNotEmpty( _listPortletTypes ) )
{
nPluginTypeFlags |= PLUGIN_TYPE_PORTLET;
}
if ( CollectionUtils.isNotEmpty( _listRights ) )
{
nPluginTypeFlags |= PLUGIN_TYPE_FEATURE;
}
if ( CollectionUtils.isNotEmpty( _listInsertServices ) )
{
nPluginTypeFlags |= PLUGIN_TYPE_INSERTSERVICE;
}
if ( CollectionUtils.isNotEmpty( _listContentServices ) )
{
nPluginTypeFlags |= PLUGIN_TYPE_CONTENTSERVICE;
}
if ( CollectionUtils.isNotEmpty( _listDaemons ) )
{
nPluginTypeFlags |= PLUGIN_TYPE_DAEMON;
}
return nPluginTypeFlags;
}
/**
* Returns the list of insert services of the plugin
*
* @return the plugin list of ContentServiceEntry
*/
public List<InsertService> getInsertServices( )
{
return _listInsertServices;
}
/**
* Returns the list of Content services of the plugin
*
* @return the plugin list of ContentServiceEntry
*/
public List<ContentServiceEntry> getContentServices( )
{
return _listContentServices;
}
/**
* Returns the list of XPage Applications of the plugin
*
* @return the plugin list of XPageApplicationEntry
*/
public List<XPageApplicationEntry> getApplications( )
{
return _listXPageApplications;
}
/**
* Returns the list of portlet type of the plugin
*
* @return the plugin list of portlet type
*/
public List<PortletType> getPortletTypes( )
{
return _listPortletTypes;
}
/**
* Sets the list of portlet type
*
* @param listPortletTypes
* The portlet type list
*/
public void setPortletTypes( List<PortletType> listPortletTypes )
{
_listPortletTypes = listPortletTypes;
}
/**
* Returns the list of portlet type of the plugin
*
* @return the plugin list of rights
*/
public List<Right> getRights( )
{
return _listRights;
}
/**
* Sets plugin rights list
*
* @param listRights
* The rights list
*/
public void setRights( List<Right> listRights )
{
_listRights = listRights;
}
/**
* Returns the name of the plugin
*
* @return the plugin name as a String
*/
public String getName( )
{
return _strName;
}
/**
* Sets the name of the plugin
*
* @param strName
* The plugin name
*/
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 plugin name
*
* @param strVersion
* The version
*/
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
*
* @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 name
*
* @param strProvider
* The provider name
*/
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
*
* @param strProviderUrl
* the name 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 plugin's icon
*
* @param strIconUrl
* The url of 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 plugin's Documentation
*
* @param strDocumentationUrl
* The documentation Url
*/
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
*
* @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 getServiceClass( )
{
return _strPluginClass;
}
/**
* Sets the class service of plugin
*
* @param strPluginClass
* The plugin class
*/
public void setServiceClass( 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 which 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;
}
/**
* 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
*
* @param bDbPoolRequired
* The dbpool boolean
*/
public void setIsDbPoolRequired( boolean bDbPoolRequired )
{
_bDbPoolRequired = bDbPoolRequired;
}
/**
* Returns a Connection Service associated to the plugin
*
* @return _connectionService The connection service
*/
public PluginConnectionService getConnectionService( )
{
return _connectionService;
}
/**
* Sets the connection service
*
* @param connectionService
* The connection Service object
*/
public void setConnectionService( PluginConnectionService connectionService )
{
_connectionService = connectionService;
}
/**
* Initializes the plugin's ConnectionService
*
* @param strPoolName
* The pool name
*/
public void initConnectionService( String strPoolName )
{
_connectionService = new PluginConnectionService( strPoolName );
}
/**
* Gets plugin's parameters
*
* @return _mapParams The hastable of parameters
*/
public Map<String, String> getParams( )
{
return _mapParams;
}
/**
* Gets a parameter value for a given parameter name
*
* @param strParamName
* The name of the parameter
* @return null
*/
public String getParamValue( String strParamName )
{
if ( !_mapParams.containsKey( strParamName ) )
{
return null;
}
return _mapParams.get( strParamName );
}
/**
* Sets parameters values with an hashtable
*
* @param mapParams
* The parameter map
*/
public void setParams( Map<String, String> mapParams )
{
_mapParams = mapParams;
}
/**
* Sets a parameter value for a given parameter name
*
* @param strParamName
* The name of the parameter
* @param strParamValue
* The value of the parameter
*/
public void setParamValue( String strParamName, String strParamValue )
{
if ( _mapParams.containsKey( strParamName ) )
{
_mapParams.put( strParamName, strParamValue );
}
}
/**
* Implementation of the Comparable interface.
*
* @param plugin
* A plugin Object
* @return 1, 0 ou -1 according the plugin name
*/
@Override
public int compareTo( Plugin plugin )
{
Comparator<String> comparator = String.CASE_INSENSITIVE_ORDER;
return comparator.compare( getName( ), plugin.getName( ) );
}
/**
* {@inheritDoc}
*/
@Override
public boolean equals( Object o )
{
if ( !( o instanceof Plugin ) )
{
return false;
}
return compareTo( (Plugin) o ) == 0;
}
/**
* Returns all CSS Style Sheets of the plugin with no mode associated
*
* @return The list of CSS Style Sheets with no mode associated
*/
public List<String> getCssStyleSheets( )
{
List<String> res = _listCssStyleSheets.get( null );
if ( res == null )
{
return Collections.emptyList( );
}
return res;
}
/**
* Returns all CSS Style Sheets of the plugin associated with a mode
*
* @param mode
* the mode
* @return The list of CSS Style Sheets associated with the mode
* @since 5.1.0
*/
public List<String> getCssStyleSheets( int mode )
{
List<String> res = _listCssStyleSheets.get( mode );
if ( res == null )
{
return Collections.emptyList( );
}
return res;
}
/**
* Returns the theme the plugin use for rendering a Xpage
*
* @param request
* The HttpServletRequest
* @return The theme
*/
public Theme getXPageTheme( HttpServletRequest request )
{
return null;
}
/**
* Add an Javascript File to the plugin definition, not associated with a mode
*
* @param strJavascriptFile
* The Javascript File path
*/
public void addJavascriptFile( String strJavascriptFile )
{
List<String> files = _listJavascriptFiles.computeIfAbsent( null, s -> new ArrayList<>( ) );
files.add( strJavascriptFile );
}
/**
* Returns all Javascript File of the plugin with no mode associated
*
* @return The list of Javascript File with no mode associated
*/
public List<String> getJavascriptFiles( )
{
List<String> res = _listJavascriptFiles.get( null );
if ( res == null )
{
return Collections.emptyList( );
}
return res;
}
/**
* Returns all Javascript File of the plugin associated with a mode
*
* @param mode
* the mode
* @return The list of Javascript File with associated with the mode
* @since 5.1.0
*/
public List<String> getJavascriptFiles( int mode )
{
List<String> res = _listJavascriptFiles.get( mode );
if ( res == null )
{
return Collections.emptyList( );
}
return res;
}
/**
* Give the scope of css stylesheets
*
* @return true if scope is portal otherwise false
*/
public boolean isCssStylesheetsScopePortal( )
{
return ( ( _strCssStylesheetsScope != null ) && _strCssStylesheetsScope.equalsIgnoreCase( SCOPE_PORTAL ) );
}
/**
* Give the scope of css stylesheets
*
* @return true if scope is portal otherwise false
*/
public boolean isCssStylesheetsScopeXPage( )
{
return ( ( _strCssStylesheetsScope != null ) && _strCssStylesheetsScope.equalsIgnoreCase( SCOPE_XPAGE ) );
}
/**
* Give the scope of javascripts
*
* @return true if scope is portal otherwise false
*/
public boolean isJavascriptFilesScopePortal( )
{
return ( ( _strJavascriptFilesScope != null ) && _strJavascriptFilesScope.equalsIgnoreCase( SCOPE_PORTAL ) );
}
/**
* Give the scope of javascripts
*
* @return true if scope is portal otherwise false
*/
public boolean isJavascriptFilesScopeXPage( )
{
return ( ( _strJavascriptFilesScope != null ) && _strJavascriptFilesScope.equalsIgnoreCase( SCOPE_XPAGE ) );
}
/**
* Return the list of stylesheets that should be used in the Back Office
*
* @return the list of stylesheets that should be used in the Back Office
* @since 5.1
*/
public List<String> getAdminCssStyleSheets( )
{
return _listAdminCssStyleSheets;
}
/**
* Return the list of Javascript Files that should be used in the Back Office
*
* @return the list of Javascript Files that should be used in the Back Office
* @since 5.1
*/
public List<String> getAdminJavascriptFiles( )
{
return _listAdminJavascriptFiles;
}
/**
* Adds a that file that will be autoincluded in freemarker templates
*
* @param strMacroFileName
* the file name
*/
public void addFreemarkerMacrosFile( String strMacroFileName )
{
_listFreemarkerMacrosFiles.add( strMacroFileName );
}
/**
* Gets the free marker macros files.
*
* @return the free marker macros files
*/
public List<String> getFreeMarkerMacrosFiles( )
{
return _listFreemarkerMacrosFiles;
}
/**
* Useful for debugging
*
* @return The plugin object in String format
*/
@Override
public String toString( )
{
return getName( );
}
/**
* {@inheritDoc}
*/
@Override
public int hashCode( )
{
if ( getName( ) == null )
{
return 0;
}
return getName( ).toLowerCase( ).hashCode( );
}
}