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.annotation.deprecation.MgnlDeprecated;
37
38 import info.magnolia.i18nsystem.SimpleTranslator;
39 import info.magnolia.objectfactory.Components;
40 import info.magnolia.ui.contentapp.browser.BrowserSubAppDescriptor;
41 import info.magnolia.ui.contentapp.configuration.ContentViewDefinition;
42 import info.magnolia.ui.contentapp.configuration.TreeViewDefinition;
43 import info.magnolia.ui.contentapp.configuration.WorkbenchDefinition;
44 import info.magnolia.ui.contentapp.configuration.column.ColumnDefinition;
45 import info.magnolia.ui.contentapp.configuration.column.ConfiguredColumnDefinition;
46 import info.magnolia.ui.contentapp.preview.JcrPreviewDefinition;
47 import info.magnolia.ui.datasource.jcr.JcrDatasourceDefinition;
48 import info.magnolia.ui.chooser.definition.AppAwareWorkbenchChooserDefinition;
49 import info.magnolia.ui.datasource.DatasourceDefinition;
50 import info.magnolia.ui.field.TextFieldDefinition;
51 import info.magnolia.ui.vaadin.integration.contentconnector.ConfiguredJcrContentConnectorDefinition;
52 import info.magnolia.ui.vaadin.integration.contentconnector.NodeTypeDefinition;
53 import info.magnolia.ui.workbench.tree.TreePresenterDefinition;
54
55 import java.util.ArrayList;
56 import java.util.Collections;
57 import java.util.List;
58 import java.util.Optional;
59 import java.util.stream.Collectors;
60
61 import org.apache.commons.lang3.StringUtils;
62
63 import com.machinezoo.noexception.Exceptions;
64
65
66
67
68
69
70
71 @Deprecated
72 @MgnlDeprecated(since = "6.2.3.", description = "Just for compatibility reasons.")
73 public class CompatibilityAppAwareWorkbenchChooserDefinition<T> extends AppAwareWorkbenchChooserDefinition<T> {
74
75 private DatasourceDefinition datasource;
76
77 @Override
78 public DatasourceDefinition getDatasource() {
79 if (datasource == null) {
80 try {
81 datasource = super.getDatasource();
82 } catch (IllegalStateException e) {
83
84 datasource = resolveDatasourceFromAppName();
85 }
86 }
87 return datasource;
88 }
89
90 @Override
91 public WorkbenchDefinition<T> getWorkbench() {
92 try {
93 return super.getWorkbench();
94 } catch (IllegalStateException e) {
95
96 return resolveWorkbenchDefinitionFromAppName();
97 }
98 }
99
100 private WorkbenchDefinition<T> resolveWorkbenchDefinitionFromAppName() {
101 Optional<List<ColumnDefinition<T>>> columns = resolveBrowserDescriptorFromAppName()
102 .map(BrowserSubAppDescriptor::getWorkbench)
103 .map(workbench -> workbench.getContentViews()
104 .stream()
105 .filter(TreePresenterDefinition.class::isInstance)
106 .map(TreePresenterDefinition.class::cast)
107 .findFirst())
108 .map(treePresenterDefinition -> treePresenterDefinition
109 .map(TreePresenterDefinition::getColumns)
110 .get().stream()
111 .filter(info.magnolia.ui.workbench.column.definition.ColumnDefinition::isDisplayInChooseDialog)
112 .filter(columnDefinition -> !"path".equals(columnDefinition.getName()))
113 .map(oldColumnDefinition -> {
114 final ConfiguredColumnDefinition<T> column;
115 if (oldColumnDefinition.getClass().getName().equals("info.magnolia.dam.app.assets.column.AssetNameColumnDefinition")) {
116 column = ((ConfiguredColumnDefinition) Exceptions.wrap().get(() -> Class.forName("info.magnolia.dam.app.contentview.column.JcrAssetNameColumnDefinition").newInstance()));
117 } else {
118 column = new ConfiguredColumnDefinition<>();
119 }
120 column.setName(oldColumnDefinition.getPropertyName());
121 column.setLabel(StringUtils.defaultString(oldColumnDefinition.getLabel(), oldColumnDefinition.getName()));
122 addFiltering(column);
123 return column;
124 })
125 .collect(Collectors.toList()));
126
127 TreeViewDefinition<T> treeDefinition = new TreeViewDefinition<>();
128 treeDefinition.setColumns(columns.orElse(Collections.emptyList()));
129 treeDefinition.setReadOnly(true);
130
131 List<ContentViewDefinition<T>> contentViews = new ArrayList<>();
132 contentViews.add(treeDefinition);
133
134 WorkbenchDefinition<T> definition = new WorkbenchDefinition<>();
135 definition.setContentViews(contentViews);
136 return definition;
137 }
138
139 private void addFiltering(ConfiguredColumnDefinition<T> column) {
140 final TextFieldDefinition textFieldDefinition = new TextFieldDefinition();
141 textFieldDefinition.setPlaceholder(Components.getComponent(SimpleTranslator.class).translate("fields.filterComponent.placeholder"));
142 column.setFilterComponent(textFieldDefinition);
143 }
144
145 private JcrDatasourceDefinition resolveDatasourceFromAppName() {
146 return resolveBrowserDescriptorFromAppName()
147 .map(BrowserSubAppDescriptor::getContentConnector)
148 .filter(ConfiguredJcrContentConnectorDefinition.class::isInstance)
149 .map(ConfiguredJcrContentConnectorDefinition.class::cast)
150 .map(contentConnectorDefinition -> {
151 JcrDatasourceDefinition jcrDatasourceDefinition = new JcrDatasourceDefinition();
152 jcrDatasourceDefinition.setWorkspace(contentConnectorDefinition.getWorkspace());
153 jcrDatasourceDefinition.setRootPath(contentConnectorDefinition.getRootPath());
154 jcrDatasourceDefinition.setAllowedNodeTypes(contentConnectorDefinition.getNodeTypes().stream()
155 .map(NodeTypeDefinition::getName)
156 .collect(Collectors.toSet()));
157 jcrDatasourceDefinition.setIncludeProperties(contentConnectorDefinition.isIncludeProperties());
158 jcrDatasourceDefinition.setPreview(new JcrPreviewDefinition());
159 return jcrDatasourceDefinition;
160 })
161 .orElse(null);
162 }
163
164 private Optional<BrowserSubAppDescriptor> resolveBrowserDescriptorFromAppName() {
165 return Optional.ofNullable(getAppName())
166 .map(getAppDescriptorRegistry()::getProvider)
167 .map(provider -> provider.get().getSubApps().values()
168 .stream()
169 .filter(BrowserSubAppDescriptor .class::isInstance)
170 .map(BrowserSubAppDescriptor .class::cast)
171 .findFirst()
172 .orElseThrow(() -> new IllegalStateException("Could not resolve browser descriptor from app " + getAppName())));
173 }
174 }