Skip to content

Commit 4145562

Browse files
authored
Merge pull request #77 from almirus/master
Add $ref support for ComboBox + some optimization
2 parents 2959ba2 + 1a9a127 commit 4145562

File tree

4 files changed

+51
-63
lines changed

4 files changed

+51
-63
lines changed

src/main/java/io/asfjava/ui/core/form/ComboBox.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@
3838
boolean required() default false;
3939

4040
int size() default 1;
41-
41+
42+
String refURL() default "";
43+
4244
Class<? extends ValuesContainer> titleMap() default ValuesContainer.class;
4345

4446
}

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

+3-31
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import io.asfjava.ui.core.form.ValuesContainer;
1313
import io.asfjava.ui.core.logging.ASFUILogger;
1414

15-
public class CheckBoxGenerator implements FormDefinitionGenerator{
15+
public class CheckBoxGenerator extends ListGenerator implements FormDefinitionGenerator{
1616

1717
@Override
1818
public void generate(ObjectNode fieldFormDefinition, Field field) {
@@ -25,39 +25,11 @@ public void generate(ObjectNode fieldFormDefinition, Field field) {
2525
ArrayNode titlesMap = checkBoxMapper.createArrayNode();
2626
if (annotation.values().length > 0) {
2727
Arrays.stream(annotation.values()).forEach(value -> buildValueDefinition(checkBoxMapper, titlesMap, value));
28-
2928
fieldFormDefinition.set("titleMap", titlesMap);
3029
} else if (!annotation.titleMap().equals(ValuesContainer.class)) {
31-
32-
try {
33-
Map<String, String> map = (annotation.titleMap()).newInstance().getValues();
34-
map.entrySet().stream().forEach(mapEntry -> {
35-
ObjectNode entryNode = checkBoxMapper.createObjectNode();
36-
entryNode.put("name", mapEntry.getKey());
37-
entryNode.putPOJO("value", mapEntry.getValue());
38-
titlesMap.add(entryNode);
39-
});
40-
fieldFormDefinition.set("titleMap", titlesMap);
41-
} catch (InstantiationException | IllegalAccessException e) {
42-
ASFUILogger.getLogger().error(e.getMessage());
43-
throw new RuntimeException(e);
44-
}
45-
}
46-
}
47-
48-
private void buildValueDefinition(ObjectMapper checkBoxMapper, ArrayNode titlesMap, String value) {
49-
ObjectNode entry = checkBoxMapper.createObjectNode();
50-
String upperCasedValue = value.toUpperCase();
51-
String lowerCasedValue = value.toLowerCase();
52-
if (value.equals(upperCasedValue)) {
53-
entry.put("name", value.toLowerCase());
54-
} else if (value.equals(lowerCasedValue)) {
55-
entry.put("name", value.replace(value.substring(0, 1), value.substring(0, 1).toUpperCase()));
56-
} else {
57-
entry.put("name", value);
30+
buildValues(checkBoxMapper, titlesMap, annotation.titleMap());
31+
fieldFormDefinition.set("titleMap", titlesMap);
5832
}
59-
entry.put("value", value);
60-
titlesMap.add(entry);
6133
}
6234

6335
@Override

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

+6-31
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import io.asfjava.ui.core.form.ValuesContainer;
1313
import io.asfjava.ui.core.logging.ASFUILogger;
1414

15-
public class ComboBoxGenerator implements FormDefinitionGenerator {
15+
public class ComboBoxGenerator extends ListGenerator implements FormDefinitionGenerator {
1616

1717
@Override
1818
public void generate(ObjectNode fieldFormDefinition, Field field) {
@@ -24,47 +24,22 @@ public void generate(ObjectNode fieldFormDefinition, Field field) {
2424
fieldFormDefinition.put("multiple", annotation.multiple());
2525
fieldFormDefinition.put("required", annotation.required());
2626
fieldFormDefinition.put("size", annotation.size());
27+
if (!annotation.refURL().isEmpty()) {
28+
fieldFormDefinition.put("$ref", annotation.refURL());
29+
}
2730

2831
ObjectMapper comboMapper = new ObjectMapper();
2932
ArrayNode titlesMap = comboMapper.createArrayNode();
3033
if (annotation.values().length != 0) {
3134
Arrays.stream(annotation.values()).forEach(value -> buildValueDefinition(comboMapper, titlesMap, value));
32-
3335
fieldFormDefinition.set("titleMap", titlesMap);
3436
} else if (!annotation.titleMap().equals(ValuesContainer.class)) {
35-
36-
try {
37-
Map<String, String> map = (annotation.titleMap()).newInstance().getValues();
38-
map.entrySet().stream().forEach(mapEntry -> {
39-
ObjectNode entryNode = comboMapper.createObjectNode();
40-
entryNode.put("name", mapEntry.getKey());
41-
entryNode.putPOJO("value", mapEntry.getValue());
42-
titlesMap.add(entryNode);
43-
});
44-
fieldFormDefinition.set("titleMap", titlesMap);
45-
} catch (InstantiationException | IllegalAccessException e) {
46-
ASFUILogger.getLogger().error(e.getMessage());
47-
throw new RuntimeException(e);
48-
}
37+
buildValues(comboMapper, titlesMap, annotation.titleMap());
38+
fieldFormDefinition.set("titleMap", titlesMap);
4939
}
5040

5141
}
5242

53-
private void buildValueDefinition(ObjectMapper comboMapper, ArrayNode titlesMap, String value) {
54-
ObjectNode entry = comboMapper.createObjectNode();
55-
String upperCasedValue = value.toUpperCase();
56-
String lowerCasedValue = value.toLowerCase();
57-
if (value.equals(upperCasedValue)) {
58-
entry.put("name", value.toLowerCase());
59-
} else if (value.equals(lowerCasedValue)) {
60-
entry.put("name", value.replace(value.substring(0, 1), value.substring(0, 1).toUpperCase()));
61-
} else {
62-
entry.put("name", value);
63-
}
64-
entry.put("value", value);
65-
titlesMap.add(entry);
66-
}
67-
6843
@Override
6944
public String getAnnotation() {
7045
return ComboBox.class.getName();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package io.asfjava.ui.core.generators;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.fasterxml.jackson.databind.node.ArrayNode;
5+
import com.fasterxml.jackson.databind.node.ObjectNode;
6+
import io.asfjava.ui.core.form.ValuesContainer;
7+
import io.asfjava.ui.core.logging.ASFUILogger;
8+
9+
public class ListGenerator {
10+
11+
protected void buildValueDefinition(ObjectMapper listMapper, ArrayNode titlesMap, String value) {
12+
ObjectNode entry = listMapper.createObjectNode();
13+
String upperCasedValue = value.toUpperCase();
14+
String lowerCasedValue = value.toLowerCase();
15+
if (value.equals(upperCasedValue)) {
16+
entry.put("name", value.toLowerCase());
17+
} else if (value.equals(lowerCasedValue)) {
18+
entry.put("name", value.replace(value.substring(0, 1), value.substring(0, 1).toUpperCase()));
19+
} else {
20+
entry.put("name", value);
21+
}
22+
entry.put("value", value);
23+
titlesMap.add(entry);
24+
}
25+
26+
protected void buildValues(ObjectMapper listMapper, ArrayNode titlesMap, Class<? extends ValuesContainer> valuesContainer) {
27+
try {
28+
valuesContainer.newInstance().getValues().forEach((key, value) -> {
29+
ObjectNode entryNode = listMapper.createObjectNode();
30+
entryNode.put("name", key);
31+
entryNode.putPOJO("value", value);
32+
titlesMap.add(entryNode);
33+
});
34+
} catch (InstantiationException | IllegalAccessException e) {
35+
ASFUILogger.getLogger().error(e.getMessage());
36+
throw new RuntimeException(e);
37+
}
38+
}
39+
}

0 commit comments

Comments
 (0)