ImageRequesterAbstract.java 4.58 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.scene7.is.provider.ResponseData
 *  com.scene7.is.sleng.CacheEnum
 *  com.scene7.is.sleng.FXGServer
 *  com.scene7.is.sleng.ImageAccess
 *  com.scene7.is.sleng.ImageAccessException
 *  com.scene7.is.sleng.ImageServer
 *  com.scene7.is.sleng.VersionKeyBuilder
 *  com.scene7.is.util.Digest
 *  com.scene7.is.util.DigestOutputStream
 *  com.scene7.is.util.MimeTypeEnum
 *  com.scene7.is.util.diskcache.CacheKey
 *  com.scene7.is.util.diskcache.DigestKey
 *  org.apache.commons.io.IOUtils
 *  org.jetbrains.annotations.NotNull
 *  org.jetbrains.annotations.Nullable
 */
package com.scene7.is.ps.provider.util;

import com.scene7.is.provider.ResponseData;
import com.scene7.is.ps.provider.SlengCompiler;
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.ImageAccess;
import com.scene7.is.sleng.ImageAccessException;
import com.scene7.is.sleng.ImageServer;
import com.scene7.is.sleng.VersionKeyBuilder;
import com.scene7.is.util.Digest;
import com.scene7.is.util.DigestOutputStream;
import com.scene7.is.util.MimeTypeEnum;
import com.scene7.is.util.diskcache.CacheKey;
import com.scene7.is.util.diskcache.DigestKey;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.security.MessageDigest;
import org.apache.commons.io.IOUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public abstract class ImageRequesterAbstract
implements Requester {
    @NotNull
    private final byte[] code;
    @NotNull
    private final MimeTypeEnum mimeType;
    private final SlengCompiler compiler;
    private final boolean optimize;
    private byte[] optimizedCode;
    @NotNull
    private final FXGServer fxgServer;
    @NotNull
    private final ImageServer imageServer;

    protected ImageRequesterAbstract(@NotNull byte[] code, @NotNull MimeTypeEnum mimeType, @Nullable SlengCompiler compiler, boolean optimize, @NotNull ImageServer imageServer, @NotNull FXGServer fxgServer) {
        this.code = code;
        this.mimeType = mimeType;
        this.compiler = compiler;
        this.optimize = optimize;
        this.imageServer = imageServer;
        this.fxgServer = fxgServer;
    }

    @NotNull
    @Override
    public ResponseData createResponseData(@NotNull byte[] data) {
        return ResponseData.createResponseData((byte[])data, (MimeTypeEnum)this.mimeType);
    }

    @NotNull
    @Override
    public CacheKey getCacheKey() {
        MessageDigest digest = Digest.createMessageDigest();
        DataOutputStream out = new DataOutputStream((OutputStream)DigestOutputStream.digestOutputStream((MessageDigest)digest));
        try {
            out.write(this.code);
            out.writeBoolean(this.optimize);
            this.updateDigest(out);
        }
        catch (IOException e) {
            throw new AssertionError(e);
        }
        finally {
            IOUtils.closeQuietly((OutputStream)out);
        }
        return DigestKey.createDigestKey((MessageDigest)digest);
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    @NotNull
    @Override
    public byte[] getPixels(CacheEnum cacheSetting) throws ImageAccessException {
        byte[] optimizedCode = this.getOptimizedCode(this.fxgServer);
        ImageAccess imageAccess = this.imageServer.getImageAccess(this.fxgServer, cacheSetting, optimizedCode);
        try {
            byte[] arrby = this.getPixels(imageAccess);
            return arrby;
        }
        finally {
            imageAccess.dispose();
            imageAccess.okToChangeConnection();
        }
    }

    @NotNull
    @Override
    public byte[] getVersionKey(CacheEnum cacheSetting) throws ImageAccessException {
        byte[] optimizedCode = this.getOptimizedCode(this.fxgServer);
        return VersionKeyBuilder.buildVersionKey((ImageServer)this.imageServer, (FXGServer)this.fxgServer, (byte[])optimizedCode).getBytes();
    }

    protected abstract byte[] getPixels(@NotNull ImageAccess var1) throws ImageAccessException;

    protected abstract void updateDigest(@NotNull DataOutputStream var1) throws IOException;

    @NotNull
    private byte[] getOptimizedCode(@NotNull FXGServer fxgServer) {
        if (this.optimize) {
            if (this.optimizedCode == null) {
                assert (this.compiler != null);
                this.optimizedCode = this.compiler.optimizeSleng(fxgServer, this.code);
            }
            return this.optimizedCode;
        }
        return this.code;
    }
}