You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-scm@portals.apache.org by dd...@apache.org on 2005/11/19 21:24:05 UTC
svn commit: r345682 - in /portals/pluto/trunk:
pluto-container/src/main/java/org/apache/pluto/core/
pluto-container/src/main/java/org/apache/pluto/core/impl/
pluto-container/src/resources/properties/org/apache/pluto/core/impl/
pluto-util/src/main/java/...
Author: ddewolf
Date: Sat Nov 19 12:23:55 2005
New Revision: 345682
URL: http://svn.apache.org/viewcvs?rev=345682&view=rev
Log:
Resolving Action Parameter/Session issue. CrossContext dispatched reques (not cached request) must be used for Portlet backing
Modified:
portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/InternalPortletRequest.java
portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/PortletServlet.java
portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/ActionRequestImpl.java
portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/PortletRequestImpl.java
portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/PortletSessionImpl.java
portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/RenderRequestImpl.java
portals/pluto/trunk/pluto-container/src/resources/properties/org/apache/pluto/core/impl/LocalStrings.properties
portals/pluto/trunk/pluto-util/src/main/java/org/apache/pluto/util/install/impl/FileSystemInstaller.java
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/InternalPortletRequest.java
URL: http://svn.apache.org/viewcvs/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/InternalPortletRequest.java?rev=345682&r1=345681&r2=345682&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/InternalPortletRequest.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/InternalPortletRequest.java Sat Nov 19 12:23:55 2005
@@ -29,6 +29,8 @@
void setPortletContext(PortletContext context);
+ void setServiceRequest(HttpServletRequest req);
+
InternalPortletWindow getInternalPortletWindow();
PortletContainer getPortletContainer();
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/PortletServlet.java
URL: http://svn.apache.org/viewcvs/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/PortletServlet.java?rev=345682&r1=345681&r2=345682&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/PortletServlet.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/PortletServlet.java Sat Nov 19 12:23:55 2005
@@ -150,7 +150,7 @@
request.getAttribute(Constants.PORTLET_RESPONSE);
pRequest.setPortletContext(portletContext);
-
+ pRequest.setServiceRequest(request);
if (method_id == org.apache.pluto.Constants.METHOD_RENDER) {
RenderRequestImpl renderRequest =
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/ActionRequestImpl.java
URL: http://svn.apache.org/viewcvs/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/ActionRequestImpl.java?rev=345682&r1=345681&r2=345682&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/ActionRequestImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/ActionRequestImpl.java Sat Nov 19 12:23:55 2005
@@ -58,7 +58,7 @@
* @see org.apache.pluto.core.InternalActionResponse#getPortletInputStream()
*/
public InputStream getPortletInputStream() throws java.io.IOException {
- javax.servlet.http.HttpServletRequest servletRequest = (javax.servlet.http.HttpServletRequest) super.getRequest();
+ HttpServletRequest servletRequest = (HttpServletRequest) getRequest();
if (servletRequest.getMethod().equals("POST")) {
String contentType = servletRequest.getContentType();
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/PortletRequestImpl.java
URL: http://svn.apache.org/viewcvs/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/PortletRequestImpl.java?rev=345682&r1=345681&r2=345682&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/PortletRequestImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/PortletRequestImpl.java Sat Nov 19 12:23:55 2005
@@ -15,6 +15,8 @@
*/
package org.apache.pluto.core.impl;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.pluto.PortletContainer;
import org.apache.pluto.core.InternalPortletRequest;
import org.apache.pluto.core.InternalPortletWindow;
@@ -24,32 +26,59 @@
import org.apache.pluto.descriptors.portlet.SupportsDD;
import org.apache.pluto.util.Enumerator;
import org.apache.pluto.util.NamespaceMapper;
+import org.apache.pluto.util.StringManager;
import org.apache.pluto.util.StringUtils;
import org.apache.pluto.util.impl.NamespaceMapperImpl;
-import javax.portlet.*;
+import javax.portlet.PortalContext;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletMode;
+import javax.portlet.PortletPreferences;
+import javax.portlet.PortletRequest;
+import javax.portlet.PortletSession;
+import javax.portlet.WindowState;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpSession;
import java.io.BufferedReader;
-import java.util.*;
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.Vector;
+import java.util.Locale;
+import java.security.Principal;
/**
* Abstract <code>javax.portlet.PortletRequest</code> implementation.
* This class also implements InternalPortletRequest.
- *
+ *
* @author <a href="mailto:ddewolf@apache.org">David H. DeWolf</a>
* @author <a href="mailto:zheng@apache.org">ZHENG Zhong</a>
*/
public abstract class PortletRequestImpl extends HttpServletRequestWrapper
-implements PortletRequest, InternalPortletRequest {
-
- // Private Member Variables ------------------------------------------------
-
- /** The parent container within which this request was created. */
+ implements PortletRequest, InternalPortletRequest {
+
+ private static final StringManager EXCEPTIONS =
+ StringManager.getManager(PortletRequestImpl.class.getPackage().getName());
+
+ private static final Log LOG =
+ LogFactory.getLog(PortletRequestImpl.class);
+
+ /**
+ * The parent container within which this request was created.
+ */
private PortletContainer container = null;
- /** The portlet window which is the target of this portlet request. */
+ /**
+ * The portlet window which is the target of this portlet request.
+ */
private InternalPortletWindow internalPortletWindow = null;
/**
@@ -58,18 +87,26 @@
*/
private PortletContext portletContext = null;
- /** The PortalContext within which this request is occuring. */
+ /**
+ * The PortalContext within which this request is occuring.
+ */
private PortalContext portalContext = null;
- /** Holds the portlet session. */
+ /**
+ * Holds the portlet session.
+ */
private PortletSession portletSession = null;
- /** Response content types. */
+ /**
+ * Response content types.
+ */
private Vector contentTypes = null;
private NamespaceMapper mapper = new NamespaceMapperImpl();
- /** Flag indicating if the HTTP-Body has been accessed. */
+ /**
+ * Flag indicating if the HTTP-Body has been accessed.
+ */
private boolean bodyAccessed = false;
/**
@@ -77,21 +114,21 @@
* FIXME: the included flag should only exist for a render request.
*/
private boolean included = false;
-
-
+
// Constructors ------------------------------------------------------------
-
+
public PortletRequestImpl(InternalPortletRequest internalPortletRequest) {
this(internalPortletRequest.getPortletContainer(),
- internalPortletRequest.getInternalPortletWindow(),
- internalPortletRequest.getHttpServletRequest());
+ internalPortletRequest.getInternalPortletWindow(),
+ internalPortletRequest.getHttpServletRequest());
}
-
+
/**
* Create a PortletRequestImpl instance.
- * @param container the portlet container.
- * @param internalPortletWindow the internal portlet window.
- * @param servletRequest the underlying servlet request.
+ *
+ * @param container the portlet container.
+ * @param internalPortletWindow the internal portlet window.
+ * @param servletRequest the underlying servlet request.
*/
public PortletRequestImpl(PortletContainer container,
InternalPortletWindow internalPortletWindow,
@@ -102,12 +139,12 @@
this.portalContext = container.getContainerServices().getPortalContext();
}
-
// javax.portlet.PortletRequest Impl ---------------------------------------
-
+
/**
* Determine whether or not the specified WindowState is allowed for this
* portlet.
+ *
* @param state the state in question
* @return true if the state is allowed.
*/
@@ -115,7 +152,7 @@
Enumeration supportedStates = portalContext.getSupportedWindowStates();
while (supportedStates.hasMoreElements()) {
if (supportedStates.nextElement().toString().equals(
- state.toString())) {
+ state.toString())) {
return true;
}
}
@@ -125,7 +162,7 @@
public boolean isPortletModeAllowed(PortletMode mode) {
return (isPortletModeAllowedByPortlet(mode)
- && isPortletModeAllowedByPortal(mode));
+ && isPortletModeAllowedByPortal(mode));
}
public PortletMode getPortletMode() {
@@ -144,41 +181,47 @@
}
public PortletSession getPortletSession(boolean create) {
- // check if the session was invalidated.
- HttpSession httpSession = this.getHttpServletRequest()
- .getSession(false);
-
- if (portletSession != null && httpSession == null) {
- portletSession = null;
- } else if (httpSession != null) {
- create = true;
- }
-
- if (create && portletSession == null) {
- httpSession = this.getHttpServletRequest().getSession(create);
- if (httpSession != null) {
- portletSession = new PortletSessionImpl(portletContext,
- internalPortletWindow,
- httpSession);
- }
+ //
+ // It is critical that we don't retrieve the
+ // portlet session until the cross context
+ // dispatch has been completed. If we do
+ // then we risk having a cached version which
+ // is invalid for the context within which it
+ // exists.
+ //
+ if (portletContext == null) {
+ throw new IllegalStateException(
+ EXCEPTIONS.getString("error.session.illegalState")
+ );
}
+ HttpSession http = getHttpServletRequest().getSession(create);
+ if (http != null && portletSession == null) {
+ portletSession = new PortletSessionImpl(
+ portletContext,
+ internalPortletWindow,
+ http
+ );
+ }
return portletSession;
}
public String getProperty(String name) throws IllegalArgumentException {
if (name == null) {
- throw new IllegalArgumentException("Property name cannot be null");
+ throw new IllegalArgumentException(
+ EXCEPTIONS.getString("error.propertyName.null")
+ );
}
- // Get property value from request header.
String prop = this.getHttpServletRequest().getHeader(name);
if (prop == null) {
- // Get property value from PropertyManager
Map propertyMap = container.getContainerServices()
- .getPortalCallbackService()
- .getRequestProperties(getHttpServletRequest(),
- internalPortletWindow);
+ .getPortalCallbackService()
+ .getRequestProperties(
+ getHttpServletRequest(),
+ internalPortletWindow
+ );
+
if (propertyMap != null) {
String[] properties = (String[]) propertyMap.get(name);
if (properties != null && properties.length > 0) {
@@ -205,8 +248,8 @@
// get properties from PropertyManager
Map map = container.getContainerServices()
- .getPortalCallbackService()
- .getRequestProperties(getHttpServletRequest(), internalPortletWindow);
+ .getPortalCallbackService()
+ .getRequestProperties(getHttpServletRequest(), internalPortletWindow);
if (map != null) {
String[] properties = (String[]) map.get(name);
@@ -223,13 +266,13 @@
}
public Enumeration getPropertyNames() {
- Set v = new HashSet();
+ Set v = new HashSet();
// get properties from PropertyManager
Map map = container.getContainerServices()
.getPortalCallbackService()
.getRequestProperties(getHttpServletRequest(), internalPortletWindow);
-
+
if (map != null) {
v.addAll(map.keySet());
}
@@ -262,7 +305,7 @@
return this.getHttpServletRequest().getRemoteUser();
}
- public java.security.Principal getUserPrincipal() {
+ public Principal getUserPrincipal() {
return this.getHttpServletRequest().getUserPrincipal();
}
@@ -272,6 +315,7 @@
* within the deployment descriptor. If no mapping is available, then, and
* only then, do we check use the actual role name specified against the web
* application deployment descriptor.
+ *
* @param roleName the name of the role
* @return true if it is determined the user has the given role.
*/
@@ -281,8 +325,8 @@
SecurityRoleRefDD ref = null;
Iterator refs = def.getSecurityRoleRefs().iterator();
- while(refs.hasNext()) {
- SecurityRoleRefDD r = (SecurityRoleRefDD)refs.next();
+ while (refs.hasNext()) {
+ SecurityRoleRefDD r = (SecurityRoleRefDD) refs.next();
if (r.getRoleName().equals(roleName)) {
ref = r;
break;
@@ -301,21 +345,27 @@
public Object getAttribute(String name) {
if (name == null) {
- throw new IllegalArgumentException("Attribute name == null");
+ throw new IllegalArgumentException(
+ EXCEPTIONS.getString("error.attributeName.null")
+ );
}
- Object attribute = this.getHttpServletRequest().getAttribute(
- mapper.encode(internalPortletWindow.getId(), name));
+ String encodedName = isNameReserved(name) ?
+ name :
+ mapper.encode(internalPortletWindow.getId(), name);
+
+ Object attribute = getHttpServletRequest()
+ .getAttribute(encodedName);
if (attribute == null) {
- attribute = this.getHttpServletRequest().getAttribute(name);
+ attribute = getHttpServletRequest().getAttribute(name);
}
return attribute;
}
public Enumeration getAttributeNames() {
Enumeration attributes = this.getHttpServletRequest()
- .getAttributeNames();
+ .getAttributeNames();
Vector portletAttributes = new Vector();
@@ -323,7 +373,7 @@
String attribute = (String) attributes.nextElement();
String portletAttribute = mapper.decode(
- internalPortletWindow.getId(), attribute);
+ internalPortletWindow.getId(), attribute);
if (portletAttribute != null) { // it is in the portlet's namespace
portletAttributes.add(portletAttribute);
@@ -348,7 +398,7 @@
return null;
}
- public java.util.Enumeration getParameterNames() {
+ public Enumeration getParameterNames() {
bodyAccessed = true;
Map parameters = this.getHttpServletRequest().getParameterMap();
@@ -357,14 +407,16 @@
public String[] getParameterValues(String name) {
if (name == null) {
- throw new IllegalArgumentException("Parameter name == null");
+ throw new IllegalArgumentException(
+ EXCEPTIONS.getString("error.null", "Parameter Name ")
+ );
}
bodyAccessed = true;
String[] values = (String[]) this.getHttpServletRequest()
- .getParameterMap()
- .get(name);
+ .getParameterMap()
+ .get(name);
if (values != null) {
values = StringUtils.copy(values);
}
@@ -374,42 +426,41 @@
public Map getParameterMap() {
bodyAccessed = true;
return StringUtils.copyParameters(
- this.getHttpServletRequest().getParameterMap());
+ this.getHttpServletRequest().getParameterMap());
}
public boolean isSecure() {
return this.getHttpServletRequest().isSecure();
}
- public void setAttribute(String name, Object o) {
+ public void setAttribute(String name, Object value) {
if (name == null) {
- throw new IllegalArgumentException("Attribute name == null");
+ throw new IllegalArgumentException(
+ EXCEPTIONS.getString("error.null", "Attribute Name ")
+ );
}
- if (o == null) {
- this.removeAttribute(name);
- } else if (isNameReserved(name)) {
- // Reserved names go directly in the underlying request
- getHttpServletRequest().setAttribute(name, o);
+ String encodedName = isNameReserved(name) ?
+ name : mapper.encode(internalPortletWindow.getId(), name);
+
+ if (value == null) {
+ removeAttribute(name);
} else {
- this.getHttpServletRequest().setAttribute(
- mapper.encode(internalPortletWindow.getId(), name), o);
+ getHttpServletRequest().setAttribute(encodedName, value);
}
}
public void removeAttribute(String name) {
if (name == null) {
- throw new IllegalArgumentException("Attribute name == null");
+ throw new IllegalArgumentException(
+ EXCEPTIONS.getString("error.null", "Attribute Name ")
+ );
}
- if (isNameReserved(name)) {
- // Reserved names go directly in the underlying request.
- getHttpServletRequest().removeAttribute(name);
- } else {
- this.getHttpServletRequest().
- removeAttribute(
- mapper.encode(internalPortletWindow.getId(), name));
- }
+ String encodedName = isNameReserved(name) ?
+ name : mapper.encode(internalPortletWindow.getId(), name);
+
+ getHttpServletRequest().removeAttribute(encodedName);
}
public String getRequestedSessionId() {
@@ -422,29 +473,29 @@
public String getResponseContentType() {
Enumeration enumeration = getResponseContentTypes();
- while(enumeration.hasMoreElements()) {
- return (String)enumeration.nextElement();
+ while (enumeration.hasMoreElements()) {
+ return (String) enumeration.nextElement();
}
return "text/html";
}
public Enumeration getResponseContentTypes() {
- if(contentTypes == null) {
+ if (contentTypes == null) {
contentTypes = new Vector();
PortletDD dd = internalPortletWindow.getPortletEntity().getPortletDefinition();
Iterator supports = dd.getSupports().iterator();
- while(supports.hasNext()) {
- SupportsDD sup = (SupportsDD)supports.next();
+ while (supports.hasNext()) {
+ SupportsDD sup = (SupportsDD) supports.next();
contentTypes.add(sup.getMimeType());
}
- if(contentTypes.size() < 1) {
+ if (contentTypes.size() < 1) {
contentTypes.add("text/html");
}
}
return contentTypes.elements();
}
- public java.util.Locale getLocale() {
+ public Locale getLocale() {
return this.getHttpServletRequest().getLocale();
}
@@ -520,7 +571,7 @@
}
public BufferedReader getReader()
- throws java.io.UnsupportedEncodingException, java.io.IOException {
+ throws UnsupportedEncodingException, java.io.IOException {
if (included) {
return null;
} else {
@@ -534,16 +585,16 @@
public String getPathInfo() {
String attr = (String) super.getAttribute(
- "javax.servlet.include.path_info");
+ "javax.servlet.include.path_info");
return (attr != null) ? attr
- : super.getPathInfo();
+ : super.getPathInfo();
}
public String getQueryString() {
String attr = (String) super.getAttribute(
- "javax.servlet.include.query_string");
+ "javax.servlet.include.query_string");
return (attr != null) ? attr
- : super.getQueryString();
+ : super.getQueryString();
}
public String getPathTranslated() {
@@ -552,9 +603,9 @@
public String getRequestURI() {
String attr = (String) super.getAttribute(
- "javax.servlet.include.request_uri");
+ "javax.servlet.include.request_uri");
return (attr != null) ? attr
- : super.getRequestURI();
+ : super.getRequestURI();
}
public StringBuffer getRequestURL() {
@@ -563,12 +614,11 @@
public String getServletPath() {
String attr = (String) super.getAttribute(
- "javax.servlet.include.servlet_path");
+ "javax.servlet.include.servlet_path");
return (attr != null) ? attr
- : super.getServletPath();
+ : super.getServletPath();
}
-
//
//
// @todo WHY? Do we return null to these emthods?
@@ -592,31 +642,27 @@
}
public void setCharacterEncoding(String env)
- throws java.io.UnsupportedEncodingException {
+ throws UnsupportedEncodingException {
if (bodyAccessed) {
throw new IllegalStateException(
- "This method must not be called after the HTTP-Body was accessed !");
+ "This method must not be called after the HTTP-Body was accessed !");
}
getHttpServletRequest().setCharacterEncoding(env);
}
- public javax.servlet.ServletInputStream getInputStream()
- throws java.io.IOException {
+ public ServletInputStream getInputStream()
+ throws IOException {
if (included) {
return null;
} else {
- // the super class will ensure that a IllegalStateException is thrown if getReader() was called earlier
- javax.servlet.ServletInputStream stream = getHttpServletRequest()
- .getInputStream();
-
+ ServletInputStream stream = getHttpServletRequest().getInputStream();
bodyAccessed = true;
-
return stream;
}
}
- public javax.servlet.RequestDispatcher getRequestDispatcher(String path) {
+ public RequestDispatcher getRequestDispatcher(String path) {
return this.getHttpServletRequest().getRequestDispatcher(path);
}
@@ -626,6 +672,10 @@
this.portletContext = portletContext;
}
+ public void setServiceRequest(HttpServletRequest req) {
+ setRequest(req);
+ }
+
public PortletContainer getContainer() {
return container;
}
@@ -636,13 +686,13 @@
private boolean isPortletModeAllowedByPortlet(PortletMode mode) {
PortletDD dd = internalPortletWindow.getPortletEntity()
- .getPortletDefinition();
+ .getPortletDefinition();
Iterator mimes = dd.getSupports().iterator();
- while(mimes.hasNext()) {
- Iterator modes = ((SupportsDD)mimes.next()).getPortletModes().iterator();
- while(modes.hasNext()) {
- String m = (String)modes.next();
+ while (mimes.hasNext()) {
+ Iterator modes = ((SupportsDD) mimes.next()).getPortletModes().iterator();
+ while (modes.hasNext()) {
+ String m = (String) modes.next();
if (m.equals(mode.toString())) {
return true;
}
@@ -655,7 +705,7 @@
Enumeration supportedModes = portalContext.getSupportedPortletModes();
while (supportedModes.hasMoreElements()) {
if (supportedModes.nextElement().toString().equals(
- (mode.toString()))) {
+ (mode.toString()))) {
return true;
}
}
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/PortletSessionImpl.java
URL: http://svn.apache.org/viewcvs/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/PortletSessionImpl.java?rev=345682&r1=345681&r2=345682&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/PortletSessionImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/PortletSessionImpl.java Sat Nov 19 12:23:55 2005
@@ -26,15 +26,26 @@
import javax.portlet.PortletSession;
import javax.portlet.PortletSessionUtil;
import javax.servlet.http.HttpSessionContext;
+import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
import org.apache.pluto.core.InternalPortletWindow;
+import org.apache.pluto.util.StringManager;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
public class PortletSessionImpl implements PortletSession,
- javax.servlet.http.HttpSession {
+ HttpSession {
+
private final int DEFAULT_SCOPE = PortletSession.PORTLET_SCOPE;
- private javax.servlet.http.HttpSession httpSession;
+ private static final Log LOG =
+ LogFactory.getLog(PortletSessionImpl.class);
+
+ private static final StringManager EXCEPTIONS =
+ StringManager.getManager(PortletSessionImpl.class.getPackage().getName());
+
+ private HttpSession httpSession;
private PortletContext portletContext = null;
@@ -42,19 +53,18 @@
public PortletSessionImpl(PortletContext context,
InternalPortletWindow internalPortletWindow,
- javax.servlet.http.HttpSession httpSession) {
+ HttpSession httpSession) {
this.portletContext = context;
this.internalPortletWindow = internalPortletWindow;
this.httpSession = httpSession;
}
- // javax.portlet.PortletSession and javax.servlet.http.HttpSession implementation -------------
public Object getAttribute(String name) {
- return this.getAttribute(name, DEFAULT_SCOPE);
+ return getAttribute(name, DEFAULT_SCOPE);
}
public Enumeration getAttributeNames() {
- return this.getAttributeNames(DEFAULT_SCOPE);
+ return getAttributeNames(DEFAULT_SCOPE);
}
public long getCreationTime() throws java.lang.IllegalStateException {
@@ -86,60 +96,68 @@
}
public void setAttribute(String name, Object value) {
- this.setAttribute(name, value, DEFAULT_SCOPE);
+ setAttribute(name, value, DEFAULT_SCOPE);
}
public void setMaxInactiveInterval(int interval) {
httpSession.setMaxInactiveInterval(interval);
}
- // --------------------------------------------------------------------------------------------
- // javax.portlet.PortletSession implementation ------------------------------------------------
- public java.lang.Object getAttribute(String name, int scope)
- throws java.lang.IllegalStateException {
+
+//
+//
+//
+ public Object getAttribute(String name, int scope)
+ throws IllegalStateException {
+
if (name == null) {
- throw new IllegalArgumentException("name must not be null");
+ throw new IllegalArgumentException("error.attributeName.null");
}
+
if (scope == PortletSession.APPLICATION_SCOPE) {
return httpSession.getAttribute(name);
- } else {
- Object attribute = httpSession.getAttribute(
- "javax.portlet.p." + internalPortletWindow.getId() + "?" + name);
+ }
+
+ else {
+ String key = createPortletScopedId(name);
+ Object attribute = httpSession.getAttribute(key);
+ if(LOG.isDebugEnabled()) {
+ LOG.debug("Key = "+key);
+ LOG.debug("Value = "+attribute);
+ Enumeration enumer = httpSession.getAttributeNames();
+ while(enumer.hasMoreElements()) {
+ LOG.debug("All has: "+enumer.nextElement());
+ }
+ }
+
if (attribute == null) {
- // not sure, if this should be done for all attributes or only javax.servlet.
- attribute = httpSession.getAttribute(name);
+ attribute = httpSession.getAttribute(name);
}
return attribute;
}
}
- public java.util.Enumeration getAttributeNames(int scope) {
+ public Enumeration getAttributeNames(int scope) {
if (scope == PortletSession.APPLICATION_SCOPE) {
return httpSession.getAttributeNames();
} else {
Enumeration attributes = httpSession.getAttributeNames();
-
Vector portletAttributes = new Vector();
- /* Fix that ONLY attributes of PORTLET_SCOPE are returned. */
- int prefix_length = "javax.portlet.p.".length();
- String portletWindowId = internalPortletWindow.getId().toString();
-
- while (attributes.hasMoreElements()) {
+ while(attributes.hasMoreElements()) {
String attribute = (String) attributes.nextElement();
+ int scp = PortletSessionUtil.decodeScope(attribute);
+ if(LOG.isDebugEnabled()) {
+ LOG.debug("Found attribute: "+attribute);
+ LOG.debug("Scope Determined Portlet?" + (scp == PortletSession.PORTLET_SCOPE));
+ }
- int attributeScope = PortletSessionUtil.decodeScope(attribute);
-
- if (attributeScope == PortletSession.PORTLET_SCOPE &&
- attribute.startsWith(portletWindowId, prefix_length)) {
- String portletAttribute = PortletSessionUtil.decodeAttributeName(
- attribute);
-
- if (portletAttribute != null) { // it is in the portlet's namespace
- portletAttributes.add(portletAttribute);
- }
+ if(scp == PortletSession.PORTLET_SCOPE) {
+ portletAttributes.add(
+ PortletSessionUtil.decodeAttributeName(attribute)
+ );
}
- }
+ }
return portletAttributes.elements();
}
}
@@ -152,23 +170,34 @@
if (scope == PortletSession.APPLICATION_SCOPE) {
httpSession.removeAttribute(name);
} else {
- httpSession.removeAttribute(
- "javax.portlet.p." + internalPortletWindow.getId() + "?" + name);
+ httpSession.removeAttribute(createPortletScopedId(name));
}
}
public void setAttribute(java.lang.String name, java.lang.Object value,
int scope) throws IllegalStateException {
if (name == null) {
- throw new IllegalArgumentException("name must not be null");
+ throw new IllegalArgumentException(
+ EXCEPTIONS.getString("error.attributeName.null")
+ );
}
+
if (scope == PortletSession.APPLICATION_SCOPE) {
httpSession.setAttribute(name, value);
- } else {
- httpSession.setAttribute(
- "javax.portlet.p." + internalPortletWindow.getId() + "?" + name,
- value);
}
+ else {
+ httpSession.setAttribute(createPortletScopedId(name), value);
+ }
+ }
+
+ private StringBuffer createPrefix() {
+ StringBuffer sb = new StringBuffer("javax.portlet.p.");
+ sb.append(internalPortletWindow.getId()).append("?");
+ return sb;
+ }
+
+ private String createPortletScopedId(String name) {
+ return createPrefix().append(name).toString();
}
public PortletContext getPortletContext() {
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/RenderRequestImpl.java
URL: http://svn.apache.org/viewcvs/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/RenderRequestImpl.java?rev=345682&r1=345681&r2=345682&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/RenderRequestImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/core/impl/RenderRequestImpl.java Sat Nov 19 12:23:55 2005
@@ -13,9 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-/*
-
- */
package org.apache.pluto.core.impl;
Modified: portals/pluto/trunk/pluto-container/src/resources/properties/org/apache/pluto/core/impl/LocalStrings.properties
URL: http://svn.apache.org/viewcvs/portals/pluto/trunk/pluto-container/src/resources/properties/org/apache/pluto/core/impl/LocalStrings.properties?rev=345682&r1=345681&r2=345682&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/resources/properties/org/apache/pluto/core/impl/LocalStrings.properties (original)
+++ portals/pluto/trunk/pluto-container/src/resources/properties/org/apache/pluto/core/impl/LocalStrings.properties Sat Nov 19 12:23:55 2005
@@ -14,8 +14,11 @@
#
############################################
+error.null={0} may not be null
+## Replace the following with the above
error.contenttype.null=Content Type Not Set
error.attributeName.null=Attribute Name may not be null.
+error.propertyName.null=Property Name may not be null.
error.session.illegalState=Session may not be retrieved before cross context portlet invocation
Modified: portals/pluto/trunk/pluto-util/src/main/java/org/apache/pluto/util/install/impl/FileSystemInstaller.java
URL: http://svn.apache.org/viewcvs/portals/pluto/trunk/pluto-util/src/main/java/org/apache/pluto/util/install/impl/FileSystemInstaller.java?rev=345682&r1=345681&r2=345682&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-util/src/main/java/org/apache/pluto/util/install/impl/FileSystemInstaller.java (original)
+++ portals/pluto/trunk/pluto-util/src/main/java/org/apache/pluto/util/install/impl/FileSystemInstaller.java Sat Nov 19 12:23:55 2005
@@ -21,11 +21,8 @@
import org.codehaus.plexus.util.FileUtils;
import java.io.File;
-import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
-import java.util.Map;
-import java.util.List;
import java.util.Collection;
/**
@@ -44,6 +41,16 @@
}
}
+ protected void removeFilesFromDirectory(Collection dependencies, File destination)
+ throws IOException {
+ Iterator it = dependencies.iterator();
+ while(it.hasNext()) {
+ File from = (File)it.next();
+ File delete = new File(destination, from.getName());
+ delete.delete();
+ }
+ }
+
protected void copyFileToDirectory(File file, File destination)
throws IOException {
FileUtils.copyFileToDirectory(file, destination);
@@ -100,8 +107,29 @@
protected abstract File getWebAppDir(InstallationConfig config);
- public void uninstall(InstallationConfig config) {
- }
+ public void uninstall(InstallationConfig config)
+ throws ManagementException {
+ File endorsedDir = getEndorsedDir(config);
+ File sharedDir = getSharedDir(config);
+ File domainDir = getWebAppDir(config);
+
+ endorsedDir.mkdirs();
+ sharedDir.mkdirs();
+ domainDir.mkdirs();
+
+ try {
+ removeFilesFromDirectory(config.getEndorsedDependencies(), endorsedDir);
+ removeFilesFromDirectory(config.getSharedDependencies(), sharedDir);
+ removeFilesFromDirectory(config.getPortletApplications().values(), domainDir);
+
+ File delete = new File(domainDir, config.getPortalApplication().getName());
+ delete.delete();
+ }
+ catch(IOException io) {
+ throw new ManagementException("Unable to remove files. ", io, config.getInstallationDirectory());
+ }
+
+ }
public abstract boolean isValidInstallationDirectory(File installDir);
}