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