Package com.devbliss.doctest.renderer.html

Source Code of com.devbliss.doctest.renderer.html.HtmlRenderer

package com.devbliss.doctest.renderer.html;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import com.devbliss.doctest.items.AssertDocItem;
import com.devbliss.doctest.items.DocItem;
import com.devbliss.doctest.items.FileDocItem;
import com.devbliss.doctest.items.JsonDocItem;
import com.devbliss.doctest.items.LinkDocItem;
import com.devbliss.doctest.items.MenuDocItem;
import com.devbliss.doctest.items.RequestDocItem;
import com.devbliss.doctest.items.ResponseDocItem;
import com.devbliss.doctest.items.SectionDocItem;
import com.devbliss.doctest.items.TextDocItem;
import com.devbliss.doctest.renderer.ReportRenderer;
import com.devbliss.doctest.utils.FileHelper;
import com.google.inject.Inject;

/**
* Html-implementation of the {@link ReportRenderer}.
* <p>
* Each time that the function {@link #render(List, String)} is called, a report file is created for
* the test case and an index file will be generated.
* </p>
*
* @author bmary
*
*/
public class HtmlRenderer extends AbstractHtmlReportRenderer implements ReportRenderer {

    private final HtmlIndexFileRenderer indexFileGenerator;
    private int sectionNumber = 0;
    private final Map<String, String> sections;
    private final FileHelper helper;

    @Inject
    public HtmlRenderer(
            HtmlIndexFileRenderer indexFileGenerator,
            HtmlItems htmlItems,
            FileHelper abstractReportRenderer) {
        super(htmlItems);
        this.indexFileGenerator = indexFileGenerator;
        this.helper = abstractReportRenderer;
        sections = new LinkedHashMap<String, String>();
    }

    public void render(List<DocItem> listTemplates, String name) throws Exception {
        if (listTemplates != null && !listTemplates.isEmpty()) {
            String items = appendItemsToBuffer(listTemplates);
            FileDocItem report = new FileDocItem(name, items);
            String nameWithExtension = helper.getCompleteFileName(name, HTML_EXTENSION);
            helper.writeFile(nameWithExtension, htmlItems.getReportTemplate(report));

            indexFileGenerator.render(null, INDEX);
        }
    }

    private String appendItemsToBuffer(List<DocItem> listTemplates) {
        sections.clear();
        StringBuffer buffer = new StringBuffer();
        StringBuffer tempBuffer = new StringBuffer();
        for (DocItem item : listTemplates) {
            if (item instanceof AssertDocItem) {
                tempBuffer.append(getAssertDocItem((AssertDocItem) item));
            } else if (item instanceof RequestDocItem) {
                tempBuffer.append(getRequestDocItem((RequestDocItem) item));
            } else if (item instanceof ResponseDocItem) {
                tempBuffer.append(getResponseDocItem((ResponseDocItem) item));
            } else if (item instanceof SectionDocItem) {
                tempBuffer.append(getSectionDocItem((SectionDocItem) item));
            } else if (item instanceof TextDocItem) {
                tempBuffer.append(getTextDocItem((TextDocItem) item));
            } else if (item instanceof JsonDocItem) {
                tempBuffer.append(getJsonDocItem((JsonDocItem) item));
            }
        }

        appendSectionList(buffer);
        buffer.append(tempBuffer);
        return buffer.toString();
    }

    private void appendSectionList(StringBuffer buffer) {
        List<LinkDocItem> files = new ArrayList<LinkDocItem>();
        for (Entry<String, String> section : sections.entrySet()) {
            files.add(new LinkDocItem(section.getKey(), section.getValue()));
        }
        buffer.append(htmlItems.getListFilesTemplate(new MenuDocItem("", files)));
    }

    private String getAssertDocItem(AssertDocItem item) {
        return htmlItems.getAssertTemplate(item);
    }

    private String getRequestDocItem(RequestDocItem item) {
        return htmlItems.getRequestTemplate(item);
    }

    private String getJsonDocItem(JsonDocItem item) {
        return htmlItems.getJsonTemplate(item);
    }

    private String getTextDocItem(TextDocItem item) {
        return item.getText();
    }

    private String getSectionDocItem(SectionDocItem item) {
        String sectionId = getSectionId();
        String sectionName = item.getTitle();
        sections.put("#" + sectionId, sectionName);
        item.setHref(sectionId);
        return htmlItems.getSectionTemplate(item);
    }

    private String getSectionId() {
        return "section" + ++sectionNumber;
    }

    private String getResponseDocItem(ResponseDocItem item) {
        return htmlItems.getResponseTemplate(item);
    }
}
TOP

Related Classes of com.devbliss.doctest.renderer.html.HtmlRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.