Author: tchemit Date: 2010-11-16 13:31:51 +0100 (Tue, 16 Nov 2010) New Revision: 986 Url: http://nuiton.org/repositories/revision/eugene/986 Log: Evolution #1049: Add tagvalue noPCS to not generate PCS on JavaBeanTransformer Anomalie #1051: Duplicated Serializable interface generated in JavaBeanTransformer Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2010-11-11 23:25:20 UTC (rev 985) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2010-11-16 12:31:51 UTC (rev 986) @@ -79,6 +79,10 @@ ObjectModelClass ouputImpl = generateImpl(input, output); + String noPCSTagValue = input.getTagValue(JavaGeneratorUtil.TAG_NO_PCS); + boolean usePCS = StringUtils.isEmpty(noPCSTagValue) || + !"true".equals(noPCSTagValue.trim()); + if (log.isDebugEnabled()) { if (ouputImpl == null) { log.debug("will generate impl " + @@ -95,10 +99,11 @@ addSuperClass(input, output, ouputImpl); - addSerializable(output); + boolean serializableFound = addInterfaces(input, output); - addInterfaces(input, output); + addSerializable(output, serializableFound); + Set<String> constantNames = addConstantsFromDependency(input, output); // Get available properties @@ -113,14 +118,17 @@ // Add properties field + javabean methods for (ObjectModelAttribute attr : properties) { - createProperty(output, attr); + createProperty(output, attr, usePCS); } // Add operations createAbstractOperations(output, input.getOperations()); - // Add property change support - createPropertyChangeSupport(output); + if (usePCS) { + + // Add property change support + createPropertyChangeSupport(output); + } boolean hasAMultipleProperty = containsMutiple(properties); @@ -187,7 +195,8 @@ } protected void createProperty(ObjectModelClass output, - ObjectModelAttribute attr) { + ObjectModelAttribute attr, + boolean usePCS) { String attrName = getAttributeName(attr); String attrType = getAttributeType(attr); @@ -212,14 +221,17 @@ attrName, attrNameCapitalized, attrType, - constantName + constantName, + usePCS ); createRemoveChildMethod(output, attrName, attrNameCapitalized, attrType, - constantName + constantName, + usePCS + ); // Change type for Multiple attribute @@ -244,7 +256,8 @@ attrNameCapitalized, attrType, simpleType, - constantName + constantName, + usePCS ); // Add attribute to the class @@ -338,7 +351,8 @@ String attrName, String attrNameCapitalized, String attrType, - String constantName) { + String constantName, + boolean usePCS) { ObjectModelOperation addChild = addOperation( output, "add" + attrNameCapitalized, @@ -346,19 +360,28 @@ ObjectModelModifier.PUBLIC ); addParameter(addChild, attrType, attrName); - setOperationBody(addChild, "" + + StringBuilder buffer = new StringBuilder("" /*{ get<%=attrNameCapitalized%>().add(<%=attrName%>); + }*/ + ); + if (usePCS) { + buffer.append("" + /*{ firePropertyChange(<%=constantName%>, null, <%=attrName%>); }*/ - ); + ); + } + setOperationBody(addChild, buffer.toString()); } protected void createRemoveChildMethod(ObjectModelClass output, String attrName, String attrNameCapitalized, String attrType, - String constantName) { + String constantName, + boolean usePCS) { ObjectModelOperation operation = addOperation( output, "remove" + attrNameCapitalized, @@ -366,15 +389,28 @@ ObjectModelModifier.PUBLIC ); addParameter(operation, attrType, attrName); - setOperationBody(operation, "" + StringBuilder buffer = new StringBuilder(); + buffer.append("" /*{ boolean removed = get<%=attrNameCapitalized%>().remove(<%=attrName%>); + }*/ + ); + + if (usePCS) { + buffer.append("" + /*{ if (removed) { firePropertyChange(<%=constantName%>, <%=attrName%>, null); + } + }*/ + ); } + buffer.append("" + /*{ return removed; }*/ ); + setOperationBody(operation, buffer.toString()); } protected void createSetMethod(ObjectModelClass output, @@ -382,7 +418,8 @@ String attrNameCapitalized, String attrType, String simpleType, - String constantName) { + String constantName, + boolean usePCS) { ObjectModelOperation operation = addOperation( output, "set" + attrNameCapitalized, @@ -390,14 +427,21 @@ ObjectModelModifier.PUBLIC ); addParameter(operation, attrType, attrName); - - setOperationBody(operation, "" + if (usePCS) { + setOperationBody(operation, "" /*{ <%=simpleType%> oldValue = get<%=attrNameCapitalized%>(); this.<%=attrName%> = <%=attrName%>; firePropertyChange(<%=constantName%>, oldValue, <%=attrName%>); }*/ - ); + ); + } else { + setOperationBody(operation, "" + /*{ + this.<%=attrName%> = <%=attrName%>; + }*/ + ); + } } protected void createGetChildMethod(ObjectModelClass output) { @@ -424,19 +468,35 @@ ); } - protected void addSerializable(ObjectModelClass output) { - addInterface(output, Serializable.class); + protected void addSerializable(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); } - protected void addInterfaces(ObjectModelClass input, + /** + * Add all interfaces defines in input class and returns if + * {@link Serializable} interface was found. + * + * @param input the input model class to process + * @param output the output generated class + * @return {@code true} if {@link Serializable} was found from input, + * {@code false} otherwise + */ + protected boolean addInterfaces(ObjectModelClass input, ObjectModelClass output) { - // Add interfaces from inputModel + boolean foundSerializable = false; for (ObjectModelInterface parentInterface : input.getInterfaces()) { - addInterface(output, parentInterface.getQualifiedName()); + String fqn = parentInterface.getQualifiedName(); + addInterface(output, fqn); + if (Serializable.class.getName().equals(fqn)) { + foundSerializable = true; + } } + return foundSerializable; } protected void addSuperClass(ObjectModelClass input, Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java 2010-11-11 23:25:20 UTC (rev 985) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java 2010-11-16 12:31:51 UTC (rev 986) @@ -24,18 +24,12 @@ */ package org.nuiton.eugene.java; -import org.apache.commons.lang.StringUtils; import org.nuiton.eugene.GeneratorUtil; -import org.nuiton.eugene.models.object.ObjectModelAttribute; -import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelClassifier; import org.nuiton.eugene.models.object.ObjectModelModifier; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelParameter; -import java.util.Collection; -import java.util.List; - /** * Utility class for pure java templates. * @@ -58,6 +52,12 @@ public static final String TAG_CONSTANT_PREFIX = "constantPrefix"; /** + * tag value to set if do not want any pcs (says PropertyChangeSupport in a generated bean). + * @see JavaBeanTransformer + */ + public static final String TAG_NO_PCS= "noPCS"; + + /** * tag value to add the version of the model from outside (says in the * properties file associated to the model).. *