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 }