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.kernel;
025:
026: import java.io.*;
027: import java.util.*;
028:
029: public class TempFiles {
030: protected File _dir;
031: private int minutes;
032: private Timer timer;
033:
034: /**
035: * Periodically starts a process that cleans up the temporary files
036: * every n minutes
037: *
038: */
039:
040: public TempFiles(String servletEnginePath, String path, int minutes)
041: throws Exception {
042: File p = new File(path);
043:
044: String finalPath;
045: if (p.isAbsolute())
046: finalPath = path;
047: else
048: finalPath = servletEnginePath + path;
049:
050: _dir = new File(finalPath);
051: if (!_dir.isDirectory())
052: throw new Exception("Invalid temp directory '" + finalPath
053: + "'");
054:
055: timer = new Timer();
056: timer.schedule(new RemindTask(), 0, minutes * 60 * 1000);
057: }
058:
059: public void end() {
060: timer.cancel();
061: }
062:
063: public File getDir() {
064: return _dir;
065: }
066:
067: /**
068: * Creates a temporary File
069: *
070: * @return a temporary File
071: *
072: * @throws If a file could not be created
073: *
074: */
075: public File getFile() throws IOException {
076: return getFile(".tmp");
077: }
078:
079: public File getFile(String extension) throws IOException {
080: if (!extension.startsWith("."))
081: extension = "." + extension;
082:
083: File tf = File.createTempFile("temp", extension, getDir());
084: tf.deleteOnExit();
085: return tf;
086: }
087:
088: // Delete all the files in the temp directory
089: class RemindTask extends TimerTask {
090:
091: public void run() {
092: for (File f : getDir().listFiles()) {
093: Calendar last = Calendar.getInstance();
094: last.add(Calendar.MINUTE, -minutes);
095: // Only files whose name start with ".temp" are deleted
096: if (f.getName().startsWith("temp")
097: && last.getTime().after(
098: new Date(f.lastModified())))
099: f.delete();
100: }
101: }
102: }
103:
104: }
|