This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository eugene. See http://git.nuiton.org/eugene.git commit 75a7c1f1a4f06922246f123818e4d7a6280a225e Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Aug 14 18:53:49 2015 +0200 Make works prefix and suffix on simpleBeanWithNoInterface generator (refs #3746) --- .../eugene/java/AbstractJavaBeanTransformer.java | 5 +- .../SimpleJavaBeanWithNoInterfaceTransformer.java | 209 +++++++++++++-------- 2 files changed, 137 insertions(+), 77 deletions(-) diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java index 84f5cba..6c6c053 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java @@ -186,8 +186,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer ); // Change type for Multiple attribute - attrType = JavaGeneratorUtil.getAttributeInterfaceType(attr, true); - + attrType = JavaGeneratorUtil.getAttributeInterfaceType(attr, getAttributeType(attr), true); simpleType = JavaGeneratorUtil.getSimpleName(attrType); } @@ -195,7 +194,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer if (multiple) { - String collectionImplementationType = JavaGeneratorUtil.getAttributeImplementationType(attr, true); + String collectionImplementationType = JavaGeneratorUtil.getAttributeImplementationType(attr, getAttributeType(attr), true); // creates a getXXX (multiple) method createGetMethod(output, diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformer.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformer.java index b904c55..e051166 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformer.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformer.java @@ -42,7 +42,6 @@ import org.nuiton.eugene.models.object.ObjectModelPackage; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; -import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Objects; @@ -138,10 +137,8 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr if (withInput) { - // class in not abstract // class is a bean - - canGenerate = !input.isAbstract() && JavaTemplatesStereoTypes.hasBeanStereotype(input, aPackage); + canGenerate = JavaTemplatesStereoTypes.hasBeanStereotype(input, aPackage); } } @@ -278,13 +275,33 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr boolean generatePredicates = getJavaTemplatesTagValues().isSimpleBeanWithNoInterfaceGeneratePredicates(aClass, aPackage, model); boolean generateFunctions = getJavaTemplatesTagValues().isSimpleBeanWithNoInterfaceGenerateFunctions(aClass, aPackage, model); + boolean generateContructors = !aClass.isAbstract(); + + String superClassName = null; + + // test if a super class has bean stereotype + boolean superClassIsBean = false; + Collection<ObjectModelClass> superclasses = aClass.getSuperclasses(); + if (CollectionUtils.isNotEmpty(superclasses)) { + for (ObjectModelClass superclass : superclasses) { + if (JavaTemplatesStereoTypes.hasBeanStereotype(superclass, aPackage)) { + superClassIsBean = true; + superClassName = superclass.getPackageName() + "." + getBeanDefaultsClassName(aPackage, superclass); + break; + } else { + superClassName = superclass.getQualifiedName(); + } + } + } - // generate abstract defaults class + if (!superClassIsBean) { - // try to find a super class by tag-value - String superClassName = - getJavaTemplatesTagValues().getSimpleBeanWithNoInterfaceDefaultsSuperClassTagValue( - aClass, aPackage, model); + // try to find a super class by tag-value + superClassName = getJavaTemplatesTagValues().getSimpleBeanWithNoInterfaceDefaultsSuperClassTagValue(aClass, aPackage, model); + + } + + // generate abstract defaults class ObjectModelClass output = createAbstractClass(abstractClassName, packageName); if (StringUtils.isNotBlank(superClassName)) { @@ -295,6 +312,9 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr log.debug("will generate " + output.getQualifiedName()); } + addImport(output, Binder.class); + addImport(output, BinderFactory.class); + ObjectModelOperation operation = addOperation( output, "typeOf" + typeName, @@ -307,54 +327,58 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr return (Class<BeanType>) <%=typeName%>.class; }*/ ); - operation = addOperation( - output, - "new" + typeName, - typeName, - ObjectModelJavaModifier.STATIC, - ObjectModelJavaModifier.PUBLIC - ); - setOperationBody(operation, "" + + if (generateContructors) { + + operation = addOperation( + output, + "new" + typeName, + typeName, + ObjectModelJavaModifier.STATIC, + ObjectModelJavaModifier.PUBLIC + ); + setOperationBody(operation, "" /*{ return new <%=typeName%>(); }*/ - ); - - addImport(output, Binder.class); - addImport(output, BinderFactory.class); - operation = addOperation( - output, - "new" + typeName, - "<BeanType extends " + typeName + "> BeanType", - ObjectModelJavaModifier.STATIC, - ObjectModelJavaModifier.PUBLIC - ); - addParameter(operation, "BeanType", "source"); - setOperationBody(operation, "" + ); + + operation = addOperation( + output, + "new" + typeName, + "<BeanType extends " + typeName + "> BeanType", + ObjectModelJavaModifier.STATIC, + ObjectModelJavaModifier.PUBLIC + ); + addParameter(operation, "BeanType", "source"); + setOperationBody(operation, "" /*{ Class<BeanType> sourceType = typeOf<%=typeName%>(); Binder<BeanType, BeanType> binder = BinderFactory.newBinder(sourceType); BeanType result = new<%=typeName%>(source, binder); return result; }*/ - ); - - operation = addOperation( - output, - "new" + typeName, - "<BeanType extends " + typeName + "> BeanType", - ObjectModelJavaModifier.STATIC, - ObjectModelJavaModifier.PUBLIC - ); - addParameter(operation, "BeanType", "source"); - addParameter(operation, "Binder<BeanType, BeanType>", "binder"); - setOperationBody(operation, "" + ); + + operation = addOperation( + output, + "new" + typeName, + "<BeanType extends " + typeName + "> BeanType", + ObjectModelJavaModifier.STATIC, + ObjectModelJavaModifier.PUBLIC + ); + addParameter(operation, "BeanType", "source"); + addParameter(operation, "Binder<BeanType, BeanType>", "binder"); + setOperationBody(operation, "" /*{ BeanType result = (BeanType) new<%=typeName%>(); binder.copy(source, result); return result; }*/ - ); + ); + + } + operation = addOperation( output, @@ -399,18 +423,35 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr } } - protected void generatePredicates(ObjectModelClass input, ObjectModelClass output, String typeName) { + @Override + protected String getAttributeType(ObjectModelAttribute attr) { + String attrType = super.getAttributeType(attr); + if (!JavaGeneratorUtil.isPrimitiveType(attrType)) { - List<ObjectModelAttribute> properties = getProperties(input); + boolean hasClass = model.hasClass(attrType); + if (hasClass) { + ObjectModelClass attributeClass = model.getClass(attrType); + String packageName = attributeClass.getPackageName(); + ObjectModelPackage attributePackage = model.getPackage(packageName); + if (JavaTemplatesStereoTypes.hasBeanStereotype(attributeClass, attributePackage)) { + + String classNamePrefix = getJavaTemplatesTagValues().getSimpleBeanWithNoInterfaceClassNamePrefixTagValue(attributeClass, attributePackage, model); + String classNameSuffix = getJavaTemplatesTagValues().getSimpleBeanWithNoInterfaceClassNameSuffixTagValue(attributeClass, attributePackage, model); + + String simpleType = JavaGeneratorUtil.getSimpleName(attrType); + attrType = generateName(classNamePrefix, simpleType, classNameSuffix); + + } + } - if (!properties.isEmpty()) { - addImport(output, Predicate.class); - addImport(output, Objects.class); - addImport(output, Iterable.class); - addImport(output, Iterables.class); } + return attrType; + } - for (ObjectModelAttribute attribute : properties) { + protected void generatePredicates(ObjectModelClass input, ObjectModelClass output, String typeName) { + + boolean atLeastOnePropertyfound=false; + for (ObjectModelAttribute attribute : getProperties(input)) { boolean multiple = JavaGeneratorUtil.isNMultiplicity(attribute); @@ -418,8 +459,10 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr continue; } + atLeastOnePropertyfound = true; String attrName = getAttributeName(attribute); String attrType = getAttributeType(attribute); + addImport(output, attrType); String simpleType = JavaGeneratorUtil.getSimpleName(attrType); @@ -465,20 +508,19 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr ); } - } - - protected void generateFunctions(ObjectModelClass input, ObjectModelClass output, String typeName) { - - List<ObjectModelAttribute> properties = getProperties(input); - if (!properties.isEmpty()) { - addImport(output, Function.class); + if (atLeastOnePropertyfound) { + addImport(output, Predicate.class); addImport(output, Objects.class); - addImport(output, ImmutableMap.class); addImport(output, Iterable.class); - addImport(output, Maps.class); + addImport(output, Iterables.class); } - for (ObjectModelAttribute attribute : properties) { + } + + protected void generateFunctions(ObjectModelClass input, ObjectModelClass output, String typeName) { + + boolean atLeastOnePropertyfound = false; + for (ObjectModelAttribute attribute : getProperties(input)) { boolean multiple = JavaGeneratorUtil.isNMultiplicity(attribute); @@ -486,10 +528,14 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr continue; } + atLeastOnePropertyfound = true; + String attrName = getAttributeName(attribute); String attrType = getAttributeType(attribute); + addImport(output, attrType); String simpleType = JavaGeneratorUtil.getSimpleName(attrType); + simpleType = wrapPrimitiveType(simpleType); String capitalizeAttrName = JavaGeneratorUtil.capitalizeJavaBeanPropertyName(attrName); String newFunctionMethodName= "new" + capitalizeAttrName + "Function"; String newFunctionTypeName= "Function<BeanType, " + simpleType + ">"; @@ -497,7 +543,7 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr ObjectModelOperation operation = addOperation( output, newFunctionMethodName, - "<BeanType extends " + typeName + "> "+newFunctionTypeName, + "<BeanType extends " + typeName + "> " + newFunctionTypeName, ObjectModelJavaModifier.STATIC, ObjectModelJavaModifier.PUBLIC ); @@ -542,6 +588,21 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr ); } + if (atLeastOnePropertyfound) { + addImport(output, Function.class); + addImport(output, Objects.class); + addImport(output, ImmutableMap.class); + addImport(output, Iterable.class); + addImport(output, Maps.class); + } + + } + + protected String wrapPrimitiveType(String attrType) { + if (JavaGeneratorUtil.isPrimitiveType(attrType)) { + attrType = JavaGeneratorUtil.getPRimitiveWrapType(attrType); + } + return attrType; } private String getGetterName(String attrName, ObjectModelAttribute attribute) { @@ -554,18 +615,18 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr return getterName; } - protected Collection<ObjectModelOperation> getPublicOperations(ObjectModelClass clazz) { - - Collection<ObjectModelOperation> result = new ArrayList<ObjectModelOperation>(); - for (ObjectModelOperation operation : clazz.getOperations()) { - - ObjectModelJavaModifier visibility = ObjectModelJavaModifier.fromVisibility(operation.getVisibility()); - if (ObjectModelJavaModifier.PUBLIC == visibility) { - result.add(operation); - } - } - return result; - } +// protected Collection<ObjectModelOperation> getPublicOperations(ObjectModelClass clazz) { +// +// Collection<ObjectModelOperation> result = new ArrayList<ObjectModelOperation>(); +// for (ObjectModelOperation operation : clazz.getOperations()) { +// +// ObjectModelJavaModifier visibility = ObjectModelJavaModifier.fromVisibility(operation.getVisibility()); +// if (ObjectModelJavaModifier.PUBLIC == visibility) { +// result.add(operation); +// } +// } +// return result; +// } protected String getBeanClassName(ObjectModelPackage aPackage, ObjectModelClass input) { String classNamePrefix = getJavaTemplatesTagValues().getSimpleBeanWithNoInterfaceClassNamePrefixTagValue(input, aPackage, model); -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.