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;
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);
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;
*/
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());
}
}
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);
}