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

aQute.bnd.version.MavenVersionRange Maven / Gradle / Ivy

The newest version!
package aQute.bnd.version;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MavenVersionRange {
	private static final Pattern	RESTRICTION_P	= Pattern.compile(""	//
		+ "\\s*("															//
		+ "(?"														//
		+ "(?
  • \\[|\\()\\s*" // + "(?[^,\\s\\]\\[()]*)\\s*" // + ",\\s*" // + "(?[^,\\s\\[\\]()]*)\\s*" // + "(?\\]|\\))" // + ")" // + "|" // + "(?[^,\\s\\]\\[()]+)" // + "|" // + "(\\[" // + "(?[^,\\s\\]\\[()]+)" // + "\\])" // + ")\\s*" // + "(?,)?" // , Pattern.COMMENTS); private final boolean pair; private final boolean li; private final boolean hi; private final MavenVersion low; private final MavenVersion high; private final MavenVersionRange nextOr; public MavenVersionRange(String range) { this(RESTRICTION_P.matcher(range == null ? "0" : range)); } private MavenVersionRange(Matcher m) { if (!m.lookingAt()) throw new IllegalArgumentException("Invalid version range " + m); pair = m.group("pair") != null; if (pair) { li = m.group("li") .equals("["); hi = m.group("hi") .equals("]"); String v = m.group("low") .trim(); if (v.isEmpty()) { low = MavenVersion.RANGE_LOWEST; } else { low = MavenVersion.parseMavenString(v); } v = m.group("high") .trim(); if (v.isEmpty()) { high = MavenVersion.RANGE_HIGHEST; } else { high = MavenVersion.parseMavenString(v); } } else { String single = m.group("single"); if (single != null) { li = hi = true; low = new MavenVersion(single); high = MavenVersion.RANGE_HIGHEST; } else { String exact = m.group("exact"); li = hi = true; low = high = new MavenVersion(exact); } } if (m.group("comma") != null) { m.region(m.end(), m.regionEnd()); nextOr = new MavenVersionRange(m); } else { nextOr = null; } } public boolean includes(MavenVersion mvr) { int l = mvr.compareTo(low); int h = (high == MavenVersion.RANGE_HIGHEST) ? -1 : mvr.compareTo(high); boolean lowOk = l > 0 || (li && l == 0); boolean highOk = h < 0 || (hi && h == 0); if (lowOk && highOk) return true; if (nextOr != null) return nextOr.includes(mvr); return false; } @Override public String toString() { StringBuilder sb = new StringBuilder(); toString(sb); return sb.toString(); } private void toString(StringBuilder sb) { if (pair) { sb.append(li ? '[' : '(') .append(low) .append(',') .append(high) .append(hi ? ']' : ')'); } else if (low == high) { // exact sb.append('[') .append(low) .append(']'); } else { // single sb.append(low); } if (nextOr != null) { sb.append(','); nextOr.toString(sb); } } public static MavenVersionRange parseRange(String version) { try { return new MavenVersionRange(version); } catch (Exception e) { // ignore } return null; } public boolean wasSingle() { return !pair && (high == MavenVersion.RANGE_HIGHEST) && (nextOr == null); } public static boolean isRange(String version) { if (version == null) return false; version = version.trim(); return version.startsWith("[") || version.startsWith("("); } }




  • © 2015 - 2024 Weber Informatics LLC | Privacy Policy