org.openrdf.repository.object.compiler.JarPacker Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of alibaba-composition-object Show documentation
Show all versions of alibaba-composition-object Show documentation
The Object Composition library merges multiple Java objects into a single multi-subject object.
/*
* Copyright (c) 2009, James Leigh 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 the openrdf.org 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 COPYRIGHT OWNER 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 org.openrdf.repository.object.compiler;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;
/**
* Packages a directy into a Jar and writes the concept index files.
*
* @author James Leigh
*
*/
public class JarPacker {
private File dir;
public JarPacker(File dir) {
this.dir = dir;
}
public void packageJar(File output) throws IOException {
FileOutputStream stream = new FileOutputStream(output);
JarOutputStream jar = new JarOutputStream(stream);
try {
packaFiles(dir, dir, jar, 256);
} finally {
jar.close();
stream.close();
}
}
private void packaFiles(File base, File dir, JarOutputStream jar, int max)
throws IOException, FileNotFoundException {
if (max < 0)
throw new AssertionError("Recursive Path: " + dir);
for (File file : dir.listFiles()) {
if (file.isDirectory()) {
packaFiles(base, file, jar, max - 1);
} else if (file.exists()) {
String path = file.getAbsolutePath();
path = path.substring(base.getAbsolutePath().length() + 1);
// replace separatorChar by '/' on all platforms
if (File.separatorChar != '/') {
path = path.replace(File.separatorChar, '/');
}
jar.putNextEntry(new JarEntry(path));
copyInto(file.toURI().toURL(), jar);
file.delete();
}
}
}
private void copyInto(URL source, OutputStream out)
throws FileNotFoundException, IOException {
InputStream in = source.openStream();
try {
int read;
byte[] buf = new byte[512];
while ((read = in.read(buf)) > 0) {
out.write(buf, 0, read);
}
} finally {
in.close();
}
}
}