// 
// Decompiled by Procyon v0.6.0
// 

package io.netty.handler.codec.compression;

import io.netty.util.internal.PlatformDependent;
import io.netty.util.internal.SystemPropertyUtil;
import io.netty.util.internal.logging.InternalLoggerFactory;
import io.netty.util.internal.logging.InternalLogger;

public final class ZlibCodecFactory
{
    private static final InternalLogger logger;
    private static final int DEFAULT_JDK_WINDOW_SIZE = 15;
    private static final int DEFAULT_JDK_MEM_LEVEL = 8;
    private static final boolean noJdkZlibDecoder;
    private static final boolean noJdkZlibEncoder;
    private static final boolean JZLIB_AVAILABLE;
    
    public static boolean isSupportingWindowSizeAndMemLevel() {
        return ZlibCodecFactory.JZLIB_AVAILABLE;
    }
    
    public static ZlibEncoder newZlibEncoder(final int compressionLevel) {
        if (ZlibCodecFactory.noJdkZlibEncoder) {
            return new JZlibEncoder(compressionLevel);
        }
        return new JdkZlibEncoder(compressionLevel);
    }
    
    public static ZlibEncoder newZlibEncoder(final ZlibWrapper wrapper) {
        if (ZlibCodecFactory.noJdkZlibEncoder) {
            return new JZlibEncoder(wrapper);
        }
        return new JdkZlibEncoder(wrapper);
    }
    
    public static ZlibEncoder newZlibEncoder(final ZlibWrapper wrapper, final int compressionLevel) {
        if (ZlibCodecFactory.noJdkZlibEncoder) {
            return new JZlibEncoder(wrapper, compressionLevel);
        }
        return new JdkZlibEncoder(wrapper, compressionLevel);
    }
    
    public static ZlibEncoder newZlibEncoder(final ZlibWrapper wrapper, final int compressionLevel, final int windowBits, final int memLevel) {
        if (ZlibCodecFactory.noJdkZlibEncoder || windowBits != 15 || memLevel != 8) {
            return new JZlibEncoder(wrapper, compressionLevel, windowBits, memLevel);
        }
        return new JdkZlibEncoder(wrapper, compressionLevel);
    }
    
    public static ZlibEncoder newZlibEncoder(final byte[] dictionary) {
        if (ZlibCodecFactory.noJdkZlibEncoder) {
            return new JZlibEncoder(dictionary);
        }
        return new JdkZlibEncoder(dictionary);
    }
    
    public static ZlibEncoder newZlibEncoder(final int compressionLevel, final byte[] dictionary) {
        if (ZlibCodecFactory.noJdkZlibEncoder) {
            return new JZlibEncoder(compressionLevel, dictionary);
        }
        return new JdkZlibEncoder(compressionLevel, dictionary);
    }
    
    public static ZlibEncoder newZlibEncoder(final int compressionLevel, final int windowBits, final int memLevel, final byte[] dictionary) {
        if (ZlibCodecFactory.noJdkZlibEncoder || windowBits != 15 || memLevel != 8) {
            return new JZlibEncoder(compressionLevel, windowBits, memLevel, dictionary);
        }
        return new JdkZlibEncoder(compressionLevel, dictionary);
    }
    
    @Deprecated
    public static ZlibDecoder newZlibDecoder() {
        return newZlibDecoder(0);
    }
    
    public static ZlibDecoder newZlibDecoder(final int maxAllocation) {
        if (ZlibCodecFactory.noJdkZlibDecoder) {
            return new JZlibDecoder(maxAllocation);
        }
        return new JdkZlibDecoder(true, maxAllocation);
    }
    
    @Deprecated
    public static ZlibDecoder newZlibDecoder(final ZlibWrapper wrapper) {
        return newZlibDecoder(wrapper, 0);
    }
    
    public static ZlibDecoder newZlibDecoder(final ZlibWrapper wrapper, final int maxAllocation) {
        if (ZlibCodecFactory.noJdkZlibDecoder) {
            return new JZlibDecoder(wrapper, maxAllocation);
        }
        return new JdkZlibDecoder(wrapper, true, maxAllocation);
    }
    
    @Deprecated
    public static ZlibDecoder newZlibDecoder(final byte[] dictionary) {
        return newZlibDecoder(dictionary, 0);
    }
    
    public static ZlibDecoder newZlibDecoder(final byte[] dictionary, final int maxAllocation) {
        if (ZlibCodecFactory.noJdkZlibDecoder) {
            return new JZlibDecoder(dictionary, maxAllocation);
        }
        return new JdkZlibDecoder(dictionary, maxAllocation);
    }
    
    private ZlibCodecFactory() {
    }
    
    static {
        logger = InternalLoggerFactory.getInstance(ZlibCodecFactory.class);
        noJdkZlibDecoder = SystemPropertyUtil.getBoolean("io.netty.noJdkZlibDecoder", false);
        ZlibCodecFactory.logger.debug("-Dio.netty.noJdkZlibDecoder: {}", (Object)ZlibCodecFactory.noJdkZlibDecoder);
        noJdkZlibEncoder = SystemPropertyUtil.getBoolean("io.netty.noJdkZlibEncoder", false);
        ZlibCodecFactory.logger.debug("-Dio.netty.noJdkZlibEncoder: {}", (Object)ZlibCodecFactory.noJdkZlibEncoder);
        boolean jzlibAvailable;
        try {
            Class.forName("com.jcraft.jzlib.JZlib", false, PlatformDependent.getClassLoader(ZlibCodecFactory.class));
            jzlibAvailable = true;
        }
        catch (final ClassNotFoundException t) {
            jzlibAvailable = false;
            ZlibCodecFactory.logger.debug("JZlib not in the classpath; the only window bits supported value will be 15");
        }
        JZLIB_AVAILABLE = jzlibAvailable;
    }
}
