001: /**********************************************************************************
002: * $URL: https://source.sakaiproject.org/svn/portal/trunk/portal-render-engine-impl/impl/src/java/org/sakaiproject/portal/charon/velocity/VelocityPortalRenderContext.java $
003: * $Id: PortletRegistry.java 29143 2007-04-19 01:10:38Z ajpoland@iupui.edu $
004: ***********************************************************************************
005: *
006: * Copyright (c) 2005, 2006 The Sakai Foundation.
007: *
008: * Licensed under the Educational Community License, Version 1.0 (the "License");
009: * you may not use this file except in compliance with the License.
010: * You may obtain a copy of the License at
011: *
012: * http://www.opensource.org/licenses/ecl1.php
013: *
014: * Unless required by applicable law or agreed to in writing, software
015: * distributed under the License is distributed on an "AS IS" BASIS,
016: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: * See the License for the specific language governing permissions and
018: * limitations under the License.
019: *
020: **********************************************************************************/package org.sakaiproject.portal.render.portlet;
021:
022: import java.util.HashMap;
023: import java.util.Map;
024: import java.util.Properties;
025:
026: import org.sakaiproject.portal.api.PortalService;
027: import org.sakaiproject.portal.render.api.ToolRenderException;
028: import org.sakaiproject.site.api.ToolConfiguration;
029: import org.sakaiproject.tool.api.Placement;
030:
031: /**
032: * A cache of all portlets windows.
033: *
034: * @since Sakai 2.2.4
035: * @version $Rev: 29143 $
036: */
037: public class PortletRegistry {
038:
039: /**
040: * Map of all portlet windows within the portal.
041: */
042: private Map<String, SakaiPortletWindow> portletWindows;
043:
044: public PortletRegistry() {
045: this .portletWindows = new HashMap<String, SakaiPortletWindow>();
046: }
047:
048: /**
049: * Retrieve the portlet window for the specified placement.
050: *
051: * @param placement
052: * @return
053: * @throws ToolRenderException
054: */
055: public SakaiPortletWindow getOrCreatePortletWindow(
056: Placement placement) throws ToolRenderException {
057: if (!portletWindows.containsKey(placement.getId())) {
058: createPortletWindow(placement);
059: }
060: return getPortletWindow(placement.getId());
061: }
062:
063: /**
064: * Retrieve the PortletWindow for the given id.
065: *
066: * @param placementId
067: * @return
068: */
069: public SakaiPortletWindow getPortletWindow(String placementId) {
070: return portletWindows.get(placementId);
071: }
072:
073: private void createPortletWindow(Placement placement)
074: throws ToolRenderException {
075: SakaiPortletConfig pc = new SakaiPortletConfig(placement);
076: if (!pc.isPortletConfig()) {
077: return;
078: }
079: String windowId = placement.getId();
080: SakaiPortletWindow window = new SakaiPortletWindow(windowId,
081: pc.contextPath, pc.portletName);
082: portletWindows.put(windowId, window);
083: }
084:
085: public boolean isPortletApplication(Placement placement) {
086: SakaiPortletConfig pc = new SakaiPortletConfig(placement);
087: return pc.isPortletConfig();
088: }
089:
090: public class SakaiPortletConfig {
091: private String portletName = null;
092:
093: private String contextPath = null;
094:
095: private boolean portlet = false;
096:
097: public SakaiPortletConfig(Placement placement) {
098: if (placement == null) {
099: return;
100: }
101:
102: Properties toolProperties = placement.getPlacementConfig();
103: if (toolProperties != null) {
104: contextPath = toolProperties
105: .getProperty(PortalService.TOOL_PORTLET_CONTEXT_PATH);
106: portletName = toolProperties
107: .getProperty(PortalService.TOOL_PORTLET_NAME);
108: }
109: Properties configProperties = placement.getConfig();
110: if (configProperties != null) {
111: if (isEmpty(contextPath)) {
112: contextPath = configProperties
113: .getProperty(PortalService.TOOL_PORTLET_CONTEXT_PATH);
114: }
115: if (isEmpty(portletName)) {
116: portletName = configProperties
117: .getProperty(PortalService.TOOL_PORTLET_NAME);
118: }
119: }
120: portlet = !(isEmpty(contextPath) || isEmpty(portletName));
121:
122: }
123:
124: public boolean isPortletConfig() {
125: return portlet;
126: }
127:
128: }
129:
130: private static boolean isEmpty(String string) {
131: return string == null || string.trim().length() == 0;
132:
133: }
134:
135: public void reset(ToolConfiguration configuration) {
136: portletWindows.remove(configuration.getId());
137: }
138: }
|