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