1 /*** 2 * Created on 2005-02-27 3 * @author Philippe Lefebvre 4 */ 5 package net.sf.xtract.caching; 6 7 import java.io.File; 8 import java.util.concurrent.Callable; 9 import java.util.concurrent.ExecutionException; 10 import java.util.concurrent.ExecutorService; 11 import java.util.concurrent.Executors; 12 import java.util.concurrent.Future; 13 14 import javax.xml.parsers.DocumentBuilder; 15 import javax.xml.parsers.DocumentBuilderFactory; 16 17 import net.sf.xtract.DocumentCache.Entry; 18 19 import org.w3c.dom.Document; 20 21 /*** 22 * TODO Write javadoc for 23 */ 24 public class LazyEntry implements Entry { 25 26 private final static DocumentBuilderFactory mDocumentBuilderFactory = DocumentBuilderFactory.newInstance(); 27 private final static ExecutorService mExecutor = Executors.newCachedThreadPool(); 28 29 private Future<Entry> mEntry; 30 31 public LazyEntry(final File pFile) { 32 Callable<Entry> lCreator = new Callable<Entry>() { 33 public Entry call() throws Exception { 34 Entry lResult; 35 DocumentBuilder lBuilder = mDocumentBuilderFactory.newDocumentBuilder(); 36 Document lDocument = lBuilder.parse(pFile); 37 lResult = new RealEntry(pFile, lDocument); 38 return lResult; 39 } 40 }; 41 mEntry = mExecutor.submit(lCreator); 42 } 43 44 public synchronized long getTimestamp() throws InterruptedException, ExecutionException { 45 Entry lEntry = mEntry.get(); 46 return lEntry.getTimestamp(); 47 } 48 49 public synchronized Document getDocument() throws InterruptedException, ExecutionException { 50 Entry lEntry = mEntry.get(); 51 return lEntry.getDocument(); 52 } 53 54 public File getFile() throws InterruptedException, ExecutionException { 55 Entry lEntry = mEntry.get(); 56 return lEntry.getFile(); 57 } 58 59 }