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.form.field.definition.migration;
35
36 import info.magnolia.ui.contentapp.browser.BrowserSubAppDescriptor;
37 import info.magnolia.ui.contentapp.configuration.ContentViewDefinition;
38 import info.magnolia.ui.contentapp.configuration.TreeViewDefinition;
39 import info.magnolia.ui.contentapp.configuration.WorkbenchDefinition;
40 import info.magnolia.ui.contentapp.configuration.column.ColumnDefinition;
41 import info.magnolia.ui.contentapp.configuration.column.ConfiguredColumnDefinition;
42 import info.magnolia.ui.datasource.jcr.JcrDatasourceDefinition;
43 import info.magnolia.ui.chooser.definition.AppAwareWorkbenchChooserDefinition;
44 import info.magnolia.ui.datasource.DatasourceDefinition;
45 import info.magnolia.ui.vaadin.integration.contentconnector.ConfiguredJcrContentConnectorDefinition;
46 import info.magnolia.ui.vaadin.integration.contentconnector.NodeTypeDefinition;
47 import info.magnolia.ui.workbench.tree.TreePresenterDefinition;
48
49 import java.util.ArrayList;
50 import java.util.Collections;
51 import java.util.List;
52 import java.util.Optional;
53 import java.util.stream.Collectors;
54
55 import org.apache.commons.lang3.StringUtils;
56
57
58
59
60
61
62
63 public class CompatibilityAppAwareWorkbenchChooserDefinition<T> extends AppAwareWorkbenchChooserDefinition<T> {
64
65 @Override
66 public DatasourceDefinition getDatasource() {
67 try {
68 return super.getDatasource();
69 } catch (IllegalStateException e) {
70
71 return resolveDatasourceFromAppName();
72 }
73 }
74
75 @Override
76 public WorkbenchDefinition<T> getWorkbench() {
77 try {
78 return super.getWorkbench();
79 } catch (IllegalStateException e) {
80
81 return resolveWorkbenchDefinitionFromAppName();
82 }
83 }
84
85 private WorkbenchDefinition<T> resolveWorkbenchDefinitionFromAppName() {
86 Optional<List<ColumnDefinition<T>>> columns = resolveBrowserDescriptorFromAppName()
87 .map(BrowserSubAppDescriptor::getWorkbench)
88 .map(workbench -> workbench.getContentViews()
89 .stream()
90 .filter(TreePresenterDefinition.class::isInstance)
91 .map(TreePresenterDefinition.class::cast)
92 .findFirst())
93 .map(treePresenterDefinition -> treePresenterDefinition
94 .map(TreePresenterDefinition::getColumns)
95 .get().stream()
96 .filter(info.magnolia.ui.workbench.column.definition.ColumnDefinition::isDisplayInChooseDialog)
97 .filter(columnDefinition -> !"path".equals(columnDefinition.getName()))
98 .map(oldColumnDefinition -> {
99 ConfiguredColumnDefinition<T> column = new ConfiguredColumnDefinition<>();
100 column.setName(oldColumnDefinition.getPropertyName());
101 column.setLabel(StringUtils.defaultString(oldColumnDefinition.getLabel(), oldColumnDefinition.getName()));
102 return column;
103 })
104 .collect(Collectors.toList()));
105
106 TreeViewDefinition<T> treeDefinition = new TreeViewDefinition<>();
107 treeDefinition.setColumns(columns.orElse(Collections.emptyList()));
108
109 List<ContentViewDefinition<T>> contentViews = new ArrayList<>();
110 contentViews.add(treeDefinition);
111
112 WorkbenchDefinition<T> definition = new WorkbenchDefinition<>();
113 definition.setContentViews(contentViews);
114 return definition;
115 }
116
117 private JcrDatasourceDefinition resolveDatasourceFromAppName() {
118 return resolveBrowserDescriptorFromAppName()
119 .map(BrowserSubAppDescriptor::getContentConnector)
120 .filter(ConfiguredJcrContentConnectorDefinition.class::isInstance)
121 .map(ConfiguredJcrContentConnectorDefinition.class::cast)
122 .map(contentConnectorDefinition -> {
123 JcrDatasourceDefinition jcrDatasourceDefinition = new JcrDatasourceDefinition();
124 jcrDatasourceDefinition.setWorkspace(contentConnectorDefinition.getWorkspace());
125 jcrDatasourceDefinition.setRootPath(contentConnectorDefinition.getRootPath());
126 jcrDatasourceDefinition.setAllowedNodeTypes(contentConnectorDefinition.getNodeTypes().stream()
127 .map(NodeTypeDefinition::getName)
128 .collect(Collectors.toSet()));
129 jcrDatasourceDefinition.setIncludeProperties(contentConnectorDefinition.isIncludeProperties());
130 return jcrDatasourceDefinition;
131 })
132 .orElse(null);
133 }
134
135 private Optional<BrowserSubAppDescriptor> resolveBrowserDescriptorFromAppName() {
136 return Optional.ofNullable(getAppName())
137 .map(getAppDescriptorRegistry()::getProvider)
138 .map(provider -> provider.get().getSubApps().values()
139 .stream()
140 .filter(BrowserSubAppDescriptor .class::isInstance)
141 .map(BrowserSubAppDescriptor .class::cast)
142 .findFirst()
143 .orElseThrow(() -> new IllegalStateException("Could not resolve browser descriptor from app " + getAppName())));
144 }
145 }