1 package jp.sourceforge.stigmata.result.history;
7 import java.io.BufferedReader;
9 import java.io.FileReader;
10 import java.io.IOException;
11 import java.util.HashMap;
12 import java.util.Iterator;
13 import java.util.LinkedHashSet;
17 import jp.sourceforge.stigmata.BirthmarkContext;
18 import jp.sourceforge.stigmata.BirthmarkEnvironment;
19 import jp.sourceforge.stigmata.BirthmarkStoreTarget;
20 import jp.sourceforge.stigmata.ExtractionResultSet;
21 import jp.sourceforge.stigmata.spi.ExtractedBirthmarkSpi;
25 * @author Haruaki Tamada
27 public class ExtractedBirthmarkServiceManager{
28 private ExtractedBirthmarkServiceManager parent;
29 private Map<BirthmarkStoreTarget, ExtractedBirthmarkSpi> targets = new HashMap<BirthmarkStoreTarget, ExtractedBirthmarkSpi>();
30 private BirthmarkEnvironment env;
32 public ExtractedBirthmarkServiceManager(BirthmarkEnvironment env){
37 public ExtractedBirthmarkServiceManager(BirthmarkEnvironment env, ExtractedBirthmarkServiceManager parent){
42 public ExtractionResultSet createDefaultResultSet(BirthmarkContext context){
43 BirthmarkStoreTarget bst = context.getStoreTarget();
45 String type = env.getProperty("birthmark.store.target");
49 bst = BirthmarkStoreTarget.valueOf(type);
52 bst = BirthmarkStoreTarget.XMLFILE;
55 ExtractedBirthmarkSpi service = findService(bst);
57 return service.createResultSet(context);
60 public ExtractedBirthmarkHistory getHistory(String id){
61 ExtractedBirthmarkHistory history = null;
63 history = parent.getHistory(id);
66 int index = id.indexOf(":");
67 String type = id.substring(0, index);
68 BirthmarkStoreTarget bst = BirthmarkStoreTarget.valueOf(type);
69 String path = id.substring(index + 1);
71 ExtractedBirthmarkSpi service = findService(bst);
73 history = service.getHistory(path);
79 public synchronized String[] getHistoryIds(){
80 Set<String> values = new LinkedHashSet<String>();
82 for(String id: parent.getHistoryIds()){
86 addValuesFromProperty(values);
87 addValuesFromSystemFile(values);
89 char separator = File.separatorChar;
91 "XMLFILE:" + BirthmarkEnvironment.getStigmataHome()
92 + separator + "extracted_birthmarks"
94 return values.toArray(new String[values.size()]);
97 private synchronized ExtractedBirthmarkSpi findService(BirthmarkStoreTarget bst){
98 ExtractedBirthmarkSpi spi = targets.get(bst);
102 spi = targets.get(bst);
107 private synchronized void refreshService(){
108 for(Iterator<ExtractedBirthmarkSpi> i = env.lookupProviders(ExtractedBirthmarkSpi.class); i.hasNext(); ){
109 ExtractedBirthmarkSpi service = i.next();
110 targets.put(service.getTarget(), service);
114 private void addValuesFromSystemFile(Set<String> values){
115 File file = new File(BirthmarkEnvironment.getStigmataHome(), "storelocations.txt");
118 BufferedReader in = new BufferedReader(new FileReader(file));
120 while((line = in.readLine()) != null){
123 } catch(IOException e){
128 private void addValuesFromProperty(Set<String> values){
129 String path = env.getProperty("extracted.birthmark.store.locations");
131 addValuesFromProperty(values);
132 String[] paths = path.split(", *");
133 for(String p: paths){