X-Git-Url: https://juplo.de/gitweb/?p=scannotation;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fscannotation%2Farchiveiterator%2FIteratorFactory.java;fp=src%2Fmain%2Fjava%2Forg%2Fscannotation%2Farchiveiterator%2FIteratorFactory.java;h=5006ea7ab119ae59f62cdee4e3e71c1c9417a223;hp=0000000000000000000000000000000000000000;hb=36e6637926203201648e7892ec6ee1240807218e;hpb=58b6663aae5313b41167d92851981ca549cbb461
diff --git a/src/main/java/org/scannotation/archiveiterator/IteratorFactory.java b/src/main/java/org/scannotation/archiveiterator/IteratorFactory.java
new file mode 100644
index 0000000..5006ea7
--- /dev/null
+++ b/src/main/java/org/scannotation/archiveiterator/IteratorFactory.java
@@ -0,0 +1,43 @@
+package org.scannotation.archiveiterator;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @author Bill Burke
+ * @version $Revision: 1 $
+ */
+public class IteratorFactory
+{
+ private static final ConcurrentHashMap registry = new ConcurrentHashMap();
+
+ static
+ {
+ registry.put("file", new FileProtocolIteratorFactory());
+ }
+
+
+ public static StreamIterator create(URL url, Filter filter) throws IOException
+ {
+ String urlString = url.toString();
+ if (urlString.endsWith("!/"))
+ {
+ urlString = urlString.substring(4);
+ urlString = urlString.substring(0, urlString.length() - 2);
+ url = new URL(urlString);
+ }
+
+
+ if (!urlString.endsWith("/"))
+ {
+ return new JarIterator(url.openStream(), filter);
+ }
+ else
+ {
+ DirectoryIteratorFactory factory = registry.get(url.getProtocol());
+ if (factory == null) throw new IOException("Unable to scan directory of protocol: " + url.getProtocol());
+ return factory.create(url, filter);
+ }
+ }
+}