FvctxImagePropsBuilderImpl.java 7.82 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.scene7.is.provider.ImageSet
 *  com.scene7.is.provider.ModifierList
 *  com.scene7.is.provider.UserData
 *  com.scene7.is.provider.ZoomTargets
 *  com.scene7.is.provider.catalog.ObjectRecord
 *  com.scene7.is.sleng.CacheEnum
 *  com.scene7.is.sleng.Engine
 *  com.scene7.is.sleng.FXGServer
 *  com.scene7.is.sleng.HotSpot
 *  com.scene7.is.sleng.ImageAccessException
 *  com.scene7.is.sleng.ImageServer
 *  com.scene7.is.sleng.LayerFactory
 *  com.scene7.is.sleng.LayerFactoryTypeEnum
 *  com.scene7.is.sleng.Sleng
 *  com.scene7.is.sleng.SlengCodeInterpreter
 *  com.scene7.is.sleng.SlengNeedImageServerAccess
 *  com.scene7.is.sleng.VersionKeyBuilder
 *  com.scene7.is.util.SizeInt
 *  com.scene7.is.util.collections.CollectionUtil
 *  com.scene7.is.util.serializers.LongSerializer
 *  com.scene7.is.util.serializers.Serializer
 *  com.scene7.is.util.serializers.SerializerUtil
 *  com.scene7.is.util.text.ParameterException
 *  org.jetbrains.annotations.NotNull
 *  org.jetbrains.annotations.Nullable
 */
package com.scene7.is.ps.provider.fvctx;

import com.scene7.is.provider.ImageSet;
import com.scene7.is.provider.ModifierList;
import com.scene7.is.provider.UserData;
import com.scene7.is.provider.ZoomTargets;
import com.scene7.is.provider.catalog.ObjectRecord;
import com.scene7.is.ps.provider.IZoomException;
import com.scene7.is.ps.provider.ModifierSet;
import com.scene7.is.ps.provider.Request;
import com.scene7.is.ps.provider.SlengCompiler;
import com.scene7.is.ps.provider.Util;
import com.scene7.is.ps.provider.defs.ModifierEnum;
import com.scene7.is.ps.provider.fvctx.FvctxImageProps;
import com.scene7.is.ps.provider.fvctx.FvctxImagePropsBuilder;
import com.scene7.is.sleng.CacheEnum;
import com.scene7.is.sleng.Engine;
import com.scene7.is.sleng.FXGServer;
import com.scene7.is.sleng.HotSpot;
import com.scene7.is.sleng.ImageAccessException;
import com.scene7.is.sleng.ImageServer;
import com.scene7.is.sleng.LayerFactory;
import com.scene7.is.sleng.LayerFactoryTypeEnum;
import com.scene7.is.sleng.Sleng;
import com.scene7.is.sleng.SlengCodeInterpreter;
import com.scene7.is.sleng.SlengNeedImageServerAccess;
import com.scene7.is.sleng.VersionKeyBuilder;
import com.scene7.is.util.SizeInt;
import com.scene7.is.util.collections.CollectionUtil;
import com.scene7.is.util.serializers.LongSerializer;
import com.scene7.is.util.serializers.Serializer;
import com.scene7.is.util.serializers.SerializerUtil;
import com.scene7.is.util.text.ParameterException;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class FvctxImagePropsBuilderImpl
implements FvctxImagePropsBuilder {
    @NotNull
    private final ImageServer server;
    @NotNull
    private final FXGServer fxgServer;

    public FvctxImagePropsBuilderImpl(@NotNull ImageServer server, @NotNull FXGServer fxgServer) {
        this.server = server;
        this.fxgServer = fxgServer;
    }

    @NotNull
    @Override
    public FvctxImageProps buildImageProps(@NotNull Request request, boolean doPostProcess) throws ParameterException, IZoomException, ImageAccessException {
        SlengCompiler slengCompiler = new SlengCompiler(this.server, doPostProcess, false, true);
        return this.buildImageProps(request, slengCompiler, false, null);
    }

    @NotNull
    @Override
    public FvctxImageProps buildDefaultImageProps(@NotNull Request request, boolean doPostProcess, @NotNull Throwable e) throws ParameterException, IZoomException, ImageAccessException {
        SlengCompiler slengCompiler = new SlengCompiler(this.server, doPostProcess, false, true);
        return this.buildImageProps(request, slengCompiler, true, e);
    }

    @NotNull
    @Override
    public FvctxImageProps buildSwatchProps(@NotNull Request request, boolean doPostProcess) throws ParameterException, IZoomException {
        boolean optimize = Util.doOptimize(request);
        SlengCompiler slengCompiler = new SlengCompiler(this.server, doPostProcess, false, true);
        byte[] sleng = slengCompiler.compileRequest(request);
        byte[] versionKey = FvctxImagePropsBuilderImpl.computeCatalogVersionKey(request);
        SizeInt size = SizeInt.zeroSizeInt();
        List hotspots = CollectionUtil.list();
        String recordId = request.getRecord().getName();
        String modifier = request.getRecord().getModifier().toString();
        String postModifier = request.getRecord().getPostModifier().toString();
        return new FvctxImageProps(optimize, sleng, versionKey, recordId, size, request.getUserData(), request.getImageSet(), request.getTargets(), hotspots, modifier, postModifier, false, null);
    }

    @NotNull
    private FvctxImageProps buildImageProps(@NotNull Request request, @NotNull SlengCompiler slengCompiler, boolean defaultImage, @Nullable Throwable e) throws ParameterException, IZoomException, ImageAccessException {
        boolean optimize = Util.doOptimize(request);
        byte[] sleng = slengCompiler.compileRequest(request);
        byte[] versionKey = this.computeVersionKey(request, sleng);
        SizeInt size = this.getImageRect(sleng);
        List<HotSpot> hotspots = this.getHotSpots(sleng);
        String recordId = request.getRecord().getName();
        String modifier = request.getRecord().getModifier().toString();
        String postModifier = request.getRecord().getPostModifier().toString();
        return new FvctxImageProps(optimize, sleng, versionKey, recordId, size, request.getUserData(), request.getImageSet(), request.getTargets(), hotspots, modifier, postModifier, defaultImage, e);
    }

    @NotNull
    private List<HotSpot> getHotSpots(@NotNull byte[] sleng) throws ImageAccessException {
        boolean needIsAccess = SlengNeedImageServerAccess.needImageServerAccess((byte[])sleng);
        Engine engine = new Engine(this.server.getLayerFactory(LayerFactoryTypeEnum.HOTSPOTS, needIsAccess), this.fxgServer, CacheEnum.ON);
        SlengCodeInterpreter interpreter = new SlengCodeInterpreter((Sleng)engine);
        try {
            interpreter.run((InputStream)new ByteArrayInputStream(sleng));
            List list = engine.getHotSpots();
            return list;
        }
        catch (IOException e) {
            throw new AssertionError(e);
        }
        finally {
            engine.dispose();
        }
    }

    @NotNull
    private SizeInt getImageRect(@NotNull byte[] sleng) throws ImageAccessException {
        boolean needIsAccess = SlengNeedImageServerAccess.needImageServerAccess((byte[])sleng);
        Engine engine = new Engine(this.server.getLayerFactory(LayerFactoryTypeEnum.RECT, needIsAccess), this.fxgServer, CacheEnum.ON);
        SlengCodeInterpreter interpreter = new SlengCodeInterpreter((Sleng)engine);
        try {
            interpreter.run((InputStream)new ByteArrayInputStream(sleng));
            SizeInt sizeInt = engine.getSize();
            return sizeInt;
        }
        catch (IOException e) {
            throw new AssertionError(e);
        }
        finally {
            engine.dispose();
        }
    }

    @NotNull
    private byte[] computeVersionKey(@NotNull Request request, @NotNull byte[] sleng) throws ImageAccessException {
        boolean useCatalogVersion = request.getGlobalAttributes().getOrDie(ModifierEnum.I_CACHE_VALIDATION_POLICY);
        if (useCatalogVersion) {
            return FvctxImagePropsBuilderImpl.computeCatalogVersionKey(request);
        }
        return VersionKeyBuilder.buildVersionKey((ImageServer)this.server, (FXGServer)this.fxgServer, (byte[])sleng).getBytes();
    }

    private static byte[] computeCatalogVersionKey(Request request) {
        long timeStamp = Util.computeCatalogTimeStamp(request);
        return SerializerUtil.store((Serializer)LongSerializer.longSerializer(), (Object)timeStamp);
    }
}