1 /* 2 * Copyright (c) 2002-2017, Mairie de Paris 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright notice 10 * and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright notice 13 * and the following disclaimer in the documentation and/or other materials 14 * provided with the distribution. 15 * 16 * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its 17 * contributors may be used to endorse or promote products derived from 18 * this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE 24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 * 32 * License 1.0 33 */ 34 package fr.paris.lutece.plugins.jsr168.pluto; 35 36 import fr.paris.lutece.portal.service.util.AppLogService; 37 38 import org.apache.pluto.portalImpl.om.window.impl.PortletWindowImpl; 39 40 import java.util.HashMap; 41 import java.util.Map; 42 43 import javax.servlet.http.HttpServletRequest; 44 import javax.servlet.http.HttpSession; 45 46 47 /** 48 * Unique class present in {@link javax.servlet.http.HttpSession} instance 49 * associated to user. 50 */ 51 public final class PlutoSession 52 { 53 /** 54 * Portlets Window defined for the user (a portlet window 55 * contains the definition of the portlet, current state, 56 * current mode...) 57 */ 58 private final Map _mapPortletWindow; 59 60 /** 61 * Default private constructor, PlutoSession is build 62 * by {@link #findSession(HttpServletRequest)} call. 63 */ 64 private PlutoSession( ) 65 { 66 _mapPortletWindow = new HashMap( ); 67 } 68 69 /** 70 * Return a portlet window associated to a portlet ID. 71 * 72 * @param strPortletId The portlet ID (Lutece ID) of the portlet window asked 73 * @return The portlet window associated to this servlet 74 */ 75 public synchronized PortletWindowImpl getPortletWindow( String strPortletId ) 76 { 77 PortletWindowImpl portletWindow = (PortletWindowImpl) _mapPortletWindow.get( strPortletId ); 78 79 if ( portletWindow == null ) 80 { 81 portletWindow = new PortletWindowImpl( strPortletId ); 82 _mapPortletWindow.put( strPortletId, portletWindow ); 83 } 84 85 AppLogService.debug( "JSR168 / BEGIN Portlet Window acceded (lutece ID [" + strPortletId + "]; " + 86 portletWindow.getRenderParameters( ) ); 87 88 return portletWindow; 89 } 90 91 /** 92 * Return the current Pluto session (for current user request) 93 * 94 * @param request Current user HTTP resquest 95 * @return The <code>PlutoSession</code> associated with this session 96 */ 97 public static PlutoSession findSession( final HttpServletRequest request ) 98 { 99 HttpSession session = request.getSession( ); 100 101 synchronized ( session ) 102 { 103 PlutoSession plutoSession = (PlutoSession) session.getAttribute( LutecePlutoConstant.LUTECEPLUTO_SESSION_PORTLET ); 104 105 if ( plutoSession == null ) 106 { 107 plutoSession = new PlutoSession( ); 108 session.setAttribute( LutecePlutoConstant.LUTECEPLUTO_SESSION_PORTLET, plutoSession ); 109 } 110 111 return plutoSession; 112 } 113 } 114 }