Package org.sonar.core.plugins

Source Code of org.sonar.core.plugins.DefaultPluginMetadata

/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2014 SonarSource
* mailto:contact AT sonarsource DOT com
*
* SonarQube 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 3 of the License, or (at your option) any later version.
*
* SonarQube 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 program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/
package org.sonar.core.plugins;

import com.google.common.collect.ImmutableList;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.sonar.api.platform.PluginMetadata;
import org.sonar.updatecenter.common.Version;

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

import static com.google.common.collect.Lists.newArrayList;

public class DefaultPluginMetadata implements PluginMetadata, Comparable<PluginMetadata> {
  private File file;
  private List<File> deployedFiles;
  private List<String> pathsToInternalDeps;
  private String key;
  private String version;
  private String sonarVersion;
  private String name;
  private String mainClass;
  private String description;
  private String organization;
  private String organizationUrl;
  private String license;
  private String homepage;
  private String issueTrackerUrl;
  private boolean useChildFirstClassLoader;
  private String basePlugin;
  private boolean core;
  private String implementationBuild;
  private String parent;
  private List<String> requiredPlugins;

  private DefaultPluginMetadata() {
    deployedFiles = newArrayList();
    pathsToInternalDeps = newArrayList();
    requiredPlugins = newArrayList();
  }

  public static DefaultPluginMetadata create(File file) {
    return new DefaultPluginMetadata().setFile(file);
  }

  public static DefaultPluginMetadata create(String key) {
    return new DefaultPluginMetadata().setKey(key);
  }

  @Override
  public File getFile() {
    return file;
  }

  public DefaultPluginMetadata setFile(File file) {
    this.file = file;
    return this;
  }

  @Override
  public List<File> getDeployedFiles() {
    return deployedFiles;
  }

  public DefaultPluginMetadata addDeployedFile(File f) {
    this.deployedFiles.add(f);
    return this;
  }

  public List<String> getPathsToInternalDeps() {
    return ImmutableList.copyOf(pathsToInternalDeps);
  }

  public DefaultPluginMetadata setPathsToInternalDeps(List<String> pathsToInternalDeps) {
    this.pathsToInternalDeps = ImmutableList.copyOf(pathsToInternalDeps);
    return this;
  }

  @Override
  public String getKey() {
    return key;
  }

  public DefaultPluginMetadata setKey(String key) {
    this.key = key;
    return this;
  }

  @Override
  public String getName() {
    return name;
  }

  public DefaultPluginMetadata setName(String name) {
    this.name = name;
    return this;
  }

  @Override
  public String getMainClass() {
    return mainClass;
  }

  public DefaultPluginMetadata setMainClass(String mainClass) {
    this.mainClass = mainClass;
    return this;
  }

  @Override
  public String getDescription() {
    return description;
  }

  public DefaultPluginMetadata setDescription(String description) {
    this.description = description;
    return this;
  }

  @Override
  public String getOrganization() {
    return organization;
  }

  public DefaultPluginMetadata setOrganization(String organization) {
    this.organization = organization;
    return this;
  }

  @Override
  public String getOrganizationUrl() {
    return organizationUrl;
  }

  public DefaultPluginMetadata setOrganizationUrl(String organizationUrl) {
    this.organizationUrl = organizationUrl;
    return this;
  }

  @Override
  public String getLicense() {
    return license;
  }

  public DefaultPluginMetadata setLicense(String license) {
    this.license = license;
    return this;
  }

  @Override
  public String getVersion() {
    return version;
  }

  public DefaultPluginMetadata setVersion(String version) {
    this.version = version;
    return this;
  }

  public String getSonarVersion() {
    return sonarVersion;
  }

  public DefaultPluginMetadata setSonarVersion(String sonarVersion) {
    this.sonarVersion = sonarVersion;
    return this;
  }

  @Override
  public String getParent() {
    return parent;
  }

  public DefaultPluginMetadata setParent(String parent) {
    this.parent = parent;
    return this;
  }

  @Override
  public List<String> getRequiredPlugins() {
    return ImmutableList.copyOf(requiredPlugins);
  }

  public DefaultPluginMetadata setRequiredPlugins(List<String> requiredPlugins) {
    this.requiredPlugins = ImmutableList.copyOf(requiredPlugins);
    return this;
  }

  /**
   * Find out if this plugin is compatible with a given version of Sonar.
   * The version of sonar must be greater than or equal to the minimal version
   * needed by the plugin.
   *
   * @param sonarVersion
   * @return <code>true</code> if the plugin is compatible
   */
  public boolean isCompatibleWith(String sonarVersion) {
    if (null == this.sonarVersion) {
      // Plugins without sonar version are so old, they are compatible with a version containing this code
      return true;
    }

    Version minimumVersion = Version.createRelease(this.sonarVersion);
    Version actualVersion = Version.createRelease(sonarVersion);
    return actualVersion.compareTo(minimumVersion) >= 0;
  }

  @Override
  public String getHomepage() {
    return homepage;
  }

  public DefaultPluginMetadata setHomepage(String homepage) {
    this.homepage = homepage;
    return this;
  }

  @Override
  public String getIssueTrackerUrl() {
    return issueTrackerUrl;
  }

  public DefaultPluginMetadata setIssueTrackerUrl(String issueTrackerUrl) {
    this.issueTrackerUrl = issueTrackerUrl;
    return this;
  }

  public DefaultPluginMetadata setUseChildFirstClassLoader(boolean use) {
    this.useChildFirstClassLoader = use;
    return this;
  }

  @Override
  public boolean isUseChildFirstClassLoader() {
    return useChildFirstClassLoader;
  }

  public DefaultPluginMetadata setBasePlugin(String key) {
    this.basePlugin = key;
    return this;
  }

  @Override
  public String getBasePlugin() {
    return basePlugin;
  }

  @Override
  public boolean isCore() {
    return core;
  }

  public DefaultPluginMetadata setCore(boolean b) {
    this.core = b;
    return this;
  }

  public String getImplementationBuild() {
    return implementationBuild;
  }

  public DefaultPluginMetadata setImplementationBuild(String implementationBuild) {
    this.implementationBuild = implementationBuild;
    return this;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    DefaultPluginMetadata that = (DefaultPluginMetadata) o;
    return !(key != null ? !key.equals(that.key) : that.key != null);

  }

  @Override
  public int hashCode() {
    return key != null ? key.hashCode() : 0;
  }

  @Override
  public String toString() {
    return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
      .append("key", key)
      .append("version", StringUtils.defaultIfEmpty(version, "-"))
      .toString();
  }

  @Override
  public int compareTo(PluginMetadata other) {
    return name.compareTo(other.getName());
  }
}
TOP

Related Classes of org.sonar.core.plugins.DefaultPluginMetadata

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.