MobilePlatformProviderOutputServlet.java
5.23 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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* javax.servlet.Servlet
* javax.servlet.ServletException
* org.apache.felix.scr.annotations.Component
* org.apache.felix.scr.annotations.Properties
* org.apache.felix.scr.annotations.Property
* org.apache.felix.scr.annotations.Reference
* org.apache.felix.scr.annotations.ReferenceCardinality
* org.apache.felix.scr.annotations.ReferencePolicy
* org.apache.felix.scr.annotations.References
* org.apache.felix.scr.annotations.Service
* org.apache.sling.api.SlingHttpServletRequest
* org.apache.sling.api.SlingHttpServletResponse
* org.apache.sling.api.request.RequestParameter
* org.apache.sling.api.resource.Resource
* 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.cq.mobile.platform.impl.store.MobilePlatformProvider;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.felix.scr.annotations.References;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.request.RequestParameter;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
@Component(immediate=1, metatype=1, label="Invokes the MobilePlatformProviderOutputServlet to generate the assets required by the provider")
@Service(value={Servlet.class})
@Properties(value={@Property(name="sling.servlet.resourceTypes", value={"sling/servlet/default"}), @Property(name="sling.servlet.methods", value={"GET"}), @Property(name="sling.servlet.selectors", value={"mobileapps.provider"}), @Property(name="sling.servlet.extensions", value={"zip"})})
@References(value={@Reference(name="mobilePlatformProvider", referenceInterface=MobilePlatformProvider.class, cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE, policy=ReferencePolicy.DYNAMIC)})
public class MobilePlatformProviderOutputServlet
extends SlingAllMethodsServlet {
private final Map<String, MobilePlatformProvider> providers = new HashMap<String, MobilePlatformProvider>();
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
RequestParameter store = request.getRequestParameter("store");
String platformId = store == null ? "default" : store.getString();
Resource resource = request.getResource();
MobileResource mobileResource = (MobileResource)resource.adaptTo(MobileResource.class);
if (mobileResource != null && !mobileResource.isA(MobileResourceType.INSTANCE.getType())) {
throw new IllegalArgumentException("Resource must be a Mobile Resource of type " + MobileResourceType.INSTANCE.getType());
}
MobilePlatformProvider provider = this.getMobilePlatformProvider(platformId);
if (provider == null) {
throw new IllegalArgumentException("Unable to locate content provider");
}
provider.generate(mobileResource, platformId, response);
}
/*
* WARNING - Removed try catching itself - possible behaviour change.
*/
protected void bindMobilePlatformProvider(MobilePlatformProvider provider, Map<String, Object> properties) {
String storeName = (String)properties.get("cq.mobile.apps.platformprovider");
if (storeName != null && provider != null) {
Map<String, MobilePlatformProvider> map = this.providers;
synchronized (map) {
this.providers.put(storeName, provider);
}
}
}
/*
* WARNING - Removed try catching itself - possible behaviour change.
*/
protected void unbindMobilePlatformProvider(MobilePlatformProvider provider, Map<String, Object> properties) {
String operationName = (String)properties.get("cq.mobile.apps.platformprovider");
if (operationName != null) {
Map<String, MobilePlatformProvider> map = this.providers;
synchronized (map) {
this.providers.remove(operationName);
}
}
}
/*
* WARNING - Removed try catching itself - possible behaviour change.
*/
private MobilePlatformProvider getMobilePlatformProvider(String storeId) {
if (storeId == null) {
return this.providers.get("default");
}
Map<String, MobilePlatformProvider> map = this.providers;
synchronized (map) {
MobilePlatformProvider mobilePlatformProvider = this.providers.get(storeId);
if (mobilePlatformProvider == null) {
mobilePlatformProvider = this.providers.get("default");
}
return mobilePlatformProvider;
}
}
}