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.contentapp.browser;
35
36 import info.magnolia.ui.contentapp.configuration.ContentViewDefinition;
37 import info.magnolia.ui.contentapp.configuration.ContentViewsDefinition;
38 import info.magnolia.ui.contentapp.configuration.WorkbenchDefinition;
39 import info.magnolia.ui.framework.UiFrameworkView;
40 import info.magnolia.ui.framework.ViewDefinition;
41 import info.magnolia.ui.framework.ContextProperty;
42 import info.magnolia.ui.framework.ViewContext;
43
44 import java.util.function.Consumer;
45
46 import javax.inject.Inject;
47
48 import com.vaadin.shared.ui.MarginInfo;
49 import com.vaadin.ui.HorizontalLayout;
50 import com.vaadin.ui.Label;
51 import com.vaadin.ui.VerticalLayout;
52
53
54
55
56
57 public class Workbench<T> extends VerticalLayout implements UiFrameworkView {
58
59 private final WorkbenchContext workbenchContext;
60 private final Label title;
61
62 @Inject
63 public Workbench(WorkbenchDefinition<T> definition) {
64
65 this.workbenchContext = bindContext(WorkbenchContext.class);
66
67 final String defaultDisplayedContentView = definition.getContentViews()
68 .stream()
69 .filter(ContentViewDefinition::isActive)
70 .map(ContentViewDefinition::getName)
71 .findFirst()
72
73 .orElse(definition.getContentViews().iterator().next().getName());
74
75 this.workbenchContext
76 .displayedContentViewId()
77 .set(defaultDisplayedContentView);
78
79 final ContentViews<T> contentViews = getContentViews(definition);
80
81 HorizontalLayout contentViewLayout = new HorizontalLayout();
82 contentViewLayout.setSizeFull();
83 title = new Label();
84 title.setStyleName("heading-1");
85 contentViewLayout.addComponent(title);
86 contentViewLayout.setExpandRatio(title, 1f);
87 contentViewLayout.addComponent(contentViews);
88 contentViewLayout.setExpandRatio(contentViews, 0f);
89
90 setSizeFull();
91 addStyleName("workbench");
92 setMargin(false);
93 addComponent(contentViews);
94 }
95
96 protected ContentViews<T> getContentViews(WorkbenchDefinition<T> definition) {
97 return getViewProvider()
98 .create(ContentViewsDefinition.of(definition.getContentViews()));
99 }
100
101 public void setTitle(String title) {
102 this.title.setValue(title);
103 }
104
105 public void onContentViewTypeChange(Consumer<String> handler) {
106 workbenchContext
107 .displayedContentViewId()
108 .observeNullable(handler::accept);
109 }
110
111
112
113
114 public interface WorkbenchContext extends ViewContext {
115 ContextProperty<String> displayedContentViewId();
116 }
117 }