OSDN Git Service

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