Package org.geotools.tutorial.process

Source Code of org.geotools.tutorial.process.BufferProcess

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2008, Open Source Geospatial Foundation (OSGeo)
*
*    This library 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;
*    version 2.1 of the License.
*
*    This library 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
*    Lesser General Public License for more details.
*/
package org.geotools.tutorial.process;

import java.util.HashMap;
import java.util.Map;

import org.geotools.process.ProcessFactory;
import org.geotools.process.impl.AbstractProcess;
import org.geotools.text.Text;
import org.geotools.util.NullProgressListener;
import org.opengis.util.ProgressListener;

import com.vividsolutions.jts.geom.Geometry;

/**
* Process for adding a buffer around a geometry
*
* @author gdavis
*/
class BufferProcess extends AbstractProcess {
    private boolean started = false;

    public BufferProcess(BufferFactory bufferFactory) {
        super(bufferFactory);
    }

    public ProcessFactory getFactory() {
        return factory;
    }

    public Map<String, Object> execute(Map<String, Object> input, ProgressListener monitor) {
        if (started)
            throw new IllegalStateException("Process can only be run once");
        started = true;

        if (monitor == null)
            monitor = new NullProgressListener();
        try {
            monitor.started();
            monitor.setTask(Text.text("Grabbing arguments"));
            monitor.progress(10.0f);
            Object value = input.get(BufferFactory.GEOM1.key);
            if (value == null) {
                throw new NullPointerException("geom1 parameter required");
            }
            if (!(value instanceof Geometry)) {
                throw new ClassCastException("geom1 requied Geometry, not " + value);
            }
            Geometry geom1 = (Geometry) value;

            value = input.get(BufferFactory.BUFFER.key);
            if (value == null) {
                throw new ClassCastException("geom1 requied Geometry, not " + value);
            }
            if (!(value instanceof Number)) {
                throw new ClassCastException("buffer requied number, not " + value);
            }
            Double buffer = ((Number) value).doubleValue();

            monitor.setTask(Text.text("Processing Buffer"));
            monitor.progress(25.0f);

            if (monitor.isCanceled()) {
                return null; // user has canceled this operation
            }

            Geometry resultGeom = geom1.buffer(buffer);

            monitor.setTask(Text.text("Encoding result"));
            monitor.progress(90.0f);

            Map<String, Object> result = new HashMap<String, Object>();
            result.put(BufferFactory.RESULT.key, resultGeom);
            monitor.complete(); // same as 100.0f

            return result;
        } catch (Exception eek) {
            monitor.exceptionOccurred(eek);
            return null;
        } finally {
            monitor.dispose();
        }
    }
}
TOP

Related Classes of org.geotools.tutorial.process.BufferProcess

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.