blob: 4c57321c7b39485b5b8fc2c10657ae307567d0a7 [file] [log] [blame]
package aQute.lib.osgi;
import java.io.*;
import java.util.regex.Pattern;
public class FileResource implements Resource {
File file;
String extra;
public FileResource(File file) {
this.file = file;
}
public InputStream openInputStream() throws FileNotFoundException {
return new FileInputStream(file);
}
public static void build(Jar jar, File directory, Pattern doNotCopy) {
traverse(
jar,
directory.getAbsolutePath().length(),
directory,
doNotCopy);
}
public String toString() {
return ":" + file.getName() + ":";
}
public void write(OutputStream out) throws Exception {
copy(this, out);
}
static synchronized void copy(Resource resource, OutputStream out)
throws Exception {
InputStream in = resource.openInputStream();
try {
byte buffer[] = new byte[20000];
int size = in.read(buffer);
while (size > 0) {
out.write(buffer, 0, size);
size = in.read(buffer);
}
}
finally {
in.close();
}
}
static void traverse(Jar jar, int rootlength, File directory,
Pattern doNotCopy) {
if (doNotCopy != null && doNotCopy.matcher(directory.getName()).matches())
return;
File files[] = directory.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory())
traverse(jar, rootlength, files[i], doNotCopy);
else {
String path = files[i].getAbsolutePath().substring(
rootlength + 1);
if (File.separatorChar != '/')
path = path.replace(File.separatorChar, '/');
jar.putResource(path, new FileResource(files[i]), true);
}
}
}
public long lastModified() {
return file.lastModified();
}
public String getExtra() {
return extra;
}
public void setExtra(String extra) {
this.extra = extra;
}
public long size() {
return (int) file.length();
}
}