blob: 3367c9fdeb98fb2ec9289736a89b28d39c14e496 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 Neil Bartlett.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Neil Bartlett - initial API and implementation
*******************************************************************************/
package aQute.bnd.build.model;
public class VersionPolicy {
private final LowerVersionMatchType lowerMatch;
private final UpperVersionMatchType upperMatch;
private final boolean upperInclusive;
public VersionPolicy(LowerVersionMatchType lowerMatch, UpperVersionMatchType upperMatch, boolean upperInclusive) {
assert lowerMatch != null;
this.lowerMatch = lowerMatch;
this.upperMatch = upperMatch;
this.upperInclusive = upperInclusive;
}
static VersionPolicy parse(String string) throws IllegalArgumentException {
String lowerSegment;
String upperSegment;
boolean upperInclusive;
if (string.charAt(0) == '[') {
int commaIndex = string.indexOf(',');
if (commaIndex < 0)
throw new IllegalArgumentException("Failed to parse version policy.");
lowerSegment = string.substring(1, commaIndex);
char lastChar = string.charAt(string.length() - 1);
if (lastChar == ')')
upperInclusive = false;
else if (lastChar == ']')
upperInclusive = true;
else
throw new IllegalArgumentException("Failed to parse version policy.");
upperSegment = string.substring(commaIndex + 1, string.length() - 1);
} else {
lowerSegment = string;
upperSegment = null;
upperInclusive = true;
}
LowerVersionMatchType lower = LowerVersionMatchType.parse(lowerSegment);
UpperVersionMatchType upper = upperSegment != null ? UpperVersionMatchType.parse(upperSegment) : null;
return new VersionPolicy(lower, upper, upperInclusive);
}
public LowerVersionMatchType getLowerMatch() {
return lowerMatch;
}
public UpperVersionMatchType getUpperMatch() {
return upperMatch;
}
public boolean isUpperInclusive() {
return upperInclusive;
}
@Override
public String toString() {
StringBuilder buffer = new StringBuilder();
if (upperMatch != null) {
buffer.append('[');
buffer.append(lowerMatch.getRepresentation());
buffer.append(',');
buffer.append(upperMatch.getRepresentation());
buffer.append(upperInclusive ? ']' : ')');
} else {
buffer.append(lowerMatch.getRepresentation());
}
return buffer.toString();
}
}