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.module.blossom.dialog;
35
36 import info.magnolia.config.registry.DefinitionMetadata;
37 import info.magnolia.config.registry.DefinitionMetadataBuilder;
38 import info.magnolia.config.registry.DefinitionProvider;
39 import info.magnolia.config.registry.DefinitionRawView;
40 import info.magnolia.config.registry.Registry;
41 import info.magnolia.module.blossom.support.ExplicitIdDefinitionMetadataBuilder;
42 import info.magnolia.ui.admincentral.dialog.action.CancelDialogActionDefinition;
43 import info.magnolia.ui.admincentral.dialog.action.SaveDialogActionDefinition;
44 import info.magnolia.ui.dialog.definition.ConfiguredFormDialogDefinition;
45 import info.magnolia.ui.dialog.definition.DialogDefinition;
46 import info.magnolia.ui.dialog.registry.DefinitionTypes;
47 import info.magnolia.ui.form.definition.ConfiguredFormDefinition;
48
49 import java.util.Collections;
50 import java.util.List;
51
52 import org.slf4j.Logger;
53 import org.slf4j.LoggerFactory;
54
55
56
57
58
59
60 public class BlossomDialogDefinitionProvider implements DefinitionProvider<DialogDefinition> {
61
62 private final Logger logger = LoggerFactory.getLogger(getClass());
63
64 private BlossomDialogDescription dialogDescription;
65
66 public BlossomDialogDefinitionProvider(BlossomDialogDescription dialogDescription) {
67 this.dialogDescription = dialogDescription;
68 }
69
70 @Override
71 public DefinitionMetadata getMetadata() {
72 DefinitionMetadataBuilder builder = new ExplicitIdDefinitionMetadataBuilder(dialogDescription.getId()).type(DefinitionTypes.DIALOG);
73 DialogFactoryMetaData factoryMetaData = dialogDescription.getFactoryMetaData();
74 if (factoryMetaData != null) {
75 if (factoryMetaData.getFactoryMethod() != null) {
76 builder.location(factoryMetaData.getFactoryObject().getClass().getName() + "." + factoryMetaData.getFactoryMethod().getName());
77 } else {
78 builder.location(factoryMetaData.getFactoryObject().getClass().getName());
79 }
80 }
81 return builder.build();
82 }
83
84 @Override
85 public DefinitionRawView getRaw() {
86 return DefinitionRawView.EMPTY;
87 }
88
89 @Override
90 public boolean isValid() {
91 return true;
92 }
93
94 @Override
95 public List<String> getErrorMessages() {
96 return Collections.emptyList();
97 }
98
99 @Override
100 public DialogDefinition get() throws Registry.InvalidDefinitionException {
101
102 DialogCreationContext context = DialogCreationContextHolder.get();
103 if (context == null) {
104
105 ConfiguredFormDialogDefinition dialog = new ConfiguredFormDialogDefinition();
106 dialog.setId(dialogDescription.getId());
107 dialog.setLabel(dialogDescription.getFactoryMetaData().getLabel());
108 dialog.setI18nBasename(dialogDescription.getFactoryMetaData().getI18nBasename());
109 dialog.setPresenterClass(BlossomFormDialogPresenter.class);
110 dialog.setForm(new ConfiguredFormDefinition());
111
112 return dialog;
113 }
114
115 context.setId(dialogDescription.getId());
116
117 DialogCreator dialogCreator = dialogDescription.getDialogCreator();
118 DialogFactoryMetaData factoryMetaData = dialogDescription.getFactoryMetaData();
119 try {
120 dialogCreator.createDialog(factoryMetaData, context);
121 } catch (Exception e) {
122 if (factoryMetaData.getFactoryMethod() != null) {
123 logger.error("Failed to create dialog for method [" + factoryMetaData.getFactoryMethod() + "]", e);
124 throw new Registry.InvalidDefinitionException(dialogDescription.getId());
125 } else {
126 logger.error("Failed to create dialog for class [" + factoryMetaData.getFactoryObject().getClass() + "]", e);
127 throw new Registry.InvalidDefinitionException(dialogDescription.getId());
128 }
129 }
130
131 ConfiguredFormDialogDefinition dialog = context.getDialog();
132
133 if (dialog.getActions().isEmpty()) {
134
135 SaveDialogActionDefinition callbackAction = new SaveDialogActionDefinition();
136 callbackAction.setName("commit");
137 callbackAction.setLabel("save");
138 dialog.getActions().put(callbackAction.getName(), callbackAction);
139
140 CancelDialogActionDefinition cancelAction = new CancelDialogActionDefinition();
141 cancelAction.setName("cancel");
142 cancelAction.setLabel("cancel");
143 dialog.getActions().put(cancelAction.getName(), cancelAction);
144 }
145
146 return dialog;
147 }
148 }