You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2009/03/05 03:06:08 UTC

svn commit: r750289 - in /portals/jetspeed-2/portal/trunk: components/jetspeed-registry/src/main/java/JETSPEED-INF/ojb/ components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/ components/jetspeed-registry/src/test/java/org/apach...

Author: taylor
Date: Thu Mar  5 02:06:07 2009
New Revision: 750289

URL: http://svn.apache.org/viewvc?rev=750289&view=rev
Log:
https://issues.apache.org/jira/browse/JS2-927
security constraints and transport guarantee

Added:
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SecuredPortletImpl.java   (with props)
    portals/jetspeed-2/portal/trunk/etc/xsd/portlet-spec-1.0.xsd   (with props)
    portals/jetspeed-2/portal/trunk/etc/xsd/portlet-spec-2.0.xsd   (with props)
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/SecuredPortlet.java   (with props)
Modified:
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/JETSPEED-INF/ojb/registry_repository.xml
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletApplicationDefinitionImpl.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SecurityConstraintImpl.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/java/org/apache/jetspeed/components/portletregistry/TestPortletRegistryDAO.java
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/UserDataConstraint.java
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/ddl-schema/registry-schema.xml

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/JETSPEED-INF/ojb/registry_repository.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/JETSPEED-INF/ojb/registry_repository.xml?rev=750289&r1=750288&r2=750289&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/JETSPEED-INF/ojb/registry_repository.xml (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/JETSPEED-INF/ojb/registry_repository.xml Thu Mar  5 02:06:07 2009
@@ -339,6 +339,16 @@
       >
          <inverse-foreignkey field-ref="applicationId"/>
       </collection-descriptor>
+
+   <collection-descriptor
+         name="securityConstraints"
+         element-class-ref="org.apache.jetspeed.om.portlet.impl.SecurityConstraintImpl"
+          auto-delete="true"
+          auto-update = "true"
+          auto-retrieve = "true"
+      >
+         <inverse-foreignkey field-ref="applicationId"/>
+      </collection-descriptor>
       
    </class-descriptor>
 
@@ -2067,5 +2077,112 @@
       </collection-descriptor>
 
    </class-descriptor>
+
+  <!--
+   - P A  S E C U R I T Y  C O N S T R A I N T
+  -->
+     <class-descriptor
+      class="org.apache.jetspeed.om.portlet.impl.SecurityConstraintImpl"
+      table="PA_SECURITY_CONSTRAINT"
+   >
+
+        <field-descriptor
+         name="id"
+         column="ID"
+         jdbc-type="BIGINT"
+         primarykey="true"
+         autoincrement="true"
+         access="anonymous"
+      />
+
+      <field-descriptor
+         name="applicationId"
+         column="APPLICATION_ID"
+         jdbc-type="BIGINT"
+         access="anonymous"
+      />
+
+      <field-descriptor             
+         name="userDataConstraints::transportGuarantee"         
+         column="TRANSPORT"
+         jdbc-type="VARCHAR"
+      />
+    
+      <collection-descriptor
+         name="displayNames"
+         element-class-ref="org.apache.jetspeed.om.portlet.impl.DisplayNameImpl"
+          auto-delete="true"
+          auto-update = "true"
+          auto-retrieve = "true"
+      >
+         <inverse-foreignkey field-ref="ownerId"/>
+         <query-customizer class="org.apache.jetspeed.util.ojb.CollectionOwnerClassDiscriminatorQueryCustomizer">
+            <attribute
+              attribute-name="discriminatorField"
+              attribute-value="owner"
+            />
+         </query-customizer>
+      </collection-descriptor>
+
+     <collection-descriptor
+         name="portletNames"
+         element-class-ref="org.apache.jetspeed.om.portlet.impl.SecuredPortletImpl"
+         auto-delete="true"
+         auto-update = "true"
+         auto-retrieve = "true"
+
+      >
+         <inverse-foreignkey field-ref="ownerId"/>
+      </collection-descriptor>
+
+      <collection-descriptor
+         name="userDataConstraints::descriptions"
+         element-class-ref="org.apache.jetspeed.om.portlet.impl.DescriptionImpl"
+          auto-delete="true"
+          auto-update = "true"
+          auto-retrieve = "true"
+      >
+         <inverse-foreignkey field-ref="ownerId"/>
+         <query-customizer class="org.apache.jetspeed.util.ojb.CollectionOwnerClassDiscriminatorQueryCustomizer">
+            <attribute
+              attribute-name="discriminatorField"
+              attribute-value="owner"
+            />
+         </query-customizer>
+      </collection-descriptor>
+
+	</class-descriptor>
 	
+<!--
+   - S E C U R E D  P O R T L E T
+ -->
+   <class-descriptor
+      class="org.apache.jetspeed.om.portlet.impl.SecuredPortletImpl"
+      table="SECURED_PORTLET"
+   >
+
+      <field-descriptor
+         name="id"
+         column="ID"
+         jdbc-type="BIGINT"
+         primarykey="true"
+         autoincrement="true"
+         access="anonymous"
+      />
+
+      <field-descriptor
+         name="ownerId"
+         column="OWNER_ID"
+         jdbc-type="BIGINT"
+         access="anonymous"
+      />
+
+      <field-descriptor
+         name="name"
+         column="NAME"
+         jdbc-type="VARCHAR"
+      />
+
+    </class-descriptor>
+		
 </descriptor-repository>

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletApplicationDefinitionImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletApplicationDefinitionImpl.java?rev=750289&r1=750288&r2=750289&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletApplicationDefinitionImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletApplicationDefinitionImpl.java Thu Mar  5 02:06:07 2009
@@ -55,6 +55,7 @@
 import org.apache.ojb.broker.PersistenceBroker;
 import org.apache.ojb.broker.PersistenceBrokerAware;
 import org.apache.ojb.broker.PersistenceBrokerException;
+import org.apache.pluto.om.portlet.UserDataConstraint;
 
 /**
  *
@@ -705,15 +706,50 @@
         return securityConstraints;
     }
 
+    private final String[]TRANSPORTS = 
+    {
+            UserDataConstraint.NONE,
+            UserDataConstraint.INTEGRAL,
+            UserDataConstraint.CONFIDENTIAL
+    };
+    
     public SecurityConstraint addSecurityConstraint(String transportGuarantee)
     {
-        SecurityConstraintImpl sc = new SecurityConstraintImpl();
-        ((UserDataConstraintImpl)sc.getUserDataConstraint()).setTransportGuarantee(transportGuarantee);
-        getSecurityConstraints();
+        if (getSecurityConstraint(transportGuarantee) != null)
+        {
+            throw new IllegalArgumentException("Security Constraint with name: " + transportGuarantee + " already defined");
+        }
+        boolean isValid = false;
+        for (String t : TRANSPORTS)
+        {
+            if (transportGuarantee.equalsIgnoreCase(t))
+            {
+                isValid = true;
+                break;
+            }
+        }
+        if (!isValid)
+        {
+            throw new IllegalArgumentException("Security Constraint with name: " + transportGuarantee + " is not a valid transport name");            
+        }
+        SecurityConstraint sc = new SecurityConstraintImpl();
+        sc.getUserDataConstraint().setTransportGuarantee(transportGuarantee);
         getSecurityConstraints().add(sc);
         return sc;        
     }
 
+    public SecurityConstraint getSecurityConstraint(String transport)
+    {
+        for (SecurityConstraint sc : getSecurityConstraints())
+        {
+            if (sc.getUserDataConstraint().getTransportGuarantee().equals(transport))
+            {
+                return sc;
+            }
+        }
+        return null;
+    }
+    
     public Filter getFilter(String filterName)
     {
         for (Filter f : getFilters())

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SecuredPortletImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SecuredPortletImpl.java?rev=750289&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SecuredPortletImpl.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SecuredPortletImpl.java Thu Mar  5 02:06:07 2009
@@ -0,0 +1,34 @@
+package org.apache.jetspeed.om.portlet.impl;
+
+import org.apache.jetspeed.om.portlet.SecuredPortlet;
+
+
+
+public class SecuredPortletImpl implements SecuredPortlet
+{
+    private String name;
+
+    public SecuredPortletImpl()
+    {}
+    
+    public SecuredPortletImpl(String name)
+    {
+        this.name = name;
+    }
+    
+    public String getName()
+    {
+        return name;
+    }
+
+    public boolean equals(Object qname)
+    {
+        return (this.toString().equals(qname.toString()));
+    }
+    
+    public String toString()
+    {
+        return name;
+    }
+    
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SecuredPortletImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SecuredPortletImpl.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SecurityConstraintImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SecurityConstraintImpl.java?rev=750289&r1=750288&r2=750289&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SecurityConstraintImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SecurityConstraintImpl.java Thu Mar  5 02:06:07 2009
@@ -23,6 +23,8 @@
 import java.util.Locale;
 
 import org.apache.jetspeed.om.portlet.DisplayName;
+import org.apache.jetspeed.om.portlet.FilterLifecycle;
+import org.apache.jetspeed.om.portlet.SecuredPortlet;
 import org.apache.jetspeed.om.portlet.SecurityConstraint;
 import org.apache.jetspeed.om.portlet.UserDataConstraint;
 import org.apache.jetspeed.util.JetspeedLocale;
@@ -33,8 +35,8 @@
  */
 public class SecurityConstraintImpl implements SecurityConstraint, Serializable
 {
-    protected UserDataConstraint userDataConstraint;
-    protected List<String> portletNames;
+    protected UserDataConstraintImpl userDataConstraints;
+    protected List<SecuredPortlet> portletNames;
     protected List<DisplayName> displayNames;
     
     public DisplayName getDisplayName(Locale locale)
@@ -69,29 +71,39 @@
     {
         if (portletNames == null)
         {
-            portletNames = new ArrayList<String>();
+            portletNames = new ArrayList<SecuredPortlet>();
         }
-        return portletNames;
+        List<String> result = new ArrayList<String>();
+        for (SecuredPortlet sp : portletNames)
+        {
+            result.add(sp.toString());
+        }
+        return result;
     }
     
     public void addPortletName(String portletName)
     {
-        for (String name : getPortletNames())
+        if (portletNames == null)
         {
-            if (name.equals(portletName))
+            portletNames = new ArrayList<SecuredPortlet>();
+        }
+        for (SecuredPortlet sp : portletNames)
+        {
+            if (sp.equals(portletName))
             {
-                throw new IllegalArgumentException("Portlet name: "+name+" already defined");
+                throw new IllegalArgumentException("Support for security constraint portlet name with identifier: " + portletName + " already defined");
             }
         }
-        portletNames.add(portletName);        
+        portletNames.add(new SecuredPortletImpl(portletName));        
     }
 
     public UserDataConstraint getUserDataConstraint()
     {
-        if (userDataConstraint == null)
+        if (userDataConstraints == null)
         {
-            userDataConstraint = new UserDataConstraintImpl();
+            userDataConstraints = new UserDataConstraintImpl();
         }
-        return userDataConstraint;
+        return userDataConstraints;
     }
+    
 }

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/java/org/apache/jetspeed/components/portletregistry/TestPortletRegistryDAO.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/java/org/apache/jetspeed/components/portletregistry/TestPortletRegistryDAO.java?rev=750289&r1=750288&r2=750289&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/java/org/apache/jetspeed/components/portletregistry/TestPortletRegistryDAO.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/java/org/apache/jetspeed/components/portletregistry/TestPortletRegistryDAO.java Thu Mar  5 02:06:07 2009
@@ -44,6 +44,7 @@
 import org.apache.jetspeed.om.portlet.Preference;
 import org.apache.jetspeed.om.portlet.Preferences;
 import org.apache.jetspeed.om.portlet.PublicRenderParameter;
+import org.apache.jetspeed.om.portlet.SecurityConstraint;
 import org.apache.jetspeed.om.portlet.Supports;
 import org.apache.jetspeed.om.portlet.UserAttribute;
 import org.apache.jetspeed.om.portlet.UserAttributeRef;
@@ -51,6 +52,7 @@
 import org.apache.jetspeed.om.portlet.impl.PortletApplicationDefinitionImpl;
 import org.apache.jetspeed.om.portlet.impl.PortletDefinitionImpl;
 import org.apache.jetspeed.util.JetspeedLocale;
+import org.apache.pluto.om.portlet.UserDataConstraint;
 
 /**
  * <p>
@@ -431,6 +433,30 @@
         dn7.setDisplayName("Listen!");
         DisplayName dn8 = listener2.addDisplayName("fr");
         dn8.setDisplayName("ƒcoutez!");
+        
+        SecurityConstraint sc = app.addSecurityConstraint(UserDataConstraint.INTEGRAL);
+        DisplayName scdn1 = sc.addDisplayName("en");
+        scdn1.setDisplayName("Integral Security Transport");
+        DisplayName scdn2 = sc.addDisplayName("fr");
+        scdn2.setDisplayName("Transport IntŽgral de SŽcuritŽ");
+        sc.addPortletName("PortletOne");
+        sc.addPortletName("PortletTwo");
+        sc.addPortletName("PortletThree");
+        Description des1 = sc.getUserDataConstraint().addDescription("en");
+        des1.setDescription("This is the Integral Security Transport");
+        Description des2 = sc.getUserDataConstraint().addDescription("fr");
+        des2.setDescription("Ceci est le Transport IntŽgral de SŽcuritŽ");
+        SecurityConstraint sc2 = app.addSecurityConstraint(UserDataConstraint.CONFIDENTIAL);
+        scdn1 = sc2.addDisplayName("en");
+        scdn1.setDisplayName("Confidential Security Transport");
+        scdn2 = sc2.addDisplayName("fr");
+        scdn2.setDisplayName("Transport Confidentiel de SŽcuritŽ");
+        sc2.addPortletName("PortletA");
+        sc2.addPortletName("PortletB");
+        des1 = sc2.getUserDataConstraint().addDescription("en");
+        des1.setDescription("This is the Confidential Security Transport");
+        des2 = sc2.getUserDataConstraint().addDescription("fr");
+        des2.setDescription("Ceci est le Transport Confidentiel de SŽcuritŽ");
     }
 
     public static void verifyPortlet20Data(PortletApplication app, PortletDefinition portlet)
@@ -619,6 +645,41 @@
         dn6 = dnames.get(1);
         assertEquals(dn6.getLang(), "fr");
         assertEquals(dn6.getDisplayName(), "ƒcoutez!");
+        
+        List<SecurityConstraint> scs = app.getSecurityConstraints();
+        assertEquals(scs.size(), 2);
+        SecurityConstraint sc1 = scs.get(0);
+        assertEquals(sc1.getUserDataConstraint().getTransportGuarantee(), UserDataConstraint.INTEGRAL);
+        DisplayName scdn1 = sc1.getDisplayName(new Locale("en"));
+        assertEquals(scdn1.getLang(), "en");
+        assertEquals(scdn1.getDisplayName(), "Integral Security Transport");
+        DisplayName scdn2 = sc1.getDisplayName(new Locale("fr"));
+        assertEquals(scdn2.getDisplayName(), "Transport IntŽgral de SŽcuritŽ");
+        assertEquals(sc1.getPortletNames().get(0), "PortletOne");
+        assertEquals(sc1.getPortletNames().get(1), "PortletTwo");
+        assertEquals(sc1.getPortletNames().get(2), "PortletThree");
+        Description des1 = sc1.getUserDataConstraint().getDescription(new Locale("en"));
+        assertEquals(des1.getLang(), "en");
+        assertEquals(des1.getDescription(), "This is the Integral Security Transport");
+        Description des2 = sc1.getUserDataConstraint().getDescription(new Locale("fr"));
+        assertEquals(des2.getLang(), "fr");
+        assertEquals(des2.getDescription(), "Ceci est le Transport IntŽgral de SŽcuritŽ");
+
+        SecurityConstraint sc2 = scs.get(1);
+        assertEquals(sc2.getUserDataConstraint().getTransportGuarantee(), UserDataConstraint.CONFIDENTIAL);
+        scdn1 = sc2.getDisplayName(new Locale("en"));
+        assertEquals(scdn1.getLang(), "en");
+        assertEquals(scdn1.getDisplayName(), "Confidential Security Transport");
+        scdn2 = sc2.getDisplayName(new Locale("fr"));
+        assertEquals(scdn2.getDisplayName(), "Transport Confidentiel de SŽcuritŽ");
+        assertEquals(sc2.getPortletNames().get(0), "PortletA");
+        assertEquals(sc2.getPortletNames().get(1), "PortletB");
+        des1 = sc2.getUserDataConstraint().getDescription(new Locale("en"));
+        assertEquals(des1.getLang(), "en");
+        assertEquals(des1.getDescription(), "This is the Confidential Security Transport");
+        des2 = sc2.getUserDataConstraint().getDescription(new Locale("fr"));
+        assertEquals(des2.getLang(), "fr");
+        assertEquals(des2.getDescription(), "Ceci est le Transport Confidentiel de SŽcuritŽ");        
     }
 
 }

Added: portals/jetspeed-2/portal/trunk/etc/xsd/portlet-spec-1.0.xsd
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/etc/xsd/portlet-spec-1.0.xsd?rev=750289&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/etc/xsd/portlet-spec-1.0.xsd (added)
+++ portals/jetspeed-2/portal/trunk/etc/xsd/portlet-spec-1.0.xsd Thu Mar  5 02:06:07 2009
@@ -0,0 +1,648 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<schema targetNamespace="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:portlet="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0" xml:lang="en">
+	<annotation>
+		<documentation>
+		This is the XML Schema for the Portlet 1.0 deployment descriptor.
+		</documentation>
+	</annotation>
+	<annotation>
+		<documentation>
+		The following conventions apply to all J2EE
+		deployment descriptor elements unless indicated otherwise.
+		- In elements that specify a pathname to a file within the
+		  same JAR file, relative filenames (i.e., those not
+		  starting with "/") are considered relative to the root of
+		  the JAR file's namespace.  Absolute filenames (i.e., those
+		  starting with "/") also specify names in the root of the
+		  JAR file's namespace.  In general, relative names are
+		  preferred.  The exception is .war files where absolute
+		  names are preferred for consistency with the Servlet API.
+		</documentation>
+	</annotation>
+	<!-- *********************************************************** -->
+	<import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+	<element name="portlet-app" type="portlet:portlet-appType">
+		<annotation>
+			<documentation>
+			The portlet-app element is the root of the deployment descriptor
+			for a portlet application. This element has a required attribute version
+			to specify to which version of the schema the deployment descriptor
+			conforms.
+			</documentation>
+		</annotation>
+		<unique name="portlet-name-uniqueness">
+			<annotation>
+				<documentation>
+				The portlet element contains the name of a portlet.
+				This name must be unique within the portlet application.
+				 </documentation>
+			</annotation>
+			<selector xpath="portlet:portlet"/>
+			<field xpath="portlet:portlet-name"/>
+		</unique>
+		<unique name="custom-portlet-mode-uniqueness">
+			<annotation>
+				<documentation>
+				The custom-portlet-mode element contains the portlet-mode.
+				This portlet mode must be unique within the portlet application.
+				</documentation>
+			</annotation>
+			<selector xpath="portlet:custom-portlet-mode"/>
+			<field xpath="portlet:portlet-mode"/>
+		</unique>
+		<unique name="custom-window-state-uniqueness">
+			<annotation>
+				<documentation>
+				The custom-window-state element contains the window-state.
+				This window state must be unique within the portlet application.
+				</documentation>
+			</annotation>
+			<selector xpath="portlet:custom-window-state"/>
+			<field xpath="portlet:window-state"/>
+		</unique>
+		<unique name="user-attribute-name-uniqueness">
+			<annotation>
+				<documentation>
+				The user-attribute element contains the name the attribute.
+				This name must be unique within the portlet application.
+				</documentation>
+			</annotation>
+			<selector xpath="portlet:user-attribute"/>
+			<field xpath="portlet:name"/>
+		</unique>
+	</element>
+	<complexType name="portlet-appType">
+		<sequence>
+			<element name="portlet" type="portlet:portletType" minOccurs="0" maxOccurs="unbounded">
+				<unique name="init-param-name-uniqueness">
+					<annotation>
+						<documentation>
+						The init-param element contains the name the attribute.
+						This name must be unique within the portlet.
+						</documentation>
+					</annotation>
+					<selector xpath="portlet:init-param"/>
+					<field xpath="portlet:name"/>
+				</unique>
+				<unique name="supports-mime-type-uniqueness">
+					<annotation>
+						<documentation>
+						The supports element contains the supported mime-type.
+						This mime type must be unique within the portlet.
+						</documentation>
+					</annotation>
+					<selector xpath="portlet:supports"/>
+					<field xpath="mime-type"/>
+				</unique>
+				<unique name="preference-name-uniqueness">
+					<annotation>
+						<documentation>
+						The preference element contains the name the preference.
+						This name must be unique within the portlet.
+						</documentation>
+					</annotation>
+					<selector xpath="portlet:portlet-preferences/portlet:preference"/>
+					<field xpath="portlet:name"/>
+				</unique>
+				<unique name="security-role-ref-name-uniqueness">
+					<annotation>
+						<documentation>
+						The security-role-ref element contains the role-name.
+						This role name must be unique within the portlet.
+						</documentation>
+					</annotation>
+					<selector xpath="portlet:security-role-ref"/>
+					<field xpath="portlet:role-name"/>
+				</unique>
+			</element>
+			<element name="custom-portlet-mode" type="portlet:custom-portlet-modeType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="custom-window-state" type="portlet:custom-window-stateType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="user-attribute" type="portlet:user-attributeType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="security-constraint" type="portlet:security-constraintType" minOccurs="0" maxOccurs="unbounded"/>
+		</sequence>
+		<attribute name="version" type="string" use="required"/>
+		<attribute name="id" type="string" use="optional"/>
+	</complexType>
+	<complexType name="custom-portlet-modeType">
+		<annotation>
+			<documentation>
+			A custom portlet mode that one or more portlets in 
+			this portlet application supports.
+			Used in: portlet-app
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="portlet-mode" type="portlet:portlet-modeType"/>
+		</sequence>
+		<attribute name="id" type="string" use="optional"/>
+	</complexType>
+	<complexType name="custom-window-stateType">
+		<annotation>
+			<documentation>
+			A custom window state that one or more portlets in this 
+			portlet application supports.
+			Used in: portlet-app
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="window-state" type="portlet:window-stateType"/>
+		</sequence>
+		<attribute name="id" type="string" use="optional"/>
+	</complexType>
+	<complexType name="expiration-cacheType">
+		<annotation>
+			<documentation>
+			Expriation-cache defines expiration-based caching for this
+			portlet. The parameter indicates
+			the time in seconds after which the portlet output expires. 
+			-1 indicates that the output never expires.
+			Used in: portlet
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="int"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="init-paramType">
+		<annotation>
+			<documentation>
+			The init-param element contains a name/value pair as an 
+			initialization param of the portlet
+			Used in:portlet
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="name" type="portlet:nameType"/>
+			<element name="value" type="portlet:valueType"/>
+		</sequence>
+		<attribute name="id" type="string" use="optional"/>
+	</complexType>
+	<complexType name="keywordsType">
+		<annotation>
+			<documentation>
+			Locale specific keywords associated with this portlet.
+			The kewords are separated by commas.
+			Used in: portlet-info
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="mime-typeType">
+		<annotation>
+			<documentation>
+			MIME type name, e.g. "text/html".
+			The MIME type may also contain the wildcard
+			character '*', like "text/*" or "*/*".
+			Used in: supports
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="nameType">
+		<annotation>
+			<documentation>
+			The name element contains the name of a parameter. 
+			Used in: init-param, ...
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="portletType">
+		<annotation>
+			<documentation>
+			The portlet element contains the declarative data of a portlet. 
+			Used in: portlet-app
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="portlet-name" type="portlet:portlet-nameType"/>
+			<element name="display-name" type="portlet:display-nameType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="portlet-class" type="portlet:portlet-classType"/>
+			<element name="init-param" type="portlet:init-paramType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="expiration-cache" type="portlet:expiration-cacheType" minOccurs="0"/>
+			<element name="supports" type="portlet:supportsType" maxOccurs="unbounded"/>
+			<element name="supported-locale" type="portlet:supported-localeType" minOccurs="0" maxOccurs="unbounded"/>
+			<choice>
+				<sequence>
+					<element name="resource-bundle" type="portlet:resource-bundleType"/>
+					<element name="portlet-info" type="portlet:portlet-infoType" minOccurs="0"/>
+   			  	</sequence>
+   				<element name="portlet-info" type="portlet:portlet-infoType"/>
+			</choice>
+			<element name="portlet-preferences" type="portlet:portlet-preferencesType" minOccurs="0"/>
+			<element name="security-role-ref" type="portlet:security-role-refType" minOccurs="0" maxOccurs="unbounded"/>
+		</sequence>
+		<attribute name="id" type="string" use="optional"/>
+	</complexType>
+	<simpleType name="portlet-classType">
+		<annotation>
+			<documentation>
+			 The portlet-class element contains the fully
+			 qualified class name of the portlet.
+			Used in: portlet
+			</documentation>
+		</annotation>
+		<restriction base="portlet:fully-qualified-classType"/>
+	</simpleType>
+	<complexType name="portlet-collectionType">
+		<annotation>
+			<documentation>
+			The portlet-collectionType is used to identify a subset
+			of portlets within a portlet application to which a 
+			security constraint applies.
+			Used in: security-constraint
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="portlet-name" type="portlet:portlet-nameType" maxOccurs="unbounded"/>
+		</sequence>
+	</complexType>
+	<complexType name="portlet-infoType">
+		<sequence>
+			<element name="title" type="portlet:titleType"/>
+			<element name="short-title" type="portlet:short-titleType" minOccurs="0"/>
+			<element name="keywords" type="portlet:keywordsType" minOccurs="0"/>
+		</sequence>
+		<attribute name="id" type="string" use="optional"/>
+	</complexType>
+	<complexType name="portlet-modeType">
+		<annotation>
+			<documentation>
+			Portlet modes. The specification pre-defines the following values 
+			as valid portlet mode constants: 
+			"edit", "help", "view".
+			Portlet mode names are not case sensitive.
+			Used in: custom-portlet-mode, supports
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="portlet-nameType">
+		<annotation>
+			<documentation>
+			The portlet-name element contains the canonical name of the 
+			portlet. Each portlet name is unique within the portlet 
+			application.
+			Used in: portlet, portlet-mapping
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="portlet-preferencesType">
+		<annotation>
+			<documentation>
+			Portlet persistent preference store.
+			Used in: portlet
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="preference" type="portlet:preferenceType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="preferences-validator" type="portlet:preferences-validatorType" minOccurs="0"/>
+		</sequence>
+		<attribute name="id" type="string" use="optional"/>
+	</complexType>
+	<complexType name="preferenceType">
+		<annotation>
+			<documentation>
+			Persistent preference values that may be used for customization 
+			and personalization by the portlet.
+			Used in: portlet-preferences
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="name" type="portlet:nameType"/>
+			<element name="value" type="portlet:valueType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="read-only" type="portlet:read-onlyType" minOccurs="0"/>
+		</sequence>
+		<attribute name="id" type="string" use="optional"/>
+	</complexType>
+	<simpleType name="preferences-validatorType">
+		<annotation>
+			<documentation>
+			The class specified under preferences-validator implements
+			the PreferencesValidator interface to validate the 
+			preferences settings.
+			Used in: portlet-preferences
+			</documentation>
+		</annotation>
+		<restriction base="portlet:fully-qualified-classType"/>
+	</simpleType>
+	<simpleType name="read-onlyType">
+		<annotation>
+			<documentation>
+			read-only indicates that a setting cannot
+			be changed in any of the standard portlet modes 
+			("view","edit" or "help").
+			Per default all preferences are modifiable.
+			Valid values are: 
+			- true for read-only
+			- false for modifiable
+			Used in: preferences
+			</documentation>
+		</annotation>
+		<restriction base="portlet:string">
+			<enumeration value="true"/>
+			<enumeration value="false"/>
+		</restriction>
+	</simpleType>
+	<complexType name="resource-bundleType">
+		<annotation>
+			<documentation>
+			Filename of the resource bundle containing the language specific 
+			portlet informations in different languages.
+			Used in: portlet-info
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="role-linkType">
+		<annotation>
+			<documentation>
+			The role-link element is a reference to a defined security role. 
+			The role-link element must contain the name of one of the 
+			security roles defined in the security-role elements.
+			Used in: security-role-ref
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="security-constraintType">
+		<annotation>
+			<documentation>
+			The security-constraintType is used to associate
+			intended security constraints with one or more portlets.
+			Used in: portlet-app
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="display-name" type="portlet:display-nameType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="portlet-collection" type="portlet:portlet-collectionType"/>
+			<element name="user-data-constraint" type="portlet:user-data-constraintType"/>
+		</sequence>
+		<attribute name="id" type="string" use="optional"/>
+	</complexType>
+	<complexType name="security-role-refType">
+		<annotation>
+			<documentation>
+			The security-role-ref element contains the declaration of a 
+			security role reference in the code of the web application. The 
+			declaration consists of an optional description, the security 
+			role name used in the code, and an optional link to a security 
+			role. If the security role is not specified, the Deployer must 
+			choose an appropriate security role.
+			The value of the role name element must be the String used 
+			as the parameter to the 
+			EJBContext.isCallerInRole(String roleName) method
+			or the HttpServletRequest.isUserInRole(String role) method.
+			Used in: portlet
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="role-name" type="portlet:role-nameType"/>
+			<element name="role-link" type="portlet:role-linkType" minOccurs="0"/>
+		</sequence>
+		<attribute name="id" type="string" use="optional"/>
+	</complexType>
+	<complexType name="short-titleType">
+		<annotation>
+			<documentation>
+			Locale specific short version of the static title.
+			Used in: portlet-info
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="supportsType">
+		<annotation>
+			<documentation>
+			Supports indicates the portlet modes a 
+			portlet supports for a specific content type. All portlets must 
+			support the view mode. 
+			Used in: portlet
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="mime-type" type="portlet:mime-typeType"/>
+			<element name="portlet-mode" type="portlet:portlet-modeType" minOccurs="0" maxOccurs="unbounded"/>
+		</sequence>
+		<attribute name="id" type="string" use="optional"/>
+	</complexType>
+	<complexType name="supported-localeType">
+		<annotation>
+			<documentation>
+			Indicated the locales the portlet supports.
+			Used in: portlet
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="titleType">
+		<annotation>
+			<documentation>
+			Locale specific static title for this portlet.
+			Used in: portlet-info
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="string"/>
+		</simpleContent>
+	</complexType>
+	<simpleType name="transport-guaranteeType">
+		<annotation>
+			<documentation>
+			The transport-guaranteeType specifies that 
+			the communication between client and portlet should 
+			be NONE, INTEGRAL, or CONFIDENTIAL. 
+			NONE means that the portlet does not
+			require any transport guarantees. A value of 
+			INTEGRAL means that the portlet requires that the 
+			data sent between the client and portlet be sent in 
+			such a way that it can't be changed in transit. 
+			CONFIDENTIAL means that the portlet requires 
+			that the data be transmitted in a fashion that
+			prevents other entities from observing the contents 
+			of the transmission. 
+			In most cases, the presence of the INTEGRAL or
+			CONFIDENTIAL flag will indicate that the use 
+			of SSL is required.
+ 			Used in: user-data-constraint
+			</documentation>
+		</annotation>
+		<restriction base="portlet:string">
+			<enumeration value="NONE"/>
+			<enumeration value="INTEGRAL"/>
+			<enumeration value="CONFIDENTIAL"/>
+		</restriction>
+	</simpleType>
+	<complexType name="user-attributeType">
+		<annotation>
+			<documentation>
+			User attribute defines a user specific attribute that the
+			portlet application needs. The portlet within this application 
+			can access this attribute via the request parameter USER_INFO
+			map.
+			Used in: portlet-app
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="name" type="portlet:nameType"/>
+		</sequence>
+		<attribute name="id" type="string" use="optional"/>
+	</complexType>
+	<complexType name="user-data-constraintType">
+		<annotation>
+			<documentation>
+			The user-data-constraintType is used to indicate how
+			data communicated between the client and portlet should be
+			protected.
+			Used in: security-constraint
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="transport-guarantee" type="portlet:transport-guaranteeType"/>
+		</sequence>
+		<attribute name="id" type="string" use="optional"/>
+	</complexType>
+	<complexType name="valueType">
+		<annotation>
+			<documentation>
+			The value element contains the value of a parameter.
+			Used in: init-param
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="window-stateType">
+		<annotation>
+			<documentation>
+			Portlet window state. Window state names are not case sensitive.
+			Used in: custom-window-state
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="string"/>
+		</simpleContent>
+	</complexType>
+	<!--- everything below is copied from j2ee_1_4.xsd -->
+	<complexType name="descriptionType">
+		<annotation>
+			<documentation>
+			The description element is used to provide text describing the 
+			parent element. The description element should include any 
+			information that the portlet application war file producer wants
+			to provide to the consumer of the portlet application war file 
+			(i.e., to the Deployer). Typically, the tools used by the 
+			portlet application war file consumer will display the 
+			description when processing the parent element that contains the 
+			description. It has an optional attribute xml:lang to indicate 
+			which language is used in the description according to 
+			RFC 1766 (http://www.ietf.org/rfc/rfc1766.txt). The default
+			value of this attribute is English(“en”).
+			Used in: init-param, portlet, portlet-app, security-role
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="string">
+				<attribute ref="xml:lang"/>
+			</extension>
+		</simpleContent>
+	</complexType>
+	<complexType name="display-nameType">
+		<annotation>
+			<documentation>
+			The display-name type contains a short name that is intended
+			to be displayed by tools. It is used by display-name
+			elements.  The display name need not be unique.
+			Example:
+				...
+  			<display-name xml:lang="en">Employee Self Service</display-name>
+
+			It has an optional attribute xml:lang to indicate 
+			which language is used in the description according to 
+			RFC 1766 (http://www.ietf.org/rfc/rfc1766.txt). The default
+			value of this attribute is English(“en”).
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="portlet:string">
+				<attribute ref="xml:lang"/>
+			</extension>
+		</simpleContent>
+	</complexType>
+	<simpleType name="fully-qualified-classType">
+		<annotation>
+			<documentation>
+			The elements that use this type designate the name of a
+			Java class or interface.
+			</documentation>
+		</annotation>
+		<restriction base="portlet:string"/>
+	</simpleType>
+	<simpleType name="role-nameType">
+		<annotation>
+			<documentation>
+			The role-nameType designates the name of a security role.
+
+			The name must conform to the lexical rules for an NMTOKEN.
+			</documentation>
+		</annotation>
+		<restriction base="NMTOKEN"/>
+	</simpleType>
+	<simpleType name="string">
+		<annotation>
+			<documentation>
+			This is a special string datatype that is defined by J2EE 
+			as a base type for defining collapsed strings. When 
+			schemas require trailing/leading space elimination as 
+			well as collapsing the existing whitespace, this base 
+			type may be used.
+			</documentation>
+		</annotation>
+		<restriction base="string">
+			<whiteSpace value="collapse"/>
+		</restriction>
+	</simpleType>
+</schema>

Propchange: portals/jetspeed-2/portal/trunk/etc/xsd/portlet-spec-1.0.xsd
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/etc/xsd/portlet-spec-1.0.xsd
------------------------------------------------------------------------------
    svn:keywords = Id

Added: portals/jetspeed-2/portal/trunk/etc/xsd/portlet-spec-2.0.xsd
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/etc/xsd/portlet-spec-2.0.xsd?rev=750289&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/etc/xsd/portlet-spec-2.0.xsd (added)
+++ portals/jetspeed-2/portal/trunk/etc/xsd/portlet-spec-2.0.xsd Thu Mar  5 02:06:07 2009
@@ -0,0 +1,846 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:portlet="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.0" xml:lang="en">
+	<annotation>
+		<documentation>
+		This is the XML Schema for the Portlet 2.0 deployment descriptor.
+		</documentation>
+	</annotation>
+	<annotation>
+		<documentation>
+		The following conventions apply to all J2EE
+		deployment descriptor elements unless indicated otherwise.
+		- In elements that specify a pathname to a file within the
+		  same JAR file, relative filenames (i.e., those not
+		  starting with "/") are considered relative to the root of
+		  the JAR file's namespace.  Absolute filenames (i.e., those
+		  starting with "/") also specify names in the root of the
+		  JAR file's namespace.  In general, relative names are
+		  preferred.  The exception is .war files where absolute
+		  names are preferred for consistency with the Servlet API.
+		</documentation>
+	</annotation>
+	<!-- *********************************************************** -->
+	<import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+	<element name="portlet-app" type="portlet:portlet-appType">
+		<annotation>
+			<documentation>
+			The portlet-app element is the root of the deployment descriptor
+			for a portlet application. This element has a required attribute version
+			to specify to which version of the schema the deployment descriptor
+			conforms. In order to be a valid JSR 286 portlet application the version
+			must have the value "2.0".
+			</documentation>
+		</annotation>
+		<unique name="portlet-name-uniqueness">
+			<annotation>
+				<documentation>
+				The portlet element contains the name of a portlet.
+				This name must be unique within the portlet application.
+				 </documentation>
+			</annotation>
+			<selector xpath="portlet:portlet"/>
+			<field xpath="portlet:portlet-name"/>
+		</unique>
+		<unique name="custom-portlet-mode-uniqueness">
+			<annotation>
+				<documentation>
+				The custom-portlet-mode element contains the portlet-mode.
+				This portlet mode must be unique within the portlet application.
+				</documentation>
+			</annotation>
+			<selector xpath="portlet:custom-portlet-mode"/>
+			<field xpath="portlet:portlet-mode"/>
+		</unique>
+		<unique name="custom-window-state-uniqueness">
+			<annotation>
+				<documentation>
+				The custom-window-state element contains the window-state.
+				This window state must be unique within the portlet application.
+				</documentation>
+			</annotation>
+			<selector xpath="portlet:custom-window-state"/>
+			<field xpath="portlet:window-state"/>
+		</unique>
+		<unique name="user-attribute-name-uniqueness">
+			<annotation>
+				<documentation>
+				The user-attribute element contains the name the attribute.
+				This name must be unique within the portlet application.
+				</documentation>
+			</annotation>
+			<selector xpath="portlet:user-attribute"/>
+			<field xpath="portlet:name"/>
+		</unique>
+		<unique name="filter-name-uniqueness">
+			<annotation>
+				<documentation>
+				The filter element contains the name of a filter.
+				The name must be unique within the portlet application.
+				</documentation>
+			</annotation>
+			<selector xpath="portlet:filter"/>
+			<field xpath="portlet:filter-name"/>
+		</unique>
+	</element>
+	<complexType name="portlet-appType">
+		<sequence>
+			<element name="portlet" type="portlet:portletType" minOccurs="0" maxOccurs="unbounded">
+				<unique name="init-param-name-uniqueness">
+					<annotation>
+						<documentation>
+						The init-param element contains the name the attribute.
+						This name must be unique within the portlet.
+						</documentation>
+					</annotation>
+					<selector xpath="portlet:init-param"/>
+					<field xpath="portlet:name"/>
+				</unique>
+				<unique name="supports-mime-type-uniqueness">
+					<annotation>
+						<documentation>
+						The supports element contains the supported mime-type.
+						This mime type must be unique within the portlet.
+						</documentation>
+					</annotation>
+					<selector xpath="portlet:supports"/>
+					<field xpath="mime-type"/>
+				</unique>
+				<unique name="preference-name-uniqueness">
+					<annotation>
+						<documentation>
+						The preference element contains the name the preference.
+						This name must be unique within the portlet.
+						</documentation>
+					</annotation>
+					<selector xpath="portlet:portlet-preferences/portlet:preference"/>
+					<field xpath="portlet:name"/>
+				</unique>
+				<unique name="security-role-ref-name-uniqueness">
+					<annotation>
+						<documentation>
+						The security-role-ref element contains the role-name.
+						This role name must be unique within the portlet.
+						</documentation>
+					</annotation>
+					<selector xpath="portlet:security-role-ref"/>
+					<field xpath="portlet:role-name"/>
+				</unique>
+			</element>
+			<element name="custom-portlet-mode" type="portlet:custom-portlet-modeType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="custom-window-state" type="portlet:custom-window-stateType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="user-attribute" type="portlet:user-attributeType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="security-constraint" type="portlet:security-constraintType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="resource-bundle" type="portlet:resource-bundleType" minOccurs="0"/>
+			<element name="filter" type="portlet:filterType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="filter-mapping" type="portlet:filter-mappingType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="default-namespace" type="xs:anyURI" minOccurs="0"/>
+			<element name="event-definition" type="portlet:event-definitionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="public-render-parameter" type="portlet:public-render-parameterType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="listener" type="portlet:listenerType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="container-runtime-option" type="portlet:container-runtime-optionType" minOccurs="0" maxOccurs="unbounded"/>
+		</sequence>
+		<attribute name="version" type="portlet:string" use="required"/>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<complexType name="cache-scopeType">
+		<annotation>
+			<documentation>
+			Caching scope, allowed values are "private" indicating that the content should not be shared
+			across users and "public" indicating that the content may be shared across users.
+			The default value if not present is "private".
+			Used in: portlet
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="portlet:string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="custom-portlet-modeType">
+		<annotation>
+			<documentation>
+			A custom portlet mode that one or more portlets in 
+			this portlet application supports.
+			If the portal does not need to provide some management functionality
+			for this portlet mode, the portal-managed element needs to be set
+			to "false", otherwise to "true". Default is "true".
+			Used in: portlet-app
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="portlet-mode" type="portlet:portlet-modeType"/>
+			<element name="portal-managed" type="portlet:portal-managedType" minOccurs="0"/>
+		</sequence>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<complexType name="custom-window-stateType">
+		<annotation>
+			<documentation>
+			A custom window state that one or more portlets in this 
+			portlet application supports.
+			Used in: portlet-app
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="window-state" type="portlet:window-stateType"/>
+		</sequence>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<complexType name="expiration-cacheType">
+		<annotation>
+			<documentation>
+			Expiration-time defines the time in seconds after which the portlet output expires. 
+			-1 indicates that the output never expires.
+			Used in: portlet
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="int"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="init-paramType">
+		<annotation>
+			<documentation>
+			The init-param element contains a name/value pair as an 
+			initialization param of the portlet
+			Used in:portlet
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="name" type="portlet:nameType"/>
+			<element name="value" type="portlet:valueType"/>
+		</sequence>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<complexType name="keywordsType">
+		<annotation>
+			<documentation>
+			Locale specific keywords associated with this portlet.
+			The kewords are separated by commas.
+			Used in: portlet-info
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="portlet:string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="mime-typeType">
+		<annotation>
+			<documentation>
+			MIME type name, e.g. "text/html".
+			The MIME type may also contain the wildcard
+			character '*', like "text/*" or "*/*".
+			Used in: supports
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="portlet:string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="nameType">
+		<annotation>
+			<documentation>
+			The name element contains the name of a parameter. 
+			Used in: init-param, ...
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="portlet:string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="portletType">
+		<annotation>
+			<documentation>
+			The portlet element contains the declarative data of a portlet. 
+			Used in: portlet-app
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="portlet-name" type="portlet:portlet-nameType"/>
+			<element name="display-name" type="portlet:display-nameType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="portlet-class" type="portlet:portlet-classType"/>
+			<element name="init-param" type="portlet:init-paramType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="expiration-cache" type="portlet:expiration-cacheType" minOccurs="0"/>
+			<element name="cache-scope" type="portlet:cache-scopeType" minOccurs="0"/>
+			<element name="supports" type="portlet:supportsType" maxOccurs="unbounded"/>
+			<element name="supported-locale" type="portlet:supported-localeType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="resource-bundle" type="portlet:resource-bundleType" minOccurs="0"/>
+			<element name="portlet-info" type="portlet:portlet-infoType" minOccurs="0"/>
+			<element name="portlet-preferences" type="portlet:portlet-preferencesType" minOccurs="0"/>
+			<element name="security-role-ref" type="portlet:security-role-refType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="supported-processing-event" type="portlet:event-definition-referenceType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="supported-publishing-event" type="portlet:event-definition-referenceType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="supported-public-render-parameter" type="portlet:string" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="container-runtime-option" type="portlet:container-runtime-optionType" minOccurs="0" maxOccurs="unbounded"/>
+		</sequence>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<simpleType name="portlet-classType">
+		<annotation>
+			<documentation>
+			 The portlet-class element contains the fully
+			 qualified class name of the portlet.
+			Used in: portlet
+			</documentation>
+		</annotation>
+		<restriction base="portlet:fully-qualified-classType"/>
+	</simpleType>
+	<complexType name="container-runtime-optionType">
+		<annotation>
+			<documentation>
+			 The container-runtime-option element contains settings
+			 for the portlet container that the portlet expects to be honored
+			 at runtime. These settings may re-define default portlet container
+			 behavior, like the javax.portlet.escapeXml setting that disables
+			 XML encoding of URLs produced by the portlet tag library as
+			 default.
+			 Names with the javax.portlet prefix are reserved for the Java
+			 Portlet Specification.
+			Used in: portlet-app, portlet
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="name" type="portlet:nameType"/>
+			<element name="value" type="portlet:valueType" minOccurs="0" maxOccurs="unbounded"/>
+		</sequence>
+	</complexType>
+	<complexType name="filter-mappingType">
+		<annotation>
+			<documentation>
+			Declaration of the filter mappings in this portlet
+			application is done by using filter-mappingType.
+			The container uses the filter-mapping
+			declarations to decide which filters to apply to a request,
+			and in what order. To determine which filters to
+			apply it matches filter-mapping declarations on the
+			portlet-name and the lifecyle phase defined in the
+			filter element. The order in which filters are invoked 
+			is the order in which filter-mapping declarations 
+			that match appear in the list of filter-mapping elements.
+			Used in: portlet-app
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="filter-name" type="portlet:filter-nameType"/>
+			<element name="portlet-name" type="portlet:portlet-nameType" maxOccurs="unbounded"/>
+		</sequence>
+	</complexType>
+	<complexType name="filterType">
+		<annotation>
+			<documentation>
+				The filter element specifies a filter that can transform the 
+				content of portlet requests and portlet responses. 
+				Filters can access the initialization parameters declared in 
+				the deployment descriptor at runtime via the FilterConfig 
+				interface.
+				A filter can be restricted to one or more lifecycle phases
+				of the portlet. Valid entries for lifecycle are:
+				ACTION_PHASE, EVENT_PHASE, RENDER_PHASE,
+				RESOURCE_PHASE
+				Used in: portlet-app
+				</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="display-name" type="portlet:display-nameType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="filter-name" type="portlet:filter-nameType"/>
+			<element name="filter-class" type="portlet:fully-qualified-classType"/>
+			<element name="lifecycle" type="portlet:string" maxOccurs="unbounded"/>
+			<element name="init-param" type="portlet:init-paramType" minOccurs="0" maxOccurs="unbounded"/>
+		</sequence>
+	</complexType>
+	<complexType name="portlet-collectionType">
+		<annotation>
+			<documentation>
+			The portlet-collectionType is used to identify a subset
+			of portlets within a portlet application to which a 
+			security constraint applies.
+			Used in: security-constraint
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="portlet-name" type="portlet:portlet-nameType" maxOccurs="unbounded"/>
+		</sequence>
+	</complexType>
+	<complexType name="event-definitionType">
+		<annotation>
+			<documentation>
+			The event-definitionType is used to declare events the portlet can either
+			receive or emit.
+			The name must be unique and must be the one the 
+			portlet is using in its code for referencing this event.
+			Used in: portlet-app
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<choice>
+				<element name="qname" type="xs:QName"/>
+				<element name="name" type="xs:NCName"/>
+			</choice>
+			<element name="alias" type="xs:QName" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="value-type" type="portlet:fully-qualified-classType" minOccurs="0"/>
+		</sequence>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<complexType name="event-definition-referenceType">
+		<annotation>
+			<documentation>
+			The event-definition-referenceType is used to reference events 
+			declared with the event-definition element at application level.
+			Used in: portlet
+			</documentation>
+		</annotation>
+		<choice>
+			<element name="qname" type="xs:QName"/>
+			<element name="name" type="xs:NCName"/>
+		</choice>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<complexType name="listenerType">
+		<annotation>
+			<documentation>
+			The listenerType is used to declare listeners for this portlet application.
+			Used in: portlet-app
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="display-name" type="portlet:display-nameType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="listener-class" type="portlet:fully-qualified-classType"/>
+		</sequence>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<complexType name="portlet-infoType">
+		<sequence>
+			<element name="title" type="portlet:titleType" minOccurs="0"/>
+			<element name="short-title" type="portlet:short-titleType" minOccurs="0"/>
+			<element name="keywords" type="portlet:keywordsType" minOccurs="0"/>
+		</sequence>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<simpleType name="portal-managedType">
+		<annotation>
+			<documentation>
+			portal-managed indicates if a custom portlet mode
+			needs to be managed by the portal or not.
+			Per default all custom portlet modes are portal managed.
+			Valid values are: 
+			- true for portal-managed
+			- false for not portal managed
+			Used in: custom-portlet-modes
+			</documentation>
+		</annotation>
+		<restriction base="portlet:string">
+			<enumeration value="true"/>
+			<enumeration value="false"/>
+		</restriction>
+	</simpleType>
+	<complexType name="portlet-modeType">
+		<annotation>
+			<documentation>
+			Portlet modes. The specification pre-defines the following values 
+			as valid portlet mode constants: 
+			"edit", "help", "view".
+			Portlet mode names are not case sensitive.
+			Used in: custom-portlet-mode, supports
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="portlet:string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="portlet-nameType">
+		<annotation>
+			<documentation>
+			The portlet-name element contains the canonical name of the 
+			portlet. Each portlet name is unique within the portlet 
+			application.
+			Used in: portlet, filter-mapping
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="portlet:string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="portlet-preferencesType">
+		<annotation>
+			<documentation>
+			Portlet persistent preference store.
+			Used in: portlet
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="preference" type="portlet:preferenceType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="preferences-validator" type="portlet:preferences-validatorType" minOccurs="0"/>
+		</sequence>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<complexType name="preferenceType">
+		<annotation>
+			<documentation>
+			Persistent preference values that may be used for customization 
+			and personalization by the portlet.
+			Used in: portlet-preferences
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="name" type="portlet:nameType"/>
+			<element name="value" type="portlet:valueType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="read-only" type="portlet:read-onlyType" minOccurs="0"/>
+		</sequence>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<simpleType name="preferences-validatorType">
+		<annotation>
+			<documentation>
+			The class specified under preferences-validator implements
+			the PreferencesValidator interface to validate the 
+			preferences settings.
+			Used in: portlet-preferences
+			</documentation>
+		</annotation>
+		<restriction base="portlet:fully-qualified-classType"/>
+	</simpleType>
+	<simpleType name="read-onlyType">
+		<annotation>
+			<documentation>
+			read-only indicates that a setting cannot
+			be changed in any of the standard portlet modes 
+			("view","edit" or "help").
+			Per default all preferences are modifiable.
+			Valid values are: 
+			- true for read-only
+			- false for modifiable
+			Used in: preferences
+			</documentation>
+		</annotation>
+		<restriction base="portlet:string">
+			<enumeration value="true"/>
+			<enumeration value="false"/>
+		</restriction>
+	</simpleType>
+	<complexType name="resource-bundleType">
+		<annotation>
+			<documentation>
+			Name of the resource bundle containing the language specific 
+			portlet informations in different languages (Filename without
+			the language specific part (e.g. _en) and the ending (.properties).
+			Used in: portlet-info
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="portlet:string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="role-linkType">
+		<annotation>
+			<documentation>
+			The role-link element is a reference to a defined security role. 
+			The role-link element must contain the name of one of the 
+			security roles defined in the security-role elements.
+			Used in: security-role-ref
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="portlet:string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="security-constraintType">
+		<annotation>
+			<documentation>
+			The security-constraintType is used to associate
+			intended security constraints with one or more portlets.
+			Used in: portlet-app
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="display-name" type="portlet:display-nameType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="portlet-collection" type="portlet:portlet-collectionType"/>
+			<element name="user-data-constraint" type="portlet:user-data-constraintType"/>
+		</sequence>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<complexType name="security-role-refType">
+		<annotation>
+			<documentation>
+			The security-role-ref element contains the declaration of a 
+			security role reference in the code of the web application. The 
+			declaration consists of an optional description, the security 
+			role name used in the code, and an optional link to a security 
+			role. If the security role is not specified, the Deployer must 
+			choose an appropriate security role.
+			The value of the role name element must be the String used 
+			as the parameter to the 
+			EJBContext.isCallerInRole(String roleName) method
+			or the HttpServletRequest.isUserInRole(String role) method.
+			Used in: portlet
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="role-name" type="portlet:role-nameType"/>
+			<element name="role-link" type="portlet:role-linkType" minOccurs="0"/>
+		</sequence>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<complexType name="public-render-parameterType">
+		<annotation>
+			<documentation>
+			The public-render-parameters defines a render parameter that is allowed to be public
+			and thus be shared with other portlets.
+			The identifier must be used for referencing this public render parameter in the portlet code.
+			Used in: portlet-app
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="identifier" type="portlet:string"/>
+			<choice>
+				<element name="qname" type="xs:QName"/>
+				<element name="name" type="xs:NCName"/>
+			</choice>
+			<element name="alias" type="xs:QName" minOccurs="0" maxOccurs="unbounded"/>
+		</sequence>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<complexType name="short-titleType">
+		<annotation>
+			<documentation>
+			Locale specific short version of the static title.
+			Used in: portlet-info
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="portlet:string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="supportsType">
+		<annotation>
+			<documentation>
+			Supports indicates the portlet modes a 
+			portlet supports for a specific content type. All portlets must 
+			support the view mode. 
+			Used in: portlet
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="mime-type" type="portlet:mime-typeType"/>
+			<element name="portlet-mode" type="portlet:portlet-modeType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="window-state" type="portlet:window-stateType" minOccurs="0" maxOccurs="unbounded"/>
+		</sequence>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<complexType name="supported-localeType">
+		<annotation>
+			<documentation>
+			Indicated the locales the portlet supports.
+			Used in: portlet
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="portlet:string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="titleType">
+		<annotation>
+			<documentation>
+			Locale specific static title for this portlet.
+			Used in: portlet-info
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="portlet:string"/>
+		</simpleContent>
+	</complexType>
+	<simpleType name="transport-guaranteeType">
+		<annotation>
+			<documentation>
+			The transport-guaranteeType specifies that 
+			the communication between client and portlet should 
+			be NONE, INTEGRAL, or CONFIDENTIAL. 
+			NONE means that the portlet does not
+			require any transport guarantees. A value of 
+			INTEGRAL means that the portlet requires that the 
+			data sent between the client and portlet be sent in 
+			such a way that it can't be changed in transit. 
+			CONFIDENTIAL means that the portlet requires 
+			that the data be transmitted in a fashion that
+			prevents other entities from observing the contents 
+			of the transmission. 
+			In most cases, the presence of the INTEGRAL or
+			CONFIDENTIAL flag will indicate that the use 
+			of SSL is required.
+ 			Used in: user-data-constraint
+			</documentation>
+		</annotation>
+		<restriction base="portlet:string">
+			<enumeration value="NONE"/>
+			<enumeration value="INTEGRAL"/>
+			<enumeration value="CONFIDENTIAL"/>
+		</restriction>
+	</simpleType>
+	<complexType name="user-attributeType">
+		<annotation>
+			<documentation>
+			User attribute defines a user specific attribute that the
+			portlet application needs. The portlet within this application 
+			can access this attribute via the request parameter USER_INFO
+			map.
+			Used in: portlet-app
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="name" type="portlet:nameType"/>
+		</sequence>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<complexType name="user-data-constraintType">
+		<annotation>
+			<documentation>
+			The user-data-constraintType is used to indicate how
+			data communicated between the client and portlet should be
+			protected.
+			Used in: security-constraint
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="description" type="portlet:descriptionType" minOccurs="0" maxOccurs="unbounded"/>
+			<element name="transport-guarantee" type="portlet:transport-guaranteeType"/>
+		</sequence>
+		<attribute name="id" type="portlet:string" use="optional"/>
+	</complexType>
+	<complexType name="valueType">
+		<annotation>
+			<documentation>
+			The value element contains the value of a parameter.
+			Used in: init-param
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="portlet:string"/>
+		</simpleContent>
+	</complexType>
+	<complexType name="window-stateType">
+		<annotation>
+			<documentation>
+			Portlet window state. Window state names are not case sensitive.
+			Used in: custom-window-state
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="portlet:string"/>
+		</simpleContent>
+	</complexType>
+	<!--- everything below is copied from j2ee_1_4.xsd -->
+	<complexType name="descriptionType">
+		<annotation>
+			<documentation>
+			The description element is used to provide text describing the 
+			parent element. The description element should include any 
+			information that the portlet application war file producer wants
+			to provide to the consumer of the portlet application war file 
+			(i.e., to the Deployer). Typically, the tools used by the 
+			portlet application war file consumer will display the 
+			description when processing the parent element that contains the 
+			description. It has an optional attribute xml:lang to indicate 
+			which language is used in the description according to 
+			RFC 1766 (http://www.ietf.org/rfc/rfc1766.txt). The default
+			value of this attribute is English(“en”).
+			Used in: init-param, portlet, portlet-app, security-role
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="portlet:string">
+				<attribute ref="xml:lang"/>
+			</extension>
+		</simpleContent>
+	</complexType>
+	<complexType name="display-nameType">
+		<annotation>
+			<documentation>
+			The display-name type contains a short name that is intended
+			to be displayed by tools. It is used by display-name
+			elements.  The display name need not be unique.
+			Example:
+				...
+  			<display-name xml:lang="en">Employee Self Service</display-name>
+
+			It has an optional attribute xml:lang to indicate 
+			which language is used in the description according to 
+			RFC 1766 (http://www.ietf.org/rfc/rfc1766.txt). The default
+			value of this attribute is English(“en”).
+			</documentation>
+		</annotation>
+		<simpleContent>
+			<extension base="portlet:string">
+				<attribute ref="xml:lang"/>
+			</extension>
+		</simpleContent>
+	</complexType>
+	<simpleType name="fully-qualified-classType">
+		<annotation>
+			<documentation>
+			The elements that use this type designate the name of a
+			Java class or interface.
+			</documentation>
+		</annotation>
+		<restriction base="portlet:string"/>
+	</simpleType>
+	<simpleType name="role-nameType">
+		<annotation>
+			<documentation>
+			The role-nameType designates the name of a security role.
+
+			The name must conform to the lexical rules for an NMTOKEN.
+			</documentation>
+		</annotation>
+		<restriction base="NMTOKEN"/>
+	</simpleType>
+	<simpleType name="string">
+		<annotation>
+			<documentation>
+			This is a special string datatype that is defined by JavaEE 
+			as a base type for defining collapsed strings. When 
+			schemas require trailing/leading space elimination as 
+			well as collapsing the existing whitespace, this base 
+			type may be used.
+			</documentation>
+		</annotation>
+		<restriction base="string">
+			<whiteSpace value="collapse"/>
+		</restriction>
+	</simpleType>
+	<simpleType name="filter-nameType">
+		<annotation>
+			<documentation>
+			The logical name of the filter is declare
+			by using filter-nameType. This name is used to map the
+			filter.  Each filter name is unique within the portlet
+			application.
+			Used in: filter, filter-mapping
+			</documentation>
+		</annotation>
+		<restriction base="portlet:string"/>
+	</simpleType>
+</schema>

Propchange: portals/jetspeed-2/portal/trunk/etc/xsd/portlet-spec-2.0.xsd
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/etc/xsd/portlet-spec-2.0.xsd
------------------------------------------------------------------------------
    svn:keywords = Id

Added: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/SecuredPortlet.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/SecuredPortlet.java?rev=750289&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/SecuredPortlet.java (added)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/SecuredPortlet.java Thu Mar  5 02:06:07 2009
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2008 The Apache Software Foundation
+ *
+ * Licensed 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 org.apache.jetspeed.om.portlet;
+
+
+public interface SecuredPortlet
+{
+    String getName();
+}
\ No newline at end of file

Propchange: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/SecuredPortlet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/SecuredPortlet.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/UserDataConstraint.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/UserDataConstraint.java?rev=750289&r1=750288&r2=750289&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/UserDataConstraint.java (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/UserDataConstraint.java Thu Mar  5 02:06:07 2009
@@ -29,4 +29,5 @@
 	Description getDescription(Locale locale);
     List<Description> getDescriptions();
     Description addDescription(String lang);
+    void setTransportGuarantee(String transport);    
 }
\ No newline at end of file

Modified: portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/ddl-schema/registry-schema.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/ddl-schema/registry-schema.xml?rev=750289&r1=750288&r2=750289&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/ddl-schema/registry-schema.xml (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/ddl-schema/registry-schema.xml Thu Mar  5 02:06:07 2009
@@ -416,5 +416,23 @@
         <column name="APPLICATION_ID" required="true" type="INTEGER"/>  
         <column name="LISTENER_CLASS" required="false" size="255" type="VARCHAR"/>
     </table> 
+
+   <!--                                                                   
+	   PORTLET SECURITY CONSTRAINT
+    -->                                                                     
+    <table name="PA_SECURITY_CONSTRAINT">                                            
+        <column name="ID" primaryKey="true" required="true" type="INTEGER"/>
+        <column name="APPLICATION_ID" required="true" type="INTEGER"/>  
+        <column name="TRANSPORT" required="true" size="40" type="VARCHAR"/>
+    </table> 
+
+   <!--                                                                   
+	    SECURED PORTLET NAME                                                       
+    -->                                                                     
+    <table name="SECURED_PORTLET">                                            
+        <column name="ID" primaryKey="true" required="true" type="INTEGER"/>
+        <column name="OWNER_ID" required="true" type="INTEGER"/>
+        <column name="NAME" required="true" size="150" type="VARCHAR"/>
+    </table> 
 	              
 </database>



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org