SiteMessageService.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.message;
import fr.paris.lutece.portal.service.i18n.I18nService;
import fr.paris.lutece.util.url.UrlItem;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
* This class provides a service that build messages
*/
public final class SiteMessageService
{
private static final String ATTRIBUTE_MESSAGE = "LUTECE_PORTAL_MESSAGE";
private static final String PROPERTY_TITLE_DEFAULT = "portal.util.message.titleDefault";
private static final String PROPERTY_TITLE_QUESTION = "portal.util.message.titleQuestion";
private static final String PROPERTY_TITLE_ERROR = "portal.util.message.titleError";
private static final String PROPERTY_TITLE_WARNING = "portal.util.message.titleWarning";
private static final String PROPERTY_TITLE_CONFIRMATION = "portal.util.message.titleConfirmation";
private static final String PROPERTY_TITLE_STOP = "portal.util.message.titleStop";
private static final String PARAMETER_SITE_MESSAGE = "sitemessage";
private static final String PARAMETER_SITE_MESSAGE_VALUE = "true";
/**
* Private constructor
*/
private SiteMessageService( )
{
}
/**
* Set the INFO message, store it in session and throw a LuteceSiteMessageException
*
* @param request
* The HttpRequest
* @param strMessageKey
* The message key
* @throws SiteMessageException
* occurs when a site message need to be displayed
*/
public static void setMessage( HttpServletRequest request, String strMessageKey ) throws SiteMessageException
{
setMessage( request, strMessageKey, null, null, null, null, SiteMessage.TYPE_INFO );
}
/**
* Set the message, store it in session and throw a LuteceSiteMessageException
*
* @param request
* The HttpRequest
* @param strMessageKey
* The message key
* @param nMessageType
* The message type
* @throws SiteMessageException
* occurs when a site message need to be displayed
*/
public static void setMessage( HttpServletRequest request, String strMessageKey, int nMessageType ) throws SiteMessageException
{
setMessage( request, strMessageKey, null, null, null, null, nMessageType );
}
/**
* Set the message, store it in session and throw a LuteceSiteMessageException
*
* @param request
* The HttpRequest
* @param strMessageKey
* The message key
* @param nMessageType
* The message type
* @param strUrl
* The url of the Ok button
* @throws SiteMessageException
* occurs when a site message need to be displayed
*/
public static void setMessage( HttpServletRequest request, String strMessageKey, int nMessageType, String strUrl ) throws SiteMessageException
{
setMessage( request, strMessageKey, null, null, strUrl, null, nMessageType );
}
/**
* Set the message, store it in session and throw a LuteceSiteMessageException
*
* @param request
* The HttpRequest
* @param strMessageKey
* The message key
* @param nMessageType
* The message type
* @param strUrl
* The url of the Ok button
* @param requestParameters
* The request parameters as a map
* @throws SiteMessageException
* occurs when a site message need to be displayed
*/
public static void setMessage( HttpServletRequest request, String strMessageKey, int nMessageType, String strUrl, Map<String, Object> requestParameters )
throws SiteMessageException
{
setMessage( request, strMessageKey, null, null, strUrl, null, nMessageType, requestParameters );
}
/**
* Set the message, store it in session and throw a LuteceSiteMessageException
*
* @param request
* The HttpRequest
* @param strMessageKey
* The message key
* @param strTitleKey
* The title key
* @param nMessageType
* The message type
* @throws SiteMessageException
* occurs when a site message need to be displayed
*/
public static void setMessage( HttpServletRequest request, String strMessageKey, String strTitleKey, int nMessageType ) throws SiteMessageException
{
setMessage( request, strMessageKey, null, strTitleKey, null, null, nMessageType );
}
/**
* Set the message, store it in session and throw a LuteceSiteMessageException
*
* @param request
* The HttpRequest
* @param strMessageKey
* The message key
* @param messageArgs
* Message Arguments
* @param strTitleKey
* The title key
* @param nMessageType
* The message type
* @throws SiteMessageException
* occurs when a site message need to be displayed
*/
public static void setMessage( HttpServletRequest request, String strMessageKey, Object [ ] messageArgs, String strTitleKey, int nMessageType )
throws SiteMessageException
{
setMessage( request, strMessageKey, messageArgs, strTitleKey, null, null, nMessageType );
}
/**
* Set the message, store it in session and throw a LuteceSiteMessageException
*
* @param request
* The HttpRequest
* @param strMessageKey
* The message key
* @param messageArgs
* Message Arguments
* @param nMessageType
* The message type
* @throws SiteMessageException
* occurs when a site message need to be displayed
*/
public static void setMessage( HttpServletRequest request, String strMessageKey, Object [ ] messageArgs, int nMessageType ) throws SiteMessageException
{
setMessage( request, strMessageKey, messageArgs, null, null, null, nMessageType );
}
/**
* Set the message, store it in session and throw a LuteceSiteMessageException
*
* @param request
* The HttpRequest
* @param strMessageKey
* The message key
* @param messageArgs
* Message arguments
* @param strTitleKey
* The title key
* @param nMessageType
* The message type
* @param strUrl
* The URL
* @throws SiteMessageException
* occurs when a site message need to be displayed
*/
public static void setMessage( HttpServletRequest request, String strMessageKey, Object [ ] messageArgs, int nMessageType, String strUrl,
String strTitleKey ) throws SiteMessageException
{
setMessage( request, strMessageKey, messageArgs, strTitleKey, strUrl, null, nMessageType );
}
/**
* Set the message, store it in session and throw a LuteceSiteMessageException
*
* @param request
* The HttpRequest
* @param strMessageKey
* The message key
* @param messageArgs
* Message Arguments
* @param strUrl
* The forward URL
* @param strTitleKey
* The title key
* @param nMessageType
* The message type
* @throws SiteMessageException
* occurs when a site message need to be displayed
*/
public static void setMessage( HttpServletRequest request, String strMessageKey, int nMessageType, String strUrl, String strTitleKey,
Object [ ] messageArgs ) throws SiteMessageException
{
setMessage( request, strMessageKey, messageArgs, strTitleKey, strUrl, null, nMessageType );
}
/**
* Set the message, store it in session and throw a LuteceSiteMessageException
*
* @param request
* The HttpRequest
* @param strMessageKey
* The message key
* @param messageArgs
* Message Arguments
* @param strTitleKey
* The title key
* @param strUrl
* The Url of the Ok button
* @param strTarget
* The url target if not "_self"
* @param nMessageType
* The message type
* @throws SiteMessageException
* occurs when a site message need to be displayed
*/
public static void setMessage( HttpServletRequest request, String strMessageKey, Object [ ] messageArgs, String strTitleKey, String strUrl,
String strTarget, int nMessageType ) throws SiteMessageException
{
setMessage( request, strMessageKey, messageArgs, strTitleKey, strUrl, strTarget, nMessageType, null );
}
/**
* Set the message, store it in session and throw a LuteceSiteMessageException
*
* @param request
* The HttpRequest
* @param strMessageKey
* The message key
* @param messageArgs
* Message Arguments
* @param strTitleKey
* The title key
* @param strUrl
* The Url of the Ok button
* @param strTarget
* The url target if not "_self"
* @param nMessageType
* The message type
* @param requestParameters
* The request parameters
* @throws SiteMessageException
* occurs when a site message need to be displayed
*/
public static void setMessage( HttpServletRequest request, String strMessageKey, Object [ ] messageArgs, String strTitleKey, String strUrl,
String strTarget, int nMessageType, Map<String, Object> requestParameters ) throws SiteMessageException
{
setMessage( request, strMessageKey, messageArgs, strTitleKey, strUrl, strTarget, nMessageType, requestParameters, null );
}
/**
* Set the message, store it in session and throw a LuteceSiteMessageException
*
* @param request
* The HttpRequest
* @param strMessageKey
* The message key
* @param messageArgs
* Message Arguments
* @param strTitleKey
* The title key
* @param strUrl
* The Url of the Ok button
* @param strTarget
* The url target if not "_self"
* @param nMessageType
* The message type
* @param requestParameters
* The request parameters
* @param strBackUrl
* The Url of back button
* @throws SiteMessageException
* occurs when a site message need to be displayed
*/
public static void setMessage( HttpServletRequest request, String strMessageKey, Object [ ] messageArgs, String strTitleKey, String strUrl,
String strTarget, int nMessageType, Map<String, Object> requestParameters, String strBackUrl ) throws SiteMessageException
{
String strTitle = ( strTitleKey != null ) ? strTitleKey : getDefaultTitle( nMessageType );
SiteMessage message = new SiteMessage( strMessageKey, messageArgs, strTitle, strUrl, strTarget, nMessageType, getTypeButton( nMessageType, strUrl ),
requestParameters, strBackUrl );
setMessage( request, message );
throw new SiteMessageException( );
}
/**
* Set the custom message, store it in session and throw a LuteceSiteMessageException
*
* @param request
* The HttpRequest
* @param title
* The title
* @param strUrl
* The Url of the Ok button
* @param text
* The message
* @param nMessageType
* The message type
* @param strBackUrl
* The Url of back button
* @throws SiteMessageException
*/
public static void setCustomMessage( HttpServletRequest request, String title, String text, String strUrl, int nMessageType, String strBackUrl )
throws SiteMessageException
{
String strTitle = title != null ? title : I18nService.getLocalizedString( getDefaultTitle( nMessageType ), request.getLocale( ) );
SiteMessage message = new CustomSiteMessage( strTitle, text, strUrl, nMessageType, getTypeButton( nMessageType, strBackUrl ), strBackUrl );
setMessage( request, message );
throw new SiteMessageException( );
}
/**
* Set the custom message, store it in session and throw a LuteceSiteMessageException
*
* @param request
* The HttpRequest
* @param strText
* The message
* @param nMessageType
* The message type
* @throws SiteMessageException
*/
public static void setCustomMessage( HttpServletRequest request, String strText, int nMessageType ) throws SiteMessageException
{
setCustomMessage( request, null, strText, null, nMessageType, null );
}
/**
* Set the custom message, store it in session and throw a LuteceSiteMessageException
*
* @param request
* The HttpRequest
* @param strText
* The message
* @param strTitle
* The title
* @param nMessageType
* The message type
* @throws SiteMessageException
*/
public static void setCustomMessage( HttpServletRequest request, String strTitle, String strText, int nMessageType ) throws SiteMessageException
{
setCustomMessage( request, strTitle, strText, null, nMessageType, null );
}
/**
* Returns the message associated to the current request
*
* @param request
* The HttpRequest
* @return The message associated to the current request
*/
public static SiteMessage getMessage( HttpServletRequest request )
{
HttpSession session = request.getSession( true );
return (SiteMessage) session.getAttribute( ATTRIBUTE_MESSAGE );
}
/**
* Store a message into the current session
*
* @param request
* The HTTP request
* @param message
* The message to store
*/
private static void setMessage( HttpServletRequest request, SiteMessage message )
{
HttpSession session = request.getSession( true );
session.setAttribute( ATTRIBUTE_MESSAGE, message );
}
/**
* Delete the message in session
*
* @param request
* The HTTP request
*/
public static void cleanMessageSession( HttpServletRequest request )
{
HttpSession session = request.getSession( true );
session.removeAttribute( ATTRIBUTE_MESSAGE );
}
/**
* Set the site message url with parameters if necessary
*
* @param strRequestUrl
* The Request url
* @return The message url
*/
public static String setSiteMessageUrl( String strRequestUrl )
{
UrlItem urlItem = new UrlItem( strRequestUrl );
urlItem.addParameter( PARAMETER_SITE_MESSAGE, PARAMETER_SITE_MESSAGE_VALUE );
return urlItem.getUrl( );
}
/**
* Returns a default title for the message box
*
* @param nMessageType
* The message type
* @return The default title
*/
private static String getDefaultTitle( int nMessageType )
{
String strTitleKey;
switch( nMessageType )
{
case SiteMessage.TYPE_QUESTION:
strTitleKey = PROPERTY_TITLE_QUESTION;
break;
case SiteMessage.TYPE_ERROR:
strTitleKey = PROPERTY_TITLE_ERROR;
break;
case SiteMessage.TYPE_WARNING:
strTitleKey = PROPERTY_TITLE_WARNING;
break;
case SiteMessage.TYPE_CONFIRMATION:
strTitleKey = PROPERTY_TITLE_CONFIRMATION;
break;
case SiteMessage.TYPE_STOP:
strTitleKey = PROPERTY_TITLE_STOP;
break;
default:
strTitleKey = PROPERTY_TITLE_DEFAULT;
break;
}
return strTitleKey;
}
/**
* Returns if the cancel button should be displayed or not according the message type
*
* @param nMessageType
* The message type
* @param strUrl
* The url of the Ok button
* @return the type of button
*/
private static int getTypeButton( int nMessageType, String strUrl )
{
/*
* ------------------------------------- * Type url defined no url * TYPE_INFO none back * TYPE_QUESTION cancel back(?) * TYPE_ERROR none back *
* TYPE_WARNING none back * TYPE_CONFIRMATION cancel back * TYPE_STOP none back * -------------------------------------
*/
int nTypeButton;
if ( ( strUrl != null ) && !strUrl.equals( "" ) )
{
switch( nMessageType )
{
case SiteMessage.TYPE_QUESTION:
case SiteMessage.TYPE_CONFIRMATION:
nTypeButton = SiteMessage.TYPE_BUTTON_CANCEL;
break;
default:
nTypeButton = SiteMessage.TYPE_BUTTON_HIDDEN;
break;
}
}
else
{
nTypeButton = SiteMessage.TYPE_BUTTON_BACK;
}
return nTypeButton;
}
}