/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jena.fuseki.mgt; import javax.servlet.http.HttpServletRequest ; import javax.servlet.http.HttpServletResponse ; import org.apache.jena.atlas.json.JsonValue ; import org.apache.jena.fuseki.servlets.HttpAction ; import org.apache.jena.fuseki.servlets.ServletOps ; import org.apache.jena.web.HttpSC ; /** Base for actions that are container and also have action on items */ public abstract class ActionContainerItem extends ActionCtl { private static final long serialVersionUID = 2824158659375951964L; public ActionContainerItem() { super() ; } // Redirect operations so they dispatch to perform(HttpAction) @Override final protected void doGet(HttpServletRequest request, HttpServletResponse response) { doCommon(request, response); } @Override final protected void doPost(HttpServletRequest request, HttpServletResponse response) { doCommon(request, response); } @Override final protected void doHead(HttpServletRequest request, HttpServletResponse response) { doCommon(request, response); } @Override final protected void doDelete(HttpServletRequest request, HttpServletResponse response) { doCommon(request, response); } @Override final protected void perform(HttpAction action) { String method = action.request.getMethod() ; if ( method.equals(METHOD_GET) ) execGet(action) ; else if ( method.equals(METHOD_POST) ) execPost(action) ; else if ( method.equals(METHOD_DELETE) ) execDelete(action) ; else ServletOps.error(HttpSC.METHOD_NOT_ALLOWED_405) ; } protected void execGet(HttpAction action) { JsonValue v ; if ( isContainerAction(action) ) v = execGetContainer(action) ; else v = execGetItem(action) ; ServletOps.sendJsonReponse(action, v); } /** GET request on the container - respond with JSON, or null for plain 200 */ protected abstract JsonValue execGetContainer(HttpAction action) ; /** GET request on an item in the container - repond with JSON, or null for plain 200 */ protected abstract JsonValue execGetItem(HttpAction action) ; protected void execPost(HttpAction action) { JsonValue v ; if ( isContainerAction(action) ) v = execPostContainer(action) ; else v = execPostItem(action) ; ServletOps.sendJsonReponse(action, v); } /** POST request on the container - respond with JSON, or null for plain 200 */ protected abstract JsonValue execPostContainer(HttpAction action) ; /** POST request on an item in the container - respond with JSON, or null for plain 200 */ protected abstract JsonValue execPostItem(HttpAction action) ; /** DELETE request */ protected void execDelete(HttpAction action) { if ( isContainerAction(action) ) execDeleteContainer(action) ; else execDeleteItem(action) ; ServletOps.success(action) ; } /** DELETE request on an item in the container */ protected void execDeleteContainer(HttpAction action) { ServletOps.errorMethodNotAllowed(METHOD_DELETE, "DELETE applied to a container") ; } /** DELETE request on an item in the container */ protected void execDeleteItem(HttpAction action) { ServletOps.errorMethodNotAllowed(METHOD_DELETE) ; } }