All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jgrasstools.gears.geotools.GearsProcessFactory Maven / Gradle / Ivy

The newest version!
/*
 * JGrass - Free Open Source Java GIS http://www.jgrass.org 
 * (C) HydroloGIS - www.hydrologis.com 
 * 
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Library General Public License as published by the Free
 * Software Foundation; either version 2 of the License, or (at your option) any
 * later version.
 * 
 * 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 Library General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU Library General Public License
 * along with this library; if not, write to the Free Foundation, Inc., 59
 * Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */
package org.jgrasstools.gears.geotools;

import java.awt.RenderingHints.Key;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.geotools.data.Parameter;
import org.geotools.feature.NameImpl;
import org.geotools.process.Process;
import org.geotools.process.ProcessFactory;
import org.jgrasstools.gears.JGrassGears;
import org.jgrasstools.gears.libs.modules.ClassField;
import org.opengis.feature.type.Name;
import org.opengis.util.InternationalString;

/**
 * ProcessFactory for the gears modules.
 * 
 * @author Andrea Antonello (www.hydrologis.com)
 */
public class GearsProcessFactory implements ProcessFactory {

    private static final String VERSION_STRING = "0.1-SNAPSHOT";
    private static final String NAMESPACE = "org.jgrasstools.gears";
    private Map> modulename2class;

    public Process create( Name name ) {
        String moduleName = name.getLocalPart();
        Class< ? > moduleClass = modulename2class.get(moduleName);
        try {
            Object processObj = moduleClass.newInstance();
            if (processObj instanceof Process) {
                return (Process) processObj;
            }
        } catch (InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }

    public InternationalString getDescription( Name name ) {
        return null;
    }

    public Set getNames() {
        Set names = new LinkedHashSet<>();
        modulename2class = JGrassGears.getInstance().moduleName2Class;
        Set modulesNames = modulename2class.keySet();
        for( String name : modulesNames ) {
            names.add(new NameImpl(NAMESPACE, name));
        }
        return names;
    }

    public Map> getParameterInfo( Name name ) {
        String moduleName = name.getLocalPart();
        Map> modulename2fields = JGrassGears.getInstance().moduleName2Fields;
        List list = modulename2fields.get(moduleName);

        Map> input = new LinkedHashMap<>();
        for( ClassField classField : list ) {
            if (classField.isIn) {
                String fieldName = classField.fieldName;
                String fieldDescription = classField.fieldDescription;
                Parameter< ? > param = new Parameter(fieldName, classField.fieldClass, fieldName, fieldDescription);
                input.put(param.key, param);
            }
        }
        return input;
    }

    public Map> getResultInfo( Name name, Map parameters ) throws IllegalArgumentException {

        String moduleName = name.getLocalPart();
        Map> modulename2fields = JGrassGears.getInstance().moduleName2Fields;
        List list = modulename2fields.get(moduleName);

        Map> output = new LinkedHashMap<>();
        for( ClassField classField : list ) {
            if (classField.isOut) {
                String fieldName = classField.fieldName;
                String fieldDescription = classField.fieldDescription;
                Parameter< ? > param = new Parameter(fieldName, classField.fieldClass, fieldName, fieldDescription);
                output.put(param.key, param);
            }
        }
        return output;
    }

    public InternationalString getTitle() {
        return null;
    }

    public InternationalString getTitle( Name name ) {
        return null;
    }

    public String getVersion( Name name ) {
        return VERSION_STRING;
    }

    public boolean supportsProgress( Name name ) {
        return true;
    }

    public boolean isAvailable() {
        return true;
    }

    public Map getImplementationHints() {
        return null;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy