| package ${package}; |
| |
| import org.apache.archiva.redback.components.registry.Registry; |
| |
| // Util imports |
| import java.util.*; |
| |
| // Model class imports |
| #foreach ( $class in $classes ) |
| #if ( ${class.packageName} != ${package} ) |
| import ${class.packageName}.${class.name}; |
| #end |
| #end |
| |
| ## TODO! make it possible to change property name via metadata |
| ## TODO! handle other types |
| |
| #macro ( writePrimitive $type $value $name ) |
| #if ( $type == "boolean" ) |
| registry.setBoolean( prefix + $name, $value ); |
| #elseif ( $type == "char" ) |
| $javaTool.fail( "Type not yet handled: $type" ) |
| #elseif ( $type == "double" ) |
| $javaTool.fail( "Type not yet handled: $type" ) |
| #elseif ( $type == "float" ) |
| $javaTool.fail( "Type not yet handled: $type" ) |
| #elseif ( $type == "int" ) |
| registry.setInt( prefix + $name, $value ); |
| #elseif ( $type == "long" ) |
| $javaTool.fail( "Type not yet handled: $type" ) |
| #elseif ( $type == "short" ) |
| $javaTool.fail( "Type not yet handled: $type" ) |
| #elseif ( $type == "String" ) |
| registry.setString( prefix + $name, $value ); |
| #elseif ( $type == "Boolean" ) |
| $javaTool.fail( "Type not yet handled: $type" ) |
| #elseif ( $type == "Date" ) |
| $javaTool.fail( "Type not yet handled: $type" ) |
| #elseif ( $type == "DOM" ) |
| $javaTool.fail( "Type not yet handled: $type" ) |
| #else |
| $javaTool.fail( "Unknown type: $type" ) |
| #end |
| #end |
| |
| #macro ( writeValueChecker $type $value $field ) |
| #if ( $type == "boolean" || $type == "double" || $type == "float" || $type == "int" || $type == "long" || $type == "short" ) |
| $value != $field.defaultValue |
| #elseif ( $type == "char" ) |
| $value != '$field.defaultValue' |
| #elseif ( $type == "java.util.List" || $type == "java.util.Set" || $type == "java.util.Map" || $type == "java.util.Properties" ) |
| $value != null && ${value}.size() > 0 |
| #elseif ( $type == "String" && $field.defaultValue ) |
| $value != null && !${value}.equals( "$field.defaultValue" ) |
| #elseif ( $type == "Date" && $field.defaultValue ) |
| $value != null && !${value}.equals( "$field.defaultValue" ) |
| #else |
| $value != null |
| #end |
| #end |
| |
| /** |
| * Generate Plexus Registry output mechanism for model '${model.name}'. |
| */ |
| public class ${model.name}RegistryWriter |
| { |
| public void write( ${model.name} model, Registry registry ) |
| { |
| #set ( $root = $model.getClass( $model.getRoot( $version ), $version ) ) |
| write${root.name}( "", model, registry ); |
| } |
| |
| #foreach ( $class in $classes ) |
| private void write${class.name}( String prefix, ${class.name} value, Registry registry ) |
| { |
| if ( value != null ) |
| { |
| #foreach ( $field in $class.getAllFields( $version, true ) ) |
| #set ( $uncapFieldName = $javaTool.uncapitalise($field.name) ) |
| #set ( $value = "value.${javaTool.makeGetter( $field )}()" ) |
| #if ( $field.primitive ) |
| if ( #writeValueChecker( $field.type $value $field ) ) |
| { |
| String name = "$uncapFieldName"; |
| #writePrimitive( $field.type $value "name" ) |
| } |
| #else |
| #set ( $assoc = $field ) |
| #if ( $assoc.multiplicity == "1" ) |
| if ( #writeValueChecker( $field.type $value $field ) ) |
| { |
| write${assoc.to}( prefix + "${uncapFieldName}.", $value, registry ); |
| } |
| #else |
| if ( #writeValueChecker( $assoc.type $value $field ) ) |
| { |
| #if ( $assoc.type == "java.util.List" || $assoc.type == "java.util.Set" ) |
| ## TODO! make it possible to have unwrapped lists via metadata |
| registry.removeSubset( prefix + "${uncapFieldName}" ); |
| |
| int count = 0; |
| for ( Iterator iter = ${value}.iterator(); iter.hasNext(); count++ ) |
| { |
| #set ( $singularFieldName = $javaTool.singular($uncapFieldName) ) |
| String name = "${uncapFieldName}.${singularFieldName}(" + count + ")"; |
| #if ( $model.hasClass( $assoc.to, $version ) ) |
| $assoc.to o = ( $assoc.to ) iter.next(); |
| write${assoc.to}( prefix + name + ".", o, registry ); |
| #else |
| $assoc.to $singularFieldName = ( $assoc.to ) iter.next(); |
| #writePrimitive( $assoc.to $singularFieldName "name" ) |
| #end |
| } |
| #elseif ( $assoc.type == "java.util.Map" || $assoc.type == "java.util.Properties" ) |
| ## TODO! make it possible to have exploded maps in xml via metadata |
| ## TODO! make it possible to have unwrapped lists via metadata |
| registry.removeSubset( prefix + "${uncapFieldName}" ); |
| |
| for ( Iterator iter = ${value}.keySet().iterator(); iter.hasNext(); ) |
| { |
| String key = (String) iter.next(); |
| String v = (String) ${value}.get( key ); |
| |
| registry.setString( prefix + "${uncapFieldName}." + key, v ); |
| } |
| #else |
| $javaTool.fail( "Unknown collection type: $assoc.type" ) |
| #end |
| } |
| #end |
| #end |
| #end |
| } |
| } |
| |
| #end |
| } |