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

org.apache.james.mailet.AbstractMailetdocsReport Maven / Gradle / Ivy

/****************************************************************
 * Licensed to the Apache Software Foundation (ASF) under one   *
 * or more contributor license agreements.  See the NOTICE file *
 * distributed with this work for additional information        *
 * regarding copyright ownership.  The ASF licenses this file   *
 * to you 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.apache.james.mailet;

import java.util.Comparator;
import java.util.List;
import java.util.Locale;

import org.apache.maven.doxia.siterenderer.Renderer;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.apache.maven.reporting.AbstractMavenReport;
import org.apache.maven.reporting.MavenReportException;

import com.github.steveash.guavate.Guavate;

/**
 * 

* Base for singleton and aggregate reports on mailets and matchers. *

*/ public abstract class AbstractMailetdocsReport extends AbstractMavenReport { private static final String EXPERIMENTAL = " (Experimental)"; /** * Directory where reports will go. */ @Parameter(defaultValue = "${project.reporting.outputDirectory}", required = true) private String outputDirectory; @Parameter(defaultValue = "${project}", required = true, readonly = true) private MavenProject project; @Component private Renderer siteRenderer; @Override protected void executeReport(Locale locale) throws MavenReportException { getLog().info("Executing Mailets/Matchers Report"); getSink().head(); getSink().title(); getSink().text("Mailet and Matchers Reference"); getSink().title_(); getSink().head_(); getSink().body(); getSink().section1(); getSink().sectionTitle1(); getSink().text("Mailets and Matchers Reference"); getSink().sectionTitle1_(); getSink().text("Items marked as Experimental are not yet supported by James; however, you can try them."); getSink().section1_(); writeDescriptions(); getSink().body_(); getSink().flush(); getSink().close(); } private void writeDescriptions() { final List descriptors = buildSortedDescriptors(); final List matchers = descriptors.stream() .filter(descriptor -> descriptor.getType() == MailetMatcherDescriptor.Type.MATCHER) .collect(Guavate.toImmutableList()); final List mailets = descriptors.stream() .filter(descriptor -> descriptor.getType() == MailetMatcherDescriptor.Type.MAILET) .collect(Guavate.toImmutableList()); final boolean matchersExist = matchers.size() > 0; final boolean mailetsExist = mailets.size() > 0; if (matchersExist && mailetsExist) { getSink().table(); getSink().tableRow(); getSink().tableCell(); } if (matchersExist) { outputDescriptorIndex(matchers, "Matchers"); } if (matchersExist && mailetsExist) { getSink().tableCell_(); getSink().tableCell(); } if (mailetsExist) { outputDescriptorIndex(mailets, "Mailets"); } if (matchersExist && mailetsExist) { getSink().tableCell_(); getSink().tableRow_(); getSink().table_(); } if (matchersExist) { outputDescriptorList(matchers, "Matchers"); } if (mailetsExist) { outputDescriptorList(mailets, "Mailets"); } } private List buildSortedDescriptors() { final List descriptors = buildDescriptors(this.project); descriptors.sort(Comparator.comparing(MailetMatcherDescriptor::getName)); logDescriptors(descriptors); return descriptors; } private void logDescriptors( final List descriptors) { if (getLog().isDebugEnabled()) { getLog().debug("Built descriptors: " + descriptors); } } protected abstract List buildDescriptors(MavenProject project); private void outputDescriptorIndex(List descriptors, String title) { getSink().section2(); getSink().sectionTitle2(); getSink().text(title); getSink().sectionTitle2_(); getSink().list(); for (MailetMatcherDescriptor descriptor : descriptors) { getSink().listItem(); getSink().link("#" + descriptor.getName()); getSink().text(descriptor.getName()); if (descriptor.isExperimental()) { getSink().text(EXPERIMENTAL); } getSink().link_(); getSink().listItem_(); } getSink().list_(); getSink().section2_(); } private void outputDescriptorList(List descriptors, String title) { getSink().section1(); getSink().sectionTitle1(); getSink().text(title); getSink().sectionTitle1_(); for (MailetMatcherDescriptor descriptor : descriptors) { getSink().section2(); getSink().sectionTitle2(); getSink().anchor(descriptor.getName()); getSink().text(descriptor.getName()); if (descriptor.isExperimental()) { getSink().text(EXPERIMENTAL); } getSink().anchor_(); getSink().sectionTitle2_(); descriptor.getInfo().ifPresent(info -> { getSink().paragraph(); if (descriptor.getType() == MailetMatcherDescriptor.Type.MAILET) { getSink().text("Mailet Info: "); } else if (descriptor.getType() == MailetMatcherDescriptor.Type.MATCHER) { getSink().text("Matcher Info: "); } else { getSink().text("Info: "); } getSink().bold(); getSink().text(descriptor.getInfo().orElse("")); getSink().bold_(); getSink().lineBreak(); getSink().paragraph_(); }); getSink().paragraph(); descriptor.getClassDocs().ifPresent(classDocs -> getSink().rawText(classDocs)); getSink().paragraph_(); getSink().section2_(); } getSink().section1_(); } @Override protected MavenProject getProject() { return project; } @Override protected String getOutputDirectory() { return outputDirectory; } @Override protected Renderer getSiteRenderer() { return siteRenderer; } @Override public String getDescription(Locale arg0) { return "Documentation about bundled mailets"; } @Override public String getName(Locale arg0) { return "Mailet Reference"; } @Override public String getOutputName() { return "mailet-report"; } /** * @param siteRenderer * The siteRenderer to set. */ public void setSiteRenderer(Renderer siteRenderer) { this.siteRenderer = siteRenderer; } /** * For testing purpose only. * * @param project * The project to set. */ public void setProject(MavenProject project) { this.project = project; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy