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

hudson.plugins.dry.DryDetailBuilder Maven / Gradle / Ivy

The newest version!
package hudson.plugins.dry;

import hudson.model.AbstractBuild;
import hudson.plugins.analysis.util.model.AnnotationContainer;
import hudson.plugins.analysis.util.model.FileAnnotation;
import hudson.plugins.analysis.views.DetailFactory;
import hudson.plugins.analysis.views.SourceDetail;
import hudson.plugins.analysis.views.TabDetail;
import hudson.plugins.dry.parser.DuplicateCode;

import java.util.Collection;

import org.apache.commons.lang.StringUtils;

/**
 * A detail builder for dry annotations capable of showing details of linked annotations.
 *
 * @author Ulli Hafner
 */
public class DryDetailBuilder extends DetailFactory {
    @Override
    public Object createDetails(final String link, final AbstractBuild owner,
            final AnnotationContainer container, final String defaultEncoding, final String displayName) {
        if (link.startsWith("link.")) {
            String suffix = StringUtils.substringAfter(link, "link.");
            String[] fromToStrings = StringUtils.split(suffix, ".");
            if (fromToStrings.length == 2) {
                return createDrySourceDetail(owner, container, defaultEncoding, fromToStrings[0], fromToStrings[1]);
            }
            return null;
        }
        return super.createDetails(link, owner, container, defaultEncoding, displayName);
    }

    /**
     * Creates the dry source detail view.
     *
     * @param owner
     *            the owner
     * @param container
     *            the container
     * @param defaultEncoding
     *            the default encoding
     * @param fromString
     *            from ID
     * @param toString
     *            to ID
     * @return the detail view or null
     */
    private Object createDrySourceDetail(final AbstractBuild owner,
            final AnnotationContainer container, final String defaultEncoding,
            final String fromString, final String toString) {
        long from = Long.parseLong(fromString);
        long to = Long.parseLong(toString);

        FileAnnotation fromAnnotation = container.getAnnotation(from);
        if (fromAnnotation instanceof DuplicateCode) {
            return new SourceDetail(owner, ((DuplicateCode)fromAnnotation).getLink(to), defaultEncoding);
        }
        return null;
    }

    @Override
    protected TabDetail createTabDetail(final AbstractBuild owner, final Collection annotations,
            final String url, final String defaultEncoding) {
        return new DryTabDetail(owner, this, annotations, url, defaultEncoding);
    }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy