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/07/03 03:47:43 UTC

svn commit: r673560 - in /maven/sandbox/trunk/shared/maven-shared-model/src: main/java/org/apache/maven/shared/model/ main/java/org/apache/maven/shared/model/impl/ test/java/org/apache/maven/shared/model/

Author: sisbell
Date: Wed Jul  2 18:47:43 2008
New Revision: 673560

URL: http://svn.apache.org/viewvc?rev=673560&view=rev
Log:
Swapped kxml parser for stax, solved numerous parsing errors. Merged containers now sort elements.

Added:
    maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/ModelPropertyTest.java
Modified:
    maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelMarshaller.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

Modified: maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelMarshaller.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelMarshaller.java?rev=673560&r1=673559&r2=673560&view=diff
==============================================================================
--- maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelMarshaller.java (original)
+++ maven/sandbox/trunk/shared/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelMarshaller.java Wed Jul  2 18:47:43 2008
@@ -4,8 +4,13 @@
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamConstants;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.FileReader;
 import java.util.*;
 
 /**
@@ -29,8 +34,76 @@
         }
 
         List<ModelProperty> modelProperties = new ArrayList<ModelProperty>();
+        XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
+        Uri uri = new Uri(baseUri);
+        String tagName = baseUri;
+        String tagValue = null;
 
-        KXmlParser parser = new KXmlParser();       
+        int depth = 0;
+        XMLStreamReader xmlStreamReader = null;
+        try {
+            xmlStreamReader = xmlInputFactory.createXMLStreamReader(inputStream);
+            for (; ; xmlStreamReader.next()) {
+                int type = xmlStreamReader.getEventType();
+                switch (type) {
+
+                    case XMLStreamConstants.CHARACTERS: {
+                        String tmp = xmlStreamReader.getText();
+                        if (tmp != null && tmp.trim().length() != 0) {
+                            tagValue = tmp;
+                        }
+                        break;
+                    }
+
+                    case XMLStreamConstants.START_ELEMENT: {
+                        depth++;
+                     //   if (xmlStreamReader.getElementText() == null) {
+                     //       tagValue = "";
+                     //   }
+
+                        if (!tagName.equals(baseUri)) {
+                            modelProperties.add(new ModelProperty(tagName, tagValue));
+                        }
+
+                        tagName = uri.getUriFor(xmlStreamReader.getName().getLocalPart(), depth);
+                        if (collections.contains(tagName + "#collection")) {
+                            tagName = tagName + "#collection";
+                            uri.addTag(xmlStreamReader.getName().getLocalPart() + "#collection");
+                        } else {
+                            uri.addTag(xmlStreamReader.getName().getLocalPart());
+                        }
+                        tagValue = null;
+                        break;
+                    }
+                    case XMLStreamConstants.END_ELEMENT: {
+                        depth--;
+                        if (tagValue == null) tagValue = "";
+                        break;
+                    }
+                    case XMLStreamConstants.END_DOCUMENT: {
+                        modelProperties.add(new ModelProperty(tagName, tagValue));
+                        return modelProperties;
+                    }
+                }
+            }
+        } catch (XMLStreamException e) {
+            throw new IOException(":" + e.toString());
+        } finally {
+            if(xmlStreamReader != null) {
+                try {
+                    xmlStreamReader.close();
+                } catch (XMLStreamException e) {
+                    e.printStackTrace();
+                }
+            }
+            try {
+                inputStream.close();
+            } catch (IOException e) {
+
+            }
+        }
+        /*
+        KXmlParser parser = new KXmlParser();
         try {
             parser.setInput(inputStream, null);
         } catch (XmlPullParserException e) {
@@ -41,7 +114,8 @@
             }
             throw new IOException(e.toString());
         }
-
+        */
+        /*
         Uri uri = new Uri(baseUri);
         String tagName = baseUri;
         String tagValue = null;
@@ -95,6 +169,7 @@
 
             }
         }
+        */
     }
 
 

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=673560&r1=673559&r2=673560&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 Wed Jul  2 18:47:43 2008
@@ -22,6 +22,8 @@
      */
     private final String value;
 
+    private final int depth;
+
     private String resolvedValue;
 
     private final List<String> expressions;
@@ -47,6 +49,7 @@
                 expressions.add(matcher.group(0));
             }
         }
+        depth = uri.split("/").length;
     }
 
     /**
@@ -79,6 +82,26 @@
         return new ModelProperty(uri, value);
     }
 
+    public int getDepth() {
+        return depth;
+    }
+
+    public boolean isParentOf(ModelProperty modelProperty) {
+        if( Math.abs(depth - modelProperty.getDepth()) > 1) {
+            return false;
+        }
+        if (uri.equals(modelProperty.getUri()) || uri.startsWith(modelProperty.getUri())) {
+            return false;
+        }
+        return (modelProperty.getUri().startsWith(uri));
+    }
+    /*
+        public boolean isParentOf(ModelProperty modelProperty) {
+        return !(uri.equals(modelProperty.getUri()) || uri.startsWith(modelProperty.getUri()))
+                && (modelProperty.getUri().startsWith(uri));
+    }
+     */
+
     public InterpolatorProperty asInterpolatorProperty(String baseUri) {
         if (uri.contains("#collection") || value == null) {
             return null;

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=673560&r1=673559&r2=673560&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 Wed Jul  2 18:47:43 2008
@@ -72,32 +72,39 @@
                 }
             }
         }
-      //  System.out.println("Time= " + (System.currentTimeMillis() - start));
+        //  System.out.println("Time= " + (System.currentTimeMillis() - start));
 
         //interpolator
         List<ModelProperty> mps = modelDataSource.getModelProperties();
         long s = System.currentTimeMillis();
-        /*
+
         for (ModelProperty mp : mps) {
             InterpolatorProperty ip = mp.asInterpolatorProperty(baseUriForModel);
             if (ip != null) {
                 properties.add(ip);
             }
         }
-         */
+
         List<ModelProperty> unresolvedProperties = new ArrayList<ModelProperty>();
         for (ModelProperty mp : mps) {
             if (!mp.isResolved()) {
                 unresolvedProperties.add(mp);
             }
         }
-
+        /*
+        System.out.println("Properties: " + properties.size());
         for (InterpolatorProperty ip : properties) {
             for (ModelProperty mp : unresolvedProperties) {
+                System.out.println(ip);
                 mp.resolveWith(ip);
+                System.out.println(mp);
+                System.out.println("-------------------");
             }
         }
+
+        */
         //System.out.println("Resolve Time = " + (System.currentTimeMillis() - s));
+        validate(mps);
         return toModelTransformer.transformToDomainModel(mps);
     }
 
@@ -108,7 +115,7 @@
      * @param domainModels
      * @param fromModelTransformer
      * @param toModelTransformer
-     * @return 
+     * @return
      * @throws IOException
      */
     public DomainModel transform(List<DomainModel> domainModels, ModelTransformer fromModelTransformer,
@@ -117,7 +124,6 @@
         return this.transform(domainModels, fromModelTransformer, toModelTransformer, systemInterpolatorProperties);
     }
 
-    
 
     /**
      * Sorts specified list of model properties. Typically the list contain property information from the entire
@@ -153,4 +159,40 @@
         }
         return processedProperties;
     }
+    /*
+    private static List<ModelProperty> validateWithCorrections(List<ModelProperty> modelProperties) throws IOException {
+        List<ModelProperty> mps = new ArrayList<ModelProperty>();
+        mps.add(modelProperties.get(0));
+        for (int i = 1; i < modelProperties.size(); i++) {
+            ModelProperty previous = modelProperties.get(i - 1);
+            ModelProperty current = modelProperties.get(i);
+            if ((!previous.isParentOf(current) && current.getDepth() > previous.getDepth())
+                    || (current.getDepth() - previous.getDepth() > 1)) {
+                for (int j = mps.size(); j <= 0; j--) {
+                    if (mps.get(j - 1).isParentOf(current)) {
+                        mps.add(j - 1, current);
+                        break;
+                    }
+                }
+            } else {
+                mps.add(current);
+            }
+        }
+        return mps;
+    }
+    */
+    private static void validate(List<ModelProperty> modelProperties) throws IOException {
+        for (int i = 1; i < modelProperties.size(); i++) {
+            ModelProperty previous = modelProperties.get(i - 1);
+            ModelProperty current = modelProperties.get(i);
+            if ((!previous.isParentOf(current) && current.getDepth() > previous.getDepth())
+                    || (current.getDepth() - previous.getDepth() > 1)) {
+                int j = 0;
+                for (ModelProperty mp : modelProperties) {
+                    System.out.println((j++) + ":" + mp);
+                }
+                throw new IOException("Invalid Model Property: Property " + current + ", Line = " + i);
+            }
+        }
+    }
 }

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=673560&r1=673559&r2=673560&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 Wed Jul  2 18:47:43 2008
@@ -32,8 +32,8 @@
         delete(b);
 
         List<ModelProperty> joinedProperties = mergeModelContainers(a, b);
-        if(modelProperties.size() == 0) {
-            startIndex = 0;    
+        if (modelProperties.size() == 0) {
+            startIndex = 0;
         }
         modelProperties.addAll(startIndex, joinedProperties);
         return a.createNewInstance(joinedProperties);
@@ -135,6 +135,16 @@
         }
     }
 
+
+    private static int findLastIndexOfParent(ModelProperty modelProperty, List<ModelProperty> modelProperties) {
+        for (int i = modelProperties.size() - 1; i >= 0; i--) {
+            if (modelProperties.get(i).isParentOf(modelProperty)) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
     /**
      * Removes duplicate model properties from the containers and return list.
      *
@@ -152,11 +162,10 @@
 
         for (ModelProperty p : m) {
             if (!uris.contains(p.getUri())) {
-                processedProperties.add(p);
+                processedProperties.add(findLastIndexOfParent(p, processedProperties) + 1, p);
                 uris.add(p.getUri());
             }
         }
-        a.sort(processedProperties);
         return processedProperties;
     }
 }

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=673560&r1=673559&r2=673560&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 Wed Jul  2 18:47:43 2008
@@ -8,6 +8,7 @@
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
+import java.io.FileInputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -33,6 +34,22 @@
         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 {

Added: maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/ModelPropertyTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/ModelPropertyTest.java?rev=673560&view=auto
==============================================================================
--- maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/ModelPropertyTest.java (added)
+++ maven/sandbox/trunk/shared/maven-shared-model/src/test/java/org/apache/maven/shared/model/ModelPropertyTest.java Wed Jul  2 18:47:43 2008
@@ -0,0 +1,22 @@
+package org.apache.maven.shared.model;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+
+public class ModelPropertyTest {
+
+    @Test
+    public void isParent() {
+        ModelProperty mp0 = new ModelProperty("http://apache.org/maven/project/profiles#collection/profile/id", "1");
+        ModelProperty mp1 = new ModelProperty("http://apache.org/maven/project/profiles#collection/profile/build/plugins/plugin/groupId", "org");
+        assertFalse(mp0.isParentOf(mp1));
+        assertTrue(mp0.getDepth() < mp1.getDepth());
+    }
+
+    @Test
+    public void isParent1() {
+        ModelProperty mp0 = new ModelProperty("http://apache.org/maven/project/profiles#collection/profile/id", "1");
+        ModelProperty mp1 = new ModelProperty("http://apache.org/maven/project/profiles#collection/profile/id/a/b", "org");
+        assertFalse(mp0.isParentOf(mp1));
+    }
+}