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.dialog.choosedialog;
35
36 import info.magnolia.cms.i18n.I18nContentSupport;
37 import info.magnolia.i18nsystem.I18nizer;
38 import info.magnolia.i18nsystem.SimpleTranslator;
39 import info.magnolia.objectfactory.ComponentProvider;
40 import info.magnolia.ui.api.app.ChooseDialogCallback;
41 import info.magnolia.ui.api.context.UiContext;
42 import info.magnolia.ui.api.overlay.OverlayCloser;
43 import info.magnolia.ui.dialog.BaseDialogPresenter;
44 import info.magnolia.ui.dialog.actionarea.DialogActionExecutor;
45 import info.magnolia.ui.dialog.definition.ChooseDialogDefinition;
46 import info.magnolia.ui.dialog.definition.DialogDefinition;
47 import info.magnolia.ui.form.field.factory.FieldFactory;
48 import info.magnolia.ui.form.field.factory.FieldFactoryFactory;
49 import info.magnolia.ui.vaadin.integration.NullItem;
50 import info.magnolia.ui.vaadin.integration.contentconnector.ContentConnector;
51
52 import java.util.HashSet;
53 import java.util.Set;
54
55 import javax.inject.Inject;
56
57 import org.apache.commons.lang3.StringUtils;
58
59 import com.vaadin.v7.data.Item;
60 import com.vaadin.v7.data.Property.ValueChangeListener;
61 import com.vaadin.v7.ui.Field;
62
63
64
65
66 public class ChooseDialogPresenterImpl extends BaseDialogPresenter implements ChooseDialogPresenter {
67
68 private FieldFactoryFactory fieldFactoryFactory;
69
70 private ContentConnector contentConnector;
71
72 private Object chosenItemId;
73
74 private ChooseDialogCallback callback;
75
76 private Field<Object> field;
77
78 @Inject
79 public ChooseDialogPresenterImpl(
80 FieldFactoryFactory fieldFactoryFactory,
81 ComponentProvider componentProvider,
82 DialogActionExecutor executor,
83 ChooseDialogView view,
84 I18nizer i18nizer,
85 SimpleTranslator i18n,
86 ContentConnector contentConnector) {
87 super(componentProvider, executor, view, i18nizer, i18n);
88 this.fieldFactoryFactory = fieldFactoryFactory;
89 this.contentConnector = contentConnector;
90 this.componentProvider = componentProvider;
91 }
92
93
94
95
96 @Deprecated
97 public ChooseDialogPresenterImpl(
98 FieldFactoryFactory fieldFactoryFactory,
99 ComponentProvider componentProvider,
100 I18nContentSupport i18nContentSupport,
101 DialogActionExecutor executor,
102 ChooseDialogView view,
103 I18nizer i18nizer,
104 SimpleTranslator i18n,
105 ContentConnector contentConnector) {
106 this(fieldFactoryFactory, componentProvider, executor, view, i18nizer, i18n, contentConnector);
107 }
108
109 @Override
110 public ChooseDialogView start(DialogDefinition definition, UiContext uiContext) {
111 getExecutor().setDialogDefinition(definition);
112 return (ChooseDialogView) super.start(definition, uiContext);
113 }
114
115 @Override
116 public ChooseDialogView start(ChooseDialogCallback callback, ChooseDialogDefinition definition, UiContext appContext, String selectedItemId) {
117 start(definition, appContext);
118 this.callback = callback;
119
120 final FieldFactory formField = fieldFactoryFactory.createFieldFactory(definition.getField(), new NullItem());
121 formField.setComponentProvider(componentProvider);
122 this.field = (Field<Object>) formField.createField();
123 field.addValueChangeListener((ValueChangeListener) event -> chosenItemId = event.getProperty().getValue());
124 getView().setCaption(definition.getLabel());
125 getView().setContent(() -> field);
126
127 if (StringUtils.isNotBlank(selectedItemId)) {
128 Object itemId = contentConnector.getItemIdByUrlFragment(selectedItemId);
129 if (itemId != null) {
130 field.setValue(itemId);
131 }
132 }
133
134 final OverlayCloser closer = appContext.openOverlay(getView(), getView().getModalityLevel());
135 getView().setCaption(definition.getLabel());
136 getView().addDialogCloseHandler(dialogView -> closer.close());
137 getView().setClosable(true);
138
139 return getView();
140 }
141
142 @Override
143 public ChooseDialogView getView() {
144 return (ChooseDialogView) super.getView();
145 }
146
147 @Override
148 public Object[] getActionParameters(String actionName) {
149 Set<Object> selected = new HashSet<>();
150 if (chosenItemId == null) {
151 chosenItemId = contentConnector.getDefaultItemId();
152 }
153 selected.add(chosenItemId);
154 Item item = contentConnector.getItem(chosenItemId);
155 return new Object[] { actionName, item, ChooseDialogPresenterImpl.this, field, getView(), callback, selected };
156 }
157
158 @Override
159 protected DialogActionExecutor getExecutor() {
160 return (DialogActionExecutor) super.getExecutor();
161 }
162
163 @Override
164 protected void onCancel () {
165 if (callback != null) {
166 callback.onCancel();
167 }
168 }
169 }