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;
35
36 import info.magnolia.config.source.ConfigurationSourceFactory;
37 import info.magnolia.jcr.predicate.AbstractPredicate;
38 import info.magnolia.jcr.wrapper.ExtendingNodeWrapper;
39 import info.magnolia.module.ModuleLifecycle;
40 import info.magnolia.module.ModuleLifecycleContext;
41 import info.magnolia.ui.api.app.registry.AppDescriptorRegistry;
42 import info.magnolia.ui.dialog.definition.ConfiguredFormDialogDefinition;
43 import info.magnolia.ui.dialog.registry.DialogDefinitionRegistry;
44 import info.magnolia.ui.form.fieldtype.registry.FieldTypeDefinitionRegistry;
45
46 import javax.inject.Inject;
47 import javax.jcr.Node;
48 import javax.jcr.RepositoryException;
49
50
51
52
53 public class UiFrameworkModule implements ModuleLifecycle {
54
55 private final ConfigurationSourceFactory configSourceFactory;
56 private final DialogDefinitionRegistry dialogRegistry;
57 private FieldTypeDefinitionRegistry fieldTypeDefinitionRegistry;
58 private AppDescriptorRegistry appDescriptorRegistry;
59
60 @Inject
61 public UiFrameworkModule(ConfigurationSourceFactory configSourceFactory,
62 DialogDefinitionRegistry dialogRegistry, FieldTypeDefinitionRegistry fieldTypeDefinitionRegistry,
63 AppDescriptorRegistry appDescriptorRegistry) {
64
65 this.configSourceFactory = configSourceFactory;
66 this.dialogRegistry = dialogRegistry;
67 this.fieldTypeDefinitionRegistry = fieldTypeDefinitionRegistry;
68 this.appDescriptorRegistry = appDescriptorRegistry;
69 }
70
71 @Override
72 public void start(ModuleLifecycleContext context) {
73 if (context.getPhase() == ModuleLifecycleContext.PHASE_SYSTEM_STARTUP) {
74
75 configSourceFactory.jcr().withFilter(new IsAppDescriptor()).bindWithDefaults(appDescriptorRegistry);
76 configSourceFactory.jcr().withFilter(new IsDialogNode()).bindWithDefaults(dialogRegistry);
77 configSourceFactory.jcr().withFilter(new IsFieldType()).bindWithDefaults(fieldTypeDefinitionRegistry);
78
79 configSourceFactory.yaml().bindWithDefaults(dialogRegistry);
80 configSourceFactory.yaml().bindWithDefaults(appDescriptorRegistry);
81 configSourceFactory.yaml().bindWithDefaults(fieldTypeDefinitionRegistry);
82 }
83 }
84
85 @Override
86 public void stop(ModuleLifecycleContext context) {
87 }
88
89
90
91
92
93
94 private static class IsDialogNode extends AbstractPredicate<Node> {
95 @Override
96 public boolean evaluateTyped(Node node) {
97 try {
98 if (node.hasProperty(ConfiguredFormDialogDefinition.EXTEND_PROPERTY_NAME)) {
99 node = new ExtendingNodeWrapper(node);
100 }
101 return node.hasNode(ConfiguredFormDialogDefinition.FORM_NODE_NAME) || node.hasNode(ConfiguredFormDialogDefinition.ACTIONS_NODE_NAME);
102 } catch (RepositoryException e) {
103 throw new RuntimeException(e);
104 }
105 }
106 }
107
108
109
110
111
112 private static class IsAppDescriptor extends AbstractPredicate<Node> {
113 @Override
114 public boolean evaluateTyped(Node node) {
115 try {
116 if (node.hasProperty(ConfiguredFormDialogDefinition.EXTEND_PROPERTY_NAME)) {
117 node = new ExtendingNodeWrapper(node);
118 }
119 return "apps".equalsIgnoreCase(node.getParent().getName());
120 } catch (RepositoryException e) {
121 throw new RuntimeException(e);
122 }
123 }
124 }
125
126
127
128
129
130 private static class IsFieldType extends AbstractPredicate<Node> {
131
132 public static final String DEFINITION_CLASS = "definitionClass";
133
134 public static final String FACTORY_CLASS = "factoryClass";
135
136 @Override
137 public boolean evaluateTyped(Node node) {
138 try {
139 if (node.hasProperty(ConfiguredFormDialogDefinition.EXTEND_PROPERTY_NAME)) {
140 node = new ExtendingNodeWrapper(node);
141 }
142 return node.hasProperty(DEFINITION_CLASS) && node.hasProperty(FACTORY_CLASS);
143 } catch (RepositoryException e) {
144 throw new RuntimeException(e);
145 }
146 }
147 }
148 }