00001
00026 package org.objectweb.jonas_lib.genbase.archive;
00027
00028 import java.io.File;
00029 import java.io.FileInputStream;
00030 import java.io.IOException;
00031 import java.io.InputStream;
00032 import java.util.List;
00033 import java.util.Vector;
00034 import java.util.jar.Manifest;
00035
00036 import org.objectweb.jonas_lib.genbase.GenBaseException;
00037
00038
00044 public class FileArchive extends AbsArchive {
00045
00053 public FileArchive(File archive) throws GenBaseException {
00054 super(archive);
00055
00056 try {
00057 File mf = new File(archive, "META-INF" + File.separator + "MANIFEST.MF");
00058
00059 if (mf.exists()) {
00060 setManifest(new Manifest(new FileInputStream(mf)));
00061 } else {
00062 setManifest(new Manifest());
00063 }
00064 } catch (Exception e) {
00065 String err = getI18n().getMessage("FileArchive.constr.manifest", getRootFile());
00066 throw new GenBaseException(err, e);
00067 }
00068 }
00069
00080 public InputStream getInputStream(String filename) throws IOException {
00081 File file = (File) getFiles().get(filename);
00082
00083 if (file == null) {
00084
00085
00086 file = new File(getRootFile(), filename);
00087
00088 if (!file.exists()) {
00089 return null;
00090 }
00091 }
00092
00093
00094 return new FileInputStream(file);
00095 }
00096
00103 public List getContainedFiles() {
00104 List list = new Vector(getFiles().keySet());
00105
00106
00107 traverse("", getRootFile(), list);
00108
00109 return list;
00110 }
00111
00119 private static void traverse(String dirName, File base, List map) {
00120 File[] childs = base.listFiles();
00121
00122
00123 if (childs != null) {
00124 for (int i = 0; i < childs.length; i++) {
00125 if (childs[i].isFile()) {
00126
00127 map.add(dirName + childs[i].getName());
00128 } else {
00129
00130 traverse(dirName + childs[i].getName() + File.separator, childs[i], map);
00131 }
00132 }
00133 }
00134 }
00135
00141 public boolean isPacked() {
00142 return false;
00143 }
00144 }