package org.moparscape.msc.gs.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class DefCompressor {

    public static void compressFile(File f) throws IOException {
	File target = new File(f.toString() + ".gz");
	System.out.print("Compressing: " + f.getName() + ".. ");
	long initialSize = f.length();
	FileInputStream fis = new FileInputStream(f);
	GZIPOutputStream out = new GZIPOutputStream(new FileOutputStream(target));
	byte[] buf = new byte[1024];
	int read;
	while ((read = fis.read(buf)) != -1) {
	    out.write(buf, 0, read);
	}
	Logger.println("Done.");
	fis.close();
	out.close();
	long endSize = target.length();
	Logger.println("Initial size: " + initialSize + "; Compressed size: " + endSize);
    }

    public static void decompressFile(File f) throws IOException {
	File target = new File(f.toString().substring(0, f.toString().length() - 3));
	System.out.print("Decompressing: " + f.getName() + ".. ");
	long initialSize = f.length();
	GZIPInputStream in = new GZIPInputStream(new FileInputStream(f));
	FileOutputStream fos = new FileOutputStream(target);
	byte[] buf = new byte[1024];
	int read;
	while ((read = in.read(buf)) != -1) {
	    fos.write(buf, 0, read);
	}
	Logger.println("Done.");
	fos.close();
	in.close();
	long endSize = target.length();
	Logger.println("Initial size: " + initialSize + "; Decompressed size: " + endSize);
    }

    public static void main(String[] argv) throws Exception {
	if (argv[0].equals("compress"))
	    compressFile(new File(argv[1]));
	if (argv[0].equals("decompress"))
	    decompressFile(new File(argv[1]));
    }
}
