/* * Copyright 1999-2008 University of Chicago * * Licensed 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.nimbustools.metadataserver.defaults; import org.mortbay.jetty.handler.AbstractHandler; import org.mortbay.jetty.Request; import org.mortbay.jetty.HttpConnection; import org.nimbustools.api.services.metadata.MetadataServer; import org.nimbustools.api.services.metadata.MetadataServerException; import org.nimbustools.api.services.metadata.MetadataServerUnauthorizedException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletException; import java.io.IOException; public class MetadataRequestHandler extends AbstractHandler { // ------------------------------------------------------------------------- // INSTANCE VARIABLES // ------------------------------------------------------------------------- protected final MetadataServer metadataServer; // ------------------------------------------------------------------------- // CONSTRUCTORS // ------------------------------------------------------------------------- public MetadataRequestHandler(MetadataServer server) { if (server == null) { throw new IllegalArgumentException("metadata server may not be null"); } this.metadataServer = server; } // ------------------------------------------------------------------------- // implements MetadataRequestHandler // ------------------------------------------------------------------------- public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) throws IOException, ServletException { if (target == null) { throw new IllegalArgumentException("target may not be null"); } String remoteAddress = request.getRemoteAddr(); if (remoteAddress == null) { throw new IllegalArgumentException("remoteAddress may not be null"); } final Request base_request = request instanceof Request? (Request)request : HttpConnection.getCurrentConnection().getRequest(); base_request.setHandled(true); final String responseString; try { responseString = this.metadataServer.getResponse(target, remoteAddress); } catch (MetadataServerException e) { notok(response, e.getClientVisibleMessage()); return; } catch (MetadataServerUnauthorizedException e) { noauthz(response); return; } ok(response, responseString); } // ------------------------------------------------------------------------- // PRIVATE // ------------------------------------------------------------------------- private static void ok(HttpServletResponse response, String msg) throws IOException { response.setContentType("text/plain"); response.setStatus(HttpServletResponse.SC_OK); if (msg != null) { response.getWriter().println(msg); } else { response.getWriter().println(); } } private static void notok(HttpServletResponse response, String msg) throws IOException { if (msg != null) { response.sendError(HttpServletResponse.SC_NOT_FOUND, msg); } else { response.sendError(HttpServletResponse.SC_NOT_FOUND, "Unknown error."); } } private static void noauthz(HttpServletResponse response) throws IOException { response.setStatus(HttpServletResponse.SC_FORBIDDEN); } }