This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository nuiton-config. See https://gitlab.nuiton.org/nuiton/nuiton-config.git commit 59442b95ec7351a940e4b35ac703d6105485529c Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Oct 7 18:33:52 2016 +0200 Add generatePropertyChangeSupport on generate mojo --- .../org/nuiton/config/plugin/GenerateMojo.java | 11 +++ .../templates/ApplicationConfigTransformer.java | 101 +++++++++++++++++++-- .../ApplicationConfigTransformerConfig.java | 2 + 3 files changed, 104 insertions(+), 10 deletions(-) diff --git a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/GenerateMojo.java b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/GenerateMojo.java index 2f2ae93..0b3e9b6 100644 --- a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/GenerateMojo.java +++ b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/GenerateMojo.java @@ -113,6 +113,12 @@ public class GenerateMojo extends ConfigMojoSupport implements ApplicationConfig private boolean generateProvider; /** + * To generate property change support on generated configuration class. + */ + @Parameter(property = "config.generatePropertyChangeSupport", defaultValue = "false") + private boolean generatePropertyChangeSupport; + + /** * To use nuiton-i18n API to translate descriptions in generate code. */ @Parameter(property = "config.useNuitonI18n") @@ -295,6 +301,11 @@ public class GenerateMojo extends ConfigMojoSupport implements ApplicationConfig } @Override + public boolean isGeneratePropertyChangeSupport() { + return generatePropertyChangeSupport; + } + + @Override public String getConfigProviderClassName() { return configProviderClassName; } diff --git a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/templates/ApplicationConfigTransformer.java b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/templates/ApplicationConfigTransformer.java index fa3ab97..34997d8 100644 --- a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/templates/ApplicationConfigTransformer.java +++ b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/templates/ApplicationConfigTransformer.java @@ -46,6 +46,8 @@ import org.nuiton.eugene.models.object.ObjectModelJavaModifier; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.i18n.I18n; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; @@ -142,7 +144,7 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { if (log.isInfoEnabled()) { log.info("Generate " + output.getQualifiedName()); } - + for (OptionModel option : options) { String literalName = GeneratorUtil.convertVariableNameToConstantName(option.getName()); @@ -510,6 +512,7 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { }*/ ); + boolean generatePropertyChangeSupport = config.isGeneratePropertyChangeSupport(); for (OptionModel option : options) { String attrName = option.getName(); @@ -520,14 +523,13 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { addImport(output, attrType); createGetMethod(output, attrName, simpleType, constantName); - createSetMethod(output, attrName, simpleType, constantName); + createSetMethod(output, attrName, simpleType, constantName, generatePropertyChangeSupport); } ObjectModelOperation getConfigurationDescription = addOperation( - output, "getConfigurationDescription", String.class, ObjectModelJavaModifier.PUBLIC - ); - setOperationBody(getConfigurationDescription , "" + output, "getConfigurationDescription", String.class, ObjectModelJavaModifier.PUBLIC); + setOperationBody(getConfigurationDescription, "" /*{ StringBuilder builder = new StringBuilder(); builder.append("\\n====================================================================================================================="); @@ -542,9 +544,71 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { }*/ ); + if (generatePropertyChangeSupport) { + + addAttribute(output, "pcs", PropertyChangeSupport.class, "new PropertyChangeSupport(this);", + ObjectModelJavaModifier.PROTECTED, ObjectModelJavaModifier.FINAL); + + ObjectModelOperation addPropertyChangeListener = addOperation( + output, "addPropertyChangeListener", "void", ObjectModelJavaModifier.PUBLIC); + addParameter(addPropertyChangeListener, PropertyChangeListener.class, "listener"); + setOperationBody(addPropertyChangeListener, "" + /*{ + pcs.addPropertyChangeListener(listener); + }*/ + ); + ObjectModelOperation addPropertyChangeListener2 = addOperation( + output, "addPropertyChangeListener", "void", ObjectModelJavaModifier.PUBLIC); + addParameter(addPropertyChangeListener2, String.class, "propertyName"); + addParameter(addPropertyChangeListener2, PropertyChangeListener.class, "listener"); + setOperationBody(addPropertyChangeListener2, "" + /*{ + pcs.addPropertyChangeListener(propertyName, listener); + }*/ + ); + + ObjectModelOperation removePropertyChangeListener = addOperation( + output, "removePropertyChangeListener", "void", ObjectModelJavaModifier.PUBLIC); + addParameter(removePropertyChangeListener, PropertyChangeListener.class, "listener"); + setOperationBody(removePropertyChangeListener, "" + /*{ + pcs.removePropertyChangeListener(listener); + }*/ + ); + ObjectModelOperation removePropertyChangeListener2 = addOperation( + output, "removePropertyChangeListener", "void", ObjectModelJavaModifier.PUBLIC); + addParameter(removePropertyChangeListener2, String.class, "propertyName"); + addParameter(removePropertyChangeListener2, PropertyChangeListener.class, "listener"); + setOperationBody(removePropertyChangeListener2, "" + /*{ + pcs.removePropertyChangeListener(propertyName, listener); + }*/ + ); + + ObjectModelOperation firePropertyChange = addOperation( + output, "firePropertyChange", "void", ObjectModelJavaModifier.PROTECTED); + addParameter(firePropertyChange, String.class, "propertyName"); + addParameter(firePropertyChange, Object.class, "oldValue"); + addParameter(firePropertyChange, Object.class, "newValue"); + setOperationBody(firePropertyChange, "" + /*{ + pcs.firePropertyChange(propertyName, oldValue, newValue); + }*/ + ); + + ObjectModelOperation firePropertyChange2 = addOperation( + output, "firePropertyChange", "void", ObjectModelJavaModifier.PROTECTED); + addParameter(firePropertyChange2, String.class, "propertyName"); + addParameter(firePropertyChange2, Object.class, "newValue"); + setOperationBody(firePropertyChange2, "" + /*{ + pcs.firePropertyChange(propertyName, null, newValue); + }*/ + ); + } + ObjectModelOperation orderedByKey = addOperation( - output, "orderedByKey", "List<" + optionClassSimpleName + ">", ObjectModelJavaModifier.PROTECTED - ); + output, "orderedByKey", "List<" + optionClassSimpleName + ">", ObjectModelJavaModifier.PROTECTED); addImport(output, List.class); addImport(output, Arrays.class); addImport(output, Collections.class); @@ -678,7 +742,8 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { private void createSetMethod(ObjectModelClass output, String attrName, String simpleType, - String constantName) { + String constantName, + boolean generatePropertyChangeSupport) { boolean booleanProperty = GeneratorUtil.isBooleanPrimitive(simpleType); ObjectModelOperation operation = addOperation( output, @@ -690,11 +755,27 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { String methodPrefix = booleanProperty ? JavaGeneratorUtil.OPERATION_GETTER_BOOLEAN_PREFIX : JavaGeneratorUtil.OPERATION_GETTER_DEFAULT_PREFIX; String methodName = getJavaBeanMethodName(methodPrefix, attrName); - setOperationBody(operation, "" + StringBuilder bodyContent = new StringBuilder(); + if (generatePropertyChangeSupport) { + bodyContent.append("" /*{ - setOption(<%=constantName%>.getKey(), <%=attrName%>); + Object oldValue = <%=methodName%>(); + }*/ + + ); + } + bodyContent.append("" + /*{ setOption(<%=constantName%>.getKey(), <%=attrName%>); }*/ ); + if (generatePropertyChangeSupport) { + bodyContent.append("" + /*{ firePropertyChange("<%=attrName%>", oldValue, <%=attrName%>); + }*/ + ); + } + + setOperationBody(operation, bodyContent.toString()); if ("Boolean".equals(simpleType)) { operation = addOperation( diff --git a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/templates/ApplicationConfigTransformerConfig.java b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/templates/ApplicationConfigTransformerConfig.java index 6571c2e..b21c86a 100644 --- a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/templates/ApplicationConfigTransformerConfig.java +++ b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/templates/ApplicationConfigTransformerConfig.java @@ -42,6 +42,8 @@ public interface ApplicationConfigTransformerConfig { boolean isGenerateProvider(); + boolean isGeneratePropertyChangeSupport(); + boolean isUseNuitonI18n(); String getConfigProviderClassName(); -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.