Skip to content

Commit 072fd86

Browse files
authored
Merge pull request #37 from Fakhreddine10/master
Schema Decorator
2 parents 5f06f37 + 148f91f commit 072fd86

18 files changed

+265
-12
lines changed

demo/src/main/java/io/asfjava/ui/demo/screen/DemoForm.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,16 @@ public String getCivilState() {
101101
public void setCivilState(String civilState) {
102102
this.civilState = civilState;
103103
}
104+
105+
106+
public String getCurrency() {
107+
return currency;
108+
}
109+
110+
public String getColor() {
111+
return color;
112+
}
113+
104114

105115
private static final long serialVersionUID = -5073515619469444978L;
106116
}

src/main/java/io/asfjava/ui/core/GeneratorFactoryInitializer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ class GeneratorFactoryInitializer implements ServletContextListener {
1010
@Override
1111
public final void contextInitialized(final ServletContextEvent sce) {
1212
GeneratorFactoryLoader.getInstance().load();
13+
SchemaDecoratorLoader.getInstance().load();
1314
}
1415

1516
@Override
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package io.asfjava.ui.core;
2+
3+
import java.util.Map;
4+
import java.util.concurrent.ConcurrentHashMap;
5+
6+
import io.asfjava.ui.schema.decorator.SchemaDecorator;
7+
8+
public final class SchemaDecoratorFactory {
9+
public SchemaDecorator getGenerator(String annotationName) {
10+
return GENERATORS.get(annotationName);
11+
}
12+
13+
void register(String annotationName, SchemaDecorator generator) {
14+
GENERATORS.put(annotationName, generator);
15+
}
16+
17+
public static SchemaDecoratorFactory getInstance() {
18+
if (INSTANCE == null) {
19+
INSTANCE = new SchemaDecoratorFactory();
20+
}
21+
return INSTANCE;
22+
}
23+
24+
private static final Map<String, SchemaDecorator> GENERATORS = new ConcurrentHashMap<>();
25+
26+
private static SchemaDecoratorFactory INSTANCE;
27+
28+
private SchemaDecoratorFactory() {
29+
}
30+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package io.asfjava.ui.core;
2+
3+
import java.util.Set;
4+
5+
import org.reflections.Reflections;
6+
7+
import io.asfjava.ui.schema.decorator.SchemaDecorator;
8+
9+
10+
11+
final class SchemaDecoratorLoader {
12+
13+
private static final String PACKAGESCAN = "io.asfjava.ui.schema.decorator";
14+
private static Reflections reflections = new Reflections(PACKAGESCAN);
15+
void load() {
16+
17+
Set<Class<? extends SchemaDecorator>> subTypes = reflections
18+
.getSubTypesOf(SchemaDecorator.class);
19+
for (Class<? extends SchemaDecorator> subtype : subTypes) {
20+
SchemaDecorator schemaDecorator;
21+
try {
22+
schemaDecorator = (SchemaDecorator) Class.forName(subtype.getName()).newInstance();
23+
SchemaDecoratorFactory.getInstance().register(schemaDecorator.getAnnotation(),
24+
schemaDecorator);
25+
} catch (InstantiationException e) {
26+
e.printStackTrace();
27+
} catch (IllegalAccessException e) {
28+
e.printStackTrace();
29+
} catch (ClassNotFoundException e) {
30+
e.printStackTrace();
31+
}
32+
}
33+
}
34+
35+
void unload() {
36+
System.out.println("I'm unloader");
37+
}
38+
39+
static SchemaDecoratorLoader getInstance() {
40+
if (INSTANCE == null)
41+
INSTANCE = new SchemaDecoratorLoader();
42+
return INSTANCE;
43+
}
44+
45+
private static SchemaDecoratorLoader INSTANCE;
46+
47+
private SchemaDecoratorLoader() {
48+
}
49+
}

src/main/java/io/asfjava/ui/core/generators/CheckBoxGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public void generate(ObjectNode fieldFormDefinition, Field field) {
2020
fieldFormDefinition.put("type", "checkboxes");
2121
fieldFormDefinition.put("multiple", annotation.multiple());
2222
fieldFormDefinition.put("required", annotation.required());
23-
fieldFormDefinition.put("title", annotation.title());
23+
// fieldFormDefinition.put("title", annotation.title());
2424

2525
ObjectMapper checkBoxMapper = new ObjectMapper();
2626
ArrayNode titlesMap = checkBoxMapper.createArrayNode();

src/main/java/io/asfjava/ui/core/generators/ComboBoxGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public void generate(ObjectNode fieldFormDefinition, Field field) {
2323
fieldFormDefinition.put("multiple", annotation.multiple());
2424
fieldFormDefinition.put("required", annotation.required());
2525
fieldFormDefinition.put("size", annotation.size());
26-
fieldFormDefinition.put("title", annotation.title());
26+
// fieldFormDefinition.put("title", annotation.title());
2727

2828
ObjectMapper comboMapper = new ObjectMapper();
2929
ArrayNode titlesMap = comboMapper.createArrayNode();

src/main/java/io/asfjava/ui/core/generators/PasswordGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class PasswordGenerator implements FormDefinitionGenerator {
1212
public void generate(ObjectNode fieldFormDefinition, Field field) {
1313
Password annotation = field.getAnnotation(Password.class);
1414
fieldFormDefinition.put("key", field.getName());
15-
fieldFormDefinition.put("title", annotation.title());
15+
// fieldFormDefinition.put("title", annotation.title());
1616
fieldFormDefinition.put("type", "password");
1717

1818
String description = annotation.description();

src/main/java/io/asfjava/ui/core/generators/RadioBoxGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public void generate(ObjectNode fieldFormDefinition, Field field) {
1919
fieldFormDefinition.put("key", field.getName());
2020
fieldFormDefinition.put("readOnly", annotation.readOnly());
2121
fieldFormDefinition.put("type", "radios");
22-
fieldFormDefinition.put("title", annotation.title());
22+
// fieldFormDefinition.put("title", annotation.title());
2323

2424
JsonNode radioFieldFormDefinition = ((JsonNode) fieldFormDefinition);
2525

src/main/java/io/asfjava/ui/core/generators/TextAreaGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class TextAreaGenerator implements FormDefinitionGenerator {
1212
public void generate(ObjectNode fieldFormDefinition, Field field) {
1313
TextArea annotation = field.getAnnotation(TextArea.class);
1414
fieldFormDefinition.put("key", field.getName());
15-
fieldFormDefinition.put("title", annotation.title());
15+
// fieldFormDefinition.put("title", annotation.title());
1616
fieldFormDefinition.put("type", "textarea");
1717

1818
String description = annotation.description();

src/main/java/io/asfjava/ui/core/generators/TextFieldGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public void generate(ObjectNode fieldFormDefinition, Field field) {
1313
TextField annotation = field.getAnnotation(TextField.class);
1414

1515
fieldFormDefinition.put("key", field.getName());
16-
fieldFormDefinition.put("title", annotation.title());
16+
// fieldFormDefinition.put("title", annotation.title());
1717

1818
String description = annotation.description();
1919
if (!description.isEmpty()) {

0 commit comments

Comments
 (0)