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

org.sonar.api.resources.Project Maven / Gradle / Ivy

There is a newer version: 5.1
Show newest version
/*
 * Sonar, open source software quality management tool.
 * Copyright (C) 2009 SonarSource SA
 * mailto:contact AT sonarsource DOT com
 *
 * Sonar 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.
 *
 * Sonar 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 Sonar; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
 */
package org.sonar.api.resources;

import org.apache.commons.configuration.Configuration;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.maven.project.MavenProject;
import org.sonar.api.CoreProperties;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * A class that manipulates Projects in the Sonar way, i.e. mixing MavenProjects with the way it should be analyzed
 *
 * @since 1.10
 */
public class Project extends Resource {

  /**
   * @deprecated since version 1.11. Constant moved to CoreProperties
   */
  @Deprecated
  public static final String PARAM_VERSION = "sonar.projectVersion";

  /**
   * @deprecated since version 1.11. Constant moved to CoreProperties
   */
  @Deprecated
  public static final String PARAM_DATE = "sonar.projectDate";

  /**
   * @deprecated since version 1.11. Constant moved to CoreProperties
   */
  @Deprecated
  public static final String PARAM_LANGUAGE = "sonar.language";

  /**
   * @deprecated since version 1.11. Constant moved to CoreProperties
   */
  @Deprecated
  public static final String PARAM_DYNAMIC_ANALYSIS = "sonar.dynamicAnalysis";

  /**
   * @deprecated since version 1.11. Constant moved to CoreProperties
   */
  @Deprecated
  public static final String PARAM_EXCLUSIONS = "sonar.exclusions";

  /**
   * @deprecated since version 1.11. Constant moved to CoreProperties
   */
  @Deprecated
  public static final String PARAM_REUSE_RULES_CONFIG = "sonar.reuseExistingRulesConfiguration";


  /**
   * Enumerates the type of possible analysis
   */
  public enum AnalysisType {
    STATIC, DYNAMIC, REUSE_REPORTS;

    /**
     * @param includeReuseReportMode whether to count report reuse as dynamic or not
     * @return whether this a dynamic analysis
     */
    public boolean isDynamic(boolean includeReuseReportMode) {
      return equals(Project.AnalysisType.DYNAMIC) ||
          (equals(Project.AnalysisType.REUSE_REPORTS) && includeReuseReportMode);
    }
  }

  private MavenProject pom;
  private String branch;
  private ProjectFileSystem fileSystem;
  private Configuration configuration;
  private String name;
  private String description;
  private String packaging;
  private Language language;
  private String languageKey;
  private Date analysisDate;
  private AnalysisType analysisType;
  private String[] exclusionPatterns;
  private String analysisVersion;
  private boolean latestAnalysis;
  
  // modules tree
  private Project parent;
  private List modules = new ArrayList();

  public Project(String key) {
    setKey(key);
  }

  public Project(String key, String branch, String name) {
    if (StringUtils.isNotBlank(branch)) {
      setKey(String.format("%s:%s", key, branch));
      this.name = String.format("%s %s", name, branch);
    } else {
      setKey(key);
      this.name = name;
    }
    this.branch = branch;
  }

  public String getBranch() {
    return branch;
  }

  public Project setBranch(String branch) {
    this.branch = branch;
    return this;
  }

  public final Project setPom(MavenProject pom) {
    this.pom = pom;
    return this;
  }

  /**
   * @return the project's packaging
   */
  public String getPackaging() {
    return packaging;
  }

  public String getName() {
    return name;
  }

  public String getLongName() {
    return null;
  }

  public String getDescription() {
    return description;
  }

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

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

  public Project setPackaging(String packaging) {
    this.packaging = packaging;
    return this;
  }

  /**
   * @return whether the current project is root project
   */
  public boolean isRoot() {
    return getParent() == null;
  }

  public Project getRoot() {
    return (parent == null ? this : parent.getRoot());
  }

  /**
   * @return whether the current project is a module
   */
  public boolean isModule() {
    return !isRoot();
  }

  /**
   * @return the type of analysis of the project
   */
  public AnalysisType getAnalysisType() {
    return analysisType;
  }

  public Project setAnalysisType(AnalysisType at) {
    this.analysisType = at;
    return this;
  }

  /**
   * whether it's the latest analysis done on this project (displayed in sonar dashboard) or an analysis on a past revision.
   * @since 2.0
   */
  public boolean isLatestAnalysis() {
    return latestAnalysis;
  }

  /**
   * For internal use only.
   */
  public Project setLatestAnalysis(boolean b) {
    this.latestAnalysis = b;
    return this;
  }

  /**
   * Used for Maven projects
   */
  public String getGroupId() {
    return pom.getGroupId();
  }

  /**
   * Used for Maven projects
   */
  public String getArtifactId() {
    return pom.getArtifactId();
  }

  /**
   * @return the project language
   */
  public Language getLanguage() {
    return language;
  }

  public Project setLanguage(Language language) {
    this.language = language;
    return this;
  }

  /**
   * @return the language key
   */
  public String getLanguageKey() {
    return languageKey;
  }

  /**
   * For internal use only.
   */
  public Project setLanguageKey(String languageKey) {
    this.languageKey = languageKey;
    return this;
  }

  /**
   * For internal use only.
   */
  public Project setAnalysisDate(Date analysisDate) {
    this.analysisDate = analysisDate;
    return this;
  }

  /**
   * For internal use only.
   */
  public Project setAnalysisVersion(String analysisVersion) {
    this.analysisVersion = analysisVersion;
    return this;
  }

  /**
   * @return the scope of the current object
   */
  public String getScope() {
    return SCOPE_SET;
  }

  /**
   * @return the qualifier of the current object
   */
  public String getQualifier() {
    return isRoot() ? QUALIFIER_PROJECT : QUALIFIER_MODULE;
  }

  @Override
  public boolean matchFilePattern(String antPattern) {
    return false;
  }

  public Project getParent() {
    return parent;
  }

  /**
   * For internal use only.
   */
  public Project setParent(Project parent) {
    this.parent = parent;
    if (parent != null) {
      parent.modules.add(this);
    }
    return this;
  }

  /**
   * For internal use only.
   */
  public void removeFromParent() {
    if (parent!=null) {
      parent.modules.remove(this);
    }
  }

  /**
   * @return the list of modules
   */
  public List getModules() {
    return modules;
  }

  /**
   * @return whether to use external source for rules configuration
   */
  public boolean getReuseExistingRulesConfig() {
    return (configuration != null && configuration.getBoolean(CoreProperties.REUSE_RULES_CONFIGURATION_PROPERTY, false));
  }

  /**
   * @return the current version of the project
   */
  public String getAnalysisVersion() {
    return analysisVersion;
  }

  /**
   * @return the analysis date, i.e. the date that will be used to store the snapshot
   */
  public Date getAnalysisDate() {
    return analysisDate;
  }

  /**
   * Patterns of resource exclusion as defined in project settings page.
   */
  public String[] getExclusionPatterns() {
    return exclusionPatterns;
  }

  /**
   * Set exclusion patterns. Configuration is not saved, so this method must be used ONLY IN UNIT TESTS.
   */
  public Project setExclusionPatterns(String[] s) {
    this.exclusionPatterns = s;
    return this;
  }

  public ProjectFileSystem getFileSystem() {
    return fileSystem;
  }

  public Project setFileSystem(ProjectFileSystem fs) {
    this.fileSystem = fs;
    return this;
  }

  /**
   * @return the underlying maven project
   */
  public MavenProject getPom() {
    return pom;
  }

  /**
   * @return the project configuration
   */
  public Configuration getConfiguration() {
    return configuration;
  }

  /**
   * Sets the configuration
   *
   * @return the current object
   */
  public final Project setConfiguration(Configuration configuration) {
    this.configuration = configuration;
    return this;
  }

  public Object getProperty(String key) {
    return configuration != null ? configuration.getProperty(key) : null;
  }

  public static Project createFromMavenIds(String groupId, String artifactId) {
    return new Project(String.format("%s:%s", groupId, artifactId));
  }

  @Override
  public String toString() {
    return new ToStringBuilder(this)
        .append("id", getId())
        .append("key", getKey())
        .append("qualifier", getQualifier())
        .toString();
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy