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;
}