package org.eclipse.aether.version;

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *  http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

import static java.util.Objects.requireNonNull;

A range of versions.
/** * A range of versions. */
public interface VersionRange {
Determines whether the specified version is contained within this range.
Params:
  • version – The version to test, must not be null.
Returns:true if this range contains the specified version, false otherwise.
/** * Determines whether the specified version is contained within this range. * * @param version The version to test, must not be {@code null}. * @return {@code true} if this range contains the specified version, {@code false} otherwise. */
boolean containsVersion( Version version );
Gets a lower bound (if any) for this range. If existent, this range does not contain any version smaller than its lower bound. Note that complex version ranges might exclude some versions even within their bounds.
Returns:A lower bound for this range or null is there is none.
/** * Gets a lower bound (if any) for this range. If existent, this range does not contain any version smaller than its * lower bound. Note that complex version ranges might exclude some versions even within their bounds. * * @return A lower bound for this range or {@code null} is there is none. */
Bound getLowerBound();
Gets an upper bound (if any) for this range. If existent, this range does not contain any version greater than its upper bound. Note that complex version ranges might exclude some versions even within their bounds.
Returns:An upper bound for this range or null is there is none.
/** * Gets an upper bound (if any) for this range. If existent, this range does not contain any version greater than * its upper bound. Note that complex version ranges might exclude some versions even within their bounds. * * @return An upper bound for this range or {@code null} is there is none. */
Bound getUpperBound();
A bound of a version range.
/** * A bound of a version range. */
final class Bound { private final Version version; private final boolean inclusive;
Creates a new bound with the specified properties.
Params:
  • version – The bounding version, must not be null.
  • inclusive – A flag whether the specified version is included in the range or not.
/** * Creates a new bound with the specified properties. * * @param version The bounding version, must not be {@code null}. * @param inclusive A flag whether the specified version is included in the range or not. */
public Bound( Version version, boolean inclusive ) { this.version = requireNonNull( version, "version cannot be null" ); this.inclusive = inclusive; }
Gets the bounding version.
Returns:The bounding version, never null.
/** * Gets the bounding version. * * @return The bounding version, never {@code null}. */
public Version getVersion() { return version; }
Indicates whether the bounding version is included in the range or not.
Returns:true if the bounding version is included in the range, false if not.
/** * Indicates whether the bounding version is included in the range or not. * * @return {@code true} if the bounding version is included in the range, {@code false} if not. */
public boolean isInclusive() { return inclusive; } @Override public boolean equals( Object obj ) { if ( obj == this ) { return true; } else if ( obj == null || !getClass().equals( obj.getClass() ) ) { return false; } Bound that = (Bound) obj; return inclusive == that.inclusive && version.equals( that.version ); } @Override public int hashCode() { int hash = 17; hash = hash * 31 + version.hashCode(); hash = hash * 31 + ( inclusive ? 1 : 0 ); return hash; } @Override public String toString() { return String.valueOf( version ); } } }