MobilePlatformProviderServlet.java
4.47 KB
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* com.adobe.granite.ui.components.Config
* com.adobe.granite.ui.components.ds.AbstractDataSource
* com.adobe.granite.ui.components.ds.DataSource
* com.adobe.granite.ui.components.ds.EmptyDataSource
* com.adobe.granite.ui.components.ds.ValueMapResource
* javax.servlet.ServletException
* org.apache.commons.lang3.ArrayUtils
* org.apache.felix.scr.annotations.sling.SlingServlet
* org.apache.sling.api.SlingHttpServletRequest
* org.apache.sling.api.SlingHttpServletResponse
* org.apache.sling.api.request.RequestPathInfo
* org.apache.sling.api.resource.Resource
* org.apache.sling.api.resource.ResourceMetadata
* org.apache.sling.api.resource.ResourceResolver
* org.apache.sling.api.resource.ValueMap
* org.apache.sling.api.servlets.SlingAllMethodsServlet
*/
package com.adobe.cq.mobile.platform.impl.servlets;
import com.adobe.cq.mobile.platform.MobileResource;
import com.adobe.cq.mobile.platform.MobileResourceType;
import com.adobe.granite.ui.components.Config;
import com.adobe.granite.ui.components.ds.AbstractDataSource;
import com.adobe.granite.ui.components.ds.DataSource;
import com.adobe.granite.ui.components.ds.EmptyDataSource;
import com.adobe.granite.ui.components.ds.ValueMapResource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.request.RequestPathInfo;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
@SlingServlet(methods={"GET"}, resourceTypes={"mobileapps/gui/components/datasources/platformprovider"})
public class MobilePlatformProviderServlet
extends SlingAllMethodsServlet {
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
Object ds;
String suffix = request.getRequestPathInfo().getSuffix();
Resource appInstance = request.getResourceResolver().getResource(suffix);
Resource dataSourceResource = request.getResource().getChild(Config.DATASOURCE);
Config dsCfg = new Config(dataSourceResource);
final ArrayList<Object> platformList = new ArrayList<Object>();
MobileResource mobileResource = (MobileResource)appInstance.adaptTo(MobileResource.class);
if (!mobileResource.isA(MobileResourceType.INSTANCE.getType())) {
ds = EmptyDataSource.instance();
} else {
ValueMap properties = mobileResource.getProperties();
Object[] platforms = (String[])properties.get("widget/platforms", String[].class);
if (ArrayUtils.isNotEmpty((Object[])platforms)) {
HashMap<String, Resource> resourceToIdMap = new HashMap<String, Resource>();
Iterable children = dataSourceResource.getChildren();
for (Resource platform : children) {
ValueMap map = platform.getValueMap();
String id = (String)map.get("id", String.class);
resourceToIdMap.put(id, platform);
}
for (Object sPlatform : platforms) {
if (resourceToIdMap.containsKey(sPlatform)) {
platformList.add(resourceToIdMap.get(sPlatform));
continue;
}
Resource defaultResource = dsCfg.getChild("default");
ValueMap map = defaultResource.getValueMap();
map.put((Object)"id", sPlatform);
ValueMapResource syntheticResource = new ValueMapResource(request.getResourceResolver(), defaultResource.getResourceMetadata(), defaultResource.getResourceType(), map);
platformList.add((Object)syntheticResource);
}
}
ds = new AbstractDataSource(){
public Iterator<Resource> iterator() {
return platformList.iterator();
}
};
}
request.setAttribute(DataSource.class.getName(), ds);
}
}