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:53 UTC

[09/19] portals-pluto git commit: Changed URL generation logic to use the PRP mapper

Changed URL generation logic to use the PRP mapper


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

Branch: refs/heads/PortletHub
Commit: bc96a13e306ef08e9008404a69c345da6851879c
Parents: 34295f1
Author: Scott Nicklous <ms...@apache.org>
Authored: Wed Jan 21 11:22:19 2015 +0100
Committer: Scott Nicklous <ms...@apache.org>
Committed: Wed Jan 21 11:22:19 2015 +0100

----------------------------------------------------------------------
 .../driver/url/impl/RelativePortalURLImpl.java  | 92 ++++++++++++++------
 .../portal/PublicRenderParameterMapper.java     |  6 ++
 .../portal/PublicRenderParameterMapperImpl.java | 38 +++++++-
 .../driver/url/PortalURLPublicParameter.java    |  4 +-
 4 files changed, 109 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bc96a13e/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 85378f2..6ff80f2 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.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -64,7 +65,7 @@ public class RelativePortalURLImpl implements PortalURL {
    private Map<String, String[]> privateRenderParameters = new HashMap<String, String[]>();
 
    // Newly made changes to the public render parameters
-   private Set<PortalURLPublicParameter> newPrps = new HashSet<PortalURLPublicParameter>();
+//    private Set<PortalURLPublicParameter> newPrps = new HashSet<PortalURLPublicParameter>();
 
    // provides the defined public render parameters and their relationships to one another for the current page 
    private PublicRenderParameterMapper prpMapper = null;
@@ -288,6 +289,7 @@ public class RelativePortalURLImpl implements PortalURL {
       portalURL.urlParser = urlParser;
       portalURL.resourceWindow = resourceWindow;
       portalURL.publicParameterCurrent = publicParameterCurrent;
+      portalURL.prpMapper = (prpMapper == null) ? null : prpMapper.clone();
       return portalURL;
    }
    //JSR-286 methods
@@ -305,7 +307,7 @@ public class RelativePortalURLImpl implements PortalURL {
 
 
    public void addPublicParameterCurrent(String name, String[] values){
-      publicParameterCurrent.put(name, values);
+//       publicParameterCurrent.put(name, values);
       for (int ii = 0; ii < prpMapper.getNumberOfGroups(); ii++) {
          List<PortalURLPublicParameter> prps = prpMapper.getPublicParameterGroup(ii);
          if (prps.get(0).getName().equals(name)) {
@@ -317,18 +319,25 @@ public class RelativePortalURLImpl implements PortalURL {
    public Map<String, String[]> getPublicParameters() {
       Map<String,String[]> tmp = new HashMap<String, String[]>();
 
-      for (Iterator<String> iter = publicParameterCurrent.keySet().iterator(); iter.hasNext();) {
-         String paramname = iter.next();
-         if (!publicParameterNew.containsKey(paramname)){
-            String[] paramvalue = publicParameterCurrent.get(paramname);
-            tmp.put(paramname, paramvalue);
-         }
-      }
-      for (Iterator<String> iter = publicParameterNew.keySet().iterator();iter.hasNext();){
-         String paramname = iter.next();
-         String[] paramvalue = publicParameterNew.get(paramname);
-         if (paramvalue[0]!=null){
-            tmp.put(paramname, paramvalue);
+//       for (Iterator<String> iter = publicParameterCurrent.keySet().iterator(); iter.hasNext();) {
+//          String paramname = iter.next();
+//          if (!publicParameterNew.containsKey(paramname)){
+//             String[] paramvalue = publicParameterCurrent.get(paramname);
+//             tmp.put(paramname, paramvalue);
+//          }
+//       }
+//       for (Iterator<String> iter = publicParameterNew.keySet().iterator();iter.hasNext();){
+//          String paramname = iter.next();
+//          String[] paramvalue = publicParameterNew.get(paramname);
+//          if (paramvalue[0]!=null){
+//             tmp.put(paramname, paramvalue);
+//          }
+//       }
+      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;
@@ -350,8 +359,14 @@ public class RelativePortalURLImpl implements PortalURL {
       if (LOG.isDebugEnabled()) {
          LOG.debug("Requested Page: " + requestedPageId);
       }
-      return ((DriverConfiguration) servletContext.getAttribute(
-            AttributeKeys.DRIVER_CONFIG)).getPageConfig(requestedPageId);
+      
+      DriverConfiguration dc =  ((DriverConfiguration) servletContext.getAttribute(AttributeKeys.DRIVER_CONFIG));
+      PageConfig paco = dc.getPageConfig(requestedPageId);
+      if (prpMapper == null && requestedPageId == null && paco != null) {
+         // Make sure we get a prp mapper for the default page
+         prpMapper = dc.getPublicRenderParameterService().getPRPMapper(paco.getName());
+      }
+      return paco;
    }
 
    public String getResourceWindow() {
@@ -378,22 +393,45 @@ 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());
+//       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++) {
+         if (activePrps.contains(ii)) {
+            prpMapper.setValues(ii, prpm.getValues(ii));
+         } else {
+            prpMapper.setRemoved(ii, true);
          }
       }
    }
 
    public void addPublicRenderParameter(PortalURLPublicParameter pup) {
-      newPrps.add(pup);
+      int ind = prpMapper.getIndex(pup);
+      if (ind >= 0) {
+         if (pup.isRemoved()) {
+            prpMapper.setRemoved(ind, true);
+         } else {
+            prpMapper.setValues(ind, pup.getValues());
+         }
+      } else {
+         StringBuilder txt = new StringBuilder("Public render parameter is not contained in mapper.");
+         txt.append(" window ID: " + pup.getWindowId());
+         txt.append(", Name: " + pup.getName());
+         txt.append(", QName: " + pup.getQName());
+         txt.append(", Values: " + Arrays.toString(pup.getValues()));
+         LOG.warn(txt.toString());
+      }
    }
 
    public void setPublicRenderParameterMapper(PublicRenderParameterMapper prpm) {

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bc96a13e/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 c02c3cb..b2f6e36 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
@@ -153,4 +153,10 @@ public interface PublicRenderParameterMapper {
     * @return   an array of indexes. If no groups are active, the array will be empty.
     */
    public List<Integer> getActiveIndexes();
+   
+   /**
+    * Returns a clone of the mapper. All public render parameters contained in the mapper are cloned as well.
+    * @return
+    */
+   public PublicRenderParameterMapper clone();
 }

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bc96a13e/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 8e328f2..92b86bf 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,6 +20,7 @@
 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;
@@ -50,7 +51,7 @@ public class PublicRenderParameterMapperImpl implements PublicRenderParameterMap
    private final Logger LOGGER = LoggerFactory.getLogger(PublicRenderParameterMapperImpl.class);
  
    // Set of all public render parameters on the page
-   ArrayList<PortalURLPublicParameter> prpList = new ArrayList<PortalURLPublicParameter>();
+   private final ArrayList<PortalURLPublicParameter> prpList = new ArrayList<PortalURLPublicParameter>();
    
    // Maps the PRP QName to a set of public render parameters
    private final Map<QName, List<PortalURLPublicParameter>> qn2PRP =
@@ -153,6 +154,12 @@ public class PublicRenderParameterMapperImpl implements PublicRenderParameterMap
          LOGGER.debug(dbgstr.toString());
       }
    }
+   
+   /**
+    * Private constructor for cloning
+    */
+   private PublicRenderParameterMapperImpl() {
+   }
 
    
    public List<PortalURLPublicParameter> getPublicParameterGroup(int index) {
@@ -176,7 +183,11 @@ public class PublicRenderParameterMapperImpl implements PublicRenderParameterMap
    }
 
    public int getIndex(PortalURLPublicParameter prp) {
-      return qnList.indexOf(prp.getQName());
+      int ind =  qnList.indexOf(prp.getQName());
+      if (ind < 0) {
+         LOGGER.warn("PRP Qname " + prp.getQName() + " not found in " + qnList.toString());
+      }
+      return ind;
    }
 
    public int getIndex(String windowId, String identifier) {
@@ -229,5 +240,28 @@ public class PublicRenderParameterMapperImpl implements PublicRenderParameterMap
       }
       return inds; 
    }
+   
+   public PublicRenderParameterMapperImpl clone() {
+      PublicRenderParameterMapperImpl prpm = new PublicRenderParameterMapperImpl();
+      // Note that the QNames don't need to be cloned, as the internal fields are set thru constructor and cannot be changed.
+      StringBuilder dbgstr = new StringBuilder("Cloning QNames: ");
+      String prefix = "";
+      for (QName qn : qnList) {
+         prpm.qnList.add(qn);
+         prpm.qn2PRP.put(qn, new ArrayList<PortalURLPublicParameter>());
+         dbgstr.append(prefix + qn.toString());
+         prefix = ", ";
+      }
+      dbgstr.append(" / window IDs: ");
+      prefix = "";
+      for (PortalURLPublicParameter prp : prpList) {
+         prpm.prpList.add(prp);
+         prpm.qn2PRP.get(prp.getQName()).add(prp.clone());
+         dbgstr.append(prefix + prp.getWindowId());
+         prefix = ", ";
+      }
+      LOGGER.debug(dbgstr.toString());
+      return prpm;
+   }
 
 }

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bc96a13e/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURLPublicParameter.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURLPublicParameter.java b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURLPublicParameter.java
index 802ec7e..2040f77 100644
--- a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURLPublicParameter.java
+++ b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURLPublicParameter.java
@@ -108,8 +108,8 @@ public class PortalURLPublicParameter extends PortalURLParameter {
    @Override
    public PortalURLPublicParameter clone() {
       // shallow clone of the values array works because strings are immutable
-      QName qn = new QName(qname.getNamespaceURI(), qname.getLocalPart(), qname.getPrefix());
-      PortalURLPublicParameter pupp =  new PortalURLPublicParameter(window, name, qn, (values == null ? values : values.clone()));
+      // Note that the QNames don't need to be cloned, as the internal fields are set thru constructor and cannot be changed.
+      PortalURLPublicParameter pupp =  new PortalURLPublicParameter(window, name, qname, (values == null ? null : values.clone()));
       pupp.setRemoved(removed);
       return pupp;
    }