blob: 160785d0cfc15921bb7a5d653a8b3630c477a900 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 IBM Corporation 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:
* IBM - Initial API and implementation
*******************************************************************************/
package org.eclipse.update.internal.jarprocessor;
import java.io.*;
import java.util.Properties;
import java.util.zip.ZipException;
import org.eclipse.update.internal.jarprocessor.Main.Options;
public class JarProcessorExecutor {
public void runJarProcessor(Options options) {
if (options.input.isFile() && options.input.getName().endsWith(".zip")) { //$NON-NLS-1$
ZipProcessor processor = new ZipProcessor();
processor.setWorkingDirectory(options.outputDir);
processor.setSignCommand(options.signCommand);
processor.setPack(options.pack);
processor.setRepack(options.repack || (options.pack && options.signCommand != null));
processor.setUnpack(options.unpack);
processor.setVerbose(options.verbose);
processor.setProcessAll(options.processAll);
try {
processor.processZip(options.input);
} catch (ZipException e) {
if (options.verbose)
e.printStackTrace();
} catch (IOException e) {
if (options.verbose)
e.printStackTrace();
}
} else {
JarProcessor processor = new JarProcessor();
JarProcessor packProcessor = null;
processor.setWorkingDirectory(options.outputDir);
processor.setProcessAll(options.processAll);
processor.setVerbose(options.verbose);
//load options file
Properties properties = new Properties();
if (options.input.isDirectory()) {
File packProperties = new File(options.input, "pack.properties");
if (packProperties.exists() && packProperties.isFile()) {
InputStream in = null;
try {
in = new BufferedInputStream(new FileInputStream(packProperties));
properties.load(in);
} catch (IOException e) {
if (options.verbose)
e.printStackTrace();
} finally {
Utils.close(in);
}
}
}
if (options.unpack)
addUnpackStep(processor, properties, options);
if (options.repack || (options.pack && options.signCommand != null))
addPackUnpackStep(processor, properties, options);
if (options.signCommand != null)
addSignStep(processor, properties, options);
if (options.pack) {
packProcessor = new JarProcessor();
packProcessor.setWorkingDirectory(options.outputDir);
packProcessor.setProcessAll(options.processAll);
packProcessor.setVerbose(options.verbose);
addPackStep(packProcessor, properties, options);
}
try {
process(options.input, options.unpack ? Utils.PACK_GZ_FILTER : Utils.JAR_FILTER, options.verbose, processor, packProcessor);
} catch (FileNotFoundException e) {
if (options.verbose)
e.printStackTrace();
}
}
}
protected void process(File input, FileFilter filter, boolean verbose, JarProcessor processor, JarProcessor packProcessor) throws FileNotFoundException {
if (!input.exists())
throw new FileNotFoundException();
File[] files = null;
if (input.isDirectory()) {
files = input.listFiles();
} else if (filter.accept(input)) {
files = new File[] {input};
}
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
String dir = processor.getWorkingDirectory();
processor.setWorkingDirectory(dir + "/" + files[i].getName()); //$NON-NLS-1$
if (packProcessor != null)
packProcessor.setWorkingDirectory(dir + "/" + files[i].getName());
process(files[i], filter, verbose, processor, packProcessor);
processor.setWorkingDirectory(dir);
if (packProcessor != null)
packProcessor.setWorkingDirectory(dir);
} else if (filter.accept(files[i])) {
try {
File result = processor.processJar(files[i]);
if (packProcessor != null && result != null && result.exists()) {
packProcessor.processJar(result);
}
} catch (IOException e) {
if (verbose)
e.printStackTrace();
}
}
}
}
public void addPackUnpackStep(JarProcessor processor, Properties properties, Options options) {
processor.addProcessStep(new PackUnpackStep(properties, options.verbose));
}
public void addSignStep(JarProcessor processor, Properties properties, Options options) {
processor.addProcessStep(new SignCommandStep(properties, options.signCommand, options.verbose));
}
public void addPackStep(JarProcessor processor, Properties properties, Options options) {
processor.addProcessStep(new PackStep(properties, options.verbose));
}
public void addUnpackStep(JarProcessor processor, Properties properties, Options options) {
processor.addProcessStep(new UnpackStep(properties, options.verbose));
}
}