package org.reldb.rel.client.parser;
import java.io.InputStream;
import org.reldb.rel.client.Heading;
public abstract class ResponseToHTML extends ResponseProcessor {
private boolean emitHeadings = true;
private boolean emitHeadingTypes = true;
public static String textToHTML(String s) {
return s.replace("<", "<").replace(">", ">").replace("\n", "<br>").replace("\t", " ");
}
public ResponseToHTML(InputStream input) {
super(input);
}
public ResponseToHTML(String input) {
super(input);
}
public void setEmitHeadings(boolean isShowHeadings) {
emitHeadings = isShowHeadings;
}
public void setEmitHeadingTypes(boolean isShowHeadingTypes) {
emitHeadingTypes = isShowHeadingTypes;
}
// Override to receive generated HTML.
public abstract void emitHTML(String s);
private boolean headingDisplayed = false;
public void beginAttributeSpec() {
if (!emitHeadings)
return;
emitHTML("<th valign=\"top\">");
}
public void attributeName(String name) {
emitHTML(name + "<br>");
}
public void typeReference(String name) {
if (emitHeadingTypes)
emitHTML("<font size=\"1\"><i>" + name + "</i></font>");
}
public void endAttributeSpec() {
if (!emitHeadings)
return;
emitHTML("</th>");
}
public void beginTupleDefinition() {
if (isEmitHeadingTypes())
emitHTML("<font size=\"1\"><i>TUPLE</i></font>");
emitHTML("<table cellpadding=\"1\" cellspacing=\"0\" width=\"100%\">");
}
public void endTupleDefinition() {
emitHTML("</table>");
}
public void beginContainerDefinition() {
if (isEmitHeadingTypes())
emitHTML("<font size=\"1\"><i>RELATION</i></font>");
emitHTML("<table cellpadding=\"1\" cellspacing=\"0\" width=\"100%\">");
}
public void endContainerDefinition() {
emitHTML("</table>");
}
public void beginHeading(String typeName) {
if (!emitHeadings)
return;
emitHTML("<tr>");
headingDisplayed = true;
}
public Heading endHeading() {
if (!emitHeadings)
return null;
emitHTML("</tr>");
return null;
}
public void beginContainer(int depth) {
if (depth == 0)
emitHTML("<table id=\"table\" cellpadding=\"1\" cellspacing=\"0\">");
else
emitHTML("<td valign=\"top\"><table cellpadding=\"1\" cellspacing=\"0\" width=\"100%\">");
}
public void endContainer(int depth) {
emitHTML("</table>");
if (depth > 0)
emitHTML("</td>");
}
public void beginTuple(int depth) {
if (headingDisplayed && depth == 1)
emitHTML("<td valign=\"top\">");
if (depth != 2) {
if (depth == 1)
emitHTML("<table cellpadding=\"1\" cellspacing=\"0\" width=\"100%\">");
else
emitHTML("<table cellpadding=\"1\" cellspacing=\"0\">");
}
emitHTML("<tr>");
}
public void endTuple(int depth) {
emitHTML("</tr>");
if (depth != 2)
emitHTML("</table>");
if (headingDisplayed && depth == 1)
emitHTML("</td>");
}
public void attributeNameInTuple(int depth, String name) {
if (!headingDisplayed) {
emitHTML("<td valign=\"top\">");
if (isEmitHeading())
emitHTML("<i>" + name + "</i> ");
}
}
public void beginScalar(int depth) {
if (depth == 0)
emitHTML("<br>");
else if (headingDisplayed)
emitHTML("<td valign=\"top\">");
}
public void endScalar(int depth) {
if (depth != 0 && headingDisplayed)
emitHTML("</td>");
}
public void beginPossrep(String name) {
emitHTML(name + "(");
}
public void endPossrep() {
emitHTML(")");
}
public void separatePossrepComponent() {
emitHTML(", ");
}
public void primitive(String value, boolean quoted) {
emitHTML(textToHTML(value));
}
public void beginOperatorDefinition() {
emitHTML("<font size=\"1\">OPERATOR </font>");
}
public void beginOperatorDefinitionParameters() {
emitHTML("<font size=\"1\">(</font>");
}
public void beginOperatorParameter() {}
public void endOperatorParameter() {}
public void emitOperatorParameterSeparator() {
emitHTML("<font size=\"1\">, </font>");
}
public void endOperatorDefinitionParameters() {
emitHTML("<font size=\"1\">)</font>");
}
public void beginOperatorReturnType() {
emitHTML("<font size=\"1\"> RETURNS </font>");
}
public void endOperatorReturnType() {}
public void endOperatorDefinition() {
}
}