You are viewing a plain text version of this content. The canonical link for it is here.
Posted to graffito-commits@incubator.apache.org by cl...@apache.org on 2006/02/02 21:40:18 UTC

svn commit: r374514 - in /incubator/graffito/trunk: jcr/jcr-mapping/xdocs/ jcr/jcr-mapping/xdocs/engine-overview.xml/ jcr/jcr-mapping/xdocs/simple-strategies.xml/ site/xdocs-templates/ site/xdocs/ site/xdocs/images/

Author: clombart
Date: Thu Feb  2 13:39:58 2006
New Revision: 374514

URL: http://svn.apache.org/viewcvs?rev=374514&view=rev
Log:
Still working on the documentation

Added:
    incubator/graffito/trunk/jcr/jcr-mapping/xdocs/advanced-strategies.xml
    incubator/graffito/trunk/jcr/jcr-mapping/xdocs/engine-configuration.xml
    incubator/graffito/trunk/jcr/jcr-mapping/xdocs/engine-overview.xml/
    incubator/graffito/trunk/jcr/jcr-mapping/xdocs/engine-spring.xml
    incubator/graffito/trunk/jcr/jcr-mapping/xdocs/graffito-jcr-mapping.dtd.txt
    incubator/graffito/trunk/jcr/jcr-mapping/xdocs/introduction-strategies.xml
    incubator/graffito/trunk/jcr/jcr-mapping/xdocs/simple-strategies.xml/
Modified:
    incubator/graffito/trunk/jcr/jcr-mapping/xdocs/index.xml
    incubator/graffito/trunk/jcr/jcr-mapping/xdocs/navigation.xml
    incubator/graffito/trunk/site/xdocs-templates/navigation.xml
    incubator/graffito/trunk/site/xdocs/architecture.xml
    incubator/graffito/trunk/site/xdocs/build.properties.txt
    incubator/graffito/trunk/site/xdocs/build.xml
    incubator/graffito/trunk/site/xdocs/deploy.xml
    incubator/graffito/trunk/site/xdocs/images/graffito_architecture.jpg
    incubator/graffito/trunk/site/xdocs/maven-goals.xml
    incubator/graffito/trunk/site/xdocs/navigation.xml
    incubator/graffito/trunk/site/xdocs/project-structure.xml
    incubator/graffito/trunk/site/xdocs/tech-overview.xml

Added: incubator/graffito/trunk/jcr/jcr-mapping/xdocs/advanced-strategies.xml
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr/jcr-mapping/xdocs/advanced-strategies.xml?rev=374514&view=auto
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/xdocs/advanced-strategies.xml (added)
+++ incubator/graffito/trunk/jcr/jcr-mapping/xdocs/advanced-strategies.xml Thu Feb  2 13:39:58 2006
@@ -0,0 +1,82 @@
+<?xml version="1.0"?>
+<!-- 
+Copyright 2004 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.
+-->
+<document>
+	<properties>
+		<author email="christophe.lombart@gmail.com">Christophe Lombart</author>
+		<title>Advanced Mapping Strategies</title>
+	</properties>
+	<body>
+				
+		<section name="Advanced Mapping Strategies">
+			<subsection name="Inheritance">
+			</subsection>	
+
+			<subsection name="Interface">
+			</subsection>
+			<subsection name="Components">
+
+
+			<p>A component is an entity that cannot live by its own, but has a logical
+			meaning. Take for example an Address. It may live alone, but doesn't make much sense in some
+			systems. Once associated with an User it starts making sense. Now, as in RDBMS you can choose the
+			persist this as a record in a separate table with a 1-1 relation, or you may choose to persist
+			Address field along with the User.
+			
+			Now, returning to JCR, the component is fitting perfectly the mixin notion. A mixin cannot live by
+			its own in the repository. It is associated with some node. It's properties are added to the set of
+original node.
+			</p>
+			</subsection>
+			<subsection name ="Group some bean attributes into a subnode">
+			</subsection>	
+			<subsection name ="Map to another node structure">
+				<p>Sometime, it should be interesting to map to a different jcr node structure.
+				Here is an example, for a class "File", we can have :</p>
+			<source><![CDATA[ 				
+public class File
+				
+{
+				
+				
+	private String mimeType;
+	private String encoding;
+	private InputStream data;
+	private Calendar lastModified;
+	// Add getters/setters
+}
+				]]></source>		  
+				
+				<p>and in terms of JCR structure, we can have :</p>
+				<source><![CDATA[ 
+				
+nt:file
+	jcr:content
+		jcr:mimeType
+		jcr:encoding
+		jcr:data
+		jcr:lastModified
+				]]></source>	
+				So, the jcr:content node is an extra node to specify in the mapping file.
+				
+			</subsection>
+			<subsection name ="">
+			</subsection>
+			
+		</section>
+	</body>
+</document>

Added: incubator/graffito/trunk/jcr/jcr-mapping/xdocs/engine-configuration.xml
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr/jcr-mapping/xdocs/engine-configuration.xml?rev=374514&view=auto
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/xdocs/engine-configuration.xml (added)
+++ incubator/graffito/trunk/jcr/jcr-mapping/xdocs/engine-configuration.xml Thu Feb  2 13:39:58 2006
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!-- 
+Copyright 2004 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.
+-->
+<document>
+	<properties>
+		<author email="christophe.lombart@gmail.com">Christophe Lombart</author>
+		<title>Graffito JCR Persistence Manager</title>
+	</properties>
+	<body>
+		<section name="The Persistence Manager Configuration">
+			
+			<p>TODO</p>
+		</section>
+	</body>
+</document>

Added: incubator/graffito/trunk/jcr/jcr-mapping/xdocs/engine-spring.xml
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr/jcr-mapping/xdocs/engine-spring.xml?rev=374514&view=auto
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/xdocs/engine-spring.xml (added)
+++ incubator/graffito/trunk/jcr/jcr-mapping/xdocs/engine-spring.xml Thu Feb  2 13:39:58 2006
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!-- 
+Copyright 2004 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.
+-->
+<document>
+	<properties>
+		<author email="christophe.lombart@gmail.com">Christophe Lombart</author>
+		<title>Graffito JCR Persistence Manager</title>
+	</properties>
+	<body>
+		<section name="Spring Integration ">
+			<p>TO DO</p>
+		</section>
+	</body>
+</document>

Added: incubator/graffito/trunk/jcr/jcr-mapping/xdocs/graffito-jcr-mapping.dtd.txt
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr/jcr-mapping/xdocs/graffito-jcr-mapping.dtd.txt?rev=374514&view=auto
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/xdocs/graffito-jcr-mapping.dtd.txt (added)
+++ incubator/graffito/trunk/jcr/jcr-mapping/xdocs/graffito-jcr-mapping.dtd.txt Thu Feb  2 13:39:58 2006
@@ -0,0 +1,122 @@
+<!--
+/*
+ * Copyright 2004-2005 The Apache Software Foundation or its licensors,
+ *                     as applicable.
+ *
+ * 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.
+ */
+-->
+
+<!ELEMENT graffito-jcr (class-descriptor*)>
+<!--
+    Class descriptor - Each class descriptor describes the mapping strategy used for one a java class
+    * className : the className
+    * jcrNodeType : the primary jcr node type, it can be nt:unstructured
+    * jcrSuperTypes : the jcr super types, optional
+-->
+<!ELEMENT class-descriptor (field-descriptor*, bean-descriptor*, collection-descriptor*)>
+
+<!ATTLIST class-descriptor
+	className CDATA #REQUIRED
+	jcrNodeType CDATA #IMPLIED
+        jcrSuperTypes CDATA #IMPLIED>
+
+<!--
+    Field descriptor - A field descriptor maps one atomic object attribute (primitive types, String, Long, ...)  into a JCR property
+    * fieldName : the field/attribute name
+    * fieldType: the primitive type or fully qualified class name of the field (optional)
+    * jcrName : the jcr property name (optional). If it is not defined, fieldname is used to specify the jcr property name
+    * id : specifies if the field is an id. Id is optional. If the class contains an id field, some process can run faster
+    * path : specified if the fiels is the object path
+    * jcrType: specifies the JCR property type (supported jcr property types: STRING, DATE, LONG, DOUBLE, BOOLEAN), optional
+    * jcrAutoCreated: specifies if this JCR property will be autocreated (true/false / default is false), optional
+    * jcrMandatory: specifies if this JCR property is mandatory (true/false / default is false), optional
+    * jcrOnParentVersion: specifies how this JCR property acts on inherited versioned node properties (default is COPY), optional
+    * jcrProtected: specifies if this JCR node property is protected (true/false / default is false), optional
+    * jcrMultiple: specifies if this JCR node property is a multivalued property (true/false / default is false), optional
+-->
+
+<!ELEMENT field-descriptor EMPTY>
+<!ATTLIST field-descriptor
+	fieldName CDATA #REQUIRED
+	fieldType CDATA #IMPLIED
+	jcrName CDATA #IMPLIED 
+	id (true | false) "false"
+	path (true | false) "false"
+        jcrType (String | Date | Long | Double | Boolean | Binary) #IMPLIED
+        jcrAutoCreated (true | false) "false"
+        jcrMandatory (true | false) "false"
+        jcrOnParentVersion (COPY | VERSION | INITIALIZE | COMPUTE | IGNORE | ABORT) "COPY"
+        jcrProtected (true | false) "false"
+        jcrMultiple (true | false) "false"
+>
+
+<!--
+    Bean descriptor - A bean descriptor maps one "complex" object attribute into a JCR node.
+    * fieldName : the field/attribute name
+    * jcrName : the jcr node name (optional). If it is not defined, fieldname is used to specify the jcr node name
+    * proxy : Use lazy loading or not. if true, this attributes is not loaded when the main object is retrieved. it will be loaded when the get method is called.
+    * jcrNodeType: defines the child node type, optional
+    * jcrAutoCreated (boolean) default is "false"
+    * jcrMandatory (boolean) default is "false"
+    * jcrOnParentVersion default is "COPY"
+    * jcrProtected (boolean) default is "false"
+    * jcrSameNameSiblings (boolean) default is "false"   
+-->
+<!ELEMENT bean-descriptor EMPTY>
+<!ATTLIST bean-descriptor
+	fieldName CDATA #REQUIRED
+	jcrName CDATA #IMPLIED 
+	proxy (true | false) "false" 
+	jcrNodeType CDATA #IMPLIED
+        jcrAutoCreated (true | false) "false"   
+        jcrMandatory (true | false) "false"
+        jcrOnParentVersion (COPY | VERSION | INITIALIZE | COMPUTE | IGNORE | ABORT) "COPY"
+        jcrProtected (true | false) "false"
+        jcrSameNameSiblings (true | false) "false"         
+>
+
+<!--
+    Collection descriptor - A collection descriptor maps one object attribute based on a collection (or a map) into a series of JCR nodes.
+    * fieldName : the field/attribute name (matching to the collection attribute)
+    * jcrName : the jcr property name (optional). If it is not defined, fieldname is used to specify the jcr node name
+    * proxy : Use lazy loading or not. if true, this attributes is not loaded when the main object is retrieve. it will be loaded when the get method is called.
+    * elementClassName : contains a fully qualified class name.	This class is the Object type of the persistent collection elements.
+    * collectionClassName : contains a fully qualified class name. This class must be the Java type of the Collection attribute. 	
+                            This attribute must only specified if the attribute type is not a java.util.Collection (or subclass). 
+                            The declared class must implement ManageableCollection to let the persistence engine handles this type of collection.
+    * collectionConverter : The class name converter. This is the collection mapping strategy to used. 
+                            If this attribute is not specify, the default collection mapping strategy is used (DefaultCollectionConverterImpl)
+    * jcrNodeType: defines the child node type, optional
+    * jcrAutoCreated (boolean) default is "false"
+    * jcrMandatory (boolean) default is "false"
+    * jcrOnParentVersion default is "COPY"
+    * jcrProtected (boolean) default is "false"
+    * jcrSameNameSiblings (boolean) default is "false"
+-->
+
+<!ELEMENT collection-descriptor EMPTY>
+<!ATTLIST collection-descriptor
+	fieldName CDATA #REQUIRED
+	jcrName CDATA #IMPLIED 
+	proxy (true | false) "false"
+	elementClassName CDATA #REQUIRED
+	collectionClassName CDATA #IMPLIED
+	collectionConverter CDATA #IMPLIED
+	jcrNodeType CDATA #IMPLIED
+        jcrAutoCreated (true | false) "false"   
+        jcrMandatory (true | false) "false"
+        jcrOnParentVersion (COPY | VERSION | INITIALIZE | COMPUTE | IGNORE | ABORT) "COPY"
+        jcrProtected (true | false) "false"
+        jcrSameNameSiblings (true | false) "false"	
+>

Modified: incubator/graffito/trunk/jcr/jcr-mapping/xdocs/index.xml
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr/jcr-mapping/xdocs/index.xml?rev=374514&r1=374513&r2=374514&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/xdocs/index.xml (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/xdocs/index.xml Thu Feb  2 13:39:58 2006
@@ -22,11 +22,27 @@
 	</properties>
 	<body>
 		<section name="Overview">
-			<subsection name="General Overview">
-				<p></p>
+			<subsection name="Object/Content Mapping framework (ocm)">
+				<p>This Graffito subproject is an object/JCR persistence and query service. This tools lets you to persist java objects into a JCR compliant repository - including association, inheritance, polymorphism, composition, and the Java collections framework. Furthermore, this jcr-mapping allows you to express queries in Java-based Criteria, as well as in JCR query language.</p> 
+				
+				<p>In order to easily support the JCR specification, any content application managing an high level object model can use this framework. For example, a classic Forum application contains objets like "Forum", "Topic" and "Post". Now these data objects (pojo) can be managed by our JCR mapping tools in order to persist them into a JCR compliant repository.</p> 
+				
+				
+			</subsection>
+			<subsection name ="Why an ocm ?">
+				<p>
+					Sometimes it is very convenient to be able to just access the JCR nodes and properties directly from your presentation-layer for very simple things (mostly generic display). When a lot of "business logic" are involved, the JCR API can be too low level and real business objects (pojo) are more appreciate in a such case.				
+				</p>
+				
+			</subsection>
+			<subsection name ="Preriquise">
+				<p>
+					Before using this JCR framework, you should review the JCR specication and implementation like <a   href="http://incubator.apache.org/jackrabbit/">JackRabbit</a>. 
+				</p>
+				
 			</subsection>
 			<subsection name="Download">
-			<p>There are no releases yet</p>	
+				<p>There are no releases yet. See the menu 'Build a new application" for instructions on how to download and build the Graffito JCR mapping sources.</p>	
 			</subsection>
 		</section>
 	</body>

Added: incubator/graffito/trunk/jcr/jcr-mapping/xdocs/introduction-strategies.xml
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr/jcr-mapping/xdocs/introduction-strategies.xml?rev=374514&view=auto
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/xdocs/introduction-strategies.xml (added)
+++ incubator/graffito/trunk/jcr/jcr-mapping/xdocs/introduction-strategies.xml Thu Feb  2 13:39:58 2006
@@ -0,0 +1,182 @@
+<?xml version="1.0"?>
+<!-- 
+Copyright 2004 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.
+-->
+<document>
+	<properties>
+		<author email="christophe.lombart@gmail.com">Christophe Lombart</author>
+		<title>Introduction to the Mapping Strategies</title>
+	</properties>
+	<body>
+		<section name="Introduction to the Mapping Strategies">
+						
+			<p>
+				We are calling "Mapping strategies" the algorithm used to map bean fields into JCR nodes and/or properties.
+				
+			</p>
+			
+			<p>
+				In order to explain the basic mapping strategies, we will use the following simple object model : 
+				<ul>
+					<li>A page contains a path (of course), a pageInfo  and a collection of paragraphs.</li>
+					<li>The PageInfo class contains the title and the page description. We are using the pageInfo here to see all mapping features (see the bean-descriptors). In real application, this class is not necessary :-)</li>
+					<li>Each paragraph contains a path and a text field.</li>
+				</ul>	
+				<p><img src="./images/sample-model-doc.png"  align="center"></img></p>
+			</p>	
+			<p>
+				This object model could be too simple for real applications and it is uses here just to simplify the description of the different mapping strategies. 
+			</p>	
+			<p>Based on that object model, we can define the following java classes :</p>
+			
+			<source>
+public class Page
+{
+	String path;
+	PageInfo pageInfo;
+	Collection paragraphs;
+	
+	/*  Add here the getter and setter methods */
+
+	public void addParagraph(Paragraph paragraph)
+	{
+		if (paragraphs == null)
+		{
+			paragraphs = new ArrayList();
+		}
+				
+		paragraphs.add(paragraph);
+	}
+}	
+
+public class PageInfo
+{
+	String path;
+	String title;
+	String description;
+
+	/*  Add here the getter and setter methods */
+
+}
+
+public class Paragraph
+{
+	private String path;
+	private String text;
+				
+	/* Add here the getter and setter methods */
+				
+}
+			</source>	
+			
+			
+			<p>
+				... and the class-descriptors can be : 	
+			</p>	
+			
+			<source><![CDATA[ 				
+<class-descriptor className="org.apache.portals.graffito.jcr.testmodel.Page" jcrNodeType="graffito:page">
+	<field-descriptor fieldName="path" path="true" />
+	<bean-descriptor fieldName="pageInfo" jcrName="pageInfo" />
+	<collection-descriptor fieldName="paragraphs" proxy="false" 
+	   elementClassName="org.apache.portals.graffito.jcr.testmodel.Paragraph" 
+	   collectionConverter="org.apache.portals.graffito.jcr.persistence.collectionconverter.impl.NTCollectionConverterImpl" />
+</class-descriptor>
+									
+<class-descriptor className="org.apache.portals.graffito.jcr.testmodel.PageInfo" jcrNodeType="graffito:PageInfo">
+	<field-descriptor fieldName="path" path="true" />
+	<field-descriptor fieldName="title" jcrName="graffito:title"/>
+	<field-descriptor fieldName="description" jcrName="graffito:description"/>
+</class-descriptor>
+
+<class-descriptor className="org.apache.portals.graffito.jcr.testmodel.Paragraph" jcrNodeType="graffito:paragraph">
+	<field-descriptor fieldName="path" path="true" />
+	<field-descriptor fieldName="text" jcrName="graffito:text"/>
+</class-descriptor>
+			]]></source>
+								
+			<p>
+				We will explain in more details each descriptors in the following sections (<a href="atomic-strategy.html">Mapping Atomic Fields</a>,<a href="bean-strategy.html">Mapping Bean Fields</a> and <a href="collection-strategy.html">Mapping Collection Fields</a>. If the page is stored on the path "/mysite/mypage1" and contains 2 paragraphs, here is the resulting jcr structure :
+			</p>
+			<p>
+			<source><![CDATA[ 
+/mysite/page1	
+	/mysite/page1/pageInfo
+		graffito:title = "This is my page title"
+		graffito:description = "This is my page description"
+	/mysite/page1/paragraph1
+		graffito:text = "This is the content of para1"
+	/mysite/page1/paragraph2
+		graffito:text = ""This is the content of para2"
+			]]></source>		  
+			</p>	
+			<p>It is possible to have another kind of jcr structure by using other mapping strategies. You can see the section "Advance Mapping strategies" to get more information on that.</p>
+			
+			
+			<subsection name="The Class descriptor">
+				<p>When you decide to map a bean class, you have to create a new class descriptor entry in the Persistence Manager descriptor file.</p>
+				<p>Here is a basic class descriptor example : </p>
+				<source><![CDATA[ 
+<class-descriptor className="org.apache.portals.graffito.jcr.testmodel.Paragraph" jcrNodeType="nt:unstructured">
+	<field-descriptor fieldName="path" path="true" />
+	<field-descriptor fieldName="text" jcrName="graffito:text"/>
+</class-descriptor>
+				]]></source>
+
+				<p>This class descriptor maps the class "org.apache.portals.graffito.jcr.testmodel.Paragraph" to the JCR type "nt:unstructured". Each field-descriptors maps one bean attribute to a JCR property. You can find more information on the field-descriptors in the page <a href="atomic-strategy.html">Mapping Atomic fields</a>. 
+				</p>	
+				<p>
+					It is also possible to map a bean class to a specific JCR custom node type. The following class-descriptor map the class "org.apache.portals.graffito.jcr.testmodel.Paragraph" to the node type "graffito:paragraph".	
+				</p>
+				<source><![CDATA[ 				
+<class-descriptor className="org.apache.portals.graffito.jcr.testmodel.Paragraph" jcrNodeType="graffito:paragraph">
+	<field-descriptor fieldName="path" path="true" />
+	<field-descriptor fieldName="text" jcrName="graffito:text"/>
+</class-descriptor>
+				]]></source>	
+
+				<p>
+					In order to use correclty our example class with <a href="http://incubator.apache.org/jackrabbit/">Jackrabbit</a>, you should add the following node type definition in its custom_nodetypes.xml file or import the node type definition with the Jackrabbit API 
+				</p>
+				
+				<source><![CDATA[ 				
+<nodeType name="graffito:paragraph" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
+	<supertypes>
+		<supertype>mix:versionable</supertype>
+		<supertype>nt:base</supertype>
+	</supertypes>
+	<propertyDefinition name="*" requiredType="undefined" autoCreated="false" 
+			    mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
+	<propertyDefinition name="graffito:text" requiredType="String" autoCreated="false" 
+			    mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
+</nodeType>
+				]]></source>
+				<p>We are currently building a node type management tools which can import the node types from the class-descriptors.</p>
+			</subsection>
+			<subsection name ="The path Field">
+				<p>
+				Each mapped class contains a mandatory field called the "path field". It simply contains the JCR path  associated to the object.	
+				For example, the following descriptor specify the bean field "myPath" as the path field.			
+				</p>
+				<source><![CDATA[ 
+<field-descriptor fieldName="myPath" path="true" />
+				  ]]></source>
+				
+			</subsection>
+			
+		</section>
+	</body>
+</document>

Modified: incubator/graffito/trunk/jcr/jcr-mapping/xdocs/navigation.xml
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr/jcr-mapping/xdocs/navigation.xml?rev=374514&r1=374513&r2=374514&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/xdocs/navigation.xml (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/xdocs/navigation.xml Thu Feb  2 13:39:58 2006
@@ -27,7 +27,35 @@
 		</links>
                 <menu name="General Information">
 			<item name="Overview" href="index.html"/>			
-			<item name="Tutorial" href="../overview.html"/>
-		</menu>		
+			
+		</menu>	
+		<menu name="Getting Started">			
+		</menu>	
+		<menu name="The Persistence Manager">			
+			<item name="Introduction" href="engine-introduction.html"/>
+			<item name="Configuration" href="engine-configuration.html"/>
+			<item name="Spring Integration" href="engine-spring.html"/>
+			<item name="DTD" href="graffito-jcr-mapping.dtd.txt"/>
+		</menu>	
+		
+		<menu name="Mapping Stategies">			
+			<item name="Introduction" href="introduction-strategies.html"/>
+			<item name="Mapping Atomic Fields" href="atomic-strategy.html"/>			
+			<item name="Mapping Bean Fields" href="bean-strategy.html"/>			
+			<item name="Mapping Collection Fields" href="collection-strategy.html"/>			
+			
+		</menu>			
+		
+		<menu name="Advance Mapping Stategies">			
+			<item name="Introduction" href="introduction-advanced-strategies.html"/>
+			<item name="Inheritance" href="inheritance-strategy.html"/>
+			<item name="Reviewing the bean-descriptor" href="component-strategy.html"/>						
+			<item name="Reviewing the collection-descriptor" href="collection-strategy.html"/>
+			<item name="Adding Extra JCR Nodes" href="extra-nodes-strategy.html"/>
+			
+			
+		</menu>			
+		
+		
 	</body>
 </project>

Modified: incubator/graffito/trunk/site/xdocs-templates/navigation.xml
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/site/xdocs-templates/navigation.xml?rev=374514&r1=374513&r2=374514&view=diff
==============================================================================
--- incubator/graffito/trunk/site/xdocs-templates/navigation.xml (original)
+++ incubator/graffito/trunk/site/xdocs-templates/navigation.xml Thu Feb  2 13:39:58 2006
@@ -43,13 +43,13 @@
 			<item name="Architecture" href="/architecture.html"/>
 			<item name="Class diagrams" href="/class-diagrams.html"/>			
 			<item name="Build all Graffito subprojects" href="build.html"/>
-			<item name="Supported DB" href="supported-db.html"/>
 			<item name="Deploy Graffito into Jetspeed 2" href="deploy.html"/>
-			<item name="Graffito Content Store Setup" href="/store.html"/>
+			<item name="Supported DB" href="supported-db.html"/>			
+			<!-- item name="Graffito Content Store Setup" href="/store.html"/ -->
 			
 			<item name="Graffito Core API"     href="./api/index.html"/> 			
 			<item name="Graffito Components"     href="./components/index.html"/> 
-			<item name="Graffito Engine"     href="./engine/index.html"/> 
+			<!-- item name="Graffito Engine"     href="./engine/index.html"/ --> 
 		</menu>
 		
 		<menu name="The JCR Tools">

Modified: incubator/graffito/trunk/site/xdocs/architecture.xml
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/site/xdocs/architecture.xml?rev=374514&r1=374513&r2=374514&view=diff
==============================================================================
--- incubator/graffito/trunk/site/xdocs/architecture.xml (original)
+++ incubator/graffito/trunk/site/xdocs/architecture.xml Thu Feb  2 13:39:58 2006
@@ -20,7 +20,7 @@
 		<title>Graffito Architecture</title>
 	</properties>
 	<body>
-		<section name="Graffito Engine Architecture">
+		<section name="Graffito Architecture">
 		    <img src="./images/graffito_architecture.jpg" ></img>
 		
 		
@@ -36,17 +36,16 @@
 				</p>
 			</subsection>
 			<subsection name = "Virtual Content Tree and Graffito Master Store" >
-				<p>Graffito groups together different stores into the same virtual content tree. By this way, your application can access to heterogenous content servers.
-				The principal store required by the Graffito engine is the Graffito Master Store. It contains all store references and knows how to mount thoses stores into the virtual content tree.				
-				Graffito Master Store can also contain  some CMS objects, permissions setting, scheduler info, ... .</p>
+				<p>Graffito groups together different stores into the same virtual content tree. By this way, your application can access to heterogeneous content servers.
+				The principal store required by the Graffito engine is the Graffito Master Store. It contains all store references and knows how to mount those stores into the virtual content tree.Graffito Master Store can also contain  some CMS objects, permissions setting, scheduler info, ... .</p>
 
 			</subsection>	
 			<subsection name="The Graffito Engine">
 			   <p>The Graffito engine is a container based on 2 distinct layers : The "Graffito services" layer and the "Persistence service" Layer.</p>
 			   <p>
-	       	   The first one, the "Graffito Services" deals with an high level of abstraction. It is composed of different Spring components which are providing an generic API.
-	       	   This API is independant of any CMS content store. Each components solves one of the CMS aspect. 
-	       	   For example, the model service manages the CMS objects lifecycle (instantiate, create, update, remove) and  the search service gives a way to search content across the complete content tree, ... .	       	   
+	       	   The first one, the "Graffito Services" deals with an high level of abstraction. It is composed of different Spring components which are providing a generic API.
+		   This API is independent of any CMS content store. Each components solves one of the CMS aspect. 
+	       	   For example, the model service manages the CMS objects life cycle (instantiate, create, update, remove) and  the search service gives a way to search content across the complete content tree, ... .	       	   
 	       	   In order to have more abstraction on the content location, the "Graffito Services" layer dispatchs all requests to the "Persistence Service" layer.
 	       	   <p>
 	       	   The core Graffito services are : 
@@ -66,8 +65,8 @@
 	       	   <p>The "Persistence Service" layer is the key component for building the virtual content tree. After reading all store references from the Graffito Master Store, it can mount each of them into the content tree.
 	       	   	Mounting a store is based on an URI mapping. All servers are associated to an URI prefix. So, a CMS object is stored into the store which has the same URI prefix.
                 In the current version it is possible to mount a server only on the root level. Later, we plan to mount a server anywhere in the content tree.
-	       	   	The "Persistence Service" is based on a plugin design. By this way, it is possible to have different kind of stores (Webdav, Graffito Store or proprietary store). 
-	       	   	The "Persistenct Service" knows which plugin to use with which server. The plugin goals is to convert a Graffito request (eg. create a document) into a specific CMS API.
+	       	   	The "Persistence Service" is based on a plugin design. By this way, it is possible to have different kind of stores (JCR, Webdav, Graffito DB/OJB Store or proprietary store). 
+			The "Persistence Service" knows which plugin to use with which server. The plugin goals is to convert a Graffito request (eg. create a document) into a specific CMS API.
 		      </p>
 	       
 			</subsection>	

Modified: incubator/graffito/trunk/site/xdocs/build.properties.txt
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/site/xdocs/build.properties.txt?rev=374514&r1=374513&r2=374514&view=diff
==============================================================================
--- incubator/graffito/trunk/site/xdocs/build.properties.txt (original)
+++ incubator/graffito/trunk/site/xdocs/build.properties.txt Thu Feb  2 13:39:58 2006
@@ -2,64 +2,68 @@
 # GRAFFITO
 # ---------------------------------------------------------------------------------
 
+#Uncomment the following line if you want to run the unit tests
+#maven.test.skip=false
+
 # configure TEST DB
 
-org.apache.portals.graffito.test.database.default.name=hsql
+org.apache.portals.graffito.test.database.default.name=mysql
 org.apache.portals.graffito.test.jetspeed=false
-org.apache.portals.graffito.test.database.url = jdbc:hsqldb:hsql://127.0.0.1:9001
-org.apache.portals.graffito.test.database.driver = org.hsqldb.jdbcDriver
-org.apache.portals.graffito.test.database.user = sa
+org.apache.portals.graffito.test.database.url = jdbc:mysql://localhost/graffitotest?useServerPrepStmts=false
+org.apache.portals.graffito.test.database.driver = com.mysql.jdbc.Driver 
+org.apache.portals.graffito.test.database.user = root
 org.apache.portals.graffito.test.database.password = 
-org.apache.portals.graffito.test.jdbc.drivers.path=C:/Documents and Settings/Myself/.maven/repository/hsqldb/jars/hsqldb-1.8.0.RC11.jar
+org.apache.portals.graffito.test.jdbc.drivers.path=/home/christophe/.maven/repository/mysql/jars/mysql-connector-java-3.1.10-bin.jar
 
 
 # configure PRODUCTION DB
 
-org.apache.portals.graffito.production.database.default.name=hsql
+org.apache.portals.graffito.production.database.default.name=mysql
 org.apache.portals.graffito.production.jetspeed=true
-org.apache.portals.graffito.production.database.url = jdbc:hsqldb:hsql://127.0.0.1:9001
-org.apache.portals.graffito.production.database.driver = org.hsqldb.jdbcDriver
-org.apache.portals.graffito.production.database.user = sa
+org.apache.portals.graffito.production.database.url = jdbc:mysql://localhost/j2?useServerPrepStmts=false
+org.apache.portals.graffito.production.database.driver = com.mysql.jdbc.Driver
+org.apache.portals.graffito.production.database.user = root
 org.apache.portals.graffito.production.database.password = 
-org.apache.portals.graffito.production.jdbc.drivers.path=C:/Documents and Settings/Myself/.maven/repository/hsqldb/jars/hsqldb-1.8.0.RC11.jar
+org.apache.portals.graffito.production.jdbc.drivers.path=/home/christophe/.maven/repository/mysql/jars/mysql-connector-java-3.1.10-bin.jar
 
 
 #Configue the Graffito Master OJB Store  - USED FOR THE UNIT TESTS
-org.apache.portals.graffito.database.ojb.platform=Hsqldb
+org.apache.portals.graffito.database.ojb.platform=MySQL
 org.apache.portals.graffito.database.ojb.datasource=java:comp/env/jdbc/graffitotest
 
+
+
 # ---------------------------------------------------------------------------------
-# JETSPEED 2 (only if you want to deploy into a Jetspeed 2 application)
+# JETSPEED 2
 # ---------------------------------------------------------------------------------
 
-org.apache.jetspeed.project.home=C:/JavaProjects/jakarta-jetspeed-2
-org.apache.jetspeed.server.home=C:/MyApplications/j2-m3/jakarta-tomcat-5.0.30
-org.apache.jetspeed.catalina.version.major=5
+org.apache.jetspeed.server.home=/home/christophe/myapplications/jetspeed-2
 org.apache.jetspeed.server.shared=${org.apache.jetspeed.server.home}/shared/lib/
 org.apache.jetspeed.deploy.war.dir=${org.apache.jetspeed.server.home}/webapps/
-org.apache.jetspeed.services.autodeployment.user=j2deployer
-org.apache.jetspeed.services.autodeployment.password=j2deployer
+org.apache.jetspeed.services.autodeployment.user=j2
+org.apache.jetspeed.services.autodeployment.password=j2
+org.apache.jetspeed.catalina.version.major=5.5
 
-#C:/Documents and Settings/MySelf/.maven/repository/mysql/jars/mysql-connector-java-3.1.4-beta-bin.jar
-org.apache.jetspeed.test.jdbc.drivers.path=C:/Documents and Settings/Myself/.maven/repository/hsqldb/jars/hsqldb-1.8.0.RC11.jar
-org.apache.jetspeed.production.jdbc.drivers.path=C:/Documents and Settings/Myself/.maven/repository/hsqldb/jars/hsqldb-1.8.0.RC11.jar
+org.apache.jetspeed.project.home = /home/christophe/javaprojects/jetspeed2
+org.apache.jetspeed.portal.home = ${org.apache.jetspeed.project.home}
 
 
 # configure MySQL TEST DB
 
-org.apache.jetspeed.test.database.default.name=hsql
-org.apache.jetspeed.test.database.url = jdbc:hsqldb:hsql://127.0.0.1:9001
-org.apache.jetspeed.test.database.driver = org.hsqldb.jdbcDriver
-org.apache.jetspeed.test.database.user = sa
-org.apache.jetspeed.test.database.password =  
-org.apache.jetspeed.test.database.ojb.platform=Hsqldb
-
+org.apache.jetspeed.test.database.default.name=mysql
+org.apache.jetspeed.test.database.url = jdbc:mysql://localhost/j2test?useServerPrepStmts=false
+org.apache.jetspeed.test.database.driver = com.mysql.jdbc.Driver
+org.apache.jetspeed.test.database.user = root
+org.apache.jetspeed.test.database.password = 
+org.apache.jetspeed.test.jdbc.drivers.path= /home/christophe/.maven/repository/mysql/jars/mysql-connector-java-3.1.10-bin.jar
 
 # configure MySQL Production DB
 
-org.apache.jetspeed.production.database.default.name=hsql
-org.apache.jetspeed.production.database.url = jdbc:hsqldb:hsql://127.0.0.1:9001
-org.apache.jetspeed.production.database.driver = org.hsqldb.jdbcDriver
-org.apache.jetspeed.production.database.user = sa
-org.apache.jetspeed.production.database.password =
-org.apache.jetspeed.test.database.ojb.platform=Hsqldb
+
+org.apache.jetspeed.production.database.default.name=mysql
+org.apache.jetspeed.production.database.url = jdbc:mysql://localhost/j2?useServerPrepStmts=false
+org.apache.jetspeed.production.database.driver = com.mysql.jdbc.Driver
+org.apache.jetspeed.production.database.user = root
+org.apache.jetspeed.production.database.password = 
+org.apache.jetspeed.production.jdbc.drivers.path= /home/christophe/.maven/repository/mysql/jars/mysql-connector-java-3.1.10-bin.jar
+

Modified: incubator/graffito/trunk/site/xdocs/build.xml
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/site/xdocs/build.xml?rev=374514&r1=374513&r2=374514&view=diff
==============================================================================
--- incubator/graffito/trunk/site/xdocs/build.xml (original)
+++ incubator/graffito/trunk/site/xdocs/build.xml Thu Feb  2 13:39:58 2006
@@ -30,7 +30,7 @@
 </p>
 <ul>
   <li><a href="http://ant.apache.org/bindownload.cgi">Ant 1.5</a> or higher</li>
-  <li><a href="http://maven.apache.org/start/download.html">Maven 1.0</a> or higher</li>
+  <li><a href="http://maven.apache.org/start/download.html">Maven 1.0</a> or higher. Maven 2.x is not yet supported.</li>
   <li>Java 1.4.2_02 or higher</li>
 </ul>
 </subsection>
@@ -145,8 +145,10 @@
 
 <subsection name='5. Building Graffito'>
 	<p>
+	   <ul>	
 	      <li>Check if your DB is correctly running.</li>
 	      <li>Execute <code>maven allClean allBuild</code> on the Graffito root directory (trunk folder).</li>
+      </ul>   
 	</p>
 </subsection>
 </section>

Modified: incubator/graffito/trunk/site/xdocs/deploy.xml
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/site/xdocs/deploy.xml?rev=374514&r1=374513&r2=374514&view=diff
==============================================================================
--- incubator/graffito/trunk/site/xdocs/deploy.xml (original)
+++ incubator/graffito/trunk/site/xdocs/deploy.xml Thu Feb  2 13:39:58 2006
@@ -28,12 +28,12 @@
 	<p>Please review your ${USER_HOME}/<code>build.properties</code> file with the properties found in the sample file <a href="build.properties.txt">here</a> (See the Jetspeed 2 section) .</p>
 	
 </subsection>	
-<subsection name="Get the Jetspeed 2 M3 distribution">
+<subsection name="Get the Jetspeed 2.O distribution">
 <ul>
-  <li>Get and install Jetspeed 2 M3. The M3 distribution can be found  <a href="http://www.apache.org/dyn/closer.cgi">here</a>.
-      This distribution contains Tomcat and the Jetspeed 2 demo application.
-	  Don't use the lastest Jetspeed code from SVN.</li>
-  <li>If you want to change the database, read carefully the instructions found into the J2 M3 distribution. 
+  <li>Get and install Jetspeed 2.O . The official 2.0 distribution can be found  <a href="http://portals.apache.org/jetspeed2/download.html">here</a>.
+      This distribution contains Tomcat and the Jetspeed 2 demo application. Don't use the lastest Jetspeed code from SVN.
+   </li>
+  <li>If you want to change the database, read carefully the instructions found into the J2.O distribution. 
       Check if your database is supported on <a href="supported-db.html">this page</a>.</li>
   
 </ul>
@@ -48,7 +48,7 @@
 <subsection name='Start Jetpseed on tomcat'>
 	<ul>
 	      <li>Start Tomcat and connect to jetspeed with <code>http://localhost:8080/jetspeed</code>.</li>
-		  <li>Login as "admin" with password "admin". This is the only user that can manage the Graffito content. 
+		  <li>Login as "admin" with password "admin". This is the only user that can manage the Graffito content.In this demo, others users can only read the content
 		      If needed, you can add new permissions in the Browser Portlet.</li>
 		  
 	</ul>

Modified: incubator/graffito/trunk/site/xdocs/images/graffito_architecture.jpg
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/site/xdocs/images/graffito_architecture.jpg?rev=374514&r1=374513&r2=374514&view=diff
==============================================================================
Binary files - no diff available.

Modified: incubator/graffito/trunk/site/xdocs/maven-goals.xml
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/site/xdocs/maven-goals.xml?rev=374514&r1=374513&r2=374514&view=diff
==============================================================================
--- incubator/graffito/trunk/site/xdocs/maven-goals.xml (original)
+++ incubator/graffito/trunk/site/xdocs/maven-goals.xml Thu Feb  2 13:39:58 2006
@@ -53,9 +53,13 @@
 					<td>Deploy all subprojects into a Jetspeed 2 portal</td>
 				</tr>
 				<tr>
-					<td>allSite</td>
+					<td>allHtml</td>
 					<td>Build the complete Graffito site</td>
 				</tr>
+				<tr>
+					<td>allSite</td>
+					<td>Build the complete Graffito site and build the corresponding pdf file.</td>
+				</tr>
 				
 			</table>
 		
@@ -138,7 +142,7 @@
 				</tr>
 			</table>		
 		</subsection>
-		<subsection name = "Goals defined for the JSR-168 Portlet Application subproject" >
+		<subsection name = "Goals defined for each JSR-168 Portlet Application subproject" >
 			<table>
 				<tr>
 					<th>Goal</th>

Modified: incubator/graffito/trunk/site/xdocs/navigation.xml
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/site/xdocs/navigation.xml?rev=374514&r1=374513&r2=374514&view=diff
==============================================================================
--- incubator/graffito/trunk/site/xdocs/navigation.xml (original)
+++ incubator/graffito/trunk/site/xdocs/navigation.xml Thu Feb  2 13:39:58 2006
@@ -31,40 +31,38 @@
 		<menu name="Introduction">			
 			<item name="Overview" href="/index.html"/>
 			<item name="Use Cases" href="/usecases.html"/>
-			<item name="Technical overview" href="/tech-overview.html"/>						
 			<item name="Content Platform Features" href="/features.html"/>			
+			<item name="Technical overview" href="/tech-overview.html"/>
+			<item name="Directory Layout" href="/project-structure.html"/>				
 			<item name="News and Status" href="/news.html"/>
 			<item name="Roadmap" href="/roadmap.html"/>
 			<item name="Support" href="/support.html"/>
 		</menu>
 		
-		<menu name="Project Structure"> 
-			<!-- item name="Graffito Modules" href="/graffito-modules.html"/ -->
-			<item name="Directory Layout" href="/project-structure.html"/>				
-			<item name="Graffito Core API"     href="./api/index.html"/> 
-			<item name="Graffito JCR Mapping"     href="./jcr-mapping/index.html"/> 
+		<menu name="The Content Platform"> 
+			<item name="Architecture" href="/architecture.html"/>
+			<item name="Class diagrams" href="/class-diagrams.html"/>			
+			<item name="Build all Graffito subprojects" href="build.html"/>
+			<item name="Deploy Graffito into Jetspeed 2" href="deploy.html"/>
+			<item name="Supported DB" href="supported-db.html"/>			
+			<!-- item name="Graffito Content Store Setup" href="/store.html"/ -->
+			
+			<item name="Graffito Core API"     href="./api/index.html"/> 			
 			<item name="Graffito Components"     href="./components/index.html"/> 
-			<item name="Graffito Engine"     href="./engine/index.html"/> 
+			<!-- item name="Graffito Engine"     href="./engine/index.html"/ --> 
 		</menu>
 		
-		<menu name="Getting Started">
-			<item name="Build all Graffito subprojects" href="build.html"/>
-			<item name="Supported DB" href="supported-db.html"/>
-			<item name="Deploy Graffito into Jetspeed 2" href="deploy.html"/>
+		<menu name="The JCR Tools">
+			<item name="Graffito JCR Mapping"   href="./jcr-mapping/index.html"/> 
 		</menu>
 		
 		<menu name="Screenshots">
 			<item name="Portlets" href="/portlet-screenshots.html"/>
 		</menu>			
-		
-		<menu name="Design">
-			<item name="Architecture" href="/architecture.html"/>
-			<item name="Class diagrams" href="/class-diagrams.html"/>
-		</menu>
-		
-		<menu name="Tech. Doc">
+				
+		<menu name="Misc.">
 			<item name="Maven goals" href="/maven-goals.html"/>
-			<item name="Graffito Content Store Setup" href="/store.html"/>
+			
 		</menu>
 
 	</body>

Modified: incubator/graffito/trunk/site/xdocs/project-structure.xml
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/site/xdocs/project-structure.xml?rev=374514&r1=374513&r2=374514&view=diff
==============================================================================
--- incubator/graffito/trunk/site/xdocs/project-structure.xml (original)
+++ incubator/graffito/trunk/site/xdocs/project-structure.xml Thu Feb  2 13:39:58 2006
@@ -57,15 +57,6 @@
 		     <td>jetspeed2-deploy</td>
 		     <td>Configurations files specific for the Jetspeed 2 deployment.</td>
 	    </tr>
-	    <tr>
-		    <td>doc</td>
-		    <td>Draft documents which are not yet in the Graffito site.</td>
-	    </tr>
-	    
-	    <tr>
-		     <td>site</td>
-		     <td>Graffito Web Site.</td>
-	    </tr>
 	</table>
 	
 	<p>The JCR Tools can be found in the following directories.</p>

Modified: incubator/graffito/trunk/site/xdocs/tech-overview.xml
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/site/xdocs/tech-overview.xml?rev=374514&r1=374513&r2=374514&view=diff
==============================================================================
--- incubator/graffito/trunk/site/xdocs/tech-overview.xml (original)
+++ incubator/graffito/trunk/site/xdocs/tech-overview.xml Thu Feb  2 13:39:58 2006
@@ -27,7 +27,7 @@
 			  	<ol>
 				  <li>The Persistence Layer : providing an access to different content repositories (based on JCR or a proprietary API) </li>
 				  <li>The Service Layer : offering common features like taxonomy, access control, version control, search, ... . If needed, you can create your own services or modify the existing service implementations.</li>
-				  <li>The Graffito modules/application layer. It is also possible to create your own application. This layer is not yet implemented. </li>
+				  <li>The Graffito modules/applications. It is also possible to create your own application. This layer is not yet implemented. </li>
 				  
 			  	</ol>
 				</p>