MediaSetRequestHandler.java
6.13 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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* com.scene7.is.provider.CacheSpec
* com.scene7.is.provider.FmtSpec
* com.scene7.is.provider.FmtSpec$Builder
* com.scene7.is.provider.ProcessingStatus
* com.scene7.is.provider.RequestContext
* com.scene7.is.provider.RequestTypeEnum
* com.scene7.is.provider.RequestTypeSpec
* com.scene7.is.provider.Response
* com.scene7.is.provider.TextResponseTypeEnum
* com.scene7.is.sleng.CacheEnum
* com.scene7.is.sleng.FXGServer
* com.scene7.is.sleng.ImageEncodingEnum
* com.scene7.is.sleng.ImageServer
* com.scene7.is.sleng.ResponseFormatEnum
* com.scene7.is.util.error.ApplicationException
* org.jetbrains.annotations.NotNull
*/
package com.scene7.is.ps.provider;
import com.scene7.is.provider.CacheSpec;
import com.scene7.is.provider.FmtSpec;
import com.scene7.is.provider.ProcessingStatus;
import com.scene7.is.provider.RequestContext;
import com.scene7.is.provider.RequestTypeEnum;
import com.scene7.is.provider.RequestTypeSpec;
import com.scene7.is.provider.Response;
import com.scene7.is.provider.TextResponseTypeEnum;
import com.scene7.is.ps.provider.ModifierSet;
import com.scene7.is.ps.provider.Request;
import com.scene7.is.ps.provider.RequestBuilder;
import com.scene7.is.ps.provider.RequestHandler;
import com.scene7.is.ps.provider.ResourceAccessor;
import com.scene7.is.ps.provider.Util;
import com.scene7.is.ps.provider.defs.ModifierEnum;
import com.scene7.is.ps.provider.fvctx.FvctxCachingPolicy;
import com.scene7.is.ps.provider.fvctx.FvctxFilter;
import com.scene7.is.ps.provider.fvctx.FvctxFilterMissingImageChecker;
import com.scene7.is.ps.provider.fvctx.FvctxRequestBuilder;
import com.scene7.is.ps.provider.fvctx.FvctxRequestBuilderImpl;
import com.scene7.is.ps.provider.fvctx.MediaSetRequest;
import com.scene7.is.ps.provider.fvctx.MediaSetRequester;
import com.scene7.is.ps.provider.util.CacheAgent;
import com.scene7.is.ps.provider.util.CachingPolicy;
import com.scene7.is.ps.provider.util.Requester;
import com.scene7.is.sleng.CacheEnum;
import com.scene7.is.sleng.FXGServer;
import com.scene7.is.sleng.ImageEncodingEnum;
import com.scene7.is.sleng.ImageServer;
import com.scene7.is.sleng.ResponseFormatEnum;
import com.scene7.is.util.error.ApplicationException;
import org.jetbrains.annotations.NotNull;
public abstract class MediaSetRequestHandler
implements RequestHandler {
private static final int MAX_FRAMES_PER_FRAMESET = Integer.MAX_VALUE;
@NotNull
private final RequestBuilder requestBuilder;
@NotNull
private final CacheAgent cacheAgent;
private boolean useCatalogRecordValidation;
private final boolean useCache;
private int nestingLimit;
private int brochureLimit;
@NotNull
private final ImageServer imageServer;
@NotNull
private final FXGServer fxgServer;
@NotNull
private final ResourceAccessor resourceAccessor;
MediaSetRequestHandler(@NotNull ImageServer server, @NotNull FXGServer fxgServer, @NotNull RequestBuilder requestBuilder, boolean useCatalogRecordValidation, boolean useCache, int nestingLimit, int brochureLimit, @NotNull CacheAgent cacheAgent, @NotNull ResourceAccessor resourceAccessor) {
this.requestBuilder = requestBuilder;
this.cacheAgent = cacheAgent;
this.useCatalogRecordValidation = useCatalogRecordValidation;
this.useCache = useCache;
this.nestingLimit = nestingLimit;
this.brochureLimit = brochureLimit;
this.imageServer = server;
this.fxgServer = fxgServer;
this.resourceAccessor = resourceAccessor;
}
@NotNull
@Override
public Response getResponse(@NotNull Request request, @NotNull ProcessingStatus status) throws ApplicationException {
RequestContext context = this.getRequestContext();
FvctxRequestBuilderImpl fvctxRequestBuilder = new FvctxRequestBuilderImpl(this.requestBuilder, context, request);
MediaSetRequest mediaSetReq = MediaSetRequest.createMediaSetRequest(request, fvctxRequestBuilder, this.resourceAccessor);
CachingPolicy cachingPolicy = FvctxCachingPolicy.createFvctxCachingPolicy(this.useCache, this.useCatalogRecordValidation, mediaSetReq.getRequest());
CacheSpec cacheSpec = request.getGlobalAttributes().get(ModifierEnum.CACHE, CacheSpec.ON);
FvctxFilterMissingImageChecker missingImageChecker = new FvctxFilterMissingImageChecker(context);
TextResponseTypeEnum responseType = request.getResponseType();
ModifierSet attr = request.getGlobalAttributes();
RequestTypeSpec requestType = attr.getOrDie(ModifierEnum.REQ);
FmtSpec defaultFormat = FmtSpec.fmtSpecBuilder().encoding(ImageEncodingEnum.NONE).format(ResponseFormatEnum.F4M).getProduct();
FmtSpec format = attr.get(ModifierEnum.FMT, defaultFormat);
if (requestType.type == RequestTypeEnum.MBR_SET) {
responseType = format.format == ResponseFormatEnum.M3U8 ? TextResponseTypeEnum.TEXT : TextResponseTypeEnum.XML;
} else {
assert (requestType.type == RequestTypeEnum.MEDIA_SET);
if (request.getResponseType() != TextResponseTypeEnum.JSON) {
responseType = TextResponseTypeEnum.XML;
}
}
MediaSetRequester requester = new MediaSetRequester(fvctxRequestBuilder, context, mediaSetReq, missingImageChecker, Integer.MAX_VALUE, this.nestingLimit, this.brochureLimit, this.imageServer, this.fxgServer, responseType);
Response response = this.cacheAgent.getResponse(request.getRootId(), requester, cachingPolicy);
return response.setClientCacheUse(cacheSpec.getClient()).setRequestType(request.getType()).setExpiration(Util.computeNonImgExpiration(request)).setMissingImageHasCatalogEntry(missingImageChecker.isMissingImageHasCatalogEntry());
}
public void setUseCatalogRecordValidation(boolean v) {
this.useCatalogRecordValidation = v;
}
public boolean getUseCatalogRecordValidation() {
return this.useCatalogRecordValidation;
}
public void setNestingLimit(int v) {
this.nestingLimit = v;
}
public int getNestingLimit() {
return this.nestingLimit;
}
protected abstract RequestContext getRequestContext();
}