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:56 UTC
[12/19] portals-pluto git commit: More work on URL encoding
More work on URL encoding
Project: http://git-wip-us.apache.org/repos/asf/portals-pluto/repo
Commit: http://git-wip-us.apache.org/repos/asf/portals-pluto/commit/b9ee3ade
Tree: http://git-wip-us.apache.org/repos/asf/portals-pluto/tree/b9ee3ade
Diff: http://git-wip-us.apache.org/repos/asf/portals-pluto/diff/b9ee3ade
Branch: refs/heads/PortletHub
Commit: b9ee3adeb35aaa87325fa0ac6d20365b156799a6
Parents: b2c6887
Author: Scott Nicklous <ms...@apache.org>
Authored: Wed Jan 21 21:18:53 2015 +0100
Committer: Scott Nicklous <ms...@apache.org>
Committed: Wed Jan 21 21:18:53 2015 +0100
----------------------------------------------------------------------
.../PublicRenderParameterServiceImpl.java | 7 +-
.../driver/url/impl/PortalURLParserImpl.java | 103 ++++---
.../portal/PublicRenderParameterMapperImpl.java | 291 -------------------
.../PublicRenderParameterQNameMapper.java | 291 +++++++++++++++++++
.../portal/PublicRenderParameterService.java | 2 +-
5 files changed, 354 insertions(+), 340 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/b9ee3ade/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/impl/resource/PublicRenderParameterServiceImpl.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/impl/resource/PublicRenderParameterServiceImpl.java b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/impl/resource/PublicRenderParameterServiceImpl.java
index 74b56e5..39ae1a3 100644
--- a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/impl/resource/PublicRenderParameterServiceImpl.java
+++ b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/impl/resource/PublicRenderParameterServiceImpl.java
@@ -23,7 +23,8 @@ import java.util.logging.Logger;
import org.apache.pluto.container.driver.PortletRegistryService;
import org.apache.pluto.driver.services.portal.PageConfig;
-import org.apache.pluto.driver.services.portal.PublicRenderParameterMapperImpl;
+import org.apache.pluto.driver.services.portal.PublicRenderParameterMapper;
+import org.apache.pluto.driver.services.portal.PublicRenderParameterQNameMapper;
import org.apache.pluto.driver.services.portal.PublicRenderParameterService;
import org.apache.pluto.driver.services.portal.RenderConfigService;
@@ -51,10 +52,10 @@ public class PublicRenderParameterServiceImpl implements PublicRenderParameterSe
/* (non-Javadoc)
* @see org.apache.pluto.driver.services.portal.PublicRenderParameterService#getPRPMapper(java.lang.String)
*/
- public PublicRenderParameterMapperImpl getPRPMapper(String page) {
+ public PublicRenderParameterMapper getPRPMapper(String page) {
LOGGER.fine("Getting PRP mapper for page = " + page);
PageConfig paco = reco.getPage(page);
- PublicRenderParameterMapperImpl prpm = new PublicRenderParameterMapperImpl(paco, pore);
+ PublicRenderParameterMapper prpm = new PublicRenderParameterQNameMapper(paco, pore);
return prpm;
}
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/b9ee3ade/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 e872b01..ca8406a 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
@@ -34,7 +34,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.pluto.driver.AttributeKeys;
import org.apache.pluto.driver.config.DriverConfiguration;
-import org.apache.pluto.driver.services.portal.PublicRenderParameterMapperImpl;
+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.PortalURLParser;
@@ -168,31 +168,68 @@ public class PortalURLParserImpl implements PortalURLParser {
ServletContext sc = request.getServletContext();
DriverConfiguration dc = (DriverConfiguration) sc.getAttribute(AttributeKeys.DRIVER_CONFIG);
- PublicRenderParameterMapperImpl prpm = dc.getPublicRenderParameterService()
+ PublicRenderParameterMapper 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;
- }
+ // Tokenize the rest and process the tokens
+ if (pathInfo.length() > 2) {
+ 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);
+ }
+
+ // Get the portlet IDs & reference numbers
+ if (type.equals(PORTLET_ID)) {
+ String[] decoded = decodeControlParameter(PREFIX + PORTLET_ID + val);
+ portletIds.add(Integer.parseInt(decoded[1]), decoded[0]);
+ }
+
+ // Resource window definition: portalURL.setResourceWindow().
+ else if (type.equals(RESOURCE)) {
+ portalURL.setResourceWindow(decodeCharacters(val.split(DELIM)[0]));
+ }
+
+ // Action window definition: portalURL.setActionWindow().
+ else if (type.equals(ACTION)) {
+ portalURL.setActionWindow(decodeCharacters(val.split(DELIM)[0]));
+ }
+
+ // Action window definition: portalURL.setActionWindow().
+ else if (type.equals(AJAX_ACTION)) {
+ portalURL.setAjaxActionWindow(decodeCharacters(val.split(DELIM)[0]));
+ }
+
+ // Action window definition: portalURL.setActionWindow().
+ else if (type.equals(PARTIAL_ACTION)) {
+ portalURL.setPartialActionWindow(decodeCharacters(val.split(DELIM)[0]));
+ }
+
+ // Cacheability definition: portalURL.setCacheability().
+ else if (type.equals(CACHE_LEVEL)) {
+ portalURL.setCacheability(decodeCharacters(val.split(DELIM)[0]));
+ }
+
+ // ResourceID definition: portalURL.setResourceID().
+ else if (type.equals(RESOURCE_ID)) {
+ portalURL.setResourceID(decodeCharacters(val.split(DELIM)[0]));
+ }
+
+ }
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Found " + portletIds.size() + " IDs: " + Arrays.toString(portletIds.toArray()));
}
// Now parse the remaining portion of the URL, of any.
@@ -201,32 +238,8 @@ public class PortalURLParserImpl implements PortalURLParser {
String token = st.nextToken();
- // Resource window definition: portalURL.setResourceWindow().
- if (token.startsWith(PREFIX + RESOURCE)) {
- portalURL.setResourceWindow(decodeControlParameter(token)[0]);
- }
- // Action window definition: portalURL.setActionWindow().
- else if (token.startsWith(PREFIX + ACTION)) {
- portalURL.setActionWindow(decodeControlParameter(token)[0]);
- }
- // Action window definition: portalURL.setActionWindow().
- else if (token.startsWith(PREFIX + AJAX_ACTION)) {
- portalURL.setAjaxActionWindow(decodeControlParameter(token)[0]);
- }
- // Action window definition: portalURL.setActionWindow().
- else if (token.startsWith(PREFIX + PARTIAL_ACTION)) {
- portalURL.setPartialActionWindow(decodeControlParameter(token)[0]);
- }
- // Cacheability definition: portalURL.setCacheability().
- else if (token.startsWith(PREFIX + CACHE_LEVEL)) {
- portalURL.setCacheability(decodeControlParameter(token)[0]);
- }
- // ResourceID definition: portalURL.setResourceID().
- else if (token.startsWith(PREFIX + RESOURCE_ID)) {
- portalURL.setResourceID(decodeControlParameter(token)[0]);
- }
// Window state definition: portalURL.setWindowState().
- else if (token.startsWith(PREFIX + WINDOW_STATE)) {
+ if (token.startsWith(PREFIX + WINDOW_STATE)) {
String[] decoded = decodeControlParameter(token);
portalURL.setWindowState(decoded[0], new WindowState(decoded[1]));
}
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/b9ee3ade/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
deleted file mode 100644
index 9e4afb3..0000000
--- a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterMapperImpl.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-package org.apache.pluto.driver.services.portal;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.xml.namespace.QName;
-
-import org.apache.pluto.driver.url.PortalURLPublicParameter;
-import org.apache.pluto.container.driver.PortletRegistryService;
-import org.apache.pluto.container.om.portlet.PortletApplicationDefinition;
-import org.apache.pluto.container.om.portlet.PortletDefinition;
-import org.apache.pluto.container.om.portlet.PublicRenderParameter;
-
-/**
- * Provides public render parameter mappings for a given page.
- * This mapper maps public render parameters on the basis of Qnames.
- * If two PRPs have the same QName, they are considered to refer to the same
- * public render parameter. The mapping is limited to the current page.
- *
- * @author msnicklous
- * @since 16/01/2015
- */
-public class PublicRenderParameterMapperImpl implements PublicRenderParameterMapper {
- private final Logger LOGGER = LoggerFactory.getLogger(PublicRenderParameterMapperImpl.class);
-
- // Set of all public render parameters on the page
- 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 =
- new HashMap<QName, List<PortalURLPublicParameter>>();
-
- private final ArrayList<QName> qnList = new ArrayList<QName>();
-
- public PublicRenderParameterMapperImpl(PageConfig paco, PortletRegistryService pore) {
-
- Collection<String> pids = paco.getPortletIds();
- LOGGER.debug("Setting up the PRP mapper. There are " + pids.size() + " portlets to process.");
-
- StringBuilder dbgstr = new StringBuilder(1024);
- boolean isDebug = LOGGER.isDebugEnabled();
- for (String pid : pids) {
- if (isDebug) {
- dbgstr.append("\n Processing portlet id = " + pid);
- }
-
- PortletWindowConfig pwc = null;
- PortletApplicationDefinition pad = null;
- PortletDefinition pd = null;
-
- pwc = PortletWindowConfig.fromId(pid);
- String cxtpa = pwc.getContextPath();
- String portletName = pwc.getPortletName();
-
- try {
- pad = pore.getPortletApplication(cxtpa);
- pd = pore.getPortlet(cxtpa, portletName);
-
- if (isDebug) {
- dbgstr.append("\n For context: " + cxtpa + ", App name is "
- + pad.getName() + ", portlet name is " + pd.getPortletName());
- }
-
- Collection<String> prpIds = pd.getSupportedPublicRenderParameters();
- if (prpIds != null && prpIds.size() > 0) {
- Collection<? extends PublicRenderParameter> prpDefs = pad.getPublicRenderParameters();
- String namespace = pad.getDefaultNamespace();
- for (String prpId : prpIds) {
- Iterator<? extends PublicRenderParameter> i = prpDefs.iterator();
- QName qn = null;
- while (qn == null && i.hasNext()) {
- PublicRenderParameter prpDef = i.next();
- if (prpDef.getIdentifier().equals(prpId)) {
- qn = prpDef.getQName();
- if (qn == null) {
- // If qname is null, build a qnamme from the name & namespace fields
- String name = prpDef.getName();
- if (name == null) {
- LOGGER.error("Problem with PRP definition: Both QName and Nqme are null.");
- } else {
- qn = new QName(namespace, name);
- }
- }
- }
- }
- if (qn == null) {
- LOGGER.error("Problem with PRP definition: Both QName could not be obtained.");
- } else {
- PortalURLPublicParameter pupp = new PortalURLPublicParameter(pid, prpId, qn);
-
- // Add to set of all PRPs for page
- prpList.add(pupp);
-
- // Add PRP to the QName to PRP mapping
- if (qn2PRP.containsKey(qn)) {
- qn2PRP.get(qn).add(pupp);
- } else {
- List<PortalURLPublicParameter> s = new ArrayList<PortalURLPublicParameter>();
- s.add(pupp);
- qn2PRP.put(qn, s);
- qnList.add(qn);
- }
-
- if (isDebug) {
- dbgstr.append("\n Added PRP for window = " + pid + " QName = " + qn.toString()
- + ", ID = " + prpId);
- }
- }
- }
- }
-
- } catch (Exception e) {
- if (pad == null) {
- LOGGER.error("Could not get portlet app for: " + cxtpa);
- } else {
- LOGGER.error("Could not get portlet definition for: " + portletName);
- }
- }
- }
- if (isDebug) {
- dbgstr.append("\nOn page " + paco.getName() + " there are " + prpList.size()
- + " PRPs divided into " + qnList.size() + " groups with sizes: ");
- String prefix = "";
- for (List<PortalURLPublicParameter> lp : qn2PRP.values()) {
- dbgstr.append(prefix + lp.size());
- prefix = ", ";
- }
- LOGGER.debug(dbgstr.toString());
- }
- }
-
- /**
- * Private constructor for cloning
- */
- private PublicRenderParameterMapperImpl() {
- }
-
-
- public List<PortalURLPublicParameter> getPublicParameterGroup(int index) {
- List<PortalURLPublicParameter> oprps = new ArrayList<PortalURLPublicParameter>();
- QName qn = qnList.get(index);
- for (PortalURLPublicParameter prp : qn2PRP.get(qn)) {
- PortalURLPublicParameter p = prp.clone();
- String[] vals = (prp.getValues() == null) ? null : prp.getValues().clone();
- p.setValues(vals);
- oprps.add(p);
- }
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("For index: " + index + ", QName = " + qn + ", group size = "
- + oprps.size());
- }
- return oprps;
- }
-
- public int getNumberOfGroups() {
- return qnList.size();
- }
-
- public int getIndex(PortalURLPublicParameter prp) {
- 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) {
- PortalURLPublicParameter tmpPRP = new PortalURLPublicParameter(windowId, identifier, null);
- int ind = prpList.indexOf(tmpPRP);
- if (ind < 0) {
- LOGGER.warn("Public render parameter with window ID = " + windowId + ", ID = " + identifier + " could not be found.");
- } else {
- QName qn = prpList.get(ind).getQName();
- ind = qnList.indexOf(qn);
- }
- return ind;
- }
-
- public int getIndex(QName qname) {
- return qnList.indexOf(qname);
- }
-
- public void setValues(int index, String[] values) {
- List<PortalURLPublicParameter> oprps = qn2PRP.get(qnList.get(index));
- for (PortalURLPublicParameter prp : oprps) {
- prp.setValues(values.clone());
- }
- }
-
- public String[] getValues(int index) {
- List<PortalURLPublicParameter> oprps = qn2PRP.get(qnList.get(index));
- return oprps.get(0).getValues().clone();
- }
-
- public void setRemoved(int index, boolean removed) {
- List<PortalURLPublicParameter> oprps = qn2PRP.get(qnList.get(index));
- for (PortalURLPublicParameter prp : oprps) {
- prp.setRemoved(removed);
- }
- }
-
- public boolean getRemoved(int index) {
- List<PortalURLPublicParameter> oprps = qn2PRP.get(qnList.get(index));
- return oprps.get(0).isRemoved();
- }
-
- public List<Integer> getActiveIndexes() {
- ArrayList<Integer> inds = new ArrayList<Integer>();
- for (QName qn : qnList) {
- List<PortalURLPublicParameter> oprps = qn2PRP.get(qn);
- if (!oprps.get(0).isRemoved()) {
- inds.add(qnList.indexOf(qn));
- }
- }
- 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 = ", ";
- }
- 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/b9ee3ade/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterQNameMapper.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterQNameMapper.java b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterQNameMapper.java
new file mode 100644
index 0000000..c4fb4c1
--- /dev/null
+++ b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterQNameMapper.java
@@ -0,0 +1,291 @@
+/* Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+package org.apache.pluto.driver.services.portal;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.xml.namespace.QName;
+
+import org.apache.pluto.driver.url.PortalURLPublicParameter;
+import org.apache.pluto.container.driver.PortletRegistryService;
+import org.apache.pluto.container.om.portlet.PortletApplicationDefinition;
+import org.apache.pluto.container.om.portlet.PortletDefinition;
+import org.apache.pluto.container.om.portlet.PublicRenderParameter;
+
+/**
+ * Provides public render parameter mappings for a given page.
+ * This mapper maps public render parameters on the basis of Qnames.
+ * If two PRPs have the same QName, they are considered to refer to the same
+ * public render parameter. The mapping is limited to the current page.
+ *
+ * @author msnicklous
+ * @since 16/01/2015
+ */
+public class PublicRenderParameterQNameMapper implements PublicRenderParameterMapper {
+ private final Logger LOGGER = LoggerFactory.getLogger(PublicRenderParameterQNameMapper.class);
+
+ // Set of all public render parameters on the page
+ 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 =
+ new HashMap<QName, List<PortalURLPublicParameter>>();
+
+ private final ArrayList<QName> qnList = new ArrayList<QName>();
+
+ public PublicRenderParameterQNameMapper(PageConfig paco, PortletRegistryService pore) {
+
+ Collection<String> pids = paco.getPortletIds();
+ LOGGER.debug("Setting up the PRP mapper. There are " + pids.size() + " portlets to process.");
+
+ StringBuilder dbgstr = new StringBuilder(1024);
+ boolean isDebug = LOGGER.isDebugEnabled();
+ for (String pid : pids) {
+ if (isDebug) {
+ dbgstr.append("\n Processing portlet id = " + pid);
+ }
+
+ PortletWindowConfig pwc = null;
+ PortletApplicationDefinition pad = null;
+ PortletDefinition pd = null;
+
+ pwc = PortletWindowConfig.fromId(pid);
+ String cxtpa = pwc.getContextPath();
+ String portletName = pwc.getPortletName();
+
+ try {
+ pad = pore.getPortletApplication(cxtpa);
+ pd = pore.getPortlet(cxtpa, portletName);
+
+ if (isDebug) {
+ dbgstr.append("\n For context: " + cxtpa + ", App name is "
+ + pad.getName() + ", portlet name is " + pd.getPortletName());
+ }
+
+ Collection<String> prpIds = pd.getSupportedPublicRenderParameters();
+ if (prpIds != null && prpIds.size() > 0) {
+ Collection<? extends PublicRenderParameter> prpDefs = pad.getPublicRenderParameters();
+ String namespace = pad.getDefaultNamespace();
+ for (String prpId : prpIds) {
+ Iterator<? extends PublicRenderParameter> i = prpDefs.iterator();
+ QName qn = null;
+ while (qn == null && i.hasNext()) {
+ PublicRenderParameter prpDef = i.next();
+ if (prpDef.getIdentifier().equals(prpId)) {
+ qn = prpDef.getQName();
+ if (qn == null) {
+ // If qname is null, build a qnamme from the name & namespace fields
+ String name = prpDef.getName();
+ if (name == null) {
+ LOGGER.error("Problem with PRP definition: Both QName and Nqme are null.");
+ } else {
+ qn = new QName(namespace, name);
+ }
+ }
+ }
+ }
+ if (qn == null) {
+ LOGGER.error("Problem with PRP definition: Both QName could not be obtained.");
+ } else {
+ PortalURLPublicParameter pupp = new PortalURLPublicParameter(pid, prpId, qn);
+
+ // Add to set of all PRPs for page
+ prpList.add(pupp);
+
+ // Add PRP to the QName to PRP mapping
+ if (qn2PRP.containsKey(qn)) {
+ qn2PRP.get(qn).add(pupp);
+ } else {
+ List<PortalURLPublicParameter> s = new ArrayList<PortalURLPublicParameter>();
+ s.add(pupp);
+ qn2PRP.put(qn, s);
+ qnList.add(qn);
+ }
+
+ if (isDebug) {
+ dbgstr.append("\n Added PRP for window = " + pid + " QName = " + qn.toString()
+ + ", ID = " + prpId);
+ }
+ }
+ }
+ }
+
+ } catch (Exception e) {
+ if (pad == null) {
+ LOGGER.error("Could not get portlet app for: " + cxtpa);
+ } else {
+ LOGGER.error("Could not get portlet definition for: " + portletName);
+ }
+ }
+ }
+ if (isDebug) {
+ dbgstr.append("\nOn page " + paco.getName() + " there are " + prpList.size()
+ + " PRPs divided into " + qnList.size() + " groups with sizes: ");
+ String prefix = "";
+ for (List<PortalURLPublicParameter> lp : qn2PRP.values()) {
+ dbgstr.append(prefix + lp.size());
+ prefix = ", ";
+ }
+ LOGGER.debug(dbgstr.toString());
+ }
+ }
+
+ /**
+ * Private constructor for cloning
+ */
+ private PublicRenderParameterQNameMapper() {
+ }
+
+
+ public List<PortalURLPublicParameter> getPublicParameterGroup(int index) {
+ List<PortalURLPublicParameter> oprps = new ArrayList<PortalURLPublicParameter>();
+ QName qn = qnList.get(index);
+ for (PortalURLPublicParameter prp : qn2PRP.get(qn)) {
+ PortalURLPublicParameter p = prp.clone();
+ String[] vals = (prp.getValues() == null) ? null : prp.getValues().clone();
+ p.setValues(vals);
+ oprps.add(p);
+ }
+ if (LOGGER.isDebugEnabled()) {
+ LOGGER.debug("For index: " + index + ", QName = " + qn + ", group size = "
+ + oprps.size());
+ }
+ return oprps;
+ }
+
+ public int getNumberOfGroups() {
+ return qnList.size();
+ }
+
+ public int getIndex(PortalURLPublicParameter prp) {
+ 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) {
+ PortalURLPublicParameter tmpPRP = new PortalURLPublicParameter(windowId, identifier, null);
+ int ind = prpList.indexOf(tmpPRP);
+ if (ind < 0) {
+ LOGGER.warn("Public render parameter with window ID = " + windowId + ", ID = " + identifier + " could not be found.");
+ } else {
+ QName qn = prpList.get(ind).getQName();
+ ind = qnList.indexOf(qn);
+ }
+ return ind;
+ }
+
+ public int getIndex(QName qname) {
+ return qnList.indexOf(qname);
+ }
+
+ public void setValues(int index, String[] values) {
+ List<PortalURLPublicParameter> oprps = qn2PRP.get(qnList.get(index));
+ for (PortalURLPublicParameter prp : oprps) {
+ prp.setValues(values.clone());
+ }
+ }
+
+ public String[] getValues(int index) {
+ List<PortalURLPublicParameter> oprps = qn2PRP.get(qnList.get(index));
+ return oprps.get(0).getValues().clone();
+ }
+
+ public void setRemoved(int index, boolean removed) {
+ List<PortalURLPublicParameter> oprps = qn2PRP.get(qnList.get(index));
+ for (PortalURLPublicParameter prp : oprps) {
+ prp.setRemoved(removed);
+ }
+ }
+
+ public boolean getRemoved(int index) {
+ List<PortalURLPublicParameter> oprps = qn2PRP.get(qnList.get(index));
+ return oprps.get(0).isRemoved();
+ }
+
+ public List<Integer> getActiveIndexes() {
+ ArrayList<Integer> inds = new ArrayList<Integer>();
+ for (QName qn : qnList) {
+ List<PortalURLPublicParameter> oprps = qn2PRP.get(qn);
+ if (!oprps.get(0).isRemoved()) {
+ inds.add(qnList.indexOf(qn));
+ }
+ }
+ return inds;
+ }
+
+ public PublicRenderParameterQNameMapper clone() {
+ PublicRenderParameterQNameMapper prpm = new PublicRenderParameterQNameMapper();
+ // 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 = ", ";
+ }
+ 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/b9ee3ade/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterService.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterService.java b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterService.java
index 3dd10bf..3ad2fd4 100644
--- a/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterService.java
+++ b/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/portal/PublicRenderParameterService.java
@@ -36,5 +36,5 @@ public interface PublicRenderParameterService {
* @param page Page name
* @return A PRP mapper for the page
*/
- public PublicRenderParameterMapperImpl getPRPMapper(String page);
+ public PublicRenderParameterMapper getPRPMapper(String page);
}