You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by si...@apache.org on 2008/05/23 20:04:28 UTC

svn commit: r659611 - in /maven/sandbox/trunk/other/maven-project: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/maven/ src/main/java/org/apache/maven/project/ src/main/java/org/apache/maven/proj...

Author: sisbell
Date: Fri May 23 11:04:27 2008
New Revision: 659611

URL: http://svn.apache.org/viewvc?rev=659611&view=rev
Log:
Partial prototype of maven-project.

Added:
    maven/sandbox/trunk/other/maven-project/
    maven/sandbox/trunk/other/maven-project/README.txt
    maven/sandbox/trunk/other/maven-project/src/
    maven/sandbox/trunk/other/maven-project/src/main/
    maven/sandbox/trunk/other/maven-project/src/main/java/
    maven/sandbox/trunk/other/maven-project/src/main/java/org/
    maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/
    maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/
    maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/
    maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/DomainModel.java
    maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelProcessor.java
    maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelProperty.java
    maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelPropertySorter.java
    maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelTransformer.java
    maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelTransformerContext.java
    maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelUri.java
    maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/codegenerator/
    maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/
    maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/DependencyManagementProcessor.java
    maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/PomClassicTransformer.java
    maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/PomDomainModel.java
    maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/ProjectProcessor.java
    maven/sandbox/trunk/other/maven-project/src/main/resources/
    maven/sandbox/trunk/other/maven-project/src/main/resources/pom.xml
    maven/sandbox/trunk/other/maven-project/src/test/
    maven/sandbox/trunk/other/maven-project/src/test/java/
    maven/sandbox/trunk/other/maven-project/src/test/java/org/
    maven/sandbox/trunk/other/maven-project/src/test/java/org/apache/
    maven/sandbox/trunk/other/maven-project/src/test/java/org/apache/maven/
    maven/sandbox/trunk/other/maven-project/src/test/java/org/apache/maven/project/
    maven/sandbox/trunk/other/maven-project/src/test/java/org/apache/maven/project/PomBuilder.java

Added: maven/sandbox/trunk/other/maven-project/README.txt
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/other/maven-project/README.txt?rev=659611&view=auto
==============================================================================
--- maven/sandbox/trunk/other/maven-project/README.txt (added)
+++ maven/sandbox/trunk/other/maven-project/README.txt Fri May 23 11:04:27 2008
@@ -0,0 +1,25 @@
+Implementation:
+This implementation maps all primitive values to a uri. Model structure is determined by ordering of list and by the
+uri itself, as it is easy to determine children and parents.
+
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection, Value = null
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency, Value = null
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/version, Value = 1.4
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/artifactId, Value = artifact-dep
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/groupId, Value = org.apache.maven.dep
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/scope, Value = compile
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/version, Value = 1.1
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/artifactId, Value = artifact-dep
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/groupId, Value = org.apache.maven.dep
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency, Value = null
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/version, Value = 1.0
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/artifactId, Value = bogus-dep
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/groupId, Value = org.bogus
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency, Value = null
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/version, Value = 1.1
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/artifactId, Value = artifact-dep
+Uri = http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/groupId, Value = org.apache.maven.dep
+Uri = http://apache.org/model/project/dependencies#collection, Value = null
+Uri = http://apache.org/model/project/dependencies#collection/dependency, Value = null
+Uri = http://apache.org/model/project/dependencies#collection/dependency/artifactId, Value = org.apache.maven.dep
+

Added: maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/DomainModel.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/DomainModel.java?rev=659611&view=auto
==============================================================================
--- maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/DomainModel.java (added)
+++ maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/DomainModel.java Fri May 23 11:04:27 2008
@@ -0,0 +1,4 @@
+package org.apache.maven.project;
+
+public interface DomainModel {
+}

Added: maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelProcessor.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelProcessor.java?rev=659611&view=auto
==============================================================================
--- maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelProcessor.java (added)
+++ maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelProcessor.java Fri May 23 11:04:27 2008
@@ -0,0 +1,12 @@
+package org.apache.maven.project;
+
+import java.util.List;
+
+/**
+ * Process the list of properties in some way: inserting version values (dependency management), removing properties that
+ * have been overriden, copying info from profiles to repsective parts of pom, interpolation etc.
+ */
+public interface ModelProcessor {
+    
+    void process(List<ModelProperty> list);
+}

Added: maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelProperty.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelProperty.java?rev=659611&view=auto
==============================================================================
--- maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelProperty.java (added)
+++ maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelProperty.java Fri May 23 11:04:27 2008
@@ -0,0 +1,66 @@
+package org.apache.maven.project;
+
+import java.util.UUID;
+
+public class ModelProperty {
+
+    private String uri;
+
+    private String value;
+
+    private UUID id;
+
+    /**
+     *
+     * @param uri
+     * @param value Value associated with specified uri. Value may be null if uri does not map to primitive type.
+     */
+    public ModelProperty(String uri, String value) {
+        this(uri, value, UUID.randomUUID());
+    }
+
+    public ModelProperty(String uri, String value, String id) {
+        this(uri, value,  UUID.fromString(id));
+    }
+
+    public String toString() {
+        return "Uri = " + uri + ", Value = " + value;
+    }
+
+    public ModelProperty(String uri, String value, UUID id) {
+        if(uri == null) {
+            throw new IllegalArgumentException("uri");
+        }
+
+        if(id  == null) {
+            throw new IllegalArgumentException("id") ;
+        }
+        
+        this.uri = uri;
+        this.value = value;
+        this.id = id;
+    }
+
+    public String getUri() {
+        return uri;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ModelProperty that = (ModelProperty) o;
+
+        if (!id.equals(that.id)) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        return id.hashCode();
+    }
+}

Added: maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelPropertySorter.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelPropertySorter.java?rev=659611&view=auto
==============================================================================
--- maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelPropertySorter.java (added)
+++ maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelPropertySorter.java Fri May 23 11:04:27 2008
@@ -0,0 +1,52 @@
+package org.apache.maven.project;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ArrayList;
+
+public class ModelPropertySorter {
+
+    /**
+     * Sorts specified list of model properties. Typically the list contain property information from the entire
+     * hierarchy of models, with most specialized model first in the list.
+     *
+     * Define Sorting Rules: Sorting also removes duplicate values (same URI) unless the value contains a parent with
+     * a #collection (http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency)
+     *
+     * @param properties list of model properties
+     * @return
+     */
+    public static List<ModelProperty> sort(List<ModelProperty> properties) {
+        LinkedList<ModelProperty> processedProperties = new LinkedList<ModelProperty>();
+        List<String> position = new ArrayList<String>();
+
+        for (ModelProperty p : properties) {
+            //System.out.println("Process : " + p);
+            if (ModelUri.matches(ModelUri.PROJECT, p.getUri())) {
+                continue;
+            } else {
+                boolean isContained = position.contains(p.getUri());
+                if (p.getUri().endsWith("#collection") && isContained) {
+                    // System.out.println("COND1: " + p);
+                    continue;
+                }
+
+                String parentUri = getParentUri(p.getUri());
+                if (!isContained || parentUri.contains("#collection")) {
+                    int pst = position.indexOf(parentUri);
+                    processedProperties.add(pst + 1, p);
+                    position.add(pst + 1, p.getUri());
+                  //  System.out.println("Added: " + p);
+                } else if (!parentUri.contains("#collection") && isContained) {
+                    //  System.out.println("ALready added: " + p);
+                    continue;//already  added
+                }
+            }
+        }
+        return processedProperties;
+    }
+
+    private static String getParentUri(String uri) {
+        return uri.substring(0, uri.lastIndexOf("/"));            
+    }
+}

Added: maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelTransformer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelTransformer.java?rev=659611&view=auto
==============================================================================
--- maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelTransformer.java (added)
+++ maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelTransformer.java Fri May 23 11:04:27 2008
@@ -0,0 +1,11 @@
+package org.apache.maven.project;
+
+import java.util.List;
+
+public interface ModelTransformer {
+
+    DomainModel transformToDomainModel(List<ModelProperty> properties);
+
+    List<ModelProperty> transformToModelProperties(List<DomainModel> domainModels);
+    
+}

Added: maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelTransformerContext.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelTransformerContext.java?rev=659611&view=auto
==============================================================================
--- maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelTransformerContext.java (added)
+++ maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelTransformerContext.java Fri May 23 11:04:27 2008
@@ -0,0 +1,82 @@
+package org.apache.maven.project;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.List;
+import java.util.ArrayList;
+
+
+/**
+ * Primary context for this package. Provides methods for doing transforms.
+ */
+public class ModelTransformerContext {
+
+    private Map<String, ModelTransformer> modelTransformers;
+
+    private final static int basePosition = ModelUri.BASE.getUri().length();    
+
+    public ModelTransformerContext() {
+        this.modelTransformers = new HashMap<String, ModelTransformer>();
+    }
+
+    /**
+     * Transforms specified hierarchical list of domain models (inheritence) to target domain model.
+     *
+     * @param domainModels
+     * @param fromModelTransformer
+     * @param toModelTransformer
+     * @return
+     */
+    public DomainModel transform(List<DomainModel> domainModels, ModelTransformer fromModelTransformer, ModelTransformer toModelTransformer) {
+        List<ModelProperty> modelProperties = fromModelTransformer.transformToModelProperties(domainModels);
+        ModelPropertySorter.sort(modelProperties);
+        return toModelTransformer.transformToDomainModel(modelProperties);
+    }
+
+    public DomainModel transformToDomainModel(String transformerName, List<ModelProperty> modelProperties) {
+        ModelTransformer modelTransformer = modelTransformers.get(transformerName);
+        return modelTransformer.transformToDomainModel(ModelPropertySorter.sort(modelProperties));
+    }
+
+    public ModelTransformer getModelTransformerFor(String transformerName) {
+        return modelTransformers.get(transformerName);
+    }
+
+    public void addModelTransformer(String name, ModelTransformer modelTransformer) {
+        modelTransformers.put(name, modelTransformer);
+    }
+
+    public String marshalModelPropertiesToXml(List<ModelProperty> modelProperties) {
+        StringBuffer sb = new StringBuffer();
+        String lastTag = null;
+        for(ModelProperty mp : modelProperties) {
+            String uri = mp.getUri();
+            List<String> tagNames = getTagNamesFromUri(uri);
+           // lastTag = tagNames.get(tagsNames.)
+        }
+        return sb.toString();
+    }
+
+    private static List<String> getTagNamesFromUri(String uri) {
+        List<String> methodNames = new ArrayList<String>();
+        for (String name : uri.substring(basePosition).replace("#collection", "").split("/")) {
+            methodNames.add(name);
+        }
+        return methodNames;
+    }
+
+    private static class SimpleMarshaller {
+
+        static String getStartTag(String value) {
+            StringBuffer sb = new StringBuffer();
+            sb.append("<" + value +">");
+             return sb.toString();
+        }
+
+        static String getEndTag(String value) {
+            StringBuffer sb = new StringBuffer();
+            sb.append("</" + value +">");
+            return sb.toString();
+        }
+    }
+}

Added: maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelUri.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelUri.java?rev=659611&view=auto
==============================================================================
--- maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelUri.java (added)
+++ maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/ModelUri.java Fri May 23 11:04:27 2008
@@ -0,0 +1,57 @@
+package org.apache.maven.project;
+
+/**
+ * Defines all the unique ids for canonical data model.
+ */
+public enum ModelUri {
+    BASE("http://apache.org/model/"),
+    PROJECT("http://apache.org/model/project"),
+    PROJECT_MODELVERSION("http://apache.org/model/project/modelVersion"),
+    PROJECT_PREREQUSITIES_MAVEN("http://apache.org/model/project/prerequisites/maven"),
+    PROJECT_ISSUEMANAGEMENT_SYSTEM("http://apache.org/model/project/issueManagement/system"),
+    PROJECT_ISSUEMANAGEMENT_URL("http://apache.org/model/project/issueManagment/url"),
+    PROJECT_ARTIFACTID("http://apache.org/model/project/artifactId"),
+    PROJECT_BUILD("http://apache.org/model/project/build"),
+    PROJECT_BUILD_TESTSOURCEDIRECTORY("http://apache.org/model/project/build/testSourceDirectory"),
+    PROJECT_BUILD_OUTPUTDIRECTORY("http://apache.org/model/project/build/outputDirectory"),
+    PROJECT_BUILD_SCRIPTSOURCEDIRECTORY("http://apache.org/model/project/build/scriptSourceDirectory"),
+    PROJECT_BUILD_SOURCEDIRECTORY("http://apache.org/model/project/build/sourceDirectory"),
+    PROJECT_DESCRIPTION("http://apache.org/model/project/description"),
+    
+    PROJECT_DEPENDENCIES("http://apache.org/model/project/dependencies#collection"),
+    PROJECT_DEPENDENCIES_DEPENDENCY("http://apache.org/model/project/dependencies#collection/dependency"),
+    PROJECT_DEPENDENCIES_DEPENDENCY_VERSION("http://apache.org/model/project/dependencies#collection/dependency/version"),
+    PROJECT_DEPENDENCIES_DEPENDENCY_ARTIFACTID("http://apache.org/model/project/dependencies#collection/dependency/artifactId"),
+
+    PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES("http://apache.org/model/project/dependencyManagement/dependencies#collection"),
+    PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY("http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency"),
+    PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_VERSION("http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/version"),
+    PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_ARTIFACTID("http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/artifactId"),
+    PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_GROUPID("http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/groupId"),
+    PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_SCOPE("http://apache.org/model/project/dependencyManagement/dependencies#collection/dependency/scope"),
+
+    PROJECT_GROUPID("http://apache.org/model/project/groupId"),
+    PROJECT_ISSUEMANAGEMENT("http://apache.org/model/project/issueManagement"),
+    PROJECT_NAME("http://apache.org/model/project/name"),
+    PROJECT_MODULES("http://apache.org/model/project/modules#collection"),
+    PROJECT_PACKAGING("http://apache.org/model/packaging"),
+    PROJECT_PROFILES("http://apache.org/model/project/profiles#collection"),
+    PROJECT_PROPERTIES("http://apache.org/model/project/properties#collection"),
+    PROJECT_PREREQUISITES("http://apache.org/model/project/prerequisites"),
+    PROJECT_URL("http://apache.org/model/project/url"),
+    PROJECT_VERSION("http://apache.org/model/project/version");
+
+    private String uri;
+
+    ModelUri(String uri) {
+        this.uri = uri;
+    }
+
+    public String getUri() {
+        return uri;
+    }
+
+    public static boolean matches(ModelUri domainUri, String uri) {
+        return uri.equals(domainUri.getUri());
+    }
+}

Added: maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/DependencyManagementProcessor.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/DependencyManagementProcessor.java?rev=659611&view=auto
==============================================================================
--- maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/DependencyManagementProcessor.java (added)
+++ maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/DependencyManagementProcessor.java Fri May 23 11:04:27 2008
@@ -0,0 +1,117 @@
+package org.apache.maven.project.impl;
+
+import org.apache.maven.project.ModelProperty;
+import org.apache.maven.project.ModelUri;
+import org.apache.maven.project.ModelProcessor;
+
+import java.util.*;
+
+public class DependencyManagementProcessor implements ModelProcessor {
+
+    public void process(List<ModelProperty> list) {
+/*
+        Stack<Dependency> p = new Stack<Dependency>();
+        int j = 0;
+        for (Iterator<ModelProperty> i = list.iterator(); i.hasNext();) {
+            ModelProperty mp = i.next(); j++;
+            if (ModelUri.matches(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES, mp.getUri())) {
+
+                while (i.hasNext()) {
+                    if (mp.getUri().startsWith(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY.getUri())) {
+                        
+                        p.push(mp);
+                    } else {
+                        break;
+                    }
+                }
+            }
+        }
+
+         Collections.reverse();
+        List<Dependency> n = new ArrayList<Dependency>();
+
+       // List<Map<String, List<ModelProperty>>> l = new ArrayList<Map<String, List<ModelProperty>>>();
+        for (ModelProperty mp : p) {
+            String artifactId = "";
+            String groupId = "";
+            if (ModelUri.matches(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_ARTIFACTID, mp.getUri())) {
+                artifactId = mp.getValue();
+            } else
+            if (ModelUri.matches(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_GROUPID, mp.getUri())) {
+                groupId = mp.getValue();
+            } else if (ModelUri.matches(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY, mp.getUri())) {
+                String id = groupId + ":" + artifactId;
+                Map<String, List<ModelProperty>> m = new HashMap<String, List<ModelProperty>>();
+            }
+        }
+        System.out.println("-------------");
+
+        System.out.println("-------------");
+        */
+
+    }
+
+    private class Dependency {
+        private String groupId;
+
+        private String artifactId;
+
+        private String version;
+
+        private int position;
+
+        public String getGroupId() {
+            return groupId;
+        }
+
+        public void setGroupId(String groupId) {
+            this.groupId = groupId;
+        }
+
+        public String getArtifactId() {
+            return artifactId;
+        }
+
+        public void setArtifactId(String artifactId) {
+            this.artifactId = artifactId;
+        }
+
+        public String getVersion() {
+            return version;
+        }
+
+        public void setVersion(String version) {
+            this.version = version;
+        }
+
+        public int getPosition() {
+            return position;
+        }
+
+        public boolean equals(Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+
+            Dependency that = (Dependency) o;
+
+            if (!artifactId.equals(that.artifactId)) return false;
+            if (!groupId.equals(that.groupId)) return false;
+            if (!version.equals(that.version)) return false;
+
+            return true;
+        }
+
+        public int hashCode() {
+            int result;
+            result = groupId.hashCode();
+            result = 31 * result + artifactId.hashCode();
+            result = 31 * result + version.hashCode();
+            result = 31 * result + position;
+            return result;
+        }
+
+        public void setPosition(int position) {
+            this.position = position;
+        }
+    }
+}

Added: maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/PomClassicTransformer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/PomClassicTransformer.java?rev=659611&view=auto
==============================================================================
--- maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/PomClassicTransformer.java (added)
+++ maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/PomClassicTransformer.java Fri May 23 11:04:27 2008
@@ -0,0 +1,74 @@
+package org.apache.maven.project.impl;
+
+import org.apache.maven.project.*;
+import org.apache.maven.project.ModelProperty;
+import org.apache.maven.model.Model;
+import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
+
+import java.util.*;
+
+public class PomClassicTransformer implements ModelTransformer {
+
+    private final static int basePosition = ModelUri.BASE.getUri().length();
+
+    public DomainModel transformToDomainModel(List<ModelProperty> properties) {
+        Model model = new Model();
+        Class m = Model.class;
+      //  m.getMethod()
+        for (ModelProperty mp : properties) {  //Use Reflection
+
+            for (String s : getMethodNamesFromUri(mp.getUri())) {
+                if (mp.getValue() == null) {
+                    try {
+                        Class c = Class.forName("org.apache.maven.model." + s);
+                        System.out.println("Class = " + c.getName());
+                       
+                    } catch (ClassNotFoundException e) {
+                       // e.printStackTrace();
+                    }
+
+                } else {
+
+                }
+
+            }
+
+            /*
+            if(ModelUri.matches(ModelUri.PROJECT_ARTIFACTID, mp.getUri())) {
+                model.setArtifactId(mp.getValue());
+            }
+            */
+        }
+
+        return new PomDomainModel(model);
+    }
+
+    public List<ModelProperty> transformToModelProperties(List<DomainModel> domainModels) {
+        /*
+              if(mp.getValue() != null) {
+
+            }
+            System.out.println(getDotNotationFromUri(mp.getUri()));
+            try {
+                model = (Model) ReflectionValueExtractor.evaluate(getDotNotationFromUri(mp.getUri()), model, false);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+               */
+        return null;
+    }
+
+    private static String getDotNotationFromUri(String uri) {
+        return uri.substring(basePosition).replace("#collection", "").replace("/", ".");
+    }
+
+    private static List<String> getMethodNamesFromUri(String uri) {
+        List<String> methodNames = new ArrayList<String>();
+        for (String name : uri.substring(basePosition).replace("#collection", "").split("/")) {
+            methodNames.add(name.substring(0, 1).toUpperCase() + name.substring(1));
+        }
+        return methodNames;
+    }
+
+}
+

Added: maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/PomDomainModel.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/PomDomainModel.java?rev=659611&view=auto
==============================================================================
--- maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/PomDomainModel.java (added)
+++ maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/PomDomainModel.java Fri May 23 11:04:27 2008
@@ -0,0 +1,16 @@
+package org.apache.maven.project.impl;
+
+import org.apache.maven.project.DomainModel;
+import org.apache.maven.model.Model;
+
+public class PomDomainModel implements DomainModel {
+    private Model model;
+
+    public PomDomainModel(Model model) {
+        this.model = model;
+    }
+
+    public Model getModel() {
+        return model;
+    }
+}

Added: maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/ProjectProcessor.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/ProjectProcessor.java?rev=659611&view=auto
==============================================================================
--- maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/ProjectProcessor.java (added)
+++ maven/sandbox/trunk/other/maven-project/src/main/java/org/apache/maven/project/impl/ProjectProcessor.java Fri May 23 11:04:27 2008
@@ -0,0 +1,16 @@
+package org.apache.maven.project.impl;
+
+import org.apache.maven.project.ModelProcessor;
+import org.apache.maven.project.ModelProperty;
+import org.apache.maven.project.ModelPropertySorter;
+
+import java.util.List;
+
+public class ProjectProcessor implements ModelProcessor {
+
+    public void process(List<ModelProperty> list) {
+        List<ModelProperty> properties = ModelPropertySorter.sort(list);
+        DependencyManagementProcessor processor = new DependencyManagementProcessor();
+        processor.process(properties);
+    }
+}

Added: maven/sandbox/trunk/other/maven-project/src/main/resources/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/other/maven-project/src/main/resources/pom.xml?rev=659611&view=auto
==============================================================================
--- maven/sandbox/trunk/other/maven-project/src/main/resources/pom.xml (added)
+++ maven/sandbox/trunk/other/maven-project/src/main/resources/pom.xml Fri May 23 11:04:27 2008
@@ -0,0 +1,585 @@
+<project>
+    <parent>
+        <artifactId/>
+        <groupId/>
+        <version/>
+        <relativePath/>
+    </parent>
+    <modelVersion/>
+    <groupId/>
+    <artifactId/>
+    <packaging/>
+    <name/>
+    <version/>
+    <description/>
+    <url/>
+    <prerequisites>
+        <maven/>
+    </prerequisites>
+    <issueManagement>
+        <system/>
+        <url/>
+    </issueManagement>
+    <ciManagement>
+        <system/>
+        <url/>
+        <notifiers>
+            <notifier>
+                <type/>
+                <sendOnError/>
+                <sendOnFailure/>
+                <sendOnSuccess/>
+                <sendOnWarning/>
+                <address/>
+                <configuration/>
+            </notifier>
+        </notifiers>
+    </ciManagement>
+    <inceptionYear/>
+    <mailingLists>
+        <mailingList>
+            <name/>
+            <subscribe/>
+            <unsubscribe/>
+            <post/>
+            <archive/>
+            <otherArchives/>
+        </mailingList>
+    </mailingLists>
+    <developers>
+        <developer>
+            <id/>
+            <name/>
+            <email/>
+            <url/>
+            <organization/>
+            <organizationUrl/>
+            <roles/>
+            <timezone/>
+            <properties/>
+        </developer>
+    </developers>
+    <contributors>
+        <contributor>
+            <name/>
+            <email/>
+            <url/>
+            <organization/>
+            <organizationUrl/>
+            <roles/>
+            <timezone/>
+            <properties/>
+        </contributor>
+    </contributors>
+    <licenses>
+        <license>
+            <name/>
+            <url/>
+            <distribution/>
+            <comments/>
+        </license>
+    </licenses>
+    <scm>
+        <connection/>
+        <developerConnection/>
+        <tag/>
+        <url/>
+    </scm>
+    <organization>
+        <name/>
+        <url/>
+    </organization>
+    <build>
+        <sourceDirectory/>
+        <scriptSourceDirectory/>
+        <testSourceDirectory/>
+        <outputDirectory/>
+        <testOutputDirectory/>
+        <extensions>
+            <extension>
+                <groupId/>
+                <artifactId/>
+                <version/>
+            </extension>
+        </extensions>
+        <defaultGoal/>
+        <resources>
+            <resource>
+                <targetPath/>
+                <filtering/>
+                <directory/>
+                <includes/>
+                <excludes/>
+            </resource>
+        </resources>
+        <testResources>
+            <testResource>
+                <targetPath/>
+                <filtering/>
+                <directory/>
+                <includes/>
+                <excludes/>
+            </testResource>
+        </testResources>
+        <directory/>
+        <finalName/>
+        <filters/>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId/>
+                    <artifactId/>
+                    <version/>
+                    <extensions/>
+                    <executions>
+                        <execution>
+                            <id/>
+                            <phase/>
+                            <goals/>
+                            <inherited/>
+                            <configuration/>
+                        </execution>
+                    </executions>
+                    <dependencies>
+                        <dependency>
+                            <groupId/>
+                            <artifactId/>
+                            <version/>
+                            <type/>
+                            <classifier/>
+                            <scope/>
+                            <systemPath/>
+                            <exclusions>
+                                <exclusion>
+                                    <artifactId/>
+                                    <groupId/>
+                                </exclusion>
+                            </exclusions>
+                            <optional/>
+                        </dependency>
+                    </dependencies>
+                    <goals/>
+                    <inherited/>
+                    <configuration/>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+        <plugins>
+            <plugin>
+                <groupId/>
+                <artifactId/>
+                <version/>
+                <extensions/>
+                <executions>
+                    <execution>
+                        <id/>
+                        <phase/>
+                        <goals/>
+                        <inherited/>
+                        <configuration/>
+                    </execution>
+                </executions>
+                <dependencies>
+                    <dependency>
+                        <groupId/>
+                        <artifactId/>
+                        <version/>
+                        <type/>
+                        <classifier/>
+                        <scope/>
+                        <systemPath/>
+                        <exclusions>
+                            <exclusion>
+                                <artifactId/>
+                                <groupId/>
+                            </exclusion>
+                        </exclusions>
+                        <optional/>
+                    </dependency>
+                </dependencies>
+                <goals/>
+                <inherited/>
+                <configuration/>
+            </plugin>
+        </plugins>
+    </build>
+    <profiles>
+        <profile>
+            <id/>
+            <activation>
+                <activeByDefault/>
+                <jdk/>
+                <os>
+                    <name/>
+                    <family/>
+                    <arch/>
+                    <version/>
+                </os>
+                <property>
+                    <name/>
+                    <value/>
+                </property>
+                <file>
+                    <missing/>
+                    <exists/>
+                </file>
+            </activation>
+            <build>
+                <defaultGoal/>
+                <resources>
+                    <resource>
+                        <targetPath/>
+                        <filtering/>
+                        <directory/>
+                        <includes/>
+                        <excludes/>
+                    </resource>
+                </resources>
+                <testResources>
+                    <testResource>
+                        <targetPath/>
+                        <filtering/>
+                        <directory/>
+                        <includes/>
+                        <excludes/>
+                    </testResource>
+                </testResources>
+                <directory/>
+                <finalName/>
+                <filters/>
+                <pluginManagement>
+                    <plugins>
+                        <plugin>
+                            <groupId/>
+                            <artifactId/>
+                            <version/>
+                            <extensions/>
+                            <executions>
+                                <execution>
+                                    <id/>
+                                    <phase/>
+                                    <goals/>
+                                    <inherited/>
+                                    <configuration/>
+                                </execution>
+                            </executions>
+                            <dependencies>
+                                <dependency>
+                                    <groupId/>
+                                    <artifactId/>
+                                    <version/>
+                                    <type/>
+                                    <classifier/>
+                                    <scope/>
+                                    <systemPath/>
+                                    <exclusions>
+                                        <exclusion>
+                                            <artifactId/>
+                                            <groupId/>
+                                        </exclusion>
+                                    </exclusions>
+                                    <optional/>
+                                </dependency>
+                            </dependencies>
+                            <goals/>
+                            <inherited/>
+                            <configuration/>
+                        </plugin>
+                    </plugins>
+                </pluginManagement>
+                <plugins>
+                    <plugin>
+                        <groupId/>
+                        <artifactId/>
+                        <version/>
+                        <extensions/>
+                        <executions>
+                            <execution>
+                                <id/>
+                                <phase/>
+                                <goals/>
+                                <inherited/>
+                                <configuration/>
+                            </execution>
+                        </executions>
+                        <dependencies>
+                            <dependency>
+                                <groupId/>
+                                <artifactId/>
+                                <version/>
+                                <type/>
+                                <classifier/>
+                                <scope/>
+                                <systemPath/>
+                                <exclusions>
+                                    <exclusion>
+                                        <artifactId/>
+                                        <groupId/>
+                                    </exclusion>
+                                </exclusions>
+                                <optional/>
+                            </dependency>
+                        </dependencies>
+                        <goals/>
+                        <inherited/>
+                        <configuration/>
+                    </plugin>
+                </plugins>
+            </build>
+            <modules/>
+            <repositories>
+                <repository>
+                    <releases>
+                        <enabled/>
+                        <updatePolicy/>
+                        <checksumPolicy/>
+                    </releases>
+                    <snapshots>
+                        <enabled/>
+                        <updatePolicy/>
+                        <checksumPolicy/>
+                    </snapshots>
+                    <id/>
+                    <name/>
+                    <url/>
+                    <layout/>
+                </repository>
+            </repositories>
+            <pluginRepositories>
+                <pluginRepository>
+                    <releases>
+                        <enabled/>
+                        <updatePolicy/>
+                        <checksumPolicy/>
+                    </releases>
+                    <snapshots>
+                        <enabled/>
+                        <updatePolicy/>
+                        <checksumPolicy/>
+                    </snapshots>
+                    <id/>
+                    <name/>
+                    <url/>
+                    <layout/>
+                </pluginRepository>
+            </pluginRepositories>
+            <dependencies>
+                <dependency>
+                    <groupId/>
+                    <artifactId/>
+                    <version/>
+                    <type/>
+                    <classifier/>
+                    <scope/>
+                    <systemPath/>
+                    <exclusions>
+                        <exclusion>
+                            <artifactId/>
+                            <groupId/>
+                        </exclusion>
+                    </exclusions>
+                    <optional/>
+                </dependency>
+            </dependencies>
+            <reports/>
+            <reporting>
+                <excludeDefaults/>
+                <outputDirectory/>
+                <plugins>
+                    <plugin>
+                        <groupId/>
+                        <artifactId/>
+                        <version/>
+                        <inherited/>
+                        <configuration/>
+                        <reportSets>
+                            <reportSet>
+                                <id/>
+                                <configuration/>
+                                <inherited/>
+                                <reports/>
+                            </reportSet>
+                        </reportSets>
+                    </plugin>
+                </plugins>
+            </reporting>
+            <dependencyManagement>
+                <dependencies>
+                    <dependency>
+                        <groupId/>
+                        <artifactId/>
+                        <version/>
+                        <type/>
+                        <classifier/>
+                        <scope/>
+                        <systemPath/>
+                        <exclusions>
+                            <exclusion>
+                                <artifactId/>
+                                <groupId/>
+                            </exclusion>
+                        </exclusions>
+                        <optional/>
+                    </dependency>
+                </dependencies>
+            </dependencyManagement>
+            <distributionManagement>
+                <repository>
+                    <uniqueVersion/>
+                    <id/>
+                    <name/>
+                    <url/>
+                    <layout/>
+                </repository>
+                <snapshotRepository>
+                    <uniqueVersion/>
+                    <id/>
+                    <name/>
+                    <url/>
+                    <layout/>
+                </snapshotRepository>
+                <site>
+                    <id/>
+                    <name/>
+                    <url/>
+                </site>
+                <downloadUrl/>
+                <relocation>
+                    <groupId/>
+                    <artifactId/>
+                    <version/>
+                    <message/>
+                </relocation>
+                <status/>
+            </distributionManagement>
+            <properties/>
+        </profile>
+    </profiles>
+    <modules/>
+    <repositories>
+        <repository>
+            <releases>
+                <enabled/>
+                <updatePolicy/>
+                <checksumPolicy/>
+            </releases>
+            <snapshots>
+                <enabled/>
+                <updatePolicy/>
+                <checksumPolicy/>
+            </snapshots>
+            <id/>
+            <name/>
+            <url/>
+            <layout/>
+        </repository>
+    </repositories>
+    <pluginRepositories>
+        <pluginRepository>
+            <releases>
+                <enabled/>
+                <updatePolicy/>
+                <checksumPolicy/>
+            </releases>
+            <snapshots>
+                <enabled/>
+                <updatePolicy/>
+                <checksumPolicy/>
+            </snapshots>
+            <id/>
+            <name/>
+            <url/>
+            <layout/>
+        </pluginRepository>
+    </pluginRepositories>
+    <dependencies>
+        <dependency>
+            <groupId/>
+            <artifactId/>
+            <version/>
+            <type/>
+            <classifier/>
+            <scope/>
+            <systemPath/>
+            <exclusions>
+                <exclusion>
+                    <artifactId/>
+                    <groupId/>
+                </exclusion>
+            </exclusions>
+            <optional/>
+        </dependency>
+    </dependencies>
+    <reports/>
+    <reporting>
+        <excludeDefaults/>
+        <outputDirectory/>
+        <plugins>
+            <plugin>
+                <groupId/>
+                <artifactId/>
+                <version/>
+                <inherited/>
+                <configuration/>
+                <reportSets>
+                    <reportSet>
+                        <id/>
+                        <configuration/>
+                        <inherited/>
+                        <reports/>
+                    </reportSet>
+                </reportSets>
+            </plugin>
+        </plugins>
+    </reporting>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId/>
+                <artifactId/>
+                <version/>
+                <type/>
+                <classifier/>
+                <scope/>
+                <systemPath/>
+                <exclusions>
+                    <exclusion>
+                        <artifactId/>
+                        <groupId/>
+                    </exclusion>
+                </exclusions>
+                <optional/>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+    <distributionManagement>
+        <repository>
+            <uniqueVersion/>
+            <id/>
+            <name/>
+            <url/>
+            <layout/>
+        </repository>
+        <snapshotRepository>
+            <uniqueVersion/>
+            <id/>
+            <name/>
+            <url/>
+            <layout/>
+        </snapshotRepository>
+        <site>
+            <id/>
+            <name/>
+            <url/>
+        </site>
+        <downloadUrl/>
+        <relocation>
+            <groupId/>
+            <artifactId/>
+            <version/>
+            <message/>
+        </relocation>
+        <status/>
+    </distributionManagement>
+    <properties/>
+</project>
\ No newline at end of file

Added: maven/sandbox/trunk/other/maven-project/src/test/java/org/apache/maven/project/PomBuilder.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/other/maven-project/src/test/java/org/apache/maven/project/PomBuilder.java?rev=659611&view=auto
==============================================================================
--- maven/sandbox/trunk/other/maven-project/src/test/java/org/apache/maven/project/PomBuilder.java (added)
+++ maven/sandbox/trunk/other/maven-project/src/test/java/org/apache/maven/project/PomBuilder.java Fri May 23 11:04:27 2008
@@ -0,0 +1,159 @@
+package org.apache.maven.project;
+
+import junit.framework.TestCase;
+import org.apache.maven.project.impl.PomClassicTransformer;
+import org.apache.maven.project.impl.PomDomainModel;
+import org.apache.maven.project.interpolation.ModelInterpolationException;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.io.StringWriter;
+import java.io.IOException;
+
+
+public class PomBuilder extends TestCase {
+
+    public void testA() {
+        PomClassicTransformer b = new PomClassicTransformer();
+
+        LinkedList<ModelProperty> mp = new LinkedList<ModelProperty>();
+        mp.add(new ModelProperty(ModelUri.PROJECT.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_ARTIFACTID.getUri(), "org.apache.maven"));
+        mp.add(new ModelProperty(ModelUri.PROJECT.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_ARTIFACTID.getUri(), "org.apache.maven.new"));
+
+        List<ModelProperty> p = ModelPropertySorter.sort(mp);
+        for (ModelProperty prop : p) {
+            System.out.println(prop);
+        }
+    }
+
+    public void testB() {
+        PomClassicTransformer b = new PomClassicTransformer();
+
+        LinkedList<ModelProperty> mp = new LinkedList<ModelProperty>();
+        mp.add(new ModelProperty(ModelUri.PROJECT.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCIES.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCIES_DEPENDENCY.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCIES_DEPENDENCY_ARTIFACTID.getUri(), "org.apache.maven.dep"));
+
+        mp.add(new ModelProperty(ModelUri.PROJECT_ARTIFACTID.getUri(), "org.apache.maven"));
+
+        mp.add(new ModelProperty(ModelUri.PROJECT.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCIES.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCIES_DEPENDENCY.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCIES_DEPENDENCY_ARTIFACTID.getUri(), "org.apache.maven.dep1"));
+
+        List<ModelProperty> p = ModelPropertySorter.sort(mp);
+        for (ModelProperty prop : p) {
+            System.out.println(prop);
+        }
+    }
+
+    public void testC() {
+        PomClassicTransformer b = new PomClassicTransformer();
+
+        LinkedList<ModelProperty> mp = new LinkedList<ModelProperty>();
+        mp.add(new ModelProperty(ModelUri.PROJECT.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_ARTIFACTID.getUri(), "org.apache.maven"));
+        mp.add(new ModelProperty(ModelUri.PROJECT.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_ARTIFACTID.getUri(), "org.apache.maven.new"));
+
+        Model model = ((PomDomainModel) b.transformToDomainModel(mp)).getModel();
+        assertEquals("org.apache.maven", model.getArtifactId());
+    }
+
+    public void testD() {
+        PomClassicTransformer b = new PomClassicTransformer();
+
+        LinkedList<ModelProperty> mp = new LinkedList<ModelProperty>();
+        mp.add(new ModelProperty(ModelUri.PROJECT.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCIES.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCIES_DEPENDENCY.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCIES_DEPENDENCY_ARTIFACTID.getUri(), "org.apache.maven.dep"));
+
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_GROUPID.getUri(), "org.apache.maven.dep"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_ARTIFACTID.getUri(), "artifact-dep"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_VERSION.getUri(), "1.1"));
+
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_GROUPID.getUri(), "org.bogus"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_ARTIFACTID.getUri(), "bogus-dep"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_VERSION.getUri(), "1.0"));
+
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_GROUPID.getUri(), "org.apache.maven.dep"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_ARTIFACTID.getUri(), "artifact-dep"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_VERSION.getUri(), "1.1"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_SCOPE.getUri(), "compile"));
+
+         mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_GROUPID.getUri(), "org.apache.maven.dep"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_ARTIFACTID.getUri(), "artifact-dep"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_VERSION.getUri(), "1.4"));
+
+        List<ModelProperty> p = ModelPropertySorter.sort(mp);
+        for (ModelProperty prop : p) {
+            System.out.println(prop);
+        }
+    }
+
+    public void testE() {
+        PomClassicTransformer b = new PomClassicTransformer();
+
+        LinkedList<ModelProperty> mp = new LinkedList<ModelProperty>();
+        mp.add(new ModelProperty(ModelUri.PROJECT.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCIES.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCIES_DEPENDENCY.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCIES_DEPENDENCY_ARTIFACTID.getUri(), "org.apache.maven.dep"));
+
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_GROUPID.getUri(), "org.apache.maven.dep"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_ARTIFACTID.getUri(), "artifact-dep"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_VERSION.getUri(), "1.1"));
+
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_GROUPID.getUri(), "org.bogus"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_ARTIFACTID.getUri(), "bogus-dep"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_VERSION.getUri(), "1.0"));
+
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_GROUPID.getUri(), "org.apache.maven.dep"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_ARTIFACTID.getUri(), "artifact-dep"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_VERSION.getUri(), "1.1"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_SCOPE.getUri(), "compile"));
+
+         mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES.getUri(), null));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_GROUPID.getUri(), "org.apache.maven.dep"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_ARTIFACTID.getUri(), "artifact-dep"));
+        mp.add(new ModelProperty(ModelUri.PROJECT_DEPENDENCYMANAGEMENT_DEPENDENCIES_DEPENDENCY_VERSION.getUri(), "1.4"));
+
+        List<ModelProperty> p = ModelPropertySorter.sort(mp);
+        PomClassicTransformer t = new PomClassicTransformer();
+        PomDomainModel dm = (PomDomainModel) t.transformToDomainModel(p);
+        Model model = dm.getModel();
+        if(model ==  null) {
+            System.out.println("Model null");
+        }
+        StringWriter sWriter = new StringWriter();
+
+        MavenXpp3Writer writer = new MavenXpp3Writer();
+        try
+        {
+            writer.write( sWriter, model );
+        }
+        catch ( IOException e )
+        {
+            e.printStackTrace();
+        }
+        System.out.println(sWriter);
+        
+    }
+}