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/09/05 13:58:34 UTC

svn commit: r692416 - /maven/shared/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java

Author: sisbell
Date: Fri Sep  5 04:58:34 2008
New Revision: 692416

URL: http://svn.apache.org/viewvc?rev=692416&view=rev
Log:
XML marshaller determines whether a node is terminal by a non-null value in the ModelProperty. Since the marshaller is binary in it's decision (null/non-null), put logic into transformer context that will detect and properly set the value prior to any marshaller.

Modified:
    maven/shared/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java

Modified: maven/shared/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java?rev=692416&r1=692415&r2=692416&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java (original)
+++ maven/shared/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java Fri Sep  5 04:58:34 2008
@@ -127,6 +127,7 @@
         List<ModelProperty> modelProperties =
             sort( transformedProperties, baseUriForModel );
 
+        modelProperties = determineLeafNodes(modelProperties);
         ModelDataSource modelDataSource = new DefaultModelDataSource();
         modelDataSource.init( modelProperties, factories );
 
@@ -302,6 +303,10 @@
                         ? (position.indexOf( parentUri.replaceAll("#property", "") ) + 1) : (position.indexOf( parentUri ) + 1);
                 if(pst == 0 && !uri.equals(properties.get(0).getUri()) )
                 {
+                    for(ModelProperty mp : properties)
+                    {
+                        System.out.println(mp);
+                    }
                     throw new IllegalArgumentException("Could not locate parent: Parent URI = " + parentUri
                             + ": Child - " + p.toString());
                 }
@@ -311,4 +316,38 @@
         }
         return processedProperties;
     }
+
+    private static List<ModelProperty> determineLeafNodes(List<ModelProperty> modelProperties)
+    {
+        List<ModelProperty> mps = new ArrayList<ModelProperty>();
+        for(ModelProperty mp : modelProperties)
+        {
+            if(mp.getValue() != null && mp.getValue().trim().equals("") && isLeafNode( mp, modelProperties) )
+            {
+                mps.add( new ModelProperty(mp.getUri(), null) );
+            }
+            else
+            {
+                mps.add(mp);
+            }
+        }
+        return mps;
+    }
+
+    private static boolean isLeafNode(ModelProperty modelProperty, List<ModelProperty> modelProperties)
+    {
+        for(int i = modelProperties.indexOf(modelProperty); i < modelProperties.size() - 1 ; i++)
+        {
+            ModelProperty peekProperty = modelProperties.get( i + 1 );
+            if(modelProperty.isParentOf( peekProperty ) && !peekProperty.getUri().contains( "#property") )
+            {
+                return true;
+            }
+            else if(!modelProperty.isParentOf( peekProperty ) )
+            {
+                return modelProperty.getDepth() < peekProperty.getDepth();
+            }
+        }
+        return true;
+    }
 }
\ No newline at end of file