OSDN Git Service

refs #23044
authorHaruaki Tamada <tama@users.sourceforge.jp>
Mon, 6 Sep 2010 08:52:41 +0000 (17:52 +0900)
committerHaruaki Tamada <tama@users.sourceforge.jp>
Mon, 6 Sep 2010 08:52:41 +0000 (17:52 +0900)
ServiceRegistryをjava.util.ServiceLoaderに変更した.

src/main/java/jp/sourceforge/stigmata/BirthmarkEnvironment.java
src/main/java/jp/sourceforge/stigmata/Stigmata.java
src/main/java/jp/sourceforge/stigmata/birthmarks/comparators/CosineSimilarityBirthmarkComparator.java
src/main/java/jp/sourceforge/stigmata/printer/PrinterManager.java

index 7bbe30c..c7b3496 100644 (file)
@@ -13,6 +13,7 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.ServiceLoader;
 import java.util.Set;
 
 import javax.imageio.spi.ServiceRegistry;
@@ -249,7 +250,8 @@ public class BirthmarkEnvironment{
     public <T> Iterator<T> lookupProviders(Class<T> providerClass){
         Iterator<T> iterator;
         if(loader != null){
-            iterator = ServiceRegistry.lookupProviders(providerClass, loader);
+            ServiceLoader<T> services = ServiceLoader.load(providerClass, loader);
+            iterator = services.iterator();
         }
         else{
             iterator = ServiceRegistry.lookupProviders(providerClass);
index 9d662ce..3694114 100644 (file)
@@ -162,7 +162,7 @@ public class Stigmata{
             BirthmarkSpi service = i.next();
             defaultEnvironment.addService(service);
         }
-        PrinterManager.updateServices(defaultEnvironment);
+        PrinterManager.refresh(defaultEnvironment);
         exportConfigFile(BirthmarkEnvironment.getStigmataHome(), "stigmata.xml");
     }
 
index 0bfe293..ecaadc8 100644 (file)
@@ -112,6 +112,7 @@ public class CosineSimilarityBirthmarkComparator extends
     /**
      * This method is used for debugging.
      */
+    @SuppressWarnings("unused")
     private void printAll(Map<String, CountPair> pairs){
         System.out.println("----------");
         for(Map.Entry<String, CountPair> entry: pairs.entrySet()){
index 3510a6e..001f3e4 100644 (file)
@@ -7,8 +7,7 @@ package jp.sourceforge.stigmata.printer;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
-
-import javax.imageio.spi.ServiceRegistry;
+import java.util.ServiceLoader;
 
 import jp.sourceforge.stigmata.BirthmarkEnvironment;
 import jp.sourceforge.stigmata.printer.csv.CsvResultPrinterService;
@@ -21,21 +20,25 @@ import jp.sourceforge.stigmata.spi.ResultPrinterSpi;
  */
 public class PrinterManager{
     private static final PrinterManager manager = new PrinterManager();
+    private ServiceLoader<ResultPrinterSpi> serviceLoader;
 
     private Map<String, ResultPrinterSpi> formats = new HashMap<String, ResultPrinterSpi>();
 
     private PrinterManager(){
-        for(Iterator<ResultPrinterSpi> i = ServiceRegistry.lookupProviders(ResultPrinterSpi.class); i.hasNext(); ){
-            ResultPrinterSpi spi = i.next();
-            addService(spi);
-        }
+        serviceLoader = ServiceLoader.load(ResultPrinterSpi.class);
+        load();
+    }
+
+    public void refresh(){
+        serviceLoader.reload();
+        load();
     }
 
-    public static void updateServices(BirthmarkEnvironment environment){
+    public static void refresh(BirthmarkEnvironment env){
         PrinterManager instance = getInstance();
-        for(Iterator<ResultPrinterSpi> i = environment.lookupProviders(ResultPrinterSpi.class); i.hasNext(); ){
-            ResultPrinterSpi spi = i.next();
-            instance.addService(spi);
+        instance.formats.clear();
+        for(Iterator<ResultPrinterSpi> i = env.lookupProviders(ResultPrinterSpi.class); i.hasNext(); ){
+            instance.addService(i.next());
         }
     }
 
@@ -51,6 +54,14 @@ public class PrinterManager{
         return formats.get(format);
     }
 
+    private void load(){
+        formats.clear();
+        for(Iterator<ResultPrinterSpi> i = serviceLoader.iterator(); i.hasNext(); ){
+            ResultPrinterSpi spi = i.next();
+            addService(spi);
+        }
+    }
+
     private void addService(ResultPrinterSpi service){
         formats.put(service.getFormat(), service);
     }