org.geoserver.wps.WPSStorageHandler.java Source code

Java tutorial

Introduction

Here is the source code for org.geoserver.wps.WPSStorageHandler.java

Source

/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
 * This code is licensed under the GPL 2.0 license, available at the root
 * application directory.
 */
package org.geoserver.wps;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.naming.ConfigurationException;

import org.apache.commons.io.FileUtils;
import org.geoserver.config.GeoServerDataDirectory;
import org.geoserver.data.util.IOUtils;
import org.geoserver.ows.Dispatcher;
import org.geoserver.ows.URLMangler.URLType;
import org.geoserver.ows.util.RequestUtils;
import org.geoserver.ows.util.ResponseUtils;
import org.geoserver.wcs.response.WCSStorageCleaner;
import org.geotools.util.logging.Logging;

/**
 * Handles the temporary storage directory for WPS
 * 
 * @author Andrea Aime - GeoSolutions
 */
public class WPSStorageHandler extends TimerTask {
    Logger LOGGER = Logging.getLogger(WCSStorageCleaner.class);

    long expirationDelay;

    private File storage;

    private String baseURL;

    public WPSStorageHandler(GeoServerDataDirectory dataDirectory) throws IOException, ConfigurationException {
        // get the temporary storage for WPS
        storage = dataDirectory.findOrCreateDataDir("temp/wps");
    }

    @Override
    public void run() {
        try {
            if (!storage.exists())
                return;

            // ok, now scan for existing files there and clean up those
            // that are too old
            long now = System.currentTimeMillis();
            for (File f : storage.listFiles()) {
                if (expirationDelay > 0 && now - f.lastModified() > (expirationDelay * 1000)) {
                    if (f.isFile()) {
                        f.delete();
                    } else {
                        IOUtils.delete(f);
                    }
                }
            }
        } catch (Exception e) {
            LOGGER.log(Level.WARNING,
                    "Error occurred while trying to clean up " + "old coverages from temp storage", e);
        }
    }

    /**
     * Returns the storage directory for WPS
     * 
     * @return
     */
    public File getStorage() {
        return storage;
    }

    /**
     * The file expiration delay in seconds, a file will be deleted when it's been around more than
     * expirationDelay
     * 
     * @return
     */
    public long getExpirationDelay() {
        return expirationDelay;
    }

    public void setExpirationDelay(long expirationDelay) {
        this.expirationDelay = expirationDelay;
    }

    /**
     * Given a file inside the root storage directory returns a URL to retrieve it via
     * the file publisher
     * @param file
     * @return
     * @throws MalformedURLException 
     */
    public URL getURL(File file) throws MalformedURLException {
        // initialize default value for testing
        String baseURL = "http://geoserver/fakeroot";
        if (Dispatcher.REQUEST.get() != null) {
            baseURL = ResponseUtils.baseURL(Dispatcher.REQUEST.get().getHttpRequest());
        }

        String path = "temp/wps/" + storage.toURI().relativize(file.toURI()).getPath();
        return new URL(ResponseUtils.buildURL(baseURL, path, null, URLType.RESOURCE));
    }
}