Author: sisbell
Date: Mon Jul  7 18:16:38 2008
New Revision: 674694

URL: http://svn.apache.org/viewvc?rev=674694&view=rev
Log:
Improved exception tracing, major bug fixes.

Modified:
    
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/DomainModel.java
    
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelDataSource.java
    
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelProperty.java
    
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java
    
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/impl/DefaultModelDataSource.java
    
maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/ModelMarshallerTest.java
    
maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/ModelTransformerContextTest.java
    
maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/impl/DefaultModelDataSourceTest.java

Modified: 
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/DomainModel.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/DomainModel.java?rev=674694&r1=674693&r2=674694&view=diff
==============================================================================
--- 
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/DomainModel.java
 (original)
+++ 
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/DomainModel.java
 Mon Jul  7 18:16:38 2008
@@ -6,4 +6,8 @@
  * the appropriate domain model type(s).
  */
 public interface DomainModel {
+
+    String getEventHistory();
+
+    void setEventHistory(String history);
 }

Modified: 
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelDataSource.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelDataSource.java?rev=674694&r1=674693&r2=674694&view=diff
==============================================================================
--- 
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelDataSource.java
 (original)
+++ 
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelDataSource.java
 Mon Jul  7 18:16:38 2008
@@ -49,4 +49,6 @@
      * @param modelProperties the model properties that back the data source
      */
     void init(List<ModelProperty> modelProperties, 
Collection<ModelContainerFactory> modelContainerFactories);
+
+    String getEventHistory();
 }

Modified: 
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelProperty.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelProperty.java?rev=674694&r1=674693&r2=674694&view=diff
==============================================================================
--- 
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelProperty.java
 (original)
+++ 
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelProperty.java
 Mon Jul  7 18:16:38 2008
@@ -131,6 +131,6 @@
     }
 
     public String toString() {
-        return "Uri = " + uri + ", Value = " + value + ", Resolved Value = " + 
resolvedValue;
+        return "Uri = " + uri + ", Value = " + value + ", Resolved Value = " + 
resolvedValue + ", Hash = " + this.hashCode();
     }
 }

Modified: 
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java?rev=674694&r1=674693&r2=674694&view=diff
==============================================================================
--- 
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java
 (original)
+++ 
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java
 Mon Jul  7 18:16:38 2008
@@ -4,6 +4,7 @@
 
 import java.io.IOException;
 import java.util.*;
+import java.util.logging.Logger;
 
 
 /**
@@ -15,6 +16,8 @@
 
     private final static List<InterpolatorProperty> 
systemInterpolatorProperties = new ArrayList<InterpolatorProperty>();
 
+    private static Logger logger = Logger.getAnonymousLogger();
+
     static {
         for (Map.Entry<Object, Object> e : System.getProperties().entrySet()) {
             systemInterpolatorProperties.add(new InterpolatorProperty("${" + 
e.getKey() + "}", (String) e.getValue()));
@@ -25,6 +28,15 @@
         }
     }
 
+    private static boolean aContainsAnyOfB(List<ModelProperty> a, 
List<ModelProperty> b) {
+        for (ModelProperty mp : b) {
+            if (a.contains(mp)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     /**
      * Default constructor
      *
@@ -39,9 +51,9 @@
      * Unlike ModelTransformerContext#transform(java.util.List, 
ModelTransformer, ModelTransformer), this method requires
      * the user to add interpolator properties. It's intended to be used by 
IDEs.
      *
-     * @param domainModels the domain model list to transform
-     * @param fromModelTransformer transformer that transforms from specified 
domain models to canonical data model
-     * @param toModelTransformer transformer that transforms from canonical 
data model to returned domain model
+     * @param domainModels           the domain model list to transform
+     * @param fromModelTransformer   transformer that transforms from 
specified domain models to canonical data model
+     * @param toModelTransformer     transformer that transforms from 
canonical data model to returned domain model
      * @param interpolatorProperties properties to use during interpolation.
      * @return processed domain model
      * @throws IOException if there was a problem with the transform
@@ -60,15 +72,28 @@
         for (ModelContainerFactory factory : factories) {
             for (String uri : factory.getUris()) {
                 List<ModelContainer> modelContainers = 
modelDataSource.queryFor(uri);
+                List<ModelContainer> removedModelContainers = new 
ArrayList<ModelContainer>();
                 Collections.reverse(modelContainers);
                 for (int i = 0; i < modelContainers.size(); i++) {
                     ModelContainer mcA = modelContainers.get(i);
+                    if (removedModelContainers.contains(mcA)) {
+                        continue;
+                    }
                     for (ModelContainer mcB : modelContainers.subList(i + 1, 
modelContainers.size())) {
                         ModelContainerAction action = mcA.containerAction(mcB);
+
                         if (ModelContainerAction.DELETE.equals(action)) {
                             modelDataSource.delete(mcB);
+                            removedModelContainers.add(mcB);
                         } else if (ModelContainerAction.JOIN.equals(action)) {
-                            modelDataSource.join(mcA, mcB);
+                            try {
+                                mcA = modelDataSource.join(mcA, mcB);
+                                removedModelContainers.add(mcB);
+                            } catch (DataSourceException e) {
+                                
System.out.println(modelDataSource.getEventHistory());
+                                throw new IOException("Failed to join model 
containers: URI = " + uri
+                                        + ", Factory = " + 
factory.getClass().getName(), e);
+                            }
                         }
                     }
                 }
@@ -103,8 +128,16 @@
         }
 
         */
-        validate(mps);
-        return toModelTransformer.transformToDomainModel(mps);
+
+        try {
+            validate(mps);
+            DomainModel domainModel = 
toModelTransformer.transformToDomainModel(mps);
+            domainModel.setEventHistory(modelDataSource.getEventHistory());
+            return domainModel;
+        } catch (IOException e) {
+            System.out.println(modelDataSource.getEventHistory());
+            throw new IOException(e);
+        }
     }
 
     /**

Modified: 
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/impl/DefaultModelDataSource.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/impl/DefaultModelDataSource.java?rev=674694&r1=674693&r2=674694&view=diff
==============================================================================
--- 
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/impl/DefaultModelDataSource.java
 (original)
+++ 
maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/impl/DefaultModelDataSource.java
 Mon Jul  7 18:16:38 2008
@@ -3,6 +3,7 @@
 import org.apache.maven.shared.model.*;
 
 import java.util.*;
+import java.util.logging.Logger;
 
 /**
  * Default implementation of the ModelDataSource.
@@ -11,8 +12,23 @@
 
     private List<ModelProperty> modelProperties;
 
+    private List<ModelProperty> originalModelProperties;
+
+    private List<DeleteEvent> deleteEvents;
+
     private Map<String, ModelContainerFactory> modelContainerFactoryMap;
 
+    private static Logger logger = Logger.getAnonymousLogger();
+
+    private static boolean aContainsAnyOfB(List<ModelProperty> a, 
List<ModelProperty> b) {
+        for (ModelProperty mp : b) {
+            if (a.contains(mp)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     public ModelContainer join(ModelContainer a, ModelContainer b) throws 
DataSourceException {
         if (a == null || a.getProperties() == null || a.getProperties().size() 
== 0) {
             throw new IllegalArgumentException("a or a.properties: empty");
@@ -22,11 +38,29 @@
         }
 
         if (!modelProperties.containsAll(a.getProperties())) {
+            List<ModelProperty> unknownProperties = new 
ArrayList<ModelProperty>();
             for (ModelProperty mp : a.getProperties()) {
                 if (!modelProperties.contains(mp)) {
-                    System.out.println(mp);
+                    unknownProperties.add(mp);
+                }
+            }
+            List<DeleteEvent> des = new ArrayList<DeleteEvent>();
+            for (DeleteEvent de : deleteEvents) {
+                if (aContainsAnyOfB(de.getRemovedModelProperties(), 
unknownProperties)) {
+                    des.add(de);
                 }
             }
+            //output
+            StringBuffer sb = new StringBuffer();
+            sb.append("Found unknown properties in container 'a': Name = 
").append(a.getClass().getName()).append("\r\n");
+            for (ModelProperty mp : unknownProperties) {
+                sb.append(mp).append("\r\n");
+            }
+
+        //    for (DeleteEvent de : des) {
+        //        sb.append(de.toString());
+        //    }
+            System.out.println(sb);
             throw new DataSourceException("ModelContainer 'a' contains 
elements not within datasource");
         }
 
@@ -39,10 +73,20 @@
         delete(b);
 
         List<ModelProperty> joinedProperties = mergeModelContainers(a, b);
+
         if (modelProperties.size() == 0) {
             startIndex = 0;
         }
         modelProperties.addAll(startIndex, joinedProperties);
+
+        List<ModelProperty> deletedProperties = new ArrayList<ModelProperty>();
+        deletedProperties.addAll(a.getProperties());
+        deletedProperties.addAll(b.getProperties());
+        deletedProperties.removeAll(joinedProperties);
+        if (deletedProperties.size() > 0) {
+            deleteEvents.add(new DeleteEvent(a, b, deletedProperties, "join"));
+        }
+        
         return a.createNewInstance(joinedProperties);
     }
 
@@ -54,6 +98,7 @@
             throw new IllegalArgumentException("modelContainer.properties: 
null");
         }
         modelProperties.removeAll(modelContainer.getProperties());
+        deleteEvents.add(new DeleteEvent(modelContainer, null, 
modelContainer.getProperties(), "delete"));
     }
 
     public List<ModelProperty> getModelProperties() {
@@ -120,30 +165,16 @@
 
         //verify data source integrity
         List<ModelProperty> unknownProperties = 
findUnknownModelPropertiesFrom(modelContainers);
-        if(!unknownProperties.isEmpty()) {
-            for(ModelProperty mp : unknownProperties) {
-                System.out.println(mp);
+        if (!unknownProperties.isEmpty()) {
+            for (ModelProperty mp : unknownProperties) {
+                System.out.println("Missing property from ModelContainer: " + 
mp);
             }
-            throw new DataSourceException("ModelContainer contains elements 
not within datasource");
+            throw new DataSourceException("Unable to query datasource. 
ModelContainer contains elements not within datasource");
         }
 
         return modelContainers;
     }
 
-    private List<ModelProperty> 
findUnknownModelPropertiesFrom(List<ModelContainer> modelContainers) {
-        List<ModelProperty> modelProperties = new ArrayList<ModelProperty>();
-        for(ModelContainer mc: modelContainers) {
-            if (!modelProperties.containsAll(mc.getProperties())) {
-                for (ModelProperty mp : mc.getProperties()) {
-                    if (!modelProperties.contains(mp)) {
-                        modelProperties.add(mp);
-                    }
-                }
-            }
-        }
-        return modelProperties;
-    }
-
     public void init(List<ModelProperty> modelProperties, 
Collection<ModelContainerFactory> modelContainerFactories) {
         if (modelProperties == null) {
             throw new IllegalArgumentException("modelProperties: null");
@@ -153,6 +184,8 @@
         }
         this.modelProperties = new LinkedList<ModelProperty>(modelProperties);
         this.modelContainerFactoryMap = new HashMap<String, 
ModelContainerFactory>();
+        this.deleteEvents = new ArrayList<DeleteEvent>();
+        this.originalModelProperties = new 
ArrayList<ModelProperty>(modelProperties);
 
         for (ModelContainerFactory factory : modelContainerFactories) {
             Collection<String> uris = factory.getUris();
@@ -166,6 +199,37 @@
         }
     }
 
+    public String getEventHistory() {
+        StringBuffer sb = new StringBuffer();
+        sb.append("Original Model Properties\r\n");
+        for(ModelProperty mp : originalModelProperties) {
+            sb.append(mp).append("\r\n");
+        }
+
+        for(DeleteEvent de : deleteEvents) {
+            sb.append(de.toString());
+        }
+
+        sb.append("Processed Model Properties\r\n");
+        for(ModelProperty mp : modelProperties) {
+            sb.append(mp).append("\r\n");
+        }
+        return sb.toString();
+    }
+
+    private List<ModelProperty> 
findUnknownModelPropertiesFrom(List<ModelContainer> modelContainers) {
+        List<ModelProperty> unknownProperties = new ArrayList<ModelProperty>();
+        for (ModelContainer mc : modelContainers) {
+            if (!modelProperties.containsAll(mc.getProperties())) {
+                for (ModelProperty mp : mc.getProperties()) {
+                    if (!modelProperties.contains(mp)) {
+                        unknownProperties.add(mp);
+                    }
+                }
+            }
+        }
+        return unknownProperties;
+    }
 
     private static int findLastIndexOfParent(ModelProperty modelProperty, 
List<ModelProperty> modelProperties) {
         for (int i = modelProperties.size() - 1; i >= 0; i--) {
@@ -181,9 +245,9 @@
      *
      * @param a container A
      * @param b container B
-     * @return
+     * @return list of merged properties
      */
-    private static List<ModelProperty> mergeModelContainers(ModelContainer a, 
ModelContainer b) {
+    protected static List<ModelProperty> mergeModelContainers(ModelContainer 
a, ModelContainer b) {
         List<ModelProperty> m = new ArrayList<ModelProperty>();
         m.addAll(a.getProperties());
         m.addAll(b.getProperties());
@@ -199,4 +263,59 @@
         }
         return processedProperties;
     }
+
+    private static class DeleteEvent {
+
+        private List<ModelProperty> removedModelProperties;
+
+        private ModelContainer mcA;
+
+        private ModelContainer mcB;
+
+        private String methodName;
+
+        DeleteEvent(ModelContainer mcA, ModelContainer mcB, 
List<ModelProperty> removedModelProperties, String methodName) {
+            this.mcA = mcA;
+            this.mcB = mcB;
+            this.removedModelProperties = removedModelProperties;
+            this.methodName = methodName;
+        }
+
+        public ModelContainer getMcA() {
+            return mcA;
+        }
+
+        public ModelContainer getMcB() {
+            return mcB;
+        }
+
+        public List<ModelProperty> getRemovedModelProperties() {
+            return removedModelProperties;
+        }
+
+        public String getMethodName() {
+            return methodName;
+        }
+
+        public String toString() {
+            StringBuffer sb = new StringBuffer();
+            sb.append("Delete Event: ").append(methodName).append("\r\n");
+            sb.append("Model Container A:\r\n");
+            for (ModelProperty mp : mcA.getProperties()) {
+                sb.append(mp).append("\r\n");
+            }
+            if (mcB != null) {
+                sb.append("Model Container B:\r\n");
+                for (ModelProperty mp : mcB.getProperties()) {
+                    sb.append(mp).append("\r\n");
+                }
+            }
+
+            sb.append("Removed Properties:\r\n");
+            for (ModelProperty mp : removedModelProperties) {
+                sb.append(mp).append("\r\n");
+            }
+            return sb.toString();
+        }
+    }
 }

Modified: 
maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/ModelMarshallerTest.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/ModelMarshallerTest.java?rev=674694&r1=674693&r2=674694&view=diff
==============================================================================
--- 
maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/ModelMarshallerTest.java
 (original)
+++ 
maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/ModelMarshallerTest.java
 Mon Jul  7 18:16:38 2008
@@ -32,32 +32,9 @@
         String xml = 
ModelMarshaller.unmarshalModelPropertiesToXml(modelProperties, 
"http://apache.org/maven";);
         System.out.println("COMPLETE:" + xml); //TODO: Verify proper xml
     }
-    @Test
-    public void unmarshalWithEmptyTags112() throws IOException {
- /*       List<ModelProperty> modelProperties = Arrays.asList(
-                new ModelProperty("http://apache.org/maven/project";, null),
-                new 
ModelProperty("http://apache.org/maven/project/developers#collection";, null),
-                new 
ModelProperty("http://apache.org/maven/project/developers#collection/developer";,
 null),
-                new 
ModelProperty("http://apache.org/maven/project/developers#collection/developer/organization";,
 null),
-                new 
ModelProperty("http://apache.org/maven/project/modelVersion";, "4.0.0")
-        );    */
-         List<ModelProperty> modelProperties = 
ModelMarshaller.marshallXmlToModelProperties(
-                new FileInputStream("C:\\Documents and 
Settings\\sisbell\\.m2\\repository\\org\\mortbay\\jetty\\project\\6.1.5\\project-6.1.5.pom"),
-                "http://apache.org/maven";, null);
-
-        String xml = 
ModelMarshaller.unmarshalModelPropertiesToXml(modelProperties, 
"http://apache.org/maven";);
-        System.out.println("COMPLETE:" + xml); //TODO: Verify proper xml
-    }
 
     @Test
     public void unmarshalWithEmptyTags111() throws IOException {
- /*       List<ModelProperty> modelProperties = Arrays.asList(
-                new ModelProperty("http://apache.org/maven/project";, null),
-                new 
ModelProperty("http://apache.org/maven/project/developers#collection";, null),
-                new 
ModelProperty("http://apache.org/maven/project/developers#collection/developer";,
 null),
-                new 
ModelProperty("http://apache.org/maven/project/developers#collection/developer/organization";,
 null),
-                new 
ModelProperty("http://apache.org/maven/project/modelVersion";, "4.0.0")
-        );    */
          List<ModelProperty> modelProperties = 
ModelMarshaller.marshallXmlToModelProperties(
                 new 
ByteArrayInputStream("<project><S></S><version>1.2</version><developers><developer><organization></organization></developer></developers><modelVersion>4</modelVersion></project>".getBytes()),
                 "http://apache.org/maven";, null);

Modified: 
maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/ModelTransformerContextTest.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/ModelTransformerContextTest.java?rev=674694&r1=674693&r2=674694&view=diff
==============================================================================
--- 
maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/ModelTransformerContextTest.java
 (original)
+++ 
maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/ModelTransformerContextTest.java
 Mon Jul  7 18:16:38 2008
@@ -12,13 +12,6 @@
 
     @Test
     public void sortWithDuplicateProperty1() {
-/*
-Uri = 
http://apache.org/maven/project/build/pluginManagement/plugins#collection/plugin/artifactId,
 Value = maven-release-plugin, Resolved Value = maven-release-plugin
-Uri = 
http://apache.org/maven/project/build/pluginManagement/plugins#collection/plugin/groupId,
 Value = org.apache.maven.plugins, Resolved Value = org.apache.maven.plugins
-Uri = 
http://apache.org/maven/project/build/pluginManagement/plugins#collection/plugin/configuration/arguments,
 Value = -Prelease, Resolved Value = -Prelease
-Uri = 
http://apache.org/maven/project/build/pluginManagement/plugins#collection/plugin/configuration/goals,
 Value = deploy, Resolved Value = deploy
-Uri = 
http://apache.org/maven/project/build/pluginManagement/plugins#collection/plugin/configuration/useReleaseProfile,
 Value = false, Resolved Value = false
-*/
         ModelProperty dup0 = new 
ModelProperty("http://apache.org/maven/project";, null);
         ModelProperty dup1 = new 
ModelProperty("http://apache.org/maven/project/build";, null);
         ModelProperty dup2 = new 
ModelProperty("http://apache.org/maven/project/build/pluginManagement";, null);

Modified: 
maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/impl/DefaultModelDataSourceTest.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/impl/DefaultModelDataSourceTest.java?rev=674694&r1=674693&r2=674694&view=diff
==============================================================================
--- 
maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/impl/DefaultModelDataSourceTest.java
 (original)
+++ 
maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/impl/DefaultModelDataSourceTest.java
 Mon Jul  7 18:16:38 2008
@@ -1,14 +1,14 @@
 package org.apache.maven.shared.model.impl;
 
 import org.apache.maven.shared.model.*;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.*;
 import org.junit.Test;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
+import java.io.IOException;
 
 public class DefaultModelDataSourceTest {
 
@@ -19,7 +19,39 @@
     }
 
     @Test
-    public void join1() throws DataSourceException {
+    public void mergeModelContainers() throws IOException {
+        List<ModelProperty> modelProperties = Arrays.asList(
+                new ModelProperty("http://apache.org/maven/project";, null),
+                new ModelProperty("http://apache.org/maven/project/build";, 
null),
+                new 
ModelProperty("http://apache.org/maven/project/build/pluginManagement";, null),
+                new 
ModelProperty("http://apache.org/maven/project/build/pluginManagement/plugins#collection";,
 null),
+
+                new 
ModelProperty("http://apache.org/maven/project/build/pluginManagement/plugins#collection/plugin";,
 null),
+                new 
ModelProperty("http://apache.org/maven/project/build/pluginManagement/plugins#collection/plugin/version";,
 "2.0.2"),
+                new 
ModelProperty("http://apache.org/maven/project/build/pluginManagement/plugins#collection/plugin/artifactId";,
 "maven-compiler-plugin"),
+                new 
ModelProperty("http://apache.org/maven/project/build/pluginManagement/plugins#collection/plugin/groupId";,
 "org.apache.maven.plugins"),
+
+                new 
ModelProperty("http://apache.org/maven/project/build/pluginManagement/plugins#collection/plugin";,
 null),
+                new 
ModelProperty("http://apache.org/maven/project/build/pluginManagement/plugins#collection/plugin/version";,
 "2.0.2"),
+                new 
ModelProperty("http://apache.org/maven/project/build/pluginManagement/plugins#collection/plugin/artifactId";,
 "maven-compiler-plugin"),
+                new 
ModelProperty("http://apache.org/maven/project/build/pluginManagement/plugins#collection/plugin/groupId";,
 "org.apache.maven.plugins"),
+                new 
ModelProperty("http://apache.org/maven/project/build/pluginManagement/plugins#collection/a";,
 "a")
+        );
+
+
+        DummyModelContainerFactory factory = new DummyModelContainerFactory();
+
+        DefaultModelDataSource datasource = new DefaultModelDataSource();
+        datasource.init(modelProperties, factories);
+
+        List<ModelProperty> mps = datasource.mergeModelContainers(
+                factory.create(new 
ArrayList<ModelProperty>(modelProperties.subList(4, 8))),
+                factory.create(new 
ArrayList<ModelProperty>(modelProperties.subList(8, 13))));
+        assertTrue(mps.containsAll(new 
ArrayList<ModelProperty>(modelProperties.subList(4, 8))));
+    }
+
+    @Test
+    public void join1() throws DataSourceException, IOException {
         List<ModelProperty> modelProperties = Arrays.asList(
                 new ModelProperty("http://apache.org/maven/project";, null),
                 new ModelProperty("http://apache.org/maven/project/build";, 
null),
@@ -49,11 +81,15 @@
                 factory.create(new 
ArrayList<ModelProperty>(modelProperties.subList(8, 12))));
 
         for (ModelProperty mp : joinedModelContainer.getProperties()) {
-            //System.out.println("-" + mp);
+            System.out.println("-" + mp);
+        }
+
+        if 
(!datasource.getModelProperties().containsAll(joinedModelContainer.getProperties()))
 {
+            throw new IOException();
         }
 
         for (ModelProperty mp : datasource.getModelProperties()) {
-            //System.out.println("+" + mp);
+            System.out.println("+" + mp);
         }
 
     }
@@ -132,7 +168,7 @@
         assertEquals(modelContainer, modelContainerA);
     }
 
-
+    /*
     @Test(expected = DataSourceException.class)
     public void joinContainerWithElementsNotInDataSource() throws 
DataSourceException {
         ModelProperty mpA = new ModelProperty("a", null);
@@ -152,6 +188,7 @@
                 factory.create(new 
ArrayList<ModelProperty>(modelProperties.subList(0, 3))),
                 factory.create(new 
ArrayList<ModelProperty>(modelProperties.subList(1, 2))));
     }
+    */
 
     @Test
     public void cannotModifyDataSourceFromInitializedList() {


Reply via email to