portals-pluto-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From msnickl...@apache.org
Subject [08/12] portals-pluto git commit: Modified name of portlet API module & moved artifact version to 3.0-snapshot in preparation for further prototyping
Date Tue, 27 Jan 2015 16:26:46 GMT
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/4fc38552/portlet-api/src/main/java/javax/portlet/PortletSession.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/PortletSession.java b/portlet-api/src/main/java/javax/portlet/PortletSession.java
new file mode 100644
index 0000000..1b6e088
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/PortletSession.java
@@ -0,0 +1,417 @@
+/*  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.util.Map;
+
+
+
+/**
+ * The <CODE>PortletSession</CODE> interface provides a way to identify a user
+ * across more than one request and to store transient information about that user.
+ * <p>
+ * A <code>PortletSession</code> is created per user client per portlet application.
+ * <p>
+ * A portlet can bind an object attribute into a <code>PortletSession</code> by name.
+ * The <code>PortletSession</code> interface defines two scopes for storing objects:
+ * <ul>
+ * <li><code>APPLICATION_SCOPE</code>
+ * <li><code>PORTLET_SCOPE</code>
+ * </ul>
+ * All objects stored in the session using the <code>APPLICATION_SCOPE</code> 
+ * must be available to all the portlets, servlets and 
+ * JSPs that belongs to the same portlet application and that handles a 
+ * request identified as being a part of the same session.
+ * Objects stored in the session using the <code>PORTLET_SCOPE</code> must be
+ * available to the portlet during requests for the same portlet window
+ * that the objects where stored from. Attributes stored in the
+ * <code>PORTLET_SCOPE</code> are not protected from other web components
+ * of the portlet application. They are just conveniently namespaced.
+ * <P>
+ * The portlet session is based on the <code>HttpSession</code>. Therefore all
+ * <code>HttpSession</code> listeners do apply to the portlet session and
+ * attributes set in the portlet session are visible in the <code>HttpSession</code>
+ * and vice versa.
+ */
+public interface PortletSession
+{
+
+  /**
+   * This constant defines an application wide scope for the session attribute.
+   * <code>APPLICATION_SCOPE</code> session attributes enable Portlets 
+   * within one portlet application to share data.
+   * <p>
+   * Portlets may need to prefix attributes set in this scope with some
+   * ID, to avoid overwriting each other's attributes in the
+   * case where two portlets of the same portlet definition
+   * are created.
+   * <p>
+   * Value: <code>0x01</code>
+   */
+  public static final int APPLICATION_SCOPE = 0x01;
+
+  /**
+   * This constant defines the scope of the session attribute to be
+   * private to the portlet and its included resources. 
+   * <p>
+   * Value: <code>0x02</code>
+   */
+  public static final int PORTLET_SCOPE = 0x02;
+
+
+
+  /**
+   * Returns the object bound with the specified name in this session
+   * under the <code>PORTLET_SCOPE</code>, or <code>null</code> if no 
+   * object is bound under the name in that scope.
+   *
+   * @param name		a string specifying the name of the object
+   *
+   * @return			the object with the specified name for
+   *                            the <code>PORTLET_SCOPE</code>.
+   *
+   * @exception java.lang.IllegalStateException	if this method is called on an
+   *					invalidated session.
+   * @exception  java.lang.IllegalArgumentException 
+   *                            if name is <code>null</code>.
+   */
+
+  public java.lang.Object getAttribute(java.lang.String name);
+
+  
+  /**
+   * Returns the object bound with the specified name in this session, 
+   * or <code>null</code> if no object is bound under the name in the given scope.
+   *
+   * @param name		a string specifying the name of the object
+   * @param scope               session scope of this attribute
+   *
+   * @return			the object with the specified name
+   *
+   * @exception java.lang.IllegalStateException	if this method is called on an
+   *					invalidated session, or the scope is unknown to the container.
+   * @exception  java.lang.IllegalArgumentException 
+   *                            if name is <code>null</code>.
+   */
+
+  public java.lang.Object getAttribute(java.lang.String name,int scope);
+
+
+  /**
+   * Returns an <code>Enumeration</code> of String objects containing the names of 
+   * all the objects bound to this session under the <code>PORTLET_SCOPE</code>, or an
+   * empty <code>Enumeration</code> if no attributes are available.
+   *
+   * @return			an <code>Enumeration</code> of 
+   *				<code>String</code> objects specifying the
+   *				names of all the objects bound to
+   *				this session, or an empty <code>Enumeration</code> 
+   *                if no attributes are available.
+   *
+   * @exception java.lang.IllegalStateException	if this method is called on an
+   *					invalidated session   
+   */
+  
+  public java.util.Enumeration<String> getAttributeNames();
+
+
+  /**
+   * Returns an <code>Enumeration</code> of String objects containing the names of 
+   * all the objects bound to this session in the given scope, or an
+   * empty <code>Enumeration</code> if no attributes are available in the
+   * given scope.
+   *
+   * @param scope               session scope of the attribute names
+   *
+   * @return			an <code>Enumeration</code> of 
+   *				<code>String</code> objects specifying the
+   *				names of all the objects bound to
+   *				this session, or an empty <code>Enumeration</code> 
+   *                            if no attributes are available in the given scope.
+   *
+   * @exception java.lang.IllegalStateException	if this method is called on an
+   *					invalidated session, or the scope is unknown to the container.      
+   */
+  
+  public java.util.Enumeration<String> getAttributeNames(int scope);
+
+  /**
+   * Returns the time when this session was created, measured in 
+   * milliseconds since midnight January 1, 1970 GMT.  
+   *
+   * @return				a <code>long</code> specifying
+   * 					when this session was created,
+   *					expressed in 
+   *					milliseconds since 1/1/1970 GMT
+   *
+   * @exception java.lang.IllegalStateException	if this method is called on an
+   *					invalidated session
+   */
+
+  public long getCreationTime();
+  
+
+  /**
+   * Returns a string containing the unique identifier assigned to this session. 
+   *
+   * @return				a string specifying the identifier
+   *					assigned to this session
+   */
+  
+  public java.lang.String getId();
+  
+
+  /**
+   * Returns the last time the client sent a request associated with this session, 
+   * as the number of milliseconds since midnight January 1, 1970 GMT.  
+   *
+   * <p>Actions that your portlet takes, such as getting or setting
+   * a value associated with the session, do not affect the access
+   * time.
+   *
+   * @return				a <code>long</code>
+   *					representing the last time 
+   *					the client sent a request associated
+   *					with this session, expressed in 
+   *					milliseconds since 1/1/1970 GMT
+   */
+  
+  public long getLastAccessedTime();
+
+
+  /**
+   * Returns the maximum time interval, in seconds, for which the portlet container 
+   * keeps this session open between client accesses. After this interval, 
+   * the portlet container invalidates the session.  The maximum time 
+   * interval can be set
+   * with the <code>setMaxInactiveInterval</code> method.
+   * A negative time indicates the session should never timeout.
+   *
+   * @return		an integer specifying the number of
+   *			seconds this session remains open
+   *			between client requests
+   *
+   * @see		#setMaxInactiveInterval
+   */
+
+  public int getMaxInactiveInterval();
+
+
+  /**
+   * Invalidates this session (all scopes) and unbinds any objects bound to it.  
+   * <p>
+   * Invalidating the portlet session will result in invalidating the underlying
+   * <code>HttpSession</code>
+   *
+   * @exception java.lang.IllegalStateException	if this method is called on a
+   *					session which has already been invalidated
+   */
+
+  public void invalidate();
+
+
+
+  /**
+   * Returns true if the client does not yet know about the session or 
+   * if the client chooses not to join the session. 
+   *
+   * @return 				<code>true</code> if the 
+   *					server has created a session, 
+   *					but the client has not joined yet.
+   *
+   * @exception java.lang.IllegalStateException	if this method is called on a
+   *					session which has already been invalidated
+   *
+   */
+
+  public boolean isNew();
+  
+
+  /**
+   * Removes the object bound with the specified name under
+   * the <code>PORTLET_SCOPE</code> from
+   * this session. If the session does not have an object
+   * bound with the specified name, this method does nothing.
+   * 
+   * @param name   the name of the object to be
+   *               removed from this session in the 
+   *               <code> PORTLET_SCOPE</code>.
+   *
+   * @exception java.lang.IllegalStateException
+   *                   if this method is called on a
+   *                   session which has been invalidated
+   * @exception  java.lang.IllegalArgumentException 
+   *                            if name is <code>null</code>.
+   */
+  
+  public void removeAttribute(String name) ;
+
+
+  /**
+   * Removes the object bound with the specified name and the given scope from
+   * this session. If the session does not have an object
+   * bound with the specified name, this method does nothing.
+   * 
+   * @param name   the name of the object to be
+   *               removed from this session
+   * @param scope  session scope of this attribute
+   *
+   * @exception java.lang.IllegalStateException
+   *                   if this method is called on a
+   *                   session which has been invalidated
+   * @exception  java.lang.IllegalArgumentException 
+   *                            if name is <code>null</code>.
+   */
+  
+  public void removeAttribute(String name, int scope) ;
+
+
+  /**
+   * Binds an object to this session under the <code>PORTLET_SCOPE</code>, using the name specified.  
+   * If an object of the same name in this scope is already bound to the session,
+   * that object is replaced.
+   *
+   * <p>After this method has been executed, and if the new object
+   * implements <code>HttpSessionBindingListener</code>,
+   * the container calls 
+   * <code>HttpSessionBindingListener.valueBound</code>. The container then   
+   * notifies any <code>HttpSessionAttributeListeners</code> in the web 
+   * application.
+   * <p>If an object was already bound to this session 
+   * that implements <code>HttpSessionBindingListener</code>, its 
+   * <code>HttpSessionBindingListener.valueUnbound</code> method is called.
+   *
+   * <p>If the value is <code>null</code>, this has the same effect as calling 
+   * <code>removeAttribute()</code>.
+   *
+   *
+   * @param name		the name to which the object is bound under
+   *                            the <code>PORTLET_SCOPE</code>;
+   *				this cannot be <code>null</code>.
+   * @param value		the object to be bound
+   *
+   * @exception java.lang.IllegalStateException	if this method is called on a
+   *					session which has been invalidated
+   * @exception  java.lang.IllegalArgumentException 
+   *                            if name is <code>null</code>.
+   */
+  
+  public void setAttribute(java.lang.String name, java.lang.Object value);
+
+
+  /**
+   * Binds an object to this session in the given scope, using the name specified.  
+   * If an object of the same name in this scope is already bound to the session,
+   * that object is replaced.
+   *
+   * <p>After this method has been executed, and if the new object
+   * implements <code>HttpSessionBindingListener</code>,
+   * the container calls 
+   * <code>HttpSessionBindingListener.valueBound</code>. The container then   
+   * notifies any <code>HttpSessionAttributeListeners</code> in the web 
+   * application.
+   * <p>If an object was already bound to this session 
+   * that implements <code>HttpSessionBindingListener</code>, its 
+   * <code>HttpSessionBindingListener.valueUnbound</code> method is called.
+   *
+   * <p>If the value is <code>null</code>, this has the same effect as calling 
+   * <code>removeAttribute()</code>.
+   *
+   *
+   * @param name		the name to which the object is bound;
+   *				this cannot be <code>null</code>.
+   * @param value		the object to be bound
+   * @param scope               session scope of this attribute
+   *
+   * @exception java.lang.IllegalStateException	if this method is called on a
+   *					session which has been invalidated
+   * @exception  java.lang.IllegalArgumentException 
+   *                            if name is <code>null</code> or scope is unknown to the container.
+   */
+  
+  public void setAttribute(java.lang.String name, java.lang.Object value, int scope);
+
+
+  /**
+   * Specifies the time, in seconds, between client requests, before the 
+   * portlet container invalidates this session. A negative time
+   * indicates the session should never timeout.
+   *
+   * @param interval		An integer specifying the number
+   * 				of seconds 
+   */
+
+  public void setMaxInactiveInterval(int interval);
+
+
+  /**
+   * Returns the portlet application context associated with this session.
+   *
+   * @return   the portlet application context
+   */
+
+  public PortletContext getPortletContext ();
+
+  /** 
+   * Returns a <code>Map</code> of the session attributes in
+   * the portlet session scope.
+   * <p>
+   * The keys are of type <code>String</code> and the values in the 
+   * returned <code>Map</code> are from type <code>Object</code>.
+   * <p>
+   * If no session attributes exist this method returns an empty <code>Map</code>.
+   *
+   * @return     an immutable <code>Map</code> containing the session attributes in the  
+   *             portlet session scope as keys and attribute values as map values, or an empty <code>Map</code>
+   *             if no session attributes exist. The keys in the
+   *             map are of type String, the values of type
+   *             Object.
+   *  @since 2.0
+   */
+  public Map<String, Object> getAttributeMap();  
+
+  /** 
+   * Returns a <code>Map</code> of the session attributes in
+   * the given session scope.
+   * <p>
+   * The keys are of type <code>String</code> and the values in the 
+   * returned <code>Map</code> are from type <code>Object</code>.
+   * <p>
+   * If no session attributes exist this method returns an empty <code>Map</code>.
+   *
+   * @param scope               session scope of this attribute
+   * 
+   * @return     an immutable <code>Map</code> containing the session attributes in the  
+   *             given scope as keys and attribute values as map values, or an empty <code>Map</code>
+   *             if no session attributes exist. The keys in the
+   *             map are of type String, the values of type
+   *             Object.
+   *  @since 2.0
+   */
+  public Map<String, Object> getAttributeMap(int scope);  
+
+}
+
+

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/4fc38552/portlet-api/src/main/java/javax/portlet/PortletSessionUtil.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/PortletSessionUtil.java b/portlet-api/src/main/java/javax/portlet/PortletSessionUtil.java
new file mode 100644
index 0000000..bfd5312
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/PortletSessionUtil.java
@@ -0,0 +1,90 @@
+/*  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;
+
+/**
+ * The <CODE>PortletSessionUtil</CODE>  class helps identify and decode
+ * attributes in the <CODE>PORTLET_SCOPE</CODE> scope of the PortletSession
+ * when accessed through the HttpSession an from within calls to methods
+ * of the HttpSessionBindingListener interface.
+ */
+public class PortletSessionUtil
+{
+
+  private static final String PORTLET_SCOPE_NAMESPACE = "javax.portlet.p.";
+  
+  /**
+   * Returns the attribute name of an attribute in the 
+   * <code>PORTLET_SCOPE</code>. If the attribute is in the
+   * <code>APPLICATION_SCOPE</code> it returns the attribute name unchanged.
+   *
+   * @param name		a string specifying the name of the
+   *                            encoded portlet attribute
+   *
+   * @return			the decoded attribute name
+   */
+
+  public static java.lang.String decodeAttributeName(java.lang.String name)
+  {
+    if (name.startsWith(PORTLET_SCOPE_NAMESPACE)) {
+      int index = name.indexOf('?');
+      if (index>-1) {
+	name = name.substring(index+1);
+      }
+    }
+    return name;
+  }
+
+
+  /**
+   * Returns the portlet attribute scope from an encoded portlet
+   * attribute.
+   * <br>Possible return values are:
+   * <ul>
+   * <li><code>PortletSession.APPLICATION_SCOPE</code></li>
+   * <li><code>PortletSession.PORTLET_SCOPE</code></li>
+   * </ul>
+   *
+   * @param name		a string specifying the name of the
+   *                            encoded portlet attribute
+   *
+   * @return			the decoded attribute scope
+   * @see PortletSession
+   */
+
+  public static int decodeScope(java.lang.String name)
+  {
+    int scope = PortletSession.APPLICATION_SCOPE; // APP
+    if (name.startsWith(PORTLET_SCOPE_NAMESPACE)) {
+      int index = name.indexOf('?');
+      if (index>-1) {
+	scope = PortletSession.PORTLET_SCOPE; // PORTLET
+      }
+    }
+    return scope;
+  }
+}
+
+

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/4fc38552/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
new file mode 100644
index 0000000..2382f66
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/PortletURL.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;
+
+
+
+/**
+ * The <CODE>PortletURL</CODE> interface represents a URL
+ * that reference the portlet itself.
+ * <p>
+ * A PortletURL is created through the <CODE>RenderResponse</CODE>
+ * or <code>ResourceResponse</code>.
+ * Parameters, a portlet mode, a window state and a security level
+ * can be added to <CODE>PortletURL</CODE> objects. 
+ * <P>
+ * There are two types of PortletURLs:
+ * <ul>
+ * <li>Action URLs, they are created with <CODE>createActionURL</CODE>, and 
+ *     trigger an action request followed by a render request.
+ * <li>Render URLs, they are created with <CODE>createRenderURL</CODE>, and
+ *     trigger a render request.
+ * </ul>
+ * <p>
+ * The string representation of a PortletURL does not need to be a valid 
+ * URL at the time the portlet is generating its content. It may contain  
+ * special tokens that will be converted to a valid URL, by the portal, 
+ * before the content is returned to the client.
+ */
+public interface PortletURL extends BaseURL
+{
+
+
+
+  /**
+   * Indicates the window state the portlet should be in, if this 
+   * portlet URL triggers a request.
+   * <p>
+   * A URL can not have more than one window state attached to it.
+   * If more than one window state is set only the last one set
+   * is attached to the URL.
+   * 
+   * @param windowState
+   *               the portlet window state
+   *
+   * @exception WindowStateException
+   *                   if the portlet cannot switch to this state,
+   *                   because the portal does not support this state, the portlet has not 
+   *                   declared in its deployment descriptor that it supports this state, or the current
+   *                   user is not allowed to switch to this state.
+   *                   The <code>PortletRequest.isWindowStateAllowed()</code> method can be used
+   *                   to check if the portlet can set a given window state.
+   * @see PortletRequest#isWindowStateAllowed
+   */
+  public void setWindowState (WindowState windowState)
+    throws WindowStateException;
+
+
+  /**
+   * Indicates the portlet mode the portlet must be in, if this
+   * portlet URL triggers a request.
+   * <p>
+   * A URL can not have more than one portlet mode attached to it.
+   * If more than one portlet mode is set only the last one set
+   * is attached to the URL.
+   * 
+   * @param portletMode
+   *               the portlet mode
+   * 
+   * @exception PortletModeException
+   *                   if the portlet cannot switch to this mode,
+   *                   because the portal does not support this mode, the portlet has not
+   *                   declared in its deployment descriptor that it supports this mode for the current markup,
+   *                   or the current user is not allowed to switch to this mode.
+   *                   The <code>PortletRequest.isPortletModeAllowed()</code> method can be used
+   *                   to check if the portlet can set a given portlet mode.
+   * @see PortletRequest#isPortletModeAllowed
+   */
+  public void setPortletMode (PortletMode portletMode)
+    throws PortletModeException;
+
+
+  /**
+   * Returns the currently set portlet mode on this PortletURL.
+   *             
+   * @since 2.0
+   *
+   * @return   the portlet mode, or <code>null</code> if none is set
+   */
+
+  public PortletMode getPortletMode ();
+
+
+  /**
+   * Returns the currently set window state on this PortletURL.
+   *             
+   * @since 2.0
+   *
+   * @return   the window state, or <code>null</code> if none is set
+   */
+
+  public WindowState getWindowState ();
+
+  /**
+	* Removes the specified public render parameter.
+	* The name must reference a public render parameter defined
+	* in the portlet deployment descriptor under the
+	* <code>public-render-parameter</code> element with the
+	* <code>identifier</code> mapping to the parameter name.
+	* <p>
+	* Note that calling this method on a PortletURL of type
+	* Action URL does not have any effect.
+	* 
+	* @param name			a <code>String</code> specifying 
+	*					the name of the public render parameter to be removed
+	*
+	* @exception  java.lang.IllegalArgumentException 
+	*                            if name is <code>null</code>.
+	* @since 2.0
+	*/
+  public void removePublicRenderParameter(String name); 
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/4fc38552/portlet-api/src/main/java/javax/portlet/PortletURLGenerationListener.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/PortletURLGenerationListener.java b/portlet-api/src/main/java/javax/portlet/PortletURLGenerationListener.java
new file mode 100644
index 0000000..146554b
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/PortletURLGenerationListener.java
@@ -0,0 +1,66 @@
+/*  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;
+
+/**
+ * Portlet applications can register portlet URL listeners in order to filter URLs 
+ * before they get generated.
+ * In order to receive a callback from the portlet container before a 
+ * portlet URL is generated the portlet application needs to implement this 
+ * interface and register it in the deployment descriptor with the
+ * <code>listener</code> element.
+ *
+ * @since 2.0
+ */
+public interface PortletURLGenerationListener {
+
+	/**
+	 * Callback being called by the portlet container
+	 * before <code>toString</code> or <code>write</code>
+	 * are executed on action URLs.
+	 * 
+	 * @param actionURL  action URL to be generated
+	 */
+	public void filterActionURL(PortletURL actionURL);
+
+	/**
+	 * Callback being called by the portlet container
+	 * before <code>toString</code> or <code>write</code>
+	 * are executed on render URLs.
+	 * 
+	 * @param renderURL  render URL to be generated
+	 */
+	public void filterRenderURL(PortletURL renderURL);
+	
+	/**
+	 * Callback being called by the portlet container
+	 * before <code>toString</code> or <code>write</code>
+	 * are executed on resource URLs.
+	 * 
+	 * @param resourceURL  resource URL to be generated
+	 */
+	public void filterResourceURL(ResourceURL resourceURL);
+	
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/4fc38552/portlet-api/src/main/java/javax/portlet/PreferencesValidator.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/PreferencesValidator.java b/portlet-api/src/main/java/javax/portlet/PreferencesValidator.java
new file mode 100644
index 0000000..8d3e687
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/PreferencesValidator.java
@@ -0,0 +1,53 @@
+/*  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;
+
+
+/**
+ * The <CODE>PreferencesValidator</CODE> allows to validate the set of
+ * preferences of the associated portlet just before they are
+ * stored in the persistent store.
+ * <p>
+ * The portlet container invokes the <code>validate</code> method as 
+ * part of the invocation of the <code>store</code> method of the
+ * <code>PortletPreferences</code>.
+ */
+public interface PreferencesValidator
+{
+
+  /**
+   * If the preferences values are successfully validated the call to this method
+   * must finish gracefully. Otherwise it must throw a <code>ValidatorException</code>.
+   *
+   * @param  preferences   preferences to validate
+   *
+   * @throws  ValidatorException  if the given preferences contains invalid
+   *                              settings
+   *
+   */
+
+  public void validate(PortletPreferences preferences)
+    throws ValidatorException;  
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/4fc38552/portlet-api/src/main/java/javax/portlet/ProcessAction.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/ProcessAction.java b/portlet-api/src/main/java/javax/portlet/ProcessAction.java
new file mode 100644
index 0000000..e3c95d6
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/ProcessAction.java
@@ -0,0 +1,52 @@
+/*  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.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation for marking a method for processing
+ * a specific action.
+ * The <code>GenericPortlet</code> tries to dispatch to methods annotated 
+ * with the tag <code>@ProcessAction</code> for any received
+ * <code>processAction</code> call.
+ *
+ * @since 2.0
+ */
+@Target(ElementType.METHOD)
+@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
+public @interface ProcessAction {
+	/**
+	 * Name of the action.
+	 * Must be set on the 
+	 * <code>ActionURL</code> as value of the 
+	 * parameter <code>javax.portlet.action</code>.
+	 * 
+	 * @return  action name
+	 */
+	String name();
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/4fc38552/portlet-api/src/main/java/javax/portlet/ProcessEvent.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/ProcessEvent.java b/portlet-api/src/main/java/javax/portlet/ProcessEvent.java
new file mode 100644
index 0000000..4da524d
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/ProcessEvent.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;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation for marking a method for handling
+ * a specific event.
+ * The <code>GenericPortlet</code> tries to dispatch to methods annotated 
+ * with the tag <code>@ProcessEvent</code> for any received event.
+ *
+ * @since 2.0
+ */
+@Target(ElementType.METHOD)
+@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
+public @interface ProcessEvent {
+    /**
+     * Event QName.
+     * Must be in the format:<br> 
+     * "{" + Namespace URI + "}" + local part.<br> 
+     * If the Namespace URI equals(XMLConstants.NULL_NS_URI), 
+     * only the local part is used 
+     * (like the <code>javax.xml.namespace.QName.toString()</code> method).
+     * 
+     * @return event QName.
+     */
+    String qname() default "";
+    
+    /**
+     * Local part of the event name.
+     * The namespace for the events is either taken from the <code>default-event-namespace</code> element
+     * in the portlet deployment descriptor, or if this element is not provided
+     * the XML default namespace XMLConstants.NULL_NS_URI is used.
+     * 
+     * @return local part of the event name.
+     */
+    String name() default "";
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/4fc38552/portlet-api/src/main/java/javax/portlet/ReadOnlyException.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/ReadOnlyException.java b/portlet-api/src/main/java/javax/portlet/ReadOnlyException.java
new file mode 100644
index 0000000..01c575a
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/ReadOnlyException.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;
+
+/**
+ * The <CODE>ReadOnlyException</CODE> is thrown when a portlet tries
+ * to change the value for a read-only preference attribute.
+ */
+
+public class ReadOnlyException extends PortletException
+{
+	  private static final long serialVersionUID = 1L;
+
+  private ReadOnlyException ()
+  {
+  }
+
+  /**
+   * Constructs a new read-only exception with the given text. The
+   * portlet container may use the text write it to a log.
+   *
+   * @param   text
+   *          the exception text
+   */
+
+  public ReadOnlyException (String text)
+  {
+    super (text);
+  }
+
+  /**
+   * Constructs a new read-only exception when the portlet needs to do
+   * the following:
+   * <ul>
+   * <il>throw an exception 
+   * <li>include a message about the "root cause" that interfered
+   *     with its normal operation
+   * <li>include a description message
+   * </ul>
+   *
+   * @param   text
+   *          the exception text
+   * @param   cause
+   *          the root cause
+   */
+  
+  public ReadOnlyException (String text, Throwable cause)
+  {
+    super(text, cause);
+  }
+
+  /**
+   * Constructs a new read-only exception when the portlet needs to throw an
+   * exception. The exception message is based on the localized message
+   * of the underlying exception.
+   *
+   * @param   cause
+   *          the root cause
+   */
+
+  public ReadOnlyException (Throwable cause)
+  {
+    super(cause);
+  }
+
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/4fc38552/portlet-api/src/main/java/javax/portlet/RenderMode.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/RenderMode.java b/portlet-api/src/main/java/javax/portlet/RenderMode.java
new file mode 100644
index 0000000..0704bb8
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/RenderMode.java
@@ -0,0 +1,49 @@
+/*  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.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation for marking a method for handling
+ * a specific portlet mode in the render phase.
+ * The <code>GenericPortlet</code> tries to dispatch to methods annotated 
+ * with the tag <code>@RenderMode</code> for any received render call.
+ *
+ * @since 2.0
+ */
+@Target(ElementType.METHOD)
+@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
+public @interface RenderMode {
+	/**
+	 * Name of the render mode.
+	 * 
+	 * @return  render mode name
+	 */
+	String name();
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/4fc38552/portlet-api/src/main/java/javax/portlet/RenderRequest.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/RenderRequest.java b/portlet-api/src/main/java/javax/portlet/RenderRequest.java
new file mode 100644
index 0000000..29b328c
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/RenderRequest.java
@@ -0,0 +1,72 @@
+/*  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;
+
+
+/**
+ * The <CODE>RenderRequest</CODE> represents the request sent to the portlet
+ * to handle a render.
+ * It extends the PortletRequest interface to provide render request
+ * information to portlets.<br>
+ * The portlet container creates a <CODE>RenderRequest</CODE> object and
+ * passes it as argument to the portlet's <CODE>render</CODE> method.
+ * 
+ * @see PortletRequest
+ * @see ActionRequest
+ */
+public interface RenderRequest extends PortletRequest
+{
+
+    /**
+     * This property is set by the container if the portlet container
+     * has a cached response for the given validation tag. The property can be
+     * retrieved using the <code>getProperty</code> method. 
+     * <P>
+     * The value is <code>"portlet.ETag "</code>.
+     * 
+     * @since 2.0
+     */
+    public static final String ETAG = "portlet.ETag";
+
+    
+    /**
+     * 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.
+     * <p>
+     * This call returns the same value as 
+     * <code>RenderRequest.getProperty(RenderRequest.ETAG)</code>.
+     * 
+     * @return  the validation tag if the portlet container
+     *          has a cached response for this validation tag, or
+     *          <code>null</code> if no cached response exists.
+     *          
+     * @since 2.0
+     */
+    public String getETag();
+    
+
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/4fc38552/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
new file mode 100644
index 0000000..fb2eccf
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/RenderResponse.java
@@ -0,0 +1,96 @@
+/*  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;
+
+/**
+ * The <CODE>RenderResponse</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 render response functionality to portlets.<br>
+ * The portlet container creates a <CODE>RenderResponse</CODE> object and
+ * passes it as argument to the portlet's <CODE>render</CODE> method.
+ * 
+ * @see RenderRequest
+ * @see PortletResponse
+ * @see MimeResponse
+ */
+public interface RenderResponse 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);
+   
+    
+	/**
+     * This method allows the portlet to tell the portal the next possible
+     * portlet modes that the make sense from the portlet point of view.
+     * <p>
+     * If set, the portal should honor these enumeration of portlet modes and
+     * only provide the end user with choices to the provided portlet modes or a
+     * subset of these modes based on access control considerations.
+     * <p>
+     * If the portlet does not set any next possible portlet modes the default
+     * is that all portlet modes that the portlet has defined supporting in the
+     * portlet deployment descriptor are meaningful new portlet modes.
+     * 
+     * @param portletModes
+     *            <code>Enumeration</code> of <code>PortletMode</code> objects with the
+     *            next possible portlet modes that the make sense from the
+     *            portlet point of view, must not be <code>null</code> or an
+     *            empty enumeration.
+     * @since 2.0
+     */
+	public void setNextPossiblePortletModes(java.util.Collection<PortletMode> portletModes);
+
+    /**
+     * Sets the MIME type for the render 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/4fc38552/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
new file mode 100644
index 0000000..f2b121d
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/ResourceRequest.java
@@ -0,0 +1,159 @@
+/*  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;
+
+/**
+ * The <code>ResourceRequest</code> interface represents the request
+ * send to the portlet for rendering resources.
+ * 
+ * It extends the ClientDataRequest interface and provides resource request
+ * information to portlets.
+ * <p>
+ * The portlet container creates an <CODE>ResourceRequest</CODE> object and
+ * passes it as argument to the portlet's <CODE>serveResource</CODE> method.
+ * <p>
+ * The <code>ResourceRequest</code> is provided with the current portlet mode, window state, 
+ * and render parameters that the portlet can access via the 
+ * <code>PortletResourceRequest</code> with <code>getPortletMode</code> and, 
+ * <code>getWindowState</code>, or one of the <code>getParameter</code> methods.   
+ * ResourceURLs cannot change the current portlet mode, window state or 
+ * render parameters. Parameters set on a resource URL are not render parameters 
+ * but parameters for serving this resource and will last only for only 
+ * this the current serveResource request.<br>
+ * If a parameter is set that has the same name as a render parameter that this 
+ * resource URL contains, the render parameter must be the last entry in the 
+ * parameter value array. 
+ * 
+ * @see ClientDataRequest
+ * @see ResourceServingPortlet
+ * @since 2.0
+ */
+public interface ResourceRequest extends ClientDataRequest {
+
+    /**
+     * This property is set by the container if the container
+     * has a cached response for the given validation tag. The property can be
+     * retrieved using the <code>getProperty</code> method. 
+     * <P>
+     * The value is <code>"portlet.ETag "</code>.
+     */
+    public static final String ETAG = "portlet.ETag";
+
+    /**
+     * 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.
+     * <p>
+     * This call returns the same value as 
+     * <code>ResourceRequest.getProperty(ResourceRequest.ETAG)</code>.
+     * 
+     * @return  the validation tag if the portlet container
+     *          has a cached response for this validation tag, or
+     *          <code>null</code> if no cached response exists.
+     */
+    public String getETag();
+    
+    /**
+     * Returns the resource ID set on the ResourceURL or <code>null</code>
+     * if no resource ID was set on the URL.
+     * 
+     * @return  the resource ID set on the ResourceURL,or <code>null</code>
+     *          if no resource ID was set on the URL. 
+     */
+    public String getResourceID();
+    
+    /**
+     * Returns a <code>String</code> representing the current page state.
+     * 
+     * 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.
+     * 
+     * This call is only valid during Partial Action processing. If called at other times,
+     * the returned value is unspecified.
+     * 
+     * @return String to be passed to the Portlet Hub to conclude a Partial Action
+     *         processing sequence.
+     */
+    public String getPageState();
+ 
+    /**
+     * Returns a <code>Map</code> of the private render parameters of this request.
+     * Private parameters are not shared with other portlets or components.  
+     * The returned parameters are "x-www-form-urlencoded" decoded.
+     * <p>
+     * The parameters returned do not include the resource parameters that
+     * the portlet may have set on the resource URL triggering this
+     * <code>serveResource</code> call.
+     * <p>
+     * The values in the returned <code>Map</code> are from type
+     * String array (<code>String[]</code>).
+     * <p>
+     * If no private parameters exist this method returns an empty <code>Map</code>.
+     *
+     * @return     an immutable <code>Map</code> containing private parameter names as 
+     *             keys and private parameter values as map values, or an empty <code>Map</code>
+     *             if no private parameters exist. The keys in the parameter
+     *             map are of type String. The values in the parameter map are of type
+     *             String array (<code>String[]</code>).
+     */
+    public java.util.Map<String, String[]> getPrivateRenderParameterMap();
+    
+    /**
+     * Returns the portal preferred content type for the response.
+     * <p>
+     * The returned content type should be based on the HTTP Accept header 
+     * provided by the client.
+     * 
+     * @return preferred content type of the response
+     */
+
+    public String getResponseContentType();
+
+
+    /**
+     * Gets a list of content types which the portal accepts for the response.
+     * This list is ordered with the most preferable types listed first.
+     * <p>
+     * The returned content types should be based on the HTTP Accept header 
+     * provided by the client.
+     *
+     * @return ordered list of content types for the response
+     */
+
+    public java.util.Enumeration<String> getResponseContentTypes();
+
+	/**
+	 * Returns the cache level of this resource request.
+	 * <p>
+	 * Possible return values are: 
+	 * <code>ResourceURL.FULL, ResourceURL.PORTLET</code> 
+	 * or <code>ResourceURL.PAGE</code>.
+	 * 
+     * @return  the cache level of this resource request.
+     */
+	public String getCacheability();
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/4fc38552/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
new file mode 100644
index 0000000..809e0b1
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/ResourceResponse.java
@@ -0,0 +1,127 @@
+/*  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;
+
+/**
+ * The <CODE>ResourceResponse</CODE> defines an object to assist a portlet 
+ * for rendering a resource.
+ * <p>
+ * The difference between the <CODE>RenderResponse</CODE> is that for the 
+ * <CODE>ResourceResponse</CODE> the output of this response is delivered
+ * directly to the client without any additional markup added by the portal.
+ * It is therefore allowed for the portlet to return binary content in this
+ * response.
+ * <p>
+ * A portlet can set HTTP headers for the response via the setProperty or 
+ * addProperty call in the <CODE>ResourceResponse</CODE>. 
+ * To be successfully transmitted back to the client, headers must be set 
+ * before the response is committed. Headers set after the response is 
+ * committed will be ignored by the portlet container.
+ * <p>
+ * The portlet container creates a <CODE>ResourceResponse</CODE> object and 
+ * passes it as argument to the portlet's <CODE>serveResource</CODE> method.
+ * 
+ * @see ResourceServingPortlet
+ * @see MimeResponse
+ * @since 2.0
+ */
+public interface ResourceResponse extends MimeResponse {
+    
+	/**
+	 * Constant for setting the HTTP status code via the 
+	 * <code>setProperty</code> method.
+	 */
+	public static final String HTTP_STATUS_CODE = "portlet.http-status-code";
+
+    /**
+     * Sets the locale of the response, setting the headers 
+     * (including the Content-Type's charset) as appropriate. 
+     * This method should be called before a call to getWriter(). 
+     * By default, the response locale is the default locale provided
+     * by the portlet container.
+     * 
+     * @param loc  the new locale of the response
+     */
+    public void setLocale(java.util.Locale loc);
+    
+    
+    /**
+     * Sets the character encoding (MIME charset) of the response being 
+     * sent to the client, for example, to UTF-8. If the character encoding 
+     * has already been set by either the portlet container,
+     * <code>setContentType(java.lang.String)</code> or 
+     * <code>setLocale(java.util.Locale)</code>, this method overrides it. Calling 
+     * <code>setContentType(java.lang.String)</code> with the String  of 
+     * <code>text/html</code> and calling this method with the String of 
+     * <code>UTF-8</code> is equivalent with calling <code>setContentType</code> 
+     * with the String of <code>text/html; charset=UTF-8</code>.
+     * <p>
+     * This method can be called repeatedly to change the character encoding. 
+     * This method has no effect if it is called after getWriter has been called 
+     * or after the response has been committed.
+     * 
+     * @param charset a String specifying only the character set defined by 
+     *                IANA Character Sets (http://www.iana.org/assignments/character-sets)
+     */
+    public void setCharacterEncoding(java.lang.String charset);
+    
+    
+    /**
+     * Sets the length of the content body in the response.
+     * 
+     * @param len an integer specifying the length of the content being returned
+     */
+    public void setContentLength(int len);
+    
+    
+	/**
+     * @throws java.lang.IllegalStateException
+     *             if the cacheability level of the resource URL
+     *             triggering this <code>serveResource</code> call
+     *             is not <code>PAGE</code> and thus does not allow
+     *             for creating render URLs.
+     */
+	public PortletURL createRenderURL();
+
+	/**
+     * @throws java.lang.IllegalStateException
+     *             if the cacheability level of the resource URL
+     *             triggering this <code>serveResource</code> call
+     *             is not <code>PAGE</code> and thus does not allow
+     *             for creating action URLs.
+     */
+	public PortletURL createActionURL();
+
+	/**
+     * @throws java.lang.IllegalStateException
+     *             if the cacheability level of the resource URL
+     *             triggering this <code>serveResource</code> call,
+     *             or one of the parent calls, have defined a stricter
+     *             cachability level.
+     */
+	public ResourceURL createResourceURL();
+
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/4fc38552/portlet-api/src/main/java/javax/portlet/ResourceServingPortlet.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/ResourceServingPortlet.java b/portlet-api/src/main/java/javax/portlet/ResourceServingPortlet.java
new file mode 100644
index 0000000..a495cba
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/ResourceServingPortlet.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;
+
+/**
+ * The <code>ResourceServingPortlet</code> interface allows
+ * serving resources through the portlet.
+ * <p>
+ * The portlet container must call this method for links created by
+ * the <code>RenderResponse.createResourceURL()</code> call.
+ * If the portlet creates resource URLs with <code>RenderResponse.createResourceURL()</code> 
+ * it must implement this lifecycle method.
+ * 
+ * @since 2.0
+ */
+public interface ResourceServingPortlet {
+
+    /**
+     * Called by the portlet container to allow the portlet to generate
+     * the resource content based on its current state.
+     * The portal / portlet container must not render any output in addition 
+     * to the content returned by the portlet. The portal / portlet container 
+     * should expect that the portlet may return binary content for a 
+     * <code>renderResource</code> call.
+     *
+     * @param   request
+     *          the resource request
+     * @param   response
+     *          the resource response
+     *
+     * @exception   PortletException
+     *              if the portlet has problems fulfilling the
+     *              rendering request
+     * @exception  UnavailableException     
+     *                   if the portlet is unavailable to perform render at this time
+     * @exception  PortletSecurityException  
+     *                   if the portlet cannot fullfill this request because of security reasons
+     * @exception  java.io.IOException
+     *              if the streaming causes an I/O problem
+     */
+
+
+    public void serveResource(ResourceRequest request, ResourceResponse response)
+        throws PortletException, java.io.IOException;
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/4fc38552/portlet-api/src/main/java/javax/portlet/ResourceURL.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/ResourceURL.java b/portlet-api/src/main/java/javax/portlet/ResourceURL.java
new file mode 100644
index 0000000..f249a81
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/ResourceURL.java
@@ -0,0 +1,148 @@
+/*  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;
+
+/**
+ * The <CODE>ResourceURL</CODE> defines a resource URL that when clicked will
+ * result in a <code>serveResource</code> call of the
+ * <code>ResourceServingPortlet</code> interface.
+ * <p>
+ * Each resource URL has a specific cache level assigned with it. This level
+ * can be either <code>FULL, PORTLET</code> or <code>PAGE</code> and denotes
+ * the cacheability of the resource in the browser.
+ * <p>
+ * The default cache level of a resource URL is either the cache level of the
+ * parent resource URL, or <code>PAGE</code> if no parent resource URL is
+ * available.
+ *   
+ * @since 2.0
+ */
+public interface ResourceURL extends BaseURL {
+
+	/**
+     * The URL of type <code>FULL</code> does not need to contain the current
+     * state of the page or the current render parameters, portlet mode, or
+     * window state of the portlet. Thus the portlet may not be able to
+     * access the portlet mode, window state, or render parameters in the
+     * <code>serveResource</code> call. 
+     * <p>
+     * Only URLs of the type <code>FULL</code> are allowed in the response.
+     * The same restriction is true for all downstream URLs that result from
+     * this response call. Attempts to create URLs that are not of type
+     * <code>FULL</code> will result in an <code>IllegalStateException</code>.
+     * <p>
+     * URLs of the type <code>FULL</code> have the highest cacheability in the
+     * browser as they do not depend on any state of the portlet or page.
+     */
+	public static final String FULL = "cacheLevelFull";
+
+	/**
+     * The URL of type <code>PORTLRET</code> does not need to contain the
+     * current state of the page, but the current render parameters, portlet
+     * mode, or window state of the portlet must be accessible to the portlet.
+     * <p>
+     * Only URLs of the type <code>PORTLET</code> or <code>FULL</code> are
+     * allowed in the response. The same restriction
+     * is true for all downstream URLs that result from this response.
+     * Attempts to create URLs that are not of type
+     * <code>PORTLET</code> or <code>FULL</code> will result in an 
+     * <code>IllegalStateException</code>.
+     * <p>
+     * URLs of the type <code>PORTLET</code> are cacheable on the portlet
+     * level in the browser and can be served from the browser cache for as long
+     * as the state of this portlet does not change.
+     */
+	public static final String PORTLET = "cacheLevelPortlet";
+
+	/**
+     * The URL of type <code>PAGE</code> may contain artifacts that require
+     * knowledge of the state of the complete page, like
+     * <code>PortletURLs</code>.
+     * <p>
+     * URLs of the type <code>PAGE</code> are only cacheable on the page level
+     * and can only be served from the browser cache as long as no state on the
+     * page changes.
+     */
+	public static final String PAGE = "cacheLevelPage";
+
+	/**
+	 * Property that the portlet can set for resources with caching
+	 * type <code>FULL</code> via the <code>setProperty</code> method
+	 * on the <code>ResourceURL</code>.
+	 * <p>
+	 * When set, this property indicates to the portal application
+	 * that it can share this resource across different portlet applications.
+	 * <p>
+	 * The value of this property should be a QName in the 
+	 * format of <code>javax.xml.namespace.QName.toString()</code>.
+	 */
+	public static final String SHARED = "javax.portlet.shared";
+
+	
+	/**
+     * Allows setting a resource ID that can be retrieved when serving the
+     * resource through the {@link ResourceRequest#getResourceID} method.
+     * 
+     * @param resourceID
+     *            ID for this resource URL
+     */
+	public void setResourceID(String resourceID);
+
+	/**
+	 * Returns the cache level of this resource URL.
+	 * <p>
+	 * Possible return values are: <code>FULL, PORTLET</code> 
+	 * or <code>PAGE</code>.
+	 * 
+     * @return  the cache level of this resource URL.
+     */
+	public String getCacheability();
+
+	/**
+	 * Sets the cache level of this resource URL.
+	 * <p>
+	 * Possible values are: <code>FULL, PORTLET</code> 
+	 * or <code>PAGE</code>.
+	 * <p>
+	 * Note that if this URL is created inside a 
+	 * <code>serveResource</code> call it must have
+	 * at minimum the same cacheablity, or a more
+	 * restrictive one, as the parent resource URL,
+	 * otherwise an IllegalStateException is thrown.
+	 * <p>
+	 * The default cache level of a resource URL is either the cache level of the
+	 * parent resource URL, or <code>PAGE</code> if no parent resource URL is
+	 * available.
+	 * 
+     * @param cacheLevel  the cache level of this resource URL.
+     * @throws java.lang.IllegalStateException  
+     * 			if this resource URL has a weaker cache level
+     * 			than the parent resource URL.
+     * @throws java.lang.IllegalArgumentException
+     * 			if the cacheLevel is unknown to the portlet container
+     */
+	public void setCacheability(String cacheLevel);
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/4fc38552/portlet-api/src/main/java/javax/portlet/StateAwareResponse.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/StateAwareResponse.java b/portlet-api/src/main/java/javax/portlet/StateAwareResponse.java
new file mode 100644
index 0000000..3cb87f0
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/StateAwareResponse.java
@@ -0,0 +1,292 @@
+/*  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;
+
+/**
+ * The <CODE>StateAwareResponse</CODE> represents a response that can modify
+ * state information or send events.<BR>
+ * It extends the PortletResponse interface.
+ * 
+ * @since 2.0
+ * @see PortletResponse
+ */
+public interface StateAwareResponse extends PortletResponse {
+
+	/**
+     * Sets the window state of a portlet to the given window state.
+     * <p>
+     * Possible values are the standard window states and any custom window
+     * states supported by the portal and the portlet. Standard window states
+     * are:
+     * <ul>
+     * <li>MINIMIZED
+     * <li>NORMAL
+     * <li>MAXIMIZED
+     * </ul>
+     * 
+     * @param windowState
+     *            the new portlet window state
+     * 
+     * @exception WindowStateException
+     *                if the portlet cannot switch to the specified window
+     *                state. To avoid this exception the portlet can check the
+     *                allowed window states with
+     *                <code>Request.isWindowStateAllowed()</code>.
+     * @exception java.lang.IllegalStateException
+     *                if the method is invoked after <code>sendRedirect</code>
+     *                has been called.
+     * 
+     * @see WindowState
+     */
+
+	public void setWindowState(WindowState windowState)
+			throws WindowStateException;
+
+	/**
+     * Sets the portlet mode of a portlet to the given portlet mode.
+     * <p>
+     * Possible values are the standard portlet modes and any custom portlet
+     * modes supported by the portal and the portlet. Portlets must declare in
+     * the deployment descriptor the portlet modes they support for each markup
+     * type. Standard portlet modes are:
+     * <ul>
+     * <li>EDIT
+     * <li>HELP
+     * <li>VIEW
+     * </ul>
+     * <p>
+     * Note: The portlet may still be called in a different window state in the
+     * next render call, depending on the portlet container / portal.
+     * 
+     * @param portletMode
+     *            the new portlet mode
+     * 
+     * @exception PortletModeException
+     *                if the portlet cannot switch to this portlet mode, because
+     *                the portlet or portal does not support it for this markup,
+     *                or the current user is not allowed to switch to this
+     *                portlet mode. To avoid this exception the portlet can
+     *                check the allowed portlet modes with
+     *                <code>Request.isPortletModeAllowed()</code>.
+     * @exception java.lang.IllegalStateException
+     *                if the method is invoked after <code>sendRedirect</code>
+     *                has been called.
+     */
+
+	public void setPortletMode(PortletMode portletMode)
+			throws PortletModeException;
+
+	/**
+     * Sets a parameter map for the render request.
+     * <p>
+     * All previously set render parameters are cleared.
+     * <p>
+     * These parameters will be accessible in all sub-sequent render calls via
+     * the <code>PortletRequest.getParameter</code> call until a new request
+     * is targeted to the portlet.
+     * <p>
+     * The given parameters do not need to be encoded prior to calling this
+     * method.
+     * <p>
+     * The portlet should not modify the map any further after calling
+     * this method.
+     * 
+     * @param parameters
+     *            Map containing parameter names for the render phase as keys
+     *            and parameter values as map values. The keys in the parameter
+     *            map must be of type String. The values in the parameter map
+     *            must be of type String array (<code>String[]</code>).
+     * 
+     * @exception java.lang.IllegalArgumentException
+     *                if parameters is <code>null</code>, if any of the
+     *                keys in the Map are <code>null</code>, if any of
+     *                the keys is not a String, or if any of the values is not a
+     *                String array.
+     * @exception java.lang.IllegalStateException
+     *                if the method is invoked after <code>sendRedirect</code>
+     *                has been called.
+     */
+
+	public void setRenderParameters(java.util.Map<String, String[]> parameters);
+
+	/**
+     * Sets a String parameter for the render request.
+     * <p>
+     * These parameters will be accessible in all sub-sequent render calls via
+     * the <code>PortletRequest.getParameter</code> call until a request is
+     * targeted to the portlet.
+     * <p>
+     * This method replaces all parameters with the given key.
+     * <p>
+     * The given parameter do not need to be encoded prior to calling this
+     * method.
+     * 
+     * @param key
+     *            key of the render parameter
+     * @param value
+     *            value of the render parameter
+     * 
+     * @exception java.lang.IllegalArgumentException
+     *                if key is <code>null</code>.
+     * @exception java.lang.IllegalStateException
+     *                if the method is invoked after <code>sendRedirect</code>
+     *                has been called.
+     */
+
+	public void setRenderParameter(String key, String value);
+
+	/**
+     * Sets a String array parameter for the render request.
+     * <p>
+     * These parameters will be accessible in all sub-sequent render calls via
+     * the <code>PortletRequest.getParameter</code> call until a request is
+     * targeted to the portlet.
+     * <p>
+     * This method replaces all parameters with the given key.
+     * <p>
+     * The given parameter do not need to be encoded prior to calling this
+     * method.
+     * 
+     * @param key
+     *            key of the render parameter
+     * @param values
+     *            values of the render parameter
+     * 
+     * @exception java.lang.IllegalArgumentException
+     *                if key or value are <code>null</code>.
+     * @exception java.lang.IllegalStateException
+     *                if the method is invoked after <code>sendRedirect</code>
+     *                has been called.
+     */
+
+	public void setRenderParameter(String key, String[] values);
+
+	/**
+     * Publishes an Event with the given payload.
+     * <p>
+     * The object type of the value must be compliant with the specified event
+     * type in the portlet deployment descriptor.
+     * <p>
+     * The value must have a valid JAXB binding and be serializable.
+     * 
+     * @param name
+     *            the event name to publish, must not be <code>null</code>
+     * @param value
+     *            the value of this event, must have a valid JAXB binding and 
+     *            be serializable, or <code>null</code>.
+     * 
+     * @exception java.lang.IllegalArgumentException
+     *                if name is <code>null</code>, the value is not
+     *                serializable, the value does not have a valid JAXB binding, the
+     *                object type of the value is not the same as specified in
+     *                the portlet deployment descriptor for this event name.
+     * @since 2.0
+     */
+	public void setEvent(javax.xml.namespace.QName name, java.io.Serializable value);
+
+	/**
+     * Publishes an Event with the given payload in the default namespace.
+     * <p>
+     * The name is treated as local part of the event QName and the namespace
+     * is either taken from the <code>default-event-namespace</code> element
+     * in the portlet deployment descriptor, or if this element is not provided
+     * the XML default namespace XMLConstants.NULL_NS_URI is used.
+     * <p>
+     * The object type of the value must be compliant with the specified event
+     * type in the portlet deployment descriptor.
+     * <p>
+     * The value must have a valid JAXB binding and be serializable.
+     * 
+     * @param name
+     *            the local part of the event name to publish, must not be <code>null</code>
+     * @param value
+     *            the value of this event, must have a valid JAXB binding and 
+     *            be serializable, or <code>null</code>.
+     * 
+     * @exception java.lang.IllegalArgumentException
+     *                if name is <code>null</code>, the value is not
+     *                serializable, the value does not have a valid JAXB binding, the
+     *                object type of the value is not the same as specified in
+     *                the portlet deployment descriptor for this event name.
+     * @since 2.0
+     */
+	public void setEvent(String name, java.io.Serializable value);
+
+
+	/**
+     * Returns a <code>Map</code> of the render parameters currently set on
+     * this response.
+     * <p>
+     * The values in the returned <code>Map</code> are from type String array (<code>String[]</code>).
+     * <p>
+     * If no parameters exist this method returns an empty <code>Map</code>.
+     * 
+     * @since 2.0
+     * 
+     * @return <code>Map</code> containing render parameter names as keys and
+     *         parameter values as map values, or an empty <code>Map</code> if
+     *         no parameters exist. The keys in the parameter map are of type
+     *         String. The values in the parameter map are of type String array (<code>String[]</code>).
+     */
+
+	public java.util.Map<String, String[]> getRenderParameterMap();
+
+	/**
+     * Returns the currently set portlet mode on this reponse.
+     * 
+     * @since 2.0
+     * 
+     * @return the portlet mode, or <code>null</code> if none is set
+     */
+
+	public PortletMode getPortletMode();
+
+	/**
+     * Returns the currently set window state on this response.
+     * 
+     * @since 2.0
+     * 
+     * @return the window state, or <code>null</code> if none is set
+     */
+
+	public WindowState getWindowState();
+
+
+	/**
+	 * Removes the specified public render parameter.
+	 * The name must reference a public render parameter defined
+	 * in the portlet deployment descriptor under the
+	 * <code>public-render-parameter</code> element with the
+	 * <code>identifier</code> mapping to the parameter name.
+	 * 
+	 * @param name			a <code>String</code> specifying 
+	 *					the name of the public render parameter to be removed
+	 *
+	 * @exception  java.lang.IllegalArgumentException 
+	 *                            if name is <code>null</code>.
+	 * @since 2.0
+	 */
+	public void removePublicRenderParameter(String name);
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/4fc38552/portlet-api/src/main/java/javax/portlet/UnavailableException.java
----------------------------------------------------------------------
diff --git a/portlet-api/src/main/java/javax/portlet/UnavailableException.java b/portlet-api/src/main/java/javax/portlet/UnavailableException.java
new file mode 100644
index 0000000..7d8c80e
--- /dev/null
+++ b/portlet-api/src/main/java/javax/portlet/UnavailableException.java
@@ -0,0 +1,135 @@
+/*  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;
+
+/**
+ * The portlet should throw the <CODE>UnavailableException</CODE> when 
+ * the portlet is either temporarily or permanently unavailable to handle requests.
+ *
+ **/
+
+public class UnavailableException extends PortletException
+{
+
+    private boolean     permanent;         // needs admin action?
+    private int         seconds;           // unavailability estimate
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 
+     * Constructs a new exception with a descriptive
+     * message indicating that the portlet is permanently
+     * unavailable.
+     *
+     * @param text 	a <code>String</code> specifying the
+     *                  descriptive message
+     *
+     */
+
+    public UnavailableException(String text) {
+	super(text);
+
+	permanent = true;
+    }
+
+    /**
+     * Constructs a new exception with a descriptive message
+     * indicating that the portlet is temporarily unavailable
+     * and giving an estimate of how long it will be unavailable.
+     * 
+     * <p>In some cases, the portlet cannot make an estimate. For
+     * example, the portlet might know that a server it needs is
+     * not running, but it might not be able to report how long it will take
+     * to be restored to functionality. This can be indicated with
+     * a negative or zero value for the <code>seconds</code> argument.
+     *
+     * @param text	a <code>String</code> specifying the
+     *                  descriptive message. This message can be written
+     *                  to a log file or displayed for the user.
+     *
+     * @param seconds	an integer specifying the number of seconds
+     * 			for which the portlet expects to be unavailable; if
+     *			this is zero or negative, it indicates that the portlet
+     *			cannot make an estimate.
+     *
+     */
+    
+    public UnavailableException(String text, int seconds) {
+	super(text);
+
+	if (seconds <= 0)
+	    this.seconds = -1;
+	else
+	    this.seconds = seconds;
+
+	permanent = false;
+    }
+
+    /**
+     *
+     * Returns a <code>boolean</code> indicating
+     * whether the portlet is permanently unavailable.
+     * If so, something is wrong with the portlet, and the
+     * system administrator must take some corrective action.
+     *
+     * @return		<code>true</code> if the portlet is
+     *			permanently unavailable; <code>false</code>
+     *			if the portlet is temporarily
+     *			unavailable.
+     *
+     */
+     
+    public boolean isPermanent() {
+	return permanent;
+    }
+  
+
+    /**
+     * Returns the time in seconds for which the portlet can be expected to 
+     * be unavailable.  
+     * <p>
+     * If the portlet is called again while it is still unavailable, it
+     * indicates the same time estimate. No effort is
+     * made to correct for the time elapsed since the exception was
+     * first reported.
+     * <p>
+     * If this method returns zero or a negative number, the portlet
+     * is permanently unavailable or cannot provide an estimate of
+     * how long it will be unavailable. 
+     *
+     * @return		an integer specifying the number of seconds
+     *			the portlet will be temporarily unavailable,
+     *			or zero or a negative number if the portlet is permanently
+     *			unavailable or cannot make an estimate.
+     *
+     */
+     
+    public int getUnavailableSeconds() {
+	return permanent ? -1 : seconds;
+    }
+
+
+}


Mime
View raw message