1 package org.opendaylight.controller.swaggerui;
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.io.InputStreamReader;
7 import java.io.PrintWriter;
9 import javax.servlet.ServletException;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
17 import com.google.gson.JsonElement;
18 import com.google.gson.JsonObject;
19 import com.google.gson.JsonParser;
22 * Servlet implementation class BasePathModifierServlet
24 public class BasePathModifierServlet extends HttpServlet {
25 private static final long serialVersionUID = 1L;
26 private static final Logger logger = LoggerFactory
27 .getLogger(BasePathModifierServlet.class);
29 private static final String API_BASE_PATH_SUFFIX = "/swagger/apis";
30 private static final String BASE_PATH_KEY = "basePath";
33 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
37 protected void doGet(HttpServletRequest request,
38 HttpServletResponse response) throws ServletException, IOException {
39 String resourcePath = request.getRequestURI().substring(
40 request.getContextPath().length());
41 logger.debug("Locating resource : {}.", resourcePath);
42 JsonObject jsonObject = null;
45 InputStream stream = this.getServletContext().getResourceAsStream(
48 response.sendError(HttpServletResponse.SC_NOT_FOUND,
49 "API / API Listing not found");
52 BufferedReader streamReader = new BufferedReader(
53 new InputStreamReader(stream, "UTF-8"));
54 StringBuilder responseStrBuilder = new StringBuilder();
57 while ((inputStr = streamReader.readLine()) != null)
58 responseStrBuilder.append(inputStr);
60 JsonElement jelement = new JsonParser().parse(responseStrBuilder
62 jsonObject = jelement.getAsJsonObject();
64 String basePath = jsonObject.get(BASE_PATH_KEY).getAsString();
66 // construct base path
67 StringBuilder requestURL = new StringBuilder();
69 requestURL.append(request.isSecure() ? "https://" : "http://")
70 .append(request.getServerName()).append(":")
71 .append(request.getServerPort());
72 if (!basePath.contains(requestURL)) {
74 if (basePath.contains(API_BASE_PATH_SUFFIX)) {
75 endPath = basePath.substring(basePath
76 .indexOf(API_BASE_PATH_SUFFIX));
78 basePath = requestURL + endPath;
79 logger.debug("Modified Base Path is {}", basePath);
80 jsonObject.addProperty(BASE_PATH_KEY, basePath);
82 } catch (Exception ex) {
83 logger.error("Error processing JSON data", ex);
84 response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
85 "Could not read API Listing or APIs");
90 response.setContentType("application/json");
91 PrintWriter out = response.getWriter();
92 out.print(jsonObject);
94 } catch (Exception ex) {
95 logger.error("Error while writing response", ex);
96 response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
97 "Internal Error while writing resposne");