--- /dev/null
+package org.opendaylight.controller.swaggerui;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+/**
+ * Servlet implementation class BasePathModifierServlet
+ */
+public class BasePathModifierServlet extends HttpServlet {
+ private static final long serialVersionUID = 1L;
+ private static final Logger logger = LoggerFactory
+ .getLogger(BasePathModifierServlet.class);
+
+ private static final String API_BASE_PATH_SUFFIX = "/swagger/apis";
+ private static final String BASE_PATH_KEY = "basePath";
+
+ /**
+ * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
+ * response)
+ */
+ @Override
+ protected void doGet(HttpServletRequest request,
+ HttpServletResponse response) throws ServletException, IOException {
+ String resourcePath = request.getRequestURI().substring(
+ request.getContextPath().length());
+ logger.debug("Locating resource : {}.", resourcePath);
+ JsonObject jsonObject = null;
+ try {
+
+ InputStream stream = this.getServletContext().getResourceAsStream(
+ resourcePath);
+ if (stream == null) {
+ response.sendError(HttpServletResponse.SC_NOT_FOUND,
+ "API / API Listing not found");
+ return;
+ }
+ BufferedReader streamReader = new BufferedReader(
+ new InputStreamReader(stream, "UTF-8"));
+ StringBuilder responseStrBuilder = new StringBuilder();
+
+ String inputStr;
+ while ((inputStr = streamReader.readLine()) != null)
+ responseStrBuilder.append(inputStr);
+
+ JsonElement jelement = new JsonParser().parse(responseStrBuilder
+ .toString());
+ jsonObject = jelement.getAsJsonObject();
+
+ String basePath = jsonObject.get(BASE_PATH_KEY).getAsString();
+
+ // construct base path
+ StringBuilder requestURL = new StringBuilder();
+
+ requestURL.append(request.isSecure() ? "https://" : "http://")
+ .append(request.getServerName()).append(":")
+ .append(request.getServerPort());
+ if (!basePath.contains(requestURL)) {
+ String endPath = "";
+ if (basePath.contains(API_BASE_PATH_SUFFIX)) {
+ endPath = basePath.substring(basePath
+ .indexOf(API_BASE_PATH_SUFFIX));
+ }
+ basePath = requestURL + endPath;
+ logger.debug("Modified Base Path is {}", basePath);
+ jsonObject.addProperty(BASE_PATH_KEY, basePath);
+ }
+ } catch (Exception ex) {
+ logger.error("Error processing JSON data", ex);
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+ "Could not read API Listing or APIs");
+ return;
+ }
+
+ try {
+ response.setContentType("application/json");
+ PrintWriter out = response.getWriter();
+ out.print(jsonObject);
+ out.flush();
+ } catch (Exception ex) {
+ logger.error("Error while writing response", ex);
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+ "Internal Error while writing resposne");
+ }
+ }
+
+}