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

com.technophobia.substeps.glossary.MarkdownSubstepsPublisher Maven / Gradle / Ivy

/*
 *	Copyright Technophobia Ltd 2012
 *
 *   This file is part of Substeps.
 *
 *    Substeps is free software: you can redistribute it and/or modify
 *    it under the terms of the GNU Lesser General Public License as published by
 *    the Free Software Foundation, either version 3 of the License, or
 *    (at your option) any later version.
 *
 *    Substeps is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU Lesser General Public License for more details.
 *
 *    You should have received a copy of the GNU Lesser General Public License
 *    along with Substeps.  If not, see .
 */
package com.technophobia.substeps.glossary;

import com.google.common.io.Files;
import org.apache.commons.lang.StringEscapeUtils;

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.*;
import java.util.Map.Entry;

/**
 * @author ian
 * 
 */
public class MarkdownSubstepsPublisher implements GlossaryPublisher {

    /**
     * @parameter default-value = stepimplementations.md
     */
    private File outputFile;


    /*
     * (non-Javadoc)
     * 
     * @see
     * com.technophobia.substeps.runner.GlossaryPublisher#publish(java.util.
     * List)
     */
    public void publish(final List stepimplementationDescriptors) {
        final Map> sectionSorted = new TreeMap>();

        for (final StepImplementationsDescriptor descriptor : stepimplementationDescriptors) {

            for (final StepDescriptor stepTag : descriptor.getExpressions()) {

                String section = stepTag.getSection();
                if (section == null || section.isEmpty()) {
                    section = "Miscellaneous";
                }

                List subList = sectionSorted.get(section);

                if (subList == null) {
                    subList = new ArrayList();
                    sectionSorted.put(section, subList);
                }
                subList.add(stepTag);
            }
        }

        final String md = buildMarkdown(sectionSorted);

        outputFile.delete();

        // write out
        try {
            if (outputFile.createNewFile()) {
                Files.write(md, outputFile, Charset.defaultCharset());
            } else {
                // TODO
            }
        } catch (final IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


    /**
     * @param sectionSorted
     */
    private String buildMarkdown(final Map> sectionSorted) {
        final StringBuilder buf = new StringBuilder();

//        buf.append(" \n\n");

        // buf.append(String.format(TRAC_TABLE_FORMAT, "'''Keyword'''",
        // "'''Example'''", "'''Description'''"))
        // .append("\n");

        final Set>> entrySet = sectionSorted.entrySet();

        for (final Entry> e : entrySet) {
            buf.append(String.format(TABLE_ROW_SECTION_FORMAT, e.getKey())).append("\n");

            buildStepTagRows(buf, e.getValue());
        }

        buf.append("
Keyword Example Description
"); return buf.toString(); } private void buildStepTagRows(final StringBuilder buf, final List infos) { Collections.sort(infos, new Comparator() { public int compare(final StepDescriptor s1, final StepDescriptor s2) { return s1.getExpression().compareTo(s2.getExpression()); } }); for (final StepDescriptor info : infos) { System.out.println("info non escaped: " + info.getExpression() + "\n\tescaped:\n" + StringEscapeUtils.escapeHtml(info.getExpression())); buf.append( String.format(TABLE_ROW_FORMAT, StringEscapeUtils.escapeHtml(info.getExpression()), info.getExample().replaceAll("\n", " "), StringEscapeUtils.escapeHtml(info.getDescription()).replaceAll("\n", " "))).append("\n"); } } private static final String TABLE_ROW_SECTION_FORMAT = "%s\n" + "==========\n" + "| **Keyword** | **Example** | **Description** |\n" + "| :------------ |:---------------| :-----|"; private static final String TABLE_ROW_FORMAT = "| %s | %s | %s |"; }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy