From 8d89a5ca8498b2fc3ef8bd6aa8a1acefdc8ebe6c Mon Sep 17 00:00:00 2001 From: fakhreddine Date: Thu, 8 Jun 2017 17:40:41 +0100 Subject: [PATCH 1/6] Create Schema decorator in order to edit the jsonSchema with a flexible way --- .../ui/core/GeneratorFactoryInitializer.java | 1 + .../ui/core/generators/CheckBoxGenerator.java | 2 +- .../ui/core/generators/ComboBoxGenerator.java | 2 +- .../ui/core/generators/PasswordGenerator.java | 2 +- .../ui/core/generators/RadioBoxGenerator.java | 2 +- .../ui/core/generators/TextAreaGenerator.java | 2 +- .../core/generators/TextFieldGenerator.java | 2 +- .../ui/core/schema/CustomStringSchema.java | 32 +++++++++++++++++-- 8 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/asfjava/ui/core/GeneratorFactoryInitializer.java b/src/main/java/io/asfjava/ui/core/GeneratorFactoryInitializer.java index 2348664..09de369 100644 --- a/src/main/java/io/asfjava/ui/core/GeneratorFactoryInitializer.java +++ b/src/main/java/io/asfjava/ui/core/GeneratorFactoryInitializer.java @@ -10,6 +10,7 @@ class GeneratorFactoryInitializer implements ServletContextListener { @Override public final void contextInitialized(final ServletContextEvent sce) { GeneratorFactoryLoader.getInstance().load(); + SchemaDecoratorLoader.getInstance().load(); } @Override diff --git a/src/main/java/io/asfjava/ui/core/generators/CheckBoxGenerator.java b/src/main/java/io/asfjava/ui/core/generators/CheckBoxGenerator.java index 0c4cd8f..8a9cf31 100644 --- a/src/main/java/io/asfjava/ui/core/generators/CheckBoxGenerator.java +++ b/src/main/java/io/asfjava/ui/core/generators/CheckBoxGenerator.java @@ -20,7 +20,7 @@ public void generate(ObjectNode fieldFormDefinition, Field field) { fieldFormDefinition.put("type", "checkboxes"); fieldFormDefinition.put("multiple", annotation.multiple()); fieldFormDefinition.put("required", annotation.required()); - fieldFormDefinition.put("title", annotation.title()); +// fieldFormDefinition.put("title", annotation.title()); ObjectMapper checkBoxMapper = new ObjectMapper(); ArrayNode titlesMap = checkBoxMapper.createArrayNode(); diff --git a/src/main/java/io/asfjava/ui/core/generators/ComboBoxGenerator.java b/src/main/java/io/asfjava/ui/core/generators/ComboBoxGenerator.java index 721d23d..5d552b1 100644 --- a/src/main/java/io/asfjava/ui/core/generators/ComboBoxGenerator.java +++ b/src/main/java/io/asfjava/ui/core/generators/ComboBoxGenerator.java @@ -23,7 +23,7 @@ public void generate(ObjectNode fieldFormDefinition, Field field) { fieldFormDefinition.put("multiple", annotation.multiple()); fieldFormDefinition.put("required", annotation.required()); fieldFormDefinition.put("size", annotation.size()); - fieldFormDefinition.put("title", annotation.title()); +// fieldFormDefinition.put("title", annotation.title()); ObjectMapper comboMapper = new ObjectMapper(); ArrayNode titlesMap = comboMapper.createArrayNode(); diff --git a/src/main/java/io/asfjava/ui/core/generators/PasswordGenerator.java b/src/main/java/io/asfjava/ui/core/generators/PasswordGenerator.java index e2d9079..cd4cc65 100644 --- a/src/main/java/io/asfjava/ui/core/generators/PasswordGenerator.java +++ b/src/main/java/io/asfjava/ui/core/generators/PasswordGenerator.java @@ -12,7 +12,7 @@ public class PasswordGenerator implements FormDefinitionGenerator { public void generate(ObjectNode fieldFormDefinition, Field field) { Password annotation = field.getAnnotation(Password.class); fieldFormDefinition.put("key", field.getName()); - fieldFormDefinition.put("title", annotation.title()); +// fieldFormDefinition.put("title", annotation.title()); fieldFormDefinition.put("type", "password"); String description = annotation.description(); diff --git a/src/main/java/io/asfjava/ui/core/generators/RadioBoxGenerator.java b/src/main/java/io/asfjava/ui/core/generators/RadioBoxGenerator.java index 0a923ae..a0bde26 100644 --- a/src/main/java/io/asfjava/ui/core/generators/RadioBoxGenerator.java +++ b/src/main/java/io/asfjava/ui/core/generators/RadioBoxGenerator.java @@ -19,7 +19,7 @@ public void generate(ObjectNode fieldFormDefinition, Field field) { fieldFormDefinition.put("key", field.getName()); fieldFormDefinition.put("readOnly", annotation.readOnly()); fieldFormDefinition.put("type", "radios"); - fieldFormDefinition.put("title", annotation.title()); +// fieldFormDefinition.put("title", annotation.title()); JsonNode radioFieldFormDefinition = ((JsonNode) fieldFormDefinition); diff --git a/src/main/java/io/asfjava/ui/core/generators/TextAreaGenerator.java b/src/main/java/io/asfjava/ui/core/generators/TextAreaGenerator.java index c498e61..1dfdbcf 100644 --- a/src/main/java/io/asfjava/ui/core/generators/TextAreaGenerator.java +++ b/src/main/java/io/asfjava/ui/core/generators/TextAreaGenerator.java @@ -12,7 +12,7 @@ public class TextAreaGenerator implements FormDefinitionGenerator { public void generate(ObjectNode fieldFormDefinition, Field field) { TextArea annotation = field.getAnnotation(TextArea.class); fieldFormDefinition.put("key", field.getName()); - fieldFormDefinition.put("title", annotation.title()); +// fieldFormDefinition.put("title", annotation.title()); fieldFormDefinition.put("type", "textarea"); String description = annotation.description(); diff --git a/src/main/java/io/asfjava/ui/core/generators/TextFieldGenerator.java b/src/main/java/io/asfjava/ui/core/generators/TextFieldGenerator.java index aa3e7b8..ddf2db9 100644 --- a/src/main/java/io/asfjava/ui/core/generators/TextFieldGenerator.java +++ b/src/main/java/io/asfjava/ui/core/generators/TextFieldGenerator.java @@ -13,7 +13,7 @@ public void generate(ObjectNode fieldFormDefinition, Field field) { TextField annotation = field.getAnnotation(TextField.class); fieldFormDefinition.put("key", field.getName()); - fieldFormDefinition.put("title", annotation.title()); +// fieldFormDefinition.put("title", annotation.title()); String description = annotation.description(); if (!description.isEmpty()) { diff --git a/src/main/java/io/asfjava/ui/core/schema/CustomStringSchema.java b/src/main/java/io/asfjava/ui/core/schema/CustomStringSchema.java index 3009bf9..8891c5a 100644 --- a/src/main/java/io/asfjava/ui/core/schema/CustomStringSchema.java +++ b/src/main/java/io/asfjava/ui/core/schema/CustomStringSchema.java @@ -3,6 +3,12 @@ import com.fasterxml.jackson.databind.BeanProperty; import com.fasterxml.jackson.module.jsonSchema.types.StringSchema; +import io.asfjava.ui.core.SchemaDecoratorFactory; +import io.asfjava.ui.core.form.CheckBox; +import io.asfjava.ui.core.form.ComboBox; +import io.asfjava.ui.core.form.Password; +import io.asfjava.ui.core.form.RadioBox; +import io.asfjava.ui.core.form.TextArea; import io.asfjava.ui.core.form.TextField; class CustomStringSchema extends StringSchema { @@ -10,9 +16,29 @@ class CustomStringSchema extends StringSchema { @Override public void enrichWithBeanProperty(BeanProperty beanProperty) { super.enrichWithBeanProperty(beanProperty); - TextField annotation = beanProperty.getAnnotation(TextField.class); - if (annotation != null && !annotation.pattern().isEmpty()) { - this.setPattern(annotation.pattern()); + if (beanProperty.getAnnotation(TextField.class) != null) { + SchemaDecoratorFactory.getInstance().getGenerator(TextField.class.getName()).customizeSchema(beanProperty, + this); + } + if (beanProperty.getAnnotation(ComboBox.class) != null) { + SchemaDecoratorFactory.getInstance().getGenerator(ComboBox.class.getName()).customizeSchema(beanProperty, + this); + } + if (beanProperty.getAnnotation(CheckBox.class) != null) { + SchemaDecoratorFactory.getInstance().getGenerator(CheckBox.class.getName()).customizeSchema(beanProperty, + this); + } + if (beanProperty.getAnnotation(RadioBox.class) != null) { + SchemaDecoratorFactory.getInstance().getGenerator(RadioBox.class.getName()).customizeSchema(beanProperty, + this); + } + if (beanProperty.getAnnotation(TextArea.class) != null) { + SchemaDecoratorFactory.getInstance().getGenerator(TextArea.class.getName()).customizeSchema(beanProperty, + this); + } + if (beanProperty.getAnnotation(Password.class) != null) { + SchemaDecoratorFactory.getInstance().getGenerator(TextField.class.getName()).customizeSchema(beanProperty, + this); } } From 06028b087e74cbbf6664fcd24a5fa10f4f554e49 Mon Sep 17 00:00:00 2001 From: fakhreddine Date: Thu, 8 Jun 2017 17:44:52 +0100 Subject: [PATCH 2/6] Schema decorator --- .../decorator/CheckBoxSchemaDecorator.java | 24 +++++++++ .../decorator/ComboBoxSchemaDecorator.java | 24 +++++++++ .../decorator/PasswordSchemaDecorator.java | 24 +++++++++ .../decorator/RadioBoxSchemaDecorator.java | 25 ++++++++++ .../ui/schema/decorator/SchemaDecorator.java | 10 ++++ .../decorator/TextAreaSchemaDecorator.java | 24 +++++++++ .../decorator/TextFieldSchemaDecorator.java | 30 ++++++++++++ .../ui/core/SchemaDecoratorFactory.java | 30 ++++++++++++ .../ui/core/SchemaDecoratorLoader.java | 49 +++++++++++++++++++ 9 files changed, 240 insertions(+) create mode 100644 src/main/java/io/asf/java/ui/schema/decorator/CheckBoxSchemaDecorator.java create mode 100644 src/main/java/io/asf/java/ui/schema/decorator/ComboBoxSchemaDecorator.java create mode 100644 src/main/java/io/asf/java/ui/schema/decorator/PasswordSchemaDecorator.java create mode 100644 src/main/java/io/asf/java/ui/schema/decorator/RadioBoxSchemaDecorator.java create mode 100644 src/main/java/io/asf/java/ui/schema/decorator/SchemaDecorator.java create mode 100644 src/main/java/io/asf/java/ui/schema/decorator/TextAreaSchemaDecorator.java create mode 100644 src/main/java/io/asf/java/ui/schema/decorator/TextFieldSchemaDecorator.java create mode 100644 src/main/java/io/asfjava/ui/core/SchemaDecoratorFactory.java create mode 100644 src/main/java/io/asfjava/ui/core/SchemaDecoratorLoader.java diff --git a/src/main/java/io/asf/java/ui/schema/decorator/CheckBoxSchemaDecorator.java b/src/main/java/io/asf/java/ui/schema/decorator/CheckBoxSchemaDecorator.java new file mode 100644 index 0000000..baff1dd --- /dev/null +++ b/src/main/java/io/asf/java/ui/schema/decorator/CheckBoxSchemaDecorator.java @@ -0,0 +1,24 @@ +package io.asf.java.ui.schema.decorator; + +import com.fasterxml.jackson.databind.BeanProperty; +import com.fasterxml.jackson.module.jsonSchema.JsonSchema; +import com.fasterxml.jackson.module.jsonSchema.types.StringSchema; + +import io.asfjava.ui.core.form.CheckBox; + +public class CheckBoxSchemaDecorator implements SchemaDecorator { + + @Override + public void customizeSchema(BeanProperty property, JsonSchema jsonschema) { + CheckBox annotation = property.getAnnotation(CheckBox.class); + if (annotation != null && annotation.title() != null) { + ((StringSchema) jsonschema).setTitle(annotation.title()); + } + } + + @Override + public String getAnnotation() { + return CheckBox.class.getName(); + } + +} diff --git a/src/main/java/io/asf/java/ui/schema/decorator/ComboBoxSchemaDecorator.java b/src/main/java/io/asf/java/ui/schema/decorator/ComboBoxSchemaDecorator.java new file mode 100644 index 0000000..9055715 --- /dev/null +++ b/src/main/java/io/asf/java/ui/schema/decorator/ComboBoxSchemaDecorator.java @@ -0,0 +1,24 @@ +package io.asf.java.ui.schema.decorator; + +import com.fasterxml.jackson.databind.BeanProperty; +import com.fasterxml.jackson.module.jsonSchema.JsonSchema; +import com.fasterxml.jackson.module.jsonSchema.types.StringSchema; + +import io.asfjava.ui.core.form.ComboBox; + +public class ComboBoxSchemaDecorator implements SchemaDecorator { + + @Override + public void customizeSchema(BeanProperty property, JsonSchema jsonschema) { + ComboBox annotation = property.getAnnotation(ComboBox.class); + if (annotation != null && annotation.title() != null) { + ((StringSchema) jsonschema).setTitle(annotation.title()); + } + } + + @Override + public String getAnnotation() { + return ComboBox.class.getName(); + } + +} diff --git a/src/main/java/io/asf/java/ui/schema/decorator/PasswordSchemaDecorator.java b/src/main/java/io/asf/java/ui/schema/decorator/PasswordSchemaDecorator.java new file mode 100644 index 0000000..9310a6f --- /dev/null +++ b/src/main/java/io/asf/java/ui/schema/decorator/PasswordSchemaDecorator.java @@ -0,0 +1,24 @@ +package io.asf.java.ui.schema.decorator; + +import com.fasterxml.jackson.databind.BeanProperty; +import com.fasterxml.jackson.module.jsonSchema.JsonSchema; +import com.fasterxml.jackson.module.jsonSchema.types.StringSchema; + +import io.asfjava.ui.core.form.Password; + +public class PasswordSchemaDecorator implements SchemaDecorator { + + @Override + public void customizeSchema(BeanProperty property, JsonSchema jsonschema) { + Password annotation = property.getAnnotation(Password.class); + if (annotation != null && annotation.title() != null) { + ((StringSchema) jsonschema).setTitle(annotation.title()); + } + } + + @Override + public String getAnnotation() { + return Password.class.getName(); + } + +} diff --git a/src/main/java/io/asf/java/ui/schema/decorator/RadioBoxSchemaDecorator.java b/src/main/java/io/asf/java/ui/schema/decorator/RadioBoxSchemaDecorator.java new file mode 100644 index 0000000..0086813 --- /dev/null +++ b/src/main/java/io/asf/java/ui/schema/decorator/RadioBoxSchemaDecorator.java @@ -0,0 +1,25 @@ +package io.asf.java.ui.schema.decorator; + +import com.fasterxml.jackson.databind.BeanProperty; +import com.fasterxml.jackson.module.jsonSchema.JsonSchema; +import com.fasterxml.jackson.module.jsonSchema.types.StringSchema; + +import io.asfjava.ui.core.form.Password; +import io.asfjava.ui.core.form.RadioBox; + +public class RadioBoxSchemaDecorator implements SchemaDecorator { + + @Override + public void customizeSchema(BeanProperty property, JsonSchema jsonschema) { + RadioBox annotation = property.getAnnotation(RadioBox.class); + if (annotation != null && annotation.title() != null) { + ((StringSchema) jsonschema).setTitle(annotation.title()); + } + } + + @Override + public String getAnnotation() { + return RadioBox.class.getName(); + } + +} diff --git a/src/main/java/io/asf/java/ui/schema/decorator/SchemaDecorator.java b/src/main/java/io/asf/java/ui/schema/decorator/SchemaDecorator.java new file mode 100644 index 0000000..501d1ea --- /dev/null +++ b/src/main/java/io/asf/java/ui/schema/decorator/SchemaDecorator.java @@ -0,0 +1,10 @@ +package io.asf.java.ui.schema.decorator; + +import com.fasterxml.jackson.databind.BeanProperty; +import com.fasterxml.jackson.module.jsonSchema.JsonSchema; + +public interface SchemaDecorator { + + void customizeSchema(BeanProperty property,JsonSchema jsonschema); + String getAnnotation(); +} diff --git a/src/main/java/io/asf/java/ui/schema/decorator/TextAreaSchemaDecorator.java b/src/main/java/io/asf/java/ui/schema/decorator/TextAreaSchemaDecorator.java new file mode 100644 index 0000000..50eb4ea --- /dev/null +++ b/src/main/java/io/asf/java/ui/schema/decorator/TextAreaSchemaDecorator.java @@ -0,0 +1,24 @@ +package io.asf.java.ui.schema.decorator; + +import com.fasterxml.jackson.databind.BeanProperty; +import com.fasterxml.jackson.module.jsonSchema.JsonSchema; +import com.fasterxml.jackson.module.jsonSchema.types.StringSchema; + +import io.asfjava.ui.core.form.TextArea; + +public class TextAreaSchemaDecorator implements SchemaDecorator { + + @Override + public void customizeSchema(BeanProperty property, JsonSchema jsonschema) { + TextArea annotation = property.getAnnotation(TextArea.class); + if (annotation != null && annotation.title() != null) { + ((StringSchema) jsonschema).setTitle(annotation.title()); + } + } + + @Override + public String getAnnotation() { + return TextArea.class.getName(); + } + +} diff --git a/src/main/java/io/asf/java/ui/schema/decorator/TextFieldSchemaDecorator.java b/src/main/java/io/asf/java/ui/schema/decorator/TextFieldSchemaDecorator.java new file mode 100644 index 0000000..af5d8fa --- /dev/null +++ b/src/main/java/io/asf/java/ui/schema/decorator/TextFieldSchemaDecorator.java @@ -0,0 +1,30 @@ +package io.asf.java.ui.schema.decorator; + +import com.fasterxml.jackson.databind.BeanProperty; +import com.fasterxml.jackson.module.jsonSchema.JsonSchema; +import com.fasterxml.jackson.module.jsonSchema.types.StringSchema; + +import io.asfjava.ui.core.form.TextField; + +public class TextFieldSchemaDecorator implements SchemaDecorator{ + + @Override + public void customizeSchema(BeanProperty property, JsonSchema jsonschema) { + TextField annotation = property.getAnnotation(TextField.class); + if (annotation != null) { + if(annotation.title()!=null){ + ((StringSchema) jsonschema).setTitle(annotation.title()); + } + if(annotation.pattern()!=null) + { + ((StringSchema) jsonschema).setPattern(annotation.pattern()); + } + } + } + + @Override + public String getAnnotation() { + return TextField.class.getName(); + } + +} diff --git a/src/main/java/io/asfjava/ui/core/SchemaDecoratorFactory.java b/src/main/java/io/asfjava/ui/core/SchemaDecoratorFactory.java new file mode 100644 index 0000000..7b9f567 --- /dev/null +++ b/src/main/java/io/asfjava/ui/core/SchemaDecoratorFactory.java @@ -0,0 +1,30 @@ +package io.asfjava.ui.core; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import io.asf.java.ui.schema.decorator.SchemaDecorator; + +public final class SchemaDecoratorFactory { + public SchemaDecorator getGenerator(String annotationName) { + return GENERATORS.get(annotationName); + } + + void register(String annotationName, SchemaDecorator generator) { + GENERATORS.put(annotationName, generator); + } + + public static SchemaDecoratorFactory getInstance() { + if (INSTANCE == null) { + INSTANCE = new SchemaDecoratorFactory(); + } + return INSTANCE; + } + + private static final Map GENERATORS = new ConcurrentHashMap<>(); + + private static SchemaDecoratorFactory INSTANCE; + + private SchemaDecoratorFactory() { + } +} diff --git a/src/main/java/io/asfjava/ui/core/SchemaDecoratorLoader.java b/src/main/java/io/asfjava/ui/core/SchemaDecoratorLoader.java new file mode 100644 index 0000000..c924d55 --- /dev/null +++ b/src/main/java/io/asfjava/ui/core/SchemaDecoratorLoader.java @@ -0,0 +1,49 @@ +package io.asfjava.ui.core; + +import java.util.Set; + +import org.reflections.Reflections; + +import io.asf.java.ui.schema.decorator.SchemaDecorator; + + + +final class SchemaDecoratorLoader { + + private static final String PACKAGESCAN = "io.asfjava.ui.schema.decorator"; + private static Reflections reflections = new Reflections(PACKAGESCAN); + void load() { + + Set> subTypes = reflections + .getSubTypesOf(SchemaDecorator.class); + for (Class subtype : subTypes) { + SchemaDecorator schemaDecorator; + try { + schemaDecorator = (SchemaDecorator) Class.forName(subtype.getName()).newInstance(); + SchemaDecoratorFactory.getInstance().register(schemaDecorator.getAnnotation(), + schemaDecorator); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + } + + void unload() { + System.out.println("I'm unloader"); + } + + static SchemaDecoratorLoader getInstance() { + if (INSTANCE == null) + INSTANCE = new SchemaDecoratorLoader(); + return INSTANCE; + } + + private static SchemaDecoratorLoader INSTANCE; + + private SchemaDecoratorLoader() { + } +} From 0e1a5af42f3c648bf9f75361f44cd15e3b147c42 Mon Sep 17 00:00:00 2001 From: fakhreddine Date: Thu, 8 Jun 2017 18:15:33 +0100 Subject: [PATCH 3/6] Change package name --- .../ui/schema/decorator/CheckBoxSchemaDecorator.java | 2 +- .../ui/schema/decorator/ComboBoxSchemaDecorator.java | 2 +- .../ui/schema/decorator/PasswordSchemaDecorator.java | 2 +- .../ui/schema/decorator/RadioBoxSchemaDecorator.java | 2 +- .../java => asfjava}/ui/schema/decorator/SchemaDecorator.java | 2 +- .../ui/schema/decorator/TextAreaSchemaDecorator.java | 2 +- .../ui/schema/decorator/TextFieldSchemaDecorator.java | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) rename src/main/java/io/{asf/java => asfjava}/ui/schema/decorator/CheckBoxSchemaDecorator.java (94%) rename src/main/java/io/{asf/java => asfjava}/ui/schema/decorator/ComboBoxSchemaDecorator.java (94%) rename src/main/java/io/{asf/java => asfjava}/ui/schema/decorator/PasswordSchemaDecorator.java (94%) rename src/main/java/io/{asf/java => asfjava}/ui/schema/decorator/RadioBoxSchemaDecorator.java (94%) rename src/main/java/io/{asf/java => asfjava}/ui/schema/decorator/SchemaDecorator.java (85%) rename src/main/java/io/{asf/java => asfjava}/ui/schema/decorator/TextAreaSchemaDecorator.java (94%) rename src/main/java/io/{asf/java => asfjava}/ui/schema/decorator/TextFieldSchemaDecorator.java (94%) diff --git a/src/main/java/io/asf/java/ui/schema/decorator/CheckBoxSchemaDecorator.java b/src/main/java/io/asfjava/ui/schema/decorator/CheckBoxSchemaDecorator.java similarity index 94% rename from src/main/java/io/asf/java/ui/schema/decorator/CheckBoxSchemaDecorator.java rename to src/main/java/io/asfjava/ui/schema/decorator/CheckBoxSchemaDecorator.java index baff1dd..ddb13e4 100644 --- a/src/main/java/io/asf/java/ui/schema/decorator/CheckBoxSchemaDecorator.java +++ b/src/main/java/io/asfjava/ui/schema/decorator/CheckBoxSchemaDecorator.java @@ -1,4 +1,4 @@ -package io.asf.java.ui.schema.decorator; +package io.asfjava.ui.schema.decorator; import com.fasterxml.jackson.databind.BeanProperty; import com.fasterxml.jackson.module.jsonSchema.JsonSchema; diff --git a/src/main/java/io/asf/java/ui/schema/decorator/ComboBoxSchemaDecorator.java b/src/main/java/io/asfjava/ui/schema/decorator/ComboBoxSchemaDecorator.java similarity index 94% rename from src/main/java/io/asf/java/ui/schema/decorator/ComboBoxSchemaDecorator.java rename to src/main/java/io/asfjava/ui/schema/decorator/ComboBoxSchemaDecorator.java index 9055715..3e8ca7a 100644 --- a/src/main/java/io/asf/java/ui/schema/decorator/ComboBoxSchemaDecorator.java +++ b/src/main/java/io/asfjava/ui/schema/decorator/ComboBoxSchemaDecorator.java @@ -1,4 +1,4 @@ -package io.asf.java.ui.schema.decorator; +package io.asfjava.ui.schema.decorator; import com.fasterxml.jackson.databind.BeanProperty; import com.fasterxml.jackson.module.jsonSchema.JsonSchema; diff --git a/src/main/java/io/asf/java/ui/schema/decorator/PasswordSchemaDecorator.java b/src/main/java/io/asfjava/ui/schema/decorator/PasswordSchemaDecorator.java similarity index 94% rename from src/main/java/io/asf/java/ui/schema/decorator/PasswordSchemaDecorator.java rename to src/main/java/io/asfjava/ui/schema/decorator/PasswordSchemaDecorator.java index 9310a6f..10511cc 100644 --- a/src/main/java/io/asf/java/ui/schema/decorator/PasswordSchemaDecorator.java +++ b/src/main/java/io/asfjava/ui/schema/decorator/PasswordSchemaDecorator.java @@ -1,4 +1,4 @@ -package io.asf.java.ui.schema.decorator; +package io.asfjava.ui.schema.decorator; import com.fasterxml.jackson.databind.BeanProperty; import com.fasterxml.jackson.module.jsonSchema.JsonSchema; diff --git a/src/main/java/io/asf/java/ui/schema/decorator/RadioBoxSchemaDecorator.java b/src/main/java/io/asfjava/ui/schema/decorator/RadioBoxSchemaDecorator.java similarity index 94% rename from src/main/java/io/asf/java/ui/schema/decorator/RadioBoxSchemaDecorator.java rename to src/main/java/io/asfjava/ui/schema/decorator/RadioBoxSchemaDecorator.java index 0086813..b0d3f4c 100644 --- a/src/main/java/io/asf/java/ui/schema/decorator/RadioBoxSchemaDecorator.java +++ b/src/main/java/io/asfjava/ui/schema/decorator/RadioBoxSchemaDecorator.java @@ -1,4 +1,4 @@ -package io.asf.java.ui.schema.decorator; +package io.asfjava.ui.schema.decorator; import com.fasterxml.jackson.databind.BeanProperty; import com.fasterxml.jackson.module.jsonSchema.JsonSchema; diff --git a/src/main/java/io/asf/java/ui/schema/decorator/SchemaDecorator.java b/src/main/java/io/asfjava/ui/schema/decorator/SchemaDecorator.java similarity index 85% rename from src/main/java/io/asf/java/ui/schema/decorator/SchemaDecorator.java rename to src/main/java/io/asfjava/ui/schema/decorator/SchemaDecorator.java index 501d1ea..8039412 100644 --- a/src/main/java/io/asf/java/ui/schema/decorator/SchemaDecorator.java +++ b/src/main/java/io/asfjava/ui/schema/decorator/SchemaDecorator.java @@ -1,4 +1,4 @@ -package io.asf.java.ui.schema.decorator; +package io.asfjava.ui.schema.decorator; import com.fasterxml.jackson.databind.BeanProperty; import com.fasterxml.jackson.module.jsonSchema.JsonSchema; diff --git a/src/main/java/io/asf/java/ui/schema/decorator/TextAreaSchemaDecorator.java b/src/main/java/io/asfjava/ui/schema/decorator/TextAreaSchemaDecorator.java similarity index 94% rename from src/main/java/io/asf/java/ui/schema/decorator/TextAreaSchemaDecorator.java rename to src/main/java/io/asfjava/ui/schema/decorator/TextAreaSchemaDecorator.java index 50eb4ea..537f316 100644 --- a/src/main/java/io/asf/java/ui/schema/decorator/TextAreaSchemaDecorator.java +++ b/src/main/java/io/asfjava/ui/schema/decorator/TextAreaSchemaDecorator.java @@ -1,4 +1,4 @@ -package io.asf.java.ui.schema.decorator; +package io.asfjava.ui.schema.decorator; import com.fasterxml.jackson.databind.BeanProperty; import com.fasterxml.jackson.module.jsonSchema.JsonSchema; diff --git a/src/main/java/io/asf/java/ui/schema/decorator/TextFieldSchemaDecorator.java b/src/main/java/io/asfjava/ui/schema/decorator/TextFieldSchemaDecorator.java similarity index 94% rename from src/main/java/io/asf/java/ui/schema/decorator/TextFieldSchemaDecorator.java rename to src/main/java/io/asfjava/ui/schema/decorator/TextFieldSchemaDecorator.java index af5d8fa..e850675 100644 --- a/src/main/java/io/asf/java/ui/schema/decorator/TextFieldSchemaDecorator.java +++ b/src/main/java/io/asfjava/ui/schema/decorator/TextFieldSchemaDecorator.java @@ -1,4 +1,4 @@ -package io.asf.java.ui.schema.decorator; +package io.asfjava.ui.schema.decorator; import com.fasterxml.jackson.databind.BeanProperty; import com.fasterxml.jackson.module.jsonSchema.JsonSchema; From 89ac4ce6edeb7b2f1d79a4b1d2dbd37bd44eea0d Mon Sep 17 00:00:00 2001 From: fakhreddine Date: Thu, 8 Jun 2017 18:19:02 +0100 Subject: [PATCH 4/6] change package name --- src/main/java/io/asfjava/ui/core/SchemaDecoratorFactory.java | 2 +- src/main/java/io/asfjava/ui/core/SchemaDecoratorLoader.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/asfjava/ui/core/SchemaDecoratorFactory.java b/src/main/java/io/asfjava/ui/core/SchemaDecoratorFactory.java index 7b9f567..f9973b3 100644 --- a/src/main/java/io/asfjava/ui/core/SchemaDecoratorFactory.java +++ b/src/main/java/io/asfjava/ui/core/SchemaDecoratorFactory.java @@ -3,7 +3,7 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import io.asf.java.ui.schema.decorator.SchemaDecorator; +import io.asfjava.ui.schema.decorator.SchemaDecorator; public final class SchemaDecoratorFactory { public SchemaDecorator getGenerator(String annotationName) { diff --git a/src/main/java/io/asfjava/ui/core/SchemaDecoratorLoader.java b/src/main/java/io/asfjava/ui/core/SchemaDecoratorLoader.java index c924d55..8e8ee86 100644 --- a/src/main/java/io/asfjava/ui/core/SchemaDecoratorLoader.java +++ b/src/main/java/io/asfjava/ui/core/SchemaDecoratorLoader.java @@ -4,7 +4,7 @@ import org.reflections.Reflections; -import io.asf.java.ui.schema.decorator.SchemaDecorator; +import io.asfjava.ui.schema.decorator.SchemaDecorator; From 012fc8691ac929b5ce1bca1c8efddb5bf1ab0832 Mon Sep 17 00:00:00 2001 From: fakhreddine Date: Thu, 8 Jun 2017 20:58:13 +0100 Subject: [PATCH 5/6] edit the CustomStringSchema in order to ietrate on annotations --- .../ui/core/schema/CustomStringSchema.java | 38 ++++--------------- 1 file changed, 7 insertions(+), 31 deletions(-) diff --git a/src/main/java/io/asfjava/ui/core/schema/CustomStringSchema.java b/src/main/java/io/asfjava/ui/core/schema/CustomStringSchema.java index 8891c5a..aacc9da 100644 --- a/src/main/java/io/asfjava/ui/core/schema/CustomStringSchema.java +++ b/src/main/java/io/asfjava/ui/core/schema/CustomStringSchema.java @@ -1,45 +1,21 @@ package io.asfjava.ui.core.schema; +import java.lang.annotation.Annotation; + import com.fasterxml.jackson.databind.BeanProperty; import com.fasterxml.jackson.module.jsonSchema.types.StringSchema; import io.asfjava.ui.core.SchemaDecoratorFactory; -import io.asfjava.ui.core.form.CheckBox; -import io.asfjava.ui.core.form.ComboBox; -import io.asfjava.ui.core.form.Password; -import io.asfjava.ui.core.form.RadioBox; -import io.asfjava.ui.core.form.TextArea; -import io.asfjava.ui.core.form.TextField; class CustomStringSchema extends StringSchema { @Override public void enrichWithBeanProperty(BeanProperty beanProperty) { - super.enrichWithBeanProperty(beanProperty); - if (beanProperty.getAnnotation(TextField.class) != null) { - SchemaDecoratorFactory.getInstance().getGenerator(TextField.class.getName()).customizeSchema(beanProperty, - this); - } - if (beanProperty.getAnnotation(ComboBox.class) != null) { - SchemaDecoratorFactory.getInstance().getGenerator(ComboBox.class.getName()).customizeSchema(beanProperty, - this); - } - if (beanProperty.getAnnotation(CheckBox.class) != null) { - SchemaDecoratorFactory.getInstance().getGenerator(CheckBox.class.getName()).customizeSchema(beanProperty, - this); - } - if (beanProperty.getAnnotation(RadioBox.class) != null) { - SchemaDecoratorFactory.getInstance().getGenerator(RadioBox.class.getName()).customizeSchema(beanProperty, - this); - } - if (beanProperty.getAnnotation(TextArea.class) != null) { - SchemaDecoratorFactory.getInstance().getGenerator(TextArea.class.getName()).customizeSchema(beanProperty, - this); - } - if (beanProperty.getAnnotation(Password.class) != null) { - SchemaDecoratorFactory.getInstance().getGenerator(TextField.class.getName()).customizeSchema(beanProperty, - this); - } + super.enrichWithBeanProperty(beanProperty); + Iterable it = beanProperty.getMember().annotations(); + String anno = it.iterator().next().annotationType().getName(); + SchemaDecoratorFactory.getInstance().getGenerator(anno).customizeSchema(beanProperty, this); + } } From 148f91f2e06ff2594091952764d3cffd093d58a0 Mon Sep 17 00:00:00 2001 From: fakhreddine Date: Thu, 8 Jun 2017 20:59:03 +0100 Subject: [PATCH 6/6] Update Demo application --- .../main/java/io/asfjava/ui/demo/screen/DemoForm.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/demo/src/main/java/io/asfjava/ui/demo/screen/DemoForm.java b/demo/src/main/java/io/asfjava/ui/demo/screen/DemoForm.java index 9452cc4..52e14b6 100644 --- a/demo/src/main/java/io/asfjava/ui/demo/screen/DemoForm.java +++ b/demo/src/main/java/io/asfjava/ui/demo/screen/DemoForm.java @@ -101,6 +101,16 @@ public String getCivilState() { public void setCivilState(String civilState) { this.civilState = civilState; } + + + public String getCurrency() { + return currency; + } + + public String getColor() { + return color; + } + private static final long serialVersionUID = -5073515619469444978L; }