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 2014/08/25 11:55:19 UTC

[15/22] began work on generating the additional spec tests and the portlet tab library tests again in order to improve structure and correct problems in test case names.

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/23a1c547/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_ActionEventHandling.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_ActionEventHandling.java b/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_ActionEventHandling.java
new file mode 100644
index 0000000..0e838ca
--- /dev/null
+++ b/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_ActionEventHandling.java
@@ -0,0 +1,289 @@
+/*  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 javax.portlet.tck.portlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.xml.namespace.QName;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.beans.JSR286SpecTestCaseDetails.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.PortletSession.*;
+import static javax.portlet.ResourceURL.*;
+
+/**
+ * This portlet implements several test cases for the JSR 362 TCK. The test case names
+ * are defined in the /src/main/resources/xml-resources/additionalTCs.xml
+ * file. The build process will integrate the test case names defined in the 
+ * additionalTCs.xml file into the complete list of test case names for execution by the driver.
+ *
+ * This is the main portlet for the test cases. If the test cases call for events, this portlet
+ * will initiate the events, but not process them. The processing is done in the companion 
+ * portlet AddlPortletTests_SPEC2_15_ActionEventHandling_event
+ *
+ */
+public class AddlPortletTests_SPEC2_15_ActionEventHandling implements Portlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         AddlPortletTests_SPEC2_15_ActionEventHandling.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+   
+   private PortletConfig portletConfig = null;
+
+   @Override
+   public void init(PortletConfig config) throws PortletException {
+      this.portletConfig = config;
+   }
+
+   @Override
+   public void destroy() {
+   }
+
+   @Override
+   public void processAction(ActionRequest portletReq, ActionResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet processAction entry");
+
+      portletResp.setRenderParameters(portletReq.getParameterMap());
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      StringWriter writer = new StringWriter();
+
+      JSR286SpecTestCaseDetails tcd = new JSR286SpecTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction1 */
+      /* Details: "The portlet can publish an event via the setEvent method   */
+      /* in the processAction method"                                         */
+      TestResult tr0 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_ACTIONEVENTHANDLING_EVENTPROCESSACTION1);
+      /* TODO: implement test */
+      tr0.appendTcDetail("Not implemented.");
+      tr0.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction2 */
+      /* Details: "The portlet can publish an event with its full Qname via   */
+      /* the setEvent method in the processAction method"                     */
+      TestResult tr1 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_ACTIONEVENTHANDLING_EVENTPROCESSACTION2);
+      /* TODO: implement test */
+      tr1.appendTcDetail("Not implemented.");
+      tr1.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction3 */
+      /* Details: "The portlet can publish an event with only the local       */
+      /* part of the Qname via the setEvent method in the processAction       */
+      /* method"                                                              */
+      TestResult tr2 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_ACTIONEVENTHANDLING_EVENTPROCESSACTION3);
+      /* TODO: implement test */
+      tr2.appendTcDetail("Not implemented.");
+      tr2.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction4 */
+      /* Details: "If an event is published with only the local part of the   */
+      /* Qname, the namespace must be the default namespace defined in the    */
+      /* deployment descriptor"                                               */
+      TestResult tr3 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_ACTIONEVENTHANDLING_EVENTPROCESSACTION4);
+      /* TODO: implement test */
+      tr3.appendTcDetail("Not implemented.");
+      tr3.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction5 */
+      /* Details: "If an event is published with only the local part of the   */
+      /* Qname and no default namespace is defined in the deployment          */
+      /* descriptor, the value javax.xml.XMLConstants.NULL_NS_URI must be     */
+      /* used as the Qname namespace"                                         */
+      TestResult tr4 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_ACTIONEVENTHANDLING_EVENTPROCESSACTION5);
+      /* TODO: implement test */
+      tr4.appendTcDetail("Not implemented.");
+      tr4.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction6 */
+      /* Details: "If an object is serializeable and has a valid JAXB         */
+      /* binding or is a Java primitive type, it can be used as an event      */
+      /* value"                                                               */
+      TestResult tr5 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_ACTIONEVENTHANDLING_EVENTPROCESSACTION6);
+      /* TODO: implement test */
+      tr5.appendTcDetail("Not implemented.");
+      tr5.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction7 */
+      /* Details: "If a value is not serializeable, the setEvent method       */
+      /* must throw an IllegalArgumentException"                              */
+      TestResult tr6 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_ACTIONEVENTHANDLING_EVENTPROCESSACTION7);
+      /* TODO: implement test */
+      tr6.appendTcDetail("Not implemented.");
+      tr6.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction8 */
+      /* Details: "If a value does not have a valid JAXB binding and is not   */
+      /* a Java primitve type, the setEvent method must throw an              */
+      /* IllegalArgumentException"                                            */
+      TestResult tr7 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_ACTIONEVENTHANDLING_EVENTPROCESSACTION8);
+      /* TODO: implement test */
+      tr7.appendTcDetail("Not implemented.");
+      tr7.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction9 */
+      /* Details: "The portlet can publish multiple events via the setEvent   */
+      /* method in the processAction method"                                  */
+      TestResult tr8 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_ACTIONEVENTHANDLING_EVENTPROCESSACTION9);
+      /* TODO: implement test */
+      tr8.appendTcDetail("Not implemented.");
+      tr8.writeTo(writer);
+
+      portletReq.getPortletSession().setAttribute(
+                   Constants.RESULT_ATTR_PREFIX + "AddlPortletTests_SPEC2_15_ActionEventHandling",
+                   writer.toString(), APPLICATION_SCOPE);
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      PrintWriter writer = portletResp.getWriter();
+
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      PrintWriter writer = portletResp.getWriter();
+
+      PortletSession ps = portletReq.getPortletSession();
+      String msg = (String) ps.getAttribute(RESULT_ATTR_PREFIX + "AddlPortletTests_SPEC2_15_ActionEventHandling", APPLICATION_SCOPE);
+      if (msg != null) {
+         writer.write("<p>" + msg + "</p><br/>\n");
+         ps.removeAttribute(RESULT_ATTR_PREFIX + "AddlPortletTests_SPEC2_15_ActionEventHandling", APPLICATION_SCOPE);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction1 */
+      /* Details: "The portlet can publish an event via the setEvent method   */
+      /* in the processAction method"                                         */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction1", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction2 */
+      /* Details: "The portlet can publish an event with its full Qname via   */
+      /* the setEvent method in the processAction method"                     */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction2", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction3 */
+      /* Details: "The portlet can publish an event with only the local       */
+      /* part of the Qname via the setEvent method in the processAction       */
+      /* method"                                                              */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction3", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction4 */
+      /* Details: "If an event is published with only the local part of the   */
+      /* Qname, the namespace must be the default namespace defined in the    */
+      /* deployment descriptor"                                               */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction4", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction5 */
+      /* Details: "If an event is published with only the local part of the   */
+      /* Qname and no default namespace is defined in the deployment          */
+      /* descriptor, the value javax.xml.XMLConstants.NULL_NS_URI must be     */
+      /* used as the Qname namespace"                                         */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction5", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction6 */
+      /* Details: "If an object is serializeable and has a valid JAXB         */
+      /* binding or is a Java primitive type, it can be used as an event      */
+      /* value"                                                               */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction6", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction7 */
+      /* Details: "If a value is not serializeable, the setEvent method       */
+      /* must throw an IllegalArgumentException"                              */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction7", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction8 */
+      /* Details: "If a value does not have a valid JAXB binding and is not   */
+      /* a Java primitve type, the setEvent method must throw an              */
+      /* IllegalArgumentException"                                            */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction8", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction9 */
+      /* Details: "The portlet can publish multiple events via the setEvent   */
+      /* method in the processAction method"                                  */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_ActionEventHandling_eventProcessAction9", aurl);
+         tb.writeTo(writer);
+      }
+
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/23a1c547/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_Event.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_Event.java b/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_Event.java
index 2d638f5..4344943 100644
--- a/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_Event.java
+++ b/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_Event.java
@@ -18,29 +18,34 @@
 
 package javax.portlet.tck.portlets;
 
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import java.util.Enumeration;
-import java.util.Locale;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.xml.namespace.QName;
 import javax.portlet.*;
 import javax.portlet.filter.*;
-import javax.portlet.tck.beans.ClassChecker;
-import javax.portlet.tck.beans.TestCaseDetails;
-import javax.portlet.tck.beans.JSR286SpecTestCaseDetails;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
 import static javax.portlet.tck.beans.JSR286SpecTestCaseDetails.*;
-import javax.portlet.tck.beans.TestResult;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.PortletSession.*;
+import static javax.portlet.ResourceURL.*;
 
 /**
  * This portlet implements several test cases for the JSR 362 TCK. The test case names
  * are defined in the /src/main/resources/xml-resources/additionalTCs.xml
  * file. The build process will integrate the test case names defined in the 
  * additionalTCs.xml file into the complete list of test case names for execution by the driver.
+ *
+ * This is the main portlet for the test cases. If the test cases call for events, this portlet
+ * will initiate the events, but not process them. The processing is done in the companion 
+ * portlet AddlPortletTests_SPEC2_15_Event_event
+ *
  */
-public class AddlPortletTests_SPEC2_15_Event implements Portlet {
+public class AddlPortletTests_SPEC2_15_Event implements Portlet, ResourceServingPortlet {
    private static final String LOG_CLASS = 
          AddlPortletTests_SPEC2_15_Event.class.getName();
    private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
@@ -57,287 +62,52 @@ public class AddlPortletTests_SPEC2_15_Event implements Portlet {
    }
 
    @Override
-   public void processAction(ActionRequest actionRequest, ActionResponse actionResponse)
+   public void processAction(ActionRequest portletReq, ActionResponse portletResp)
          throws PortletException, IOException {
-   }
-
-   @Override
-   public void render(RenderRequest renderRequest, RenderResponse renderResponse)
-         throws PortletException, IOException {
-      
-      if (LOGGER.isLoggable(Level.FINE)) {
-         LOGGER.logp(Level.FINE, LOG_CLASS, "render", "Entry");
-      }
-
-      PrintWriter writer = renderResponse.getWriter();
-      JSR286SpecTestCaseDetails tcd = new JSR286SpecTestCaseDetails();
-
-      // Create result objects for the tests
-
-      /* TestCase: SPEC2_15_Event_event1                                      */
-      /* Details: "Event names are defined in the deployment descriptor"      */
-      TestResult tr0 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENT1);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_event2                                      */
-      /* Details: "Event value types are defined in the deployment            */
-      /* descriptor"                                                          */
-      TestResult tr1 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENT2);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_event3                                      */
-      /* Details: "The supported publishing events for the portlet are        */
-      /* defined in the deployment descriptor"                                */
-      TestResult tr2 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENT3);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_event4                                      */
-      /* Details: "The supported processing events for the portlet are        */
-      /* defined in the deployment descriptor"                                */
-      TestResult tr3 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENT4);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_event5                                      */
-      /* Details: "The portlet can use the EventRequest.getEvent method to    */
-      /* obtain an Event object encapsulating the event name and value"       */
-      TestResult tr4 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENT5);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_event6                                      */
-      /* Details: "The Event object must always have a name"                  */
-      TestResult tr5 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENT6);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_event7                                      */
-      /* Details: "If the Event object has a value set when the event is      */
-      /* published, the value must be based on the value defined in the       */
-      /* deployment descriptor"                                               */
-      TestResult tr6 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENT7);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_event8                                      */
-      /* Details: "If the Event object has a value set when the event is      */
-      /* published, the value must be available from the Event object in      */
-      /* the processEvent method"                                             */
-      TestResult tr7 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENT8);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_event9                                      */
-      /* Details: "If the Event object does not have a value set when the     */
-      /* event is published, the Event object available in the processEvent   */
-      /* method must not have a value"                                        */
-      TestResult tr8 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENT9);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_event10                                     */
-      /* Details: "The Event Qname object representing the name can be        */
-      /* retrieved through the Event getQname method"                         */
-      TestResult tr9 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENT10);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_event11                                     */
-      /* Details: "The local part of the Event Qname object representing      */
-      /* the name can be retrieved through the Event getName method"          */
-      TestResult tr10 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENT11);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_event12                                     */
-      /* Details: "Events are valid only in the current client request and    */
-      /* the portlet container must therefore deliver all events within the   */
-      /* current client request"                                              */
-      TestResult tr11 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENT12);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_event13                                     */
-      /* Details: "Event distribution must be serialized for a specific       */
-      /* portlet window per client request so that at any given time a        */
-      /* portlet window is only processing one event in the processEvent      */
-      /* method for the current client request"                               */
-      TestResult tr12 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENT13);
-      /* TODO: implement test */
+      LOGGER.entering(LOG_CLASS, "main portlet processAction entry");
 
-      /* TestCase: SPEC2_15_Event_event14                                     */
-      /* Details: "Portlet event processing may occur after the processing    */
-      /* of the action, if the portlet was target of an action URL, and       */
-      /* must be finished before the render phase"                            */
-      TestResult tr13 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENT14);
-      /* TODO: implement test */
+      portletResp.setRenderParameters(portletReq.getParameterMap());
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
 
-      /* TestCase: SPEC2_15_Event_event15                                     */
-      /* Details: "If a portlet throws an exception in the processEvent       */
-      /* method, all operations on the EventResponse must be ignored"         */
-      TestResult tr14 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENT15);
-      /* TODO: implement test */
+      StringWriter writer = new StringWriter();
 
-      /* TestCase: SPEC2_15_Event_event16                                     */
-      /* Details: "If a portlet throws a permanent UnavailableException,      */
-      /* the portlet container must remove the portlet from service           */
-      /* immediately, call the portlet's destroy method, and release the      */
-      /* portlet object"                                                      */
-      TestResult tr15 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENT16);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_eventProcessAction1                         */
-      /* Details: "The portlet can publish an event via the setEvent method   */
-      /* in the processAction method"                                         */
-      TestResult tr16 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSACTION1);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_eventProcessAction2                         */
-      /* Details: "The portlet can publish an event with its full Qname via   */
-      /* the setEvent method in the processAction method"                     */
-      TestResult tr17 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSACTION2);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_eventProcessAction3                         */
-      /* Details: "The portlet can publish an event with only the local       */
-      /* part of the Qname via the setEvent method in the processAction       */
-      /* method"                                                              */
-      TestResult tr18 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSACTION3);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_eventProcessAction4                         */
-      /* Details: "If an event is published with only the local part of the   */
-      /* Qname, the namespace must be the default namespace defined in the    */
-      /* deployment descriptor"                                               */
-      TestResult tr19 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSACTION4);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_eventProcessAction5                         */
-      /* Details: "If an event is published with only the local part of the   */
-      /* Qname and no default namespace is defined in the deployment          */
-      /* descriptor, the value javax.xml.XMLConstants.NULL_NS_URI must be     */
-      /* used as the Qname namespace"                                         */
-      TestResult tr20 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSACTION5);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_eventProcessAction6                         */
-      /* Details: "If an object is serializeable and has a valid JAXB         */
-      /* binding or is a Java primitive type, it can be used as an event      */
-      /* value"                                                               */
-      TestResult tr21 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSACTION6);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_eventProcessAction7                         */
-      /* Details: "If a value is not serializeable, the setEvent method       */
-      /* must throw an IllegalArgumentException"                              */
-      TestResult tr22 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSACTION7);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_eventProcessAction8                         */
-      /* Details: "If a value does not have a valid JAXB binding and is not   */
-      /* a Java primitve type, the setEvent method must throw an              */
-      /* IllegalArgumentException"                                            */
-      TestResult tr23 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSACTION8);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_eventProcessAction9                         */
-      /* Details: "The portlet can publish multiple events via the setEvent   */
-      /* method in the processAction method"                                  */
-      TestResult tr24 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSACTION9);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_eventProcessEvent1                          */
-      /* Details: "The portlet can publish an event via the setEvent method   */
-      /* in the processEvent method"                                          */
-      TestResult tr25 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSEVENT1);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_eventProcessEvent2                          */
-      /* Details: "The portlet can publish an event with its full Qname via   */
-      /* the setEvent method in the processAction method"                     */
-      TestResult tr26 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSEVENT2);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_eventProcessEvent3                          */
-      /* Details: "The portlet can publish an event with only the local       */
-      /* part of the Qname via the setEvent method in the processAction       */
-      /* method"                                                              */
-      TestResult tr27 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSEVENT3);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_eventProcessEvent4                          */
-      /* Details: "If an event is published with only the local part of the   */
-      /* Qname, the namespace must be the default namespace defined in the    */
-      /* deployment descriptor"                                               */
-      TestResult tr28 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSEVENT4);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_eventProcessEvent5                          */
-      /* Details: "If an event is published with only the local part of the   */
-      /* Qname and no default namespace is defined in the deployment          */
-      /* descriptor, the value javax.xml.XMLConstants.NULL_NS_URI must be     */
-      /* used as the Qname namespace"                                         */
-      TestResult tr29 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSEVENT5);
-      /* TODO: implement test */
-
-      /* TestCase: SPEC2_15_Event_eventProcessEvent6                          */
-      /* Details: "If an object is serializeable and has a valid JAXB         */
-      /* binding or is a Java primitive type, it can be used as an event      */
-      /* value"                                                               */
-      TestResult tr30 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSEVENT6);
-      /* TODO: implement test */
+      QName eventQName = new QName(TCKNAMESPACE,
+             "AddlPortletTests_SPEC2_15_Event");
+      portletResp.setEvent(eventQName, "Hi!");
+   }
 
-      /* TestCase: SPEC2_15_Event_eventProcessEvent7                          */
-      /* Details: "If a value is not serializeable, the setEvent method       */
-      /* must throw an IllegalArgumentException"                              */
-      TestResult tr31 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSEVENT7);
-      /* TODO: implement test */
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
 
-      /* TestCase: SPEC2_15_Event_eventProcessEvent8                          */
-      /* Details: "If a value does not have a valid JAXB binding and is not   */
-      /* a Java primitve type, the setEvent method must throw an              */
-      /* IllegalArgumentException"                                            */
-      TestResult tr32 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSEVENT8);
-      /* TODO: implement test */
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
 
-      /* TestCase: SPEC2_15_Event_eventProcessEvent9                          */
-      /* Details: "The portlet can publish multiple events via the setEvent   */
-      /* method in the processEvent method"                                   */
-      TestResult tr33 = tcd.getTestResultFailed(SPEC2_15_EVENT_EVENTPROCESSEVENT9);
-      /* TODO: implement test */
+      PrintWriter writer = portletResp.getWriter();
 
+   }
 
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
 
-      // Write the results to the output stream
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
 
-      tr0.writeTo(writer);
-      tr1.writeTo(writer);
-      tr2.writeTo(writer);
-      tr3.writeTo(writer);
-      tr4.writeTo(writer);
-      tr5.writeTo(writer);
-      tr6.writeTo(writer);
-      tr7.writeTo(writer);
-      tr8.writeTo(writer);
-      tr9.writeTo(writer);
-      tr10.writeTo(writer);
-      tr11.writeTo(writer);
-      tr12.writeTo(writer);
-      tr13.writeTo(writer);
-      tr14.writeTo(writer);
-      tr15.writeTo(writer);
-      tr16.writeTo(writer);
-      tr17.writeTo(writer);
-      tr18.writeTo(writer);
-      tr19.writeTo(writer);
-      tr20.writeTo(writer);
-      tr21.writeTo(writer);
-      tr22.writeTo(writer);
-      tr23.writeTo(writer);
-      tr24.writeTo(writer);
-      tr25.writeTo(writer);
-      tr26.writeTo(writer);
-      tr27.writeTo(writer);
-      tr28.writeTo(writer);
-      tr29.writeTo(writer);
-      tr30.writeTo(writer);
-      tr31.writeTo(writer);
-      tr32.writeTo(writer);
-      tr33.writeTo(writer);
+      PrintWriter writer = portletResp.getWriter();
 
+      /* TestCase: V2AddlPortletTests_SPEC2_15_Event_event1                   */
+      /* Details: "Event names are defined in the deployment descriptor"      */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_Event_event1", aurl);
+         tb.writeTo(writer);
+      }
 
    }
 
 }
-

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/23a1c547/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_EventEventHandling.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_EventEventHandling.java b/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_EventEventHandling.java
new file mode 100644
index 0000000..56e5017
--- /dev/null
+++ b/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_EventEventHandling.java
@@ -0,0 +1,294 @@
+/*  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 javax.portlet.tck.portlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.xml.namespace.QName;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.beans.JSR286SpecTestCaseDetails.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.PortletSession.*;
+import static javax.portlet.ResourceURL.*;
+
+/**
+ * This portlet implements several test cases for the JSR 362 TCK. The test case names
+ * are defined in the /src/main/resources/xml-resources/additionalTCs.xml
+ * file. The build process will integrate the test case names defined in the 
+ * additionalTCs.xml file into the complete list of test case names for execution by the driver.
+ *
+ * This is the main portlet for the test cases. If the test cases call for events, this portlet
+ * will initiate the events, but not process them. The processing is done in the companion 
+ * portlet AddlPortletTests_SPEC2_15_EventEventHandling_event
+ *
+ */
+public class AddlPortletTests_SPEC2_15_EventEventHandling implements Portlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         AddlPortletTests_SPEC2_15_EventEventHandling.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+   
+   private PortletConfig portletConfig = null;
+
+   @Override
+   public void init(PortletConfig config) throws PortletException {
+      this.portletConfig = config;
+   }
+
+   @Override
+   public void destroy() {
+   }
+
+   @Override
+   public void processAction(ActionRequest portletReq, ActionResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet processAction entry");
+
+      portletResp.setRenderParameters(portletReq.getParameterMap());
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      StringWriter writer = new StringWriter();
+
+      QName eventQName = new QName(TCKNAMESPACE,
+             "AddlPortletTests_SPEC2_15_EventEventHandling");
+      portletResp.setEvent(eventQName, "Hi!");
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      PrintWriter writer = portletResp.getWriter();
+
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      PrintWriter writer = portletResp.getWriter();
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event5      */
+      /* Details: "The portlet can use the EventRequest.getEvent method to    */
+      /* obtain an Event object encapsulating the event name and value"       */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_event5", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event6      */
+      /* Details: "The Event object must always have the name field set"      */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_event6", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event7      */
+      /* Details: "If the Event object has a value set when the event is      */
+      /* published, the value must be based on the value defined in the       */
+      /* deployment descriptor"                                               */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_event7", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event8      */
+      /* Details: "If the Event object has a value set when the event is      */
+      /* published, the value must be available from the Event object in      */
+      /* the processEvent method"                                             */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_event8", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event9      */
+      /* Details: "If the Event object does not have a value set when the     */
+      /* event is published, the Event object available in the processEvent   */
+      /* method must not have a value"                                        */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_event9", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event10     */
+      /* Details: "The Event Qname object representing the name can be        */
+      /* retrieved through the Event getQname method"                         */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_event10", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event11     */
+      /* Details: "The local part of the Event Qname object representing      */
+      /* the name can be retrieved through the Event getName method"          */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_event11", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event15     */
+      /* Details: "If a portlet throws an exception in the processEvent       */
+      /* method, all operations on the EventResponse must be ignored"         */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_event15", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event16     */
+      /* Details: "If a portlet throws a permanent UnavailableException       */
+      /* during event processing, the portlet container must remove the       */
+      /* portlet from service immediately, call the portlet's destroy         */
+      /* method, and release the portlet object"                              */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_event16", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent1 */
+      /* Details: "The portlet can publish an event via the setEvent method   */
+      /* in the processEvent method"                                          */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent1", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent2 */
+      /* Details: "The portlet can publish an event with its full Qname via   */
+      /* the setEvent method in the processAction method"                     */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent2", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent3 */
+      /* Details: "The portlet can publish an event with only the local       */
+      /* part of the Qname via the setEvent method in the processAction       */
+      /* method"                                                              */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent3", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent4 */
+      /* Details: "If an event is published with only the local part of the   */
+      /* Qname, the namespace must be the default namespace defined in the    */
+      /* deployment descriptor"                                               */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent4", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent5 */
+      /* Details: "If an event is published with only the local part of the   */
+      /* Qname and no default namespace is defined in the deployment          */
+      /* descriptor, the value javax.xml.XMLConstants.NULL_NS_URI must be     */
+      /* used as the Qname namespace"                                         */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent5", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent6 */
+      /* Details: "If an object is serializeable and has a valid JAXB         */
+      /* binding or is a Java primitive type, it can be used as an event      */
+      /* value"                                                               */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent6", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent7 */
+      /* Details: "If a value is not serializeable, the setEvent method       */
+      /* must throw an IllegalArgumentException"                              */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent7", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent8 */
+      /* Details: "If a value does not have a valid JAXB binding and is not   */
+      /* a Java primitve type, the setEvent method must throw an              */
+      /* IllegalArgumentException"                                            */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent8", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent9 */
+      /* Details: "The portlet can publish multiple events via the setEvent   */
+      /* method in the processEvent method"                                   */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         aurl.setParameters(portletReq.getPrivateParameterMap());
+         TestButton tb = new TestButton("V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent9", aurl);
+         tb.writeTo(writer);
+      }
+
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/23a1c547/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_EventEventHandling_event.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_EventEventHandling_event.java b/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_EventEventHandling_event.java
new file mode 100644
index 0000000..5288b44
--- /dev/null
+++ b/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_EventEventHandling_event.java
@@ -0,0 +1,263 @@
+/*  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 javax.portlet.tck.portlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.xml.namespace.QName;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.tck.beans.JSR286SpecTestCaseDetails.*;
+import static javax.portlet.PortletSession.*;
+
+/**
+ * This is the event processing portlet for the test cases. This portlet processes events, 
+ * but does not publish them. Events are published in the main portlet for the test cases. 
+ */
+public class AddlPortletTests_SPEC2_15_EventEventHandling_event implements Portlet, EventPortlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         AddlPortletTests_SPEC2_15_EventEventHandling_event.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+   
+   private PortletConfig portletConfig = null;
+
+   @Override
+   public void init(PortletConfig config) throws PortletException {
+      this.portletConfig = config;
+   }
+
+   @Override
+   public void destroy() {
+   }
+
+   @Override
+   public void processAction(ActionRequest portletReq, ActionResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "event companion processAction - ERROR!!");
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "event companion serveResource - ERROR!!");
+   }
+
+   @Override
+   public void processEvent(EventRequest portletReq, EventResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "event companion processEvent");
+
+
+      portletResp.setRenderParameters(portletReq);
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      StringWriter writer = new StringWriter();
+
+      JSR286SpecTestCaseDetails tcd = new JSR286SpecTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event5      */
+      /* Details: "The portlet can use the EventRequest.getEvent method to    */
+      /* obtain an Event object encapsulating the event name and value"       */
+      TestResult tr0 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENT5);
+      /* TODO: implement test */
+      tr0.appendTcDetail("Not implemented.");
+      tr0.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event6      */
+      /* Details: "The Event object must always have the name field set"      */
+      TestResult tr1 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENT6);
+      /* TODO: implement test */
+      tr1.appendTcDetail("Not implemented.");
+      tr1.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event7      */
+      /* Details: "If the Event object has a value set when the event is      */
+      /* published, the value must be based on the value defined in the       */
+      /* deployment descriptor"                                               */
+      TestResult tr2 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENT7);
+      /* TODO: implement test */
+      tr2.appendTcDetail("Not implemented.");
+      tr2.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event8      */
+      /* Details: "If the Event object has a value set when the event is      */
+      /* published, the value must be available from the Event object in      */
+      /* the processEvent method"                                             */
+      TestResult tr3 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENT8);
+      /* TODO: implement test */
+      tr3.appendTcDetail("Not implemented.");
+      tr3.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event9      */
+      /* Details: "If the Event object does not have a value set when the     */
+      /* event is published, the Event object available in the processEvent   */
+      /* method must not have a value"                                        */
+      TestResult tr4 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENT9);
+      /* TODO: implement test */
+      tr4.appendTcDetail("Not implemented.");
+      tr4.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event10     */
+      /* Details: "The Event Qname object representing the name can be        */
+      /* retrieved through the Event getQname method"                         */
+      TestResult tr5 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENT10);
+      /* TODO: implement test */
+      tr5.appendTcDetail("Not implemented.");
+      tr5.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event11     */
+      /* Details: "The local part of the Event Qname object representing      */
+      /* the name can be retrieved through the Event getName method"          */
+      TestResult tr6 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENT11);
+      /* TODO: implement test */
+      tr6.appendTcDetail("Not implemented.");
+      tr6.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event15     */
+      /* Details: "If a portlet throws an exception in the processEvent       */
+      /* method, all operations on the EventResponse must be ignored"         */
+      TestResult tr7 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENT15);
+      /* TODO: implement test */
+      tr7.appendTcDetail("Not implemented.");
+      tr7.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_event16     */
+      /* Details: "If a portlet throws a permanent UnavailableException       */
+      /* during event processing, the portlet container must remove the       */
+      /* portlet from service immediately, call the portlet's destroy         */
+      /* method, and release the portlet object"                              */
+      TestResult tr8 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENT16);
+      /* TODO: implement test */
+      tr8.appendTcDetail("Not implemented.");
+      tr8.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent1 */
+      /* Details: "The portlet can publish an event via the setEvent method   */
+      /* in the processEvent method"                                          */
+      TestResult tr9 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENTPROCESSEVENT1);
+      /* TODO: implement test */
+      tr9.appendTcDetail("Not implemented.");
+      tr9.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent2 */
+      /* Details: "The portlet can publish an event with its full Qname via   */
+      /* the setEvent method in the processAction method"                     */
+      TestResult tr10 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENTPROCESSEVENT2);
+      /* TODO: implement test */
+      tr10.appendTcDetail("Not implemented.");
+      tr10.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent3 */
+      /* Details: "The portlet can publish an event with only the local       */
+      /* part of the Qname via the setEvent method in the processAction       */
+      /* method"                                                              */
+      TestResult tr11 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENTPROCESSEVENT3);
+      /* TODO: implement test */
+      tr11.appendTcDetail("Not implemented.");
+      tr11.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent4 */
+      /* Details: "If an event is published with only the local part of the   */
+      /* Qname, the namespace must be the default namespace defined in the    */
+      /* deployment descriptor"                                               */
+      TestResult tr12 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENTPROCESSEVENT4);
+      /* TODO: implement test */
+      tr12.appendTcDetail("Not implemented.");
+      tr12.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent5 */
+      /* Details: "If an event is published with only the local part of the   */
+      /* Qname and no default namespace is defined in the deployment          */
+      /* descriptor, the value javax.xml.XMLConstants.NULL_NS_URI must be     */
+      /* used as the Qname namespace"                                         */
+      TestResult tr13 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENTPROCESSEVENT5);
+      /* TODO: implement test */
+      tr13.appendTcDetail("Not implemented.");
+      tr13.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent6 */
+      /* Details: "If an object is serializeable and has a valid JAXB         */
+      /* binding or is a Java primitive type, it can be used as an event      */
+      /* value"                                                               */
+      TestResult tr14 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENTPROCESSEVENT6);
+      /* TODO: implement test */
+      tr14.appendTcDetail("Not implemented.");
+      tr14.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent7 */
+      /* Details: "If a value is not serializeable, the setEvent method       */
+      /* must throw an IllegalArgumentException"                              */
+      TestResult tr15 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENTPROCESSEVENT7);
+      /* TODO: implement test */
+      tr15.appendTcDetail("Not implemented.");
+      tr15.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent8 */
+      /* Details: "If a value does not have a valid JAXB binding and is not   */
+      /* a Java primitve type, the setEvent method must throw an              */
+      /* IllegalArgumentException"                                            */
+      TestResult tr16 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENTPROCESSEVENT8);
+      /* TODO: implement test */
+      tr16.appendTcDetail("Not implemented.");
+      tr16.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_EventEventHandling_eventProcessEvent9 */
+      /* Details: "The portlet can publish multiple events via the setEvent   */
+      /* method in the processEvent method"                                   */
+      TestResult tr17 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENTEVENTHANDLING_EVENTPROCESSEVENT9);
+      /* TODO: implement test */
+      tr17.appendTcDetail("Not implemented.");
+      tr17.writeTo(writer);
+
+      portletReq.getPortletSession().setAttribute(
+                   Constants.RESULT_ATTR_PREFIX + "AddlPortletTests_SPEC2_15_EventEventHandling",
+                   writer.toString(), APPLICATION_SCOPE);
+
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      
+      LOGGER.entering(LOG_CLASS, "event companion render");
+
+      portletResp.setContentType("text/html");
+      PrintWriter writer = portletResp.getWriter();
+      writer.write("<h3>Event Companion Portlet </h3>\n");
+      writer.write("<p>AddlPortletTests_SPEC2_15_EventEventHandling_event</p>\n");
+
+      String msg = (String) portletReq.getPortletSession()
+            .getAttribute(RESULT_ATTR_PREFIX + "AddlPortletTests_SPEC2_15_EventEventHandling", APPLICATION_SCOPE);
+      msg = (msg==null) ? "Not ready. click test case link." : msg;
+      writer.write("<p>" + msg + "</p>\n");
+
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/23a1c547/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_Event_event.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_Event_event.java b/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_Event_event.java
new file mode 100644
index 0000000..b71670b
--- /dev/null
+++ b/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_Event_event.java
@@ -0,0 +1,116 @@
+/*  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 javax.portlet.tck.portlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.xml.namespace.QName;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.tck.beans.JSR286SpecTestCaseDetails.*;
+import static javax.portlet.PortletSession.*;
+
+/**
+ * This is the event processing portlet for the test cases. This portlet processes events, 
+ * but does not publish them. Events are published in the main portlet for the test cases. 
+ */
+public class AddlPortletTests_SPEC2_15_Event_event implements Portlet, EventPortlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         AddlPortletTests_SPEC2_15_Event_event.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+   
+   private PortletConfig portletConfig = null;
+
+   @Override
+   public void init(PortletConfig config) throws PortletException {
+      this.portletConfig = config;
+   }
+
+   @Override
+   public void destroy() {
+   }
+
+   @Override
+   public void processAction(ActionRequest portletReq, ActionResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "event companion processAction - ERROR!!");
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "event companion serveResource - ERROR!!");
+   }
+
+   @Override
+   public void processEvent(EventRequest portletReq, EventResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "event companion processEvent");
+
+
+      portletResp.setRenderParameters(portletReq);
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      StringWriter writer = new StringWriter();
+
+      JSR286SpecTestCaseDetails tcd = new JSR286SpecTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_Event_event1                   */
+      /* Details: "Event names are defined in the deployment descriptor"      */
+      TestResult tr0 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_EVENT_EVENT1);
+      /* TODO: implement test */
+      tr0.appendTcDetail("Not implemented.");
+      tr0.writeTo(writer);
+
+      portletReq.getPortletSession().setAttribute(
+                   Constants.RESULT_ATTR_PREFIX + "AddlPortletTests_SPEC2_15_Event",
+                   writer.toString(), APPLICATION_SCOPE);
+
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      
+      LOGGER.entering(LOG_CLASS, "event companion render");
+
+      portletResp.setContentType("text/html");
+      PrintWriter writer = portletResp.getWriter();
+      writer.write("<h3>Event Companion Portlet </h3>\n");
+      writer.write("<p>AddlPortletTests_SPEC2_15_Event_event</p>\n");
+
+      String msg = (String) portletReq.getPortletSession()
+            .getAttribute(RESULT_ATTR_PREFIX + "AddlPortletTests_SPEC2_15_Event", APPLICATION_SCOPE);
+      msg = (msg==null) ? "Not ready. click test case link." : msg;
+      writer.write("<p>" + msg + "</p>\n");
+
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/23a1c547/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_RenderEventHandling.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_RenderEventHandling.java b/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_RenderEventHandling.java
new file mode 100644
index 0000000..dd159e1
--- /dev/null
+++ b/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_15_RenderEventHandling.java
@@ -0,0 +1,129 @@
+/*  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 javax.portlet.tck.portlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.xml.namespace.QName;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.beans.JSR286SpecTestCaseDetails.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.PortletSession.*;
+import static javax.portlet.ResourceURL.*;
+
+/**
+ * This portlet implements several test cases for the JSR 362 TCK. The test case names
+ * are defined in the /src/main/resources/xml-resources/additionalTCs.xml
+ * file. The build process will integrate the test case names defined in the 
+ * additionalTCs.xml file into the complete list of test case names for execution by the driver.
+ *
+ * This is the main portlet for the test cases. If the test cases call for events, this portlet
+ * will initiate the events, but not process them. The processing is done in the companion 
+ * portlet AddlPortletTests_SPEC2_15_RenderEventHandling_event
+ *
+ */
+public class AddlPortletTests_SPEC2_15_RenderEventHandling implements Portlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         AddlPortletTests_SPEC2_15_RenderEventHandling.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+   
+   private PortletConfig portletConfig = null;
+
+   @Override
+   public void init(PortletConfig config) throws PortletException {
+      this.portletConfig = config;
+   }
+
+   @Override
+   public void destroy() {
+   }
+
+   @Override
+   public void processAction(ActionRequest portletReq, ActionResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet processAction entry");
+
+      portletResp.setRenderParameters(portletReq.getParameterMap());
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      StringWriter writer = new StringWriter();
+
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      PrintWriter writer = portletResp.getWriter();
+
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      PrintWriter writer = portletResp.getWriter();
+
+      JSR286SpecTestCaseDetails tcd = new JSR286SpecTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_RenderEventHandling_event2     */
+      /* Details: "Event value types are defined in the deployment            */
+      /* descriptor"                                                          */
+      TestResult tr0 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_RENDEREVENTHANDLING_EVENT2);
+      /* TODO: implement test */
+      tr0.appendTcDetail("Not implemented.");
+      tr0.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_RenderEventHandling_event3     */
+      /* Details: "The supported publishing events for the portlet are        */
+      /* defined in the deployment descriptor"                                */
+      TestResult tr1 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_RENDEREVENTHANDLING_EVENT3);
+      /* TODO: implement test */
+      tr1.appendTcDetail("Not implemented.");
+      tr1.writeTo(writer);
+
+      /* TestCase: V2AddlPortletTests_SPEC2_15_RenderEventHandling_event4     */
+      /* Details: "The supported processing events for the portlet are        */
+      /* defined in the deployment descriptor"                                */
+      TestResult tr2 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_15_RENDEREVENTHANDLING_EVENT4);
+      /* TODO: implement test */
+      tr2.appendTcDetail("Not implemented.");
+      tr2.writeTo(writer);
+
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/23a1c547/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_2_Compatibility.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_2_Compatibility.java b/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_2_Compatibility.java
index 106e69f..d650fbf 100644
--- a/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_2_Compatibility.java
+++ b/portlet-tck_3.0/V2AddlPortletTests/src/main/java/javax/portlet/tck/portlets/AddlPortletTests_SPEC2_2_Compatibility.java
@@ -18,29 +18,34 @@
 
 package javax.portlet.tck.portlets;
 
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import java.util.Enumeration;
-import java.util.Locale;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.xml.namespace.QName;
 import javax.portlet.*;
 import javax.portlet.filter.*;
-import javax.portlet.tck.beans.ClassChecker;
-import javax.portlet.tck.beans.TestCaseDetails;
-import javax.portlet.tck.beans.JSR286SpecTestCaseDetails;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
 import static javax.portlet.tck.beans.JSR286SpecTestCaseDetails.*;
-import javax.portlet.tck.beans.TestResult;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.PortletSession.*;
+import static javax.portlet.ResourceURL.*;
 
 /**
  * This portlet implements several test cases for the JSR 362 TCK. The test case names
  * are defined in the /src/main/resources/xml-resources/additionalTCs.xml
  * file. The build process will integrate the test case names defined in the 
  * additionalTCs.xml file into the complete list of test case names for execution by the driver.
+ *
+ * This is the main portlet for the test cases. If the test cases call for events, this portlet
+ * will initiate the events, but not process them. The processing is done in the companion 
+ * portlet AddlPortletTests_SPEC2_2_Compatibility_event
+ *
  */
-public class AddlPortletTests_SPEC2_2_Compatibility implements Portlet {
+public class AddlPortletTests_SPEC2_2_Compatibility implements Portlet, ResourceServingPortlet {
    private static final String LOG_CLASS = 
          AddlPortletTests_SPEC2_2_Compatibility.class.getName();
    private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
@@ -57,44 +62,60 @@ public class AddlPortletTests_SPEC2_2_Compatibility implements Portlet {
    }
 
    @Override
-   public void processAction(ActionRequest actionRequest, ActionResponse actionResponse)
+   public void processAction(ActionRequest portletReq, ActionResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet processAction entry");
+
+      portletResp.setRenderParameters(portletReq.getParameterMap());
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      StringWriter writer = new StringWriter();
+
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
          throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      PrintWriter writer = portletResp.getWriter();
+
    }
 
    @Override
-   public void render(RenderRequest renderRequest, RenderResponse renderResponse)
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
          throws PortletException, IOException {
-      
-      if (LOGGER.isLoggable(Level.FINE)) {
-         LOGGER.logp(Level.FINE, LOG_CLASS, "render", "Entry");
-      }
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      PrintWriter writer = portletResp.getWriter();
 
-      PrintWriter writer = renderResponse.getWriter();
       JSR286SpecTestCaseDetails tcd = new JSR286SpecTestCaseDetails();
 
       // Create result objects for the tests
 
-      /* TestCase: SPEC2_2_Compatibility_deployJSR168_1                       */
+      /* TestCase: V2AddlPortletTests_SPEC2_2_Compatibility_deployJSR168_1    */
       /* Details: "A portlet with the JSR 168 deployment descriptor can be    */
       /* deployed"                                                            */
-      TestResult tr0 = tcd.getTestResultFailed(SPEC2_2_COMPATIBILITY_DEPLOYJSR168_1);
+      TestResult tr0 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_2_COMPATIBILITY_DEPLOYJSR168_1);
       /* TODO: implement test */
+      tr0.appendTcDetail("Not implemented.");
+      tr0.writeTo(writer);
 
-      /* TestCase: SPEC2_2_Compatibility_deployJSR168_2                       */
+      /* TestCase: V2AddlPortletTests_SPEC2_2_Compatibility_deployJSR168_2    */
       /* Details: "A portlet implementing only the JSR 168 API can be         */
       /* deployed"                                                            */
-      TestResult tr1 = tcd.getTestResultFailed(SPEC2_2_COMPATIBILITY_DEPLOYJSR168_2);
+      TestResult tr1 = tcd.getTestResultFailed(V2ADDLPORTLETTESTS_SPEC2_2_COMPATIBILITY_DEPLOYJSR168_2);
       /* TODO: implement test */
-
-
-
-      // Write the results to the output stream
-
-      tr0.writeTo(writer);
+      tr1.appendTcDetail("Not implemented.");
       tr1.writeTo(writer);
 
-
    }
 
 }
-