11af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler/* 21af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler * Copyright (C) 2015 The Android Open Source Project 31af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler * 41af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler * Licensed under the Apache License, Version 2.0 (the "License"); 51af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler * you may not use this file except in compliance with the License. 61af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler * You may obtain a copy of the License at 71af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler * 81af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler * http://www.apache.org/licenses/LICENSE-2.0 91af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler * 101af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler * Unless required by applicable law or agreed to in writing, software 111af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler * distributed under the License is distributed on an "AS IS" BASIS, 121af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler * See the License for the specific language governing permissions and 141af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler * limitations under the License. 151af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler */ 161af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler 171af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhlerpackage com.android.ahat; 181af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler 191af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhlerimport com.sun.net.httpserver.HttpExchange; 201af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhlerimport com.sun.net.httpserver.HttpHandler; 211af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhlerimport java.io.IOException; 221af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhlerimport java.io.PrintStream; 231af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler 241af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler/** 251af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler * AhatHttpHandler. 261af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler * 271af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler * HttpHandler for AhatHandlers. 281af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler */ 291af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhlerclass AhatHttpHandler implements HttpHandler { 301af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler 311af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler private AhatHandler mAhatHandler; 321af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler 331af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler public AhatHttpHandler(AhatHandler handler) { 341af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler mAhatHandler = handler; 351af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler } 361af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler 371af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler @Override 381af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler public void handle(HttpExchange exchange) throws IOException { 391af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler exchange.getResponseHeaders().add("Content-Type", "text/html;charset=utf-8"); 401af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler exchange.sendResponseHeaders(200, 0); 411af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler PrintStream ps = new PrintStream(exchange.getResponseBody()); 421af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler try { 431af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler HtmlDoc doc = new HtmlDoc(ps, DocString.text("ahat"), DocString.uri("style.css")); 44a7f46cb9ccc34c3b9af2e3d2ad90c13f89a94829Richard Uhler doc.menu(Menu.getMenu()); 451af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler mAhatHandler.handle(doc, new Query(exchange.getRequestURI())); 461af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler doc.close(); 471af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler } catch (RuntimeException e) { 481af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler // Print runtime exceptions to standard error for debugging purposes, 491af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler // because otherwise they are swallowed and not reported. 501af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler System.err.println("Exception when handling " + exchange.getRequestURI() + ": "); 511af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler e.printStackTrace(); 521af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler throw e; 531af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler } 541af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler ps.close(); 551af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler } 561af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler} 57