FELIX-4543 : Update webconsole plugin
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1680630 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/console/HttpServicePlugin.java b/http/base/src/main/java/org/apache/felix/http/base/internal/console/HttpServicePlugin.java
index 4461d31..b2d3dc4 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/console/HttpServicePlugin.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/console/HttpServicePlugin.java
@@ -21,6 +21,8 @@
import java.io.IOException;
import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -30,6 +32,7 @@
import java.util.Map;
import javax.servlet.Servlet;
+import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -51,6 +54,7 @@
import org.osgi.service.http.runtime.dto.FailedServletDTO;
import org.osgi.service.http.runtime.dto.FilterDTO;
import org.osgi.service.http.runtime.dto.ListenerDTO;
+import org.osgi.service.http.runtime.dto.RequestInfoDTO;
import org.osgi.service.http.runtime.dto.ResourceDTO;
import org.osgi.service.http.runtime.dto.RuntimeDTO;
import org.osgi.service.http.runtime.dto.ServletContextDTO;
@@ -62,6 +66,10 @@
@SuppressWarnings("serial")
public class HttpServicePlugin extends HttpServlet
{
+ private static final String ATTR_TEST = "test";
+ private static final String ATTR_MSG = "msg";
+ private static final String ATTR_SUBMIT = "resolve";
+
private final HttpServiceRuntime runtime;
private final BundleContext context;
@@ -112,18 +120,102 @@
}
@Override
- protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws IOException
- {
- getHtml(resp);
+ protected void doPost(HttpServletRequest request,
+ HttpServletResponse response) throws ServletException, IOException {
+
+ final String test = request.getParameter(ATTR_TEST);
+ String msg = null;
+ if (test != null && test.length() > 0) {
+
+ final RequestInfoDTO dto = this.runtime.calculateRequestInfoDTO(test);
+
+ final StringBuilder sb = new StringBuilder();
+ if ( dto.servletDTO != null )
+ {
+ sb.append("Servlet: ");
+ sb.append(getValueAsString(dto.servletDTO.patterns));
+ sb.append(" (");
+ sb.append("service.id=");
+ sb.append(String.valueOf(dto.servletDTO.serviceId));
+ sb.append("), Filters: [");
+ boolean first = true;
+ for(final FilterDTO f : dto.filterDTOs)
+ {
+ if ( first )
+ {
+ first = false;
+ }
+ else
+ {
+ sb.append(", ");
+ }
+ sb.append(f.serviceId);
+ }
+ sb.append("]");
+ }
+ else if ( dto.resourceDTO != null )
+ {
+ sb.append("Resource: ");
+ sb.append(getValueAsString(dto.resourceDTO.patterns));
+ sb.append(" (");
+ sb.append("service.id=");
+ sb.append(String.valueOf(dto.resourceDTO.serviceId));
+ sb.append("), Filters: [");
+ boolean first = true;
+ for(final FilterDTO f : dto.filterDTOs)
+ {
+ if ( first )
+ {
+ first = false;
+ }
+ else
+ {
+ sb.append(", ");
+ }
+ sb.append(f.serviceId);
+ }
+ sb.append("]");
+ }
+ else
+ {
+ sb.append("<404>");
+ }
+ msg = sb.toString();
+ }
+
+ // finally redirect
+ final String path = request.getContextPath() + request.getServletPath()
+ + request.getPathInfo();
+ final String redirectTo;
+ if (msg == null) {
+ redirectTo = path;
+ } else {
+ redirectTo = path + '?' + ATTR_MSG + '=' + encodeParam(msg) + '&'
+ + ATTR_TEST + '=' + encodeParam(test);
+ }
+ response.sendRedirect(redirectTo);
}
- private void getHtml(final HttpServletResponse resp) throws IOException
+ private String encodeParam(final String value) {
+ try {
+ return URLEncoder.encode(value, "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ // should never happen
+ return value;
+ }
+ }
+
+ @Override
+ protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws IOException
{
final RuntimeDTO dto = this.runtime.getRuntimeDTO();
final PrintWriter pw = resp.getWriter();
+ printForm(pw, req.getParameter(ATTR_TEST), req.getParameter(ATTR_MSG));
+
printRuntimeDetails(pw, dto.serviceDTO);
+
for(final ServletContextDTO ctxDto : dto.servletContextDTOs )
{
printContextDetails(pw, ctxDto);
@@ -141,6 +233,66 @@
pw.println("<br/>");
}
+ private void printForm(final PrintWriter pw, final String value, final String msg)
+ {
+ pw.println("<table class='content' cellpadding='0' cellspacing='0' width='100%'>");
+
+ separatorHtml(pw);
+
+ titleHtml(
+ pw,
+ "Test Servlet Resolution",
+ "To test the servlet resolution, enter a relative URL into "
+ + "the field and click 'Resolve'.");
+
+ pw.println("<tr class='content'>");
+ pw.println("<td class='content'>Test</td>");
+ pw.print("<td class='content' colspan='2'>");
+ pw.print("<form method='post'>");
+ pw.print("<input type='text' name='" + ATTR_TEST + "' value='");
+ if (value != null) {
+ pw.print(escapeXml(value));
+ }
+ pw.println("' class='input' size='50'>");
+ pw.println(" <input type='submit' name='" + ATTR_SUBMIT
+ + "' value='Resolve' class='submit'>");
+ pw.print("</form>");
+ pw.print("</td>");
+ pw.println("</tr>");
+
+ if (msg != null) {
+ pw.println("<tr class='content'>");
+ pw.println("<td class='content'> </td>");
+ pw.print("<td class='content' colspan='2'>");
+ pw.print(escapeXml(msg));
+ pw.println("</td>");
+ pw.println("</tr>");
+ }
+ pw.println("</table>");
+ }
+
+ private void titleHtml(PrintWriter pw, String title, String description)
+ {
+ pw.println("<tr class='content'>");
+ pw.println("<th colspan='3'class='content container'>" + title
+ + "</th>");
+ pw.println("</tr>");
+
+ if (description != null) {
+ pw.println("<tr class='content'>");
+ pw.println("<td colspan='3'class='content'>" + description
+ + "</th>");
+ pw.println("</tr>");
+ }
+ }
+
+ private void separatorHtml(PrintWriter pw)
+ {
+ pw.println("<tr class='content'>");
+ pw.println("<td class='content' colspan='3'> </td>");
+ pw.println("</tr>");
+ }
+
private String getValueAsString(final Object value)
{
if ( value.getClass().isArray() )