Package org.openrdf.http.server.filters

Source Code of org.openrdf.http.server.filters.PreparedQueryResolver

/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 2009.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.http.server.filters;

import org.restlet.Context;
import org.restlet.Request;
import org.restlet.Response;
import org.restlet.Restlet;
import org.restlet.data.Form;
import org.restlet.data.Status;
import org.restlet.resource.ResourceException;
import org.restlet.routing.Filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.openrdf.http.server.helpers.RequestAtt;
import org.openrdf.http.server.helpers.ServerConnection;
import org.openrdf.http.server.helpers.ServerUtil;
import org.openrdf.query.Query;

/**
* Filter that resolves a {@link #QUERY_ID_PARAM query identifier} to a
* {@link Query} object and adds this object the a request's attributes. This
* filter will produce an appropriate HTTP error when the concerning query could
* not be found.
*
* @author Arjohn Kampman
*/
public class PreparedQueryResolver extends Filter {

  public static final String QUERY_ID_PARAM = "queryID";

  public static String getQueryID(Request request) {
    return (String)request.getAttributes().get(QUERY_ID_PARAM);
  }

  private final Logger logger = LoggerFactory.getLogger(this.getClass());

  public PreparedQueryResolver(Context context, Restlet next) {
    super(context, next);
  }

  @Override
  protected int beforeHandle(Request request, Response response) {
    String queryID = getQueryID(request);
    logger.debug("{}={}", QUERY_ID_PARAM, queryID);

    ServerConnection connection = RequestAtt.getConnection(request);
    Query query = connection.getQuery(queryID);

    if (query == null) {
      response.setStatus(Status.CLIENT_ERROR_NOT_FOUND);
      return Filter.STOP;
    }

    try {
      // Parse request-specific parameters
      Form params = ServerUtil.getParameters(request);
      if (params != null) {
        QueryParser.parseQueryParameters(query, params, connection.getValueFactory());
      }

      RequestAtt.setQuery(request, query);
      return Filter.CONTINUE;
    }
    catch (ResourceException e) {
      response.setStatus(e.getStatus(), e.getMessage());
      return Filter.STOP;
    }
  }
}
TOP

Related Classes of org.openrdf.http.server.filters.PreparedQueryResolver

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.