/******************************************************************************* * Copyright (C) 2014 The Calrissian Authors * * 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.calrissian.restdoclet.writer.simple; import org.calrissian.restdoclet.Configuration; import org.calrissian.restdoclet.model.ClassDescriptor; import org.calrissian.restdoclet.model.Endpoint; import org.calrissian.restdoclet.model.PathVar; import org.calrissian.restdoclet.model.QueryParam; import java.io.*; import java.util.Collection; import static org.calrissian.restdoclet.util.CommonUtils.*; public class SimpleHtmlWriter implements org.calrissian.restdoclet.writer.Writer { public static final String OUTPUT_OPTION_NAME = "legacy"; private static final String DEFAULT_STYLESHEET = "default-stylesheet.css"; @Override public void write(Collection<ClassDescriptor> classDescriptors, Configuration config) throws IOException { if (config.isdefaultStyleSheet()) generateStyleSheet(config); writeHtml(classDescriptors, config); } private static void generateStyleSheet(Configuration config) throws IOException { InputStream in = null; OutputStream out = null; try { in = Thread.currentThread().getContextClassLoader().getResourceAsStream(DEFAULT_STYLESHEET); out = new FileOutputStream(new File(config.getStyleSheet())); copy(in, out); } finally { close(in, out); } } private static void writeHtml(Collection<ClassDescriptor> classDescriptors, Configuration config) throws IOException { PrintWriter out = null; try { out = new PrintWriter(new File(".", "index.html")); out.println("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"no\" ?>"); out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\""); out.println(" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"); out.println("<html xmlns=\"http://www.w3.org/1999/xhtml\">"); out.println("<head>"); out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\" />"); out.println("<title>"+ config.getDocumentTitle() +"</title>"); out.println("<link rel='stylesheet' type='text/css' href=' " + config.getStyleSheet() + "'/>"); out.println("</head>"); out.println("<body>"); out.println("<div id=\"wrapper\">"); out.println("<div id=\"container\">"); out.println("<h1>"+ config.getDocumentTitle() +"</h1>"); out.println("<hr />"); for (ClassDescriptor classDescriptor : classDescriptors) { out.println("<div id='" + classDescriptor.getName().replace(" ", "_") + "'>"); out.println("<h3>" + classDescriptor.getName() + "</h3>" ); out.print("<div class=\"bean_description\">" + classDescriptor.getDescription() + "</div>"); for (Endpoint endpoint: classDescriptor.getEndpoints()) { out.println("<table class=\"endpoint\">"); out.println("<colgroup>"); out.println("<col style=\"width: 10%;\" />"); out.println("<col style=\"width: 90%;\" />"); out.println("</colgroup>"); out.println("<tr>"); out.println("<th>Method</th>"); out.println("<th>Path</th>"); out.println("</tr>"); out.println("<tr>"); out.println("<td class=\"field_format\">" + endpoint.getHttpMethod() + "</td>"); out.println("<td class=\"field_format\">" + endpoint.getPath() + "</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<th colspan=\"2\">REST Point Information</th>"); out.println("</tr>"); out.println("<tr>"); out.println("<td colspan=\"2\">"); if (!isEmpty(endpoint.getPathVars())) { out.println("<div class=\"info_title\">Path Variables</div>"); out.println("<table width=\"100%\" class=\"list\">"); for (PathVar pathVar : endpoint.getPathVars()) { out.println("<tr>"); out.println("<td class=\"code_format\">" + pathVar.getName() + "</td>"); out.println("<td class=\"descr_format\">" + pathVar.getDescription() + "</td>"); out.println("</tr>"); } out.println("</table>"); } if (!isEmpty(endpoint.getQueryParams())) { out.println("<div class=\"info_title\">Query Parameters</div>"); out.println("<table width=\"100%\" class=\"list\">"); for (QueryParam queryParam : endpoint.getQueryParams()) { out.println("<tr>"); out.println("<td class=\"code_format\">" + queryParam.getName() + (queryParam.isRequired() ? " (required)" : "") + "</td>"); out.println("<td class=\"descr_format\">" + queryParam.getDescription() + "</td>"); out.println("</tr>"); } out.println("</table>"); } if (endpoint.getRequestBody() != null && !isEmpty(endpoint.getRequestBody().getDescription())) { out.println("<div class=\"info_title\">Request Body</div>"); out.println("<table width=\"100%\" class=\"list\">"); out.println("<tr>"); out.println("<td class=\"code_format\">" + endpoint.getRequestBody().getName() + "</td>"); out.println("<td class=\"descr_format\">" + endpoint.getRequestBody().getDescription() + "</td>"); out.println("</tr>"); out.println("</table>"); } if (!isEmpty(endpoint.getConsumes())) { out.println("<div class=\"info_title\">Consumes</div>"); out.println("<table width=\"100%\" class=\"list\">"); for (String acceptType : endpoint.getConsumes()) { out.println("<tr>"); out.println("<td class=\"code_format\">" + acceptType + "</td>"); out.println("</tr>"); } out.println("</table>"); } if (!isEmpty(endpoint.getProduces())) { out.println("<div class=\"info_title\">Produces</div>"); out.println("<table width=\"100%\" class=\"list\">"); for (String outputType : endpoint.getProduces()) { out.println("<tr>"); out.println("<td class=\"code_format\">" + outputType + "</td>"); out.println("</tr>"); } out.println("</table>"); } out.println("<div class=\"info_title\">Description</div>"); out.println("<div class=\"info_text\">" + endpoint.getDescription() + "</div>"); out.println("</td>"); out.println("</tr>"); out.println("</table>"); } out.println("</div>"); out.println("<hr />"); } out.println("</div>"); out.println("</div>"); out.println("</body>"); out.println("</html>"); } finally { close(out); } } }