Author: julien(a)jboss.com
Date: 2008-06-29 10:28:53 -0400 (Sun, 29 Jun 2008)
New Revision: 11192
Modified:
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/content/portlet/PortletContentHandler.java
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/content/portlet/controller/PresentationPortletPageNavigationalState.java
Log:
optimal implementation of public navigational state for portlet windows
Modified:
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/content/portlet/PortletContentHandler.java
===================================================================
---
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/content/portlet/PortletContentHandler.java 2008-06-29
14:04:55 UTC (rev 11191)
+++
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/content/portlet/PortletContentHandler.java 2008-06-29
14:28:53 UTC (rev 11192)
@@ -135,12 +135,12 @@
PageUpdateResponse pageUpdate = (PageUpdateResponse)response;
//
- PresentationPortletPageNavigationalState blah =
(PresentationPortletPageNavigationalState)pageUpdate.getPageNavigationalState();
+ PresentationPortletPageNavigationalState updatedPNS =
(PresentationPortletPageNavigationalState)pageUpdate.getPageNavigationalState();
- //
- if (blah.isModifiable())
+ // If it was modifiable we need to check
+ if (updatedPNS.isModifiable())
{
- NavigationalStateContext tutu = blah.getNavigationalStateContext();
+ NavigationalStateContext tutu = updatedPNS.getNavigationalStateContext();
if (tutu instanceof DelegatingNavigationalStateContext)
{
((DelegatingNavigationalStateContext)tutu).flush();
Modified:
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/content/portlet/controller/PresentationPortletPageNavigationalState.java
===================================================================
---
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/content/portlet/controller/PresentationPortletPageNavigationalState.java 2008-06-29
14:04:55 UTC (rev 11191)
+++
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/content/portlet/controller/PresentationPortletPageNavigationalState.java 2008-06-29
14:28:53 UTC (rev 11192)
@@ -28,8 +28,6 @@
import org.jboss.portal.portlet.info.ParameterInfo;
import org.jboss.portal.portlet.info.NavigationInfo;
import org.jboss.portal.presentation.state.navigational.NavigationalStateContext;
-import
org.jboss.portal.presentation.impl.state.navigational.DelegatingNavigationalStateContext;
-import
org.jboss.portal.presentation.impl.state.navigational.NavigationalStateContextImpl;
import org.jboss.portal.Mode;
import org.jboss.portal.WindowState;
@@ -37,6 +35,7 @@
import java.util.Set;
import java.util.Map;
import java.util.HashMap;
+import java.util.HashSet;
/**
* @author <a href="mailto:julien@jboss-portal.org">Julien
Viet</a>
@@ -46,6 +45,9 @@
{
/** . */
+ private static final String[] EMPTY_STRINGS = new String[0];
+
+ /** . */
private final PresentationPortletControllerContext portletControllerContext;
/** . */
@@ -102,7 +104,7 @@
public Map<String, String[]> getPortletPublicNavigationalState(String
portletWindowId) throws IllegalArgumentException
{
- Map<QName, String[]> pageParameters = (Map<QName,
String[]>)navigationalStateContext.getProperty(portletControllerContext.getPageId(),
"portlet");
+ Map<QName, String[]> pageParameters = (Map<QName,
String[]>)navigationalStateContext.getProperty(portletWindowId, "public");
//
Map<String, String[]> portletParameters = null;
@@ -144,53 +146,60 @@
}
//
- HashMap<QName, String[]> pageParameters = (HashMap<QName,
String[]>)navigationalStateContext.getProperty(portletControllerContext.getPageId(),
"portlet");
+ NavigationInfo navigationInfo =
portletControllerContext.getPortletInfo(portletWindowId).getNavigation();
//
- if (pageParameters == null)
+ for (Map.Entry<String, String[]> entry : update.entrySet())
{
- pageParameters = new HashMap<QName, String[]>();
+ ParameterInfo parameterInfo =
navigationInfo.getPublicParameter(entry.getKey());
+
+ //
+ setPublicNavigationalState(parameterInfo.getName(), entry.getValue());
}
+ }
- //
- NavigationInfo navigationInfo =
portletControllerContext.getPortletInfo(portletWindowId).getNavigation();
+ public Set<QName> getPublicNames()
+ {
+ Set<QName> publicNames = new HashSet<QName>();
//
- for (Map.Entry<String, String[]> entry : update.entrySet())
+ for (String portletWindowId : portletControllerContext.getWindowIds())
{
- ParameterInfo parameterInfo =
navigationInfo.getPublicParameter(entry.getKey());
+ NavigationInfo navigationInfo =
portletControllerContext.getPortletInfo(portletWindowId).getNavigation();
//
- QName parameterName = parameterInfo.getName();
-
- if (entry.getValue().length == 0)
+ for (ParameterInfo parameterInfo : navigationInfo.getPublicParameters())
{
- pageParameters.remove(parameterName);
+ publicNames.add(parameterInfo.getName());
}
- else
- {
- pageParameters.put(parameterName, entry.getValue());
- }
}
//
- navigationalStateContext.setProperty(portletControllerContext.getPageId(),
"portlet", pageParameters);
+ return publicNames;
}
- public Set<QName> getPublicNames()
+ public String[] getPublicNavigationalState(QName name) throws
IllegalArgumentException
{
- HashMap<QName, String[]> pageParameters = (HashMap<QName,
String[]>)navigationalStateContext.getProperty(portletControllerContext.getPageId(),
"portlet");
+ for (String portletWindowId : portletControllerContext.getWindowIds())
+ {
+ HashMap<QName, String[]> publicParameters = (HashMap<QName,
String[]>)navigationalStateContext.getProperty(portletWindowId, "public");
- //
- return pageParameters != null ? pageParameters.keySet() : null;
- }
+ //
+ if (publicParameters != null)
+ {
+ String[] value = publicParameters.get(name);
- public String[] getPublicNavigationalState(QName name) throws
IllegalArgumentException
- {
- Map<QName, String[]> pageParameters = (Map<QName,
String[]>)navigationalStateContext.getProperty(portletControllerContext.getPageId(),
"portlet");
+ {
+ if (value != null)
+ {
+ return value;
+ }
+ }
+ }
+ }
//
- return pageParameters != null ? pageParameters.get(name) : null;
+ return null;
}
public void setPublicNavigationalState(QName name, String[] value) throws
IllegalArgumentException, IllegalStateException
@@ -201,38 +210,47 @@
}
//
- HashMap<QName, String[]> pageParameters = (HashMap<QName,
String[]>)navigationalStateContext.getProperty(portletControllerContext.getPageId(),
"portlet");
-
- //
- if (pageParameters == null)
+ for (String portletWindowId : portletControllerContext.getWindowIds())
{
- pageParameters = new HashMap<QName, String[]>();
- }
+ NavigationInfo navigationInfo =
portletControllerContext.getPortletInfo(portletWindowId).getNavigation();
- //
- pageParameters.put(name, value);
+ //
+ HashMap<QName, String[]> publicParameters = (HashMap<QName,
String[]>)navigationalStateContext.getProperty(portletWindowId, "public");
- //
- navigationalStateContext.setProperty(portletControllerContext.getPageId(),
"portlet", pageParameters);
- }
+ //
+ ParameterInfo parameterInfo = navigationInfo.getPublicParameter(name);
- public void removePublicNavigationalState(QName name) throws IllegalArgumentException,
IllegalStateException
- {
- if (!modifiable)
- {
- throw new IllegalStateException();
- }
+ //
+ if (parameterInfo != null)
+ {
+ if (publicParameters == null)
+ {
+ publicParameters = new HashMap<QName, String[]>();
+ }
- //
- HashMap<QName, String[]> pageParameters = (HashMap<QName,
String[]>)navigationalStateContext.getProperty(portletControllerContext.getPageId(),
"portlet");
+ //
+ QName parameterName = parameterInfo.getName();
- //
- if (pageParameters != null)
- {
- pageParameters.remove(name);
+ if (value.length == 0)
+ {
+ publicParameters.remove(parameterName);
+ }
+ else
+ {
+ publicParameters.put(parameterName, value);
+ }
+ }
//
- navigationalStateContext.setProperty(portletControllerContext.getPageId(),
"portlet", pageParameters);
+ if (publicParameters != null)
+ {
+ navigationalStateContext.setProperty(portletWindowId, "public",
publicParameters);
+ }
}
}
+
+ public void removePublicNavigationalState(QName name) throws IllegalArgumentException,
IllegalStateException
+ {
+ setPublicNavigationalState(name, EMPTY_STRINGS);
+ }
}