1 package jp.sourceforge.stigmata.result.history;
3 import java.io.BufferedReader;
5 import java.io.FileReader;
6 import java.io.IOException;
7 import java.util.HashMap;
8 import java.util.Iterator;
9 import java.util.LinkedHashSet;
13 import jp.sourceforge.stigmata.BirthmarkContext;
14 import jp.sourceforge.stigmata.BirthmarkEnvironment;
15 import jp.sourceforge.stigmata.BirthmarkStoreTarget;
16 import jp.sourceforge.stigmata.ExtractionResultSet;
17 import jp.sourceforge.stigmata.spi.ExtractedBirthmarkService;
21 * @author Haruaki Tamada
23 public class ExtractedBirthmarkServiceManager{
24 private ExtractedBirthmarkServiceManager parent;
25 private Map<BirthmarkStoreTarget, ExtractedBirthmarkService> targets = new HashMap<BirthmarkStoreTarget, ExtractedBirthmarkService>();
26 private BirthmarkEnvironment env;
28 public ExtractedBirthmarkServiceManager(BirthmarkEnvironment env){
33 public ExtractedBirthmarkServiceManager(BirthmarkEnvironment env, ExtractedBirthmarkServiceManager parent){
38 public ExtractionResultSet createDefaultResultSet(BirthmarkContext context){
39 BirthmarkStoreTarget bst = context.getStoreTarget();
41 String type = env.getProperty("birthmark.store.target");
45 bst = BirthmarkStoreTarget.valueOf(type);
48 bst = BirthmarkStoreTarget.XMLFILE;
51 ExtractedBirthmarkService service = findService(bst);
53 return service.createResultSet(context);
56 public ExtractedBirthmarkHistory getHistory(String id){
57 ExtractedBirthmarkHistory history = null;
59 history = parent.getHistory(id);
62 int index = id.indexOf(":");
63 String type = id.substring(0, index);
64 BirthmarkStoreTarget bst = BirthmarkStoreTarget.valueOf(type);
65 String path = id.substring(index + 1);
67 ExtractedBirthmarkService service = findService(bst);
69 history = service.getHistory(path);
75 public synchronized String[] getHistoryIds(){
76 Set<String> values = new LinkedHashSet<String>();
78 for(String id: parent.getHistoryIds()){
82 addValuesFromProperty(values);
83 addValuesFromSystemFile(values);
85 char separator = File.separatorChar;
87 "XMLFILE:" + BirthmarkEnvironment.getStigmataHome()
88 + separator + "extracted_birthmarks"
90 return values.toArray(new String[values.size()]);
93 private synchronized ExtractedBirthmarkService findService(BirthmarkStoreTarget bst){
94 ExtractedBirthmarkService spi = targets.get(bst);
98 spi = targets.get(bst);
103 private synchronized void refreshService(){
104 for(Iterator<ExtractedBirthmarkService> i = env.lookupProviders(ExtractedBirthmarkService.class); i.hasNext(); ){
105 ExtractedBirthmarkService service = i.next();
106 targets.put(service.getTarget(), service);
110 private void addValuesFromSystemFile(Set<String> values){
111 File file = new File(BirthmarkEnvironment.getStigmataHome(), "storelocations.txt");
114 BufferedReader in = new BufferedReader(new FileReader(file));
116 while((line = in.readLine()) != null){
119 } catch(IOException e){
124 private void addValuesFromProperty(Set<String> values){
125 String path = env.getProperty("extracted.birthmark.store.locations");
127 addValuesFromProperty(values);
128 String[] paths = path.split(", *");
129 for(String p: paths){