001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.jetspeed.services.information;
018:
019: import java.util.Iterator;
020: import java.util.HashSet;
021: import javax.servlet.ServletConfig;
022: import javax.servlet.http.HttpServletRequest;
023: import javax.portlet.WindowState;
024: import javax.portlet.PortletMode;
025:
026: import org.apache.pluto.services.information.DynamicInformationProvider;
027: import org.apache.pluto.services.information.PortletActionProvider;
028: import org.apache.pluto.services.information.ResourceURLProvider;
029: import org.apache.pluto.om.window.PortletWindow;
030: import org.apache.pluto.services.information.PortletURLProvider;
031: import org.apache.jetspeed.container.state.MutableNavigationalState;
032: import org.apache.jetspeed.container.state.NavigationalState;
033: import org.apache.jetspeed.engine.core.PortletActionProviderImpl;
034: import org.apache.jetspeed.request.RequestContext;
035: import org.apache.jetspeed.request.RequestContextComponent;
036: import org.apache.jetspeed.Jetspeed;
037:
038: /**
039: * Provides dynamic information to Pluto Container:
040: *
041: * 1. getPortletURL
042: * 2. getRequestMimetype
043: * 3. getResponseMimetype
044: * 4. getResponseMimetypes
045: * 5. getPortletMode
046: * 6. getPreviousPortletMode
047: * 7. getWindowState
048: * 8. getPreviousWindowState
049: * 9. isPortletModeAllowed
050: * 10. isWindowStateAllowed
051: * 11. getSupportedPortletModes
052: * 12. getSupportedWindowStates
053: * 13. getAllParameters
054: *
055: * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
056: * @version $Id: DynamicInformationProviderImpl.java 517719 2007-03-13 15:05:48Z ate $
057: */
058: public class DynamicInformationProviderImpl implements
059: DynamicInformationProvider {
060: HttpServletRequest request = null;
061: ServletConfig config = null;
062:
063: RequestContext context;
064:
065: public DynamicInformationProviderImpl(HttpServletRequest request,
066: ServletConfig config) {
067: this .request = request;
068: this .config = config;
069:
070: // TODO: assemble this dependency when this provider is converted to a component
071: RequestContextComponent rcc = (RequestContextComponent) Jetspeed
072: .getComponentManager().getComponent(
073: RequestContextComponent.class);
074: this .context = rcc.getRequestContext(request);
075: }
076:
077: public PortletURLProvider getPortletURLProvider(
078: PortletWindow portletWindow) {
079: return new PortletURLProviderImpl(this .context, portletWindow);
080: }
081:
082: public String getRequestContentType() {
083: return context.getMimeType().toString();
084: }
085:
086: public String getResponseContentType() {
087: return context.getMimeType().toString();
088: }
089:
090: public Iterator getResponseContentTypes() {
091: HashSet responseMimeTypes = new HashSet(NumberOfKnownMimetypes);
092: // TODO: need to integrate with capability code
093: responseMimeTypes.add("text/html");
094:
095: return responseMimeTypes.iterator();
096: }
097:
098: public PortletMode getPortletMode(PortletWindow portletWindow) {
099: NavigationalState navState = context.getPortalURL()
100: .getNavigationalState();
101: return navState.getMode(portletWindow);
102: }
103:
104: public WindowState getWindowState(PortletWindow portletWindow) {
105: NavigationalState navState = context.getPortalURL()
106: .getNavigationalState();
107: return navState.getState(portletWindow);
108: }
109:
110: public boolean isPortletModeAllowed(PortletMode mode) {
111: return Jetspeed.getContext().isPortletModeAllowed(mode);
112: }
113:
114: public boolean isWindowStateAllowed(WindowState state) {
115: return Jetspeed.getContext().isWindowStateAllowed(state);
116: }
117:
118: public String getBasePortalURL() {
119: return context.getPortalURL().getBaseURL();
120: }
121:
122: /*
123: private Map getAllParameters(PortletWindow portletWindow)
124: {
125: Enumeration parameters = request.getParameterNames();
126:
127: Map portletParameters = new HashMap();
128:
129: NamespaceMapper namespaceMapper = ((NamespaceMapperFactory) Jetspeed.getComponentManager().getComponent(
130: org.apache.pluto.util.NamespaceMapper.class)).getNamespaceMapper();
131: while (parameters.hasMoreElements())
132: {
133: String name = (String)parameters.nextElement();
134:
135: String portletParameter = namespaceMapper.decode(portletWindow.getId(),name);
136:
137: if (portletParameter!=null) // it is in the portlet's namespace
138: {
139: portletParameters.put(portletParameter, request.getParameterValues(name) );
140: }
141: }
142:
143: PortalURL url = context.getPortalURL();
144:
145: Iterator iterator = url.getNavigationalState().getParameterNames(portletWindow);
146: while (iterator.hasNext())
147: {
148: String name = (String)iterator.next();
149:
150: String[] values = url.getNavigationalState().getParameterValues(portletWindow, name);
151:
152: portletParameters.put(name, values );
153:
154: }
155:
156: return portletParameters;
157: }
158: */
159:
160: private final static int NumberOfKnownMimetypes = 15;
161:
162: /**
163: * <p>
164: * getPortletActionProvider
165: * </p>
166: *
167: * @see org.apache.pluto.services.information.DynamicInformationProvider#getPortletActionProvider(org.apache.pluto.om.window.PortletWindow)
168: * @param arg0
169: * @return
170: */
171: public PortletActionProvider getPortletActionProvider(
172: PortletWindow window) {
173: return new PortletActionProviderImpl(
174: (MutableNavigationalState) context.getPortalURL()
175: .getNavigationalState(), window);
176: }
177:
178: /**
179: * <p>
180: * getResourceURLProvider
181: * </p>
182: *
183: * @see org.apache.pluto.services.information.DynamicInformationProvider#getResourceURLProvider(org.apache.pluto.om.window.PortletWindow)
184: * @param arg0
185: * @return
186: */
187: public ResourceURLProvider getResourceURLProvider(
188: PortletWindow window) {
189:
190: return new ResourceURLProviderImpl(this.context, window);
191: }
192:
193: }
|