/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * 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 the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>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.apereo.portal.portlet.registry; import java.util.List; import javax.servlet.ServletContext; import org.apache.commons.lang.Validate; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.pluto.container.PortletContainerException; import org.apache.pluto.container.driver.PortalDriverContainerServices; import org.apache.pluto.container.driver.PortletRegistryService; import org.apache.pluto.container.om.portlet.PortletApplicationDefinition; import org.apache.pluto.container.om.portlet.PortletDefinition; import org.apereo.portal.concurrency.caching.RequestCache; import org.apereo.portal.portlet.dao.IPortletDefinitionDao; import org.apereo.portal.portlet.om.IPortletDefinition; import org.apereo.portal.portlet.om.IPortletDefinitionId; import org.apereo.portal.utils.Tuple; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.context.ServletContextAware; /** * Implementation of the definition registry, pulls together the related parts of the framework for * creation and access of {@link IPortletDefinition}s. * */ @Service("portletDefinitionRegistry") public class PortletDefinitionRegistryImpl implements IPortletDefinitionRegistry, ServletContextAware { protected final Log logger = LogFactory.getLog(this.getClass()); private IPortletDefinitionDao portletDefinitionDao; private PortalDriverContainerServices portalDriverContainerServices; private ServletContext servletContext; /** @return the portletDefinitionDao */ public IPortletDefinitionDao getPortletDefinitionDao() { return this.portletDefinitionDao; } /** @param portletDefinitionDao the portletDefinitionDao to set */ @Autowired public void setPortletDefinitionDao(IPortletDefinitionDao portletDefinitionDao) { this.portletDefinitionDao = portletDefinitionDao; } /** @return */ public PortalDriverContainerServices getPortalDriverContainerServices() { return portalDriverContainerServices; } /** @param portalDriverContainerServices */ @Autowired public void setPortalDriverContainerServices( PortalDriverContainerServices portalDriverContainerServices) { this.portalDriverContainerServices = portalDriverContainerServices; } /* (non-Javadoc) * @see org.springframework.web.context.ServletContextAware#setServletContext(javax.servlet.ServletContext) */ @Override public void setServletContext(ServletContext servletContext) { this.servletContext = servletContext; } /* (non-Javadoc) * @see org.apereo.portal.portlet.registry.IPortletDefinitionRegistry#getPortletDefinition(org.apereo.portal.portlet.om.IPortletDefinitionId) */ @Override public IPortletDefinition getPortletDefinition(IPortletDefinitionId portletDefinitionId) { Validate.notNull(portletDefinitionId, "portletDefinitionId can not be null"); return this.portletDefinitionDao.getPortletDefinition(portletDefinitionId); } @Override public IPortletDefinition getPortletDefinition(String portletDefinitionIdString) { Validate.notNull(portletDefinitionIdString, "portletDefinitionId can not be null"); return this.portletDefinitionDao.getPortletDefinition(portletDefinitionIdString); } @Override public IPortletDefinition getPortletDefinitionByFname(String fname) { Validate.notNull(fname, "portletFname can not be null"); return this.portletDefinitionDao.getPortletDefinitionByFname(fname); } @Override @RequestCache public IPortletDefinition getPortletDefinitionByName(String name) { Validate.notNull(name, "portletFname can not be null"); return this.portletDefinitionDao.getPortletDefinitionByName(name); } @Override public List<IPortletDefinition> searchForPortlets(String term, boolean allowPartial) { return this.portletDefinitionDao.searchForPortlets(term, allowPartial); } @Override public List<IPortletDefinition> getAllPortletDefinitions() { return this.portletDefinitionDao.getPortletDefinitions(); } /* (non-Javadoc) * @see org.apereo.portal.portlet.registry.IPortletDefinitionRegistry#savePortletDefinition(org.apereo.portal.portlet.om.IPortletDefinition) */ @Override public IPortletDefinition savePortletDefinition(IPortletDefinition portletDefinition) { Validate.notNull(portletDefinition, "portletDefinition can not be null"); return this.portletDefinitionDao.savePortletDefinition(portletDefinition); } /* (non-Javadoc) * @see org.apereo.portal.portlet.registry.IPortletDefinitionRegistry#getParentPortletApplicationDescriptor(org.apereo.portal.portlet.om.IPortletDefinitionId) */ @Override public PortletApplicationDefinition getParentPortletApplicationDescriptor( IPortletDefinitionId portletDefinitionId) { final IPortletDefinition portletDefinition = this.getPortletDefinition(portletDefinitionId); if (portletDefinition == null) { return null; } final Tuple<String, String> portletDescriptorKeys = this.getPortletDescriptorKeys(portletDefinition); final PortletRegistryService portletRegistryService = this.portalDriverContainerServices.getPortletRegistryService(); try { return portletRegistryService.getPortletApplication(portletDescriptorKeys.first); } catch (PortletContainerException e) { this.logger.warn( "No portlet application descriptor could be found likely not deplotyed. For portlet definition: " + portletDefinition, e); return null; } } /* (non-Javadoc) * @see org.apereo.portal.portlet.registry.IPortletDefinitionRegistry#getParentPortletDescriptor(org.apereo.portal.portlet.om.IPortletDefinitionId) */ @Override public PortletDefinition getParentPortletDescriptor(IPortletDefinitionId portletDefinitionId) { final IPortletDefinition portletDefinition = this.getPortletDefinition(portletDefinitionId); if (portletDefinition == null) { return null; } final Tuple<String, String> portletDescriptorKeys = this.getPortletDescriptorKeys(portletDefinition); final PortletRegistryService portletRegistryService = this.portalDriverContainerServices.getPortletRegistryService(); try { return portletRegistryService.getPortlet( portletDescriptorKeys.first, portletDescriptorKeys.second); } catch (PortletContainerException e) { if (this.logger.isDebugEnabled()) { this.logger.warn( "No portlet descriptor could be found for the portlet definition, null will be returned: " + portletDefinition, e); } else { this.logger.warn( "No portlet descriptor could be found for the portlet definition, null will be returned: " + portletDefinition + " Enable DEBUG for stack trace."); } return null; } } /** * Get the portletApplicationId and portletName for the specified channel definition id. The * portletApplicationId will be {@link Tuple#first} and the portletName will be {@link * Tuple#second} */ @Override public Tuple<String, String> getPortletDescriptorKeys(IPortletDefinition portletDefinition) { final String portletApplicationId; if (portletDefinition.getPortletDescriptorKey().isFrameworkPortlet()) { portletApplicationId = this.servletContext.getContextPath(); } else { portletApplicationId = portletDefinition.getPortletDescriptorKey().getWebAppName(); } final String portletName = portletDefinition.getPortletDescriptorKey().getPortletName(); return new Tuple<String, String>(portletApplicationId, portletName); } }