⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 supportedmodesserviceimpl.java.svn-base

📁 portal越来越流行了
💻 SVN-BASE
字号:
/* * 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.Set;import javax.portlet.PortletConfig;import javax.portlet.PortletMode;import javax.servlet.ServletContext;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.pluto.PortletContainer;import org.apache.pluto.PortletContainerException;import org.apache.pluto.descriptors.portlet.CustomPortletModeType;import org.apache.pluto.driver.AttributeKeys;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.SupportedModesService;import org.apache.pluto.om.portlet.PortletDefinition;import org.apache.pluto.om.portlet.PortletApplicationDefinition;import org.apache.pluto.om.portlet.Supports;import org.apache.pluto.services.PlutoServices;import org.apache.pluto.spi.optional.PortletContextService;import org.apache.pluto.spi.optional.PortletRegistryService;/** * Allows clients to determine if a particular PortletMode is supported * by the portal, a particular portlet, or both. * * This implementation depends on {@link PropertyConfigService}. * * The service implementations are injected by Spring. * * @version $Id$ * @since September 9, 2006 */public class SupportedModesServiceImpl implements SupportedModesService{    /** Logger */    private static final Log LOG = LogFactory.getLog(SupportedModesServiceImpl.class);        /** PortletMode objects supported by the portal */    private Set<PortletMode> supportedPortletModesByPortal = new HashSet<PortletMode>();    /** PortletRegistryService used to obtain PortletApplicationConfig objects */    private PortletRegistryService portletRegistry;    /** PropertyConfig Service used to obtain supported portal modes */    private PropertyConfigService propertyService;    /** The portal's servletContext **/    private ServletContext servletContext;        private PortletContextService portletContextService;    /**     * Constructs a SupportedModesService with its dependencies.     *     * @param propertyService the PropertyConfigService     */    public SupportedModesServiceImpl(PropertyConfigService propertyService) {        this.propertyService = propertyService;    }    //  SupportedModesService Implementation -----------------    public boolean isPortletModeSupported(String portletId, String mode)  {        return (isPortletModeSupportedByPortal(mode) &&            isPortletModeSupportedByPortlet(portletId, mode)            || isPortletManagedMode(portletId, mode));    }    public boolean isPortletModeSupportedByPortal(String mode)  {        return supportedPortletModesByPortal.contains(new PortletMode(mode));    }    public boolean isPortletModeSupportedByPortlet(String portletId, String mode) {        String applicationId = PortletWindowConfig.parseContextPath(portletId);        String applicationName = applicationId;        if (applicationName.length() >0 )        {            applicationName = applicationName.substring(1);        }        String portletName = PortletWindowConfig.parsePortletName(portletId);        // since SupportedModesService is consulted per portal portal mode per portlet        // per render request, store a reference to the registry instead of looking        // it up each time.  Is this premature optimization?        if (portletRegistry == null) {            portletRegistry = ((PortletContainer)servletContext                    .getAttribute(AttributeKeys.PORTLET_CONTAINER))                    .getOptionalContainerServices()                    .getPortletRegistryService();        }        try {            if (portletRegistry == null) {                LOG.error("Optional Portlet Registry Service not found.");                throw new PortletContainerException("Optional Portlet Registry Service not found.");            }            PortletApplicationDefinition ctx = portletRegistry.getPortletApplication(applicationName);            Iterator i = ctx.getPortlets().iterator();            while(i.hasNext()) {                PortletDefinition dd = (PortletDefinition)i.next();                if(portletName.equals(dd.getPortletName())) {                    Iterator i2 = dd.getSupports().iterator();                    while(i2.hasNext()) {                        Supports sd = (Supports)i2.next();                        if (sd.getPortletModes()==null){                        	if (mode.equalsIgnoreCase(PortletMode.VIEW.toString()))                        		return true;                        }                        else{	                        Iterator pd = sd.getPortletModes().iterator();	                        while(pd.hasNext()) {	                            if(mode.equalsIgnoreCase((String)pd.next())) {	                                return true;	                            }	                        }                        }                    }                }            }        } catch (PortletContainerException e) {            LOG.error("Error determining mode support.", e);        }        LOG.info("Portlet mode '"+mode+"' not found for portletId: '"+portletId+"'");        return false;    }    // DriverConfiguration Lifecycle Implementation ---------    public void destroy() throws DriverConfigurationException    {        LOG.debug("Destroying Supported Modes Service...");        supportedPortletModesByPortal = null;        portletRegistry = null;        propertyService = null;        LOG.debug("Supported Modes Service destroyed.");    }    public void init(ServletContext ctx) throws DriverConfigurationException {        this.servletContext = ctx;        this.portletContextService = portletContextService = PlutoServices.getServices().getPortletContextService();        loadPortalModes();    }            /** Populates the supportedPortletModesByPortal set. */    private void loadPortalModes()    {        // Add the PortletModes supported by the portal to the        // supportedPortletModesByPortal set.        LOG.debug("Loading supported portal modes...");        Iterator modes = propertyService.getSupportedPortletModes().iterator();        while (modes.hasNext()) {            String mode = (String) modes.next();            LOG.debug("Loading mode [" + mode + "]");            supportedPortletModesByPortal.add(new PortletMode(mode));        }        LOG.debug("Loaded [" + supportedPortletModesByPortal.size() + "] supported portal modes");    }    	public boolean isPortletManagedMode(String portletId, String mode) {		if (portletRegistry == null) {            portletRegistry = ((PortletContainer)servletContext                    .getAttribute(AttributeKeys.PORTLET_CONTAINER))                    .getOptionalContainerServices()                    .getPortletRegistryService();        }        //                //        String applicationId = PortletWindowConfig.parseContextPath(portletId);        String applicationName = applicationId;        if (applicationName.length() > 0 )        {            applicationName = applicationName.substring(1);        }        try {			PortletApplicationDefinition portletApp = portletRegistry.getPortletApplication(applicationName);            Iterator customModes = portletApp.getCustomPortletModes().iterator();            while (customModes.hasNext()) {				CustomPortletModeType customMode = (CustomPortletModeType)customModes.next();				boolean isPortletManagedMode = !customMode.isPortalManaged(); 				if (isPortletManagedMode && customMode.getPortletMode().equalsIgnoreCase(mode)) {					return true;				}			}		} catch (PortletContainerException e) {            LOG.error("Error determining portlet managed mode support, so we assume that it is false.", e);		}				return false;	}	/**	 * Gets all modes supported by a portlet that are defined in the portlet's supports child element 	 * in portlet.xml.	 * 	 * @param portlet of interest.	 * @return all portlet modes supported by a portlet.	 */	public Set<PortletMode> getSupportedPortletModes(String portletId) throws PortletContainerException {		Set<PortletMode> modeSet = new HashSet<PortletMode>();	       String applicationId = PortletWindowConfig.parseContextPath(portletId);	        String applicationName = applicationId;	        if (applicationName.length() >0 )	        {	            applicationName = applicationName.substring(1);	        }	        String portletName = PortletWindowConfig.parsePortletName(portletId);	        // since SupportedModesService is consulted per portal portal mode per portlet	        // per render request, store a reference to the registry instead of looking	        // it up each time.  Is this premature optimization?	        if (portletRegistry == null) {	            portletRegistry = ((PortletContainer)servletContext	                    .getAttribute(AttributeKeys.PORTLET_CONTAINER))	                    .getOptionalContainerServices()	                    .getPortletRegistryService();	        }            if (portletRegistry == null) {                LOG.error("Optional Portlet Registry Service not found.");                throw new PortletContainerException("Optional Portlet Registry Service not found.");            }            PortletApplicationDefinition portletApp = portletRegistry.getPortletApplication(applicationName);            Iterator i =  portletApp.getPortlets().iterator();            while(i.hasNext()) {                PortletDefinition dd = (PortletDefinition)i.next();                if(portletName.equals(dd.getPortletName())) {                    Iterator i2 = dd.getSupports().iterator();                    while(i2.hasNext()) {                        Supports sd = (Supports)i2.next();                        if (sd.getPortletModes()== null){                        	modeSet.add(PortletMode.VIEW);                        }                        else{	                        Iterator<String> pd = sd.getPortletModes().iterator();	                        while(pd.hasNext()) {	                        	modeSet.add(new PortletMode(pd.next()));	                        }                        }                    }                }            }		return modeSet;	}		public PortletConfig getPortletConfig(String portletId) throws PortletContainerException {	       String applicationId = PortletWindowConfig.parseContextPath(portletId);	        String applicationName = applicationId;	        if (applicationName.length() >0 )	        {	            applicationName = applicationName.substring(1);	        }	        String portletName = PortletWindowConfig.parsePortletName(portletId);	        if (portletRegistry == null) {	            portletRegistry = ((PortletContainer)servletContext	                    .getAttribute(AttributeKeys.PORTLET_CONTAINER))	                    .getOptionalContainerServices()	                    .getPortletRegistryService();	        }	        		return portletContextService.getPortletConfig(applicationName, portletName);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -