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 cd...@apache.org on 2008/06/02 13:22:07 UTC

svn commit: r662396 - in /portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto: core/PortletContainerImpl.java internal/impl/BaseURLImpl.java

Author: cdoremus
Date: Mon Jun  2 04:22:06 2008
New Revision: 662396

URL: http://svn.apache.org/viewvc?rev=662396&view=rev
Log:
Manually merged in patch from PLUTO-484. Thanks Nikita!

Modified:
    portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java
    portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/BaseURLImpl.java

Modified: portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java?rev=662396&r1=662395&r2=662396&view=diff
==============================================================================
--- portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java (original)
+++ portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java Mon Jun  2 04:22:06 2008
@@ -21,15 +21,17 @@
 
 import javax.portlet.ActionRequest;
 import javax.portlet.ActionResponse;
-import javax.portlet.Event;
 import javax.portlet.PortletException;
 import javax.portlet.PortletPreferences;
 import javax.portlet.PortletRequest;
 import javax.portlet.PortletSecurityException;
 import javax.portlet.RenderRequest;
 import javax.portlet.RenderResponse;
+import javax.portlet.StateAwareResponse;
+import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.portlet.Event;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -38,27 +40,34 @@
 import org.apache.pluto.OptionalContainerServices;
 import org.apache.pluto.PortletContainer;
 import org.apache.pluto.PortletContainerException;
-import org.apache.pluto.PortletEntity;
 import org.apache.pluto.PortletWindow;
 import org.apache.pluto.RequiredContainerServices;
-import org.apache.pluto.internal.InternalActionRequest;
-import org.apache.pluto.internal.InternalActionResponse;
-import org.apache.pluto.internal.InternalPortletContext;
+import org.apache.pluto.descriptors.portlet.PortletAppDD;
+//import org.apache.pluto.driver.core.PortletWindowImpl;
+import org.apache.pluto.internal.PortletDescriptorRegistry;
 import org.apache.pluto.internal.InternalPortletRequest;
 import org.apache.pluto.internal.InternalPortletResponse;
+import org.apache.pluto.internal.InternalActionRequest;
+import org.apache.pluto.internal.InternalActionResponse;
+import org.apache.pluto.internal.InternalEventRequest;
+import org.apache.pluto.internal.InternalEventResponse;
+import org.apache.pluto.internal.InternalPortletWindow;
 import org.apache.pluto.internal.InternalRenderRequest;
 import org.apache.pluto.internal.InternalRenderResponse;
 import org.apache.pluto.internal.InternalResourceRequest;
 import org.apache.pluto.internal.InternalResourceResponse;
-import org.apache.pluto.internal.impl.EventRequestImpl;
-import org.apache.pluto.internal.impl.EventResponseImpl;
-import org.apache.pluto.internal.impl.PortletRequestImpl;
-import org.apache.pluto.internal.impl.PortletResponseImpl;
 import org.apache.pluto.internal.impl.StateAwareResponseImpl;
 import org.apache.pluto.spi.EventProvider;
 import org.apache.pluto.spi.FilterManager;
 import org.apache.pluto.spi.PortletURLProvider;
 import org.apache.pluto.spi.optional.PortletInvokerService;
+import org.apache.pluto.internal.impl.EventRequestImpl;
+import org.apache.pluto.internal.impl.EventResponseImpl;
+import org.apache.pluto.internal.impl.InternalPortletWindowImpl;
+import org.apache.pluto.internal.impl.PortletRequestImpl;
+import org.apache.pluto.internal.impl.PortletResponseImpl;
+import org.apache.pluto.internal.impl.ResourceRequestImpl;
+import org.apache.pluto.internal.impl.ResourceResponseImpl;
 import org.apache.pluto.util.StringManager;
 
 
@@ -89,6 +98,9 @@
     /** The optional container services associated with this container. */
     private final OptionalContainerServices optionalContainerServices;
     
+    /** The servlet context associated with this container. */
+    private ServletContext servletContext;
+
     /** Flag indicating whether or not we've been initialized. */
     private boolean initialized = false;
     
@@ -117,8 +129,14 @@
      * Initialize the container for use within the given configuration scope.
      * @param servletContext  the servlet context of the portal webapp.
      */
-    public void init()
+    public void init(ServletContext servletContext)
     throws PortletContainerException {
+    	if (servletContext == null) {
+    		throw new PortletContainerException(
+    				"Unable to initialize portlet container [" + name + "]: "
+    				+ "servlet context is null.");
+    	}
+        this.servletContext = servletContext;
         this.initialized = true;
         infoWithName("Container initialized successfully.");
     }
@@ -135,6 +153,7 @@
      * Destroy this container.
      */
     public void destroy() {
+        this.servletContext = null;
         this.initialized = false;
         infoWithName("Container destroyed.");
     }
@@ -159,37 +178,39 @@
     	
     	ensureInitialized();
     	
+        InternalPortletWindow internalPortletWindow =
+        	new InternalPortletWindowImpl(
+		                    PortletContextManager.getPortletContext(servletContext,
+		                        portletWindow.getContextPath()),
+		                    portletWindow);
         debugWithName("Render request received for portlet: "
-        		+ portletWindow.getPortletEntity().getPortletDefinition().getPortletName());
+        		+ portletWindow.getPortletName());
         
         InternalRenderRequest renderRequest = getOptionalContainerServices().getPortletEnvironmentService()
-            .createRenderRequest(this, request, response, portletWindow);
+            .createRenderRequest(this, request, response, internalPortletWindow);
 
         InternalRenderResponse renderResponse = getOptionalContainerServices().getPortletEnvironmentService()
-            .createRenderResponse(this, request, response, portletWindow);
+            .createRenderResponse(this, request, response, internalPortletWindow);
 
-        String appId = portletWindow.getPortletEntity().getPortletDefinition().getApplication().getId();
-        InternalPortletContext portletContext = optionalContainerServices.getPortletRegistryService().getPortletContext(appId);
-        
         PortletInvokerService invoker = optionalContainerServices.getPortletInvokerService();
 
         try {
-            ContainerInvocation.setInvocation(this, portletWindow);
+            ContainerInvocation.setInvocation(this, internalPortletWindow);
             //Filter initialisation
-            FilterManager filterManager = filterInitialisation(portletWindow,PortletRequest.RENDER_PHASE);
-            invoker.render(portletContext.getServletContext(), renderRequest, renderResponse, portletWindow, filterManager);
+            FilterManager filterManager = filterInitialisation(internalPortletWindow,PortletRequest.RENDER_PHASE);
+            invoker.render(renderRequest, renderResponse, internalPortletWindow, filterManager);
         } finally {
             ContainerInvocation.clearInvocation();
         }
         
         debugWithName("Portlet rendered for: "
-        		+ portletWindow.getPortletEntity().getPortletDefinition().getPortletName());
+        		+ portletWindow.getPortletName());
     }
 
     /**
      * Indicates that a portlet resource Serving occured in the current request and calls
      * the processServeResource method of this portlet.
-     * @param PortletWindow the portlet Window
+     * @param internalPortletWindow the portlet Window
      * @param request               the servlet request
      * @param response              the servlet response
      * @throws PortletException          if one portlet has trouble fulfilling
@@ -204,30 +225,32 @@
 		
     	ensureInitialized();
     	
+        InternalPortletWindow internalPortletWindow =
+        	new InternalPortletWindowImpl(
+                    PortletContextManager.getPortletContext(servletContext,
+                        portletWindow.getContextPath()),
+                    portletWindow);
         debugWithName("Resource request received for portlet: "
-        		+ portletWindow.getPortletEntity().getPortletDefinition().getPortletName());
+        		+ portletWindow.getPortletName());
         
         InternalResourceRequest resourceRequest = getOptionalContainerServices().getPortletEnvironmentService()
-            .createResourceRequest(this, request, response, portletWindow);
+            .createResourceRequest(this, request, response, internalPortletWindow);
 
         InternalResourceResponse resourceResponse = getOptionalContainerServices().getPortletEnvironmentService()
-            .createResourceResponse(this, request, response, portletWindow);
+            .createResourceResponse(this, request, response, internalPortletWindow);
 
-        String appId = portletWindow.getPortletEntity().getPortletDefinition().getApplication().getId();
-        InternalPortletContext portletContext = optionalContainerServices.getPortletRegistryService().getPortletContext(appId);
-        
         PortletInvokerService invoker = optionalContainerServices.getPortletInvokerService();
 
         try {
-            ContainerInvocation.setInvocation(this, portletWindow);
-            FilterManager filterManager = filterInitialisation(portletWindow,PortletRequest.RESOURCE_PHASE);
-            invoker.serveResource(portletContext.getServletContext(), resourceRequest, resourceResponse, portletWindow, filterManager);
+            ContainerInvocation.setInvocation(this, internalPortletWindow);
+            FilterManager filterManager = filterInitialisation(internalPortletWindow,PortletRequest.RESOURCE_PHASE);
+            invoker.serveResource(resourceRequest, resourceResponse, internalPortletWindow, filterManager);
         } finally {
             ContainerInvocation.clearInvocation();
         }
         
         debugWithName("Portlet resource for: "
-        		+ portletWindow.getPortletEntity().getPortletDefinition().getPortletName());
+        		+ portletWindow.getPortletName());
 	}
     
     /**
@@ -248,33 +271,35 @@
     	
     	ensureInitialized();
     	
+        InternalPortletWindow internalPortletWindow =
+        	new InternalPortletWindowImpl(
+                    PortletContextManager.getPortletContext(servletContext,
+                        portletWindow.getContextPath()), portletWindow);
+
         debugWithName("Action request received for portlet: "
-    			+ portletWindow.getPortletEntity().getPortletDefinition().getPortletName());
+    			+ portletWindow.getPortletName());
     	
         InternalActionRequest actionRequest = getOptionalContainerServices().getPortletEnvironmentService()
-            .createActionRequest(this, request, response, portletWindow);
+            .createActionRequest(this, request, response, internalPortletWindow);
 
         InternalActionResponse actionResponse = getOptionalContainerServices().getPortletEnvironmentService()
-            .createActionResponse(this, request, response, portletWindow);
-
-        String appId = portletWindow.getPortletEntity().getPortletDefinition().getApplication().getId();
-        InternalPortletContext portletContext = optionalContainerServices.getPortletRegistryService().getPortletContext(appId);
+            .createActionResponse(this, request, response, internalPortletWindow);
 
         PortletInvokerService invoker = optionalContainerServices.getPortletInvokerService();
 
         try {
-            ContainerInvocation.setInvocation(this, portletWindow);
-            FilterManager filterManager = filterInitialisation(portletWindow,PortletRequest.ACTION_PHASE);
-            invoker.action(portletContext.getServletContext(), actionRequest, actionResponse, portletWindow, filterManager);
+            ContainerInvocation.setInvocation(this, internalPortletWindow);
+            FilterManager filterManager = filterInitialisation(internalPortletWindow,PortletRequest.ACTION_PHASE);
+            invoker.action(actionRequest, actionResponse, internalPortletWindow, filterManager);
         }
         finally {
             ContainerInvocation.clearInvocation();
         }
 
         debugWithName("Portlet action processed for: "
-        		+ portletWindow.getPortletEntity().getPortletDefinition().getPortletName());
+        		+ portletWindow.getPortletName());
         
-        PortletURLProvider portletURLProvider = requiredContainerServices.getPortalCallbackService().getPortletURLProvider(request, portletWindow);
+        PortletURLProvider portletURLProvider = requiredContainerServices.getPortalCallbackService().getPortletURLProvider(request, internalPortletWindow);
         
         portletURLProvider.savePortalURL(request);
         saveChangedParameters((PortletRequest)actionRequest, (StateAwareResponseImpl)actionResponse, portletURLProvider);
@@ -292,7 +317,7 @@
         	debugWithName("No redirect location specified.");
             PortletURLProvider redirectURL = requiredContainerServices
             		.getPortalCallbackService()
-            		.getPortletURLProvider(request, portletWindow);
+            		.getPortletURLProvider(request, internalPortletWindow);
             
             saveChangedParameters((PortletRequest)actionRequest, (StateAwareResponseImpl)actionResponse, redirectURL);
             
@@ -322,31 +347,34 @@
     	
     	ensureInitialized();
     	
+        InternalPortletWindow internalPortletWindow =
+        		new InternalPortletWindowImpl(
+                    PortletContextManager.getPortletContext(servletContext,
+                        portletWindow.getContextPath()),
+                    portletWindow);
+
         debugWithName("Load request received for portlet: "
-        		+ portletWindow.getPortletEntity().getPortletDefinition().getPortletName());
+        		+ portletWindow.getPortletName());
         
 
         InternalRenderRequest renderRequest =
             getOptionalContainerServices().getPortletEnvironmentService()
-                .createRenderRequest(this, request, response, portletWindow);
+                .createRenderRequest(this, request, response, internalPortletWindow);
 
         InternalRenderResponse renderResponse =
             getOptionalContainerServices().getPortletEnvironmentService()
-                .createRenderResponse(this, request, response, portletWindow);
-
-        String appId = portletWindow.getPortletEntity().getPortletDefinition().getApplication().getId();
-        InternalPortletContext portletContext = optionalContainerServices.getPortletRegistryService().getPortletContext(appId);
+                .createRenderResponse(this, request, response, internalPortletWindow);
 
         PortletInvokerService invoker = optionalContainerServices.getPortletInvokerService();
 
         try {
-            ContainerInvocation.setInvocation(this, portletWindow);
-            invoker.load(portletContext.getServletContext(), renderRequest, renderResponse, portletWindow);
+            ContainerInvocation.setInvocation(this, internalPortletWindow);
+            invoker.load(renderRequest, renderResponse, internalPortletWindow);
         } finally {
             ContainerInvocation.clearInvocation();
         }
 
-        debugWithName("Portlet loaded for: " + portletWindow.getPortletEntity().getPortletDefinition().getPortletName());
+        debugWithName("Portlet loaded for: " + portletWindow.getPortletName());
     }
     
 
@@ -356,23 +384,26 @@
     throws PortletException, IOException, PortletContainerException {
         ensureInitialized();
 
+        InternalPortletWindow internalPortletWindow =
+            new InternalPortletWindowImpl(
+                PortletContextManager.getPortletContext(servletContext,
+                    portletWindow.getContextPath()), portletWindow);
+
         debugWithName("Admin request received for portlet: "
-            +portletWindow.getPortletEntity().getPortletDefinition().getPortletName());
+            +portletWindow.getPortletName());
 
         InternalPortletRequest internalRequest =
-            new AdminRequest(this, portletWindow, servletRequest) { };
+            new AdminRequest(this, internalPortletWindow, servletRequest) { };
 
         InternalPortletResponse internalResponse =
-            new AdminResponse(this, portletWindow, servletRequest, servletResponse);
+            new AdminResponse(this, internalPortletWindow, servletRequest, servletResponse);
 
-        String appId = portletWindow.getPortletEntity().getPortletDefinition().getApplication().getId();
-        InternalPortletContext portletContext = optionalContainerServices.getPortletRegistryService().getPortletContext(appId);
-        
-        PortletInvokerService invoker = optionalContainerServices.getPortletInvokerService();
+        PortletInvokerService invoker =
+            optionalContainerServices.getPortletInvokerService();
 
         try {
-            ContainerInvocation.setInvocation(this, portletWindow);
-            invoker.admin(portletContext.getServletContext(), internalRequest, internalResponse, portletWindow);
+            ContainerInvocation.setInvocation(this, internalPortletWindow);
+            invoker.admin(internalRequest, internalResponse, internalPortletWindow);
         } finally {
             ContainerInvocation.clearInvocation();
         }
@@ -400,6 +431,50 @@
         return optionalContainerServices;
     }
     
+    public PortletAppDD getPortletApplicationDescriptor(String context) 
+        throws PortletContainerException {
+        
+        // make sure the container has initialized
+        ensureInitialized();
+        
+        // sanity check
+        if (context == null || context.trim().equals("")) {
+            final String msg = "Context was null or the empty string.";
+            errorWithName(msg);
+            throw new PortletContainerException(msg);
+        }
+        
+        // obtain the context of the portlet
+        ServletContext portletCtx = PortletContextManager.getPortletContext(servletContext, context);
+        if (portletCtx == null) {
+            final String msg = "Unable to obtain the servlet context for " +
+                "portlet context [" + context + "].  Ensure the portlet has " +
+                "been deployed and that cross context support is enabled.";
+            errorWithName(msg);
+            throw new PortletContainerException(msg);
+        }
+        
+        // obtain the portlet application descriptor for the portlet
+        // context.
+        PortletAppDD portletAppDD = PortletDescriptorRegistry
+                                        .getRegistry()
+                                        .getPortletAppDD(portletCtx);
+        
+        // we can't return null
+        if (portletAppDD == null) {
+            final String msg = "Obtained a null portlet application description for " +
+                "portlet context [" + context + "]";
+            errorWithName(msg);
+            throw new PortletContainerException(msg);
+        }
+        
+        return portletAppDD;        
+    }
+    
+    public ServletContext getServletContext() {
+		return servletContext;
+	}
+    
     /**
      * Fire Event for the portlet associated with the given portlet window and eventName
      * @param portletWindow  the portlet window.
@@ -418,31 +493,35 @@
 
     	ensureInitialized();
 
+    	InternalPortletWindow internalPortletWindow = new InternalPortletWindowImpl(
+                PortletContextManager.getPortletContext(servletContext,
+                		window.getContextPath()), window);
+//    	InternalPortletWindow internalPortletWindow =
+//    		new PortletWindowImpl(servletContext, window);
     	debugWithName("Event request received for portlet: "
-    			+ window.getPortletEntity().getPortletDefinition().getPortletName());
+    			+ window.getPortletName());
 
     	EventRequestImpl eventRequest = new EventRequestImpl(
-    			this, window, request, event);
+    			this, internalPortletWindow, request, event);
     	EventResponseImpl eventResponse = new EventResponseImpl(
-    			this, window, request, response);
+    			this, internalPortletWindow, request, response);
 
     	
-        String appId = window.getPortletEntity().getPortletDefinition().getApplication().getId();
-        InternalPortletContext portletContext = optionalContainerServices.getPortletRegistryService().getPortletContext(appId);
-
     	PortletInvokerService invoker = optionalContainerServices.getPortletInvokerService();
 
         try {
-            ContainerInvocation.setInvocation(this, window);
-            FilterManager filterManager = filterInitialisation(window,PortletRequest.EVENT_PHASE);
-            invoker.event(portletContext.getServletContext(), eventRequest, eventResponse, window, filterManager);
+            ContainerInvocation.setInvocation(this, internalPortletWindow);
+            FilterManager filterManager = filterInitialisation(internalPortletWindow,PortletRequest.EVENT_PHASE);
+            invoker.event(eventRequest, eventResponse, internalPortletWindow, filterManager);
         }
         finally {
             ContainerInvocation.clearInvocation();
         }
+//    	PortletInvoker invoker = new PortletInvoker(internalPortletWindow);
+//    	invoker.event(eventRequest, eventResponse);
 
     	debugWithName("Portlet event processed for: "
-    			+ window.getPortletEntity().getPortletDefinition().getPortletName());
+    			+ window.getPortletName());
 
     	// After processing event, change the redirect URL for rendering.
     	String location = eventResponse.getRedirectLocation();
@@ -453,7 +532,7 @@
     		debugWithName("No redirect location specified.");
     		PortletURLProvider redirectURL = requiredContainerServices
     		.getPortalCallbackService()
-    		.getPortletURLProvider(request, window);
+    		.getPortletURLProvider(request, internalPortletWindow);
 
     		saveChangedParameters(eventRequest, eventResponse, redirectURL);
 
@@ -539,7 +618,7 @@
 		redirectURL.setAction(false);
 
 		// Set secure of the redirect URL if necessary.
-		if (request.isSecure()) {
+		if (redirectURL.isSecureSupported()) {
 			try {
 				redirectURL.setSecure();
 			} catch (PortletSecurityException e) {
@@ -569,22 +648,24 @@
 	
 	/**
 	 * The method initialise the FilterManager for later use in the PortletServlet
-	 * @param PortletWindow the PortletWindow
+	 * @param internalPortletWindow the InternalPortletWindow
 	 * @param lifeCycle like ACTION_PHASE, RENDER_PHASE,...
 	 * @return FilterManager
 	 * @throws PortletContainerException
 	 */
-	private FilterManager filterInitialisation(PortletWindow portletWindow,String lifeCycle) throws PortletContainerException{
-	    PortletEntity pe = portletWindow.getPortletEntity();
-        return requiredContainerServices.getPortalCallbackService().getFilterManager(pe.getPortletDefinition().getApplication(),pe.getPortletDefinition().getPortletName(),lifeCycle);
+	private FilterManager filterInitialisation(InternalPortletWindow internalPortletWindow,String lifeCycle) throws PortletContainerException{
+    	PortletAppDD portletAppDD = getOptionalContainerServices().getPortletRegistryService().getPortletApplicationDescriptor(internalPortletWindow.getContextPath());
+        String portletName = internalPortletWindow.getPortletName();
+        
+        return requiredContainerServices.getPortalCallbackService().getFilterManager(portletAppDD,portletName,lifeCycle);
     }
 	
 	class AdminRequest extends PortletRequestImpl {
 
         public AdminRequest(PortletContainer container,
-                            PortletWindow portletWindow,
+                            InternalPortletWindow internalPortletWindow,
                             HttpServletRequest servletRequest) {
-            super(container, portletWindow, servletRequest);
+            super(container, internalPortletWindow, servletRequest);
         }
 
         public PortletPreferences getPreferences() {
@@ -595,10 +676,10 @@
     class AdminResponse extends PortletResponseImpl {
 
         public AdminResponse(PortletContainer container,
-                             PortletWindow portletWindow,
+                             InternalPortletWindow internalPortletWindow,
                              HttpServletRequest servletRequest,
                              HttpServletResponse servletResponse) {
-            super(container, portletWindow, servletRequest, servletResponse);
+            super(container, internalPortletWindow, servletRequest, servletResponse);
         }
     }
 }

Modified: portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/BaseURLImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/BaseURLImpl.java?rev=662396&r1=662395&r2=662396&view=diff
==============================================================================
--- portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/BaseURLImpl.java (original)
+++ portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/BaseURLImpl.java Mon Jun  2 04:22:06 2008
@@ -37,10 +37,10 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.pluto.PortletContainer;
 import org.apache.pluto.PortletContainerException;
-import org.apache.pluto.PortletWindow;
-import org.apache.pluto.om.portlet.Portlet;
-import org.apache.pluto.om.portlet.PortletApp;
-import org.apache.pluto.om.portlet.Supports;
+import org.apache.pluto.descriptors.portlet.PortletAppDD;
+import org.apache.pluto.descriptors.portlet.PortletDD;
+import org.apache.pluto.descriptors.portlet.SupportsDD;
+import org.apache.pluto.internal.InternalPortletWindow;
 import org.apache.pluto.spi.PortletURLListener;
 import org.apache.pluto.spi.PortletURLProvider;
 import org.apache.pluto.util.StringManager;
@@ -62,7 +62,7 @@
 	protected boolean secure;
 	protected PortletContainer container;
 	protected PortletMode mode = null;
-	protected PortletWindow portletWindow;
+	protected InternalPortletWindow internalPortletWindow;
 	protected javax.servlet.http.HttpServletRequest servletRequest;
 	protected javax.servlet.http.HttpServletResponse servletResponse;
 	protected WindowState state;
@@ -71,12 +71,12 @@
 	protected PortalContext context;
 	
 	public BaseURLImpl(PortletContainer container,
-			PortletWindow portletWindow,
+			InternalPortletWindow internalPortletWindow,
 			javax.servlet.http.HttpServletRequest servletRequest,
 			javax.servlet.http.HttpServletResponse servletResponse,
 			boolean isAction, boolean isResourceServing) {
 		this.container = container;
-		this.portletWindow = portletWindow;
+		this.internalPortletWindow = internalPortletWindow;
 		this.servletRequest = servletRequest;
 		this.servletResponse = servletResponse;
 		secure = servletRequest.isSecure();
@@ -105,7 +105,7 @@
 	        throw new IllegalArgumentException(
 	            "name and value must not be null");
 	    }
-	    List<String> publicRenderParameterNames = portletWindow.getPortletEntity().getPortletDefinition().getPublicRenderParameter();
+	    List<String> publicRenderParameterNames = internalPortletWindow.getPortletEntity().getPortletDefinition().getPublicRenderParameter();
 	    if (publicRenderParameterNames == null){
 	    	parameters.put(name, new String[]{value});
 	    }
@@ -124,7 +124,7 @@
 	        throw new IllegalArgumentException(
 	        	"name and values must not be null or values be an empty array");
 	    }
-		List<String> publicRenderParameterNames = portletWindow.getPortletEntity().getPortletDefinition().getPublicRenderParameter();
+		List<String> publicRenderParameterNames = internalPortletWindow.getPortletEntity().getPortletDefinition().getPublicRenderParameter();
 	    
 		if (publicRenderParameterNames == null){
 			parameters.put(name, StringUtils.copy(values));
@@ -160,7 +160,7 @@
         
         this.parameters.clear();
         this.publicRenderParameters.clear();
-        List<String> publicPortletRenderParameterNames = portletWindow.getPortletEntity().getPortletDefinition().getPublicRenderParameter();
+        List<String> publicPortletRenderParameterNames = internalPortletWindow.getPortletEntity().getPortletDefinition().getPublicRenderParameter();
         if (parameters.keySet()!= null){
         	for (Object key : parameters.keySet()) {
         		if (publicPortletRenderParameterNames == null)
@@ -182,19 +182,23 @@
         PortletURLProvider urlProvider = container
         		.getRequiredContainerServices()
         		.getPortalCallbackService()
-        		.getPortletURLProvider(servletRequest, portletWindow);
-        if(urlProvider.isSecureSupported()) {
+        		.getPortletURLProvider(servletRequest, internalPortletWindow);
+        if (urlProvider.isSecureSupported()) {
+            urlProvider.setSecure();
+        } else {
             throw new PortletSecurityException("Secure URLs not supported.");
         }
 	}
 
 	public String toString(){
+	    StringBuffer url = new StringBuffer(200);
+	
 	    PortletURLProvider urlProvider = container
 	    		.getRequiredContainerServices()
 	    		.getPortalCallbackService()
-	    		.getPortletURLProvider(servletRequest, portletWindow);
+	    		.getPortletURLProvider(servletRequest, internalPortletWindow);
 	
-	    PortletURLListener portletURLFilterListener = container
+	    PortletURLListener portletURLFilterListener = portletURLFilterListener = container
 			.getRequiredContainerServices()
 			.getPortalCallbackService().getPortletURLListener();
 	    if (mode != null) {
@@ -209,10 +213,16 @@
 	    else if (isResourceServing){
 	    	urlProvider.setResourceServing(true);
 	    }
-        PortletApp portletAppDD = portletWindow.getPortletEntity().getPortletDefinition().getApplication();  
-//      container.getOptionalContainerServices().getPortletRegistryService().getRegisteredPortletApplications()
-//      PortletAppDD portletAppDD = container.getPortletApplicationDescriptor(  );
-        portletURLFilterListener.callListener(portletAppDD,this,isAction,isResourceServing);
+	    try {
+	    	
+	    	PortletAppDD portletAppDD = container.getPortletApplicationDescriptor(internalPortletWindow.getContextPath());  
+//	    	container.getOptionalContainerServices().getPortletRegistryService().getRegisteredPortletApplications()
+//			PortletAppDD portletAppDD = container.getPortletApplicationDescriptor(  );
+			portletURLFilterListener.callListener(portletAppDD,this,isAction,isResourceServing);
+		} catch (PortletContainerException e1) {
+			e1.printStackTrace();
+		}
+        
 	    
         if (secure && urlProvider.isSecureSupported()) {
             try {
@@ -231,7 +241,9 @@
 	    
 	    urlProvider.setPublicRenderParameters(publicRenderParameters);
 	    
-	    return urlProvider.toString();
+	    url.append(urlProvider.toString());
+	
+	    return url.toString();
 	}
 	// --------------------------------------------------------------------------------------------
 
@@ -274,11 +286,11 @@
 	        return true;
 	    }
 	
-	    Portlet dd = portletWindow.getPortletEntity()
+	    PortletDD dd = internalPortletWindow.getPortletEntity()
 	        .getPortletDefinition();
 	    Iterator supports = dd.getSupports().iterator();
 	    while(supports.hasNext()) {
-	        Supports support = (Supports)supports.next();
+	        SupportsDD support = (SupportsDD)supports.next();
 	        if (support.getPortletModes() != null){
 	        	Iterator modes = support.getPortletModes().iterator();
 		        while(modes.hasNext()) {
@@ -322,11 +334,12 @@
 	}
 
 	public void write(Writer out) throws IOException {
+		StringBuffer url = new StringBuffer(200);
 		
 	    PortletURLProvider urlProvider = container
 	    		.getRequiredContainerServices()
 	    		.getPortalCallbackService()
-	    		.getPortletURLProvider(servletRequest, portletWindow);
+	    		.getPortletURLProvider(servletRequest, internalPortletWindow);
 	
 	    PortletURLListener portletURLFilterListener = portletURLFilterListener = container
 			.getRequiredContainerServices()
@@ -343,10 +356,16 @@
 	    else if (isResourceServing){
 	    	urlProvider.setResourceServing(true);
 	    }
-        PortletApp portletAppDD = portletWindow.getPortletEntity().getPortletDefinition().getApplication();  
-//      container.getOptionalContainerServices().getPortletRegistryService().getRegisteredPortletApplications()
-//      PortletAppDD portletAppDD = container.getPortletApplicationDescriptor(  );
-        portletURLFilterListener.callListener(portletAppDD,this,isAction,isResourceServing);
+	    try {
+	    	
+	    	PortletAppDD portletAppDD = container.getPortletApplicationDescriptor(internalPortletWindow.getContextPath());  
+//	    	container.getOptionalContainerServices().getPortletRegistryService().getRegisteredPortletApplications()
+//			PortletAppDD portletAppDD = container.getPortletApplicationDescriptor(  );
+			portletURLFilterListener.callListener(portletAppDD,this,isAction,isResourceServing);
+		} catch (PortletContainerException e1) {
+			e1.printStackTrace();
+		}
+        
 	    
         if (secure && urlProvider.isSecureSupported()) {
             try {
@@ -365,7 +384,9 @@
 	    
 	    urlProvider.setPublicRenderParameters(publicRenderParameters);
 	    
-	    out.write(urlProvider.toString());
+	    url.append(urlProvider.toString());
+	
+	    out.write(url.toString());
 	}
 
 	public void write(Writer out, boolean escapeXML) throws IOException {
@@ -374,12 +395,12 @@
 	}
 
 	public void addProperty(String key, String value) {
-		container.getRequiredContainerServices().getPortalCallbackService().addResponseProperty(servletRequest, portletWindow, key, value);
+		container.getRequiredContainerServices().getPortalCallbackService().addResponseProperty(servletRequest, internalPortletWindow, key, value);
 		
 	}
 
 	public void setProperty(String key, String value) {
-		container.getRequiredContainerServices().getPortalCallbackService().setResponseProperty(servletRequest, portletWindow, key, value);
+		container.getRequiredContainerServices().getPortalCallbackService().setResponseProperty(servletRequest, internalPortletWindow, key, value);
 		
 	}
 
@@ -389,7 +410,7 @@
 		String[] tmp1 = this.servletRequest.getParameterValues(name);
 		if (tmp1!=null)
 			lenght += tmp1.length;
-		PortletURLProvider urlProvider = container.getRequiredContainerServices().getPortalCallbackService().getPortletURLProvider(servletRequest, portletWindow);
+		PortletURLProvider urlProvider = container.getRequiredContainerServices().getPortalCallbackService().getPortletURLProvider(servletRequest, internalPortletWindow);
 		String[] tmp2 = urlProvider.getPrivateRenderParameters(name);
 		if (tmp2!=null)
 			lenght += tmp2.length;