/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.script.app; import static java.lang.String.format; import org.geoserver.rest.RestletException; import org.geoserver.script.ScriptManager; import org.geoserver.script.rest.FinderSupport; import org.restlet.data.Request; import org.restlet.data.Response; import org.restlet.data.Status; import org.restlet.resource.Resource; /** * Finder for app scripts. * <p> * Handles requests of the form /apps/[<app>]. * </p> * @author Justin Deoliveira, OpenGeo * */ public class AppFinder extends FinderSupport { public AppFinder(ScriptManager scriptMgr) { super(scriptMgr); } @Override protected Resource doFindTarget(Request request, Response response) { String app = (String) request.getAttributes().get("app"); if (app == null) { return new AppListResource(scriptMgr, request, response); } org.geoserver.platform.resource.Resource appDir; try { appDir = scriptMgr.app(app); } catch (IllegalStateException e) { throw new RestletException(format("Error looking up app directory %s", app), Status.SERVER_ERROR_INTERNAL, e); } if (appDir == null) { throw new RestletException(format("No such app %s", app), Status.CLIENT_ERROR_NOT_FOUND); } //look for main script org.geoserver.platform.resource.Resource main = scriptMgr.findAppMainScript(appDir); if (main == null) { throw new RestletException(format("No main file for app %s", app), Status.CLIENT_ERROR_NOT_FOUND); } return new AppResource(main, scriptMgr, request, response); } }