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