You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-scm@portals.apache.org by ms...@apache.org on 2015/11/27 13:38:09 UTC

[28/38] portals-pluto git commit: Integrated latest version of the portlet API 3.0. Made necessary minor adaptations the Pluto code and demo portlets to make the previously available funtionality work. For the partial action request, changed implementati

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/HeaderPortlet.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/HeaderPortlet.java b/portlet-api/src/main/java/javax/portlet/HeaderPortlet.java
new file mode 100644
index 0000000..a83bb74
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/HeaderPortlet.java
@@ -0,0 +1,63 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet;
+
+import java.io.IOException;
+
+/**
+ * <div class="changed_added_3_0">
+ * The <code>HeaderPortlet</code> interface provides portlets
+ * with the ability to add HTTP headers to the response, and
+ * to generate markup for aggregation into the portal response document head section. 
+ * <p>
+ * </div>
+ *
+ * @see     HeaderRequest
+ * @see     HeaderResponse
+ * @since 3.0
+ */
+
+public interface HeaderPortlet {
+
+    /**
+     * <div class="changed_added_3_0">
+     * Called by the portlet container to allow the portlet to set response
+     * headers and generate markup for overall response document head section. 
+     * </div>
+     * 
+     * @param request  the header request
+     * @param response  the header response
+     * @exception  PortletException
+     *                   if the portlet has problems fulfilling the request
+     * @exception  UnavailableException   
+     *                   if the portlet is unavailable to process the request at this time
+     * @exception  PortletSecurityException  
+     *                   if the portlet cannot fulfill this request due to security reasons
+     * @exception  IOException
+     *                   if the streaming causes an I/O problem
+     */
+    public void renderHeaders (HeaderRequest request, HeaderResponse response) 
+        throws PortletException, java.io.IOException;
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/HeaderRequest.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/HeaderRequest.java b/portlet-api/src/main/java/javax/portlet/HeaderRequest.java
new file mode 100644
index 0000000..75352a3
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/HeaderRequest.java
@@ -0,0 +1,30 @@
+/*  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;
+
+/**
+ * <div class="changed_added_3_0">
+ * Tag interface designating a header request object
+ * </div>
+ *
+ */
+public interface HeaderRequest extends RenderRequest {
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/HeaderResponse.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/HeaderResponse.java b/portlet-api/src/main/java/javax/portlet/HeaderResponse.java
new file mode 100644
index 0000000..36ee7f0
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/HeaderResponse.java
@@ -0,0 +1,84 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet;
+
+/**
+ * <div class="changed_added_3_0">
+ * The
+ * <CODE>HeaderResponse</CODE> defines an object to assist a portlet in
+ * sending a response to the portal. It extends the
+ * <CODE>MimeResponse</CODE> interface to provide specific header
+ * response functionality to portlets.
+ * <p>
+ * The portlet container creates
+ * a <CODE>HeaderResponse</CODE> object and passes it as argument to the
+ * portlet's <CODE>renderHeaders</CODE> method in order to allow the portlet
+ * to add response headers and generate markup for the overall portal 
+ * response document <code>HEAD</code> section.
+ * </div>
+ * 
+ * @see RenderResponse
+ * @see HeaderRequest
+ * @see HeaderPortlet
+ * @see PortletResponse
+ * @see MimeResponse
+ */
+public interface HeaderResponse extends MimeResponse {
+
+    /**
+     * This method sets the title of the portlet.
+     * <p>
+     * The value can be a text String
+     * 
+     * @param title
+     *            portlet title as text String or resource URI
+     */
+    public void setTitle(String title);
+
+    /**
+     * Sets the MIME type for the header response. The portlet should set the
+     * content type before calling {@link #getWriter} or
+     * {@link #getPortletOutputStream}.
+     * <p>
+     * Calling <code>setContentType</code> after <code>getWriter</code> or
+     * <code>getOutputStream</code> does not change the content type.
+     * <p>
+     * The portlet container will ignore any character encoding
+     * specified as part of the content type for <code>render</code>
+     * calls.
+     * 
+     * @param type
+     *            the content MIME type
+     * 
+     * @throws java.lang.IllegalArgumentException
+     *             if the given type is not in the list 
+     *             returned by <code>PortletRequest.getResponseContentTypes</code>
+     * 
+     * @see PortletRequest#getResponseContentTypes
+     * @see #getContentType
+     */
+    public void setContentType(String type);
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/MethodToken.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/MethodToken.java b/portlet-api/src/main/java/javax/portlet/MethodToken.java
new file mode 100644
index 0000000..59e4f58
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/MethodToken.java
@@ -0,0 +1,68 @@
+/*  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;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * <div class="changed_added_3_0">
+ * Interface designating an implementation-specific token used for annotated
+ * method invocation. The token represents a single candidate method for
+ * conditional dispatching.
+ * </div>
+ *
+ * @see  ConditionalDispatcher
+ * @see  javax.portlet.annotations.ConditionalDispatchMethod
+ */
+public interface MethodToken {
+   
+   /**
+    * <div class="changed_added_3_0">
+    * Returns the annotation on the candidate method of the given type
+    * if present, otherwise <code>null</code>.
+    * </div>
+    * 
+    * @param annotationClass     The annotation type to be returned
+    * @return                    The annotation on the candidate method of the 
+    *                            given type, otherwise <code>null</code>.
+    */
+   <A extends Annotation> A getAnnotation(Class<A> annotationClass);
+   
+   /**
+    * <div class="changed_added_3_0">
+    * Returns an array containing all annotations present on the candidate method.
+    * </div>
+    * 
+    * @return     The array of all candidate method annotations.
+    */
+   Annotation[] getAnnotations();
+   
+   /**
+    * <div class="changed_added_3_0">
+    * Returns true if an annotation of the given type is present on the candidate method, 
+    * else false. 
+    * This method is designed primarily for convenient access to marker annotations.
+    * </div>
+    * 
+    * @return     <code>true</code> if the given annotation type is present
+    */
+   boolean isAnnotationPresent(Class<? extends Annotation> annotationClass);
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/MimeResponse.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/MimeResponse.java b/portlet-api/src/main/java/javax/portlet/MimeResponse.java
index 8e950dc..f007ed8 100644
--- a/portlet-api/src/main/java/javax/portlet/MimeResponse.java
+++ b/portlet-api/src/main/java/javax/portlet/MimeResponse.java
@@ -39,12 +39,12 @@ public interface MimeResponse extends PortletResponse {
     * Specifies processing when a URL is created.
     * </div>
     * 
-    * @see #createActionURL(ParameterCopyOption)
-    * @see #createRenderURL(ParameterCopyOption)
+    * @see #createActionURL(Copy)
+    * @see #createRenderURL(Copy)
     * 
     * @since 3.0
     */
-   public enum ParameterCopyOption {
+   public enum Copy {
 
       /**
        * <div class="changed_added_3_0">
@@ -53,7 +53,7 @@ public interface MimeResponse extends PortletResponse {
        *  
        * @since 3.0
        */
-      COPY_NO_PARAMETERS,
+      NONE,
 
       /**
        * <div class="changed_added_3_0">
@@ -64,7 +64,7 @@ public interface MimeResponse extends PortletResponse {
        *  
        * @since 3.0
        */
-      COPY_RENDER_PARAMETERS,
+      ALL,
 
       /**
        * <div class="changed_added_3_0">
@@ -74,7 +74,7 @@ public interface MimeResponse extends PortletResponse {
        *  
        * @since 3.0
        */
-      COPY_PUBLIC_RENDER_PARAMETERS;
+      PUBLIC;
    }
    
    
@@ -443,8 +443,8 @@ public interface MimeResponse extends PortletResponse {
      * If a public render parameter value is set or removed on a render URL, then the public 
      * render parameter will be set to the new value or removed when the URL is activated.
      * <p>
-     * The effect of this method is the same as calling {@link #createRenderURL(ParameterCopyOption)}
-     * with the parameter set to COPY_PUBLIC_RENDER_PARAMETERS.
+     * The effect of this method is the same as calling {@link #createRenderURL(Copy)}
+     * with the parameter set to PUBLIC.
      * </div>
      *
      * @return a portlet render URL
@@ -464,12 +464,12 @@ public interface MimeResponse extends PortletResponse {
      * The new render URL will contain render parameters from the
      * current request as specified by the <code>option</code> parameter.
      * <dl>
-     * <dt>COPY_NO_PARAMETERS</dt>
+     * <dt>NONE</dt>
      * <dd>All public and private parameters are removed from the URL.</dd>
-     * <dt>COPY_RENDER_PARAMETERS</dt>
+     * <dt>ALL</dt>
      * <dd>The public and private parameters governing the current 
      * request are added to the URL.</dd>
-     * <dt>COPY_PUBLIC_PARAMETERS</dt>
+     * <dt>PUBLIC</dt>
      * <dd>Only public parameters governing the current
      * request are added to the URL.</dd>
      * </dl>
@@ -486,13 +486,13 @@ public interface MimeResponse extends PortletResponse {
      * @param option
      *            Specifies how current parameters are to be copied to the URL
      *
-     * @see ParameterCopyOption
+     * @see Copy
      * 
      * @return a portlet render URL
      *     
      * @since 3.0
      */
-    public RenderURL createRenderURL(ParameterCopyOption option);
+    public RenderURL createRenderURL(Copy option);
 
 
 	/**
@@ -527,8 +527,8 @@ public interface MimeResponse extends PortletResponse {
      * then the public render parameter will be set to the new value or 
      * removed when the URL is activated.
      * <p>
-     * The effect of this method is the same as calling {@link #createRenderURL(ParameterCopyOption)}
-     * with the parameter set to COPY_PUBLIC_RENDER_PARAMETERS.
+     * The effect of this method is the same as calling {@link #createRenderURL(Copy)}
+     * with the parameter set to PUBLIC.
      * </div>
      * 
      * @return a portlet action URL
@@ -548,12 +548,12 @@ public interface MimeResponse extends PortletResponse {
      * The new action URL will contain render parameters from the
      * current request as specified by the <code>option</code> parameter.
      * <dl>
-     * <dt>COPY_NO_PARAMETERS</dt>
+     * <dt>NONE</dt>
      * <dd>All public and private parameters are removed from the URL.</dd>
-     * <dt>COPY_RENDER_PARAMETERS</dt>
+     * <dt>ALL</dt>
      * <dd>The public and private parameters governing the current 
      * request are added to the URL.</dd>
-     * <dt>COPY_PUBLIC_PARAMETERS</dt>
+     * <dt>PUBLIC</dt>
      * <dd>Only public parameters governing the current
      * request are added to the URL.</dd>
      * </dl>
@@ -572,13 +572,13 @@ public interface MimeResponse extends PortletResponse {
      * @param option
      *            Specifies how current parameters are to be copied to the URL
      *
-     * @see ParameterCopyOption
+     * @see Copy
      * 
      * @return a portlet action URL
      *     
      * @since 3.0
      */
-    public ActionURL createActionURL(ParameterCopyOption option);
+    public ActionURL createActionURL(Copy option);
 
 
 	/**

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/PortletURL.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/PortletURL.java b/portlet-api/src/main/java/javax/portlet/PortletURL.java
index bced4b2..1f18f3c 100644
--- a/portlet-api/src/main/java/javax/portlet/PortletURL.java
+++ b/portlet-api/src/main/java/javax/portlet/PortletURL.java
@@ -24,6 +24,8 @@
 
 package javax.portlet;
 
+import javax.portlet.annotations.PortletSerializable;
+
 
 
 /**
@@ -72,4 +74,19 @@ public interface PortletURL extends BaseURL, MutablePortletState
    
    @Deprecated
   public void removePublicRenderParameter(String name); 
+   
+   /**
+    * Sets the value of a {@literal @}PortletStateScoped bean
+    * on an action or render URL. 
+    * Calling this method copies the bean state to the URL so that the values are
+    * available to the portlet when the URL is activated.
+    *  
+    * @param bean    The {@literal @}PortletStateScoped bean
+    * 
+    * @exception java.lang.IllegalArgumentException
+    *                if the bean is not an {@literal @}PortletStateScoped bean.
+    *                
+    * @see  javax.portlet.annotations.PortletStateScoped
+    */
+   public void setBeanParameter(PortletSerializable bean);
 }

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/RenderResponse.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/RenderResponse.java b/portlet-api/src/main/java/javax/portlet/RenderResponse.java
index a822a49..df29374 100644
--- a/portlet-api/src/main/java/javax/portlet/RenderResponse.java
+++ b/portlet-api/src/main/java/javax/portlet/RenderResponse.java
@@ -47,6 +47,7 @@ public interface RenderResponse extends MimeResponse {
      * @param title
      *            portlet title as text String or resource URI
      */
+   @Deprecated
     public void setTitle(String title);
    
     

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/ResourceRequest.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/ResourceRequest.java b/portlet-api/src/main/java/javax/portlet/ResourceRequest.java
index f7918cc..7863897 100644
--- a/portlet-api/src/main/java/javax/portlet/ResourceRequest.java
+++ b/portlet-api/src/main/java/javax/portlet/ResourceRequest.java
@@ -63,6 +63,31 @@ public interface ResourceRequest extends ClientDataRequest {
    public static final String ETAG = "portlet.ETag";
 
    /**
+    * <div class="changed_added_3_0">
+    * This constant represents the attribute name used to retrieve the
+    * resource request attribute <code>String</code> representing the current 
+    * page state.
+    * <p>
+    * The PAGE_STATE request attribute is only set during Partial Action processing. 
+    * At all other times, the attribute will be <code>null</code>.
+    * <p>
+    * The Partial Action processing sequence provides support for infrastructure components
+    * such as a JSF Portlet Bridge to obtain page state information for use by the
+    * JavaScript Portlet Hub component.
+    * <p>
+    * The content of the page state request attribute is implementation-specific. 
+    * The portlet performing partial action processing must transport the attribute value to 
+    * the client and pass it to the Portlet Hub unchanged in order to conclude a 
+    * Partial Action processing sequence.
+    * <p>
+    * The portlet may make no assumptions about the length or content of the
+    * request attribute value. 
+    * The attribute value may be of any length or <code>null</code>.
+    * </div>
+    */
+   public static final String PAGE_STATE = "javax.portlet.pageState";
+
+   /**
     * Returns the validation tag if the portlet container
     * has a cached response for this validation tag, or
     * <code>null</code> if no cached response exists.
@@ -132,27 +157,6 @@ public interface ResourceRequest extends ClientDataRequest {
     */
 
    public ResourceParameters getResourceParameters();
-   
-   /**
-    * <div class="changed_added_3_0">
-    * Returns a <code>String</code> representing the current page state.
-    * <p>
-    * The content of the returned value is unspecified. It is to be passed to the
-    * Portlet Hub in order to conclude a Partial Action processing sequence. 
-    * <code>null</code> is a valid return value.
-    * <p>
-    * This call is only valid during Partial Action processing. If called at other times,
-    * the returned value is unspecified.
-    * <p>
-    * The Partial Action processing sequence provides support for infrastructure components
-    * such as a JSF Portlet Bridge to obtain page state information for use by the
-    * JavaScript Portlet Hub component.
-    * </div>
-    * 
-    * @return String to be passed to the Portlet Hub to conclude a Partial Action
-    *         processing sequence.
-    */
-   public String getPageState();
 
 
    /**

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/ResourceResponse.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/ResourceResponse.java b/portlet-api/src/main/java/javax/portlet/ResourceResponse.java
index 897a5f0..afc5d8a 100644
--- a/portlet-api/src/main/java/javax/portlet/ResourceResponse.java
+++ b/portlet-api/src/main/java/javax/portlet/ResourceResponse.java
@@ -145,7 +145,7 @@ public interface ResourceResponse extends MimeResponse {
      *             is not <code>PAGE</code> and thus does not allow
      *             for creating render URLs.
      */
-	public RenderURL createRenderURL();
+   public <T extends PortletURL & RenderURL> T createRenderURL();
    
    
   /**
@@ -155,7 +155,7 @@ public interface ResourceResponse extends MimeResponse {
      *             is not <code>PAGE</code> and thus does not allow
      *             for creating render URLs.
      */
-  public RenderURL createRenderURL(ParameterCopyOption option);
+  public RenderURL createRenderURL(Copy option);
 
 	/**
      * @throws java.lang.IllegalStateException
@@ -164,7 +164,7 @@ public interface ResourceResponse extends MimeResponse {
      *             is not <code>PAGE</code> and thus does not allow
      *             for creating action URLs.
      */
-	public ActionURL createActionURL();
+   public <T extends PortletURL & ActionURL> T createActionURL();
 
 	/**
      * @throws java.lang.IllegalStateException
@@ -173,7 +173,7 @@ public interface ResourceResponse extends MimeResponse {
      *             is not <code>PAGE</code> and thus does not allow
      *             for creating action URLs.
      */
-   public ActionURL createActionURL(ParameterCopyOption option);
+   public ActionURL createActionURL(Copy option);
 
 	/**
      * @throws java.lang.IllegalStateException

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/ActionMethod.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/ActionMethod.java b/portlet-api/src/main/java/javax/portlet/annotations/ActionMethod.java
new file mode 100644
index 0000000..477f97e
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/ActionMethod.java
@@ -0,0 +1,89 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * Designates a method corresponding to the portlet API processAction method.
+ * The annotated method must have the following signature:
+ * <p>
+ *    <code>public void &lt;methodName&gt;(ActionRequest, ActionResponse)</code>
+ * <p>   
+ * where the method name can be freely selected.
+ * <p>
+ * The method declaration may contain a throws clause. Exceptions declared in the 
+ * throws clause should be of type {@link javax.portlet.PortletException} or
+ * {@link java.io.IOException}. 
+ * Checked exceptions of any other type will be caught, wrapped with a PortletException, 
+ * and rethrown.
+ * </div>
+ *    
+ * @see javax.portlet.Portlet#processAction(javax.portlet.ActionRequest, javax.portlet.ActionResponse) processAction
+ *
+ */
+
+@Retention(RUNTIME) @Target({METHOD})
+public @interface ActionMethod {
+   
+   /**
+    * The portlet name for the annotated method.
+    * 
+    * @return  The portlet name
+    */
+   String   portletName();
+   
+   /**
+    * The action name. 
+    * <p> 
+    * If an action name is specified, the bean enabler will dispatch Action requests with 
+    * matching values of the reserved "javax.portlet.action" parameter to this method. 
+    * <p>
+    * An ActionMethod with an empty action name will receive all  
+    * Action requests not dispatched to other named ActionMethods.
+    * 
+    * @return  The action name
+    */
+   String   actionName() default "";
+   
+   /**
+    * <div class='container-change'>
+    * The QName definitions of the events published by this method.
+    * </div>
+    * 
+    * @see     EventDefinition
+    * @see     PortletQName
+    * 
+    * @return  The processing event QNames
+    */
+   PortletQName[]   publishingEvents() default {};
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/ActionParam.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/ActionParam.java b/portlet-api/src/main/java/javax/portlet/annotations/ActionParam.java
new file mode 100644
index 0000000..596c590
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/ActionParam.java
@@ -0,0 +1,68 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.enterprise.util.Nonbinding;
+import javax.inject.Qualifier;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * Qualifier that specifies an action parameter for injection.
+ * The parameter will be <code>null</code> if accessed outside of an action method.
+ * <p>
+ * The type of the injection target must be <code>String</code> or <code>String[]</code>.
+ * <p>
+ * This annotation may only be used in <code>{@literal @}RequestScoped</code> or
+ * <code>{@literal @}PortletStateScoped</code> beans.
+ * <p>
+ * Example:
+ * <div class='codebox'>      
+ * {@literal @}Inject {@literal @}ActionParam("paramName")<br/>   
+ * private String[] paramValues;
+ * </div>                    
+ * </div>
+ * 
+ * @see javax.portlet.PortletRequest#getParameter(String) getParameter
+ * @see javax.portlet.PortletRequest#getParameterValues(String) getParameterValues
+ */
+
+@Qualifier @Retention(RUNTIME) @Target({METHOD, FIELD, PARAMETER})
+public @interface ActionParam {
+   
+   /**
+    * The parameter name.
+    * 
+    * @return     The parameter name.
+    */
+   @Nonbinding String   value();
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/BeanPortlet.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/BeanPortlet.java b/portlet-api/src/main/java/javax/portlet/annotations/BeanPortlet.java
new file mode 100644
index 0000000..0aff963
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/BeanPortlet.java
@@ -0,0 +1,47 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * Provides a qualifier sometimes needed for disambiguation. 
+ * <p>
+ * This qualifier is needed when injecting a PortletConfig object.
+ * </div>
+ */
+
+@Qualifier @Retention(RUNTIME) @Target({TYPE, METHOD, FIELD, PARAMETER})
+public @interface BeanPortlet {
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/ConditionalDispatchMethod.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/ConditionalDispatchMethod.java b/portlet-api/src/main/java/javax/portlet/annotations/ConditionalDispatchMethod.java
new file mode 100644
index 0000000..0296c4d
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/ConditionalDispatchMethod.java
@@ -0,0 +1,112 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * Designates a conditional dispatcher method.
+ * The portlet container will invoke the annotated method when it determines 
+ * that <code>@RenderMethod</code>, <code>@HeaderMethod</code>, or 
+ * <code>@ServeResourceMethod</code> annotated methods
+ * are available for dispatching during request processing.
+ * <p>
+ * The annotated method must have one of the following signatures:
+ * <p>
+ *    <code>public boolean &lt;methodName&gt;(RenderRequest request, RenderResponse response, 
+ *                Set<MethodToken> methods)</code>
+ * <p>   
+ *    <code>public boolean &lt;methodName&gt;(HeaderRequest request, HeaderResponse response, 
+ *                Set<MethodToken> methods)</code>
+ * <p>   
+ *    <code>public boolean &lt;methodName&gt;(ResourceRequest request, ResourceResponse response, 
+ *                Set<MethodToken> methods)</code>
+ * <p>   
+ * where the method name can be freely selected.
+ * <p>
+ * For a given portlet name, only a single method of each type may be annotated. 
+ * If a conditional dispatcher is declared in the portlet deployment descriptor, that
+ * declaration overrides any <code>@ConditionalDispatchMethod</code> annotation.
+ * <p>
+ * The method should analyze the given <code>Set</code> of candidate methods using
+ * the annotations available from each <code>MethodToken</code> 
+ * based on the current request and
+ * create a list of method tokens representing the methods to be invoked. 
+ * The output list may be empty or <code>null</code>. 
+ * A given method token may appear in the output list more than once.  
+ * <p>
+ * If the method returns a non-<code>null</code> List object, the portlet container will
+ * invoke the methods in the order they appear in the list, and then 
+ * perform no further dispatching operation for the current request.
+ * <p>
+ * If the method returns <code>null</code>, the portlet container will dispatch the 
+ * method using its implementation-specific algorithm.
+ * <p>
+ * If the method throws an exception, it will be treated as an unhandled exception
+ * during request processing. The portlet container will perform no 
+ * further dispatching.
+ * <p>
+ * The method declaration may contain a throws clause. Exceptions declared in the 
+ * throws clause should be of type {@link javax.portlet.PortletException} or
+ * {@link java.io.IOException}. 
+ * If the <code>throws</code> clause defines exceptions of any other type, 
+ * it will be treated as a configuration error. 
+ * </div>
+ *    
+ * @see RenderMethod
+ * @see HeaderMethod
+ * @see ServeResourceMethod
+ * @see javax.portlet.ConditionalDispatcher
+ * @see javax.portlet.MethodToken
+ *
+ */
+
+@Retention(RUNTIME) @Target({METHOD})
+public @interface ConditionalDispatchMethod {
+   
+   /**
+    * <div class="changed_added_3_0">
+    * The portlet names for which the conditional dispatcher applies.
+    * <p>
+    * The annotated method can apply to multiple portlets within the portlet
+    * application. The names of the portlets to which the listener applies must be 
+    * specified in this field.
+    * <p>
+    * A wildcard character '*' can be specified in the first portletName array element 
+    * to indicate that the listener is to apply to all portlets in the portlet application.
+    * If specified, the wildcard character must appear alone in the first array element.
+    * This is the default if no portlet names are explicitly provided.
+    * </div>
+    * 
+    * @return     The portlet names
+    */
+   String[]    portletNames() default "*";
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/ContentTypeSupport.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/ContentTypeSupport.java b/portlet-api/src/main/java/javax/portlet/annotations/ContentTypeSupport.java
new file mode 100644
index 0000000..51f1d93
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/ContentTypeSupport.java
@@ -0,0 +1,87 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * This annotation is used within composite portlet configuration annotations to
+ * represent the portlet modes and window states supported for a given content type.
+ * <p>
+ * It cannot be used as a stand-alone portlet annotation.
+ * </div>
+ */
+@Retention(RUNTIME) @Target({ANNOTATION_TYPE})
+public @interface ContentTypeSupport {
+   
+   /**
+    * <div class='container-change'>
+    * The MIME type for which support is being defined.
+    * MIME type name, e.g. "text/html".
+    * The MIME type may also contain the wildcard
+    * character '*' as in 'text&#x2F;*' or '*&#x2F;*'.
+    * </div>
+    * 
+    * @return     The MIME type
+    */
+   String   mimeType() default "text/html";
+   
+   /**
+    * <div class='container-change'>
+    * Defines the portlet modes supported by this portlet.
+    * <p>
+    * The following names represent the standard portlet modes: 
+    * "edit", "help", "view".
+    * Custom portlet modes may also be defined.
+    * <p>
+    * Portlet mode names are not case sensitive.
+    * </div>
+    * 
+    * @return     The portlet modes
+    */
+   String[] supportedPortletModes() default {"view"};
+   
+   /**
+    * <div class='container-change'>
+    * Defines the window states supported by this portlet.
+    * <p>
+    * The following names represent the standard window states: 
+    * "normal", "minimized", "maximized".
+    * Custom window states may also be defined.
+    * <p>
+    * Window state names are not case sensitive.
+    * </div>
+    * 
+    * @return     The window states
+    */
+   String[] supportedWindowStates() default {"normal", "minimized", "maximized"};
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/ContextPath.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/ContextPath.java b/portlet-api/src/main/java/javax/portlet/annotations/ContextPath.java
new file mode 100644
index 0000000..9f859bc
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/ContextPath.java
@@ -0,0 +1,58 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * Qualifier that specifies the context root for injection.
+ * <p>
+ * The injection target type must be <code>String</code>.
+ * <p>
+ * This annotation may only be used in <code>{@literal @}RequestScoped</code> or
+ * <code>{@literal @}PortletStateScoped</code> beans.
+ * <p>
+ * Example:
+ * <div class='codebox'>      
+ * {@literal @}Inject {@literal @}ContextPath<br/>   
+ * private String namespace;
+ * </div>                    
+ * </div>
+ * 
+ * @see javax.portlet.PortletRequest#getContextPath() getContextPath
+ */
+
+@Qualifier @Retention(RUNTIME) @Target({METHOD, FIELD, PARAMETER})
+public @interface ContextPath {
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/CustomPortletMode.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/CustomPortletMode.java b/portlet-api/src/main/java/javax/portlet/annotations/CustomPortletMode.java
new file mode 100644
index 0000000..45774a6
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/CustomPortletMode.java
@@ -0,0 +1,76 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * This annotation is used within composite portlet configuration annotations to
+ * represent a custom portlet mode.
+ * It cannot be used as a stand-alone portlet annotation.
+ * </div>
+ */
+@Retention(RUNTIME) @Target({ANNOTATION_TYPE})
+public @interface CustomPortletMode {
+   
+   /**
+    * <div class='container-change'>
+    * Provides locale-specific text describing the custom portlet mode for use by the portal application or by tools.
+    * </div>
+    * 
+    * @return  The custom portlet mode description
+    */
+   LocaleString[]      description() default {};
+   
+   /**
+    * <div class='container-change'>
+    * The custom portlet mode name.
+    * <p>
+    * The name by which the portlet mode is identified.
+    * </div>
+    * 
+    * @return  The custom portlet mode name
+    */
+   String      name();
+   
+   /**
+    * <div class='container-change'>
+    * The portal managed flag.
+    * <p>
+    * If set to <code>true</code>, the custom portlet mode will be managed by the portal.
+    * If set to <code>false</code>, the custom portlet mode will be managed by the portlet.
+    * </div>
+    * 
+    * @return  The portal managed flag setting 
+    */
+   boolean     portalManaged() default true;
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/CustomWindowState.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/CustomWindowState.java b/portlet-api/src/main/java/javax/portlet/annotations/CustomWindowState.java
new file mode 100644
index 0000000..bee3f36
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/CustomWindowState.java
@@ -0,0 +1,64 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * This annotation is used within composite portlet configuration annotations to
+ * represent a custom window state.
+ * It cannot be used as a stand-alone portlet annotation.
+ * </div>
+ */
+@Retention(RUNTIME) @Target({ANNOTATION_TYPE})
+public @interface CustomWindowState {
+   
+   /**
+    * <div class='container-change'>
+    * Provides locale-specific text describing the custom window state for use by the portal application or by tools.
+    * </div>
+    * 
+    * @return  The custom window state description
+    */
+   LocaleString[]      description() default {};
+   
+   /**
+    * <div class='container-change'>
+    * The custom window state name.
+    * <p>
+    * The name by which the window state is identified.
+    * </div>
+    * 
+    * @return  The custom window state name
+    */
+   String      name();
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/Dependency.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/Dependency.java b/portlet-api/src/main/java/javax/portlet/annotations/Dependency.java
new file mode 100644
index 0000000..2e9c9d1
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/Dependency.java
@@ -0,0 +1,65 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * This annotation is used within composite portlet configuration annotations to
+ * represent dependencies the portlet may have on external resources.
+ * The resources can represent client-side prerequisites such as JavaScript libraries
+ * or stylesheet resources that are shared among portlets.
+ * <p> 
+ * This annotation cannot be used as a stand-alone portlet annotation.
+ * </div>
+ */
+@Retention(RUNTIME) @Target({ANNOTATION_TYPE})
+public @interface Dependency {
+   
+   /**
+    * <div class='container-change'>
+    * The resource name.
+    * </div>
+    * 
+    * @return     The resource name
+    */
+   String   name();
+   
+   /**
+    * <div class='container-change'>
+    * The minimum acceptable module version.
+    * </div>
+    * 
+    * @return     The minimum acceptable module version
+    */
+   String   minVersion();
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/DestroyMethod.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/DestroyMethod.java b/portlet-api/src/main/java/javax/portlet/annotations/DestroyMethod.java
new file mode 100644
index 0000000..7b27cfe
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/DestroyMethod.java
@@ -0,0 +1,76 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * Designates a method corresponding to the portlet API destroy method.
+ * The annotated method must have the following signature:
+ * <p>
+ *    <code>public void &lt;methodName&gt;()</code>
+ * <p>   
+ * where the method name can be freely selected.
+ * <p>
+ * the <code>destroy</code> method is called by the portlet container to 
+ * indicate to a portlet that the
+ * portlet is being taken out of service.  
+ * <p>
+ * Before the portlet container calls the destroy method, it should 
+ * allow any threads that are currently processing requests within 
+ * the portlet object to complete execution. To avoid
+ * waiting forever, the portlet container can optionally wait for 
+ * a predefined time before destroying the portlet object.
+ * <p>
+ * This method enables the portlet to do the following:
+ * <ul>
+ * <li>clean up any resources that it holds (for example, memory,
+ * file handles, threads) 
+ * <li>make sure that any persistent state is
+ * synchronized with the portlet current state in memory.
+ * </ul>
+ * </div>
+ *    
+ * @see javax.portlet.Portlet#destroy()
+ *
+ */
+
+@Retention(RUNTIME) @Target({METHOD})
+public @interface DestroyMethod {
+   
+   /**
+    * The portlet name for the annotated method.
+    * 
+    * @return  The portlet name
+    */
+   String   portletName();
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/EventDefinition.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/EventDefinition.java b/portlet-api/src/main/java/javax/portlet/annotations/EventDefinition.java
new file mode 100644
index 0000000..591c14a
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/EventDefinition.java
@@ -0,0 +1,107 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * This annotation is used within composite portlet configuration annotations to
+ * represent a single event.
+ * It cannot be used as a stand-alone portlet annotation.
+ * </div>
+ */
+@Retention(RUNTIME) @Target({ANNOTATION_TYPE})
+public @interface EventDefinition {
+   
+   /**
+    * The event Qname.
+    * <p>
+    * The local part of the QName should be a non-empty String.
+    * The local part is used as the event name in the portlet API 
+    * event handling methods.
+    * <p>
+    * The event qname must be unique within the portlet application. 
+    * 
+    * @see     javax.portlet.Event
+    * @see     javax.portlet.StateAwareResponse#setEvent(javax.xml.namespace.QName, java.io.Serializable)
+    * @see     javax.portlet.StateAwareResponse#setEvent(String, java.io.Serializable)
+    * @see     javax.portlet.PortletConfig#getProcessingEventQNames() PortletConfig#getProcessingEventQNames
+    * @see     javax.portlet.PortletConfig#getPublishingEventQNames() PortletConfig#getPublishingEventQNames
+    * 
+    * @return  The event qname
+    */
+   PortletQName   qname();
+
+   /**
+    * The event payload type associated with the specified QName.
+    * Each QName may have only a single event payload type associated with it.
+    * The payload type must be serializable and must have a valid JAXB binding.
+    * <p>
+    * The default value <code>void.class</code> indicates that the event has no payload. 
+    * 
+    * @see     javax.portlet.Event
+    * @see     javax.portlet.StateAwareResponse#setEvent(javax.xml.namespace.QName, java.io.Serializable)
+    * @see     javax.portlet.StateAwareResponse#setEvent(String, java.io.Serializable)
+    * 
+    * @return     A class representing the payload type
+    */
+   Class<?>    payloadType() default void.class;
+   
+   /**
+    * <div class='container-change'>
+    * Provides locale-specific text describing the event for use by the portal application or by tools.
+    * </div>
+    * 
+    * @return  The event description
+    */
+   LocaleString[]      description() default {};
+   
+   /**
+    * <div class='container-change'>
+    * The display-name type contains a locale-specific short name that is intended to be displayed by tools. 
+    * It is used by display-name elements. 
+    * The display name need not be unique.
+    * </div>
+    * 
+    * @return  The display name
+    */
+   LocaleString[]   displayName() default {};
+
+   /**
+    * <div class='container-change'>
+    * The qualified name aliases for this event.
+    * </div>
+    * 
+    * @return the qualified name aliases
+    */
+   PortletQName[]    alias() default {};
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/EventMethod.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/EventMethod.java b/portlet-api/src/main/java/javax/portlet/annotations/EventMethod.java
new file mode 100644
index 0000000..8790e33
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/EventMethod.java
@@ -0,0 +1,119 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * Designates a method corresponding to the portlet API processEvent method.
+ * The annotated method must have the following signature:
+ * <p>
+ *    <code>public void &lt;methodName&gt;(EventRequest, EventResponse)</code>
+ * <p>   
+ * where the method name can be freely selected.
+ * <p>
+ * The method declaration may contain a throws clause. Exceptions declared in the 
+ * throws clause should be of type {@link javax.portlet.PortletException} or
+ * {@link java.io.IOException}. 
+ * Checked exceptions of any other type will be caught, wrapped with a PortletException, 
+ * and rethrown.
+ * </div>
+ *    
+ * @see javax.portlet.EventPortlet#processEvent(javax.portlet.EventRequest, javax.portlet.EventResponse) processEvent
+ *
+ */
+
+@Retention(RUNTIME) @Target({METHOD})
+public @interface EventMethod {
+   
+   /**
+    * The portlet name for the annotated method.
+    * 
+    * @return     The portlet name
+    */
+   String   portletName();
+   
+   /**
+    * If set to <code>true</code>, render parameters will be automatically copied
+    * from the <code>EventRequest</code> to the <code>EventResponse</code>.
+    * <p>
+    * The copy will take place before the code body of the annotated method
+    * is executed.
+    * 
+    * @return     <code>true</code> if parameters are to be copied.
+    */
+   boolean  copyParameters() default true; 
+   
+   /**
+    * The event name.
+    * <p>
+    * TODO: rework / remove this.
+    * <p>
+    * If an event name is specified, the bean enabler will dispatch portlet events with 
+    * matching event names to this method. 
+    * <p>
+    * An EventMethod with an empty event 
+    * name will receive all event requests not dispatched to other named EventMethods.
+    * 
+    * 
+    * @return  The event name
+    */
+   String   eventName() default "";
+   
+   /**
+    * <div class='container-change'>
+    * The processing event QName definitions supported by this method.
+    * <p>
+    * At least one processing event QName must be specified.
+    * <p>
+    * TODO: remove the default clause after rework above.
+    * </div>
+    * 
+    * @see     EventDefinition
+    * @see     PortletQName
+    * 
+    * @return  The processing event QNames
+    */
+   PortletQName[]   processingEvents() default {};
+   
+   /**
+    * <div class='container-change'>
+    * The QName definitions of the events published by this method.
+    * </div>
+    * 
+    * @see     EventDefinition
+    * @see     PortletQName
+    * 
+    * @return  The processing event QNames
+    */
+   PortletQName[]   publishingEvents() default {};
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/HeaderMethod.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/HeaderMethod.java b/portlet-api/src/main/java/javax/portlet/annotations/HeaderMethod.java
new file mode 100644
index 0000000..7c0a05a
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/HeaderMethod.java
@@ -0,0 +1,137 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * Designates a method corresponding to the renderHeaders method of 
+ * the <code>HeaderPortlet</code> interface.
+ * The annotated method must have the following signature:
+ * <p>
+ *    <code>public void &lt;methodName&gt;(HeaderRequest, HeaderResponse)</code>
+ * <p>   
+ * where the method name can be freely selected.
+ * <p>
+ * The method declaration may contain a throws clause. Exceptions declared in the 
+ * throws clause should be of type {@link javax.portlet.PortletException} or
+ * {@link java.io.IOException}. 
+ * Checked exceptions of any other type will be caught, wrapped with a PortletException, 
+ * and rethrown.
+ * <p>
+ * The header method can be used to set properties such as cookies, header values, and 
+ * XML elements for the <code>HEAD</code> section of the aggregated portal document.
+ * <p>
+ * Valid <code>HEAD</code> section markup written to the <code>HeaderResponse</code>
+ * output stream or writer will be added to the aggregated portal document <code>HEAD</code>
+ * section subject to portlet container-imposed restrictions. 
+ * </div>
+ *    
+ * @see javax.portlet.PortletResponse the add and set properties methods of PortletResponse
+ * @see javax.portlet.MimeResponse#MARKUP_HEAD_ELEMENT MimeResponse#MARKUP_HEAD_ELEMENT
+ * @see javax.portlet.HeaderPortlet
+ */
+
+@Retention(RUNTIME) @Target({METHOD})
+public @interface HeaderMethod {
+   
+   /**
+    * The portlet names for which the header method applies.
+    * <p>
+    * The annotated method can apply to multiple portlets within the portlet
+    * application. The names of the portlets to which the resources apply must be 
+    * specified in this field.
+    * <p>
+    * A wildcard character '*' can be specified in the first portletName array element 
+    * to indicate that the resource declarations are to apply to all portlets in 
+    * the portlet application.
+    * If specified, the wildcard character must appear alone in the first array element.
+    * 
+    * @return     The portlet names
+    */
+   String[]   portletNames();
+   
+   /**
+    * The portlet mode rendered by the annotated method.
+    * <p>
+    * If an portlet mode is specified, the bean enabler will dispatch Header requests with 
+    * matching portlet mode values to this method. 
+    * <p>
+    * If this field is empty, the method will be executed for all
+    * Header requests not dispatched by portlet mode to other HeaderMethods.
+    * 
+    * @return     The portlet mode
+    */
+   String   portletMode() default "view";
+   
+   /**
+    * Sets the content type, or the MIME type, of content generated by the method.
+    * The content type will be set before the annotated method body is executed.
+    * <p>
+    * If this field is empty, no content type will be set.
+    * The portlet can then set the content type using the portlet API
+    * <code>HeaderResponse#setContentType</code> method.
+    * 
+    * @see        javax.portlet.HeaderResponse#setContentType(String) HeaderResponse#setContentType
+    * 
+    * @return     The content type
+    */
+   String   contentType() default "text/html";
+   
+   /**
+    * Specifies a resource, such as a JSP, an HTML file, or a servlet to be included.
+    * <p>
+    * The resource will be included using the 
+    * <code>PortletRequestDispatcher#include</code> method after the method body 
+    * has been executed.
+    * <p>
+    * If this field is empty, no resource will be included.
+    * 
+    * @see        javax.portlet.PortletRequestDispatcher
+    * @see        javax.portlet.PortletRequestDispatcher#include(javax.portlet.PortletRequest, javax.portlet.PortletResponse) PortletRequestDispatcher#include
+    * 
+    * @return     The resource to be included
+    */
+   String   include() default "";
+   
+   /**
+    * The ordinal number for this annotated method.
+    * <p>
+    * The ordinal number determines the order of execution if multiple methods
+    * are annotated.
+    * Annotated methods with a lower ordinal number are executed before methods with
+    * a higher ordinal number.
+    * 
+    * @return     The ordinal number
+    */
+   int        ordinal() default 0;
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/InitMethod.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/InitMethod.java b/portlet-api/src/main/java/javax/portlet/annotations/InitMethod.java
new file mode 100644
index 0000000..ed6176b
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/InitMethod.java
@@ -0,0 +1,74 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * Designates a method corresponding to the portlet API init method.
+ * The annotated method must have the following signature:
+ * <p>
+ *    <code>public void &lt;methodName&gt;(PortletConfig) throws PortletException</code>
+ * <p>   
+ * where the method name can be freely selected.
+ * <p>
+ * the <code>init</code> method is called by the portlet container to 
+ * initialize the portlet when it is  
+ * being placed into service.
+ * <p>
+ * The portlet container calls the <code>init</code>
+ * method exactly once after instantiating the portlet.
+ * The <code>init</code> method must complete successfully
+ * before the portlet can receive any requests.
+ * <p>
+ * The portlet container cannot place the portlet into service
+ * if the <code>init</code> method
+ * <ol>
+ * <li>Throws a <code>PortletException</code>
+ * <li>Does not return within a time period defined by the portlet container.
+ * </ol>
+ * </div>
+ *    
+ * @see javax.portlet.Portlet#init(javax.portlet.PortletConfig)
+ *
+ */
+
+@Retention(RUNTIME) @Target({METHOD})
+public @interface InitMethod {
+   
+   /**
+    * The portlet name for the annotated method.
+    * 
+    * @return  The portlet name
+    */
+   String   portletName();
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/InitParameter.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/InitParameter.java b/portlet-api/src/main/java/javax/portlet/annotations/InitParameter.java
new file mode 100644
index 0000000..d726577
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/InitParameter.java
@@ -0,0 +1,58 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * This annotation is used within composite portlet configuration annotations to
+ * represent name-value pairs.
+ * It cannot be used as a stand-alone portlet annotation.
+ * </div>
+ */
+@Retention(RUNTIME) @Target({ANNOTATION_TYPE})
+public @interface InitParameter {
+   
+   /**
+    * The parameter name.
+    * 
+    * @return     The parameter name
+    */
+   String   name();
+   
+   /**
+    * The parameter value
+    * 
+    * @return     The parameter value
+    */
+   String   value();
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/LocaleString.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/LocaleString.java b/portlet-api/src/main/java/javax/portlet/annotations/LocaleString.java
new file mode 100644
index 0000000..a23346c
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/LocaleString.java
@@ -0,0 +1,67 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * This annotation represents locale-specific strings used within composite portlet configuration annotations to
+ * represent information describing the portlet.
+ * It cannot be used as a stand-alone portlet annotation.
+ * </div>
+ */
+@Retention(RUNTIME) @Target({ANNOTATION_TYPE})
+public @interface LocaleString {
+   
+   /**
+    * <div class='container-change'>
+    * The locale for the locale-specific string.
+    * <p>
+    * The locale is specified as a language tag as defined in 
+    * IETF BCP 47, "Tags for Identifying Languages".
+    * </div>
+    * 
+    * @see     java.util.Locale
+    * @see     java.util.Locale#forLanguageTag forLanguageTag
+    * @see     <a href="https://tools.ietf.org/html/bcp47">IETF BCP 47</a>
+    * 
+    * @return  The locale
+    */
+   String   locale() default "en";
+   
+   /**
+    * The parameter value
+    * 
+    * @return     The parameter value
+    */
+   String   value();
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/Namespace.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/Namespace.java b/portlet-api/src/main/java/javax/portlet/annotations/Namespace.java
new file mode 100644
index 0000000..291b298
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/Namespace.java
@@ -0,0 +1,58 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * Qualifier that specifies the namespace for injection.
+ * <p>
+ * The injection target type must be <code>String</code>.
+ * <p>
+ * This annotation may only be used in <code>{@literal @}RequestScoped</code> or
+ * <code>{@literal @}PortletStateScoped</code> beans.
+ * <p>
+ * Example:
+ * <div class='codebox'>      
+ * {@literal @}Inject {@literal @}Namespace<br/>   
+ * private String namespace;
+ * </div>                    
+ * </div>
+ * 
+ * @see javax.portlet.PortletResponse#getNamespace() getNamespace
+ */
+
+@Qualifier @Retention(RUNTIME) @Target({METHOD, FIELD, PARAMETER})
+public @interface Namespace {
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/7fb0624d/portlet-api/src/main/java/javax/portlet/annotations/PortletApplication.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/annotations/PortletApplication.java b/portlet-api/src/main/java/javax/portlet/annotations/PortletApplication.java
new file mode 100644
index 0000000..63cc7de
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/annotations/PortletApplication.java
@@ -0,0 +1,143 @@
+/*  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.
+ */
+
+/*
+ * This source code implements specifications defined by the Java
+ * Community Process. In order to remain compliant with the specification
+ * DO NOT add / change / or delete method signatures!
+ */
+
+package javax.portlet.annotations;
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * <div class='changed_added_3_0'>
+ * Annotation for the portlet application configuration. 
+ * These configuration parameters also appear in
+ * the portlet deployment descriptor.
+ * <p>
+ * The portlet deployment descriptor can continue to be used. 
+ * Values of configuration parameters appearing in the deployment descriptor have 
+ * precedence over the corresponding values defined in the annotation.   
+ * </div>
+ */
+@Retention(RUNTIME) @Target({TYPE})
+public @interface PortletApplication {
+   
+   /**
+    * The portlet API version required by this portlet application.
+    * 
+    * @return The portlet API version
+    */
+   String version() default "3.0";
+   
+   /**
+    * The portlet container runtime options.
+    * 
+    * @return     An array of portlet container runtime options
+    */
+   RuntimeOption[] runtimeOptions() default {};
+   
+   /**
+    * <div class='container-change'>
+    * The public render parameters used by the portlet.
+    * </div>
+    * 
+    * @return     The array of public render parameters.
+    */
+   PublicRenderParameterDefinition[]  publicParams() default {};
+   
+   /**
+    * <div class='container-change'>
+    * The events defined for the portlet.
+    * This includes the processing events as well as the publishing events.
+    * <p>
+    * The publishing event QNames are specified in the
+    * <code>ActionMethod</code> and <code>EventMethod</code> annotations.
+    * The processing event QNames are specified in the
+    * <code>ActionMethod</code> and <code>EventMethod</code> annotations.
+    * </div>
+    * 
+    * @see        PortletQName
+    * @see        ActionMethod
+    * @see        EventMethod
+    * 
+    * @return     The event definitions
+    */
+   EventDefinition[] events() default {};
+   
+   /**
+    * <div class='container-change'>
+    * The resource bundle name for this portlet.
+    * Name of the resource bundle containing the language specific 
+    * portlet information in different languages.
+    * <p>
+    * the file name is specified without 
+    * the language specific part (e.g. _en) or the file extension.
+    * </div>
+    * 
+    * @return     The resource bundle name
+    */
+   String   resourceBundle()  default "";
+   
+   /**
+    * <div class='container-change'>
+    * The custom portlet modes defined for this portlet.
+    * </div>
+    * 
+    * @return     The custom portlet modes
+    */
+   CustomPortletMode[] customPortletModes() default {};
+   
+   /**
+    * <div class='container-change'>
+    * The custom window states defined for this portlet.
+    * </div>
+    * 
+    * @return     The custom window states
+    */
+   CustomWindowState[] customWindowStates() default {};
+   
+   /**
+    * <div class='container-change'>
+    * The default QName namespace URI.
+    * <p>
+    * The default namespace URI is used when no namespace URI is specified 
+    * when declaring a QName for a public render parameter or portlet event. 
+    * </div>
+    * 
+    * @return  The default namespace URI.
+    */
+   String      defaultNamespaceURI() default "";
+   
+   /**
+    * <div class='container-change'>
+    * The user aattribute declarations. 
+    * </div>
+    * 
+    * @return  The user attribute declarations
+    */
+   UserAttribute[] userAttributes() default {};
+}