/* * Copyright 2012 Artur Keska. * * 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.jaxygen.apibrowser; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.rmi.ServerException; import javax.naming.NamingException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.IOUtils; import org.jaxygen.mime.MimeTypeAnalyser; import org.jaxygen.apibrowser.pages.ClassMethodsPage; import org.jaxygen.apibrowser.pages.ClassesListPage; import org.jaxygen.apibrowser.pages.ClassesSnippestPage; import org.jaxygen.apibrowser.pages.MethodInvokerPage; import org.jaxygen.apibrowser.pages.Page; /** * * @author Artur Keska */ public class APIBrowser extends HttpServlet { private String classRegistryName = null; private String beansPathName = null; @Override public void init(ServletConfig config) throws ServletException { super.init(config); classRegistryName = config.getInitParameter("classRegistry"); beansPathName = config.getInitParameter("servicePath"); } /** * Processes requests for both HTTP * <code>GET</code> and * <code>POST</code> methods. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); try { final String resource = request.getParameter("resource"); if (resource != null) { postResource(resource, response); } else { renderApiPage(response, request); } } catch (Exception ex) { throw new ServerException("Service error", ex); } finally { //out.close(); } } private InputStream openResourceStream(String resource) { InputStream is; is = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource); return is; } private void renderApiPage(HttpServletResponse response, HttpServletRequest request) throws InvocationTargetException, IllegalArgumentException, SecurityException, ServletException, NamingException, InstantiationException, NoSuchMethodException, IllegalAccessException, ClassNotFoundException, IOException, NoSuchFieldException { response.setContentType("text/html"); Page page; final String pageName = request.getParameter("page"); if (ClassMethodsPage.NAME.equals(pageName)) { page = new ClassMethodsPage(getServletContext(), request, classRegistryName, beansPathName); } else if (MethodInvokerPage.NAME.equals(pageName)) { page = new MethodInvokerPage(getServletContext(), request, classRegistryName, beansPathName); } else if (ClassesListPage.NAME.equals(pageName)) { page = new ClassesListPage(getServletContext(), request, classRegistryName, beansPathName); } else { page = new ClassesSnippestPage(getServletContext(), request, classRegistryName, beansPathName); } response.getWriter().append(page.render()); } // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> /** * Handles the HTTP * <code>GET</code> method. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Handles the HTTP * <code>POST</code> method. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Returns a short description of the servlet. * * @return a String containing servlet description */ @Override public String getServletInfo() { return "Short description"; }// </editor-fold> private void postResource(String resource, HttpServletResponse response) throws IOException { InputStream is = null; try { is = openResourceStream(resource); if (is != null) { log("Sending resource as stream"); response.setContentType(MimeTypeAnalyser.getMimeForExtension(resource)); IOUtils.copy(is, response.getOutputStream()); } } finally { if (is != null) { is.close(); } } } }