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.tools;
35
36 import info.magnolia.ui.api.action.ActionDefinition;
37 import info.magnolia.ui.api.action.ActionExecutionException;
38 import info.magnolia.ui.api.view.View;
39 import info.magnolia.ui.dialog.actionarea.ActionListener;
40 import info.magnolia.ui.dialog.formdialog.FormBuilder;
41 import info.magnolia.ui.form.EditorValidator;
42 import info.magnolia.ui.form.definition.FormDefinition;
43 import info.magnolia.ui.vaadin.form.Form;
44 import info.magnolia.ui.vaadin.form.FormViewReduced;
45
46 import java.util.Map;
47
48 import javax.inject.Inject;
49
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52
53 import com.vaadin.v7.data.Item;
54 import com.vaadin.v7.data.util.PropertysetItem;
55
56
57
58
59
60 public class FormToolPresenter implements ToolPresenter<FormToolDefinition, FormToolView>, ActionListener, EditorValidator {
61
62 private static final Logger log = LoggerFactory.getLogger(FormToolPresenter.class);
63
64 private final FormToolView view;
65 private final FormBuilder formBuilder;
66 private final FormToolActionExecutor actionExecutor;
67 private Item item;
68 private FormViewReduced formView;
69
70 @Inject
71 public FormToolPresenter(FormToolView view, FormBuilder formBuilder, FormToolActionExecutor actionExecutor) {
72 this.view = view;
73 this.formBuilder = formBuilder;
74 this.actionExecutor = actionExecutor;
75 }
76
77 @Override
78 public FormToolView start(FormToolDefinition definition) {
79 item = getItem();
80
81 formView = new Form();
82 FormDefinition form = definition.getForm();
83 if (form != null) {
84 formBuilder.buildReducedForm(form, formView, item, null);
85 view.setForm(formView);
86 } else {
87 view.asVaadinComponent().addStyleName("no-form");
88 }
89
90 actionExecutor.setFormToolDefinition(definition);
91 buildActions(definition);
92
93 return view;
94 }
95
96 protected Item getItem() {
97 return new PropertysetItem();
98 }
99
100 protected View getView() {
101 return view;
102 }
103
104 protected void buildActions(FormToolDefinition definition) {
105 Map<String, ActionDefinition> actions = definition.getActions();
106 if (actions != null && !actions.isEmpty()) {
107 for (final ActionDefinition action : actions.values()) {
108 view.addAction(action.getName(), action.getLabel(), this);
109 }
110 }
111 }
112
113 @Override
114 public void onActionFired(String actionName, Object... actionContextParams) {
115 try {
116 actionExecutor.execute(actionName, view, this, item);
117 } catch (ActionExecutionException e) {
118 log.error("Cannot execute action " + actionName, e);
119 }
120 }
121
122 @Override
123 public void showValidation(boolean visible) {
124 formView.showValidation(visible);
125 }
126
127 @Override
128 public boolean isValid() {
129 return formView.isValid();
130 }
131 }