package org.geoserver.python.app;
import java.io.File;
import java.io.IOException;
import org.geoserver.platform.GeoServerResourceLoader;
import org.geoserver.python.Python;
import org.geoserver.rest.RestletException;
import org.restlet.Finder;
import org.restlet.data.Request;
import org.restlet.data.Response;
import org.restlet.data.Status;
import org.restlet.resource.Resource;
public class PythonFinder extends Finder {
Python jython;
GeoServerResourceLoader resourceLoader;
public PythonFinder(Python jython, GeoServerResourceLoader resourceLoader) {
this.jython = jython;
this.resourceLoader = resourceLoader;
}
@Override
public Resource findTarget(Request request, Response response) {
String script = (String) request.getAttributes().get("script") + ".py";
if (script == null) {
return new PythonListResource(jython, request, response);
}
File pyscript;
try {
pyscript = resourceLoader.find(jython.getScriptRoot(), script);
} catch (IOException e) {
throw new RestletException("Error loading script " + script,
Status.SERVER_ERROR_INTERNAL, e);
}
if (pyscript == null) {
throw new RestletException("No such script " + script, Status.CLIENT_ERROR_NOT_FOUND);
}
return new PythonResource(jython, pyscript, request, response);
}
}