FileArchive.java

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             // filename not found in added files
00085             // try root search
00086             file = new File(getRootFile(), filename);
00087 
00088             if (!file.exists()) {
00089                 return null;
00090             }
00091         }
00092 
00093         // file exists (in added files or in original archive)
00094         return new FileInputStream(file);
00095     }
00096 
00103     public List getContainedFiles() {
00104         List list = new Vector(getFiles().keySet());
00105 
00106         // add files of the original archive
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         // directory exists ?
00123         if (childs != null) {
00124             for (int i = 0; i < childs.length; i++) {
00125                 if (childs[i].isFile()) {
00126                     // File
00127                     map.add(dirName + childs[i].getName());
00128                 } else {
00129                     // Directory
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 }

Generated on Tue Feb 15 15:05:51 2005 for JOnAS by  doxygen 1.3.9.1