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.framework.databinding.registry;
35
36 import info.magnolia.config.registry.AbstractRegistry;
37 import info.magnolia.config.registry.DefinitionMetadataBuilder;
38 import info.magnolia.config.registry.DefinitionType;
39 import info.magnolia.module.ModuleRegistry;
40 import info.magnolia.ui.CandidateForRemoval;
41 import info.magnolia.ui.field.CheckBoxFieldDefinition;
42 import info.magnolia.ui.field.CheckBoxGroupFieldDefinition;
43 import info.magnolia.ui.field.CodeFieldDefinition;
44 import info.magnolia.ui.field.ComboBoxFieldDefinition;
45 import info.magnolia.ui.field.FieldDefinition;
46 import info.magnolia.ui.field.LinkFieldDefinition;
47 import info.magnolia.ui.field.ListSelectFieldDefinition;
48 import info.magnolia.ui.field.RadioButtonGroupFieldDefinition;
49 import info.magnolia.ui.field.RichTextFieldDefinition;
50 import info.magnolia.ui.field.TextFieldDefinition;
51 import info.magnolia.ui.field.TokenFieldDefinition;
52 import info.magnolia.ui.field.TwinColSelectFieldDefinition;
53 import info.magnolia.ui.field.factory.CheckBoxFieldFactory;
54 import info.magnolia.ui.field.factory.CheckBoxGroupFieldFactory;
55 import info.magnolia.ui.field.factory.CodeFieldFactory;
56 import info.magnolia.ui.field.factory.ComboBoxFieldFactory;
57 import info.magnolia.ui.field.factory.LinkFieldFactory;
58 import info.magnolia.ui.field.factory.ListSelectFieldFactory;
59 import info.magnolia.ui.field.factory.RadioButtonGroupFieldFactory;
60 import info.magnolia.ui.field.factory.RichTextFieldFactory;
61 import info.magnolia.ui.field.factory.TextFieldFactory;
62 import info.magnolia.ui.field.factory.TokenFieldFactory;
63 import info.magnolia.ui.field.factory.TwinColSelectFieldFactory;
64
65 import java.util.HashMap;
66 import java.util.Map;
67
68 import javax.inject.Inject;
69 import javax.inject.Singleton;
70
71
72
73
74 @Singleton
75 @CandidateForRemoval
76 public class ComponentTypeDefinitionRegistry extends AbstractRegistry<FieldTypeDefinition> {
77
78 private final Map<Class<?>, Class<?>> factories;
79
80 @Inject
81 public ComponentTypeDefinitionRegistry(ModuleRegistry moduleRegistry) {
82 super(moduleRegistry);
83
84 factories = new HashMap<>();
85 factories.put(TextFieldDefinition.class, TextFieldFactory.class);
86 factories.put(ComboBoxFieldDefinition.class, ComboBoxFieldFactory.class);
87 factories.put(ListSelectFieldDefinition.class, ListSelectFieldFactory.class);
88 factories.put(CodeFieldDefinition.class, CodeFieldFactory.class);
89 factories.put(TwinColSelectFieldDefinition.class, TwinColSelectFieldFactory.class);
90 factories.put(RadioButtonGroupFieldDefinition.class, RadioButtonGroupFieldFactory.class);
91 factories.put(CheckBoxGroupFieldDefinition.class, CheckBoxGroupFieldFactory.class);
92 factories.put(TokenFieldDefinition.class, TokenFieldFactory.class);
93 factories.put(LinkFieldDefinition.class, LinkFieldFactory.class);
94 factories.put(CheckBoxFieldDefinition.class, CheckBoxFieldFactory.class);
95 factories.put(RichTextFieldDefinition.class, RichTextFieldFactory.class);
96 }
97
98
99 public <T> FieldTypeDefinition<T> getByDefinition(FieldDefinition<T> definition) {
100 return factories.entrySet().stream()
101 .filter(entry -> entry.getKey().isAssignableFrom(definition.getClass()))
102 .findAny()
103 .map(entry -> {
104 ConfiguredFieldTypeDefinition typeDefinition = new ConfiguredFieldTypeDefinition();
105 typeDefinition.setDefinitionClass(entry.getKey());
106 typeDefinition.setFactoryClass(entry.getValue());
107 return typeDefinition;
108 })
109 .orElseThrow(() -> new IllegalArgumentException("Could not find fieldType for definition " + definition.getName()));
110 }
111
112 @Override
113 public DefinitionType type() {
114 return new DefinitionType() {
115 @Override
116 public String name() {
117 return "field";
118 }
119
120 @Override
121 public Class baseClass() {
122 return FieldTypeDefinition.class;
123 }
124 };
125 }
126
127 @Override
128 public DefinitionMetadataBuilder newMetadataBuilder() {
129 return DefinitionMetadataBuilder.usingNameAsId();
130 }
131 }