1 17 package org.apache.geronimo.deployment; 18 19 import java.io.File ; 20 import java.io.IOException ; 21 import java.net.URI ; 22 import java.net.URISyntaxException ; 23 import java.net.URL ; 24 import java.util.HashSet ; 25 import java.util.Iterator ; 26 import java.util.Set ; 27 import java.util.jar.JarFile ; 28 import java.util.zip.ZipEntry ; 29 import java.util.zip.ZipFile ; 30 31 import org.apache.geronimo.common.DeploymentException; 32 import org.apache.geronimo.deployment.util.DeploymentUtil; 33 import org.apache.geronimo.deployment.util.NestedJarFile; 34 import org.apache.geronimo.kernel.config.Configuration; 35 36 class InPlaceResourceContext implements ResourceContext { 37 private static final String PACKED_MODULED_SAVED_SUFFIX = ".saved"; 38 39 private final Configuration configuration; 40 private final URI inPlaceBaseConfigurationUri; 41 private final Set zipFilesToExpand = new HashSet (); 42 43 public InPlaceResourceContext(Configuration configuration, File inPlaceBaseConfigurationDir) throws DeploymentException { 44 this.configuration = configuration; 45 this.inPlaceBaseConfigurationUri = inPlaceBaseConfigurationDir.toURI(); 46 47 if (inPlaceBaseConfigurationDir.isFile()) { 48 try { 49 configuration.addToClassPath(""); 50 } catch (IOException e) { 51 throw new DeploymentException(e); 52 } 53 } 54 } 55 56 public void addIncludeAsPackedJar(URI targetPath, JarFile jarFile) throws IOException { 57 configuration.addToClassPath(targetPath.toString()); 58 } 59 60 public void addInclude(URI targetPath, ZipFile zipFile, ZipEntry zipEntry) throws IOException { 61 if (zipFile instanceof NestedJarFile) { 62 NestedJarFile nestedJarFile = (NestedJarFile) zipFile; 63 if (nestedJarFile.isPacked()) { 64 zipFilesToExpand.add(zipFile); 65 } 66 } 67 68 configuration.addToClassPath(targetPath.toString()); 69 } 70 71 public void addInclude(URI targetPath, URL source) throws IOException { 72 configuration.addToClassPath(targetPath.toString()); 73 } 74 75 public void addInclude(URI targetPath, File source) throws IOException { 76 configuration.addToClassPath(targetPath.toString()); 77 } 78 79 public void addFile(URI targetPath, ZipFile zipFile, ZipEntry zipEntry) throws IOException { 80 if (zipFile instanceof NestedJarFile) { 81 NestedJarFile nestedJarFile = (NestedJarFile) zipFile; 82 if (nestedJarFile.isPacked()) { 83 zipFilesToExpand.add(zipFile); 84 } 85 } 86 } 87 88 public void addFile(URI targetPath, URL source) throws IOException { 89 } 90 91 public void addFile(URI targetPath, File source) throws IOException { 92 } 93 94 public void addFile(URI targetPath, String source) throws IOException { 95 } 96 97 public File getTargetFile(URI targetPath) { 98 if (targetPath == null) throw new NullPointerException ("targetPath is null"); 99 if (targetPath.isAbsolute()) throw new IllegalArgumentException ("targetPath is absolute"); 100 if (targetPath.isOpaque()) throw new IllegalArgumentException ("targetPath is opaque"); 101 return new File (inPlaceBaseConfigurationUri.resolve(targetPath)); 102 } 103 104 public void flush() throws IOException { 105 for (Iterator iter = zipFilesToExpand.iterator(); iter.hasNext();) { 106 ZipFile zipFile = (ZipFile ) iter.next(); 107 String name = zipFile.getName(); 108 zipFile.close(); 109 File srcFile = new File (name); 110 File targetFile; 111 if (!srcFile.isAbsolute()) { 112 srcFile = new File (inPlaceBaseConfigurationUri.resolve(name)); 113 try { 114 targetFile = getTargetFile(new URI (name + PACKED_MODULED_SAVED_SUFFIX)); 115 } catch (URISyntaxException e) { 116 throw new AssertionError (e); 117 } 118 } else { 119 targetFile = new File (name + PACKED_MODULED_SAVED_SUFFIX); 120 } 121 boolean success = new File (name).renameTo(targetFile); 122 if (!success) { 123 throw new IOException ("Cannot rename file " + 124 name + " to " + targetFile.getAbsolutePath()); 125 } 126 127 DeploymentUtil.unzipToDirectory(new ZipFile (targetFile), srcFile); 128 } 129 } 130 131 132 } | Popular Tags |