001: //=============================================================================
002: //=== Copyright (C) 2001-2007 Food and Agriculture Organization of the
003: //=== United Nations (FAO-UN), United Nations World Food Programme (WFP)
004: //=== and United Nations Environment Programme (UNEP)
005: //===
006: //=== This program is free software; you can redistribute it and/or modify
007: //=== it under the terms of the GNU General Public License as published by
008: //=== the Free Software Foundation; either version 2 of the License, or (at
009: //=== your option) any later version.
010: //===
011: //=== This program is distributed in the hope that it will be useful, but
012: //=== WITHOUT ANY WARRANTY; without even the implied warranty of
013: //=== MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: //=== General Public License for more details.
015: //===
016: //=== You should have received a copy of the GNU General Public License
017: //=== along with this program; if not, write to the Free Software
018: //=== Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
019: //===
020: //=== Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2,
021: //=== Rome - Italy. email: geonetwork@osgeo.org
022: //==============================================================================
023:
024: package org.wfp.vam.intermap.http.cache;
025:
026: import java.io.*;
027:
028: import java.util.Calendar;
029: import java.util.Date;
030: import java.util.HashMap;
031: import java.util.Map;
032: import org.apache.commons.httpclient.Header;
033: import org.wfp.vam.intermap.kernel.TempFiles;
034:
035: public class HttpGetFileCache implements HttpCache {
036: // private File directory;
037: private static Map uriHt = new HashMap();
038: private static Map headersHt = new HashMap();
039: private TempFiles tf;
040:
041: // constructor
042: public HttpGetFileCache(String servletEnginePath, String cacheDir,
043: int expireTime) throws Exception {
044: tf = new TempFiles(servletEnginePath, cacheDir, expireTime + 5);
045: }
046:
047: public void put(String uri, byte[] response, Header[] headers)
048: throws IOException {
049: File f = tf.getFile();
050: ByteArrayInputStream is = new ByteArrayInputStream(response);
051: FileOutputStream os = new FileOutputStream(f);
052:
053: byte[] buf = new byte[1024];
054: for (int nRead; (nRead = is.read(buf, 0, 1024)) > 0;)
055: os.write(buf, 0, nRead);
056:
057: uriHt.put(uri, f.getAbsolutePath());
058: headersHt.put(uri, headers);
059: }
060:
061: public void put(String uri, InputStream is, Header[] headers)
062: throws IOException {
063: File f = tf.getFile();
064: FileOutputStream os = new FileOutputStream(f);
065:
066: byte[] buf = new byte[1024];
067: for (int nRead; (nRead = is.read(buf, 0, 1024)) > 0;)
068: os.write(buf, 0, nRead);
069:
070: uriHt.put(uri, f.getAbsolutePath());
071: headersHt.put(uri, headers);
072: }
073:
074: public byte[] get(String uri) throws IOException {
075: String name = (String) uriHt.get(uri);
076:
077: if (name == null)
078: return null;
079:
080: File f = new File(name);
081:
082: if (!f.exists())
083: return null;
084:
085: FileInputStream is = new FileInputStream(f);
086: ByteArrayOutputStream os = new ByteArrayOutputStream();
087:
088: byte[] buf = new byte[1024];
089: for (int nRead; (nRead = is.read(buf, 0, 1024)) > 0;)
090: os.write(buf, 0, nRead);
091:
092: return os.toByteArray();
093: }
094:
095: public String getResponseFilePath(String uri) {
096: return (String) uriHt.get(uri);
097: }
098:
099: public String getHeaderValue(String uri, String header) {
100: Header[] h = (Header[]) headersHt.get(uri);
101: if (h == null)
102: return null;
103:
104: for (Header loopheader : h) //int i = 0; i < h.length; i++) {
105: {
106: // System.out.println("name: " + loopheader.getName() + " = " + loopheader.getValue());
107: if (header.equalsIgnoreCase(loopheader.getName()))
108: return loopheader.getValue();
109: }
110: return null;
111: }
112:
113: public Calendar getCachedTime(String uri) {
114: String name = (String) uriHt.get(uri);
115:
116: if (name == null)
117: return null;
118:
119: File f = new File(name);
120: if (!f.exists())
121: return null;
122:
123: Date t = new Date(f.lastModified());
124: Calendar c = Calendar.getInstance();
125: c.set(t.getYear(), t.getMonth(), t.getDate(), t.getHours(), t
126: .getMinutes(), t.getSeconds());
127:
128: return c;
129: }
130:
131: public void clear() {
132: uriHt.clear();
133: }
134:
135: }
|