org.openehealth.ipf.labs.maven.dsldoc.DslIndexReport.java Source code

Java tutorial

Introduction

Here is the source code for org.openehealth.ipf.labs.maven.dsldoc.DslIndexReport.java

Source

/*
 * Copyright 2010 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.openehealth.ipf.labs.maven.dsldoc;

import org.apache.commons.io.FileUtils;
import org.apache.maven.project.MavenProject;
import org.apache.maven.reporting.AbstractMavenReport;
import org.apache.maven.reporting.MavenReportException;
import org.codehaus.doxia.site.renderer.SiteRenderer;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Locale;

/**
 * Goal which merges the DSL indices of all modules into a Maven report.
 *
 * @goal dslindexreport
 */
public class DslIndexReport extends AbstractMavenReport {
    /**
     * @parameter default-value="${project.reporting.outputDirectory}"
     * @required
     */
    protected File outputDirectory;

    /**
     * @parameter default-value="${project}"
     * @required
     * @readonly
     */
    private MavenProject project;

    /**
     * @parameter default-value="${project.name}"
     * @readonly
     */
    protected String projectName;

    /**
     * @component
     * @required
     * @readonly
     */
    private SiteRenderer siteRenderer;

    /**
      * The projects in the reactor for aggregation report.
      *
      * @parameter expression="${reactorProjects}"
      * @readonly
      */
    private List<MavenProject> reactorProjects;

    protected void executeReport(Locale arg0) throws MavenReportException {
        StringBuilder mergedContent = new StringBuilder();
        for (MavenProject subProject : reactorProjects) {
            String buildDir = subProject.getBuild().getDirectory();
            String dslIndexPath = buildDir + "/dslindex";
            File dslIndexFile = new File(dslIndexPath);
            if (dslIndexFile.exists()) {
                getLog().info("Merging DSL index file: " + dslIndexPath);
                try {
                    String content = FileUtils.readFileToString(dslIndexFile);
                    mergedContent.append(content);
                } catch (IOException e) {
                    throw new MavenReportException("Cannot read file for report: " + dslIndexPath, e);
                }
            }
        }

        getSink().rawText("<html><head><title>" + projectName + " DSL extensions index</title></head><body>");
        getSink().rawText(mergedContent.toString());
        getSink().rawText("</body></html>");

        getSink().flush();
    }

    protected String getOutputDirectory() {
        return outputDirectory.getAbsolutePath();
    }

    protected MavenProject getProject() {
        return project;
    }

    protected SiteRenderer getSiteRenderer() {
        return siteRenderer;
    }

    public String getDescription(Locale arg0) {
        return "DSL Index";
    }

    public String getName(Locale arg0) {
        return "DSL Index";
    }

    public String getOutputName() {
        return "dslIndex";
    }
}