MediaSetRequestHandler.java 6.13 KB
/*
 * 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();
}