You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by da...@apache.org on 2004/09/18 20:53:09 UTC
svn commit: rev 46300 - geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util
Author: dain
Date: Sat Sep 18 11:53:08 2004
New Revision: 46300
Added:
geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/UnpackedJarEntry.java
geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/UnpackedJarFile.java
Modified:
geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/FileUtil.java
Log:
Added UnpackedJarFile which exposes directory as a JarFile. This is useful for simplifing deployment of unpacked archives, since we can now simply reuse the packed archive code.
Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/FileUtil.java
==============================================================================
--- geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/FileUtil.java (original)
+++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/FileUtil.java Sat Sep 18 11:53:08 2004
@@ -22,6 +22,8 @@
import java.io.IOException;
import java.io.FileOutputStream;
import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Collections;
/**
*
@@ -62,16 +64,22 @@
root.delete();
}
- public static void listRecursiveFiles(File aFile, Collection aColl) {
- File[] files = aFile.listFiles();
+ public static Collection listRecursiveFiles(File file) {
+ LinkedList list = new LinkedList();
+ listRecursiveFiles(file, list);
+ return Collections.unmodifiableCollection(list);
+ }
+
+ public static void listRecursiveFiles(File file, Collection collection) {
+ File[] files = file.listFiles();
if ( null == files ) {
return;
}
for (int i = 0; i < files.length; i++) {
- if ( files[i].isFile() ) {
- aColl.add(files[i]);
+ if (files[i].isDirectory()) {
+ listRecursiveFiles(files[i], collection);
} else {
- listRecursiveFiles(files[i], aColl);
+ collection.add(files[i]);
}
}
}
Added: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/UnpackedJarEntry.java
==============================================================================
--- (empty file)
+++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/UnpackedJarEntry.java Sat Sep 18 11:53:08 2004
@@ -0,0 +1,175 @@
+/**
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.geronimo.deployment.util;
+
+import java.util.jar.JarEntry;
+import java.util.jar.Attributes;
+import java.util.jar.Manifest;
+import java.util.zip.ZipEntry;
+import java.io.IOException;
+import java.io.File;
+import java.security.cert.Certificate;
+
+/**
+ * @version $Revision$ $Date$
+ */
+public class UnpackedJarEntry extends JarEntry {
+ private final File file;
+ private final Manifest manifest;
+
+ public UnpackedJarEntry(String name, File file, Manifest manifest) {
+ super(name);
+ this.file = file;
+ this.manifest = manifest;
+ }
+
+ public File getFile() {
+ return file;
+ }
+
+ public Attributes getAttributes() throws IOException {
+ if (manifest == null) {
+ return null;
+ }
+ return manifest.getAttributes(getName());
+ }
+
+ /**
+ * Always return null. This could be implementd by verifing the signatures
+ * in the manifest file against the actual file, but we don't need this for
+ * Geronimo.
+ * @return null
+ */
+ public Certificate[] getCertificates() {
+ return null;
+ }
+
+ /**
+ * An unpacked jar is read only, so this method always throws an UnsupportedOperationException.
+ * @param time ignored
+ * @throws UnsupportedOperationException always
+ */
+ public void setTime(long time) throws UnsupportedOperationException {
+ throw new UnsupportedOperationException("Can not change the time of unpacked jar entry");
+ }
+
+ public long getTime() {
+ return file.lastModified();
+ }
+
+ /**
+ * An unpacked jar is read only, so this method always throws an UnsupportedOperationException.
+ * @param size ignored
+ * @throws UnsupportedOperationException always
+ */
+ public void setSize(long size) throws UnsupportedOperationException {
+ throw new UnsupportedOperationException("Can not change the size of unpacked jar entry");
+ }
+
+ public long getSize() {
+ if (file.isDirectory()) {
+ return -1;
+ } else {
+ return file.length();
+ }
+ }
+
+ /**
+ * An unpacked jar is not compressed, so this method returns getSize().
+ * @return getSize()
+ */
+ public long getCompressedSize() {
+ return getSize();
+ }
+
+ /**
+ * An unpacked jar is read only, so this method always throws an UnsupportedOperationException.
+ * @param compressedSize ignored
+ * @throws UnsupportedOperationException always
+ */
+ public void setCompressedSize(long compressedSize) {
+ throw new UnsupportedOperationException("Can not change the compressed size of unpacked jar entry");
+ }
+
+ public long getCrc() {
+ return super.getCrc(); //To change body of overridden methods use File | Settings | File Templates.
+ }
+
+ /**
+ * An unpacked jar is read only, so this method always throws an UnsupportedOperationException.
+ * @param crc ignored
+ * @throws UnsupportedOperationException always
+ */
+ public void setCrc(long crc) {
+ throw new UnsupportedOperationException("Can not change the crc of unpacked jar entry");
+ }
+
+ public int getMethod() {
+ return ZipEntry.STORED;
+ }
+
+ /**
+ * An unpacked jar is read only, so this method always throws an UnsupportedOperationException.
+ * @param method ignored
+ * @throws UnsupportedOperationException always
+ */
+ public void setMethod(int method) {
+ throw new UnsupportedOperationException("Can not change the method of unpacked jar entry");
+ }
+
+ /**
+ * Always returns null.
+ * @return null
+ */
+ public byte[] getExtra() {
+ return null;
+ }
+
+ /**
+ * An unpacked jar is read only, so this method always throws an UnsupportedOperationException.
+ * @param extra ignored
+ * @throws UnsupportedOperationException always
+ */
+ public void setExtra(byte[] extra) {
+ throw new UnsupportedOperationException("Can not change the extra data of unpacked jar entry");
+ }
+
+ /**
+ * Always returns null.
+ * @return null
+ */
+ public String getComment() {
+ return null;
+ }
+
+ /**
+ * An unpacked jar is read only, so this method always throws an UnsupportedOperationException.
+ * @param comment ignored
+ * @throws UnsupportedOperationException always
+ */
+ public void setComment(String comment) {
+ throw new UnsupportedOperationException("Can not change the comment of unpacked jar entry");
+ }
+
+ public boolean isDirectory() {
+ return file.isDirectory();
+ }
+
+ public Object clone() {
+ return new UnpackedJarEntry(getName(), file, manifest);
+ }
+}
Added: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/UnpackedJarFile.java
==============================================================================
--- (empty file)
+++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/UnpackedJarFile.java Sat Sep 18 11:53:08 2004
@@ -0,0 +1,169 @@
+/**
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.geronimo.deployment.util;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.FileInputStream;
+import java.util.Enumeration;
+import java.util.LinkedList;
+import java.util.Iterator;
+import java.util.Collections;
+import java.util.Collection;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.jar.JarOutputStream;
+import java.util.jar.Manifest;
+import java.util.zip.ZipEntry;
+import java.net.URI;
+
+/**
+ * @version $Revision$ $Date$
+ */
+public class UnpackedJarFile extends JarFile {
+ private static final File dummyJarFile;
+ static {
+ try {
+ dummyJarFile = File.createTempFile("fake", null);
+ new JarOutputStream(new FileOutputStream(dummyJarFile), new Manifest()).close();
+ dummyJarFile.deleteOnExit();
+ } catch (IOException e) {
+ throw new ExceptionInInitializerError(e);
+ }
+ }
+
+ private final File baseDir;
+ private boolean manifestLoaded = false;
+ private Manifest manifest;
+
+ public UnpackedJarFile(String name) throws IOException {
+ this(new File(name));
+ }
+
+ public UnpackedJarFile(File baseDir) throws IOException {
+ super(dummyJarFile);
+ this.baseDir = baseDir;
+ if (!baseDir.isDirectory()) {
+ throw new IOException("File must be a directory: file=" + baseDir.getAbsolutePath());
+ }
+ }
+
+ public Manifest getManifest() throws IOException {
+ if (manifestLoaded) {
+ File manifestFile = getFile("META-INF/MANIFEST.MF");
+
+ if (manifestFile.isFile()) {
+ FileInputStream in = null;
+ try {
+ in = new FileInputStream(manifestFile);
+ manifest = new Manifest(in);
+ } finally {
+ if (in != null) {
+ try {
+ in.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ }
+ }
+ manifestLoaded = true;
+ }
+ return manifest;
+ }
+
+ public JarEntry getJarEntry(String name) {
+ File file = getFile(name);
+ if (file == null) {
+ return null;
+ }
+ return new UnpackedJarEntry(name, file, getManifestSafe());
+ }
+
+ public ZipEntry getEntry(String name) {
+ return getJarEntry(name);
+ }
+
+ public Enumeration entries() {
+ Collection files = FileUtil.listRecursiveFiles(baseDir);
+
+ Manifest manifest = getManifestSafe();
+ LinkedList entries = new LinkedList();
+ URI baseURI = baseDir.getAbsoluteFile().toURI();
+ for (Iterator iterator = files.iterator(); iterator.hasNext();) {
+ File entryFile = ((File) iterator.next()).getAbsoluteFile();
+ URI entryURI = entryFile.toURI();
+ URI relativeURI = baseURI.relativize(entryURI);
+ entries.add(new UnpackedJarEntry(relativeURI.getPath(), entryFile, manifest));
+ }
+ return Collections.enumeration(entries);
+ }
+
+ public InputStream getInputStream(ZipEntry zipEntry) throws IOException {
+ File file;
+ if (zipEntry instanceof UnpackedJarEntry) {
+ file = getFile(zipEntry.getName());
+ } else {
+ file = ((UnpackedJarEntry)zipEntry).getFile();
+ }
+
+ if (file == null) {
+ throw new IOException("Entry not found: name=" + file.getAbsolutePath());
+ } else if (file.isDirectory()) {
+ throw new IOException("Entry is a directory: name=" + file.getAbsolutePath());
+ }
+ return new FileInputStream(file);
+ }
+
+ public String getName() {
+ return baseDir.getAbsolutePath();
+ }
+
+ /**
+ * Always returns -1.
+ * @return -1
+ */
+ public int size() {
+ return -1;
+ }
+
+ public void close() throws IOException {
+ }
+
+ protected void finalize() throws IOException {
+ }
+
+ private File getFile(String name) {
+ File file = new File(baseDir, name);
+ if (!file.exists()) {
+ return null;
+ }
+ return file;
+ }
+
+ private Manifest getManifestSafe() {
+ Manifest manifest = null;
+ try {
+ manifest = getManifest();
+ } catch (IOException e) {
+ // ignore
+ }
+ return manifest;
+ }
+}
Re: svn commit: rev 46300 - geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util
Posted by Jacek Laskowski <jl...@apache.org>.
dain@apache.org wrote:
> Author: dain
> Date: Sat Sep 18 11:53:08 2004
> New Revision: 46300
>
> Added:
> geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/UnpackedJarEntry.java
> geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/UnpackedJarFile.java
> +/**
> + * @version $Revision$ $Date$
Dain,
Please update the templates so that they use $Rev$ $Date$.
Jacek