Hey Guys,
I generated the beans and wrote a little tutorial / trace of how I did it.
However before we get really deep into it, maybe someone would care to test out
these steps to make sure they work elsewhere. The end result will be a maven
project containing the intefaces and implementation of all the configuration
beans. The trace below will just get longer, and I personally like information
in little chunck, so I'll start sharing early.
Here's the trace:
Note that this step is necessary to generate the server.xml schema:
------------------------------------------------------------------
svn checkout
http://svn.apache.org/repos/asf/directory/apacheds/trunk-with-dependencies
cd trunk-with-dependencies
mvn install
------------------------------------------------------------------
The remaining steps are necessary to generate the Configuration Implementation
from the schema:
mvn archetype:create -DartifactId=emf.configuration
-DgroupId=org.apache.directory
cd emf.configuration
mvn eclipse:eclipse
import project into eclipse:
File > Import ...
Configure the Maven Compiler:
=================================================================
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
=================================================================
Add the EMF Maven Repository to the POM
=================================================================
<repositories>
<repository>
<id>emf-maven-mirror</id>
<url>
http://mirrors.cat.pdx.edu/eclipse/tools/emf/maven2/
</url>
</repository>
</repositories>
=================================================================
Add the EMF Dependencies to the POM (Note that not all of these
are necessary, but I need to experiment more to find out which
ones can be pruned):
=================================================================
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>ant</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>codegen</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>codegen-ecore</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>codegen-ecore-ui</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>codegen-ui</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>common</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>commonj-sdo</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>common-ui</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>converter</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>ecore</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>ecore-change</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>ecore-change-edit</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>ecore-edit</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>ecore-sdo</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>ecore-sdo-edit</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>ecore-xmi</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>edit</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>edit-ui</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>emf</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>exporter</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>importer</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>importer-ecore</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>importer-java</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>importer-rose</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>mapping</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>mapping-ecore2ecore</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>mapping-ecore2ecore-editor</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>mapping-ecore2xml</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>mapping-ecore2xml-ui</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>mapping-ui</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>mapping-xsd2ecore</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>mapping-xsd2ecore-editor</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.xsd</groupId>
<artifactId>ecore-exporter</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.xsd</groupId>
<artifactId>ecore-importer</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.xsd</groupId>
<artifactId>edit</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.xsd</groupId>
<artifactId>xsd</artifactId>
<version>2.3.0</version>
</dependency>
=================================================================
Run mvn eclipse:eclipse again to update the project's dependencies
Create a model directory under the root project directory:
mkdir emf.configuration/model
Place the server.xml schema generated during the build in the model directory.
It's located here:
trunk-with-dependencies/apacheds/apacheds-xbean-spring/target/xbean/apacheds-xbean-spring.xsd
Now for this next step make sure you have EMF installed in the Eclipse
workbench.
Then do:
File > New > Other > Eclipse Modeling Framework > EMF Model
Now in the EMF Model Dialog select the emf.configuration/model directory
Name the model configuration.genmodel (This is the model that we will use to
generate the beans)
Next
Select XML Schema For the Model Importer
Next
Select the apacheds-xbean-spring.xsd file as the source file for the model
Finish
RESULT
=================================================================
The files:
emf.configuration/model/_1.ecore
emf.configuration/model/configuration.genmodel
Are now created.
=================================================================
Double click on configuration.genmodel
This opens it in the genmodel editor that's part of emf.
We need to make a change to the genmodel so the code gets
generated into src/main/java, instead of the root of the
project directory.
Double click on the root element in the genmodel editor
such that the properties dialog opens up.
In the properties dialog, go down to the model section and
expand it. See the property called "model directory" that
is set to "/emf.configuration/src". Change it to:
"/emf.configuration/src/main/java"
Now right click on the Configuration node (Top level) in the
genmodel editor and select "Generate Model Code".
This will generate interfaces and interface implementations for
all the elements in the original schema.
Have a look in
org.apache.config_1
and
org.apache.config_1.impl
The interfaces are in the first.
The implementation in the second.
Notice that intefaces have the Schema element name,
and the impleentation has the "Impl" postfix.
Notice that the _1 is used as prefixes
in the names of java files and in the package
naming. EMF Source this from the original schema.
We should update this so that it's set to a more sensible value.
Have a look at the classes and intefaces. Do these look
OK?
If there are errors in the project, run mvn eclipse:eclipse and refresh and
that should take care of it.
That's the implementation. Now we just need to create an instance of the root
container (The container for all of the beans), serialize it, and we have an
instance of server.xml.
I'll start on that next, as well as showing how to read it, etc.
Cheers,
- Ole