All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jp.vmi.html.result.LogRenderer Maven / Gradle / Ivy

package jp.vmi.html.result;

import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringEscapeUtils;

import com.floreysoft.jmte.NamedRenderer;
import com.floreysoft.jmte.RenderFormatInfo;

import jp.vmi.selenium.selenese.utils.EscapeUtils;
import jp.vmi.selenium.selenese.utils.PathUtils;

/**
 * HTML escape renderer for JMTE.
 */
public class LogRenderer implements NamedRenderer {

    private static final Pattern RE = Pattern.compile("(\\[\\[ATTACHMENT\\|)(.*?)(\\]\\])|(" + EscapeUtils.HTML_RE.pattern() + ")");

    private static final int ATTACHMENT_PREFIX = 1;
    private static final int ATTACHMENT_PATH = 2;
    private static final int ATTACHMENT_SUFFIX = 3;
    private static final int SPECIALS = 4;

    private final HtmlResult htmlResult;

    /**
     * Constructor.
     *
     * @param htmlResult HtmlResult object.
     */
    public LogRenderer(HtmlResult htmlResult) {
        this.htmlResult = htmlResult;
    }

    @Override
    public RenderFormatInfo getFormatInfo() {
        return null;
    }

    @Override
    public String getName() {
        return "log";
    }

    @Override
    public Class[] getSupportedClasses() {
        return new Class[] { Object.class };
    }

    @Override
    public String render(Object o, String format, Locale locale) {
        StringBuilder result = new StringBuilder();
        String s = o.toString();
        Matcher matcher = RE.matcher(s);
        int index = 0;
        while (matcher.find(index)) {
            int start = matcher.start();
            if (index < start)
                result.append(s, index, start);
            String prefix = matcher.group(ATTACHMENT_PREFIX);
            if (prefix != null) {
                String path = matcher.group(ATTACHMENT_PATH);
                String relPath = PathUtils.relativize(htmlResult.getDir(), path);
                result.append(prefix)
                    .append("")
                    .append(StringEscapeUtils.escapeHtml4(path))
                    .append("")
                    .append(matcher.group(ATTACHMENT_SUFFIX));
            } else {
                result.append(EscapeUtils.HTML_ESC_MAP.get(matcher.group(SPECIALS)));
            }
            index = matcher.end();
        }
        if (index < s.length())
            result.append(s, index, s.length());
        return result.toString();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy