You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by oe...@apache.org on 2007/04/10 03:36:00 UTC

svn commit: r526990 [1/2] - in /directory/sandbox/oersoy/guides/das.ldap.design.documentation: ./ META-INF/ source/ source/concepts/ source/concepts/0/ src/ src/main/ src/main/resources/ src/main/resources/css/ src/main/resources/images/ target/ target...

Author: oersoy
Date: Mon Apr  9 18:35:54 2007
New Revision: 526990

URL: http://svn.apache.org/viewvc?view=rev&rev=526990
Log:
Initial import.

Added:
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/META-INF/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/META-INF/MANIFEST.MF
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/about.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/org.apache.tuscany.das.ldap.design.documentation.toc.xml
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/plugin.xml
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/pom.xml
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/0/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/0/concepts00.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/0/concepts01.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/0/concepts02.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/recipes.xml
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/css/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/css/book.css
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/css/recipes.css
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/images/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/images/123.png   (with props)
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/classes/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/0/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/0/recipe00.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/0/recipe01.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/0/recipe02.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/1/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/1/recipe10.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/1/recipe11.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/1/recipe12.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe20.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe21.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe22.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe23.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe24.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe30.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe31.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe32.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe33.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe34.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe35.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe36.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe37.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe38.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe39.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/4/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/4/recipe40.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/4/recipe41.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/5/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/5/recipe50.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/5/recipe51.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/5/recipe52.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/6/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/7/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/x/
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/x/recipex0.html
    directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/x/recipex1.html

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/META-INF/MANIFEST.MF?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/META-INF/MANIFEST.MF (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/META-INF/MANIFEST.MF Mon Apr  9 18:35:54 2007
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-Name: %pluginName
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: %providerName
+Bundle-ManifestVersion: 2
+Bundle-Localization: plugin
+Bundle-SymbolicName: org.apache.tuscany.das.ldap.design.documentation; singleton:=true
+Require-Bundle: org.eclipse.help
+Bundle-Version: 1.0.0
+Eclipse-LazyStart: true
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/about.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/about.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/about.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/about.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,34 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+
+<h2>About This Content</h2>
+ 
+<p>February 12, 2007</p>	
+<h3>License</h3>
+
+<p>
+All content ("Content") in this plug-in is made available
+by the The Apache Software Foundation.  The Content is provided 
+under the terms and conditions of the Apache Public License Version 2.0 ("ASL")
+unless otherwise indicated.  A copy of the ASL can be obtained via the URL
+<a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a>.
+</p>
+
+<p>
+If the Content was obtained from a party other than the Apache Software Foundation, the Content is 
+being redistributed by that party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content.
+Contact the Redistributor or check the Redistributor's license if one was 
+provided with the Content.  Unless otherwise
+expressed below, the conditions and terms of the ASL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.apache.org/">http://www.apache.org</a>.
+</p>
+
+</body>
+</html>

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/org.apache.tuscany.das.ldap.design.documentation.toc.xml
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/org.apache.tuscany.das.ldap.design.documentation.toc.xml?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/org.apache.tuscany.das.ldap.design.documentation.toc.xml (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/org.apache.tuscany.das.ldap.design.documentation.toc.xml Mon Apr  9 18:35:54 2007
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+
+<toc label="LDAP DAS Design Guide">	
+			<topic label="Initializing the LDAP Servers">
+				<topic label="Adding Required Server Partitions" href="target/html/recipes/0/recipe00.html"/>
+				<topic label="Adding a Partition/Suffix to ApacheDS" href="target/html/recipes/0/recipe01.html"/>
+				<topic label="Creating an EPackage ObjectClass Schema Entry" href="target/html/recipes/0/recipe02.html"/>
+			</topic>	
+			<topic label="Initializing the DAS">
+				<topic label="Loading the Generator Model" href="target/html/recipes/1/recipe10.html"/>
+				<topic label="Providing the DAS With an Initial Context" href="target/html/recipes/1/recipe11.html"/>
+				<topic label="Creating a Subcontext for the Model's EPackage" href="target/html/recipes/1/recipe12.html"/>
+			</topic>	
+			<topic label="Writing DataGraph Metadata">
+				<topic label="Creating Metadata OID Values" href="target/html/recipes/2/recipe20.html"/>
+				<topic label="Creating an LDAP Syntax Entry" href="target/html/recipes/2/recipe21.html"/>
+				<topic label="Creating an LDAP AttributeType Metadata Entry" href="target/html/recipes/2/recipe22.html"/>
+				<topic label="Creating an LDAP Metadata ObjectClass Entry" href="target/html/recipes/2/recipe23.html"/>
+				<topic label="Writing EPackage Metadata" href="target/html/recipes/2/recipe24.html"/>
+			</topic>	
+			<topic label="Restoring DataGraph Metadata">
+				<topic label="Creating the Model's EPackage" href="target/html/recipes/3/recipe30.html"/>
+				<topic label="Restoring EPackage State" href="target/html/recipes/3/recipe31.html"/>
+				<topic label="Setting the EPackage Namespace Prefix" href="target/html/recipes/3/recipe32.html"/>
+				<topic label="Setting the EPackage Namespace" href="target/html/recipes/3/recipe33.html"/>
+				<topic label="Obtaining the Name of the DataObject's EClassifier" href="target/html/recipes/3/recipe34.html"/>
+				<topic label="Creating a Named Instance of the DataObject's EClassifier" href="target/html/recipes/3/recipe35.html"/>
+				<topic label="Creating the EClassifier's EAttributes" href="target/html/recipes/3/recipe36.html"/>
+				<topic label="Getting the DataObject's Complex Properties's Metadata" href="target/html/recipes/3/recipe37.html"/>
+				<topic label="Adding the SDO Type's EAttributes" href="target/html/recipes/3/recipe38.html"/>
+				<topic label="Adding the SDO Type's EReferences" href="target/html/recipes/3/recipe39.html"/>
+			</topic>	
+			<topic label="Writing a DataGraph">
+				<topic label="Writing a DataGraph to ADS" href="target/html/recipes/4/recipe40.html"/>
+				<topic label="Creating an EReference Subcontext" href="target/html/recipes/4/recipe41.html"/>
+			</topic>	
+			<topic label="Restoring a DataGraph">
+				<topic label="Creating a DataObject Instance" href="target/html/recipes/5/recipe50.html"/>
+				<topic label="Setting the DataObject's Simple Properties" href="target/html/recipes/5/recipe51.html"/>
+				<topic label="Setting the DataObject's Complex Properties" href="target/html/recipes/5/recipe52.html"/>
+			</topic>	
+			<topic label="Updating a DataGraph">
+			</topic>	
+			<topic label="Deleting a DataGraph">
+			</topic>	
+			<topic label="Prototype Setup">
+				<topic label="Creating the Prototype Project" href="target/html/recipes/x/recipex0.html"/>
+				<topic label="Adding the EMF Dependencies to the Build" href="target/html/recipes/x/recipex1.html"/>
+			</topic>
+</toc>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/plugin.xml
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/plugin.xml?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/plugin.xml (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/plugin.xml Mon Apr  9 18:35:54 2007
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin 
+	name="das.ldap.design.documentation"
+	id="org.apache.tuscany.das.ldap.design.documentation"
+	version = "1.0.0"
+	provider= "org.apache.tuscany">
+  <!-- ====================================================================== -->
+  <!-- Define primary TOC                                                     -->
+  <!-- ====================================================================== -->
+  <extension point="org.eclipse.help.toc">
+    <toc file="org.apache.tuscany.das.ldap.design.documentation.toc.xml" primary="true"/>
+  </extension>
+</plugin>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/pom.xml
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/pom.xml?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/pom.xml (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/pom.xml Mon Apr  9 18:35:54 2007
@@ -0,0 +1,27 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>org.apache.tuscany</groupId>
+	<artifactId>das.ldap.design.documentation</artifactId>
+	<version>1.0</version>
+	<packaging>infocenter.recipes.documentation</packaging>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven</groupId>
+				<artifactId>documentation.recipes.mojo</artifactId>
+				<extensions>true</extensions>
+				<version>1.0-SNAPSHOT</version>
+				<executions>
+					<execution>
+						<id>generate</id>
+						<goals>
+							<goal>generate</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+</project>

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/0/concepts00.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/0/concepts00.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/0/concepts00.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/0/concepts00.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,58 @@
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Partition</title>
+   	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+	<link href="../../../../src/main/resources/css/book.css" rel="stylesheet" type="text/css">
+	<link href="../../../../src/main/resources/css/recipes.css" rel="stylesheet" type="text/css">
+  </head>
+<body>
+
+<h2>Concept</h2>
+
+<div class="content">
+	<p>Partition</p>
+</div>
+
+<h2>Summary</h2>
+
+<div class="content">
+	<p>A <i>Partition</i> is the minimum segment/path needed to define a DN</p>
+</div>
+
+<h2>Description</h2>
+
+<div class="content">
+<p>
+
+
+A Partition is a container for a DIT 
+that has a named root / naming context
+(also referred to as the partition suffix)
+expressed using DN syntax.  For example, the
+ApacheDS 1.5 default configuration contains partitions
+named as follows:
+<br/>
+<br/>
+cn=schema
+ou=system
+dc=example, dc=org
+<br/>
+<br/>
+A Partition also refers to the implementation of the
+ApacheDS java interfaces that is used to
+store the DIT contained by the partition.
+<br/>
+<br/>
+Thus developers may create an user their own partition
+
+</p>
+
+<h2>Related Concepts</h2>
+<h4>Naming Context</h4>
+<h4>Base DN</h4>
+<h4>DN</h4>
+<h4>Entry</h4>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/0/concepts01.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/0/concepts01.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/0/concepts01.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/0/concepts01.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,57 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Directory Entry</title>
+   	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+	<link href="../../../../src/main/resources/css/book.css" rel="stylesheet" type="text/css">
+	<link href="../../../../src/main/resources/css/recipes.css" rel="stylesheet" type="text/css">
+  </head>
+<body>
+
+<h2>Concept</h2>
+
+<div class="content">
+	<p>Directory Entry</p>
+</div>
+
+<h2>Summary</h2>
+
+<div class="content">
+	<p></p>
+</div>
+
+<h2>Description</h2>
+
+<div class="content">
+<p>
+            
+            Suppose the root package of the SDO model has the following
+            namespace:
+
+            </br>
+            </br>
+            <pre class="codeblock">  http://com.example.org/users/accounts</pre>
+            </br>
+            </br>
+
+            Thus we make the initial context:
+
+            </br>
+            </br>
+            <pre class="codeblock">  cn=accounts, cn=users, cn=org, cn=example, cn=com</pre>
+            </br>
+            </br>
+
+            The model root (DocumentRoot, or some other Class representing the root)
+            will be stored in the LDAP repository using this initial context to reference
+            it.
+            
+</p>
+
+<h2>Related Concepts</h2>
+<h4>Naming Context</h4>
+<h4>Base DN</h4>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/0/concepts02.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/0/concepts02.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/0/concepts02.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/concepts/0/concepts02.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,57 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Directory Entry</title>
+   	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+	<link href="../../../../src/main/resources/css/book.css" rel="stylesheet" type="text/css">
+	<link href="../../../../src/main/resources/css/recipes.css" rel="stylesheet" type="text/css">
+  </head>
+<body>
+
+<h2>Concept</h2>
+
+<div class="content">
+	<p>Directory Entry</p>
+</div>
+
+<h2>Summary</h2>
+
+<div class="content">
+	<p></p>
+</div>
+
+<h2>Description</h2>
+
+<div class="content">
+<p>
+            
+            Suppose the root package of the SDO model has the following
+            namespace:
+
+            </br>
+            </br>
+            <pre class="codeblock">  http://com.example.org/users/accounts</pre>
+            </br>
+            </br>
+
+            Thus we make the initial context:
+
+            </br>
+            </br>
+            <pre class="codeblock">  cn=accounts, cn=users, cn=org, cn=example, cn=com</pre>
+            </br>
+            </br>
+
+            The model root (DocumentRoot, or some other Class representing the root)
+            will be stored in the LDAP repository using this initial context to reference
+            it.
+            
+</p>
+
+<h2>Related Concepts</h2>
+<h4>Naming Context</h4>
+<h4>Base DN</h4>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/recipes.xml
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/recipes.xml?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/recipes.xml (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/source/recipes.xml Mon Apr  9 18:35:54 2007
@@ -0,0 +1,1238 @@
+<?xml version="1.0" encoding="ASCII"?>
+<recipes xmlns="http://maven.apache.org/documentation/recipes/1.0.0"
+	label="LDAP DAS Design Guide">
+	<recipeGroup id="0" label="Initializing the LDAP Servers">
+		<recipe id="00">
+			<challenge>Adding Required Server Partitions</challenge>
+			<solution>Update the Servers Configuration File</solution>
+			<discussion>
+				<![CDATA[
+				TODO - Add link to ADS's partition concept.
+				<br/>
+				<br/>
+				Suppose the root instance of the SDO DataGraph
+				will be stored in an entry defined by the 
+				following DN:
+	            <pre class="codeblock">  DN: cn=accounts, cn=users, cn=example, cn=com</pre>
+				A partition associated with the RDN <i>cn=com</i>
+				will need to be added to the servers configuration
+				before the subcontext
+				<i>cn=example</i>
+				can be added programmatically, along the remaining subcontexts
+				required to compose the base DN.
+				<br/>
+				<br/>
+				The related challenges section contains
+				links describing how to add partitions
+				to various ldap servers.
+				<br/>
+				<br/>
+				In addition EPackage instance attributes are written
+				under the partition ou=ecore (For the EMF API - 
+				ou=xsd should probably be used for Tuscany) 
+				so this must be added whenever a new LDAP server is installed.
+	            ]]>
+			</discussion>
+			<relatedRecipeDescriptor id="01" />
+		</recipe>
+		<recipe id="01">
+			<challenge>Adding a Partition/Suffix to ApacheDS</challenge>
+			<solution>Update the Servers Configuration File</solution>
+			<discussion>
+				<![CDATA[
+			To add the partition <i>cn=com</i> 
+			locate the following xml block in ApacheDS's
+			server.xml configuration file:
+            <pre class="codeblock">
+ &lt;property name="contextPartitionConfigurations"&gt;
+   &lt;set&gt;
+     &lt;ref bean="examplePartitionConfiguration"/&gt;
+   &lt;/set&gt;
+ &lt;/property&gt;</pre>
+            <br/>
+			Add another ref element so that the 
+			xml block now looks like this:
+            <pre class="codeblock">
+ &lt;property name="contextPartitionConfigurations"&gt;
+   &lt;set&gt;
+     &lt;ref bean="examplePartitionConfiguration"/&gt;
+     &lt;ref bean="comPartitionConfiguration"/&gt;
+   &lt;/set&gt;
+ &lt;/property&gt;</pre>
+            <br/>
+			Then add another partition configuration
+			block below the partition configuration xml block
+			that looks like this:
+            <pre class="codeblock">
+&lt;bean id="examplePartitionConfiguration" 
+class="org.apache.directory.server.core.partition.impl.btree.MutableBTreePartitionConfiguration"&gt;
+    &lt;property name="name" value="example" /&gt;
+    &lt;property name="cacheSize" value="100"/&gt;
+    &lt;property name="suffix" value="dc=example,dc=com" /&gt;
+    &lt;property name="optimizerEnabled" value="true" /&gt;
+    &lt;property name="synchOnWrite" value="true" /&gt;
+    &lt;property name="indexedAttributes"&gt;
+      &lt;set&gt;
+        &lt;bean class="org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration"&gt;
+          &lt;property name="attributeId" value="dc" /&gt;
+          &lt;property name="cacheSize" value="100" /&gt;
+        &lt;/bean&gt;
+        ...
+        &lt;bean class="org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration"&gt;
+          &lt;property name="attributeId" value="objectClass" /&gt;
+          &lt;property name="cacheSize" value="100" /&gt;
+        &lt;/bean&gt;
+      &lt;/set&gt;
+    &lt;/property&gt;
+    &lt;property name="contextEntry"&gt;
+      &lt;value&gt;
+        objectClass: top
+        objectClass: domain
+        objectClass: extensibleObject
+        dc: example
+      &lt;/value&gt;
+    &lt;/property&gt;
+&lt;/bean&gt;</pre>
+			<br/>
+			The properties should be set as follows:
+            <pre class="codeblock">
+&lt;bean id="comPartitionConfiguration" 
+class="org.apache.directory.server.core.partition.impl.btree.MutableBTreePartitionConfiguration"&gt;
+    &lt;property name="name" value="com" /&gt;
+    &lt;property name="cacheSize" value="100"/&gt;
+    &lt;property name="suffix" value="dc=com" /&gt;
+    &lt;property name="optimizerEnabled" value="true" /&gt;
+    &lt;property name="synchOnWrite" value="true" /&gt;
+    &lt;property name="indexedAttributes"&gt;
+      &lt;set&gt;
+        &lt;bean class="org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration"&gt;
+          &lt;property name="attributeId" value="dc" /&gt;
+          &lt;property name="cacheSize" value="100" /&gt;
+        &lt;/bean&gt;
+        ...
+        &lt;bean class="org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration"&gt;
+          &lt;property name="attributeId" value="objectClass" /&gt;
+          &lt;property name="cacheSize" value="100" /&gt;
+        &lt;/bean&gt;
+      &lt;/set&gt;
+    &lt;/property&gt;
+    &lt;property name="contextEntry"&gt;
+      &lt;value&gt;
+        objectClass: top
+        objectClass: domain
+        objectClass: extensibleObject
+        dc: example
+      &lt;/value&gt;
+    &lt;/property&gt;
+&lt;/bean&gt;</pre>
+			<br/>
+			When the ApacheDS is restarted, the com 
+			partition will be loaded.
+			<br/>
+			<br/>
+			]]>
+			</discussion>
+		</recipe>
+		<recipe id="02">
+			<challenge>Creating an EPackage ObjectClass Schema Entry</challenge>
+			<solution>Run the server initialization script</solution>
+			<discussion>
+				<![CDATA[
+				The server initialization script is run to create
+				the EPackage ObjectClass entry.   
+				<br/>
+				<br/>
+				The script is tied to the implementation
+				of the SDO JSR, thus Apache Tuscany has one 
+				and Eclipse EMF has another.
+				<br/>
+				<br/>
+				The name of the EPackage ObjectClass
+				used to write the entry is
+				<i>org.eclipse.emf.ecore.EPackage</i>
+				<br/>
+				<br/>
+				The EPackage's ObjectClass has two AttributeTypes named:
+				<ul>
+					<li>org.eclipse.emf.ecore.EPackage.nsPrefix</li>
+					<li>org.eclipse.emf.ecore.EPackage.nsURI</li>
+				</ul>
+				These correspond to the namespace
+				of an XML Schema Instance, and 
+				the namespace prefix used for the 
+				namespace.
+				<br/>
+				<br/>
+	            ]]>
+			</discussion>
+		</recipe>
+	</recipeGroup>
+
+	<recipeGroup id="1" label="Initializing the DAS">
+		<recipe id="10">
+			<challenge>Loading the Generator Model</challenge>
+			<solution>Set the Required Parameters on the DASConfig Instance</solution>
+			<discussion>
+				<![CDATA[
+            The Generator Model is the model
+            used to generate static java interfaces
+            and implementations for the model's
+            DataObject instances.
+            <br/>
+            <br/>
+            When code generation is used to 
+            define the model classes, 
+            DASConfig.loadGeneratorModel() 
+            is used to load the generator resource
+            containing the code generation parameters.
+            <br/>
+            <br/>
+            When generating static java interfaces based 
+            on a model, the DAS uses the basePackage 
+            attribute and the prefix attribute defined
+            on the generator model to load the model's
+            classes.
+            <br/>
+            <br/>
+            In order to load the generator model
+            the following DASConfig properties must be set:
+            <ul>
+            <li>
+            </li>genModelName<li>
+            </li>jarName<li>
+            <li>repositoryBase</li>
+            </ul>
+            <br/>
+            <br/>
+            ]]>
+			</discussion>
+		</recipe>
+		<recipe id="11">
+			<challenge>Providing the DAS With an Initial Context</challenge>
+			<solution>Use the package namespace.</solution>
+			<discussion>
+				<![CDATA[
+				If the DAS is restoring the DataGraph using 
+				the dynamic SDO API then it retrieves the package
+				namespace from DASConfig.ePackageNamespace.
+	            <br/>
+	            <br/>
+	            If the DAS is using static java interfaces
+				then the DAS loads the generator
+	            model resource, and then gets the model package
+	            namespace from it.
+	            <br/>
+	            <br/>
+	            If the root package of the SDO model has the following
+	            namespace:
+	
+	            <pre class="codeblock">  http://example.com/users/accounts</pre>
+	            <br/>
+	
+	            The initial context is:
+	            <pre class="codeblock">  cn=Accounts, cn=users, cn=example, cn=com</pre>
+	            <br/>
+	            Note that the RDN is also the name of the root 
+	            DataObject's SDO Type, and is therefore capitalized.
+	            <br/>
+	            <br/>
+	            Also, the ObjectClass for each EClassifier in the model is fully
+	            namespaced, so the namespace must be prefixed onto the EClassifier's
+	            name, before the EClassifiers ObjectClass can be looked up.
+	            <br/>
+	            <br/>
+	            ]]>
+			</discussion>
+		</recipe>
+		<recipe id="12">
+			<challenge>Creating a Subcontext for the Model's EPackage</challenge>
+			<solution>Use Convention</solution>
+			<discussion>
+				<![CDATA[
+					If the initial context for model entries is 
+					
+					<pre class="codeblock"> cn=Accounts, cn=users, cn=example, cn=com</pre>
+					<br/>
+					
+					Then the DN used to store the model's EPackage instance is
+					<pre class="codeblock">cn="ePackage" cn=Accounts, cn=users, cn=example, cn=com, ou=ecore</pre>
+					<br/>
+					As a side note, the semantics that are used for writing LDAP metadata, such
+					as ObjectClasses, AttributeTypes, etc. are also used for
+					writing EPackage metadata.
+					<br/>
+					<br/>
+					Whenever a DataGraph is written it first checks
+					whether the entry for the EPackage metadata exists.
+					It only writes model metadata when the entry does not exist.
+					(TODO - Move to a DAS rules section...)
+					<br/>
+					<br/>
+            	]]>
+			</discussion>
+		</recipe>
+	</recipeGroup>
+	<recipeGroup id="2" label="Writing DataGraph Metadata">
+		<recipe id="20">
+			<challenge>Creating Metadata OID Values</challenge>
+			<solution>Use the model package namespace.</solution>
+			<discussion>
+				<![CDATA[
+    			TODO - Alex's checksum idea
+    			<br/>
+    			<br/>
+    			
+    			TODO - Add Emmanuel's Ascii charachter idea.
+    			<br/>
+    			<br/>
+    			The DAS will come with ApacheDS's PEN as the default
+    			PEN for creating new OID values.  Users will
+    			be able to change this value to their own PEN.
+    			Branch OIDs for LDAP Metadata categories (ObjectClasses,
+    			AttributeTypes, Syntaxes, etc.) will be automatically
+    			generated, if they have not been initialized by users.
+    			<br/>
+    			<br/>
+    			When enterprises wish to share LDAP metadata they
+    			must either configure the DAS with their own PEN
+    			or use their internet domain to qualify their 
+    			package namespace.  
+    			<br/>
+    			<br/>
+    			When users choose to use their internet
+    			domain namespace the DAS will either generate a checksum
+    			of it and add it to the
+    			corresponding OID branch or turn each character
+    			in the namespace into an ascii value.
+    			<br/>
+    			<br/>
+    			ApacheDS uses a trigger to create new OID values, which
+    			results in better performance and smaller OID values.
+  				]]>
+			</discussion>
+		</recipe>
+		<recipe id="21">
+			<challenge>Creating an LDAP Syntax Entry</challenge>
+			<solution>Use JNDI</solution>
+			<discussion>
+				<![CDATA[
+  				The <i>name</i> attribute of an LDAP
+  				Syntax entry corresponds
+  				to the <i>instanceClass</i> member of the SDO Type interface and
+  				EMF EDataType interface.
+  				<br/>
+  				<br/>
+  				The <i>description</i> attribute of an LDAP Syntax
+  				entry corresponds to the <i>name</i> member the SDO Type or 
+  				EMF EDataType interface.
+  				<br/>
+  				<br/>
+				A syntax entry also requires an OID. 
+  				A Private Enterprise Number (PEN), which can be
+  				obtained from IANA, is used to create such an ID.  
+  				The PEN is prefixed to a branch integer for Syntax entries,
+  				and combined with yet another integer forming a unique id
+  				for the Syntax entry.
+  				<br/>
+  				<br/>
+  				The following example shows how to define a 
+  				syntax entry for "java.lang.String" in ApacheDS:
+  				<br/>
+  				<br/>
+	            <pre class="codeblock">
+Attributes ldapAttributes = new AttributesImpl();
+Attribute objectClass = new AttributeImpl(
+	SystemSchemaConstants.OBJECT_CLASS_AT, 
+	"top" );
+objectClass.add( MetaSchemaConstants.META_TOP_OC );
+objectClass.add( MetaSchemaConstants.META_SYNTAX_OC );
+ldapAttributes.put( objectClass );
+ldapAttributes.put( MetaSchemaConstants.M_OID_AT, SOME_GLOBAL_OID );
+ldapAttributes.put( MetaSchemaConstants.M_NAME_AT,  "java.lang.String");
+ldapAttributes.put( MetaSchemaConstants.M_DESCRIPTION_AT, "EString" );
+
+String EStringSyntaxRDN = "MetaSchemaConstants.M_OID_AT + "=" + SOME_GLOBAL_OID;
+			    
+//With the current context being "ou=syntaxes,ou=schema"
+ctx.createSubcontext(EStringSyntaxRDN, ldapAttributes);
+	            </pre>
+    	        <br/>
+        	    <br/>
+    			]]>
+			</discussion>
+		</recipe>
+		<recipe id="22">
+			<challenge>Creating an LDAP AttributeType Metadata Entry</challenge>
+			<solution>Use JNDI</solution>
+			<discussion>
+				<![CDATA[
+    			An LDAP AttributeType entry corresponds to a named and typed 
+    			property of an SDO Type or EMF EClass.  It is equivalent
+    			to an EMF EAttribute instance that has its name and 
+    			eType properties set.
+    			<br/>
+  				<br/>
+  				Here's an example of how to create LDAP AttributeType
+  				for the baseDN member of org.tuscany.das.ldap.config.DASConfig:
+  				<br/>
+  				<br/>
+	            <pre class="codeblock">
+ Attributes ldapAttributes = new AttributesImpl();
+ Attribute objectClass = new AttributeImpl(
+	SystemSchemaConstants.OBJECT_CLASS_AT, 
+	"top" );
+ objectClass.add( MetaSchemaConstants.META_TOP_OC );
+ objectClass.add( MetaSchemaConstants.META_ATTRIBUTE_TYPE_OC );
+ ldapAttributes.put( objectClass );
+ ldapAttributes.put( MetaSchemaConstants.M_NAME_AT, "org.tuscany.das.ldap.config.DASConfig.baseDN");
+ ldapAttributes.put( MetaSchemaConstants.M_OID_AT, SOME_GLOBAL_OID );//A trigger in ApacheDS will add this.
+ ldapAttributes.put( MetaSchemaConstants.M_DESCRIPTION_AT, "baseDN" );
+ ldapAttributes.put( MetaSchemaConstants.M_EQUALITY_AT, "caseIgnoreMatch" );
+ ldapAttributes.put( MetaSchemaConstants.M_SINGLE_VALUE_AT, "FALSE" );
+ ldapAttributes.put( MetaSchemaConstants.M_USAGE_AT, "directoryOperation" );
+
+ String EStringSyntaxRDN = "MetaSchemaConstants.M_OID_AT + "=" + SOME_GLOBAL_OID;
+			    
+ //With the current context being "ou=attributeTypes,ou=schema"
+ ctx.createSubcontext(EStringSyntaxRDN, ldapAttributes);
+	            </pre>
+    	        <br/>
+        	    <br/>
+    			]]>
+			</discussion>
+		</recipe>
+		<recipe id="23">
+			<challenge>Creating an LDAP Metadata ObjectClass Entry</challenge>
+			<solution>Use JNDI</solution>
+			<discussion>
+				<![CDATA[
+    			An LDAP ObjectClass entry corresponds 
+    			to an SDO Type or EMF EClass instance.
+    			<br/>
+  				<br/>
+  				Here's an example of how to create an LDAP ObjectClass
+  				for the org.tuscany.das.ldap.config.DASConfig EClass, which
+  				assumes two simple properties called <i>baseDN</i> and 
+  				<i>optionalOPP</i>:
+	            <pre class="codeblock">
+Attributes ldapAttributes = new AttributesImpl();
+Attribute objectClass = new AttributeImpl(
+	SystemSchemaConstants.OBJECT_CLASS_AT, 
+	"top" );
+objectClass.add( MetaSchemaConstants.META_TOP_OC );
+objectClass.add( MetaSchemaConstants.META_ATTRIBUTE_TYPE_OC );
+ldapAttributes.put( objectClass );
+ldapAttributes.put( MetaSchemaConstants.M_NAME_AT, "org.tuscany.das.ldap.config.DASConfig");
+ldapAttributes.put( MetaSchemaConstants.M_DESCRIPTION_AT, "DASConfig");
+ldapAttributes.put( MetaSchemaConstants.M_TYPE_OBJECT_CLASS_AT, "STRUCTURAL" );
+ldapAttributes.put( MetaSchemaConstants.M_MUST_AT, "baseDN" );
+ldapAttributes.put( MetaSchemaConstants.M_MAY_AT, "optionalOPP" );
+
+String EStringSyntaxRDN = "MetaSchemaConstants.M_OID_AT + "=" + SOME_GLOBAL_OID;
+			    
+//With the current context being "ou=attributeTypes,ou=schema"
+ctx.createSubcontext(EStringSyntaxRDN, ldapAttributes);
+	            </pre>
+    	        <br/>
+        	    That was just a simple example to illustrate the process.
+        	    We need to perform a few more steps in order to have
+        	    a valid process.
+        	    <br/>
+        	    <br/>
+	            First we create a new ObjectClass and give it the name of the EClassifier
+	            instance and add it to a new instance of LDAP attributes.
+	            <pre class="codeblock">
+  Attributes ldapAttributes = new AttributesImpl();
+  Attribute objectClass = new AttributeImpl( SystemSchemaConstants.OBJECT_CLASS_AT, eClass.getName() );
+  objectClass.add( MetaSchemaConstants.META_TOP_OC );
+  objectClass.add( MetaSchemaConstants.META_OBJECT_CLASS_OC );
+  ldapAttributes.put( objectClass ); 
+	            </pre>
+	            <br/>
+
+            Then we need to add the EAttributes of the EClass to the LDAP attributes list.
+
+            <pre class="codeblock">
+  EList eAttributes = eClass.getEAllAttributes();
+  Iterator<EAttribute> eAttributeIterator = eAttributes.iterator();
+  while(eAttributeIterator.hasNext() )
+  {
+  	EAttribute eAttribute = eAttributeIterator.next();
+  	if ( eAttribute.isRequired() )
+  	{
+   	ldapAttributes.put( MetaSchemaConstants.M_MUST_AT, eAttribute.getName() ); 
+  	}
+  	else
+  	{
+  		ldapAttributes.put( MetaSchemaConstants.M_MAY_AT, eAttribute.getName() );
+  	}
+  }
+            </pre>
+
+            <br/>
+            Note the use of M_MUST_AT and M_MAY_AT.
+            When the eAttribute.isRequired() returns
+            true M_MUST_AT is used, otherwise 
+            M_MAY_AT is used.
+            <br/>
+			<br/>
+            For each EReference on the EClass, that is 
+            not a multiplicity many EReference,
+            another ldap attribute is created
+            using the following naming convention:
+
+            <pre class="codeblock">  EReference.getName() + "EReference"</pre>
+            <br/>
+            <br/>
+            
+            Note that when writing a DataGraph instance, 
+            the attribute value for a non multiplicity many
+            EReference AttributeType stores a boolean indicating 
+            whether the reference was set or not.  The DAS
+            only attempts to retrieve the reference if 
+            the value is true.
+            
+            <br/>
+            <br/>
+            
+            If the EReference is a multiplicity many
+            reference then the naming convention used
+            is:
+            
+            <pre class="codeblock">  EReference.getName() + "EReferenceMany"</pre>
+            <br/>
+            Note that when writing a DataGraph instance, 
+            the attribute value for a multiplicity
+            many EReference AttributeType stores
+            the size of the EList containing
+            the references.
+
+            <br/>
+            <br/>
+
+            The EReference AttributeType members of the 
+            ObjectClass are set
+            by iterating through all the 
+            EReferences of the EClass and adding them like
+            this:
+            
+            <pre class="codeblock">
+  EList eReferences = eClass.getEAllReferences();
+  Iterator<EReference> eReferenceIterator = references.iterator();
+  while(eReferenceIterator.hasNext() )
+  {
+  	EReference eReference = eReferenceIterator.next();
+  	if ( eReference.isRequired() )
+  	{
+  		if ( eReference.isMany() )
+  		{
+  			ldapAttributes.put( MetaSchemaConstants.M_MUST_AT, eReference.getName() +  "EReferenceMany");
+  		}
+  		else
+  		{
+  			ldapAttributes.put( MetaSchemaConstants.M_MUST_AT, eReference.getName() +  "EReference");
+  		}
+  	}
+  	else
+  	{
+  		if ( eReference.isMany() )
+  		{
+  			ldapAttributes.put( MetaSchemaConstants.M_MAY_AT, eReference.getName() +  "EReferenceMany");
+  		}
+  		else
+  		{
+  			ldapAttributes.put( MetaSchemaConstants.M_MAY_AT, eReference.getName() +  "EReference");
+  		}
+  	}
+  }
+            </pre>
+            <br/>
+            Note that M_MUST_AT is used when eReference.isRequired returns true,
+            and M_MAY_AT is used otherwise.
+
+            <br/>
+            <br/>
+            
+            For information on where the EReference instance
+            subcontext's are written see the Related Challenges
+            section.
+            
+            TODO - Add the "Creating an EReferenceSubcontext" Recipe.
+    			]]>
+			</discussion>
+		</recipe>
+		<recipe id="24">
+			<challenge>Writing EPackage Metadata</challenge>
+			<solution>See Related Challenges</solution>
+			<discussion>
+				<![CDATA[
+				First create a subcontext for the EPackage instance.
+				For this example we'll just assume that the subcontext's
+				RDN is <i>Accounts</i>. 
+				<br/>
+				<br/>
+				See the Related Challenges section for the 
+				process of obtaining a DN for an EPackage.  TODO - Point to the 
+				"Creating a Subcontext for the Model's EPackage"
+				recipe.
+				<br/>
+				<br/>
+	
+	            <pre class="codeblock">
+ //I just made the below ctx method stuff up..
+ //will correct when coding :-) 
+ DirContext rootContext = DirContext.createContexts("cn=ePackage, cn=Accounts, cn=users, cn=example, cn=com, ou=ecore");
+	            </pre>
+	            <br/>
+				
+				The ldap attributes storing the ObjectClass for the EPackage,
+				along with the values for the EPackage's EAttributes are then added 
+				like this:
+				<pre class="codeblock">
+  Attributes ldapAttributes = new AttributesImpl();
+  ldapAttributes.put(SystemSchemaConstants.OBJECT_CLASS_NAME, ePackageEClass.getFullyQualifiedName() );
+  ldapAttributes.put("org.eclipse.emf.ecore.EPackage.nsPrefix", ePackage.getNsPrefix() );            
+  ldapAttributes.put("org.eclipse.emf.ecore.EPackage.nsURI", ePackage.getNsURI() );    
+  ldapAttributes.put("org.eclipse.emf.ecore.EPackage.name", ePackage.getName() ); 
+  //I'm making this up too
+  ctx.addAttributes(ldapAttributes);
+  				</pre>
+	            <br/>
+	            <br/>
+				]]>
+			</discussion>
+		</recipe>
+	</recipeGroup>
+
+	<recipeGroup label="Restoring DataGraph Metadata" id="3">
+		<recipe id="30">
+			<challenge>Creating the Model's EPackage</challenge>
+			<solution>Use EcoreFactory.eINSTANCE.createEPackage()</solution>
+			<discussion>
+				<![CDATA[
+	            <br/>
+	            <br/>
+	            <pre class="codeblock"> EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage()</pre>
+	            <br/>
+	            <br/>
+	            ]]>
+			</discussion>
+		</recipe>
+		<recipe id="31">
+			<challenge>Restoring EPackage State</challenge>
+			<solution>Restore from Configuration File</solution>
+			<discussion>
+				<![CDATA[
+				Since the model instance's base DN is derived from the 
+				model root package's namespace, at the 
+				namespace must exist in the DAS's configuration file.
+				
+				<br/>
+            	<br/>
+            	The existance of an EPackage entry in the server
+            	is used to indicate to the DAS whether it needs to 
+            	write model metadata, hence the EPackage instance
+            	attribute values can also be retrieved from the
+            	server.
+	            ]]>
+			</discussion>
+		</recipe>
+		<recipe id="32">
+			<challenge>Setting the EPackage Namespace Prefix</challenge>
+			<solution>Retrieve it from the DAS configuration file</solution>
+			<discussion>
+				<![CDATA[
+				TODO - Also consider just creating the EPackage
+				directly from the configuration file.
+	            <pre class="codeblock"> ePackage.setNsPrefix(nsPrefix)</pre>
+	            <br/>
+				
+				TODO - Fragment path for retrieving from resource.
+	            ]]>
+			</discussion>
+		</recipe>
+		<recipe id="33">
+			<challenge>Setting the EPackage Namespace</challenge>
+			<solution>Retrieve it from the DAS configuration file</solution>
+			<discussion>
+				<![CDATA[
+				TODO - Also consider just creating the EPackage
+				directly from the configuration file.
+	            <pre class="codeblock"> ePackage.setNsURI(nsURI)</pre>
+	            <br/>
+				TODO - Fragment path for retrieving from resource.
+	            ]]>
+			</discussion>
+		</recipe>
+		<recipe id="34">
+			<challenge>Obtaining the Name of the DataObject's EClassifier</challenge>
+			<solution>Use the RDN</solution>
+			<discussion>
+				<![CDATA[
+		            By convention the name of the DataObject's EClassifier corresponds
+		            to the RDN of its entry, with the exception multiplicity many EReferences
+		            which are stored using the name of the EReference's EClass postfixed with their
+		            EList index number.  So for the RDN:
+		            
+		            <pre class="codeblock"> cn=PurchaseOrder</pre>
+		            <br/>
+		            
+		            stored in the variable poRDN, we would get our 
+		            EClass or Type name like this this:
+		
+		            <pre class="codeblock"> String eClassName = JNDIUtils.getClassName( poRDN );</pre>
+		            <br/>
+		            Note that the getClassName() method will need to capitalize the 
+		            first letter if the poRDN is the RDN of the base RDN.
+
+		            If the RDN has an index number on it like this:
+		
+		            <pre class="codeblock"> cn=PurchaseOrder1</pre>
+		            <br/>
+		            the index number 1 would also need to be stripped.
+	            ]]>
+			</discussion>
+		</recipe>
+		<recipe id="35">
+			<challenge>Creating a Named Instance of the DataObject's EClassifier</challenge>
+			<solution>Use EcoreFactory.eINSTANCE.createEClass()</solution>
+			<discussion>
+				<![CDATA[
+		            <pre class="codeblock">
+ EClass eClass = EcoreFactory.eINSTANCE.createEClass();
+ eClass.setName(name)
+		            </pre>
+		            <br/>
+		            <br/>
+	            ]]>
+			</discussion>
+		</recipe>
+		<recipe id="36">
+			<challenge>Creating the EClassifier's EAttributes</challenge>
+			<solution>Retrieve them from the DataObject's ObjectClass</solution>
+			<discussion>
+				<![CDATA[
+					First obtain the DN of the EClassifiers ObjectClass entry:
+					<pre class="codeblock"> String objectClassDN = "objectClass = " + rdn + ", ou=objectClasses, ou=schema";</pre>
+		            <br/>
+		        
+		            Then get a list of all the attributes contained in the DataObject's ObjectClass
+		            entry:
+
+		            <pre class="codeblock"> Attributes ldapAttributes = directoryContext.getAttributes(objectClassDN);</pre>
+		            <br/>
+		            
+		            Then clone it, because we need to create two 
+		            separate attribute lists.  One for complex type metadata (EReferences), and
+		            another for simple type metadata (EAttributes):
+
+		            <pre class="codeblock">Attributes ldapAttributesClone = ldapAttributes.clone();</pre>
+		            <br/>
+		            
+		            Then delete the objectClass attribute from the ldapAttributes map:
+		            
+		            <pre class="codeblock">ldapAttributes.remove(SystemSchemaConstants.OBJECT_CLASS_AT);</pre>
+		            <br/>
+		            <br/>
+		            
+		            Then remove all the attributes whose name contains the word EReference.
+		            
+		            <pre class="codeblock">TODO Code</pre>
+		            <br/>
+		            
+		            We now have a map whose values consist of the simple property names
+		            of each EAttribute with one exception.  These names
+		            are fully namespaced to avoid collisions when storing them
+		            in the directory server.  Therefore the namespace part of 
+		            the name, which includes the name of the EClassifier that 
+		            the EAttribute belongs to, must be removed
+		            and the resulting String used to set the name property of the
+		            corresponding EAttribute.  (TODO - Scratch the chopping part
+		            if we use the Description attribute on the Syntax entry).  In 
+		            addition the key for each name indicates whether the feature
+		            is required or not, so it is used to set the required property
+		            of the EAttribute.
+		            <br/>
+		            <br/>
+		            In order to set the EAttribute's eType member, the AttributeType Schema
+		            entry for each simple property name on the ObjectClass's attribute map is retrieved.
+		            The Description attribute contains the name of the EAttribute feature 
+		            (Since the AttributeType entry's name is fully namespaced).  This is used
+		            to check the model's EPackage to see whether the DataType for the EAttribute
+		            instance has been created already.  If it has it is used to set the EAttribute 
+		            instance's eType property.  Otherwise it needs to be created.
+
+		            <pre class="codeblock">
+    eAttribute  = EcoreFactory.eINSTANCE.createEAttribute();
+    if ( objectClassAttributes.getKey() == M_MUST)
+    {
+    	eAttribute.setRequired(true);
+    }
+   	//Get the AttributeType entry for the attribute
+   	attributeTypeDN         = getAttributeDN(objectClassAttribute.getValue());
+   	attributeTypeAttributes = ctx.getAttributes( attributeTypeDN );
+   	
+   	eAttribute.setName( attributeTypeAttributes.get(NAME_KEY) );
+   	
+   	//First check whether the datatype for the EAttribute exists on the 
+   	//EPackage
+   	
+   	
+   	DataType dataType = ModelPackage.eINSTANCE.getEClassifier(dataTypeName);
+   	
+   	if ( attributeDataType == null)
+   	{
+   		dataType = EcoreFactory.eINSTANCE.createDataType();
+   		String syntaxDN             = attributeTypeAttributes.get(SYNTAX_OID);
+   		Attributes syntaxAttributes = ctx.getAttributes(syntaxDN);
+   		String instanceType         = syntaxAttributes.get(DESCRIPTION);
+   		String name                 = syntaxAttributes.get(NAME);
+   		
+   		dataType.setName(name);
+   		dataType.setInstanceType(instanceType);
+   		ModelPackage.eINSTANCE.eClassifiers.add(dataType);
+   	}
+   	eAttribute.setEType(attributeDataType);
+		            </pre>
+		            <br/>
+		            <br/>
+		            
+		            <br/>
+		            <br/>
+		            
+		            
+		            
+	            ]]>
+			</discussion>
+		</recipe>
+		<recipe id="37">
+			<challenge>Getting the DataObject's Complex Properties's Metadata</challenge>
+			<solution>Use DirContext.getAttributes()</solution>
+			<discussion>
+				<![CDATA[
+            First get a list of all the attributes contained in the entry:
+            <br/>
+            <br/>
+            <pre class="codeblock">Attributes ldapAttributes = directoryContext.getAttributes(dataObjectDN);</pre>
+            <br/>
+            <br/>
+
+            Then delete the objectClass(es) attribute(s) from the ldapAttributes map:
+            
+            <br/>
+            <br/>
+            <pre class="codeblock">ldapAttributes.remove(SystemSchemaConstants.OBJECT_CLASS_AT);</pre>
+            <br/>
+            <br/>
+            
+            Then if the attribute's name does not contain the String "EReference", 
+            we remove it.
+            
+            <br/>
+            <br/>
+            <pre class="codeblock">TODO Code</pre>
+            <br/>
+            <br/>
+            
+            We now have a map of the complex property names and their corresponding
+            meta data values.
+            <br/>
+            <br/>
+            ]]>
+			</discussion>
+		</recipe>
+		<recipe id="38">
+			<challenge>Adding the SDO Type's EAttributes</challenge>
+			<solution>Use the EAttributes Attributes Map</solution>
+			<discussion>
+				<![CDATA[
+		            For each ldapAttribute in an ObjectClass entry, the DAS first creates 
+		            an EAttribute instance, if one has not already been created 
+		            and added to the model's EPackage.
+					<pre class="codeblock"> EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute(); </pre>
+		            <br/>
+		            <br/>
+		            The EAttribute requires a DataType instance in order 
+		            to set the EAttribute's eType property, so the DAS
+		            uses the attributeType's Description attribute
+		            to lookup the DataType on the EPackage.  If the
+		            DataType returned is null, the DAS creates 
+		            the DataType and adds it to the EPackage.
+		            <br/>
+		            <br/>
+		            The EAttribute instance's name is set to the 
+		            value of the description attribute of the AttributeType.
+		            <br/>
+		            <br/>
+		            If the EAttribute instance is a multiplicity
+		            many EAttribute, indicated by MetaSchemaConstants.M_SINGLE_VALUE_AT
+		            property of the attributeType being set to false, the
+		            EAttribute's upperBound property is set to "-1".
+		            <br/>
+		            <br/>
+		            Lastly if the attributeType is a  
+		            MetaSchemaConstants.M_MUST_AT attribute,
+		            indicated by the key used to set it on the SDO Type's
+		            ObjectClass,
+		            then the EAttribute required property is set to true.
+		            <br/>
+		            <br/>
+	            ]]>
+			</discussion>
+		</recipe>
+		<recipe id="39">
+			<challenge>Adding the SDO Type's EReferences</challenge>
+			<solution>Use the EReferences Attributes Map</solution>
+			<discussion>
+				<![CDATA[
+		            For each ldapAttribute in an ObjectClass entry, the DAS first creates 
+		            an EAttribute instance, if one has not already been created 
+		            and added to the model's EPackage.
+					<pre class="codeblock"> EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute(); </pre>
+		            <br/>
+		            <br/>
+		            The EAttribute requires a DataType instance in order 
+		            to set the EAttribute's eType property, so the DAS
+		            uses the attributeType's Description attribute
+		            to lookup the DataType on the EPackage.  If the
+		            DataType returned is null, the DAS creates 
+		            the DataType and adds it to the EPackage.
+		            <br/>
+		            <br/>
+		            The EAttribute instance's name is set to the 
+		            value of the description attribute of the AttributeType.
+		            <br/>
+		            <br/>
+		            If the EAttribute instance is a multiplicity
+		            many EAttribute, indicated by MetaSchemaConstants.M_SINGLE_VALUE_AT
+		            property of the attributeType being set to false, the
+		            EAttribute's upperBound property is set to "-1".
+		            <br/>
+		            <br/>
+		            Lastly if the attributeType is a  
+		            MetaSchemaConstants.M_MUST_AT attribute,
+		            indicated by the key used to set it on the SDO Type's
+		            ObjectClass,
+		            then the EAttribute required property is set to true.
+		            <br/>
+		            <br/>
+	            ]]>
+			</discussion>
+		</recipe>		
+	</recipeGroup>
+	
+	<recipeGroup label="Writing a DataGraph" id="4">
+		<recipe id="40">
+			<challenge>Writing a DataGraph to ADS</challenge>
+			<solution>
+				Use DAS.LDAP.write(eObject) [Just made it up]
+			</solution>
+			<discussion>
+				<![CDATA[
+	            Writing a DataGraph to ADS means writing all the 
+	            DataObjects contained in the graph.  If this is 
+	            first time an instance of the model is written,
+	            the model's EClassifiers must also be written
+	            in the form of LDAP ObjectClasses.
+	            
+	            <br/>
+	            <br/>
+	            
+	            To do this we first get the root DataObject
+	            in the DataGraph.
+	            
+	            <br/>
+	            <br/>
+	            <pre class="codeblock">  EObject eObjectRoot = resource.getEObject("//@accounts");</pre>
+	            <br/>
+	            <br/>
+	            
+	            We also create the Directory Context
+	            where this object will be stored
+	            (using the convention discussed in the 
+	            recipe TODO LINK RECIPE like this:
+	
+	            <pre class="codeblock">
+	  //I just made the below ctx method stuff up..
+	  //will correct when coding :-) 
+	  DirContext rootContext = DirContext.createContexts("cn=accounts, cn=users, cn=org, cn=example, cn=com");
+	            </pre>
+	            <br/>
+	            
+	            Then, if this is the first time a model instance is written, indicated
+	            by an non-existing entry for the model's EPackage, 
+	            we write the EPackage entry (TODO - Add recipe to challenges section)
+	            and then get the root object's type (EClass):
+	            
+	            <pre class="codeblock">  EClass eClass = eObjectRoot.eClass();</pre>
+	            <br/>
+	            
+	            Then we write the ObjectClass corresponding
+	            to this EClass to ADS (See Related Recipes - TODO ADD).
+	
+	            <br/>
+	            <br/>
+	            
+				Once the EClass's corresponding ObjectClass 
+				is added to ADS's schema we create a directory attributes list and 
+				add the EClass's ObjectClass name like this:
+				
+				<br/>
+	            <br/>
+	            <pre class="codeblock">
+	  Attributes ldapAttributes = new AttributesImpl();
+	  ldapAttributes.put(SystemSchemaConstants.OBJECT_CLASS_NAME, eClass.getFullyQualifiedName() );            
+				</pre>
+	            <br/>
+	            <br/>
+	            
+	            Then all the simple
+	            properties contained in the DataObject
+	            are added to the list of ldap attributes as follows:
+	            
+	            <pre class="codeblock">
+	EList<EAttribute> eAttributes = eClass.getEAllAttributes();
+	Iterator<EAttribute> attributeIterator = eAttributes.iterator();
+	while ( attributeIterator.hasNext() )
+	  {
+		  EAttribute eAttribute    = attributeIterator.next();
+		  if ( !eAttribute.isTransient() )
+		  {
+		  	EObject eAttributeObject = eObjectRoot.eGet(eAttribute);
+		  	ldapAttributes.put(eAttribute.getName(), eAttributeObject.toString() );
+		  }
+	  }
+	          </pre>
+	            <br/>
+	            <br/>
+	            
+	            We must also add the directory attributes that contain
+	            metadata (size() for multiplicity many EReferences and isSet() otherwise)
+	            for the EReferences (Complex properties) on the
+	            root object like this.
+	            
+	            <br/>
+	            <br/>
+	            <pre class="codeblock">
+	  EList<EReference> eReferences = eClass.getEAllReferences();
+	  Iterator<EReference> eReferenceIterator = eReferences.iterator();
+	  while ( eReferenceIterator.hasNext() )
+	  {
+		  EReference eReference    = eReferenceIterator.next();
+		  if (eReference.isMany())
+		  {
+			  if ( eObjectRoot.isSet(eReference) )
+			  {
+				  EList eReferenceList = eObjectRoot.eGet(eReference);
+	 		  ldapAttributes.put(eReference.getName() + "EReferenceMany", eReferenceList.size() );
+			  }
+			  else
+			  {
+				  ldapAttributes.put(eReference.getName() + "EReferenceMany", 0 );
+			  }
+		  }
+		  else
+		  {
+			  ldapAttributes.put(eReference.getName() + "EReference", eObjectRoot.isSet(eReference);
+		  }
+	  }
+	            </pre>
+	            <br/>
+	            <br/>
+	            
+	            Then we add the list of ldap attributes, effectively adding the 
+	            root DataGraph object, to the server:
+	            
+	            <br/>
+	            <br/>
+	            <pre class="codeblock">
+	  //I'm making this up too
+	  ctx.addAttributes(ldapAttributes);
+	            </pre>
+	            <br/>
+	            <br/>
+	            Finally we need to write the DataObject instances EReferences
+	            by first creating a subcontext for each EReference instance, then
+	            retrieving the DataObject the EReference points to, and then
+	            repeating the process we just did for the root DataObject until
+	            we get to the bottom of the DataGraph for all branches.
+	            <br/>
+	            <br/>
+	            ]]>
+				</discussion>
+			</recipe>
+	
+			<recipe id="41">
+				<challenge>Creating an EReference Subcontext</challenge>
+				<solution>
+					Use the JNDI InitialContext bind Operation
+				</solution>
+				<discussion>
+					<![CDATA[
+		            We need to establish a subcontext for each EReference.
+		            <br/>
+		            <br/>
+		            The subcontext naming convention used
+		            is 
+		            <br/>
+		            <br/>
+		            EReference.getName()
+		            <br/>
+		            <br/>
+		            if the EReference is not a multiplicity many
+		            EReference.
+		            <br/>
+		            <br/>
+		            If the EReference is a multiplicity many EReference,
+		            the convention used is: 
+		            <br/>
+		            <br/>
+		            EReference.getName() + index
+		            <br/>
+		            <br/>
+		            where index is an integer indicating 
+		            where the EReference is stored on the EList of its
+		            container.
+		            <br/>
+		            <br/>
+		            Thus if our root object is getEObject("//account");
+		            and it is stored here:
+		            <br/>
+		            <br/>
+		            DN: cn=accounts, cn=users, cn=org, cn=example, cn=com
+		            <br/>
+		            and it has an non multiplicity many EReference
+		            of type User named user, then user would be stored
+		            here:
+		            <br/>
+		            <br/>
+		            DN: cn=user, cn=accounts, cn=users, cn=org, cn=example, cn=com
+		            <br/>
+		            <br/>
+		            If User was a multiplicity many EReference, and its index was 0,
+		            it would be stored here:
+		            <br/>
+		            <br/>
+		            DN: cn=user0, cn=accounts, cn=users, cn=org, cn=example, cn=com
+		            <br/>
+		            <br/>
+		            So if there were 3 User EReferences stored on the multiplicity
+		            many User EReference, then they would be stored under the following
+		            contexts:
+		            <br/>
+		            <br/>
+		            DN: cn=user0, cn=accounts, cn=users, cn=org, cn=example, cn=com
+		            <br/>
+		            DN: cn=user1, cn=accounts, cn=users, cn=org, cn=example, cn=com
+		            <br/>
+		            DN: cn=user2, cn=accounts, cn=users, cn=org, cn=example, cn=com
+		            <br/>
+					]]>
+			</discussion>
+		</recipe>
+		
+	</recipeGroup>
+
+	<recipeGroup label="Restoring a DataGraph" id="5">
+		<recipe id="50">
+			<challenge>Creating a DataObject Instance</challenge>
+			<solution>Use the RDN from the current directory context</solution>
+			<discussion>
+				<![CDATA[
+				First get the model's Factory from the EPackage.
+	            <br/>
+	            <br/>
+	            <pre class="codeblock">EFactory eFactory = modelEPackage.getFactory()</pre>
+	            <br/>
+	            <br/>
+	            Then create an instance of the 
+	
+	            Therefore we can get our model root object like this:
+	
+	            <br/>
+	            <br/>
+	            <pre class="codeblock">  EObject eObject = eFactory.create("FileUtils.capitalize(rdnValue);</pre>
+	            <br/>
+	            <br/>
+	            
+	            Note that if the rdnValue corresponds to a multiplicity many
+	            EReference then the integer at the end of the rdnValue must
+	            be removed.
+	            ]]>
+			</discussion>
+		</recipe>
+		<recipe id="51">
+			<challenge>Setting the DataObject's Simple Properties</challenge>
+			<solution>Use DirContext.getAttributes()</solution>
+			<discussion>
+				<![CDATA[
+		            First get a list of all the attributes contained in the DataObject's entry:
+		            <pre class="codeblock">Attributes ldapAttributes = directoryContext.getAttributes(dataObjectDN);</pre>
+		            <br/>
+		            
+		            Then clone it, because we need both the complex type metadata, for 
+		            retrieving DataObject references, and the
+		            simple properties:
+		
+		            <br/>
+		            <br/>
+		            <pre class="codeblock">Attributes ldapAttributesClone = ldapAttributes.clone();</pre>
+		            <br/>
+		            <br/>
+		            
+		            Then delete the objectClass attribute from the ldapAttributes map:
+		            
+		            <br/>
+		            <br/>
+		            <pre class="codeblock">ldapAttributes.remove(SystemSchemaConstants.OBJECT_CLASS_AT);</pre>
+		            <br/>
+		            <br/>
+		            
+		            Then remove all the attributes whose name contains the word EReference.
+		            
+		            <br/>
+		            <br/>
+		            <pre class="codeblock">TODO Code</pre>
+		            <br/>
+		            <br/>
+		            
+		            We now have a map of the simple property names and their corresponding
+		            values.
+		            
+		            <br/>
+		            <br/>
+	            ]]>
+			</discussion>
+		</recipe>
+		
+		<recipe id="52">
+			<challenge>Setting the DataObject's Complex Properties</challenge>
+			<solution></solution>
+			<discussion>
+				<![CDATA[
+	            ]]>
+			</discussion>
+		</recipe>
+	</recipeGroup>
+	<recipeGroup label="Updating a DataGraph" id="6">
+	</recipeGroup>
+
+	<recipeGroup label="Deleting a DataGraph" id="7">
+	</recipeGroup>
+
+	<recipeGroup id="x" label="Prototype Setup">
+
+		<recipe id="x0">
+			<challenge>Creating the Prototype Project</challenge>
+			<solution>
+				Run mvn archetype:create -DartifactId=das.ldap.prototype -DgroupId=org.apache.tuscany
+			</solution>
+		</recipe>
+
+		<recipe id="x1">
+			<challenge>Adding the EMF Dependencies to the Build</challenge>
+			<solution>See Discussion</solution>
+			<discussion></discussion>
+		</recipe>
+	</recipeGroup>
+</recipes>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/css/book.css
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/css/book.css?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/css/book.css (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/css/book.css Mon Apr  9 18:35:54 2007
@@ -0,0 +1,106 @@
+body {
+  font-family: sans-serif;
+  font-size: 10pt;
+  background-color: white;
+  color: black;
+  max-width: 800px;
+}
+
+h1 {
+  font-size: 18pt;
+}
+
+h2 {
+  font-size: 16pt;
+}
+
+h3 {
+  font-size: 14pt;
+}
+
+h4 {
+  font-size: 12pt;
+}
+
+table {
+  font-size: 10pt;
+}
+
+th {
+  font-weight: bold;
+}
+
+kbd {
+  font-family: monospace;
+  font-weight: bold;
+}
+
+var {
+  font-style: italic;
+}
+
+ol {
+  margin-bottom: 1em;
+}
+
+dt {
+  font-weight: bold;
+  margin-top: 1em;
+}
+
+li {
+  margin-top: 1em;
+}
+
+span.control {
+  font-weight: bold;
+}
+
+span.name {
+  font-style: italic;
+  font-weight: bold;
+}
+
+span.action {
+  font-style: italic;
+}
+
+span.code {
+  font-family: monospace;
+}
+
+span.menu {
+  color: #660033;
+  font-weight: bold;
+}
+
+span.filefolder {
+  font-family: monospace;
+}
+
+blockquote {
+  background-color: #e8e8e8;
+  border: 1pt black;
+  margin: 2em; border: 1px solid black;
+  padding: 1em;
+}
+
+.tasks, .reference, .faq {
+  padding-left: 18px;
+  font-size: 14pt;
+  background-image:url(images/bullet14.png);
+  background-repeat: no-repeat;
+  background-position: left;
+ }
+
+
+pre
+{
+border-width:thin;
+border-style: solid;
+font-family: "Courier New", Courier, mono;
+font-style: normal;
+font-size: 12px;
+padding-top: 6px;
+padding-bottom: 6px;
+}
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/css/recipes.css
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/css/recipes.css?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/css/recipes.css (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/css/recipes.css Mon Apr  9 18:35:54 2007
@@ -0,0 +1,3 @@
+.notRequired {
+  color: #959595;
+}
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/images/123.png
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/images/123.png?view=auto&rev=526990
==============================================================================
Binary file - no diff available.

Propchange: directory/sandbox/oersoy/guides/das.ldap.design.documentation/src/main/resources/images/123.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/0/recipe00.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/0/recipe00.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/0/recipe00.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/0/recipe00.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,77 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Adding Required Server Partitions</title>
+   	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+	<link href="../../../../src/main/resources/css/book.css" rel="stylesheet" type="text/css">
+	<link href="../../../../src/main/resources/css/recipes.css" rel="stylesheet" type="text/css">
+  </head>
+<body>
+
+<h2>Challenge</h2>
+
+<div class="content">
+	<p>Adding Required Server Partitions</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Update the Servers Configuration File</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+				TODO - Add link to ADS's partition concept.
+				<br/>
+				<br/>
+				Suppose the root instance of the SDO DataGraph
+				will be stored in an entry defined by the 
+				following DN:
+	            <pre class="codeblock">  DN: cn=accounts, cn=users, cn=example, cn=com</pre>
+				A partition associated with the RDN <i>cn=com</i>
+				will need to be added to the servers configuration
+				before the subcontext
+				<i>cn=example</i>
+				can be added programmatically, along the remaining subcontexts
+				required to compose the base DN.
+				<br/>
+				<br/>
+				The related challenges section contains
+				links describing how to add partitions
+				to various ldap servers.
+				<br/>
+				<br/>
+				In addition EPackage instance attributes are written
+				under the partition ou=ecore (For the EMF API - 
+				ou=xsd should probably be used for Tuscany) 
+				so this must be added whenever a new LDAP server is installed.
+	            
+			</p>
+
+
+<h2>Related Challenges</h2>
+
+<table>
+	<tbody>
+		<tr>
+			<td>
+    			<a
+    				href="../0/recipe01.html">
+    				<img
+    					border="0" 
+    					title="Adding a Partition/Suffix to ApacheDS"
+    					alt="Adding a Partition/Suffix to ApacheDS"
+    					src="../../../../src/main/resources/images/123.png">
+    			</a>
+			</td>
+			<td>Adding a Partition/Suffix to ApacheDS</td>
+		</tr>
+	</tbody>
+</table>
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/0/recipe01.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/0/recipe01.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/0/recipe01.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/0/recipe01.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,123 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Adding a Partition/Suffix to ApacheDS</title>
+   	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+	<link href="../../../../src/main/resources/css/book.css" rel="stylesheet" type="text/css">
+	<link href="../../../../src/main/resources/css/recipes.css" rel="stylesheet" type="text/css">
+  </head>
+<body>
+
+<h2>Challenge</h2>
+
+<div class="content">
+	<p>Adding a Partition/Suffix to ApacheDS</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Update the Servers Configuration File</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+			To add the partition <i>cn=com</i> 
+			locate the following xml block in ApacheDS's
+			server.xml configuration file:
+            <pre class="codeblock">
+ &lt;property name="contextPartitionConfigurations"&gt;
+   &lt;set&gt;
+     &lt;ref bean="examplePartitionConfiguration"/&gt;
+   &lt;/set&gt;
+ &lt;/property&gt;</pre>
+            <br/>
+			Add another ref element so that the 
+			xml block now looks like this:
+            <pre class="codeblock">
+ &lt;property name="contextPartitionConfigurations"&gt;
+   &lt;set&gt;
+     &lt;ref bean="examplePartitionConfiguration"/&gt;
+     &lt;ref bean="comPartitionConfiguration"/&gt;
+   &lt;/set&gt;
+ &lt;/property&gt;</pre>
+            <br/>
+			Then add another partition configuration
+			block below the partition configuration xml block
+			that looks like this:
+            <pre class="codeblock">
+&lt;bean id="examplePartitionConfiguration" 
+class="org.apache.directory.server.core.partition.impl.btree.MutableBTreePartitionConfiguration"&gt;
+    &lt;property name="name" value="example" /&gt;
+    &lt;property name="cacheSize" value="100"/&gt;
+    &lt;property name="suffix" value="dc=example,dc=com" /&gt;
+    &lt;property name="optimizerEnabled" value="true" /&gt;
+    &lt;property name="synchOnWrite" value="true" /&gt;
+    &lt;property name="indexedAttributes"&gt;
+      &lt;set&gt;
+        &lt;bean class="org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration"&gt;
+          &lt;property name="attributeId" value="dc" /&gt;
+          &lt;property name="cacheSize" value="100" /&gt;
+        &lt;/bean&gt;
+        ...
+        &lt;bean class="org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration"&gt;
+          &lt;property name="attributeId" value="objectClass" /&gt;
+          &lt;property name="cacheSize" value="100" /&gt;
+        &lt;/bean&gt;
+      &lt;/set&gt;
+    &lt;/property&gt;
+    &lt;property name="contextEntry"&gt;
+      &lt;value&gt;
+        objectClass: top
+        objectClass: domain
+        objectClass: extensibleObject
+        dc: example
+      &lt;/value&gt;
+    &lt;/property&gt;
+&lt;/bean&gt;</pre>
+			<br/>
+			The properties should be set as follows:
+            <pre class="codeblock">
+&lt;bean id="comPartitionConfiguration" 
+class="org.apache.directory.server.core.partition.impl.btree.MutableBTreePartitionConfiguration"&gt;
+    &lt;property name="name" value="com" /&gt;
+    &lt;property name="cacheSize" value="100"/&gt;
+    &lt;property name="suffix" value="dc=com" /&gt;
+    &lt;property name="optimizerEnabled" value="true" /&gt;
+    &lt;property name="synchOnWrite" value="true" /&gt;
+    &lt;property name="indexedAttributes"&gt;
+      &lt;set&gt;
+        &lt;bean class="org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration"&gt;
+          &lt;property name="attributeId" value="dc" /&gt;
+          &lt;property name="cacheSize" value="100" /&gt;
+        &lt;/bean&gt;
+        ...
+        &lt;bean class="org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration"&gt;
+          &lt;property name="attributeId" value="objectClass" /&gt;
+          &lt;property name="cacheSize" value="100" /&gt;
+        &lt;/bean&gt;
+      &lt;/set&gt;
+    &lt;/property&gt;
+    &lt;property name="contextEntry"&gt;
+      &lt;value&gt;
+        objectClass: top
+        objectClass: domain
+        objectClass: extensibleObject
+        dc: example
+      &lt;/value&gt;
+    &lt;/property&gt;
+&lt;/bean&gt;</pre>
+			<br/>
+			When the ApacheDS is restarted, the com 
+			partition will be loaded.
+			<br/>
+			<br/>
+			
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/0/recipe02.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/0/recipe02.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/0/recipe02.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/0/recipe02.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,58 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Creating an EPackage ObjectClass Schema Entry</title>
+   	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+	<link href="../../../../src/main/resources/css/book.css" rel="stylesheet" type="text/css">
+	<link href="../../../../src/main/resources/css/recipes.css" rel="stylesheet" type="text/css">
+  </head>
+<body>
+
+<h2>Challenge</h2>
+
+<div class="content">
+	<p>Creating an EPackage ObjectClass Schema Entry</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Run the server initialization script</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+				The server initialization script is run to create
+				the EPackage ObjectClass entry.   
+				<br/>
+				<br/>
+				The script is tied to the implementation
+				of the SDO JSR, thus Apache Tuscany has one 
+				and Eclipse EMF has another.
+				<br/>
+				<br/>
+				The name of the EPackage ObjectClass
+				used to write the entry is
+				<i>org.eclipse.emf.ecore.EPackage</i>
+				<br/>
+				<br/>
+				The EPackage's ObjectClass has two AttributeTypes named:
+				<ul>
+					<li>org.eclipse.emf.ecore.EPackage.nsPrefix</li>
+					<li>org.eclipse.emf.ecore.EPackage.nsURI</li>
+				</ul>
+				These correspond to the namespace
+				of an XML Schema Instance, and 
+				the namespace prefix used for the 
+				namespace.
+				<br/>
+				<br/>
+	            
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/1/recipe10.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/1/recipe10.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/1/recipe10.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/1/recipe10.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,63 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Loading the Generator Model</title>
+   	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+	<link href="../../../../src/main/resources/css/book.css" rel="stylesheet" type="text/css">
+	<link href="../../../../src/main/resources/css/recipes.css" rel="stylesheet" type="text/css">
+  </head>
+<body>
+
+<h2>Challenge</h2>
+
+<div class="content">
+	<p>Loading the Generator Model</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Set the Required Parameters on the DASConfig Instance</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+            The Generator Model is the model
+            used to generate static java interfaces
+            and implementations for the model's
+            DataObject instances.
+            <br/>
+            <br/>
+            When code generation is used to 
+            define the model classes, 
+            DASConfig.loadGeneratorModel() 
+            is used to load the generator resource
+            containing the code generation parameters.
+            <br/>
+            <br/>
+            When generating static java interfaces based 
+            on a model, the DAS uses the basePackage 
+            attribute and the prefix attribute defined
+            on the generator model to load the model's
+            classes.
+            <br/>
+            <br/>
+            In order to load the generator model
+            the following DASConfig properties must be set:
+            <ul>
+            <li>
+            </li>genModelName<li>
+            </li>jarName<li>
+            <li>repositoryBase</li>
+            </ul>
+            <br/>
+            <br/>
+            
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/1/recipe11.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/1/recipe11.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/1/recipe11.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/1/recipe11.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,62 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Providing the DAS With an Initial Context</title>
+   	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+	<link href="../../../../src/main/resources/css/book.css" rel="stylesheet" type="text/css">
+	<link href="../../../../src/main/resources/css/recipes.css" rel="stylesheet" type="text/css">
+  </head>
+<body>
+
+<h2>Challenge</h2>
+
+<div class="content">
+	<p>Providing the DAS With an Initial Context</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Use the package namespace.</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+				If the DAS is restoring the DataGraph using 
+				the dynamic SDO API then it retrieves the package
+				namespace from DASConfig.ePackageNamespace.
+	            <br/>
+	            <br/>
+	            If the DAS is using static java interfaces
+				then the DAS loads the generator
+	            model resource, and then gets the model package
+	            namespace from it.
+	            <br/>
+	            <br/>
+	            If the root package of the SDO model has the following
+	            namespace:
+	
+	            <pre class="codeblock">  http://example.com/users/accounts</pre>
+	            <br/>
+	
+	            The initial context is:
+	            <pre class="codeblock">  cn=Accounts, cn=users, cn=example, cn=com</pre>
+	            <br/>
+	            Note that the RDN is also the name of the root 
+	            DataObject's SDO Type, and is therefore capitalized.
+	            <br/>
+	            <br/>
+	            Also, the ObjectClass for each EClassifier in the model is fully
+	            namespaced, so the namespace must be prefixed onto the EClassifier's
+	            name, before the EClassifiers ObjectClass can be looked up.
+	            <br/>
+	            <br/>
+	            
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/1/recipe12.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/1/recipe12.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/1/recipe12.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/1/recipe12.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,52 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Creating a Subcontext for the Model's EPackage</title>
+   	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+	<link href="../../../../src/main/resources/css/book.css" rel="stylesheet" type="text/css">
+	<link href="../../../../src/main/resources/css/recipes.css" rel="stylesheet" type="text/css">
+  </head>
+<body>
+
+<h2>Challenge</h2>
+
+<div class="content">
+	<p>Creating a Subcontext for the Model's EPackage</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Use Convention</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+					If the initial context for model entries is 
+					
+					<pre class="codeblock"> cn=Accounts, cn=users, cn=example, cn=com</pre>
+					<br/>
+					
+					Then the DN used to store the model's EPackage instance is
+					<pre class="codeblock">cn="ePackage" cn=Accounts, cn=users, cn=example, cn=com, ou=ecore</pre>
+					<br/>
+					As a side note, the semantics that are used for writing LDAP metadata, such
+					as ObjectClasses, AttributeTypes, etc. are also used for
+					writing EPackage metadata.
+					<br/>
+					<br/>
+					Whenever a DataGraph is written it first checks
+					whether the entry for the EPackage metadata exists.
+					It only writes model metadata when the entry does not exist.
+					(TODO - Move to a DAS rules section...)
+					<br/>
+					<br/>
+            	
+			</p>
+
+</body>
+</html>
\ No newline at end of file