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.dialog.setup.migration;
35
36 import info.magnolia.jcr.util.NodeTypes;
37 import info.magnolia.module.InstallContext;
38 import info.magnolia.ui.form.field.converter.BaseIdentifierToPathConverter;
39 import info.magnolia.ui.form.field.definition.LinkFieldDefinition;
40 import info.magnolia.ui.form.field.definition.MultiValueFieldDefinition;
41 import info.magnolia.ui.form.field.transformer.multi.MultiValueChildNodeTransformer;
42 import info.magnolia.ui.form.field.transformer.multi.MultiValueJSONTransformer;
43 import info.magnolia.ui.form.field.transformer.multi.MultiValueSubChildrenNodeTransformer;
44
45 import javax.jcr.Node;
46 import javax.jcr.RepositoryException;
47
48
49
50
51 public class MultiSelectControlMigrator implements ControlMigrator {
52
53 private final boolean useIdentifier;
54
55 public MultiSelectControlMigrator(boolean useIdentifier) {
56 this.useIdentifier = useIdentifier;
57 }
58
59 @Override
60 public void migrate(Node controlNode, InstallContext installContext) throws RepositoryException {
61 controlNode.getProperty("controlType").remove();
62 controlNode.setProperty("class", MultiValueFieldDefinition.class.getName());
63
64
65 setTransformerClass(controlNode);
66
67 Node field = controlNode.addNode("field", NodeTypes.ContentNode.NAME);
68
69 if (useIdentifier) {
70 field.addNode("identifierToPathConverter", NodeTypes.ContentNode.NAME).setProperty("class", BaseIdentifierToPathConverter.class.getName());
71 }
72 field.setProperty("class", LinkFieldDefinition.class.getName());
73
74 if (controlNode.hasProperty("tree")) {
75 setSeletionApp(controlNode, field);
76 }
77 controlNode.setProperty("buttonSelectAddLabel", "field.link.select.add");
78 field.setProperty("buttonSelectNewLabel", "field.link.select.new");
79 field.setProperty("buttonSelectOtherLabel", "field.link.select.another");
80
81 if (controlNode.hasProperty("saveHandler")) {
82 controlNode.getProperty("saveHandler").remove();
83 }
84
85 if (controlNode.hasProperty("type")) {
86 field.setProperty("type", controlNode.getProperty("type").getString());
87 controlNode.getProperty("type").remove();
88 }
89 }
90
91
92
93
94 protected void setSeletionApp(Node controlNode, Node fieldNode) throws RepositoryException {
95 String workspace = controlNode.getProperty("tree").getString();
96 fieldNode.setProperty("targetWorkspace", workspace);
97 controlNode.getProperty("tree").remove();
98 if (workspace.equals("category")) {
99 fieldNode.setProperty("appName", "categories");
100 } else if (workspace.equals("website")) {
101 fieldNode.setProperty("appName", "pages");
102 }
103 }
104
105
106
107
108 protected void setTransformerClass(Node controlNode) throws RepositoryException {
109 if (controlNode.hasProperty("saveMode")) {
110 String saveMode = controlNode.getProperty("saveMode").getString();
111 if (saveMode.equals("list")) {
112 controlNode.setProperty("transformerClass", MultiValueJSONTransformer.class.getName());
113 } else if (saveMode.equals("multiple")) {
114 controlNode.setProperty("transformerClass", MultiValueChildNodeTransformer.class.getName());
115 }
116 controlNode.getProperty("saveMode").remove();
117 } else {
118 controlNode.setProperty("transformerClass", MultiValueSubChildrenNodeTransformer.class.getName());
119 }
120 }
121
122 }