package com.buglabs.bug.ws.service; import java.io.IOException; import java.io.PrintWriter; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.osgi.framework.BundleContext; import org.osgi.service.cm.ConfigurationAdmin; import com.buglabs.services.ws.PublicWSDefinition; import com.buglabs.services.ws.PublicWSProvider; import com.buglabs.services.ws.PublicWSProvider2; /** * This is a very simple servlet that provides an HTML view of the services * availible on a BUG. * * This is registered in PublicWSAdminImpl along with WSServlet, which handles * the actual xml services * * @author brian * */ public class WSHtmlServlet extends AbstractWSServlet { private static final long serialVersionUID = -6855836987056987821L; /** * @param context <String, PublicWSProvider> * @param servicesMap map of services * @param configAdmin instance of ConfigAdmin */ public WSHtmlServlet(BundleContext context, Map<String, PublicWSProvider> servicesMap, ConfigurationAdmin configAdmin) { super(context, servicesMap, configAdmin); } /* (non-Javadoc) * @see com.buglabs.bug.ws.service.AbstractWSServlet#executeHttpMethod(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, int) */ protected void executeHttpMethod(HttpServletRequest req, HttpServletResponse resp, int reqMethod) throws ServletException, IOException { resp.setContentType("text/html"); PrintWriter writer = resp.getWriter(); writer.print("<html>\n" + "<head>\n" + " <link rel=\"shortcut icon\" href=\"favicon.ico\">\n" + " <link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\">\n" + " <title>BUG webservices</title>\n" + "</head>\n" + "<body>\n" + " <div class=\"wrapper\">\n" + " <img class=\"logo\" src=\"img/logo.gif\" alt=\"bugbeta\"/>\n" + " <div class=\"content\">\n" + " <img src=\"img/art.gif\" style=\"float:left;\">\n" + " <div class=\"words\">\n" + " <h1>Services On Your BUG</h1>\n" + " <p class=\"txt\">\n" + getServicesListAsHtml() + " </p>\n" + " <p><a href=\"/\">back to services main page</a></p>" + " </div>\n" + " </div>\n" + " </div>\n" + "</body>\n" + "</html>"); } /** * @return services as html */ private String getServicesListAsHtml() { Map<String, PublicWSProvider> servicesMap = getServiceMap(); String buffer = "<ul>"; for (Map.Entry<String, PublicWSProvider> e : servicesMap.entrySet()) { buffer += "<li>"; if (e.getValue() instanceof PublicWSProvider) { PublicWSProvider pubService = (PublicWSProvider) e.getValue(); boolean isServiceEnabled = false; try { isServiceEnabled = isServiceEnabled(getConfigurationAdmin(), pubService.getPublicName()); } catch (IOException exc) { } // service is disabled, don't a line item for it if (!isServiceEnabled) continue; buffer += "<a href=\"service/" + pubService.getPublicName() + "\"" + ">" + pubService.getPublicName() + "</a><br/>"; buffer += pubService.getDescription() + "<br/>"; buffer += "Request Methods:" + "<br/>"; PublicWSDefinition def = pubService.discover(PublicWSProvider2.GET); if (def != null) { buffer += getRequestInfo(pubService, def, "GET"); } def = pubService.discover(PublicWSProvider2.POST); if (def != null) { buffer += getRequestInfo(pubService, def, "POST"); } def = pubService.discover(PublicWSProvider2.DELETE); if (def != null) { buffer += getRequestInfo(pubService, def, "DELETE"); } def = pubService.discover(PublicWSProvider2.PUT); if (def != null) { buffer += getRequestInfo(pubService, def, "PUT"); } } else { buffer += e.getKey(); } buffer += "</li>"; } buffer += "</ul>"; return buffer; } /** * @param pubService PublicWSProvider * @param def PublicWSDefinition * @param reqType request type * @return request info */ private String getRequestInfo(PublicWSProvider pubService, PublicWSDefinition def, String reqType) { String out = "<ul><li>" + reqType + "<br/>" + "returns - " + def.getReturnType() + "<br/>"; if (def.getParameters() != null) out += "parameters -" + def.getParameters().toString(); out += "</li></ul>"; return out; } }