Package de.tobject.findbugs.properties

Source Code of de.tobject.findbugs.properties.DetectorValidator$ValidationStatus

/*
* Contributions to FindBugs
* Copyright (C) 2010, Andrei Loskutov
*
* This library 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 2.1 of the License, or (at your option) any later version.
*
* This library 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 this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
package de.tobject.findbugs.properties;

import java.io.File;
import java.net.URI;

import javax.annotation.Nonnull;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;

import de.tobject.findbugs.FindbugsPlugin;
import edu.umd.cs.findbugs.Plugin;
import edu.umd.cs.findbugs.PluginLoader;
import edu.umd.cs.findbugs.PluginLoader.Summary;

/**
* Quickly validates additional detector packages available for Findbugs.
*
* @author Andrei Loskutov
*/
public class DetectorValidator {

    public static class ValidationStatus extends Status {
        public static final String UNKNOWN_VALUE = "?";
        private final Summary sum;

        public ValidationStatus(int severity, String message, Summary sum, Throwable t) {
            super(severity, FindbugsPlugin.PLUGIN_ID, message, t);
            this.sum = sum == null ? new Summary(UNKNOWN_VALUE, UNKNOWN_VALUE, UNKNOWN_VALUE, UNKNOWN_VALUE) : sum;
        }

        /**
         * @return the sum
         */
        @Nonnull
        public Summary getSummary() {
            return sum;
        }
    }

    public DetectorValidator() {
        super();
    }

    /**
     *
     * @param path
     *            non null, full abstract path in the local file system
     * @return {@link Status#OK_STATUS} in case that given path might be a valid
     *         FindBugs detector package (jar file containing bugrank.txt,
     *         findbugs.xml, messages.xml and at least one class file). Returns
     *         error status in case anything goes wrong or file at given path is
     *         not considered as a valid plugin.
     */
    @Nonnull
    public ValidationStatus validate(String path) {
        File file = new File(path);
        Summary sum = null;
        try {
            sum = PluginLoader.validate(file);
        } catch (IllegalArgumentException e) {
            if(FindbugsPlugin.getDefault().isDebugging()) {
                e.printStackTrace();
            }
            return new ValidationStatus(IStatus.ERROR,
                    "Invalid FindBugs plugin archive: " + e.getMessage(), sum, e);
        }
        Plugin loadedPlugin = Plugin.getByPluginId(sum.id);
        URI uri = file.toURI();
        if(loadedPlugin != null && !uri.equals(loadedPlugin.getPluginLoader().getURI())
                && loadedPlugin.isGloballyEnabled()) {
            return new ValidationStatus(IStatus.ERROR, "Duplicated FindBugs plugin: " + sum.id + ", already loaded from: "
                    + loadedPlugin.getPluginLoader().getURI(), sum, null);
        }
        return new ValidationStatus(IStatus.OK, Status.OK_STATUS.getMessage(), sum, null);
    }
}
TOP

Related Classes of de.tobject.findbugs.properties.DetectorValidator$ValidationStatus

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.