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 ms...@apache.org on 2015/01/27 09:01:55 UTC

[11/19] portals-pluto git commit: worked on adding the PRP map info to the URL

worked on adding the PRP map info to the URL


Project: http://git-wip-us.apache.org/repos/asf/portals-pluto/repo
Commit: http://git-wip-us.apache.org/repos/asf/portals-pluto/commit/b2c68875
Tree: http://git-wip-us.apache.org/repos/asf/portals-pluto/tree/b2c68875
Diff: http://git-wip-us.apache.org/repos/asf/portals-pluto/diff/b2c68875

Branch: refs/heads/PortletHub
Commit: b2c68875c915986645cc90f6ecb42cf6e0181af1
Parents: 6bf8a9d
Author: Scott Nicklous <ms...@apache.org>
Authored: Wed Jan 21 17:30:37 2015 +0100
Committer: Scott Nicklous <ms...@apache.org>
Committed: Wed Jan 21 17:30:37 2015 +0100

----------------------------------------------------------------------
 .../container/PortletRequestContextImpl.java    | 19 ++++-------
 .../driver/url/impl/PortalURLParserImpl.java    | 35 +++++++++++++++++++-
 .../driver/url/impl/RelativePortalURLImpl.java  | 27 ++++++++-------
 .../portal/PublicRenderParameterMapper.java     |  9 +++++
 .../portal/PublicRenderParameterMapperImpl.java | 28 ++++++++++++++--
 .../org/apache/pluto/driver/url/PortalURL.java  | 21 +++++++++---
 .../org/apache/pluto/driver/util/PageState.java | 13 +++++++-
 7 files changed, 120 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/b2c68875/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletRequestContextImpl.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletRequestContextImpl.java b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletRequestContextImpl.java
index 5c52a94..35bf3d8 100644
--- a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletRequestContextImpl.java
+++ b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletRequestContextImpl.java
@@ -44,8 +44,10 @@ import org.apache.pluto.container.PortletContainer;
 import org.apache.pluto.container.PortletRequestContext;
 import org.apache.pluto.container.PortletWindow;
 import org.apache.pluto.driver.core.PortalRequestContext;
+import org.apache.pluto.driver.services.portal.PublicRenderParameterMapper;
 import org.apache.pluto.driver.url.PortalURL;
 import org.apache.pluto.driver.url.PortalURLParameter;
+import org.apache.pluto.driver.url.PortalURLPublicParameter;
 
 /**
  * @version $Id$
@@ -110,13 +112,6 @@ public class PortletRequestContextImpl implements PortletRequestContext {
       return url;
    }
 
-   protected boolean isPublicRenderParameter(String name) {
-      List<String> publicRenderParameterNames = window.getPortletDefinition()
-            .getSupportedPublicRenderParameters();
-      return publicRenderParameterNames.isEmpty() ? false
-            : publicRenderParameterNames.contains(name);
-   }
-
    public void init(PortletConfig portletConfig, ServletContext servletContext,
          HttpServletRequest servletRequest, HttpServletResponse servletResponse) {
       this.portletConfig = portletConfig;
@@ -313,11 +308,11 @@ public class PortletRequestContextImpl implements PortletRequestContext {
 
    public Map<String, String[]> getPublicParameterMap() {
       HashMap<String, String[]> parameters = new HashMap<String, String[]>();
-      for (Map.Entry<String, String[]> entry : url.getPublicParameters()
-            .entrySet()) {
-         if (isPublicRenderParameter(entry.getKey())) {
-            parameters.put(entry.getKey(), entry.getValue());
-         }
+      PublicRenderParameterMapper mapper = url.getPublicRenderParameterMapper();
+      // get the active PRPs only
+      List<PortalURLPublicParameter> prps = mapper.getPRPsForWindow(window.getId().getStringId(), true);
+      for (PortalURLPublicParameter prp : prps) {
+         parameters.put(prp.getName(), prp.getValues().clone());
       }
       return parameters;
    }

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/b2c68875/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/PortalURLParserImpl.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/PortalURLParserImpl.java b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/PortalURLParserImpl.java
index d624335..e872b01 100644
--- a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/PortalURLParserImpl.java
+++ b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/PortalURLParserImpl.java
@@ -19,6 +19,8 @@ package org.apache.pluto.driver.url.impl;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.StringTokenizer;
@@ -156,7 +158,7 @@ public class PortalURLParserImpl implements PortalURLParser {
       } else {
          // parameters, etc. remain to be processed
          renderPath.append(pathInfo.substring(0, ind));
-         pathInfo = pathInfo.substring(ind+1);
+         pathInfo = pathInfo.substring(ind);
       }
 
       portalURL.setRenderPath(renderPath.toString());
@@ -169,6 +171,29 @@ public class PortalURLParserImpl implements PortalURLParser {
       PublicRenderParameterMapperImpl prpm = dc.getPublicRenderParameterService()
             .getPRPMapper(renderPath.toString());
       portalURL.setPublicRenderParameterMapper(prpm);
+      portalURL.setPortletIds(dc.getPageConfig(renderPath.toString()).getPortletIds());
+      
+      // Tokenize the rest and process the tokens
+      ArrayList<String> portletIds = new ArrayList<String>();
+      String[] tokens = pathInfo.split("/" + PREFIX);
+      for (String t : tokens) {
+         String type, val;
+         if (t.length() < 3) {
+            LOG.warn("Token " + t + " is too short!! ");
+            continue;
+         } else {
+            type = t.substring(0, 2);
+            val = t.substring(2);
+         }
+
+         if (type.equals(PORTLET_ID)) {
+            String[] decoded = decodeControlParameter(PREFIX + PORTLET_ID + val);
+            portletIds.add(Integer.parseInt(decoded[1]), decoded[0]);
+         } else {
+            LOG.debug("Found " + portletIds.size() + " IDs: " + Arrays.toString(portletIds.toArray()));
+            break;
+         }
+      }
 
       // Now parse the remaining portion of the URL, of any.
       StringTokenizer st = new StringTokenizer(pathInfo, "/", false);
@@ -270,6 +295,14 @@ public class PortalURLParserImpl implements PortalURLParser {
       if (portalURL.getRenderPath() != null) {
          buffer.append(portalURL.getRenderPath());
       }
+      
+      // Add the portletIds with references
+      ArrayList<String> pids = new ArrayList<String>();
+      for (String pid : portalURL.getPortletIds()) {
+         pids.add(pid);
+         buffer.append("/").append(encodeControlParameter(PORTLET_ID, pid, String.valueOf(pids.indexOf(pid))));
+      }
+      
       //Append the resource window definition, if it exists.
       if (portalURL.getResourceWindow() != null){
          buffer.append("/");

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/b2c68875/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/RelativePortalURLImpl.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/RelativePortalURLImpl.java b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/RelativePortalURLImpl.java
index 67d77e3..0ef7a68 100644
--- a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/RelativePortalURLImpl.java
+++ b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/RelativePortalURLImpl.java
@@ -16,6 +16,7 @@
  */
 package org.apache.pluto.driver.url.impl;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -61,6 +62,8 @@ public class RelativePortalURLImpl implements PortalURL {
 
    // provides the defined public render parameters and their relationships to one another for the current page 
    private PublicRenderParameterMapper prpMapper = null;
+   
+   private Collection<String> portletIds = new ArrayList<String>();
 
    /**
     * PortalURLParser used to construct the string
@@ -281,6 +284,7 @@ public class RelativePortalURLImpl implements PortalURL {
       portalURL.urlParser = urlParser;
       portalURL.resourceWindow = resourceWindow;
       portalURL.prpMapper = (prpMapper == null) ? null : prpMapper.clone();
+      portalURL.portletIds = portletIds;
       return portalURL;
    }
    //JSR-286 methods
@@ -351,18 +355,6 @@ public class RelativePortalURLImpl implements PortalURL {
             addParameter(new PortalURLParameter(param.getWindowId(), param.getName(), param.getValues()));
          }
       }
-//       Map<String, String[]> newPublicParameters = url.getNewPublicParameters();
-//       for (Map.Entry<String, String[]> entry : newPublicParameters.entrySet())
-//       {
-//          if (entry.getValue()[0] == null)
-//          {
-//             publicParameterCurrent.remove(entry.getKey());
-//          }
-//          else
-//          {
-//             publicParameterCurrent.put(entry.getKey(), entry.getValue());
-//          }
-//       }
       PublicRenderParameterMapper prpm = url.getPublicRenderParameterMapper();
       List<Integer> activePrps = prpm.getActiveIndexes();
       for (int ii = 0; ii < prpm.getNumberOfGroups(); ii++) {
@@ -399,4 +391,15 @@ public class RelativePortalURLImpl implements PortalURL {
    public PublicRenderParameterMapper getPublicRenderParameterMapper() {
       return prpMapper;
    }
+
+   public void setPortletIds(Collection<String> portletIds) {
+      this.portletIds.addAll(portletIds);
+      if (LOG.isDebugEnabled()) {
+         LOG.debug("Stored " + this.portletIds.size() + " IDs: " + Arrays.toString(this.portletIds.toArray()));
+      }
+   }
+
+   public Collection<String> getPortletIds() {
+      return this.portletIds;
+   }
 }

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/b2c68875/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterMapper.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterMapper.java b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterMapper.java
index b2f6e36..1d82e6b 100644
--- a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterMapper.java
+++ b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterMapper.java
@@ -155,6 +155,15 @@ public interface PublicRenderParameterMapper {
    public List<Integer> getActiveIndexes();
    
    /**
+    * Returns an array containing the indexes of all indexes (= PRPs) defined for the given portlet window.
+    * 
+    * @param   wid         window ID
+    * @param   onlyActive  if true, only the active ( = set) PRPs are returned
+    * @return              a list of public render parameters for the window. If none are found, the list will be empty.
+    */
+   public List<PortalURLPublicParameter> getPRPsForWindow(String wid, boolean onlyActive);
+   
+   /**
     * Returns a clone of the mapper. All public render parameters contained in the mapper are cloned as well.
     * @return
     */

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/b2c68875/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterMapperImpl.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterMapperImpl.java b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterMapperImpl.java
index 92b86bf..9e4afb3 100644
--- a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterMapperImpl.java
+++ b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterMapperImpl.java
@@ -20,7 +20,6 @@
 package org.apache.pluto.driver.services.portal;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Collection;
 import java.util.HashMap;
@@ -56,6 +55,7 @@ public class PublicRenderParameterMapperImpl implements PublicRenderParameterMap
    // Maps the PRP QName to a set of public render parameters
    private final Map<QName, List<PortalURLPublicParameter>> qn2PRP =
                      new HashMap<QName, List<PortalURLPublicParameter>>();
+
    private final ArrayList<QName> qnList = new ArrayList<QName>();
    
    public PublicRenderParameterMapperImpl(PageConfig paco, PortletRegistryService pore) {
@@ -260,8 +260,32 @@ public class PublicRenderParameterMapperImpl implements PublicRenderParameterMap
          dbgstr.append(prefix + prp.getWindowId());
          prefix = ", ";
       }
-      LOGGER.debug(dbgstr.toString());
+      if (LOGGER.isDebugEnabled()) {
+         LOGGER.debug(dbgstr.toString());
+      }
       return prpm;
    }
 
+   public List<PortalURLPublicParameter> getPRPsForWindow(String wid, boolean onlyActive) {
+      ArrayList<PortalURLPublicParameter> prps = new ArrayList<PortalURLPublicParameter>();
+      StringBuilder dbgstr = new StringBuilder("Names: ");
+      String prefix = "";
+      for (int ii = 0; ii < qnList.size(); ii++) {
+         for (PortalURLPublicParameter prp : qn2PRP.get(qnList.get(ii))) {
+            if (prp.getWindowId().equals(wid)) {
+               if ((onlyActive && !prp.isRemoved()) || !onlyActive) {
+                  prps.add(prp);
+                  dbgstr.append(prefix + prp.getName());
+                  prefix = ", ";
+               }
+               break;
+            }
+         }
+      }
+      if (LOGGER.isDebugEnabled()) {
+         LOGGER.debug("For window " + wid + " there are " + prps.size() + " parameters. " + dbgstr.toString());
+      }
+      return prps;
+   }
+
 }

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/b2c68875/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURL.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURL.java b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURL.java
index 367c36c..3c98c04 100644
--- a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURL.java
+++ b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURL.java
@@ -18,7 +18,6 @@ package org.apache.pluto.driver.url;
 
 import java.util.Collection;
 import java.util.Map;
-import java.util.Set;
 
 import javax.portlet.PortletMode;
 import javax.portlet.WindowState;
@@ -46,19 +45,33 @@ public interface PortalURL extends Cloneable {
      * 
      * @param pup
      */
-    void addPublicRenderParameter(PortalURLPublicParameter pup);
+    public void addPublicRenderParameter(PortalURLPublicParameter pup);
     
     /**
      * Add the PRP mapper for the page being processed
      * @param prpm
      */
-    void setPublicRenderParameterMapper(PublicRenderParameterMapper prpm);
+    public void setPublicRenderParameterMapper(PublicRenderParameterMapper prpm);
     
     /**
      * get the PRP mapper for the page being processed
      * @return
      */
-    PublicRenderParameterMapper getPublicRenderParameterMapper();
+    public PublicRenderParameterMapper getPublicRenderParameterMapper();
+    
+    /**
+     * Stores the portlet window IDs for the portlets on the page
+     * 
+     * @param portletIds
+     */
+    public void setPortletIds(Collection<String> portletIds);
+    
+    /**
+     * Returns the portlet Ids for the portlets on the page
+     * 
+     * @return
+     */
+    public Collection<String> getPortletIds();
 
     Collection<PortalURLParameter> getParameters();
 

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/b2c68875/pluto-portal-driver/src/main/java/org/apache/pluto/driver/util/PageState.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/util/PageState.java b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/util/PageState.java
index 5854b23..81391d2 100644
--- a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/util/PageState.java
+++ b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/util/PageState.java
@@ -23,6 +23,7 @@ import static java.util.logging.Level.*;
 
 import java.util.Collection;
 import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
@@ -39,6 +40,7 @@ import org.apache.pluto.driver.AttributeKeys;
 import org.apache.pluto.driver.config.DriverConfiguration;
 import org.apache.pluto.driver.core.PortalRequestContext;
 import org.apache.pluto.driver.services.portal.PageConfig;
+import org.apache.pluto.driver.services.portal.PublicRenderParameterMapper;
 import org.apache.pluto.driver.url.PortalURL;
 import org.apache.pluto.driver.url.PortalURLParameter;
 
@@ -89,7 +91,16 @@ public class PageState {
     * @return
     */
    public Map<String, String[]> getPublicParameters() {
-      return portalUrl.getPublicParameters();
+      Map<String,String[]> tmp = new HashMap<String, String[]>();
+      PublicRenderParameterMapper prpMapper = portalUrl.getPublicRenderParameterMapper();
+      if (prpMapper != null) {
+         for (int ind : prpMapper.getActiveIndexes()) {
+            String name = prpMapper.getPublicParameterGroup(ind).get(0).getName();
+            String[] vals = prpMapper.getValues(ind);
+            tmp.put(name, vals);
+         }
+      }
+      return tmp;
    }
    
    /**