Author: chris.laprun(a)jboss.com
Date: 2010-08-23 09:07:47 -0400 (Mon, 23 Aug 2010)
New Revision: 3890
Modified:
components/wsrp/trunk/producer/src/main/java/org/gatein/wsrp/producer/handlers/ServiceDescriptionHandler.java
components/wsrp/trunk/wsrp-producer-war/pom.xml
components/wsrp/trunk/wsrp-producer-war/src/test/java/org/gatein/wsrp/protocol/v2/ServiceDescriptionTestCase.java
Log:
- GTNWSRP-37: Implemented POP filtering and added test cases.
Modified:
components/wsrp/trunk/producer/src/main/java/org/gatein/wsrp/producer/handlers/ServiceDescriptionHandler.java
===================================================================
---
components/wsrp/trunk/producer/src/main/java/org/gatein/wsrp/producer/handlers/ServiceDescriptionHandler.java 2010-08-23
11:01:34 UTC (rev 3889)
+++
components/wsrp/trunk/producer/src/main/java/org/gatein/wsrp/producer/handlers/ServiceDescriptionHandler.java 2010-08-23
13:07:47 UTC (rev 3890)
@@ -131,7 +131,7 @@
serviceDescription.updatePortletDescriptions(portlets, gs.getDesiredLocales(),
registration);
}
- return serviceDescription.getServiceDescription(needsRegistrationProperties,
needsPortletDescriptions);
+ return serviceDescription.getServiceDescription(needsRegistrationProperties,
needsPortletDescriptions, gs.getPortletHandles());
}
public PortletDescription getPortletDescription(PortletContext portletContext,
List<String> desiredLocales, Registration registration) throws InvalidHandle,
OperationFailed
@@ -472,16 +472,58 @@
}
}
- private ServiceDescription getServiceDescription(boolean
needsRegistrationProperties, boolean needsPortletDescriptions)
+ private ServiceDescription getServiceDescription(boolean
needsRegistrationProperties, boolean needsPortletDescriptions, List<String>
portletHandles)
{
+ ServiceDescription serviceDescription;
if (needsRegistrationProperties)
{
- return needsPortletDescriptions ? registrationPortletsServiceDescription :
registrationNoPortletsServiceDescription;
+ serviceDescription = needsPortletDescriptions ?
registrationPortletsServiceDescription : registrationNoPortletsServiceDescription;
}
else
{
- return needsPortletDescriptions ? noRegistrationPortletsServiceDescription :
noRegistrationNoPortletsServiceDescription;
+ serviceDescription = needsPortletDescriptions ?
noRegistrationPortletsServiceDescription : noRegistrationNoPortletsServiceDescription;
}
+
+ // if we have a list of portlet handles, filter the list of offered portlets
+ if (ParameterValidation.existsAndIsNotEmpty(portletHandles))
+ {
+ List<PortletDescription> offeredPortlets =
serviceDescription.getOfferedPortlets();
+ List<PortletDescription> filteredPortlets = new
ArrayList<PortletDescription>(offeredPortlets.size());
+ for (String handle : portletHandles)
+ {
+ for (PortletDescription description : offeredPortlets)
+ {
+ if (description.getPortletHandle().equals(handle))
+ {
+ filteredPortlets.add(description);
+ break; // no need to continue looping over portlets for this
particular handle
+ }
+ }
+ }
+
+ // shallow-clone the existing service description since we're not
modifying it apart from the offered portlets list
+ ServiceDescription filtered =
WSRPTypeFactory.createServiceDescription(serviceDescription.isRequiresRegistration());
+ filtered.setExportDescription(serviceDescription.getExportDescription());
+
filtered.setMayReturnRegistrationState(serviceDescription.isMayReturnRegistrationState());
+
filtered.setRegistrationPropertyDescription(serviceDescription.getRegistrationPropertyDescription());
+ filtered.setRequiresInitCookie(serviceDescription.getRequiresInitCookie());
+ filtered.setResourceList(serviceDescription.getResourceList());
+ filtered.setSchemaType(serviceDescription.getSchemaType());
+
filtered.getCustomModeDescriptions().addAll(serviceDescription.getCustomModeDescriptions());
+
filtered.getCustomWindowStateDescriptions().addAll(serviceDescription.getCustomWindowStateDescriptions());
+
filtered.getEventDescriptions().addAll(serviceDescription.getEventDescriptions());
+
filtered.getExtensionDescriptions().addAll(serviceDescription.getExtensionDescriptions());
+ filtered.getExtensions().addAll(serviceDescription.getExtensions());
+ filtered.getLocales().addAll(serviceDescription.getLocales());
+
filtered.getSupportedOptions().addAll(serviceDescription.getSupportedOptions());
+
+ // add filtered portlets
+ filtered.getOfferedPortlets().addAll(filteredPortlets);
+
+ return filtered;
+ }
+
+ return serviceDescription;
}
public void addEventInfo(EventInfo info, List<String> desiredLocales)
Modified: components/wsrp/trunk/wsrp-producer-war/pom.xml
===================================================================
--- components/wsrp/trunk/wsrp-producer-war/pom.xml 2010-08-23 11:01:34 UTC (rev 3889)
+++ components/wsrp/trunk/wsrp-producer-war/pom.xml 2010-08-23 13:07:47 UTC (rev 3890)
@@ -55,8 +55,8 @@
<profile>
<id>cargo-debug</id>
<properties>
- <!-- add the jdwp setup for the testus -->
- <cargo.jvmargs.debug>-Xdebug
-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
+ <!-- add the jdwp setup for the tests -->
+ <cargo.jvmargs.debug>-Xdebug
-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y
</cargo.jvmargs.debug>
<cargo.jvmargs>${cargo.jvmargs.default}
${cargo.jvmargs.debug}</cargo.jvmargs>
</properties>
Modified:
components/wsrp/trunk/wsrp-producer-war/src/test/java/org/gatein/wsrp/protocol/v2/ServiceDescriptionTestCase.java
===================================================================
---
components/wsrp/trunk/wsrp-producer-war/src/test/java/org/gatein/wsrp/protocol/v2/ServiceDescriptionTestCase.java 2010-08-23
11:01:34 UTC (rev 3889)
+++
components/wsrp/trunk/wsrp-producer-war/src/test/java/org/gatein/wsrp/protocol/v2/ServiceDescriptionTestCase.java 2010-08-23
13:07:47 UTC (rev 3890)
@@ -23,7 +23,9 @@
package org.gatein.wsrp.protocol.v2;
+import com.google.common.base.Function;
import org.gatein.common.util.ParameterValidation;
+import org.gatein.wsrp.WSRPUtils;
import org.gatein.wsrp.producer.WSRPProducerBaseTest;
import org.gatein.wsrp.protocol.v1.NeedPortletHandleTest;
import org.gatein.wsrp.servlet.ServletAccess;
@@ -40,6 +42,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.oasis.wsrp.v2.EventDescription;
+import org.oasis.wsrp.v2.GetServiceDescription;
import org.oasis.wsrp.v2.InvalidRegistration;
import org.oasis.wsrp.v2.ModifyRegistrationRequired;
import org.oasis.wsrp.v2.OperationFailed;
@@ -49,6 +52,7 @@
import org.oasis.wsrp.v2.ServiceDescription;
import javax.xml.namespace.QName;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -95,6 +99,104 @@
}
@Test
+ public void testServiceDescriptionFilteringEmptyHandleList() throws OperationFailed,
ResourceSuspended, ModifyRegistrationRequired, InvalidRegistration
+ {
+ GetServiceDescription gsd = getNoRegistrationServiceDescriptionRequest();
+
+ ServiceDescription original = producer.getServiceDescription(gsd);
+
+ gsd.getPortletHandles().clear();
+
+ assertEquals(original, producer.getServiceDescription(gsd));
+ }
+
+ public void testServiceDescriptionFilterInexistentFilter() throws Exception
+ {
+ GetServiceDescription gsd = getNoRegistrationServiceDescriptionRequest();
+ gsd.getPortletHandles().add("Inexistent blah");
+
+ try
+ {
+ deploy("test-basic-portlet.war");
+ deploy("test-markup-portlet.war");
+ deploy("test-session-portlet.war");
+
+ ServiceDescription sd = producer.getServiceDescription(gsd);
+ assertEquals(3, sd.getOfferedPortlets().size());
+ }
+ finally
+ {
+ undeploy("test-basic-portlet.war");
+ undeploy("test-markup-portlet.war");
+ undeploy("test-session-portlet.war");
+ }
+ }
+
+ @Test
+ public void testServiceDescriptionFiltering() throws Exception
+ {
+ try
+ {
+ GetServiceDescription gsd = getNoRegistrationServiceDescriptionRequest();
+
+ deploy("test-basic-portlet.war");
+ deploy("test-markup-portlet.war");
+ deploy("test-session-portlet.war");
+ ServiceDescription sd = producer.getServiceDescription(gsd);
+ assertEquals(3, sd.getOfferedPortlets().size());
+
+
+ // extract handle for portlet deployed in test-basic-portlet.war and the rest of
the handles
+ List<String> handles = WSRPUtils.transform(sd.getOfferedPortlets(), new
Function<PortletDescription, String>()
+ {
+ public String apply(PortletDescription from)
+ {
+ return from.getPortletHandle();
+ }
+ });
+ String filter = null;
+ List<String> filteredHandles = new ArrayList<String>(2);
+ for (String handle : handles)
+ {
+ if (handle.contains("test-basic-portlet"))
+ {
+ filter = handle;
+ }
+ else
+ {
+ filteredHandles.add(handle);
+ }
+ }
+
+ gsd.getPortletHandles().add(filter);
+ sd = producer.getServiceDescription(gsd);
+ // should now have only 1 portlet: BasicPortlet
+ assertEquals(1, sd.getOfferedPortlets().size());
+ assertEquals(filter, sd.getOfferedPortlets().get(0).getPortletHandle());
+
+ undeploy("test-basic-portlet.war");
+ sd = producer.getServiceDescription(gsd);
+ // should now have 0 offered portlets
+ assertTrue(sd.getOfferedPortlets().isEmpty());
+
+ // remove portlet handles, we should now have 2 offered portlets
+ gsd.getPortletHandles().clear();
+ sd = producer.getServiceDescription(gsd);
+ List<PortletDescription> offeredPortlets = sd.getOfferedPortlets();
+ assertEquals(2, offeredPortlets.size());
+ // check that we do have the expected portlets
+
assertTrue((offeredPortlets.get(0).getPortletHandle().contains(filteredHandles.get(0))
&& offeredPortlets.get(1).getPortletHandle().equals(filteredHandles.get(1)))
+ || (offeredPortlets.get(1).getPortletHandle().equals(filteredHandles.get(0))
&& offeredPortlets.get(0).getPortletHandle().equals(filteredHandles.get(1))));
+ }
+ finally
+ {
+ undeploy("test-basic-portlet.war");
+ undeploy("test-markup-portlet.war");
+ undeploy("test-session-portlet.war");
+ }
+ }
+
+ @Test
public void testSupportedOptions() throws OperationFailed, InvalidRegistration,
ResourceSuspended, ModifyRegistrationRequired
{
ServiceDescription description =
producer.getServiceDescription(getNoRegistrationServiceDescriptionRequest());