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.admincentral.shellapp.pulse.task;
35
36 import info.magnolia.i18nsystem.I18nizer;
37 import info.magnolia.task.Task;
38 import info.magnolia.task.definition.TaskDefinition;
39 import info.magnolia.ui.actionbar.ActionbarPresenter;
40 import info.magnolia.ui.admincentral.shellapp.pulse.item.detail.AbstractPulseDetailPresenter;
41 import info.magnolia.ui.admincentral.shellapp.pulse.item.detail.PulseDetailActionExecutor;
42 import info.magnolia.ui.admincentral.shellapp.pulse.item.detail.PulseDetailView;
43 import info.magnolia.ui.admincentral.shellapp.pulse.item.registry.ItemViewDefinitionRegistry;
44 import info.magnolia.ui.api.availability.AvailabilityChecker;
45 import info.magnolia.ui.dialog.formdialog.FormBuilder;
46
47 import java.util.HashMap;
48 import java.util.LinkedList;
49 import java.util.List;
50 import java.util.Map;
51
52 import javax.inject.Inject;
53
54 import com.vaadin.v7.data.util.BeanItem;
55
56
57
58
59
60
61
62 public class DefaultTaskDetailPresenter<D extends TaskDefinition, T extends Task> extends AbstractPulseDetailPresenter<T> implements TaskDetailPresenter {
63
64 private D definition;
65
66 @Inject
67 public DefaultTaskDetailPresenter(PulseDetailView view, D definition, T task, AvailabilityChecker checker, PulseDetailActionExecutor itemActionExecutor,
68 ItemViewDefinitionRegistry itemViewDefinitionRegistry, FormBuilder formbuilder, ActionbarPresenter actionbarPresenter,
69 I18nizer i18nizer) {
70 super(task, view, itemActionExecutor, checker, itemViewDefinitionRegistry, formbuilder, actionbarPresenter, i18nizer);
71 this.definition = definition;
72 }
73
74 public D getDefinition() {
75 return definition;
76 }
77
78 @Override
79 protected String getItemViewName() {
80 return definition.getTaskView();
81 }
82
83 @Override
84 protected void setItemViewTitle(PulseDetailView view) {
85 view.setTitle(getDefinition().getTitle());
86 }
87
88
89
90
91
92
93
94 @Override
95 protected BeanItem<T> asBeanItem() {
96 List<String> properties = new LinkedList<>();
97 Map<String, List<String>> nestedProperties = new HashMap<>();
98
99 for (String fieldName : getFieldProperties()) {
100 String[] simplePropertyNames = fieldName.split("\\.");
101
102 if (simplePropertyNames.length == 2) {
103
104 final String parentPropertyName = simplePropertyNames[0];
105 final String nestedPropertyName = simplePropertyNames[1];
106
107 if (nestedProperties.containsKey(parentPropertyName)) {
108 nestedProperties.get(parentPropertyName).add(nestedPropertyName);
109 }
110
111 else {
112 nestedProperties.put(parentPropertyName, new LinkedList<String>() {{
113 add(nestedPropertyName);
114 }});
115 }
116 }
117 else {
118 properties.add(fieldName);
119 }
120 }
121 return new TaskItem(getItem(), getDefinition(), properties.toArray(new String[properties.size()]), nestedProperties);
122 }
123
124 }