You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ds...@apache.org on 2010/08/06 16:14:05 UTC

svn commit: r982975 - in /felix/trunk/sigil: common/core/ common/core/src/org/apache/felix/sigil/common/config/ common/core/src/org/apache/felix/sigil/common/core/internal/model/eclipse/ common/core/src/org/apache/felix/sigil/common/core/repository/ co...

Author: dsavage
Date: Fri Aug  6 14:14:04 2010
New Revision: 982975

URL: http://svn.apache.org/viewvc?rev=982975&view=rev
Log:
use shared util method to read Manifest from ZipFiles (FELIX-2527)

Added:
    felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/util/
      - copied from r982545, felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/util/
Removed:
    felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/util/
Modified:
    felix/trunk/sigil/common/core/sigil.properties
    felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/config/BldConfig.java
    felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/internal/model/eclipse/SigilBundle.java
    felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/DirectoryHelper.java
    felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/SystemRepository.java
    felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/repository/AbstractBundleRepository.java
    felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/util/ManifestUtil.java
    felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/util/QuoteUtil.java
    felix/trunk/sigil/eclipse/core/sigil.properties
    felix/trunk/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/OSGiInstallRepository.java

Modified: felix/trunk/sigil/common/core/sigil.properties
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/sigil.properties?rev=982975&r1=982974&r2=982975&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/sigil.properties (original)
+++ felix/trunk/sigil/common/core/sigil.properties Fri Aug  6 14:14:04 2010
@@ -16,6 +16,7 @@
 	org.apache.felix.sigil.common.core*, \
 	org.apache.felix.sigil.common.model*, \
 	org.apache.felix.sigil.common.repository*, \
+	org.apache.felix.sigil.common.util*, \
 	org.apache.felix.sigil.common.progress*,
 
 -resources: \
@@ -40,8 +41,9 @@
 	org.apache.felix.sigil.common.model, \
 	org.apache.felix.sigil.common.model.eclipse, \
 	org.apache.felix.sigil.common.model.osgi, \
-	org.apache.felix.sigil.common.repository, \
 	org.apache.felix.sigil.common.progress, \
+	org.apache.felix.sigil.common.repository, \
+	org.apache.felix.sigil.common.util, \
 
 -imports: \
 	aQute.lib.osgi;resolve=compile, \
@@ -55,6 +57,7 @@
 	org.apache.felix.sigil.common.model.osgi, \
 	org.apache.felix.sigil.common.osgi, \
 	org.apache.felix.sigil.common.repository, \
+	org.apache.felix.sigil.common.util, \
 	org.osgi.framework, \
 
 header;Bundle-ActivationPolicy: lazy

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/config/BldConfig.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/config/BldConfig.java?rev=982975&r1=982974&r2=982975&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/config/BldConfig.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/config/BldConfig.java Fri Aug  6 14:14:04 2010
@@ -29,7 +29,7 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.TreeMap;
 
-import org.apache.felix.sigil.common.core.util.QuoteUtil;
+import org.apache.felix.sigil.common.util.QuoteUtil;
 
 public class BldConfig
 {

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/internal/model/eclipse/SigilBundle.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/internal/model/eclipse/SigilBundle.java?rev=982975&r1=982974&r2=982975&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/internal/model/eclipse/SigilBundle.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/internal/model/eclipse/SigilBundle.java Fri Aug  6 14:14:04 2010
@@ -36,7 +36,6 @@ import java.util.jar.JarFile;
 
 import org.apache.felix.sigil.common.config.Resource;
 import org.apache.felix.sigil.common.core.BldCore;
-import org.apache.felix.sigil.common.core.util.ManifestUtil;
 import org.apache.felix.sigil.common.model.AbstractCompoundModelElement;
 import org.apache.felix.sigil.common.model.eclipse.IBundleCapability;
 import org.apache.felix.sigil.common.model.eclipse.ISigilBundle;
@@ -44,6 +43,7 @@ import org.apache.felix.sigil.common.mod
 import org.apache.felix.sigil.common.model.osgi.IPackageExport;
 import org.apache.felix.sigil.common.model.osgi.IPackageImport;
 import org.apache.felix.sigil.common.progress.IProgress;
+import org.apache.felix.sigil.common.util.ManifestUtil;
 import org.osgi.framework.Version;
 
 /**
@@ -115,10 +115,10 @@ public class SigilBundle extends Abstrac
     {
         if (location != null && location.exists())
         {
-            JarFile f = new JarFile(location);
+            JarFile f = new JarFile(location, false);
             try
             {
-                setBundleInfo(ManifestUtil.buildBundleModelElement(f.getManifest()));
+                setBundleInfo(ManifestUtil.buildBundleModelElement(f));
             }
             finally
             {

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/DirectoryHelper.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/DirectoryHelper.java?rev=982975&r1=982974&r2=982975&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/DirectoryHelper.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/DirectoryHelper.java Fri Aug  6 14:14:04 2010
@@ -23,7 +23,6 @@ import java.io.File;
 import java.io.IOException;
 import java.util.List;
 import java.util.jar.JarFile;
-import java.util.jar.Manifest;
 
 import org.apache.felix.sigil.common.core.BldCore;
 import org.apache.felix.sigil.common.model.ModelElementFactory;
@@ -31,6 +30,7 @@ import org.apache.felix.sigil.common.mod
 import org.apache.felix.sigil.common.model.eclipse.ISigilBundle;
 import org.apache.felix.sigil.common.model.osgi.IBundleModelElement;
 import org.apache.felix.sigil.common.repository.AbstractBundleRepository;
+import org.apache.felix.sigil.common.util.ManifestUtil;
 
 public class DirectoryHelper
 {
@@ -54,7 +54,7 @@ public class DirectoryHelper
                     try
                     {
                         jar = new JarFile(f, false);
-                        ISigilBundle bundle = buildBundle(repository, jar.getManifest(),
+                        ISigilBundle bundle = buildBundle(repository, jar,
                             f);
                         if (bundle != null)
                         {
@@ -96,9 +96,9 @@ public class DirectoryHelper
     }
 
     private static ISigilBundle buildBundle(AbstractBundleRepository repository,
-        Manifest manifest, File f)
+        JarFile jar, File f) throws IOException
     {
-        IBundleModelElement info = repository.buildBundleModelElement(manifest);
+        IBundleModelElement info = ManifestUtil.buildBundleModelElement(jar);
 
         ISigilBundle bundle = null;
 

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/SystemRepository.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/SystemRepository.java?rev=982975&r1=982974&r2=982975&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/SystemRepository.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/SystemRepository.java Fri Aug  6 14:14:04 2010
@@ -31,6 +31,7 @@ import org.apache.felix.sigil.common.mod
 import org.apache.felix.sigil.common.model.osgi.IPackageExport;
 import org.apache.felix.sigil.common.repository.AbstractBundleRepository;
 import org.apache.felix.sigil.common.repository.IRepositoryVisitor;
+import org.apache.felix.sigil.common.util.ManifestUtil;
 
 public class SystemRepository extends AbstractBundleRepository
 {
@@ -73,8 +74,8 @@ public class SystemRepository extends Ab
                 if (frameworkPath != null)
                 {
                     systemBundle.setLocation(frameworkPath);
-                    jar = new JarFile(frameworkPath);
-                    info = buildBundleModelElement(jar.getManifest());
+                    jar = new JarFile(frameworkPath,false);
+                    info = ManifestUtil.buildBundleModelElement(jar);
                 }
                 else
                 {

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/repository/AbstractBundleRepository.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/repository/AbstractBundleRepository.java?rev=982975&r1=982974&r2=982975&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/repository/AbstractBundleRepository.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/repository/AbstractBundleRepository.java Fri Aug  6 14:14:04 2010
@@ -24,12 +24,10 @@ import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
-import java.util.jar.Manifest;
 
 import org.apache.felix.sigil.common.core.BldCore;
 import org.apache.felix.sigil.common.core.licence.ILicenseManager;
 import org.apache.felix.sigil.common.core.licence.ILicensePolicy;
-import org.apache.felix.sigil.common.core.util.ManifestUtil;
 import org.apache.felix.sigil.common.model.IModelElement;
 import org.apache.felix.sigil.common.model.eclipse.ILibrary;
 import org.apache.felix.sigil.common.model.eclipse.ISigilBundle;
@@ -257,11 +255,6 @@ public abstract class AbstractBundleRepo
         return found.isEmpty() ? null : found.iterator().next();
     }
 
-    public IBundleModelElement buildBundleModelElement(Manifest mf)
-    {
-        return ManifestUtil.buildBundleModelElement(mf);
-    }
-
     protected ILicensePolicy findPolicy(IModelElement elem)
     {
         ILicenseManager man = BldCore.getLicenseManager();

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/util/ManifestUtil.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/util/ManifestUtil.java?rev=982975&r1=982545&r2=982975&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/util/ManifestUtil.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/util/ManifestUtil.java Fri Aug  6 14:14:04 2010
@@ -1,9 +1,13 @@
-package org.apache.felix.sigil.common.core.util;
+package org.apache.felix.sigil.common.util;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.jar.Attributes;
 import java.util.jar.Manifest;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
 
 import org.apache.felix.sigil.common.core.BldCore;
 import org.apache.felix.sigil.common.model.ModelElementFactory;
@@ -18,10 +22,34 @@ import org.osgi.framework.Version;
 
 public class ManifestUtil
 {
-    public static IBundleModelElement buildBundleModelElement(Manifest mf)
-    {
+    /**
+     * Use this utility to read Manifest from a JarFile or ZipFile
+     * due to http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6735255
+     * 
+     * @param zip
+     * @return
+     * @throws IOException
+     */
+    public static Manifest getManifest(ZipFile zip) throws IOException {
+        ZipEntry entry = zip.getEntry("META-INF/MANIFEST.MF");
+        if ( entry == null ) return null;
+        
+        InputStream in = zip.getInputStream(entry);
+        try {
+            return new Manifest(in);
+        }
+        finally {
+            // explicitly close due to 
+            // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6735255
+            in.close();
+        }
+    }
+    
+    public static IBundleModelElement buildBundleModelElement(ZipFile zip) throws IOException {
         IBundleModelElement info = null;
 
+        Manifest mf = getManifest(zip);
+        
         if (mf != null)
         {
             Attributes attrs = mf.getMainAttributes();

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/util/QuoteUtil.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/util/QuoteUtil.java?rev=982975&r1=982545&r2=982975&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/util/QuoteUtil.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/common/util/QuoteUtil.java Fri Aug  6 14:14:04 2010
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.felix.sigil.common.core.util;
+package org.apache.felix.sigil.common.util;
 
 import java.util.ArrayList;
 

Modified: felix/trunk/sigil/eclipse/core/sigil.properties
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/eclipse/core/sigil.properties?rev=982975&r1=982974&r2=982975&view=diff
==============================================================================
--- felix/trunk/sigil/eclipse/core/sigil.properties (original)
+++ felix/trunk/sigil/eclipse/core/sigil.properties Fri Aug  6 14:14:04 2010
@@ -38,8 +38,9 @@
 	org.apache.felix.sigil.common.model.eclipse, \
 	org.apache.felix.sigil.common.model.osgi, \
 	org.apache.felix.sigil.common.osgi, \
-	org.apache.felix.sigil.common.progress;version=0.9.0, \
+	org.apache.felix.sigil.common.progress, \
 	org.apache.felix.sigil.common.repository, \
+	org.apache.felix.sigil.common.util, \
 	org.apache.felix.sigil.eclipse, \
 	org.apache.felix.sigil.eclipse.install, \
 	org.apache.felix.sigil.eclipse.job, \

Modified: felix/trunk/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/OSGiInstallRepository.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/OSGiInstallRepository.java?rev=982975&r1=982974&r2=982975&view=diff
==============================================================================
--- felix/trunk/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/OSGiInstallRepository.java (original)
+++ felix/trunk/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/OSGiInstallRepository.java Fri Aug  6 14:14:04 2010
@@ -26,7 +26,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.jar.JarFile;
-import java.util.jar.Manifest;
 
 import org.apache.felix.sigil.common.core.BldCore;
 import org.apache.felix.sigil.common.model.ModelElementFactory;
@@ -35,6 +34,7 @@ import org.apache.felix.sigil.common.mod
 import org.apache.felix.sigil.common.model.osgi.IBundleModelElement;
 import org.apache.felix.sigil.common.repository.AbstractBundleRepository;
 import org.apache.felix.sigil.common.repository.IRepositoryVisitor;
+import org.apache.felix.sigil.common.util.ManifestUtil;
 import org.apache.felix.sigil.eclipse.SigilCore;
 import org.apache.felix.sigil.eclipse.install.IOSGiInstall;
 import org.eclipse.core.runtime.IPath;
@@ -106,8 +106,8 @@ public class OSGiInstallRepository exten
         JarFile jar = null;
         try
         {
-            jar = new JarFile(f);
-            ISigilBundle bundle = buildBundle(jar.getManifest(), f);
+            jar = new JarFile(f, false);
+            ISigilBundle bundle = buildBundle(jar, f);
             if (bundle != null)
             {
                 bundle.setLocation(f);
@@ -145,9 +145,9 @@ public class OSGiInstallRepository exten
         }
     }
 
-    private ISigilBundle buildBundle(Manifest manifest, File f)
+    private ISigilBundle buildBundle(JarFile jar, File f) throws IOException
     {
-        IBundleModelElement info = buildBundleModelElement(manifest);
+        IBundleModelElement info = ManifestUtil.buildBundleModelElement(jar);
 
         ISigilBundle bundle = null;