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
28 public class ExtractedBirthmarkServiceManager{
29 private ExtractedBirthmarkServiceManager parent;
30 private Map<BirthmarkStoreTarget, ExtractedBirthmarkSpi> targets = new HashMap<BirthmarkStoreTarget, ExtractedBirthmarkSpi>();
31 private BirthmarkEnvironment env;
33 public ExtractedBirthmarkServiceManager(BirthmarkEnvironment env){
38 public ExtractedBirthmarkServiceManager(BirthmarkEnvironment env, ExtractedBirthmarkServiceManager parent){
43 public ExtractionResultSet createDefaultResultSet(BirthmarkContext context){
44 BirthmarkStoreTarget bst = context.getStoreTarget();
46 String type = env.getProperty("birthmark.store.target");
50 bst = BirthmarkStoreTarget.valueOf(type);
53 bst = BirthmarkStoreTarget.XMLFILE;
56 ExtractedBirthmarkSpi service = findService(bst);
58 return service.createResultSet(context);
61 public ExtractedBirthmarkHistory getHistory(String id){
62 ExtractedBirthmarkHistory history = null;
64 history = parent.getHistory(id);
67 int index = id.indexOf(":");
68 String type = id.substring(0, index);
69 BirthmarkStoreTarget bst = BirthmarkStoreTarget.valueOf(type);
70 String path = id.substring(index + 1);
72 ExtractedBirthmarkSpi service = findService(bst);
74 history = service.getHistory(path);
80 public synchronized String[] getHistoryIds(){
81 Set<String> values = new LinkedHashSet<String>();
83 for(String id: parent.getHistoryIds()){
87 addValuesFromProperty(values);
88 addValuesFromSystemFile(values);
90 char separator = File.separatorChar;
92 "XMLFILE:" + BirthmarkEnvironment.getStigmataHome()
93 + separator + "extracted_birthmarks"
95 return values.toArray(new String[values.size()]);
98 private synchronized ExtractedBirthmarkSpi findService(BirthmarkStoreTarget bst){
99 ExtractedBirthmarkSpi spi = targets.get(bst);
103 spi = targets.get(bst);
108 private synchronized void refreshService(){
109 for(Iterator<ExtractedBirthmarkSpi> i = env.lookupProviders(ExtractedBirthmarkSpi.class); i.hasNext(); ){
110 ExtractedBirthmarkSpi service = i.next();
111 targets.put(service.getTarget(), service);
115 private void addValuesFromSystemFile(Set<String> values){
116 File file = new File(BirthmarkEnvironment.getStigmataHome(), "storelocations.txt");
119 BufferedReader in = new BufferedReader(new FileReader(file));
121 while((line = in.readLine()) != null){
124 } catch(IOException e){
129 private void addValuesFromProperty(Set<String> values){
130 String path = env.getProperty("extracted.birthmark.store.locations");
132 addValuesFromProperty(values);
133 String[] paths = path.split(", *");
134 for(String p: paths){