[seam-commits] Seam SVN: r7999 - trunk/src/main/org/jboss/seam.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Mon Apr 21 16:06:44 EDT 2008


Author: norman.richards at jboss.com
Date: 2008-04-21 16:06:44 -0400 (Mon, 21 Apr 2008)
New Revision: 7999

Modified:
   trunk/src/main/org/jboss/seam/components-2.1.xsd
Log:
JBSEAM-1531

Modified: trunk/src/main/org/jboss/seam/components-2.1.xsd
===================================================================
--- trunk/src/main/org/jboss/seam/components-2.1.xsd	2008-04-21 18:54:20 UTC (rev 7998)
+++ trunk/src/main/org/jboss/seam/components-2.1.xsd	2008-04-21 20:06:44 UTC (rev 7999)
@@ -1,8 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
-    targetNamespace="http://jboss.com/products/seam/components"
-    xmlns:components="http://jboss.com/products/seam/components">
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
+           elementFormDefault="qualified"
+           targetNamespace="http://jboss.com/products/seam/components"
+           xmlns:components="http://jboss.com/products/seam/components">
+    <xs:annotation>
+        <xs:documentation> 
+            The top-level schema for a Seam components.xml. For more information on Seam, see
+            http://www.seamframework.org. 
+        </xs:documentation>
+    </xs:annotation>
+
     <xs:element name="components">
+        <xs:annotation>
+            <xs:documentation> The components tag is a the root element for a components.xml containing multiples
+                component definitions. </xs:documentation>
+        </xs:annotation>
         <xs:complexType>
             <xs:choice minOccurs="0" maxOccurs="unbounded">
                 <xs:element ref="components:component"/>
@@ -13,7 +25,12 @@
             </xs:choice>
         </xs:complexType>
     </xs:element>
+
     <xs:element name="component">
+        <xs:annotation>
+            <xs:documentation> The component tag defines a single Seam component. It may serve as to the root element of
+                a fine-grained *.component.xml file. </xs:documentation>
+        </xs:annotation>
         <xs:complexType>
             <xs:sequence>
                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="components:property"/>
@@ -22,88 +39,204 @@
             <xs:attributeGroup ref="components:attlist.ejbcomponent"/>
         </xs:complexType>
     </xs:element>
-    
-    <xs:element name="import" type="xs:string"/>
 
+    <xs:element name="import" type="xs:string">
+        <xs:annotation>
+            <xs:documentation>
+                The import tag declares additional global component namespaces that will be in effect for
+                all components. 
+            </xs:documentation>
+        </xs:annotation>
+    </xs:element>
+
     <xs:attributeGroup name="attlist.ejbcomponent">
-        <xs:attribute name="jndi-name"/>
+        <xs:attribute name="jndi-name" type="components:string">
+            <xs:annotation>
+                <xs:documentation> 
+                    The JNDI name used to lookup the component. This value is only used with EJB
+                    components that don't follow the global JNDI pattern. 
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
     </xs:attributeGroup>
-    
+
     <xs:attributeGroup name="attlist.component">
-        <xs:attribute name="name"/>
-        <xs:attribute name="class"/>
+        <xs:attribute name="name" type="components:componentName">
+            <xs:annotation>
+                <xs:documentation>The name of component</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        
+        <xs:attribute name="class" type="components:componentName">
+            <xs:annotation>
+                <xs:documentation>The Java class of the component implementation</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+
         <xs:attribute name="scope">
+            <xs:annotation>
+                <xs:documentation>The scope of the component</xs:documentation>
+            </xs:annotation>
+            
             <xs:simpleType>
-                <xs:restriction base="xs:token">
-                    <xs:enumeration value="stateless"/>
-                    <xs:enumeration value="event"/>
-                    <xs:enumeration value="page"/>
-                    <xs:enumeration value="conversation"/>
-                    <xs:enumeration value="session"/>
-                    <xs:enumeration value="business_process"/>
-                    <xs:enumeration value="application"/>
-                    <xs:enumeration value="STATELESS"/>
-                    <xs:enumeration value="EVENT"/>
-                    <xs:enumeration value="PAGE"/>
-                    <xs:enumeration value="CONVERSATION"/>
-                    <xs:enumeration value="SESSION"/>
-                    <xs:enumeration value="BUSINESS_PROCESS"/>
-                    <xs:enumeration value="APPLICATION"/>
-                </xs:restriction>
+                <xs:union memberTypes="components:scopeType components:expressionType"></xs:union>       
             </xs:simpleType>
         </xs:attribute>
-        <xs:attribute name="precedence" type="xs:int"/>
-        <xs:attribute name="installed" default="true" type="xs:boolean"/>
-        <xs:attribute name="auto-create" default="false" type="xs:boolean"/>
-        <xs:attribute name="startup" default="false" type="xs:boolean"/>
-        <xs:attribute name="startupDepends" type="xs:string"/>
+
+        <xs:attribute name="precedence" default="20">
+            <xs:annotation>
+                <xs:documentation>
+                    The precedence of the component, expressed as a positive integer.  Higher
+                    precedence components override lower precedence components.  The pre-definied precedence
+                    values are: 
+                    
+                    BUILT_IN = 0, 
+                    FRAMEWORK = 10,
+                    APPLICATION = 20,
+                    DEPLOYMENT = 30,
+                    MOCK = 40
+                </xs:documentation>
+            </xs:annotation>
+            <xs:simpleType>
+                <xs:union memberTypes="xs:nonNegativeInteger components:precedenceType components:expressionType"></xs:union>
+            </xs:simpleType>
+        </xs:attribute>
+        
+        <xs:attribute name="installed" default="true" type="components:boolean">
+            <xs:annotation>
+                <xs:documentation>
+                    The installed value indicates whether or not the component definition should be installed.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        
+        <xs:attribute name="auto-create" default="false" type="components:boolean">
+            <xs:annotation>
+                <xs:documentation>
+                    Indicates whether or not a components instance should be created when
+                    one doesn't exist and when the component is requested using a method that 
+                    would not normally instantiate a new instance.  (such as basic injection)
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        
+        <xs:attribute name="startup" default="false" type="components:boolean">
+            <xs:annotation>
+                <xs:documentation>
+                    Indicates that an instance of the component should be created when the 
+                    the component's controlling scope starts.  This is only used for application and
+                    session scope.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        
+        <xs:attribute name="startupDepends" type="components:string">
+            <xs:annotation>
+                <xs:documentation>
+                    A list of component names that this component depends on and that should be created before
+                    this component is started.
+                </xs:documentation>
+            </xs:annotation></xs:attribute>
     </xs:attributeGroup>
+    
     <xs:element name="factory">
+        <xs:annotation>
+            <xs:documentation>
+                Factories are like a component instances except their values are 
+                determined by computing a value or calling a method on another 
+                component.
+            </xs:documentation>
+        </xs:annotation>
         <xs:complexType>
             <xs:attributeGroup ref="components:attlist.factory"/>
         </xs:complexType>
     </xs:element>
+    
     <xs:attributeGroup name="attlist.factory">
-        <xs:attribute name="name" use="required"/>
-        <xs:attribute name="method"/>
-        <xs:attribute name="value"/>
+        <xs:attribute name="name" use="required">
+            <xs:annotation>
+                <xs:documentation>The name of the factory component</xs:documentation>
+            </xs:annotation></xs:attribute>
+       
+        <xs:attribute name="method">
+            <xs:annotation>
+                <xs:documentation>
+                     The method binding used to evauluate the factory value.  A factory should have either
+                     a method binding or a value binding, but not both.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        
+        <xs:attribute name="value">
+            <xs:annotation>
+                <xs:documentation>
+                     The value binding used to evauluate the factory value.  A factory should have either
+                     a method binding or a value binding, but not both.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        
         <xs:attribute name="scope">
+            <xs:annotation>
+                <xs:documentation>The scope of the factory value</xs:documentation>
+            </xs:annotation>
+            
             <xs:simpleType>
-                <xs:restriction base="xs:token">
-                    <xs:enumeration value="stateless"/>
-                    <xs:enumeration value="event"/>
-                    <xs:enumeration value="page"/>
-                    <xs:enumeration value="conversation"/>
-                    <xs:enumeration value="session"/>
-                    <xs:enumeration value="business_process"/>
-                    <xs:enumeration value="application"/>
-                    <xs:enumeration value="STATELESS"/>
-                    <xs:enumeration value="EVENT"/>
-                    <xs:enumeration value="PAGE"/>
-                    <xs:enumeration value="CONVERSATION"/>
-                    <xs:enumeration value="SESSION"/>
-                    <xs:enumeration value="BUSINESS_PROCESS"/>
-                    <xs:enumeration value="APPLICATION"/>
-                </xs:restriction>
+                <xs:union memberTypes="components:scopeType components:expressionType"></xs:union>       
             </xs:simpleType>
         </xs:attribute>
-        <xs:attribute name="auto-create" type="xs:boolean"/>
+        
+        <xs:attribute name="auto-create" default="false" type="components:boolean">
+            <xs:annotation>
+                <xs:documentation>
+                    Indicates whether or not the factory value should be created when
+                    one doesn't exist and when the component is requested using a method that 
+                    would not normally instantiate a new instance.  (such as basic injection)
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
     </xs:attributeGroup>
+    
+    
     <xs:element name="property">
+        <xs:annotation>
+            <xs:documentation>
+                A generic property.  The body contains the value or values.
+            </xs:documentation>
+        </xs:annotation>
         <xs:complexType mixed="true">
             <xs:choice minOccurs="0" maxOccurs="unbounded">
-                <xs:element ref="components:key"/>
-                <xs:element ref="components:value"/>
+                <xs:element ref="components:key" />
+                <xs:element ref="components:value" />
             </xs:choice>
             <xs:attributeGroup ref="components:attlist.property"/>
         </xs:complexType>
     </xs:element>
+    
     <xs:attributeGroup name="attlist.property">
-        <xs:attribute name="name" use="required"/>
+        <xs:attribute name="name" use="required" type="components:string">
+            <xs:annotation>
+                <xs:documentation>The property name</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
     </xs:attributeGroup>
-    <xs:element name="key" type="xs:string"/>
-    <xs:element name="value" type="xs:string"/>
+    
 
+    <xs:element name="key" type="components:string">
+        <xs:annotation>
+            <xs:documentation>For map values, the key for the following value</xs:documentation>
+        </xs:annotation>
+    </xs:element>
+    
+    <xs:element name="value" type="components:string">
+        <xs:annotation>
+            <xs:documentation>
+                For list values, the value to be added.
+                For map values, the value for the preceding key
+            </xs:documentation>
+        </xs:annotation>
+    </xs:element>
+
     <xs:complexType name="multiValuedProperty">
         <xs:sequence minOccurs="0" maxOccurs="unbounded">
             <xs:element ref="components:value"/>
@@ -118,6 +251,9 @@
     </xs:complexType>
 
     <xs:element name="event">
+        <xs:annotation>
+            <xs:documentation>An event handler definition</xs:documentation>
+        </xs:annotation>
         <xs:complexType>
             <xs:choice minOccurs="0" maxOccurs="unbounded">
                 <xs:element ref="components:action"/>
@@ -125,17 +261,97 @@
             <xs:attributeGroup ref="components:attlist.event"/>
         </xs:complexType>
     </xs:element>
+    
     <xs:attributeGroup name="attlist.event">
-        <xs:attribute name="type" use="required"/>
+        <xs:attribute name="type" use="required" type="components:componentNameType" >
+            <xs:annotation>
+                <xs:documentation>The event type to handle</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
     </xs:attributeGroup>
 
     <xs:element name="action">
+        <xs:annotation>
+            <xs:documentation>The action to be taken when the event occurs</xs:documentation>
+        </xs:annotation>
         <xs:complexType>
             <xs:attributeGroup ref="components:attlist.action"/>
         </xs:complexType>
     </xs:element>
+    
     <xs:attributeGroup name="attlist.action">
-        <xs:attribute name="execute" use="required"/>
+        <xs:attribute name="execute" use="required" type="components:elType">
+            <xs:annotation>
+                <xs:documentation>An EL expression to be invoked when the event is invoked</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
     </xs:attributeGroup>
 
+    <xs:simpleType name="propertyType">
+        <xs:restriction base="xs:string">
+            <xs:pattern value="@.+@"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:simpleType name="elType">
+        <xs:restriction base="xs:string">
+            <xs:pattern value="\#\{.+\}"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <!-- place holder - need something more expressive -->
+    <xs:simpleType name="componentNameType">
+        <xs:restriction base="xs:string">
+            <xs:minLength value="1" />   
+        </xs:restriction>
+    </xs:simpleType>
+    
+    <xs:simpleType name="expressionType">
+        <xs:union memberTypes="components:elType components:propertyType"/>
+    </xs:simpleType>
+    
+    <xs:simpleType name="boolean">
+        <xs:union memberTypes="xs:boolean components:expressionType"/>
+    </xs:simpleType>
+
+    <xs:simpleType name="string">
+        <xs:union memberTypes="xs:string components:expressionType"/>
+    </xs:simpleType>
+    
+    <xs:simpleType name="int">
+        <xs:union memberTypes="xs:int components:expressionType"/>
+    </xs:simpleType>
+   
+    <xs:simpleType name="componentName">
+        <xs:union memberTypes="components:componentNameType components:expressionType" />
+    </xs:simpleType>
+    
+    <xs:simpleType name="scopeType">
+        <xs:restriction base="xs:token">
+            <xs:enumeration value="stateless"/>
+            <xs:enumeration value="event"/>
+            <xs:enumeration value="page"/>
+            <xs:enumeration value="conversation"/>
+            <xs:enumeration value="session"/>
+            <xs:enumeration value="business_process"/>
+            <xs:enumeration value="application"/>
+            <xs:enumeration value="STATELESS"/>
+            <xs:enumeration value="EVENT"/>
+            <xs:enumeration value="PAGE"/>
+            <xs:enumeration value="CONVERSATION"/>
+            <xs:enumeration value="SESSION"/>
+            <xs:enumeration value="BUSINESS_PROCESS"/>
+            <xs:enumeration value="APPLICATION"/>
+        </xs:restriction>
+    </xs:simpleType>
+      
+    <xs:simpleType name="precedenceType">
+        <xs:restriction base="xs:int">
+            <xs:enumeration value="0"/>
+            <xs:enumeration value="10"/>
+            <xs:enumeration value="20"/>
+            <xs:enumeration value="30"/>
+            <xs:enumeration value="40"/>
+        </xs:restriction>
+    </xs:simpleType>
 </xs:schema>




More information about the seam-commits mailing list