Package sagan.guides.support

Source Code of sagan.guides.support.AsciidoctorUtils

package sagan.guides.support;

import sagan.projects.Project;
import sagan.projects.support.ProjectMetadataService;
import sagan.support.ResourceNotFoundException;
import sagan.support.github.Readme;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.springframework.web.client.RestClientException;

/**
* Various utilities to help with asciidoctor processing
*
* @author Greg Turnquist
*/
public class AsciidoctorUtils {

    private static final Log log = LogFactory.getLog(AsciidoctorUtils.class);

    public Readme getReadme(GuideOrganization org, String path) {
        try {
            log.debug(String.format("Fetching README for '%s'", path));
            return org.getReadme(path);
        } catch (RestClientException ex) {
            String msg = String.format("No README found for '%s'", path);
            log.warn(msg, ex);
            throw new ResourceNotFoundException(msg, ex);
        }
    }

    public AsciidocGuide getDocument(GuideOrganization org, String path) {
        try {
            log.debug(String.format("Fetching getting started guide for '%s'", path));
            return org.getAsciidocGuide(path);
        } catch (RestClientException ex) {
            String msg = String.format("No getting started guide found for '%s'", path);
            log.warn(msg, ex);
            throw new ResourceNotFoundException(msg, ex);
        }
    }



    /**
     * Using a project's metadata and tag info, generate a dynamic sidebar.
     *
     * @param projectMetadataService
     * @param asciidocGuide
     * @return
     */
    // This method's approach to generating HTML directly within code will be refactored
    // in https://github.com/spring-io/sagan/issues/223
    public String generateDynamicSidebar(ProjectMetadataService projectMetadataService, AsciidocGuide asciidocGuide) {
        String sidebar = "<div class='right-pane-widget--container'>\n" +
                "<div class='related_resources'>\n";

        sidebar += "<h3>" +
                "<a name='table-of-contents' class='anchor' href='#table-of-contents'></a>" +
                "Table of contents</h3>\n";
        sidebar += asciidocGuide.getTableOfContents();

        sidebar += "</div>\n</div>\n" +
                "<div class='right-pane-widget--container'>\n" +
                "<div class='related_resources'>\n";

        if (asciidocGuide.getTags().size() > 0) {
            sidebar += "<h3>" +
                    "<a name='tags' class='anchor' href='#tags'></a>" +
                    "Tags</h3><ul class='inline'>\n";

            for (String tag : asciidocGuide.getTags()) {
                sidebar += "<li><a href='/guides?filter=" + tag + "'>" + tag + "</a></li>\n";
            }
        }

        if (asciidocGuide.getProjects().size() > 0) {
            sidebar += "</ul><h3>" +
                    "<a name='projects' class='anchor' href='#projects'></a>" +
                    "Projects</h3>\n" +
                    "<ul>\n";

            for (String project : asciidocGuide.getProjects()) {

                log.debug("Looking up project metadata for " + project);
                Project springIoProject = projectMetadataService.getProject(project);
                sidebar += "<li><a href='" + springIoProject.getSiteUrl() + "'>" + springIoProject.getName()
                        + "</a></li>\n";
            }
            sidebar += "</ul>\n";
        }

        if (asciidocGuide.getUnderstandingDocs().size() > 0) {
            sidebar += "<h3>" +
                    "<a name='concepts-and-technologies' class='anchor' href='#concepts-and-technologies'></a>" +
                    "Concepts and technologies</h3>\n" +
                    "<ul>\n";
            for (String key : asciidocGuide.getUnderstandingDocs().keySet()) {
                sidebar += "<li><a href='" + key + "'>" + asciidocGuide.getUnderstandingDocs().get(key) + "</a></li>\n";
            }
            sidebar += "</ul>\n";
        }

        sidebar += "</div>\n</div>";

        return sidebar;
    }

}
TOP

Related Classes of sagan.guides.support.AsciidoctorUtils

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.