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.form.definition;
35
36 import info.magnolia.ui.field.ConfiguredFieldDefinition;
37 import info.magnolia.ui.form.ConfiguredFormDefinition;
38 import info.magnolia.ui.field.ConfiguredNamedFieldDefinition;
39 import info.magnolia.ui.field.FieldDefinition;
40 import info.magnolia.ui.form.FormDefinition;
41 import info.magnolia.ui.field.NamedFieldDefinition;
42 import info.magnolia.ui.field.TextFieldDefinition;
43 import info.magnolia.ui.framework.databinding.layout.ConfiguredTabDefinition;
44 import info.magnolia.ui.framework.databinding.layout.TabDefinition;
45 import info.magnolia.ui.framework.databinding.layout.TabbedLayoutDefinition;
46
47 import java.util.List;
48 import java.util.stream.Collectors;
49
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52
53 import net.sf.cglib.proxy.Enhancer;
54
55
56
57
58
59
60
61 @FunctionalInterface
62 public interface DefinitionConverter<OLD, NEW> {
63
64 NEW convert(OLD definition);
65
66 DefinitionConverter<info.magnolia.ui.form.field.definition.FieldDefinition, NamedFieldDefinition> NAMED = (oldDefinition) -> {
67 ConfiguredNamedFieldDefinition namedDefinition = new ConfiguredNamedFieldDefinition();
68 namedDefinition.setName(oldDefinition.getName());
69 return namedDefinition;
70 };
71
72 DefinitionConverter<info.magnolia.ui.form.definition.TabDefinition, TabDefinition> TAB = (oldDefinition) -> {
73 info.magnolia.ui.framework.databinding.layout.ConfiguredTabDefinition newDefinition = new ConfiguredTabDefinition();
74 newDefinition.setLabel(oldDefinition.getLabel());
75 newDefinition.setName(oldDefinition.getName());
76 newDefinition.setFields(oldDefinition.getFields().stream().map(NAMED::convert).collect(Collectors.toList()));
77 return newDefinition;
78 };
79
80 DefinitionConverter<info.magnolia.ui.form.field.definition.FieldDefinition, FieldDefinition<?>> FIELD = (oldDefinition) -> {
81 final Logger log = LoggerFactory.getLogger(DefinitionConverter.class);
82
83 Class oldDefinitionClass = Enhancer.isEnhanced(oldDefinition.getClass()) ? oldDefinition.getClass().getSuperclass() : oldDefinition.getClass();
84 ConfiguredFieldDefinition newDefinition;
85 try {
86 newDefinition = (ConfiguredFieldDefinition) Class.forName("info.magnolia.ui.field." + oldDefinitionClass.getSimpleName()).newInstance();
87 } catch (ReflectiveOperationException e) {
88 log.error("No replacement for old {}. Falling back to {}", oldDefinitionClass, TextFieldDefinition.class, e);
89 newDefinition = new TextFieldDefinition();
90 }
91 newDefinition.setDefaultValue(oldDefinition.getDefaultValue());
92 newDefinition.setDescription(oldDefinition.getDescription());
93 newDefinition.setI18n(oldDefinition.isI18n());
94 newDefinition.setLabel(oldDefinition.getLabel());
95 newDefinition.setName(oldDefinition.getName());
96 newDefinition.setReadOnly(oldDefinition.isReadOnly());
97 newDefinition.setRequired(oldDefinition.isRequired());
98 newDefinition.setRequiredErrorMessage(oldDefinition.getRequiredErrorMessage());
99 newDefinition.setStyleName(oldDefinition.getStyleName());
100 newDefinition.setValidators(oldDefinition.getValidators());
101 if (oldDefinition.getConverterClass() != null) {
102 log.error("Converter are not supported for task detail view. No converter will be set for field {}", oldDefinition.getConverterClass(), oldDefinition.getName());
103 }
104 return newDefinition;
105 };
106
107 DefinitionConverter<info.magnolia.ui.form.definition.FormDefinition, FormDefinition> FORM = (oldDefinition) -> {
108 TabbedLayoutDefinition tabbedLayoutDefinition = new TabbedLayoutDefinition();
109 tabbedLayoutDefinition.setTabs(oldDefinition.getTabs().stream().map(TAB::convert).collect(Collectors.toList()));
110 ConfiguredFormDefinition<?> newDefinition = new ConfiguredFormDefinition<>();
111 newDefinition.setName(oldDefinition.getLabel());
112 newDefinition.setLayout(tabbedLayoutDefinition);
113
114 newDefinition.setProperties(oldDefinition
115 .getTabs()
116 .stream()
117 .map(info.magnolia.ui.form.definition.TabDefinition::getFields)
118 .flatMap(List::stream)
119 .map(FIELD::convert)
120 .collect(Collectors.toList()));
121 return newDefinition;
122 };
123 }