Author: julien(a)jboss.com
Date: 2008-02-07 13:31:21 -0500 (Thu, 07 Feb 2008)
New Revision: 9838
Removed:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/impl/state/MutablePageNavigationalState.java
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/PortletRequestHandler.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/impl/state/PageNavigationalStateImpl.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/impl/state/StateControllerContextImpl.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/state/PageNavigationalState.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/state/StateControllerContext.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortalServlet.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/controller/AbstractPortletControllerContext.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/ControllerFilter.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/simple/SimplePortalServlet.java
modules/portlet/trunk/test/src/test/java/org/jboss/portal/portlet/controller/StateControllerContextTestCase.java
Log:
simplify a bit, make PageNavigationalState use a boolean instead of having a *Mutable*
subclass
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/PortletRequestHandler.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/PortletRequestHandler.java 2008-02-07
18:01:50 UTC (rev 9837)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/PortletRequestHandler.java 2008-02-07
18:31:21 UTC (rev 9838)
@@ -88,11 +88,11 @@
PageNavigationalState pageState = portletRequest.getPageState();
if (pageState == null)
{
- pageState = stateContext.createPageState();
+ pageState = stateContext.createPageState(true);
}
else
{
- pageState = stateContext.clonePageState(pageState);
+ pageState = stateContext.clonePageState(pageState, true);
}
//
Deleted:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/impl/state/MutablePageNavigationalState.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/impl/state/MutablePageNavigationalState.java 2008-02-07
18:01:50 UTC (rev 9837)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/impl/state/MutablePageNavigationalState.java 2008-02-07
18:31:21 UTC (rev 9838)
@@ -1,102 +0,0 @@
-/******************************************************************************
- * JBoss, a division of Red Hat *
- * Copyright 2008, Red Hat Middleware, LLC, and individual *
- * contributors as indicated by the @authors tag. See the *
- * copyright.txt in the distribution for a full listing of *
- * individual contributors. *
- * *
- * This is free software; you can redistribute it and/or modify it *
- * under the terms of the GNU Lesser General Public License as *
- * published by the Free Software Foundation; either version 2.1 of *
- * the License, or (at your option) any later version. *
- * *
- * This software is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
- * Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with this software; if not, write to the Free *
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
- ******************************************************************************/
-package org.jboss.portal.portlet.controller.impl.state;
-
-import org.jboss.portal.portlet.PortletInvokerException;
-import org.jboss.portal.portlet.controller.state.WindowNavigationalState;
-import org.jboss.portal.portlet.info.NavigationInfo;
-import org.jboss.portal.portlet.info.ParameterInfo;
-import org.jboss.portal.portlet.info.PortletInfo;
-
-import javax.xml.namespace.QName;
-import java.util.Map;
-
-/**
- * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
- * @version $Revision: 1.1 $
- */
-class MutablePageNavigationalState extends PageNavigationalStateImpl
-{
-
- MutablePageNavigationalState(StateControllerContextImpl context)
- {
- super(context);
- }
-
- public MutablePageNavigationalState(PageNavigationalStateImpl original)
- {
- super(original);
- }
-
- public void setWindowNavigationalState(String windowId, WindowNavigationalState
windowState)
- {
- windows.put(windowId, windowState);
- }
-
- public void setPublicNavigationalState(String windowId, Map<String, String[]>
update)
- {
- try
- {
- PortletInfo info = context.portletControllerContext.getPortletInfo(windowId);
-
- NavigationInfo navigationInfo = info.getNavigation();
- for (Map.Entry<String, String[]> entry : update.entrySet())
- {
- String id = entry.getKey();
-
- //
- ParameterInfo parameterInfo = navigationInfo.getPublicParameter(id);
-
- //
- if (parameterInfo != null)
- {
- QName name = parameterInfo.getName();
- String[] value = entry.getValue();
- if (value.length > 0)
- {
- setPublicNavigationalState(name, value);
- }
- else
- {
- removePublicNavigationalState(name);
- }
- }
- }
- }
- catch (PortletInvokerException e)
- {
- e.printStackTrace();
- }
- }
-
- public void setPublicNavigationalState(QName name, String[] value)
- {
- // We clone the value in order to keep the state not mutated by a side effect
- page.put(name, value.clone());
- }
-
- public void removePublicNavigationalState(QName name)
- {
- page.remove(name);
- }
-}
\ No newline at end of file
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/impl/state/PageNavigationalStateImpl.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/impl/state/PageNavigationalStateImpl.java 2008-02-07
18:01:50 UTC (rev 9837)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/impl/state/PageNavigationalStateImpl.java 2008-02-07
18:31:21 UTC (rev 9838)
@@ -28,6 +28,7 @@
import org.jboss.portal.portlet.controller.state.WindowNavigationalState;
import org.jboss.portal.portlet.info.ParameterInfo;
import org.jboss.portal.portlet.info.PortletInfo;
+import org.jboss.portal.portlet.info.NavigationInfo;
import javax.xml.namespace.QName;
import java.io.Serializable;
@@ -51,18 +52,23 @@
/** . */
protected final Map<QName, String[]> page;
- public PageNavigationalStateImpl(StateControllerContextImpl context)
+ /** . */
+ private final boolean modifiable;
+
+ PageNavigationalStateImpl(StateControllerContextImpl context, boolean modifiable)
{
this.context = context;
this.windows = new HashMap<String, WindowNavigationalState>();
this.page = new HashMap<QName, String[]>();
+ this.modifiable = modifiable;
}
- public PageNavigationalStateImpl(PageNavigationalStateImpl original)
+ public PageNavigationalStateImpl(PageNavigationalStateImpl original, boolean
modifiable)
{
this.context = original.context;
this.windows = new HashMap<String,
WindowNavigationalState>(original.windows);
this.page = new HashMap<QName, String[]>(original.page);
+ this.modifiable = modifiable;
}
public Set<String> getWindowIds()
@@ -115,24 +121,78 @@
return page.get(name).clone();
}
- public void setWindowNavigationalState(String windowId, WindowNavigationalState
windowState) throws UnsupportedOperationException
+ public void setWindowNavigationalState(String windowId, WindowNavigationalState
windowState)
{
- throw new UnsupportedOperationException();
+ if (!modifiable)
+ {
+ throw new IllegalStateException("The page navigational state is not
modifiable");
+ }
+
+ //
+ windows.put(windowId, windowState);
}
public void setPublicNavigationalState(String windowId, Map<String, String[]>
update)
{
- throw new UnsupportedOperationException();
+ if (!modifiable)
+ {
+ throw new IllegalStateException("The page navigational state is not
modifiable");
+ }
+
+ //
+ try
+ {
+ PortletInfo info = context.portletControllerContext.getPortletInfo(windowId);
+
+ NavigationInfo navigationInfo = info.getNavigation();
+ for (Map.Entry<String, String[]> entry : update.entrySet())
+ {
+ String id = entry.getKey();
+
+ //
+ ParameterInfo parameterInfo = navigationInfo.getPublicParameter(id);
+
+ //
+ if (parameterInfo != null)
+ {
+ QName name = parameterInfo.getName();
+ String[] value = entry.getValue();
+ if (value.length > 0)
+ {
+ setPublicNavigationalState(name, value);
+ }
+ else
+ {
+ removePublicNavigationalState(name);
+ }
+ }
+ }
+ }
+ catch (PortletInvokerException e)
+ {
+ e.printStackTrace();
+ }
}
- public void setPublicNavigationalState(QName name, String[] value) throws
UnsupportedOperationException
+ public void setPublicNavigationalState(QName name, String[] value)
{
- throw new UnsupportedOperationException();
+ if (!modifiable)
+ {
+ throw new IllegalStateException("The page navigational state is not
modifiable");
+ }
+
+ // We clone the value in order to keep the state not mutated by a side effect
+ page.put(name, value.clone());
}
- public void removePublicNavigationalState(QName name) throws
UnsupportedOperationException
+ public void removePublicNavigationalState(QName name)
{
- throw new UnsupportedOperationException();
+ if (!modifiable)
+ {
+ throw new IllegalStateException("The page navigational state is not
modifiable");
+ }
+
+ //
+ page.remove(name);
}
-
}
\ No newline at end of file
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/impl/state/StateControllerContextImpl.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/impl/state/StateControllerContextImpl.java 2008-02-07
18:01:50 UTC (rev 9837)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/impl/state/StateControllerContextImpl.java 2008-02-07
18:31:21 UTC (rev 9838)
@@ -92,14 +92,14 @@
this.portletControllerContext = portletControllerContext;
}
- public PageNavigationalState clonePageState(PageNavigationalState pageState)
+ public PageNavigationalState clonePageState(PageNavigationalState pageState, boolean
modifiable)
{
- return new MutablePageNavigationalState((PageNavigationalStateImpl)pageState);
+ return new PageNavigationalStateImpl((PageNavigationalStateImpl)pageState,
modifiable);
}
- public PageNavigationalState createPageState()
+ public PageNavigationalState createPageState(boolean modifiable)
{
- return new MutablePageNavigationalState(this);
+ return new PageNavigationalStateImpl(this, modifiable);
}
public byte[] serialize(PageNavigationalState object)
@@ -192,14 +192,14 @@
}
}
- public PageNavigationalState unserialize(byte[] bytes)
+ public PageNavigationalState unserialize(byte[] bytes, boolean modifiable)
{
try
{
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
GZIPInputStream zis = new GZIPInputStream(bais);
DataInputStream in = new DataInputStream(zis);
- PageNavigationalStateImpl pageState = new MutablePageNavigationalState(this);
+ PageNavigationalStateImpl pageState = new PageNavigationalStateImpl(this,
modifiable);
//
int size = in.readInt();
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/state/PageNavigationalState.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/state/PageNavigationalState.java 2008-02-07
18:01:50 UTC (rev 9837)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/state/PageNavigationalState.java 2008-02-07
18:31:21 UTC (rev 9838)
@@ -29,7 +29,9 @@
import java.util.Set;
/**
- * Defines the page navigational state that the controller needs.
+ * Defines the page navigational state view that the controller needs to operate on. Its
name begins with page
+ * however it does not mandate that the represented context to be a page. I.E it could
represent a set
+ * of physical pages or something else.
*
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
* @version $Revision: 1.1 $
@@ -37,6 +39,11 @@
public interface PageNavigationalState
{
+ /**
+ * Returns the window ids referenced.
+ *
+ * @return a set of window id
+ */
Set<String> getWindowIds();
/**
@@ -44,17 +51,19 @@
*
* @param windowId the window
* @return the window navigational state
+ * @throws IllegalArgumentException if an argument is not valid
*/
- WindowNavigationalState getWindowNavigationalState(String windowId);
+ WindowNavigationalState getWindowNavigationalState(String windowId) throws
IllegalArgumentException;
/**
* Update the navigational state of a window.
*
* @param windowId the window id
* @param windowState the window state
- * @throws UnsupportedOperationException if the page state is read only
+ * @throws IllegalArgumentException if an argument is not valid
+ * @throws IllegalStateException if the page state is read only
*/
- void setWindowNavigationalState(String windowId, WindowNavigationalState windowState)
throws UnsupportedOperationException;
+ void setWindowNavigationalState(String windowId, WindowNavigationalState windowState)
throws IllegalArgumentException, IllegalStateException;
/**
* Obtain the public navigational state of a window. The interpretation of what should
be retrieved is left up to the
@@ -63,8 +72,9 @@
*
* @param windowId the window id
* @return the public navigational state
+ * @throws IllegalArgumentException if an argument is not valid
*/
- ParameterMap getPublicNavigationalState(String windowId);
+ ParameterMap getPublicNavigationalState(String windowId) throws
IllegalArgumentException;
/**
* Update the public navigational state of a window. The interpretation of what should
be updated is left up to the
@@ -75,13 +85,36 @@
*
* @param windowId the window id
* @param update the updates
- * @throws UnsupportedOperationException if the page state is read only
+ * @throws IllegalArgumentException if an argument is not valid
+ * @throws IllegalStateException if the page state is read only
*/
- void setPublicNavigationalState(String windowId, Map<String, String[]> update)
throws UnsupportedOperationException;
+ void setPublicNavigationalState(String windowId, Map<String, String[]> update)
throws IllegalArgumentException, IllegalStateException;
- String[] getPublicNavigationalState(QName name);
+ /**
+ * Returns a public navigational state entry or null if it is not found.
+ *
+ * @param name the name
+ * @return the entry value
+ * @throws IllegalArgumentException if an argument is not valid
+ */
+ String[] getPublicNavigationalState(QName name) throws IllegalArgumentException;
- void setPublicNavigationalState(QName name, String[] value);
+ /**
+ * Sets a public navigational state entry.
+ *
+ * @param name the name
+ * @param value the new value
+ * @throws IllegalArgumentException if an argument is not valid
+ * @throws IllegalStateException if the page state is read only
+ */
+ void setPublicNavigationalState(QName name, String[] value) throws
IllegalArgumentException, IllegalStateException;
- void removePublicNavigationalState(QName name);
+ /**
+ * Removes a public navigational state entry.
+ *
+ * @param name the name
+ * @throws IllegalArgumentException if an argument is not valid
+ * @throws IllegalStateException if the page state is read only
+ */
+ void removePublicNavigationalState(QName name) throws IllegalArgumentException,
IllegalStateException;
}
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/state/StateControllerContext.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/state/StateControllerContext.java 2008-02-07
18:01:50 UTC (rev 9837)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/state/StateControllerContext.java 2008-02-07
18:31:21 UTC (rev 9838)
@@ -35,15 +35,17 @@
* Clone an existing page state object.
*
* @param pageState the page state to clone
+ * @param modifiable set the modifiable status
* @return the page state clone
*/
- PageNavigationalState clonePageState(PageNavigationalState pageState);
+ PageNavigationalState clonePageState(PageNavigationalState pageState, boolean
modifiable);
/**
* Create a new page state object.
*
+ * @param modifiable set the modifiable status
* @return the new page state
*/
- PageNavigationalState createPageState();
+ PageNavigationalState createPageState(boolean modifiable);
}
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortalServlet.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortalServlet.java 2008-02-07
18:01:50 UTC (rev 9837)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortalServlet.java 2008-02-07
18:31:21 UTC (rev 9838)
@@ -87,7 +87,7 @@
}
else
{
- PageRenderer renderer = new PageRenderer(new ResponseProperties(),
context.getStateControllerContext().createPageState());
+ PageRenderer renderer = new PageRenderer(new ResponseProperties(),
context.getStateControllerContext().createPageState(false));
//
renderer.render(context);
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/controller/AbstractPortletControllerContext.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/controller/AbstractPortletControllerContext.java 2008-02-07
18:01:50 UTC (rev 9837)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/controller/AbstractPortletControllerContext.java 2008-02-07
18:31:21 UTC (rev 9838)
@@ -133,7 +133,7 @@
if (context != null)
{
byte[] bytes = Base64.decode(context, true);
- pageState = tmp.unserialize(bytes);
+ pageState = tmp.unserialize(bytes, false);
}
//
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/ControllerFilter.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/ControllerFilter.java 2008-02-07
18:01:50 UTC (rev 9837)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/ControllerFilter.java 2008-02-07
18:31:21 UTC (rev 9838)
@@ -223,7 +223,7 @@
Page page = context.getPage();
if (pageState == null)
{
- pageState = context.getStateControllerContext().createPageState();
+ pageState = context.getStateControllerContext().createPageState(false);
}
// Look if we need to handle maxmized rendering
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/simple/SimplePortalServlet.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/simple/SimplePortalServlet.java 2008-02-07
18:01:50 UTC (rev 9837)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/simple/SimplePortalServlet.java 2008-02-07
18:31:21 UTC (rev 9838)
@@ -87,7 +87,7 @@
}
else
{
- PageRenderer renderer = new PageRenderer(new ResponseProperties(),
context.getStateControllerContext().createPageState());
+ PageRenderer renderer = new PageRenderer(new ResponseProperties(),
context.getStateControllerContext().createPageState(false));
//
renderer.render(context);
Modified:
modules/portlet/trunk/test/src/test/java/org/jboss/portal/portlet/controller/StateControllerContextTestCase.java
===================================================================
---
modules/portlet/trunk/test/src/test/java/org/jboss/portal/portlet/controller/StateControllerContextTestCase.java 2008-02-07
18:01:50 UTC (rev 9837)
+++
modules/portlet/trunk/test/src/test/java/org/jboss/portal/portlet/controller/StateControllerContextTestCase.java 2008-02-07
18:31:21 UTC (rev 9838)
@@ -62,7 +62,7 @@
@Test
public void testMarshalling1()
{
- PageNavigationalState pageNS = cc.createPageState();
+ PageNavigationalState pageNS = cc.createPageState(true);
assertMarshallable(pageNS);
}
@@ -89,7 +89,7 @@
private void test(StateString portletNavigationalState, Mode mode, WindowState
windowState)
{
- PageNavigationalState pageNS = cc.createPageState();
+ PageNavigationalState pageNS = cc.createPageState(true);
pageNS.setWindowNavigationalState("foo", new
WindowNavigationalState(portletNavigationalState, mode, windowState));
assertMarshallable(pageNS);
}
@@ -97,7 +97,7 @@
private void assertMarshallable(PageNavigationalState pageNS)
{
byte[] bytes = cc.serialize(pageNS);
- PageNavigationalState expectedPageNS = cc.unserialize(bytes);
+ PageNavigationalState expectedPageNS = cc.unserialize(bytes, true);
assertEquals(expectedPageNS.getWindowIds(), pageNS.getWindowIds());
for (String windowId : expectedPageNS.getWindowIds())
{