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
+}