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.objectfactory.ComponentProvider;
37 import info.magnolia.ui.api.i18n.I18NAuthoringSupport;
38 import info.magnolia.ui.field.AlwaysEmptyPrefixNameDecorator;
39 import info.magnolia.ui.field.ConfiguredComplexPropertyDefinition;
40 import info.magnolia.ui.field.EditorPropertyDefinition;
41 import info.magnolia.ui.field.MultiFieldDefinition;
42
43 import java.util.Collections;
44 import java.util.Locale;
45 import java.util.Optional;
46
47 import javax.inject.Inject;
48 import javax.jcr.Node;
49
50
51
52
53
54
55
56
57 @Deprecated
58 public class ByLexicographicallyIndexedChildNodes extends ByIndexedChildNodes {
59
60 private final MultiFieldDefinition<Node> relatedPropertyDefinition;
61
62 @Inject
63 public ByLexicographicallyIndexedChildNodes(ByLexicographicallyIndexedChildNodes.Definition definition, MultiFieldDefinition<Node> relatedPropertyDefinition, I18NAuthoringSupport<Node> i18NAuthoringSupport, ComponentProvider componentProvider, Locale locale) {
64 super(definition, relatedPropertyDefinition, i18NAuthoringSupport, componentProvider, locale);
65 this.relatedPropertyDefinition = relatedPropertyDefinition;
66 }
67
68 @Override
69 protected Optional<EditorDefinition<Node>> resolveEntryEditorDefinition(Node item, int index) {
70 EditorPropertyDefinition field = this.relatedPropertyDefinition.getField();
71 if (field instanceof EditorDefinition) {
72 return Optional.of((EditorDefinition<Node>) field);
73 }
74
75 String indexedName = String.format("%s%02d", field.getName(), index);
76 ConfiguredFormDefinition<Node> wrapper = new ConfiguredFormDefinition<>();
77 wrapper.setName(indexedName);
78 wrapper.setProperties(Collections.singletonList(field));
79
80 return Optional.of(wrapper);
81 }
82
83 @Override
84 protected Optional<ConfiguredComplexPropertyDefinition<Node>> resolvePropertyDefinition(Node item, int index) {
85 return resolveEntryEditorDefinition(item, index)
86 .map(entryEditorDefinition -> {
87 ConfiguredComplexPropertyDefinition<Node> property = new ConfiguredComplexPropertyDefinition.Wrapper<>(entryEditorDefinition);
88 ItemProviderDefinition<Node, Node> indexedItemProvider = resolveItemProvider(index);
89 property.setItemProvider(indexedItemProvider);
90 return property;
91 });
92 }
93
94 private LexicographicallyIndexedChildNodeProvider.Definition resolveItemProvider(int index) {
95 LexicographicallyIndexedChildNodeProvider.Definition indexedItemProvider = new LexicographicallyIndexedChildNodeProvider.Definition();
96
97 indexedItemProvider.setIndex(index);
98 indexedItemProvider.setNodeName(getEntryPropertyNameBase());
99
100 return indexedItemProvider;
101 }
102
103
104
105
106
107
108 @Deprecated
109 public static class Definition extends ByIndexedChildNodes.Definition {
110
111 public Definition() {
112 setPropertyNameDecorator(AlwaysEmptyPrefixNameDecorator.class);
113 setImplementationClass(ByLexicographicallyIndexedChildNodes.class);
114 }
115 }
116 }