OSDN Git Service

384e9f1927642b732618ceab1b671d5b000a5eae
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / printer / PrinterManager.java
1 package jp.sourceforge.stigmata.printer;
2
3 import java.util.HashMap;
4 import java.util.Iterator;
5 import java.util.Map;
6 import java.util.ServiceLoader;
7
8 import jp.sourceforge.stigmata.BirthmarkEnvironment;
9 import jp.sourceforge.stigmata.printer.csv.CsvResultPrinterService;
10 import jp.sourceforge.stigmata.spi.ResultPrinterSpi;
11
12 /**
13  *
14  * @author Haruaki TAMADA
15  */
16 public class PrinterManager{
17     private static final PrinterManager manager = new PrinterManager();
18     private ServiceLoader<ResultPrinterSpi> serviceLoader;
19
20     private Map<String, ResultPrinterSpi> formats = new HashMap<String, ResultPrinterSpi>();
21
22     private PrinterManager(){
23         serviceLoader = ServiceLoader.load(ResultPrinterSpi.class);
24         load();
25     }
26
27     public void refresh(){
28         serviceLoader.reload();
29         load();
30     }
31
32     public static void refresh(BirthmarkEnvironment env){
33         PrinterManager instance = getInstance();
34         instance.formats.clear();
35         for(Iterator<ResultPrinterSpi> i = env.lookupProviders(ResultPrinterSpi.class); i.hasNext(); ){
36             instance.addService(i.next());
37         }
38     }
39
40     public static ResultPrinterSpi getDefaultFormatService(){
41         return new CsvResultPrinterService();
42     }
43
44     public static PrinterManager getInstance(){
45         return manager;
46     }
47
48     public ResultPrinterSpi getService(String format){
49         return formats.get(format);
50     }
51
52     private void load(){
53         formats.clear();
54         for(Iterator<ResultPrinterSpi> i = serviceLoader.iterator(); i.hasNext(); ){
55             ResultPrinterSpi spi = i.next();
56             addService(spi);
57         }
58     }
59
60     private void addService(ResultPrinterSpi service){
61         formats.put(service.getFormat(), service);
62     }
63 }