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.dam.app.data;
35
36 import info.magnolia.dam.api.AssetProvider;
37 import info.magnolia.dam.api.AssetProviderRegistry;
38 import info.magnolia.dam.api.AssetQuery;
39 import info.magnolia.dam.api.Item;
40 import info.magnolia.ui.filter.DataFilter;
41
42 import java.util.Iterator;
43 import java.util.Optional;
44 import java.util.Spliterators;
45 import java.util.stream.Stream;
46 import java.util.stream.StreamSupport;
47
48 import com.vaadin.data.provider.Query;
49
50
51
52
53 public interface AssetDataProvider {
54
55 String MIME_TYPE = "mimeType";
56 String PATH = "path";
57 String ASSET_PROVIDER = "assetProvider";
58
59 default Stream<AssetProvider> getProviders(Query<Item, DataFilter> query, AssetProviderRegistry assetProviderRegistry) {
60 return getStream(assetProviderRegistry.getAllProviders())
61 .filter(assetProvider -> getFilter(query, ASSET_PROVIDER).map(o -> o == assetProvider).orElse(true));
62
63 }
64
65 default AssetQuery.Builder getAssetQueryBuilder(Query<Item, DataFilter> query) {
66 final AssetQuery.Builder builder = new AssetQuery.Builder();
67
68 query.getFilter()
69 .map(DataFilter::getPropertyFilters)
70 .ifPresent(stringObjectMap -> stringObjectMap.forEach((propertyName, propertyValue) -> {
71 switch (propertyName) {
72 case MIME_TYPE:
73 builder.withExtension(String.valueOf(propertyValue));
74 break;
75 case ASSET_PROVIDER:
76 case PATH:
77 break;
78 default:
79 if (!"".equals(propertyValue)) {
80 builder.withProperty(propertyName, propertyValue);
81 }
82 }
83 }));
84
85 return builder;
86 }
87
88 default Optional<Object> getFilter(Query<Item, DataFilter> query, String key) {
89 return query.getFilter()
90 .map(DataFilter::getPropertyFilters)
91 .map(stringObjectMap -> stringObjectMap.get(key));
92 }
93
94 default <T> Stream<T> getStream(Iterator<T> iterator) {
95 return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, 0), false);
96 }
97 }