1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.editor;
35
36 import info.magnolia.i18nsystem.I18nable;
37 import info.magnolia.ui.field.EditorPropertyDefinition;
38 import info.magnolia.ui.field.FieldDefinition;
39 import info.magnolia.ui.framework.layout.FieldLayoutDefinition;
40 import info.magnolia.ui.framework.layout.LayoutDefinition;
41
42 import java.util.List;
43 import java.util.Optional;
44 import java.util.stream.Collectors;
45
46
47
48
49
50
51
52
53
54
55 @I18nable
56 public interface FormDefinition<T> extends EditorDefinition<T>, MayHaveI18NProperties {
57
58 List<EditorPropertyDefinition> getProperties();
59
60 FieldLayoutDefinition getLayout();
61
62 default Optional<EditorPropertyDefinition> getFieldDefinition(String id) {
63 return getProperties()
64 .stream()
65 .filter(fieldDefinition -> id.equals(fieldDefinition.getName()))
66 .findFirst();
67 }
68
69 default List<FieldDefinition> getFieldDefinitions() {
70 return getProperties()
71 .stream()
72 .filter(FieldDefinition.class::isInstance)
73 .map(FieldDefinition.class::cast).collect(Collectors.toList());
74 }
75
76 default List<ComplexPropertyDefinition> getSubFormDefinitions() {
77 return getProperties()
78 .stream()
79 .filter(ComplexPropertyDefinition.class::isInstance)
80 .map(ComplexPropertyDefinition.class::cast).collect(Collectors.toList());
81 }
82
83 @Override
84 default boolean hasI18NProperties() {
85 return getFieldDefinitions().stream().anyMatch(EditorPropertyDefinition::isI18n) ||
86 getSubFormDefinitions().stream().anyMatch(subFormDefinition -> {
87 if (subFormDefinition instanceof MayHaveI18NProperties) {
88 return subFormDefinition.isI18n() || ((MayHaveI18NProperties) subFormDefinition).hasI18NProperties();
89 }
90 return subFormDefinition.isI18n();
91 });
92 }
93 }