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.fieldtype.registry;
35
36 import info.magnolia.config.registry.AbstractRegistry;
37 import info.magnolia.config.registry.DefinitionMetadataBuilder;
38 import info.magnolia.config.registry.DefinitionProvider;
39 import info.magnolia.config.registry.DefinitionType;
40 import info.magnolia.registry.RegistrationException;
41 import info.magnolia.ui.form.field.definition.ConfiguredFieldDefinition;
42 import info.magnolia.ui.form.field.definition.FieldDefinition;
43 import info.magnolia.ui.form.fieldtype.definition.FieldTypeDefinition;
44
45 import javax.inject.Singleton;
46
47 import net.sf.cglib.proxy.Enhancer;
48
49
50
51
52 @Singleton
53 public class FieldTypeDefinitionRegistry extends AbstractRegistry<FieldTypeDefinition> {
54
55 public FieldTypeDefinition getByDefinition(Class<? extends FieldDefinition> definitionClass) throws RegistrationException {
56
57 while (Enhancer.isEnhanced(definitionClass)) {
58 definitionClass = (Class<? extends FieldDefinition>)definitionClass.getSuperclass();
59 }
60 if (definitionClass.equals(ConfiguredFieldDefinition.class)) {
61
62 return null;
63 }
64
65
66 for (DefinitionProvider<FieldTypeDefinition> provider : getRegistryMap().values()) {
67 final FieldTypeDefinition fieldTypeDefinition = provider.get();
68 if (definitionClass.equals(fieldTypeDefinition.getDefinitionClass())) {
69 return fieldTypeDefinition;
70 }
71 }
72
73 throw new RegistrationException("Could not find fieldType for definition " + definitionClass.getName());
74 }
75
76
77
78
79 @Deprecated
80 public FieldTypeDefinition get(String id) throws RegistrationException {
81 final FieldTypeDefinition fieldTypeDefinition;
82 try {
83 fieldTypeDefinition = getProvider(id).get();
84 } catch (NoSuchDefinitionException | InvalidDefinitionException e) {
85 throw new RegistrationException(e.getMessage(), e);
86 }
87 return fieldTypeDefinition;
88 }
89
90 @Override
91 public DefinitionType type() {
92 return DefinitionTypes.FIELD_TYPE;
93 }
94
95 @Override
96 public DefinitionMetadataBuilder newMetadataBuilder() {
97 return DefinitionMetadataBuilder.usingNameAsId();
98 }
99 }