package org.qrone.util; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.util.Map; import java.util.WeakHashMap; import org.qrone.r7.resolver.URIResolver; public abstract class XDeck<T> { private Map<URI, T> map = new WeakHashMap<URI, T>(); protected URIResolver resolver; public XDeck(URIResolver resolver) { this.resolver = resolver; resolver.addUpdateListener(new URIResolver.Listener() { @Override public void update(URI uri) { map.remove(uri); } }); } public URIResolver getResolver(){ return resolver; } /* protected boolean updated(T t, URI uri){ return resolver.updated(uri); }*/ public T compile(URI uri){ T t = map.get(uri); if(t == null){ InputStream in = null; try { in = resolver.getInputStream(uri); t = compile(uri, in, "utf8"); map.put(uri, t); } catch (Exception e) { e.printStackTrace(); }finally{ if(in != null){ try{ in.close(); }catch(IOException e){} } } } return t; } protected abstract T compile(URI uri, InputStream in, String encoding) throws Exception; }