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">
+ <property name="contextPartitionConfigurations">
+ <set>
+ <ref bean="examplePartitionConfiguration"/>
+ </set>
+ </property></pre>
+ <br/>
+ Add another ref element so that the
+ xml block now looks like this:
+ <pre class="codeblock">
+ <property name="contextPartitionConfigurations">
+ <set>
+ <ref bean="examplePartitionConfiguration"/>
+ <ref bean="comPartitionConfiguration"/>
+ </set>
+ </property></pre>
+ <br/>
+ Then add another partition configuration
+ block below the partition configuration xml block
+ that looks like this:
+ <pre class="codeblock">
+<bean id="examplePartitionConfiguration"
+class="org.apache.directory.server.core.partition.impl.btree.MutableBTreePartitionConfiguration">
+ <property name="name" value="example" />
+ <property name="cacheSize" value="100"/>
+ <property name="suffix" value="dc=example,dc=com" />
+ <property name="optimizerEnabled" value="true" />
+ <property name="synchOnWrite" value="true" />
+ <property name="indexedAttributes">
+ <set>
+ <bean class="org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration">
+ <property name="attributeId" value="dc" />
+ <property name="cacheSize" value="100" />
+ </bean>
+ ...
+ <bean class="org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration">
+ <property name="attributeId" value="objectClass" />
+ <property name="cacheSize" value="100" />
+ </bean>
+ </set>
+ </property>
+ <property name="contextEntry">
+ <value>
+ objectClass: top
+ objectClass: domain
+ objectClass: extensibleObject
+ dc: example
+ </value>
+ </property>
+</bean></pre>
+ <br/>
+ The properties should be set as follows:
+ <pre class="codeblock">
+<bean id="comPartitionConfiguration"
+class="org.apache.directory.server.core.partition.impl.btree.MutableBTreePartitionConfiguration">
+ <property name="name" value="com" />
+ <property name="cacheSize" value="100"/>
+ <property name="suffix" value="dc=com" />
+ <property name="optimizerEnabled" value="true" />
+ <property name="synchOnWrite" value="true" />
+ <property name="indexedAttributes">
+ <set>
+ <bean class="org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration">
+ <property name="attributeId" value="dc" />
+ <property name="cacheSize" value="100" />
+ </bean>
+ ...
+ <bean class="org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration">
+ <property name="attributeId" value="objectClass" />
+ <property name="cacheSize" value="100" />
+ </bean>
+ </set>
+ </property>
+ <property name="contextEntry">
+ <value>
+ objectClass: top
+ objectClass: domain
+ objectClass: extensibleObject
+ dc: example
+ </value>
+ </property>
+</bean></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">
+ <property name="contextPartitionConfigurations">
+ <set>
+ <ref bean="examplePartitionConfiguration"/>
+ </set>
+ </property></pre>
+ <br/>
+ Add another ref element so that the
+ xml block now looks like this:
+ <pre class="codeblock">
+ <property name="contextPartitionConfigurations">
+ <set>
+ <ref bean="examplePartitionConfiguration"/>
+ <ref bean="comPartitionConfiguration"/>
+ </set>
+ </property></pre>
+ <br/>
+ Then add another partition configuration
+ block below the partition configuration xml block
+ that looks like this:
+ <pre class="codeblock">
+<bean id="examplePartitionConfiguration"
+class="org.apache.directory.server.core.partition.impl.btree.MutableBTreePartitionConfiguration">
+ <property name="name" value="example" />
+ <property name="cacheSize" value="100"/>
+ <property name="suffix" value="dc=example,dc=com" />
+ <property name="optimizerEnabled" value="true" />
+ <property name="synchOnWrite" value="true" />
+ <property name="indexedAttributes">
+ <set>
+ <bean class="org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration">
+ <property name="attributeId" value="dc" />
+ <property name="cacheSize" value="100" />
+ </bean>
+ ...
+ <bean class="org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration">
+ <property name="attributeId" value="objectClass" />
+ <property name="cacheSize" value="100" />
+ </bean>
+ </set>
+ </property>
+ <property name="contextEntry">
+ <value>
+ objectClass: top
+ objectClass: domain
+ objectClass: extensibleObject
+ dc: example
+ </value>
+ </property>
+</bean></pre>
+ <br/>
+ The properties should be set as follows:
+ <pre class="codeblock">
+<bean id="comPartitionConfiguration"
+class="org.apache.directory.server.core.partition.impl.btree.MutableBTreePartitionConfiguration">
+ <property name="name" value="com" />
+ <property name="cacheSize" value="100"/>
+ <property name="suffix" value="dc=com" />
+ <property name="optimizerEnabled" value="true" />
+ <property name="synchOnWrite" value="true" />
+ <property name="indexedAttributes">
+ <set>
+ <bean class="org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration">
+ <property name="attributeId" value="dc" />
+ <property name="cacheSize" value="100" />
+ </bean>
+ ...
+ <bean class="org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration">
+ <property name="attributeId" value="objectClass" />
+ <property name="cacheSize" value="100" />
+ </bean>
+ </set>
+ </property>
+ <property name="contextEntry">
+ <value>
+ objectClass: top
+ objectClass: domain
+ objectClass: extensibleObject
+ dc: example
+ </value>
+ </property>
+</bean></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