Skip to content

Commit ed929d5

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents fa52325 + 09ed590 commit ed929d5

29 files changed

+263
-156
lines changed

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,38 +7,49 @@
77
import io.asfjava.ui.core.form.Number;
88
import io.asfjava.ui.core.form.Password;
99
import io.asfjava.ui.core.form.RadioBox;
10+
import io.asfjava.ui.core.form.Tab;
1011
import io.asfjava.ui.core.form.TextArea;
1112
import io.asfjava.ui.core.form.TextField;
1213

1314
public class DemoForm implements Serializable {
1415

16+
@Tab(title = "Info", index = 1)
1517
@TextField(title = "First Name", placeHolder = "Your first name", description = "This is a description for your first name field")
1618
private String firstName;
1719

20+
// @Tab(title = "Info", index = 1)
1821
@TextField(title = "Last Name", placeHolder = "Your last name")
1922
private String lastName;
2023

24+
@Tab(title = "Contact", index = 2)
2125
@TextField(title = "eMail", placeHolder = "Your email", pattern = "^\\S+@\\S+$", validationMessage = "Your mail must be in this format [email protected]", description = "This is Text Field with pattern and validation message")
2226
private String email;
2327

28+
@Tab(title = "Additional Info", index = 3)
2429
@Number(title = "Number of children", placeHolder = "Number of children", description = "This is a number")
2530
private Integer number;
2631

32+
// @Tab(title = "Contact", index = 2)
2733
@Password(title = "Password", placeHolder = "Please set you password", description = "This is password")
2834
private String password;
2935

36+
@Tab(title = "Info", index = 1)
3037
@ComboBox(title = "Gender", titleMap = GenderTitleMap.class)
3138
private String gender;
3239

40+
// @Tab(title = "Additional Info", index = 3)
3341
@ComboBox(title = "Currency", values = { "euro", "dollar" })
3442
private String currency;
3543

44+
@Tab(title = "Additional Info", index = 3)
3645
@RadioBox(title = "Civil State", titleMap = CivilStateTitelsMap.class)
3746
private String civilState;
3847

48+
// @Tab(title = "Contact", index = 2)
3949
@TextArea(title = "Address", placeHolder = "Fill your address please", description = "This is textarea")
4050
private String address;
4151

52+
@Tab(title = "Additional Info", index = 3)
4253
@CheckBox(title = "Color", values = { "red", "bleu", "green" }, defaultvalue = "red")
4354
private String color;
4455

@@ -101,7 +112,6 @@ public String getCivilState() {
101112
public void setCivilState(String civilState) {
102113
this.civilState = civilState;
103114
}
104-
105115

106116
public String getCurrency() {
107117
return currency;
@@ -111,6 +121,5 @@ public String getColor() {
111121
return color;
112122
}
113123

114-
115124
private static final long serialVersionUID = -5073515619469444978L;
116125
}

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@
6262
<artifactId>javax.servlet-api</artifactId>
6363
<version>3.0.1</version>
6464
</dependency>
65+
<dependency>
66+
<groupId>org.slf4j</groupId>
67+
<artifactId>slf4j-api</artifactId>
68+
<version>1.7.25</version>
69+
</dependency>
6570

6671
</dependencies>
6772
<build>

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

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,32 @@
11
package io.asfjava.ui.core;
22

33
import java.util.Map;
4+
import java.util.Optional;
45
import java.util.concurrent.ConcurrentHashMap;
6+
import java.util.function.Supplier;
57

68
import io.asfjava.ui.core.generators.FormDefinitionGenerator;
79

810
public final class FormDefinitionGeneratorFactory {
911

10-
public FormDefinitionGenerator getGenerator(String annotationName) {
11-
return GENERATORS.get(annotationName);
12+
public Optional<FormDefinitionGenerator> getGenerator(String annotationName) {
13+
return Optional.ofNullable(GENERATORS.get(annotationName));
1214
}
1315

14-
void register(String annotationName, FormDefinitionGenerator generator) {
15-
GENERATORS.put(annotationName, generator);
16+
void register(Supplier<String> annotationName, FormDefinitionGenerator generator) {
17+
GENERATORS.put(annotationName.get(), generator);
1618
}
1719

1820
public static FormDefinitionGeneratorFactory getInstance() {
19-
if (INSTANCE == null) {
20-
INSTANCE = new FormDefinitionGeneratorFactory();
21+
if (instance == null) {
22+
instance = new FormDefinitionGeneratorFactory();
2123
}
22-
return INSTANCE;
24+
return instance;
2325
}
2426

2527
private static final Map<String, FormDefinitionGenerator> GENERATORS = new ConcurrentHashMap<>();
2628

27-
private static FormDefinitionGeneratorFactory INSTANCE;
29+
private static FormDefinitionGeneratorFactory instance;
2830

2931
private FormDefinitionGeneratorFactory() {
3032
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ public final void contextInitialized(final ServletContextEvent sce) {
1515

1616
@Override
1717
public final void contextDestroyed(final ServletContextEvent sce) {
18-
18+
//to implement it
1919
}
2020
}
Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,48 @@
11
package io.asfjava.ui.core;
22

3-
import java.util.Set;
3+
import static io.asfjava.ui.core.logging.ErrorCode.ASF01;
4+
5+
import java.util.List;
6+
import java.util.stream.Collectors;
7+
import java.util.stream.Stream;
48

59
import org.reflections.Reflections;
610

711
import io.asfjava.ui.core.generators.FormDefinitionGenerator;
12+
import io.asfjava.ui.core.logging.ASFUILogger;
813

914
final class GeneratorFactoryLoader {
10-
private static final String PACKAGESCAN = "io.asfjava.ui.core.generators";
15+
private static final List<String> PACKAGESCAN = Stream
16+
.of("io.asfjava.ui.core.generators", "io.asfjava.ui.addons.generators").collect(Collectors.toList());
1117
private static Reflections reflections = new Reflections(PACKAGESCAN);
1218

1319
void load() {
20+
reflections.getSubTypesOf(FormDefinitionGenerator.class).forEach(instance::register);
21+
}
1422

15-
Set<Class<? extends FormDefinitionGenerator>> subTypes = reflections
16-
.getSubTypesOf(FormDefinitionGenerator.class);
17-
for (Class<? extends FormDefinitionGenerator> subtype : subTypes) {
18-
FormDefinitionGenerator formDefinitionGenerator;
19-
try {
20-
formDefinitionGenerator = (FormDefinitionGenerator) Class.forName(subtype.getName()).newInstance();
21-
FormDefinitionGeneratorFactory.getInstance().register(formDefinitionGenerator.getAnnoation(),
22-
formDefinitionGenerator);
23-
} catch (InstantiationException e) {
24-
e.printStackTrace();
25-
} catch (IllegalAccessException e) {
26-
e.printStackTrace();
27-
} catch (ClassNotFoundException e) {
28-
e.printStackTrace();
29-
}
23+
private void register(Class<? extends FormDefinitionGenerator> subType) {
24+
try {
25+
FormDefinitionGenerator formDefinitionGenerator = subType.newInstance();
26+
FormDefinitionGeneratorFactory.getInstance().register(formDefinitionGenerator::getAnnotation,
27+
formDefinitionGenerator);
28+
} catch (InstantiationException | IllegalAccessException e) {
29+
ASFUILogger.getLogger().error(ASF01, e);
3030
}
3131
}
3232

3333
void unload() {
34-
System.out.println("I'm unloader");
34+
ASFUILogger.getLogger().info("I'm unloader");
3535
}
3636

3737
static GeneratorFactoryLoader getInstance() {
38-
if (INSTANCE == null)
39-
INSTANCE = new GeneratorFactoryLoader();
40-
return INSTANCE;
38+
if (instance == null)
39+
instance = new GeneratorFactoryLoader();
40+
return instance;
4141
}
4242

43-
private static GeneratorFactoryLoader INSTANCE;
43+
private static GeneratorFactoryLoader instance;
4444

4545
private GeneratorFactoryLoader() {
4646
}
47+
4748
}

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

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,31 @@
11
package io.asfjava.ui.core;
22

33
import java.util.Map;
4+
import java.util.Optional;
45
import java.util.concurrent.ConcurrentHashMap;
6+
import java.util.function.Supplier;
57

6-
import io.asfjava.ui.schema.decorator.SchemaDecorator;
8+
import io.asfjava.ui.core.schema.decorators.SchemaDecorator;
79

810
public final class SchemaDecoratorFactory {
9-
public SchemaDecorator getGenerator(String annotationName) {
10-
return GENERATORS.get(annotationName);
11+
public Optional<SchemaDecorator> getDecorator(String annotationName) {
12+
return Optional.ofNullable(decorators.get(annotationName));
1113
}
1214

13-
void register(String annotationName, SchemaDecorator generator) {
14-
GENERATORS.put(annotationName, generator);
15+
void register(Supplier<String> annotationName, SchemaDecorator generator) {
16+
decorators.put(annotationName.get(), generator);
1517
}
1618

1719
public static SchemaDecoratorFactory getInstance() {
18-
if (INSTANCE == null) {
19-
INSTANCE = new SchemaDecoratorFactory();
20+
if (instance == null) {
21+
instance = new SchemaDecoratorFactory();
2022
}
21-
return INSTANCE;
23+
return instance;
2224
}
2325

24-
private static final Map<String, SchemaDecorator> GENERATORS = new ConcurrentHashMap<>();
26+
private static final Map<String, SchemaDecorator> decorators = new ConcurrentHashMap<>();
2527

26-
private static SchemaDecoratorFactory INSTANCE;
28+
private static SchemaDecoratorFactory instance;
2729

2830
private SchemaDecoratorFactory() {
2931
}

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

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,47 @@
11
package io.asfjava.ui.core;
22

3-
import java.util.Set;
3+
import static io.asfjava.ui.core.logging.ErrorCode.ASF01;
44

5-
import org.reflections.Reflections;
6-
7-
import io.asfjava.ui.schema.decorator.SchemaDecorator;
5+
import java.util.List;
6+
import java.util.stream.Collectors;
7+
import java.util.stream.Stream;
88

9+
import org.reflections.Reflections;
910

11+
import io.asfjava.ui.core.logging.ASFUILogger;
12+
import io.asfjava.ui.core.schema.decorators.SchemaDecorator;
1013

1114
final class SchemaDecoratorLoader {
1215

13-
private static final String PACKAGESCAN = "io.asfjava.ui.schema.decorator";
16+
private static final List<String> PACKAGESCAN = Stream
17+
.of("io.asfjava.ui.core.schema.decorators", "io.asfjava.ui.addons.schema.decorators")
18+
.collect(Collectors.toList());
1419
private static Reflections reflections = new Reflections(PACKAGESCAN);
20+
1521
void load() {
22+
reflections.getSubTypesOf(SchemaDecorator.class).forEach(instance::register);
23+
}
1624

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-
}
25+
private void register(Class<? extends SchemaDecorator> subType) {
26+
try {
27+
SchemaDecorator decorator = subType.newInstance();
28+
SchemaDecoratorFactory.getInstance().register(decorator::getAnnotation, decorator);
29+
} catch (InstantiationException | IllegalAccessException e) {
30+
ASFUILogger.getLogger().error(ASF01, e);
3231
}
3332
}
3433

3534
void unload() {
36-
System.out.println("I'm unloader");
35+
ASFUILogger.getLogger().info("I'm unloader");
3736
}
3837

3938
static SchemaDecoratorLoader getInstance() {
40-
if (INSTANCE == null)
41-
INSTANCE = new SchemaDecoratorLoader();
42-
return INSTANCE;
39+
if (instance == null)
40+
instance = new SchemaDecoratorLoader();
41+
return instance;
4342
}
4443

45-
private static SchemaDecoratorLoader INSTANCE;
44+
private static SchemaDecoratorLoader instance;
4645

4746
private SchemaDecoratorLoader() {
4847
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.asfjava.ui.core.form;
2+
3+
import static java.lang.annotation.ElementType.FIELD;
4+
import static java.lang.annotation.RetentionPolicy.RUNTIME;
5+
6+
import java.lang.annotation.Retention;
7+
import java.lang.annotation.Target;
8+
9+
@Retention(RUNTIME)
10+
@Target(FIELD)
11+
public @interface Tab {
12+
String title();
13+
14+
int index();
15+
16+
}

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@
1010

1111
import io.asfjava.ui.core.form.CheckBox;
1212
import io.asfjava.ui.core.form.ValuesContainer;
13+
import io.asfjava.ui.core.logging.ASFUILogger;
1314

14-
public class CheckBoxGenerator implements FormDefinitionGenerator {
15+
public class CheckBoxGenerator implements FormDefinitionGenerator{
1516

1617
@Override
1718
public void generate(ObjectNode fieldFormDefinition, Field field) {
@@ -20,8 +21,6 @@ public void generate(ObjectNode fieldFormDefinition, Field field) {
2021
fieldFormDefinition.put("type", "checkboxes");
2122
fieldFormDefinition.put("multiple", annotation.multiple());
2223
fieldFormDefinition.put("required", annotation.required());
23-
// fieldFormDefinition.put("title", annotation.title());
24-
2524
ObjectMapper checkBoxMapper = new ObjectMapper();
2625
ArrayNode titlesMap = checkBoxMapper.createArrayNode();
2726
if (annotation.values().length > 0) {
@@ -40,16 +39,19 @@ public void generate(ObjectNode fieldFormDefinition, Field field) {
4039
});
4140
fieldFormDefinition.set("titleMap", titlesMap);
4241
} catch (InstantiationException | IllegalAccessException e) {
43-
e.printStackTrace();
42+
ASFUILogger.getLogger().error(e.getMessage());
43+
throw new RuntimeException(e);
4444
}
4545
}
4646
}
4747

4848
private void buildValueDefinition(ObjectMapper checkBoxMapper, ArrayNode titlesMap, String value) {
4949
ObjectNode entry = checkBoxMapper.createObjectNode();
50-
if (value.equals(value.toUpperCase())) {
50+
String upperCasedValue = value.toUpperCase();
51+
String lowerCasedValue = value.toLowerCase();
52+
if (value.equals(upperCasedValue)) {
5153
entry.put("name", value.toLowerCase());
52-
} else if (value.equals(value.toLowerCase())) {
54+
} else if (value.equals(lowerCasedValue)) {
5355
entry.put("name", value.replace(value.substring(0, 1), value.substring(0, 1).toUpperCase()));
5456
} else {
5557
entry.put("name", value);
@@ -59,7 +61,7 @@ private void buildValueDefinition(ObjectMapper checkBoxMapper, ArrayNode titlesM
5961
}
6062

6163
@Override
62-
public String getAnnoation() {
64+
public String getAnnotation() {
6365
return CheckBox.class.getName();
6466
}
6567

0 commit comments

Comments
 (0)