Author: rickhall
Date: Thu Oct 25 09:20:06 2007
New Revision: 588269

URL: http://svn.apache.org/viewvc?rev=588269&view=rev
Log:
Applied patch (FELIX-410) to add support for zipped repository files.

Modified:
    
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/RepositoryImpl.java

Modified: 
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/RepositoryImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/RepositoryImpl.java?rev=588269&r1=588268&r2=588269&view=diff
==============================================================================
--- 
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/RepositoryImpl.java
 (original)
+++ 
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/RepositoryImpl.java
 Thu Oct 25 09:20:06 2007
@@ -24,6 +24,8 @@
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Arrays;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
 
 import org.apache.felix.bundlerepository.metadataparser.XmlCommonHandler;
 import org.apache.felix.bundlerepository.metadataparser.kxmlsax.KXml2SAXParser;
@@ -143,38 +145,64 @@
                         "Proxy-Authorization", "Basic " + base64);
                 }
             }
-            is = conn.getInputStream();
 
-            // Create the parser Kxml
-            XmlCommonHandler handler = new XmlCommonHandler();
-            Object factory = new Object() {
-                public RepositoryImpl newInstance()
+            if (m_url.getPath().endsWith(".zip"))
+            {
+                ZipInputStream zin = new ZipInputStream(conn.getInputStream());
+                ZipEntry entry = zin.getNextEntry();
+                while (entry != null)
                 {
-                    return RepositoryImpl.this;
+                    if (entry.getName().equals("repository.xml"))
+                    {
+                        is = zin;
+                        break;
+                    }
+                    entry = zin.getNextEntry();
                 }
-            };
+            }
+            else
+            {
+                is = conn.getInputStream();
+            } 
 
-            // Get default setter method for Repository.
-            Method repoSetter = RepositoryImpl.class.getDeclaredMethod(
-                "put", new Class[] { Object.class, Object.class });
-
-            // Get default setter method for Resource.
-            Method resSetter = ResourceImpl.class.getDeclaredMethod(
-                "put", new Class[] { Object.class, Object.class });
-
-            // Map XML tags to types.
-            handler.addType("repository", factory, Repository.class, 
repoSetter);
-            handler.addType("resource", ResourceImpl.class, Resource.class, 
resSetter);
-            handler.addType("category", CategoryImpl.class, null, null);
-            handler.addType("require", RequirementImpl.class, 
Requirement.class, null);
-            handler.addType("capability", CapabilityImpl.class, 
Capability.class, null);
-            handler.addType("p", PropertyImpl.class, null, null);
-            handler.setDefaultType(String.class, null, null);
-
-            br = new BufferedReader(new InputStreamReader(is));
-            KXml2SAXParser parser;
-            parser = new KXml2SAXParser(br);
-            parser.parseXML(handler);
+            if (is != null)
+            {
+                // Create the parser Kxml
+                XmlCommonHandler handler = new XmlCommonHandler();
+                Object factory = new Object() {
+                    public RepositoryImpl newInstance()
+                    {
+                        return RepositoryImpl.this;
+                    }
+                };
+
+                // Get default setter method for Repository.
+                Method repoSetter = RepositoryImpl.class.getDeclaredMethod(
+                    "put", new Class[] { Object.class, Object.class });
+
+                // Get default setter method for Resource.
+                Method resSetter = ResourceImpl.class.getDeclaredMethod(
+                    "put", new Class[] { Object.class, Object.class });
+
+                // Map XML tags to types.
+                handler.addType("repository", factory, Repository.class, 
repoSetter);
+                handler.addType("resource", ResourceImpl.class, 
Resource.class, resSetter);
+                handler.addType("category", CategoryImpl.class, null, null);
+                handler.addType("require", RequirementImpl.class, 
Requirement.class, null);
+                handler.addType("capability", CapabilityImpl.class, 
Capability.class, null);
+                handler.addType("p", PropertyImpl.class, null, null);
+                handler.setDefaultType(String.class, null, null);
+
+                br = new BufferedReader(new InputStreamReader(is));
+                KXml2SAXParser parser;
+                parser = new KXml2SAXParser(br);
+                parser.parseXML(handler);
+            }
+            else
+            {
+                // This should not happen.
+                throw new Exception("Unable to get input stream for 
repository.");
+            }
         }
         finally
         {
@@ -188,4 +216,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}


Reply via email to