package de.usd.cstchef.operations.compression;

import java.util.zip.GZIPOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import de.usd.cstchef.operations.Operation;
import de.usd.cstchef.operations.OperationCategory;
import de.usd.cstchef.operations.Operation.OperationInfos;

@OperationInfos(name = "GZIP", category = OperationCategory.COMPRESSION, description = "Compresses the input using GZIP.")
public class Gzip extends Operation {

    @Override
    protected byte[] perform(byte[] input) throws Exception {
    	ByteArrayOutputStream out = new ByteArrayOutputStream();
    	GZIPOutputStream gzos = new GZIPOutputStream(out);     
    	ByteArrayInputStream in = new ByteArrayInputStream(input);
        
        byte[] buffer = new byte[1024];   
        int len;
        while ((len = in.read(buffer)) > 0) {
        	gzos.write(buffer, 0, len);
        }
        
		in.close();
		gzos.close();
		out.close();
        return out.toByteArray();
    } 

}