blob: 95a9c65aa7bfeba763977311e7cfe2ae59dbea13 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 compeople AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* compeople AG (Stefan Liebig) - initial API and implementation
* IBM Corporation - ongoing development
*******************************************************************************/
package org.eclipse.equinox.internal.p2.artifact.optimizers.pack200;
import java.io.*;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.equinox.internal.p2.artifact.optimizers.AbstractBufferingStep;
import org.eclipse.equinox.internal.p2.artifact.optimizers.Activator;
import org.eclipse.equinox.internal.p2.core.helpers.FileUtils;
import org.eclipse.internal.provisional.equinox.p2.jarprocessor.JarProcessorExecutor;
import org.eclipse.internal.provisional.equinox.p2.jarprocessor.JarProcessorExecutor.Options;
/**
* The Pack200Packer expects an input containing normal ".jar" data.
*/
public class Pack200OptimizerStep extends AbstractBufferingStep {
private static final String PACKED_SUFFIX = ".pack.gz"; //$NON-NLS-1$
private File incoming;
protected OutputStream createIncomingStream() throws IOException {
incoming = File.createTempFile(INCOMING_ROOT, JAR_SUFFIX);
return new BufferedOutputStream(new FileOutputStream(incoming));
}
protected void cleanupTempFiles() {
super.cleanupTempFiles();
if (incoming != null)
incoming.delete();
}
protected void performProcessing() throws IOException {
File resultFile = null;
try {
resultFile = process();
// now write the optimized content to the destination
if (resultFile.length() > 0) {
InputStream resultStream = new BufferedInputStream(new FileInputStream(resultFile));
FileUtils.copyStream(resultStream, true, getDestination(), false);
} else {
setStatus(new Status(IStatus.ERROR, Activator.ID, "Empty intermediate file: " + resultFile)); //$NON-NLS-1$
}
} finally {
if (resultFile != null)
resultFile.delete();
}
}
protected File process() throws IOException {
// unpack
Options options = new Options();
options.pack = true;
// TODO use false here assuming that all content is conditioned. Need to revise this
options.processAll = false;
options.input = incoming;
options.outputDir = getWorkDir().getPath();
options.verbose = true;
new JarProcessorExecutor().runJarProcessor(options);
return new File(getWorkDir(), incoming.getName() + PACKED_SUFFIX);
}
}