You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by mn...@apache.org on 2010/11/01 11:14:30 UTC
svn commit: r1029596 -
/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java
Author: mnuttall
Date: Mon Nov 1 10:14:29 2010
New Revision: 1029596
URL: http://svn.apache.org/viewvc?rev=1029596&view=rev
Log:
ARIES-477: Add obtainManifest(URL, String filename) to ManifestProcessor
Modified:
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java
Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java?rev=1029596&r1=1029595&r2=1029596&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java Mon Nov 1 10:14:29 2010
@@ -19,9 +19,12 @@
package org.apache.aries.application.utils.manifest;
import java.io.BufferedReader;
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.net.URISyntaxException;
+import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -30,10 +33,14 @@ import java.util.Map.Entry;
import java.util.Set;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
import org.apache.aries.application.filesystem.IDirectory;
import org.apache.aries.application.filesystem.IFile;
import org.apache.aries.application.utils.AppConstants;
+import org.apache.aries.application.utils.filesystem.FileSystem;
+import org.apache.aries.application.utils.filesystem.IOUtils;
/**
* This class contains utilities for parsing manifests. It provides methods to
@@ -196,6 +203,52 @@ public class ManifestProcessor
}
/**
+ * Obtains a manifest from a file or directory at the given URL. The manifest name
+ * can be arbitrary.
+ * @param url the url of an archive file or directory
+ * @param fileName the name of the manifest to look for
+ * @return
+ * @throws IOException if the url can't be read
+ * @throws URISyntaxException
+ */
+ public static Manifest obtainManifest(URL url, String fileName) throws IOException, URISyntaxException
+ {
+
+ Manifest bundleManifest = null;
+ // try read the compositeBundle Manifest from url
+
+ ZipInputStream zipInputStream = null;
+ try {
+ File file = null;
+ file = new File(url.toURI());
+ if (file.isDirectory()) {
+ IDirectory iDirectory = FileSystem.getFSRoot(file);
+ bundleManifest = obtainManifestFromAppDir(iDirectory, fileName);
+ } else {
+ // We can't use a JarInputStream because that assumes the manifest name is MANIFEST.MF
+ zipInputStream = new ZipInputStream(url.openStream());
+ // Search through for our entry by hand so we can be case-insensitive (story 5399)
+ ZipEntry manifestEntry = null;
+ ZipEntry nextEntry = zipInputStream.getNextEntry();
+ while (manifestEntry == null && nextEntry != null) {
+ if (fileName.equalsIgnoreCase(nextEntry.getName())) {
+ manifestEntry = nextEntry;
+ } else {
+ nextEntry = zipInputStream.getNextEntry();
+ }
+ }
+ if (manifestEntry != null) {
+ bundleManifest = parseManifest(zipInputStream);
+ }
+ }
+ } finally {
+ IOUtils.close(zipInputStream);
+ }
+
+ return bundleManifest;
+ }
+
+ /**
* count the number of characters in a string
* @param parent The string to be searched
* @param subString The substring to be found
@@ -213,4 +266,5 @@ public class ManifestProcessor
}
return count;
}
+
}