GZIPManipulator.java :  » Build » cruisecontrol » net » sourceforge » cruisecontrol » logmanipulators » Java Open Source

Java Open Source » Build » cruisecontrol 
cruisecontrol » net » sourceforge » cruisecontrol » logmanipulators » GZIPManipulator.java
/********************************************************************************
 * CruiseControl, a Continuous Integration Toolkit
 * Copyright (c) 2006, ThoughtWorks, Inc.
 * 200 E. Randolph, 25th Floor
 * Chicago, IL 60601 USA
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *     + Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *
 *     + Redistributions in binary form must reproduce the above
 *       copyright notice, this list of conditions and the following
 *       disclaimer in the documentation and/or other materials provided
 *       with the distribution.
 *
 *     + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the
 *       names of its contributors may be used to endorse or promote
 *       products derived from this software without specific prior
 *       written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ********************************************************************************/
package net.sourceforge.cruisecontrol.logmanipulators;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.GZIPOutputStream;
import net.sourceforge.cruisecontrol.util.IO;
import org.apache.log4j.Logger;

public class GZIPManipulator extends BaseManipulator {
    private static final Logger LOG = Logger.getLogger(GZIPManipulator.class);
    private static final int BUFFER_SIZE = 4 * 1024;

    public void execute(String logDir) {
        File[] filesToGZip = getRelevantFiles(logDir, false);
        for (int i = 0; i < filesToGZip.length; i++) {
            File file = filesToGZip[i];
            gzipFile(file, logDir);
        }
    }

    private void gzipFile(final File logfile, final String logDir) {

        final String fileName = logfile.getName() + ".gz";
        try {
            final OutputStream out = new GZIPOutputStream(
                    new FileOutputStream(new File(logDir, fileName)));
            try {
                final InputStream in = new FileInputStream(logfile);
                try {
                    int len;
                    final byte[] buffer = new byte[BUFFER_SIZE];
                    while ((len = in.read(buffer)) > 0) {
                        out.write(buffer, 0, len);
                    }
                    out.flush();
                } finally {
                    // need to close the InputStream before delete(), otherwise fails on windows
                    IO.close(in);
                }
            } finally {
                IO.close(out);
            }
            logfile.delete();
        } catch (IOException e) {
            LOG.warn("could not gzip " + logfile.getName() + ": " + e.getMessage(), e);
        }
    }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.