@Override
  public String getValue() {
    if (this.value == null) {
      StringBuilder builder = new StringBuilder();

      if (getVersion() != null) {
        builder.append(getVersion());
      } else {
        if (this.ranges.size() == 1) {
          builder.append(this.ranges.get(0).getValue());
        } else {
          for (VersionRange range : getRanges()) {
            if (builder.length() > 0) {
              builder.append(RANGE_SEPARATOR);
            }
            builder.append('{');
            builder.append(range.getValue());
            builder.append('}');
          }
        }
      }

      this.value = builder.toString();
    }

    return this.value;
  }
 /**
  * @param otherRanges the ranges to validate with this ranges
  * @throws IncompatibleVersionConstraintException the provided ranges is not compatible with this
  *     ranges
  */
 private void validateCompatibility(Collection<VersionRangeCollection> otherRanges)
     throws IncompatibleVersionConstraintException {
   for (VersionRange otherRange : otherRanges) {
     for (VersionRange range : this.ranges) {
       if (!range.isCompatible(otherRange)) {
         throw new IncompatibleVersionConstraintException(
             "Ranges [" + range + "] and [" + otherRange + "] are incompatibles");
       }
     }
   }
 }
  @Override
  public boolean containsVersion(Version version) {
    if (this.ranges.isEmpty()) {
      return this.version != null && this.version.equals(version);
    } else {
      for (VersionRange range : this.ranges) {
        if (!range.containsVersion(version)) {
          return false;
        }
      }
    }

    return true;
  }