package de.unihd.dbs.uima.annotator.heideltime.resources; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.Collection; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.TreeSet; import de.unihd.dbs.uima.annotator.heideltime.utilities.Logger; public class ResourceMap implements Map<String, String> { HashMap<String, File> outerFiles = new HashMap<String, File>(); HashMap<String, String> innerFiles = new HashMap<String, String>(); @Override public void clear() { outerFiles.clear(); innerFiles.clear(); } @Override public boolean containsKey(Object key) { return outerFiles.containsKey(key) || innerFiles.containsKey(key); } @Override public boolean containsValue(Object value) { return outerFiles.containsValue(value) || innerFiles.containsValue(value); } @Override @Deprecated public Set<java.util.Map.Entry<String, String>> entrySet() { return null; } @Override @Deprecated public String get(Object key) { return null; } public InputStream getInputStream(String key) { InputStream is = null; if(outerFiles.containsKey(key)) { try { is = new FileInputStream(outerFiles.get(key)); } catch(FileNotFoundException e) { Logger.printError("File " + key + " disppeared while loading resources."); } } else if(innerFiles.containsKey(key)) { is = this.getClass().getClassLoader().getResourceAsStream(innerFiles.get(key)); } return is; } @Override public boolean isEmpty() { return outerFiles.isEmpty() && innerFiles.isEmpty(); } @Override public Set<String> keySet() { Set<String> set = new TreeSet<String>(new Comparator<String>() { @Override public int compare(String arg0, String arg1) { // identical strings are deemed identical if(arg0.equals(arg1)) return 0; /* * => Sort by length of string in descending order. * We cannot allow a 0 because TreeSet uses compareTo() * to detect identical values instead of using equals(). */ Integer lengthDiff = arg1.length() - arg0.length(); return lengthDiff == 0 ? -1 : lengthDiff; } }); set.addAll(outerFiles.keySet()); set.addAll(innerFiles.keySet()); return set; } @Override @Deprecated public String put(String key, String value) { return null; } public String putInnerFile(String key, String value) { return innerFiles.put(key, value); } public File putOuterFile(String key, File value) { return outerFiles.put(key, value); } @Override @Deprecated public void putAll(Map<? extends String, ? extends String> m) { } @Override public String remove(Object key) { // TODO Auto-generated method stub return null; } @Override public int size() { // TODO Auto-generated method stub return 0; } @Override public Collection<String> values() { // TODO Auto-generated method stub return null; } }