package org.geoserver.python.datastore; import java.awt.RenderingHints.Key; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.geoserver.python.Python; import org.geotools.data.DataStore; import org.geotools.data.DataStoreFactorySpi; import org.geotools.data.Parameter; import org.python.core.PyList; import org.python.core.PyObject; import org.python.core.PyString; import org.python.core.PyType; public class PythonDataStoreFactory implements DataStoreFactorySpi { static Param TYPE = new Param("__type__", String.class, "", true, "python"); PythonDataStoreAdapter adapter; public PythonDataStoreFactory(PythonDataStoreAdapter adapter) { this.adapter = adapter; } public DataStore createDataStore(Map<String, Serializable> params) throws IOException { return adapter.getDataStore((Map)params); } public DataStore createNewDataStore(Map<String, Serializable> params) throws IOException { return null; } public boolean canProcess(Map<String, Serializable> params) { for (Parameter p : adapter.getParameters()) { if (!params.containsKey(p.key)) { return false; } } return "python".equals(params.get(TYPE.key)); } public String getDisplayName() { return adapter.getTitle(); } public String getDescription() { return adapter.getDescription(); } public Param[] getParametersInfo() { List<Param> params = adapter.getParameters(); Param[] info = new Param[params.size()+1]; for (int i = 0; i < params.size(); i++) { info[i] = params.get(i); } info[params.size()] = TYPE; return info; } public boolean isAvailable() { return true; } public Map<Key, ?> getImplementationHints() { return null; } }