/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
/*
* Helper function to write some basic HTML.
*/
package com.facebook.infrastructure.net.http;
/**
* Author : Avinash Lakshman ( alakshman@facebook.com) & Prashant Malik ( pmalik@facebook.com )
*/
import java.util.List;
import java.util.Set;
/**
*
* @author kranganathan
*/
public class HTMLFormatter
{
protected StringBuilder sb_ = null;
private boolean writeBody_;
public HTMLFormatter()
{
sb_ = new StringBuilder();
}
public HTMLFormatter(StringBuilder sb)
{
sb_ = sb;
}
public void startBody()
{
startBody(false, "", true, true);
}
public void startBody(boolean writeJSCallback, String jsCallbackFunction, boolean writeCSS, boolean writeBody)
{
writeBody_ = writeBody;
sb_.append("<html>\n");
if(writeCSS || writeJSCallback)
{
sb_.append("<head>\n");
if(writeJSCallback)
addJSCallback(jsCallbackFunction);
if(writeCSS)
addCSS();
sb_.append("</head>\n");
}
if(writeBody)
{
sb_.append("<body bgcolor=black>\n");
}
}
public void endBody()
{
if(writeBody_)
{
sb_.append("</body>\n");
}
sb_.append("</html>\n");
}
public void appendLine(String s)
{
sb_.append(s);
sb_.append("<br>\n");
}
public void append(String s)
{
sb_.append(s);
}
public void addJScript(String jscript)
{
append("<script language=\"text/javascript\">\n");
append(jscript + "\n");
append("</script>\n");
}
public void startTable()
{
sb_.append("<table>\n");
}
public void addHeaders(String[] sTableHeaders)
{
sb_.append("<tr style=\"border: 2px solid #333333\" >\n");
for (int i = 0; i < sTableHeaders.length; ++i)
{
sb_.append("<th><div class=\"tmenubar\">");
sb_.append("<b>" + sTableHeaders[i] + "</b>");
sb_.append("</div></th>\n");
}
sb_.append("\n</tr>\n\n");
}
public void addHeader(String sTableHeader)
{
sb_.append("<tr style=\"border: 2px solid #333333\" >\n");
sb_.append("<th><div class=\"tmenubar\">");
sb_.append("<b>" + sTableHeader + "</b>");
sb_.append("</div></th>\n");
sb_.append("\n</tr>\n\n");
}
public void startRow()
{
sb_.append("<tr style=\"border: 2px solid #333333\">\n");
}
public void addCol(String sData)
{
sb_.append("<td style=\"border: 2px solid #333333\">");
sb_.append(sData);
sb_.append("</td>");
}
public void endRow()
{
sb_.append("</tr>\n");
}
public void endTable()
{
sb_.append("</table>\n");
}
public void addCombobox(Set<String> comboBoxEntries, String htmlElementName)
{
addCombobox(comboBoxEntries, htmlElementName, -1);
}
public void addCombobox(Set<String> comboBoxEntries, String htmlElementName, int defaultSelected)
{
sb_.append(" <select name=" + htmlElementName + " size=1>\n");
if(defaultSelected == -1)
{
sb_.append(" <option value=\"\" SELECTED>Select an option \n");
}
int i = 0;
for(String colFamName : comboBoxEntries)
{
if(defaultSelected == i)
{
sb_.append(" <option value=\"" + colFamName + "\" SELECTED>" + colFamName + "\n");
}
else
{
sb_.append(" <option value=\"" + colFamName + "\">" + colFamName + "\n");
}
}
sb_.append(" </select>\n");
}
public void addDivElement(String divId, String value)
{
sb_.append("<div id = \"" + divId + "\">");
if(value != null)
sb_.append(value);
sb_.append("</div>\n");
}
public void createTable(String[] sTableHeaders, String[][] sTable)
{
if (sTable == null || sTable.length == 0)
return;
sb_.append("<table style=\"border: 2px solid #333333\">\n");
sb_.append("<tr style=\"border: 2px solid #333333\">\n");
for (int i = 0; i < sTableHeaders.length; ++i)
{
sb_.append("<td style=\"border: 2px solid #333333\">");
sb_.append("<b>" + sTableHeaders[i] + "</b>");
sb_.append("</td>\n");
}
sb_.append("\n</tr>\n\n");
for (int i = 0; i < sTable.length; ++i)
{
sb_.append("<tr style=\"border: 2px solid #333333\">\n");
for (int j = 0; j < sTable[i].length; ++j)
{
sb_.append("<td style=\"border: 2px solid #333333\">");
sb_.append(sTable[i][j]);
sb_.append("</td>\n");
}
sb_.append("\n</tr>\n\n");
}
sb_.append("</table>\n");
}
public void addJSCallback(String jsCallbackFunction)
{
sb_.append("<script type=\"text/javascript\">\n");
addJSForTabs();
sb_.append(jsCallbackFunction +"\n");
sb_.append("</script>\n");
}
public void addCSS()
{
sb_.append("<style type=\"text/css\">\n");
sb_.append("body\n");
sb_.append("{\n");
sb_.append(" color:white;\n");
sb_.append(" font-family:Arial Unicode MS,Verdana, Arial, Sans-serif;\n");
sb_.append(" font-size:10pt;\n");
sb_.append("}\n");
sb_.append(".tmenubar\n");
sb_.append("{\n");
sb_.append(" background-color:green;\n");
sb_.append(" font-family:Verdana, Arial, Sans-serif;\n");
sb_.append(" font-size:10pt;\n");
sb_.append(" font-weight:bold;\n");
sb_.append("}\n");
sb_.append("th\n");
sb_.append("{\n");
sb_.append(" color:white;\n");
sb_.append("}\n");
sb_.append("td\n");
sb_.append("{\n");
sb_.append(" color:white;\n");
sb_.append("}\n");
sb_.append("a:link {color:#CAF99B;font-size:10pt;font-weight:bold;font-family:Arial Unicode MS,Lucida-grande,Verdana}\n");
sb_.append("a:visited {color:red}\n");
sb_.append("a:hover{color:yellow;font-size:10pt;font-weight:bold;font-family:Arial Unicode MS,Lucida-grande,Verdana;background-color:green}\n");
addCSSForTabs();
sb_.append("</style>\n");
}
public void addCSSForTabs()
{
sb_.append("#header ul {\n");
sb_.append(" list-style: none;\n");
sb_.append(" padding: 0;\n");
sb_.append(" margin: 0;\n");
sb_.append(" }\n");
sb_.append("\n");
sb_.append("#header li {\n");
sb_.append(" float: left;\n");
sb_.append(" border: 1px solid #bbb;\n");
sb_.append(" border-bottom-width: 0;\n");
sb_.append(" margin: 0;\n");
sb_.append("}\n");
sb_.append("\n");
sb_.append("#header a {\n");
sb_.append(" text-decoration: none;\n");
sb_.append(" display: block;\n");
sb_.append(" background: #eee;\n");
sb_.append(" padding: 0.24em 1em;\n");
sb_.append(" color: #00c;\n");
sb_.append(" width: 8em;\n");
sb_.append(" text-align: center;\n");
sb_.append(" }\n");
sb_.append("\n");
sb_.append("#header a:hover {\n");
sb_.append(" background: #ddf;\n");
sb_.append("}\n");
sb_.append("\n");
sb_.append("#header #selected {\n");
sb_.append(" border-color: black;\n");
sb_.append("}\n");
sb_.append("\n");
sb_.append("#header #selected a {\n");
sb_.append(" position: relative;\n");
sb_.append(" top: 1px;\n");
sb_.append(" background: white;\n");
sb_.append(" color: black;\n");
sb_.append(" font-weight: bold;\n");
sb_.append("}\n");
sb_.append("\n");
sb_.append("#content {\n");
sb_.append(" border: 1px solid black;\n");
sb_.append(" visibility:hidden;\n");
sb_.append(" position:absolute;\n");
sb_.append(" top:200;\n");
sb_.append(" clear: both;\n");
sb_.append(" padding: 0 1em;\n");
sb_.append("}\n");
sb_.append("\n");
sb_.append("h1 {\n");
sb_.append(" margin: 0;\n");
sb_.append(" padding: 0 0 1em 0;\n");
sb_.append("}\n");
}
public void addJSForTabs()
{
sb_.append("var curSelectedDivId = \"one\";\n");
sb_.append("\n");
sb_.append("function selectTab(tabDivId)\n");
sb_.append("{\n");
sb_.append(" var x = document.getElementsByName(curSelectedDivId);\n");
sb_.append(" if(x[1])\n");
sb_.append(" x[1].style.visibility=\"hidden\";\n");
sb_.append(" if(x[0])\n");
sb_.append(" x[0].id=curSelectedDivId;\n");
sb_.append("\n");
sb_.append("\n");
sb_.append(" var y = document.getElementsByName(tabDivId);\n");
sb_.append(" if(y[1])\n");
sb_.append(" y[1].style.visibility=\"visible\";\n");
sb_.append(" if(y[0])\n");
sb_.append(" y[0].id = \"selected\";\n");
sb_.append("\n");
sb_.append(" curSelectedDivId = tabDivId;\n");
sb_.append("}\n");
}
public String toString()
{
return sb_.toString();
}
}