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));
+ }
+}