package at.gv.egiz.param_tests.serialization.html; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Map.Entry; import at.gv.egiz.param_tests.provider.BaseSignatureTestData; import at.gv.egiz.param_tests.serialization.TestInfoSerializer; import at.gv.egiz.param_tests.testinfo.TestInfo; import at.gv.egiz.param_tests.testinfo.TestVerdict; /** * A subclass implementing some methods, which can be implemented independent of * concrete test type. It uses the Twitter-bootstrap framework, which must be * provided for the files to be correctly displayed in a browser. * * @author mtappler * * @param * the type of TestInfo which instance of this class, respectively * subclasses of it can serialize */ public abstract class HTMLSerializer extends TestInfoSerializer { @Override public String fileEnding() { return "html"; } @Override protected void writeHeader(PrintWriter pw) { BaseSignatureTestData baseData = baseTestInfo.getBaseTestData(); pw.println(""); pw.println(""); pw.println(""); pw.println("Test results for " + baseData.getTestName() + ""); pw.println(""); pw.println(""); pw.println(""); pw.println(""); pw.println(""); pw.println("
"); pw.println("
"); pw.println("

Detailed test results " + baseData.getTestName() + "

"); pw.println("
"); String basicTestDataPanel = createBasicTestData(); writePanel(pw, "Basic test data", basicTestDataPanel); } /** * Helper method which creates three tabs, one for basic test parameter, one * for the standard output and one for standard error. * * @return HTML-string defining the tabs */ protected String createBasicTestData() { BaseSignatureTestData baseData = baseTestInfo.getBaseTestData(); String basicParameterBody = createBasicParameterRepresentation(baseData); StringBuilder basicTestDataPanel = new StringBuilder(); basicTestDataPanel .append(""); basicTestDataPanel .append("
"); basicTestDataPanel .append("
"); basicTestDataPanel.append(basicParameterBody); basicTestDataPanel.append("
"); basicTestDataPanel.append("
"); basicTestDataPanel.append("
"
                + baseTestInfo.getStdOut() + "
"); basicTestDataPanel.append("
"); basicTestDataPanel.append("
"); basicTestDataPanel.append("
"
                + baseTestInfo.getStdErr() + "
"); basicTestDataPanel.append("
"); basicTestDataPanel.append("
"); return basicTestDataPanel.toString(); } /** * This method creates a definition list for basic parameters of a test. * * @param baseData * basic test parameters * @return HTML-string defining a definition list */ private String createBasicParameterRepresentation( BaseSignatureTestData baseData) { StringBuilder sb = new StringBuilder(); sb.append("
"); sb.append(createDescription("Input file", baseData.getPdfFile())); sb.append(createDescription("Output file", baseData.getOutputFile())); sb.append(createDescription("Signature profile", baseData.getProfilID())); sb.append(createDescription("Connector Type", baseData .getConnectorData().getConnectorType())); if (baseData.getConnectorData().getConnectorParameters().size() > 0) { StringBuilder connectorParameters = new StringBuilder(); connectorParameters.append("
"); for (Entry e : baseData.getConnectorData() .getConnectorParameters().entrySet()) connectorParameters.append(createDescription(e.getKey(), e.getValue())); connectorParameters.append("
"); sb.append(createDescription("Connector Parameters", connectorParameters.toString())); } sb.append(createDescription("Test Type", getTestType())); sb.append("
"); return sb.toString(); } /** * Helper for writing a bootstrap panel with some title and content. * * @param pw * PrintWriter-object to which the panel should be * written * @param panelTitle * title of the panel * @param panelBody * panel content */ protected void writePanel(PrintWriter pw, String panelTitle, String panelBody) { pw.println("
"); pw.println("
"); pw.println("

" + panelTitle + "

"); pw.println("
"); pw.println("
"); pw.println(panelBody); pw.println("
"); pw.println("
"); } @Override protected void writeTestResult(PrintWriter pw) { StringBuilder panelBody = new StringBuilder(); panelBody.append("

" + HTMLTestSummaryWriter.verdictToLabel(baseTestInfo .getVerdict()) + "

"); if (baseTestInfo.getVerdict().equals(TestVerdict.FAILED) || baseTestInfo.getVerdict().equals(TestVerdict.INCONCLUSIVE)) { panelBody.append(createExceptionDataString(baseTestInfo .getFailCause())); } writePanel(pw, "Test result", panelBody.toString()); } /** * This method creates a HTML-representation for data contained in a * throwable. * * @param t * Throwable-object which should be displayed * @return HTML-string for the throwable */ protected String createExceptionDataString(Throwable t) { StringBuilder exceptionData = new StringBuilder(); exceptionData.append("
"); exceptionData.append(createDescription("Cause", t.toString())); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); t.printStackTrace(pw); exceptionData.append(createDescription("Stacktrace", sw.toString())); exceptionData.append("
"); return exceptionData.toString(); } /** * Helper method for creating an item of a definition list. * * @param term * the term of the item (the key) * @param definition * the definition of the item (the value) * @return an HTML-string for the definition list item */ protected String createDescription(String term, String definition) { return String.format("
%s
%s
%n", term, definition); } @Override protected void writeFooter(PrintWriter pw) { pw.println("Back to summary"); pw.println(""); pw.println(""); pw.println("
"); pw.println(""); pw.println(""); } }