Package org.apache.pluto.driver.services.impl.resource

Source Code of org.apache.pluto.driver.services.impl.resource.SupportedWindowStateServiceImpl

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.pluto.driver.services.impl.resource;

import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import javax.portlet.WindowState;
import javax.servlet.ServletContext;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.pluto.container.PortletContainerException;
import org.apache.pluto.container.driver.PlutoServices;
import org.apache.pluto.container.driver.PortletRegistryService;
import org.apache.pluto.container.om.portlet.CustomWindowState;
import org.apache.pluto.container.om.portlet.PortletApplicationDefinition;
import org.apache.pluto.driver.config.DriverConfigurationException;
import org.apache.pluto.driver.services.portal.PortletWindowConfig;
import org.apache.pluto.driver.services.portal.PropertyConfigService;
import org.apache.pluto.driver.services.portal.SupportedWindowStateService;

public class SupportedWindowStateServiceImpl implements
        SupportedWindowStateService
{
   
    /** Logger **/
    private static final Logger LOG = LoggerFactory.getLogger(SupportedWindowStateServiceImpl.class);
   
    /**
     * Servlet context used to get a handle on the portlet container
     */
    private ServletContext servletContext = null;
   
    /**
     * PropertyConfigService is injected by Spring.  We
     * use it to obtain the window states that the portal
     * supports.  It is protected only so that the unit
     * tests have access to the field.
     */
    protected PropertyConfigService propertyService = null;
   
    /**
     * PortletRegistry is obtained from the PortletContainer on
     * this service's initialization.  It is protected only
     * so that the unit tests have access to the field.
     *
     * Note that it is an optional container service, but
     * this implmentation requires it.
     */
    protected PortletRegistryService portletRegistry = null;
   
    /**
     * Contains String objects of window states supported
     * by the portal (obtained from PropertyConfigService).
     * It is protected only so that the unit tests have
     * access to the field.
     */
    protected Set portalSupportedWindowStates = new HashSet(3);
   
    /**
     * Window States that are specified in PLT.9
     */
    protected static final Set JSR168_WINDOW_STATES;
    static
    {
        JSR168_WINDOW_STATES = new HashSet(3);
        JSR168_WINDOW_STATES.add(WindowState.MAXIMIZED);
        JSR168_WINDOW_STATES.add(WindowState.MINIMIZED);
        JSR168_WINDOW_STATES.add(WindowState.NORMAL);
    }
   
    private SupportedWindowStateServiceImpl()
    {
        // this impl requires a PropertyConfigService on construction.
    }
   
    public SupportedWindowStateServiceImpl( PropertyConfigService propertyService )
    {
        this.propertyService = propertyService;
    }
   
    public boolean isWindowStateSupported(String portletId, String state)
    {
        // If the supplied window state is a JSR 168 window state,
        // we can return immediately
        if ( JSR168_WINDOW_STATES.contains(state) )
        {
            return true;
        }
       
        // Otherwise we need to check for custom window states
       
        return isWindowStateSupportedByPortal(state) &&
            isWindowStateSupportedByPortlet(portletId, state);
    }

    public boolean isWindowStateSupportedByPortal(String state)
    {
        return portalSupportedWindowStates.contains(state);
    }

    public boolean isWindowStateSupportedByPortlet(String portletId, String state)
    {       
        if ( portletId == null ||
             state == null ||
             portletId.trim().equals("") ||
             state.trim().equals(""))
        {
            StringBuffer errMsg = new StringBuffer( "Cannot determine supported window " +
                "states for portletId [" + portletId + "] and window state [" + state + "].  " );
            String msg = errMsg.append( "One or both of the arguments is empty or null." ).toString();
            LOG.error(msg);
            throw new IllegalArgumentException(msg);
        }
       
        // We can short-circut the registry lookup if the window state is
        // one from PLT.9
        if ( JSR168_WINDOW_STATES.contains(new WindowState(state)) )
        {
            return true;
        }
       
        // If the supplied window state isn't a JSR 168 window state,
        // we look to see if it is a custom window state.
       
        String appId = PortletWindowConfig.parseContextPath(portletId);
        String applicationName = appId;
        if (applicationName.length() >0 )
        {
            applicationName = applicationName.substring(1);
        }
        PortletApplicationDefinition portletAppDD = null;
       
        if (portletRegistry == null)
        {                       
            portletRegistry = getPortletRegistryService();
            if ( portletRegistry == null )
            {
                return false;
            }
        }
       
        try
        {
            portletAppDD = portletRegistry.getPortletApplication(applicationName);
        }
        catch ( PortletContainerException e )
        {
            StringBuffer errMsg = new StringBuffer( "Cannot determine supported window " +
                    "states for portletId [" + portletId + "] and window state [" + state + "].  " );
            String msg = errMsg.append( "Unable to access the Portlet Registry Service." ).toString();
            LOG.error( msg, e );
        }
       
        List customWindowStates = portletAppDD.getCustomWindowStates();
        if ( customWindowStates != null )
        {
            for ( Iterator i = customWindowStates.iterator(); i.hasNext(); )
            {
                CustomWindowState customState = (CustomWindowState)i.next();
                if ( customState.getWindowState().equals(state))
                {
                    return true;
                }
            }
        }
       
        return false;
    }

    public void destroy() throws DriverConfigurationException
    {
        LOG.debug( "Destroying SupportedWindowStateService... " );
        portletRegistry = null;
        propertyService = null;
        portalSupportedWindowStates = null;
        LOG.debug( "SupportedWindowStateService destroyed." );
    }

    public void init(ServletContext ctx) throws DriverConfigurationException
    {
        LOG.debug( "Initializing SupportedWindowStateService... " );

        servletContext = ctx;
       
        portalSupportedWindowStates = propertyService.getSupportedWindowStates();
        if ( LOG.isDebugEnabled() )
        {
            StringBuffer msg = new StringBuffer();
           
            if ( portalSupportedWindowStates != null )
            {
                msg.append( "Portal supports [" + portalSupportedWindowStates.size() + "] window states.  ");
                for ( Iterator i = portalSupportedWindowStates.iterator(); i.hasNext(); )
                {
                    msg.append( "[" + i.next() + "]" );
                    if ( i.hasNext() )
                    {
                        msg.append(", ");
                    }
                }
                LOG.debug(msg.toString());
            }   
        }
       
        if ( portalSupportedWindowStates == null )
        {
            final String msg = "Portal supported window states is null!";
            LOG.error( msg );
            throw new DriverConfigurationException( msg );
        }
        LOG.debug( "SupportedWindowStateService initialized." );       
    }

    private PortletRegistryService getPortletRegistryService()
    {
        return PlutoServices.getServices().getPortletRegistryService();
    }
}
TOP

Related Classes of org.apache.pluto.driver.services.impl.resource.SupportedWindowStateServiceImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.