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);
}
}