View Javadoc

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  }