private TypedObjectNode transformGeometries( TypedObjectNode value, GeometryTransformer transformer ) throws IllegalArgumentException, TransformationException, UnknownCRSException { if ( value == null ) { // nothing to do } else if ( value instanceof GenericXMLElement ) { GenericXMLElement generic = (GenericXMLElement) value; List<TypedObjectNode> newChildren = new ArrayList<TypedObjectNode>( generic.getChildren().size() ); for ( int i = 0; i < generic.getChildren().size(); i++ ) { TypedObjectNode child = generic.getChildren().get( i ); TypedObjectNode transformed = transformGeometries( child, transformer ); newChildren.add( transformed ); } generic.setChildren( newChildren ); } else if ( value instanceof Property ) { Property generic = (Property) value; List<TypedObjectNode> newChildren = new ArrayList<TypedObjectNode>( generic.getChildren().size() ); for ( int i = 0; i < generic.getChildren().size(); i++ ) { TypedObjectNode child = generic.getChildren().get( i ); TypedObjectNode transformed = transformGeometries( child, transformer ); newChildren.add( transformed ); } generic.setChildren( newChildren ); } else if ( value instanceof Geometry ) { value = transformGeometry( (Geometry) value, transformer ); } else if ( value instanceof PrimitiveValue ) { // nothing to do } return value; }
private Feature transformGeometries( Feature feature, GeometryTransformer transformer ) throws IllegalArgumentException, TransformationException, UnknownCRSException { // TODO Do not modify the incoming feature, but create a new one. for ( Property prop : feature.getProperties() ) { List<TypedObjectNode> children = prop.getChildren(); if ( children != null && !children.isEmpty() ) { List<TypedObjectNode> newChildren = new ArrayList<TypedObjectNode>( children.size() ); for ( TypedObjectNode child : children ) { newChildren.add( transformGeometries( child, transformer ) ); } prop.setChildren( newChildren ); } else { TypedObjectNode value = prop.getValue(); if ( value != null ) { prop.setValue( transformGeometries( value, transformer ) ); } } } feature.setEnvelope( feature.calcEnvelope() ); return feature; }
if ( pt instanceof CustomPropertyType && propValue instanceof GenericXMLElement ) { prop = new GenericProperty( pt, propValue ); prop.setChildren( ( (GenericXMLElement) propValue ).getChildren() );