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 [2/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...

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe20.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe20.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe20.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe20.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>Creating Metadata OID Values</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 Metadata OID Values</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Use the model package namespace.</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+    			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.
+  				
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe21.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe21.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe21.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe21.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,75 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Creating an LDAP Syntax 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 LDAP Syntax Entry</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Use JNDI</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+  				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/>
+    			
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe22.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe22.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe22.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe22.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,65 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Creating an LDAP AttributeType Metadata 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 LDAP AttributeType Metadata Entry</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Use JNDI</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+    			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/>
+    			
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe23.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe23.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe23.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe23.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,185 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Creating an LDAP Metadata ObjectClass 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 LDAP Metadata ObjectClass Entry</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Use JNDI</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+    			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.
+    			
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe24.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe24.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe24.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/2/recipe24.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,66 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Writing EPackage Metadata</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>Writing EPackage Metadata</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>See Related Challenges</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+				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/>
+				
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe30.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe30.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe30.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe30.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,38 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Creating 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 the Model's EPackage</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Use EcoreFactory.eINSTANCE.createEPackage()</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+	            <br/>
+	            <br/>
+	            <pre class="codeblock"> EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage()</pre>
+	            <br/>
+	            <br/>
+	            
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe31.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe31.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe31.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe31.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,44 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Restoring EPackage State</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>Restoring EPackage State</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Restore from Configuration File</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+				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.
+	            
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe32.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe32.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe32.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe32.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,39 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Setting the EPackage Namespace Prefix</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>Setting the EPackage Namespace Prefix</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Retrieve it from the DAS configuration file</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+				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.
+	            
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe33.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe33.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe33.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe33.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,38 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Setting the EPackage Namespace</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>Setting the EPackage Namespace</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Retrieve it from the DAS configuration file</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+				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.
+	            
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe34.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe34.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe34.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe34.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,54 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Obtaining the Name of the DataObject's EClassifier</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>Obtaining the Name of the DataObject's EClassifier</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Use the RDN</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+		            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.
+	            
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe35.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe35.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe35.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe35.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,39 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Creating a Named Instance of the DataObject's EClassifier</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 Named Instance of the DataObject's EClassifier</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Use EcoreFactory.eINSTANCE.createEClass()</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+		            <pre class="codeblock">
+ EClass eClass = EcoreFactory.eINSTANCE.createEClass();
+ eClass.setName(name)
+		            </pre>
+		            <br/>
+		            <br/>
+	            
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe36.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe36.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe36.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe36.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>Creating the EClassifier's EAttributes</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 the EClassifier's EAttributes</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Retrieve them from the DataObject's ObjectClass</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+					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/>
+		            
+		            
+		            
+	            
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe37.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe37.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe37.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe37.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,61 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Getting the DataObject's Complex Properties's Metadata</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>Getting the DataObject's Complex Properties's Metadata</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Use DirContext.getAttributes()</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+            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/>
+            
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe38.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe38.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe38.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe38.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,64 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Adding the SDO Type's EAttributes</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 the SDO Type's EAttributes</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Use the EAttributes Attributes Map</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+		            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/>
+	            
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe39.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe39.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe39.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/3/recipe39.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,64 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Adding the SDO Type's EReferences</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 the SDO Type's EReferences</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Use the EReferences Attributes Map</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+		            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/>
+	            
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/4/recipe40.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/4/recipe40.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/4/recipe40.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/4/recipe40.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,164 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Writing a DataGraph to ADS</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>Writing a DataGraph to ADS</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>
+				Use DAS.LDAP.write(eObject) [Just made it up]
+			</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+	            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/>
+	            
+				</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/4/recipe41.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/4/recipe41.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/4/recipe41.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/4/recipe41.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,93 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Creating an EReference Subcontext</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 EReference Subcontext</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>
+					Use the JNDI InitialContext bind Operation
+				</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+					
+		            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/>
+					
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/5/recipe50.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/5/recipe50.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/5/recipe50.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/5/recipe50.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 DataObject Instance</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 DataObject Instance</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Use the RDN from the current directory context</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+				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.
+	            
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/5/recipe51.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/5/recipe51.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/5/recipe51.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/5/recipe51.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,68 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Setting the DataObject's Simple Properties</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>Setting the DataObject's Simple Properties</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>Use DirContext.getAttributes()</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+		            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/>
+	            
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/5/recipe52.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/5/recipe52.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/5/recipe52.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/5/recipe52.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,33 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Setting the DataObject's Complex Properties</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>Setting the DataObject's Complex Properties</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p></p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>
+				
+	            
+			</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/x/recipex0.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/x/recipex0.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/x/recipex0.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/x/recipex0.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,32 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Creating the Prototype Project</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 the Prototype Project</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>
+				Run mvn archetype:create -DartifactId=das.ldap.prototype -DgroupId=org.apache.tuscany
+			</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p>null</p>
+
+</body>
+</html>
\ No newline at end of file

Added: directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/x/recipex1.html
URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/x/recipex1.html?view=auto&rev=526990
==============================================================================
--- directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/x/recipex1.html (added)
+++ directory/sandbox/oersoy/guides/das.ldap.design.documentation/target/html/recipes/x/recipex1.html Mon Apr  9 18:35:54 2007
@@ -0,0 +1,30 @@
+ 
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+  <title>Adding the EMF Dependencies to the Build</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 the EMF Dependencies to the Build</p>
+</div>
+
+<h2>Solution</h2>
+
+<div class="content">
+	<p>See Discussion</p>
+</div>
+
+<h2>Discussion</h2>
+
+<div class="content">
+<p></p>
+
+</body>
+</html>
\ No newline at end of file