PathCacheService.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.cache;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.commons.lang3.StringUtils;
- import fr.paris.lutece.portal.service.page.PageEvent;
- import fr.paris.lutece.portal.service.page.PageEventListener;
- import fr.paris.lutece.portal.service.page.PageService;
- import fr.paris.lutece.portal.web.constants.Parameters;
- /**
- * XPage path cache service
- */
- public class PathCacheService extends AbstractCacheableService implements IPathCacheService, PageEventListener
- {
- /**
- * Constructor
- */
- PathCacheService( )
- {
- initCache( );
- PageService.addPageEventListener( this );
- }
- @Override
- public String getName( )
- {
- return IPathCacheService.BEAN_NAME;
- }
- @Override
- public String getKey( String strXPageName, int nMode, HttpServletRequest request )
- {
- return getKey( strXPageName, nMode, null, request );
- }
- @Override
- public String getKey( String strXPageName, int nMode, String strTitlesUrls, HttpServletRequest request )
- {
- if ( !isCacheEnable( ) )
- {
- return null;
- }
- StringBuilder builder = new StringBuilder( );
- builder.append( "[XPageName:" ).append( strXPageName ).append( ']' );
- builder.append( "[mode:" ).append( nMode ).append( ']' );
- if ( strTitlesUrls != null )
- {
- builder.append( "[titleUrls:" ).append( strTitlesUrls ).append( ']' );
- }
- if ( request != null )
- {
- builder.append( "[locale:" ).append( request.getLocale( ) ).append( ']' );
- String strPageId = request.getParameter( Parameters.PAGE_ID );
- if ( StringUtils.isNotBlank( strPageId ) )
- {
- builder.append( '[' ).append( Parameters.PAGE_ID ).append( ':' ).append( strPageId ).append( ']' );
- }
- String strPortletId = request.getParameter( Parameters.PORTLET_ID );
- if ( StringUtils.isNotBlank( strPortletId ) )
- {
- builder.append( '[' ).append( Parameters.PORTLET_ID ).append( ':' ).append( strPortletId ).append( ']' );
- }
- }
- return builder.toString( );
- }
- @Override
- public String getFromCache( String strKey )
- {
- return (String) super.getFromCache( strKey );
- }
- @Override
- public void putInCache( String strKey, String path )
- {
- super.putInCache( strKey, path );
- }
- @Override
- public void processPageEvent( PageEvent event )
- {
- if ( isCacheEnable( ) && event.getEventType( ) != PageEvent.PAGE_CREATED )
- {
- // some cached paths might contain page info that need invalidation, but not for
- // a page which was just created
- resetCache( );
- }
- }
- }