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.field.definition.migration;
35
36 import info.magnolia.ui.editor.CurrentItemProviderDefinition;
37 import info.magnolia.ui.editor.JcrChildNodeProviderDefinition;
38 import info.magnolia.ui.editor.JcrPropertyProvider;
39 import info.magnolia.ui.field.CompositeFieldDefinition;
40 import info.magnolia.ui.field.ConfiguredFieldDefinition;
41 import info.magnolia.ui.field.EditorPropertyDefinition;
42 import info.magnolia.ui.field.JcrMultiFieldDefinition;
43 import info.magnolia.ui.field.JcrMultiValueFieldDefinition;
44 import info.magnolia.ui.field.MultiFieldDefinition;
45 import info.magnolia.ui.form.definition.DefinitionConverter;
46 import info.magnolia.ui.form.field.definition.MultiValueFieldDefinition;
47 import info.magnolia.ui.form.field.transformer.multi.DelegatingMultiValueFieldTransformer;
48 import info.magnolia.ui.form.field.transformer.multi.MultiValueTransformer;
49
50 import java.util.ArrayList;
51 import java.util.List;
52
53 import javax.jcr.Node;
54
55
56
57
58 public class MultiValueFieldDefinitionConverter extends AbstractComplexFieldDefinitionConverter<Node, MultiFieldDefinition<Node>, MultiValueFieldDefinition> {
59
60 public MultiFieldDefinition<Node> convert(MultiValueFieldDefinition oldDefinition) {
61 MultiFieldDefinition newDefinition = super.convert(oldDefinition);
62 final ConfiguredFieldDefinition<Node> field = (ConfiguredFieldDefinition) DefinitionConverter.FIELD.convert(oldDefinition.getField());
63 if (newDefinition instanceof JcrMultiValueFieldDefinition) {
64 final JcrPropertyProvider.Definition definition = new JcrPropertyProvider.Definition(oldDefinition.getName());
65 definition.setMultiple(true);
66 newDefinition.setItemProvider(definition);
67 newDefinition.setField(field);
68 ((JcrMultiValueFieldDefinition) newDefinition).init();
69 } else {
70 List<EditorPropertyDefinition> properties = new ArrayList<>();
71 properties.add(field);
72 CompositeFieldDefinition<Object> compositeFieldDefinition = new CompositeFieldDefinition<>();
73 final JcrChildNodeProviderDefinition providerDefinition = new JcrChildNodeProviderDefinition();
74 providerDefinition.setNodeName(oldDefinition.getName());
75 compositeFieldDefinition.setName(oldDefinition.getName());
76 compositeFieldDefinition.setProperties(properties);
77 newDefinition.setField(compositeFieldDefinition);
78 convertTransformerStrategy(oldDefinition, newDefinition);
79 }
80 return newDefinition;
81 }
82
83 @Override
84 MultiFieldDefinition createNewDefinition(MultiValueFieldDefinition oldDefinition) {
85 return oldDefinition.getTransformerClass().equals(MultiValueTransformer.class) ? new JcrMultiValueFieldDefinition() : new JcrMultiFieldDefinition();
86 }
87
88 private void convertTransformerStrategy(info.magnolia.ui.form.field.definition.MultiValueFieldDefinition oldDefinition, MultiFieldDefinition<Node> newDefinition) {
89 if (oldDefinition.getTransformerClass().equals(DelegatingMultiValueFieldTransformer.class)) {
90 newDefinition.setItemProvider(new CurrentItemProviderDefinition<>());
91 }
92 }
93
94 @Override
95 protected boolean supportsTransformerClass(Class transformerClass) {
96 return transformerClass.equals(MultiValueTransformer.class) ||
97 transformerClass.equals(DelegatingMultiValueFieldTransformer.class);
98 }
99 }