Package org.geowebcache.rest.filter

Source Code of org.geowebcache.rest.filter.FilterUpdateRestlet

/**
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  You should have received a copy of the GNU Lesser General Public License
*  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*
* @author Arne Kepp, OpenGeo, Copyright 2009
*/
package org.geowebcache.rest.filter;

import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;

import org.geowebcache.filter.request.RequestFilter;
import org.geowebcache.layer.TileLayer;
import org.geowebcache.layer.TileLayerDispatcher;
import org.geowebcache.rest.GWCRestlet;
import org.geowebcache.rest.RestletException;
import org.geowebcache.rest.config.XMLConfiguration;
import org.restlet.data.MediaType;
import org.restlet.data.Method;
import org.restlet.data.Request;
import org.restlet.data.Response;
import org.restlet.data.Status;

public class FilterUpdateRestlet extends GWCRestlet {

    private TileLayerDispatcher tld;

    public FilterUpdateRestlet(TileLayerDispatcher tld) {
        this.tld = tld;
    }

    public void handle(Request request, Response response) {
        Method met = request.getMethod();
        try {
            if (met.equals(Method.POST)) {
                doPost(request, response);
            } else {
                throw new RestletException("Method not allowed",
                        Status.CLIENT_ERROR_METHOD_NOT_ALLOWED);
            }
        } catch (RestletException re) {
            response.setEntity(re.getRepresentation());
            response.setStatus(re.getStatus());
        } catch (IOException ioe) {
            response.setEntity("Encountered IO error " + ioe.getMessage(), MediaType.TEXT_PLAIN);
            response.setStatus(Status.SERVER_ERROR_INTERNAL);
        }
    }

    public void doPost(Request req, Response resp) throws RestletException, IOException {
        String filterName = (String) req.getAttributes().get("filterName");
        String updateType = (String) req.getAttributes().get("updateType");

        Iterator<TileLayer> lIter = tld.getLayerList().iterator();

        RequestFilter filter = null;

        TileLayer tl = null;

        while (lIter.hasNext() && filter == null) {
            tl = lIter.next();

            Iterator<RequestFilter> fIter = tl.getRequestFilters().iterator();
            while (fIter.hasNext() && filter == null) {
                RequestFilter cFilter = fIter.next();
                if (cFilter.getName().equals(filterName)) {
                    filter = cFilter;
                }
            }
        }

        // Check that we have found a filter and that it's the correct type
        if (filter == null) {
            throw new RestletException("No filter by the name " + filterName + " was found.",
                    Status.CLIENT_ERROR_BAD_REQUEST);
        }

        if (updateType.equalsIgnoreCase("xml")) {
            // Parse the input using XStream
            InputStream input = req.getEntity().getStream();
            XmlFilterUpdate fu = XMLConfiguration.parseXMLFilterUpdate(input);

            fu.runUpdate(filter, tl);

        } else if (updateType.equalsIgnoreCase("zip")) {
            ZipFilterUpdate fu = new ZipFilterUpdate(req.getEntity().getStream());

            fu.runUpdate(filter, tl);
        } else {
            throw new RestletException("Unknow update type " + updateType + "\n",
                    Status.CLIENT_ERROR_BAD_REQUEST);
        }

        resp.setEntity("Filter update completed, no problems encountered.\n", MediaType.TEXT_PLAIN);
        resp.setStatus(Status.SUCCESS_OK);
    }
}
TOP

Related Classes of org.geowebcache.rest.filter.FilterUpdateRestlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.