/** * 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 static java.lang.String.format ; import javax.servlet.http.HttpServletRequest ; import javax.servlet.http.HttpServletResponse ; import org.apache.jena.atlas.json.JsonBuilder ; import org.apache.jena.atlas.json.JsonValue ; import org.apache.jena.fuseki.Fuseki ; import org.apache.jena.fuseki.async.AsyncPool ; import org.apache.jena.fuseki.async.AsyncTask ; import org.apache.jena.fuseki.servlets.ActionBase ; import org.apache.jena.fuseki.servlets.HttpAction ; import org.apache.jena.fuseki.servlets.ServletOps ; import org.apache.jena.web.HttpSC ; public class ActionTasks extends ActionBase //ActionContainerItem { private static final long serialVersionUID = 21567238976872928L; private static AsyncPool[] pools = { AsyncPool.get() } ; public ActionTasks() { super(Fuseki.serverLog) ; } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) { doCommon(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) { doCommon(request, response); } private static String prefix = "/" ; @Override protected void execCommonWorker(HttpAction action) { String name = extractItemName(action) ; if ( name != null ) { if ( name.startsWith(prefix)) name = name.substring(prefix.length()) ; else log.warn("Unexpected task name : "+name) ; } String method = action.request.getMethod() ; if ( method.equals(METHOD_GET) ) execGet(action, name) ; else if ( method.equals(METHOD_POST) ) execPost(action, name) ; else ServletOps.error(HttpSC.METHOD_NOT_ALLOWED_405) ; } private void execGet(HttpAction action, String name) { if ( name == null ) log.info(format("[%d] Tasks", action.id)); else log.info(format("[%d] Task %s", action.id, name)); JsonValue responseBody = null ; if ( name == null ) { JsonBuilder builder = new JsonBuilder() ; builder.startArray() ; for ( AsyncPool pool : pools ) { for ( AsyncTask aTask : pool.tasks() ) { //builder.value(aTask.getTaskId()) ; descOneTask(builder, aTask) ; } } builder.finishArray() ; responseBody = builder.build(); } else { for ( AsyncPool pool : pools ) { // Assumes first is only. AsyncTask aTask = pool.getTask(name) ; if ( aTask != null ) { JsonBuilder builder = new JsonBuilder() ; descOneTask(builder, aTask); responseBody = builder.build() ; } } } if ( responseBody == null ) ServletOps.errorNotFound("Task '"+name+"' not found") ; ServletOps.setNoCache(action) ; ServletOps.sendJsonReponse(action, responseBody); } private void execPost(HttpAction action, String name) { } private static void descOneTask(JsonBuilder builder, AsyncTask aTask) { builder.startObject("SingleTask") ; builder.key(JsonConst.task).value(aTask.displayName()) ; builder.key(JsonConst.taskId).value(aTask.getTaskId()) ; if ( aTask.getStartPoint() != null ) builder.key(JsonConst.started).value(aTask.getStartPoint()) ; if ( aTask.getFinishPoint() != null ) builder.key(JsonConst.finished).value(aTask.getFinishPoint()) ; builder.finishObject("SingleTask") ; } }