Author: tchemit Date: 2012-11-06 10:49:22 +0100 (Tue, 06 Nov 2012) New Revision: 1200 Url: http://nuiton.org/repositories/revision/eugene/1200 Log: fixes #2394: Can specify a super classon generated bean Modified: trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesGeneratorUtil.java trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesTagValues.java trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesModelPropertiesProviderTest.java Modified: trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java =================================================================== --- trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2012-11-06 09:14:01 UTC (rev 1199) +++ trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2012-11-06 09:49:22 UTC (rev 1200) @@ -99,9 +99,27 @@ } } + String superClass = null; + + if (!superClassIsBean) { + + // try to find a super class by tag-value + superClass = + JavaTemplatesGeneratorUtil.getBeanSuperClassTagValue( + model, input); + if (superClass != null) { + + // will act as if super class is a bean + superClassIsBean = true; + } + } + ObjectModelClass output = createAbstractClass(input.getName(), input.getPackageName()); + if (superClass != null) { + setSuperClass(output, superClass); + } if (log.isDebugEnabled()) { log.debug("will generate " + output.getQualifiedName()); } Modified: trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesGeneratorUtil.java =================================================================== --- trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesGeneratorUtil.java 2012-11-06 09:14:01 UTC (rev 1199) +++ trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesGeneratorUtil.java 2012-11-06 09:49:22 UTC (rev 1200) @@ -63,4 +63,21 @@ String value = findTagValue(JavaTemplatesTagValues.TAG_NO_PCS, classifier, model); return value; } + + /** + * Obtain the value of the {@link JavaTemplatesTagValues#TAG_BEAN_SUPER_CLASS} + * tag value on the given model or classifier. + * <p/> + * It will first look on the model, and then in the given classifier. + * + * @param model model to seek + * @param classifier classifier to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see JavaTemplatesTagValues#TAG_BEAN_SUPER_CLASS + * @since 2.3 + */ + public static String getBeanSuperClassTagValue(ObjectModel model, ObjectModelClassifier classifier) { + String value = findTagValue(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS, classifier, model); + return value; + } } Modified: trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesTagValues.java =================================================================== --- trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesTagValues.java 2012-11-06 09:14:01 UTC (rev 1199) +++ trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesTagValues.java 2012-11-06 09:49:22 UTC (rev 1200) @@ -50,4 +50,56 @@ documentation = "To specify to not generate any propertyChange " + "code for a class or any class of a model") String TAG_NO_PCS = "noPCS"; + + /** + * Tag value to use a super class for generated bean. + * <p/> + * If the bean needs Property change support (says you do not add the {@link #TAG_NO_PCS} on classifier or model, + * then your class must provide evrything for it. + * <p/> + * See newt code to know minimum stuff to add in your class for this purpose). + * <pre> + * public abstract class AbstractBean implements Serializable { + * + * private static final long serialVersionUID = 1L; + * + * protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + * + * public void addPropertyChangeListener(PropertyChangeListener listener) { + * pcs.addPropertyChangeListener(listener); + * } + * + * public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { + * pcs.addPropertyChangeListener(propertyName, listener); + * } + * + * public void removePropertyChangeListener(PropertyChangeListener listener) { + * pcs.removePropertyChangeListener(listener); + * } + * + * public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { + * pcs.removePropertyChangeListener(propertyName, listener); + * } + * + * protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { + * pcs.firePropertyChange(propertyName, oldValue, newValue); + * } + * + * protected void firePropertyChange(String propertyName, Object newValue) { + * firePropertyChange(propertyName, null, newValue); + * } + * + * } + * </pre> + * <p/> + * You can globaly use it on the complete model or to a specific classifier. + * + * @see JavaTemplatesGeneratorUtil#getBeanSuperClassTagValue(ObjectModel, ObjectModelClassifier) + * @since 2.5.6 + */ + @ModelPropertiesUtil.TagValueDefinition( + target = {ObjectModel.class, ObjectModelClassifier.class}, + documentation = "To specify a super-class to place on generated bean " + + "for a class or any class of a model") + String TAG_BEAN_SUPER_CLASS = "beanSuperClass"; } Modified: trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesModelPropertiesProviderTest.java =================================================================== --- trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesModelPropertiesProviderTest.java 2012-11-06 09:14:01 UTC (rev 1199) +++ trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesModelPropertiesProviderTest.java 2012-11-06 09:49:22 UTC (rev 1200) @@ -60,19 +60,24 @@ @Test public void containsTagValue() throws Exception { containsTagValue(JavaTemplatesTagValues.TAG_NO_PCS, true); + containsTagValue(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS, true); long l = System.nanoTime(); containsTagValue(JavaTemplatesTagValues.TAG_NO_PCS + l, false); + containsTagValue(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS + l, false); } @Test public void acceptTagValue() throws Exception { acceptTagValue(JavaTemplatesTagValues.TAG_NO_PCS, true, ObjectModel.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); + acceptTagValue(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS, true, ObjectModel.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); acceptTagValue(JavaTemplatesTagValues.TAG_NO_PCS, false, ObjectModelOperation.class, ObjectModelAttribute.class); + acceptTagValue(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS, false, ObjectModelOperation.class, ObjectModelAttribute.class); long l = System.nanoTime(); acceptTagValue(JavaTemplatesTagValues.TAG_NO_PCS + l, false, ObjectModelOperation.class, ObjectModelAttribute.class); + acceptTagValue(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS + l, false, ObjectModelOperation.class, ObjectModelAttribute.class); } @Test