Package org.geoserver.python.datastore

Source Code of org.geoserver.python.datastore.PythonDataStore

package org.geoserver.python.datastore;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.geotools.data.Query;
import org.geotools.data.store.ContentDataStore;
import org.geotools.data.store.ContentEntry;
import org.geotools.feature.NameImpl;
import org.opengis.feature.type.Name;
import org.python.core.PyList;
import org.python.core.PyMethod;
import org.python.core.PyObject;

/**
* A DataStore implementation that adapts a geoscript workspace.
*
* @author Justin Deoliveira, OpenGeo
*
*/
public class PythonDataStore extends ContentDataStore {

    Map<String,Object> parameters;
    PythonDataStoreAdapter adapter;
   
    public PythonDataStore(Map<String,Object> parameters, PythonDataStoreAdapter adapter) {
        this.parameters = parameters;
        this.adapter = adapter;
    }
   
    @Override
    protected PythonFeatureStore createFeatureSource(ContentEntry entry) throws IOException {
        return new PythonFeatureStore(entry, Query.ALL);
    }

    @Override
    protected List<Name> createTypeNames() throws IOException {
        PyObject workspace = getWorkspace();
       
        PyMethod layers = (PyMethod) workspace.__findattr__("layers");
        if (layers == null) {
            layers = (PyMethod) workspace.__findattr__("keys");
        }
        PyList result = (PyList) layers.__call__();
       
        List<Name> typeNames = new ArrayList<Name>();
        for (Object o : result.toArray()) {
            typeNames.add(new NameImpl(o.toString()));
        }
        return typeNames;
    }

    PyObject getWorkspace() {
        return adapter.getWorkspace(parameters);
    }
}
TOP

Related Classes of org.geoserver.python.datastore.PythonDataStore

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.