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

io.codemodder.plugins.maven.operator.Dependency Maven / Gradle / Ivy

package io.codemodder.plugins.maven.operator;

import io.codemodder.DependencyGAV;
import java.util.Objects;

/**
 * Represents a dependency in a Maven POM. A dependency consists of a group ID, artifact ID,
 * version, classifier, packaging, and scope.
 */
class Dependency {
  private String groupId;
  private String artifactId;
  private String version;
  private String classifier;
  private String packaging;
  private String scope;

  /**
   * Initializes a new Dependency object with the provided attributes.
   *
   * @param groupId The group ID of the dependency.
   * @param artifactId The artifact ID of the dependency.
   * @param version The version of the dependency.
   * @param classifier The classifier of the dependency (may be null).
   * @param packaging The packaging type of the dependency (default is "jar" if null).
   * @param scope The scope of the dependency (default is "compile" if null).
   */
  Dependency(
      String groupId,
      String artifactId,
      String version,
      String classifier,
      String packaging,
      String scope) {
    this.groupId = groupId;
    this.artifactId = artifactId;
    this.version = version;
    this.classifier = classifier;
    this.packaging = packaging != null ? packaging : "jar";
    this.scope = scope != null ? scope : "compile";
  }

  Dependency(final DependencyGAV newDependencyGAV) {
    this(
        newDependencyGAV.group(),
        newDependencyGAV.artifact(),
        newDependencyGAV.version(),
        null,
        null,
        null);
  }

  @Override
  public String toString() {
    return String.join(":", groupId, artifactId, packaging, version);
  }

  /** Given a string, parses - and creates - a new dependency Object */
  static Dependency fromString(String str) {
    String[] elements = str.split(":");

    if (elements.length < 3) {
      throw new IllegalStateException("Give me at least 3 elements");
    }

    return new Dependency(elements[0], elements[1], elements[2], null, null, null);
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Dependency that = (Dependency) o;
    return Objects.equals(groupId, that.groupId)
        && Objects.equals(artifactId, that.artifactId)
        && Objects.equals(version, that.version)
        && Objects.equals(classifier, that.classifier)
        && Objects.equals(packaging, that.packaging)
        && Objects.equals(scope, that.scope);
  }

  @Override
  public int hashCode() {
    return Objects.hash(groupId, artifactId, version, classifier, packaging, scope);
  }

  /**
   * Computes the hash code of this object without considering the version.
   *
   * 

This method calculates the hash code based on the values of the group ID, artifact ID, * classifier, packaging, and scope fields, while ignoring the version field. * * @return The computed hash code without the version. */ public int hashWithoutVersion() { return Objects.hash(groupId, artifactId, classifier, packaging, scope); } /** * Checks if this Dependency object matches another Dependency without considering the version. * *

This method compares the hash code of this Dependency with the hash code of another * Dependency, excluding the version information. If the hash codes are equal, the two * dependencies are considered a match without taking version into account. * * @param dependency The Dependency object to compare with this one. * @return true if the dependencies match without considering the version, false otherwise. */ public boolean matchesWithoutConsideringVersion(final Dependency dependency) { return hashWithoutVersion() == dependency.hashWithoutVersion(); } public String getGroupId() { return groupId; } public void setGroupId(String groupId) { this.groupId = groupId; } public String getArtifactId() { return artifactId; } public void setArtifactId(String artifactId) { this.artifactId = artifactId; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public String getClassifier() { return classifier; } public void setClassifier(String classifier) { this.classifier = classifier; } public String getPackaging() { return packaging; } public void setPackaging(String packaging) { this.packaging = packaging; } public String getScope() { return scope; } public void setScope(String scope) { this.scope = scope; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy