Skip to content

Commit 41b745c

Browse files
committed
2 parents 61daa12 + 656ba16 commit 41b745c

File tree

7 files changed

+183
-0
lines changed

7 files changed

+183
-0
lines changed

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@
2929
<artifactId>jackson-annotations</artifactId>
3030
<version>2.8.6</version>
3131
</dependency>
32+
<dependency>
33+
<groupId>org.reflections</groupId>
34+
<artifactId>reflections</artifactId>
35+
<version>0.9.11</version>
36+
</dependency>
3237
<dependency>
3338
<groupId>com.fasterxml.jackson.module</groupId>
3439
<artifactId>jackson-module-jsonSchema</artifactId>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package io.asfjava.ui.form;
2+
3+
import java.lang.annotation.Retention;
4+
import java.lang.annotation.Target;
5+
6+
import static java.lang.annotation.RetentionPolicy.RUNTIME;
7+
8+
import static java.lang.annotation.ElementType.FIELD;
9+
10+
/**
11+
* {@link ComboBox}This interface represent the ComboBox HTML Tag Title:
12+
* {@link #title()} represent the title of the comboBox. {@link #values()} an
13+
* array which contain the possible values of the comboBox. {@link #autofocus()}
14+
* by default false,specifies that the drop-down list should automatically get
15+
* focus when the page loads. {@link #disabled()} by default false,specifies
16+
* that a drop-down list should be disabled. {@link #multiple()} by default
17+
* false,specifies that multiple options can be selected at once.
18+
* {@link #required()} by default false,specifies that the user is required to
19+
* select a value before submitting the form. {@link #size()} by default
20+
* 1,defines the number of visible options in a drop-down list.
21+
*
22+
* JsonSchema-JavaUI Team
23+
*/
24+
25+
@Retention(RUNTIME)
26+
@Target(FIELD)
27+
public @interface ComboBox {
28+
29+
String title();
30+
31+
String[] values();
32+
33+
boolean autofocus() default false;
34+
35+
boolean disabled() default false;
36+
37+
boolean multiple() default false;
38+
39+
boolean required() default false;
40+
41+
int size() default 1;
42+
43+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.asfjava.ui.schema.generators;
2+
3+
import java.lang.reflect.Field;
4+
5+
import com.fasterxml.jackson.databind.node.ArrayNode;
6+
import com.fasterxml.jackson.databind.node.ObjectNode;
7+
8+
import io.asfjava.ui.schema.interfaces.SchemaGenerator;
9+
10+
public final class DefaultGenerator implements SchemaGenerator {
11+
@Override
12+
public ArrayNode generate(ObjectNode fieldFormDefinition, ArrayNode formDefinition, Field field) {
13+
return formDefinition;
14+
}
15+
16+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package io.asfjava.ui.schema.generators;
2+
3+
import java.lang.reflect.Field;
4+
5+
import com.fasterxml.jackson.databind.node.ArrayNode;
6+
import com.fasterxml.jackson.databind.node.ObjectNode;
7+
8+
import io.asfjava.ui.form.TextField;
9+
import io.asfjava.ui.schema.interfaces.SchemaGenerator;
10+
11+
public final class TextFieldGenerator implements SchemaGenerator {
12+
13+
@Override
14+
public ArrayNode generate(ObjectNode fieldFormDefinition, ArrayNode formDefinition, Field field) {
15+
TextField annotation = field.getAnnotation(TextField.class);
16+
17+
fieldFormDefinition.put("key", field.getName());
18+
19+
String description = annotation.description();
20+
if (!description.isEmpty()) {
21+
fieldFormDefinition.put("description", description);
22+
}
23+
24+
String placeHolder = annotation.placeHolder();
25+
if (!placeHolder.isEmpty()) {
26+
fieldFormDefinition.put("placeholder", placeHolder);
27+
}
28+
29+
boolean noTitle = annotation.noTitle();
30+
if (noTitle) {
31+
fieldFormDefinition.put("notitle", noTitle);
32+
}
33+
34+
String validationMessage = annotation.validationMessage();
35+
if (!validationMessage.isEmpty()) {
36+
fieldFormDefinition.put("validationMessage", validationMessage);
37+
}
38+
39+
boolean readOnly = annotation.readOnly();
40+
if (readOnly) {
41+
fieldFormDefinition.put("readonly", readOnly);
42+
}
43+
44+
formDefinition.add(fieldFormDefinition);
45+
return formDefinition;
46+
}
47+
48+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package io.asfjava.ui.schema.generators.factory;
2+
3+
import java.util.concurrent.ConcurrentHashMap;
4+
5+
import io.asfjava.ui.schema.generators.DefaultGenerator;
6+
import io.asfjava.ui.schema.interfaces.SchemaGenerator;
7+
8+
public class GeneratorFactory {
9+
10+
private static ConcurrentHashMap<String, SchemaGenerator> generators = new ConcurrentHashMap<>();
11+
12+
private static DefaultGenerator defaultGenerator = new DefaultGenerator();
13+
14+
public static SchemaGenerator getGenerator(Class<? extends SchemaGenerator> genertor) {
15+
if (!generators.contains(genertor.getName())) {
16+
return defaultGenerator;
17+
}
18+
return generators.get(genertor.getName());
19+
}
20+
21+
public static void registerDriver(Class<? extends SchemaGenerator> genertor, SchemaGenerator schemaGenerator) {
22+
if (genertor != null && schemaGenerator != null) {
23+
generators.put(genertor.getName(), schemaGenerator);
24+
}
25+
26+
}
27+
28+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package io.asfjava.ui.schema.generators.loader;
2+
3+
import java.util.Set;
4+
5+
import org.reflections.Reflections;
6+
7+
import io.asfjava.ui.schema.generators.factory.GeneratorFactory;
8+
import io.asfjava.ui.schema.interfaces.SchemaGenerator;
9+
10+
public class GeneratorsLoader {
11+
12+
private static final String PACKAGESCAN = "io.asfjava.ui.schema.generators";
13+
private static Reflections reflections = new Reflections(PACKAGESCAN);
14+
15+
public static void loadGenerators() {
16+
Set<Class<? extends SchemaGenerator>> subTypes = reflections.getSubTypesOf(SchemaGenerator.class);
17+
for (Class<? extends SchemaGenerator> subtype : subTypes)
18+
{ SchemaGenerator schemaGenerator;
19+
try {
20+
schemaGenerator = (SchemaGenerator) Class.forName(subtype.getName()).newInstance();
21+
GeneratorFactory.registerDriver(subtype,schemaGenerator);
22+
} catch (InstantiationException e) {
23+
e.printStackTrace();
24+
} catch (IllegalAccessException e) {
25+
e.printStackTrace();
26+
} catch (ClassNotFoundException e) {
27+
e.printStackTrace();
28+
}
29+
}
30+
}
31+
32+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package io.asfjava.ui.schema.interfaces;
2+
3+
import java.lang.reflect.Field;
4+
5+
import com.fasterxml.jackson.databind.node.ArrayNode;
6+
import com.fasterxml.jackson.databind.node.ObjectNode;
7+
8+
public interface SchemaGenerator {
9+
10+
ArrayNode generate(ObjectNode fieldFormDefinition,ArrayNode formDefinition,Field field);
11+
}

0 commit comments

Comments
 (0)