Author: tchemit Date: 2011-10-14 16:21:35 +0200 (Fri, 14 Oct 2011) New Revision: 1107 Url: http://nuiton.org/repositories/revision/eugene/1107 Log: fix + improve bean generator Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2011-10-13 15:45:26 UTC (rev 1106) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2011-10-14 14:21:35 UTC (rev 1107) @@ -28,12 +28,12 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.EugeneTagValues; +import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.models.object.*; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.io.Serializable; -import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -65,14 +65,24 @@ @Override public void transformFromClass(ObjectModelClass input) { - if (!canGenerate(input)) { - if (log.isDebugEnabled()) { - log.debug("Skip generation for " + input.getQualifiedName()); - } + if (!JavaGeneratorUtil.hasBeanStereotype(input)) { + + // not a bean return; } + if (canGenerateImpl(input)) { + + generateImpl(input); + } + + if (!canGenerateAbstract(input)) { + + // nothing more to do + return; + } + ObjectModelClass output = createAbstractClass(input.getName(), input.getPackageName()); @@ -85,33 +95,20 @@ generateI18nBlock(input, output, i18nPrefix); } - ObjectModelClass ouputImpl = generateImpl(input, output); - String noPCSTagValue = JavaGeneratorUtil.getNoPCSTagValue(model, input); boolean usePCS = StringUtils.isEmpty(noPCSTagValue) || !"true".equals(noPCSTagValue.trim()); - if (log.isDebugEnabled()) { - if (ouputImpl == null) { - log.debug("will generate impl " + - output.getQualifiedName()); - } else { - log.debug("do not generate existing impl " + - output.getQualifiedName()); - } - } - String prefix = getConstantPrefix(input, DEFAULT_CONSTANT_PREFIX); setConstantPrefix(prefix); - addSuperClass(input, output, ouputImpl); + addSuperClass(input, output); boolean serializableFound = addInterfaces(input, output); - addSerializable(output, serializableFound); + addSerializable(input, output, serializableFound); - Set<String> constantNames = addConstantsFromDependency(input, output); // Get available properties @@ -146,6 +143,27 @@ } } + protected boolean canGenerateAbstract(ObjectModelClass input) { + boolean b = !isInClassPath(input); + return b; + } + + protected boolean canGenerateImpl(ObjectModelClass input) { + String fqn = input.getQualifiedName() + "Impl"; + + if (isInClassPath(fqn)) { + + // already in class-path + return false; + } + + boolean hasOperations = !input.getAllOtherOperations(true).isEmpty() || + !input.getOperations().isEmpty(); + + // generate only if no user operations found + return !hasOperations; + } + protected void createPropertyConstant(ObjectModelClass output, ObjectModelAttribute attr, String prefix, @@ -636,13 +654,18 @@ ); } - protected void addSerializable(ObjectModelClass output,boolean interfaceFound) { + protected void addSerializable(ObjectModelClass input, + ObjectModelClass output, + boolean interfaceFound) { if (!interfaceFound) { addInterface(output, Serializable.class); } - // Maybe generate the UID for each different generation ? - addConstant(output, "serialVersionUID", "long", "1L", - ObjectModelModifier.PRIVATE); + + // Generate the serialVersionUID + long serialVersionUID = GeneratorUtil.generateSerialVersionUID(input); + + addConstant(output, "serialVersionUID", "long", serialVersionUID + "L", + ObjectModelModifier.PRIVATE); } /** @@ -668,58 +691,30 @@ } protected void addSuperClass(ObjectModelClass input, - ObjectModelClass output, - ObjectModelClass outputImpl) { + ObjectModelClass output) { // Set superclass - if (outputImpl == null) { - Iterator<ObjectModelClass> j = input.getSuperclasses().iterator(); - if (j.hasNext()) { - ObjectModelClass p = j.next(); - // We want to set the inheritance to the implementation class of the father - // Ex for model : A -> B (a inherits B) we want : A -> BImpl -> B - String qualifiedName = p.getQualifiedName() + "Impl"; - setSuperClass(output, qualifiedName); - } + Iterator<ObjectModelClass> j = input.getSuperclasses().iterator(); + if (j.hasNext()) { + ObjectModelClass p = j.next(); + // We want to set the inheritance to the implementation class of the father + // Ex for model : A -> B (a inherits B) we want : A -> BImpl -> B + String qualifiedName = p.getQualifiedName() + "Impl"; + setSuperClass(output, qualifiedName); } } - protected ObjectModelClass generateImpl(ObjectModelClass input, - ObjectModelClass output) { + protected ObjectModelClass generateImpl(ObjectModelClass input) { - // Get name for Impl class - String fqn = input.getQualifiedName() + "Impl"; + ObjectModelClass resultClassImpl = createClass( + input.getName() + "Impl", + input.getPackageName() + ); - if (!isInClassPath(fqn)) { - - // already in class-path - return null; - } - - // Does bean own operations ? - boolean hasOperations = !input.getAllOtherOperations(true).isEmpty() || - !input.getOperations().isEmpty(); - - ObjectModelClass resultClassImpl = null; - // Generate the Impl class if not already exist in classpath and no operation is defined in model - if (!hasOperations) { - String implName = input.getName() + "Impl"; - resultClassImpl = createClass(implName, input.getPackageName()); - // set the abstract resulClass as the resultClassImpl super class - setSuperClass(resultClassImpl, output.getQualifiedName()); - } + // set the abstract resulClass as the resultClassImpl super class + setSuperClass(resultClassImpl, input.getQualifiedName()); return resultClassImpl; } - protected boolean canGenerate(ObjectModelClass input) { - boolean b = JavaGeneratorUtil.hasBeanStereotype(input); - if (b) { - - // check if not found in class-path - b = !isInClassPath(input); - } - return b; - } - protected void createPropertyChangeSupport(ObjectModelClass output) { addAttribute(output,
participants (1)
-
tchemit@users.nuiton.org