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

org.mule.util.VersionRange Maven / Gradle / Ivy

There is a newer version: 3.9.0
Show newest version
/*
 * $Id: VersionRange.java 24278 2012-04-16 17:55:38Z cmordue $
 * --------------------------------------------------------------------------------------
 * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
 *
 * The software in this package is published under the terms of the CPAL v1.0
 * license, a copy of which has been included with this distribution in the
 * LICENSE.txt file.
 */

package org.mule.util;

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

public class VersionRange {
    
	public static final String VERSION_RANGE = "([\\[(])([^,\\[\\]()]*),([^,\\[\\]()]*)([\\])])";
	public static final String LOWER_BOUND_INCLUSIVE = "[";
	public static final String LOWER_BOUND_EXCLUSIVE = "(";
	public static final String UPPER_BOUND_INCLUSIVE = "]";
	public static final String UPPER_BOUND_EXCLUSIVE = ")";
	
    /**
     * pattern for extracting a ranges of versions.
     * example: [1.5.0_11,1.6),[1.6.0_15,1.7),[1.7.0,]
     * G1: [1.5.0_11,1.6)
     * G2: [
     * G3: 1.5.0_11
     * G4: 1.6
     * G5: )
     * G6: [1.6.0_15,1.7),[1.7.0,]
     */
    public static final Pattern VERSION_RANGES = Pattern.compile("(" + VERSION_RANGE + "),?");
	public static final Pattern VALID_VERSION_RANGES = Pattern.compile("^(?:" + VERSION_RANGE + ",?)+$");
    
    public static List createVersionRanges(String versionsString)
    {
    	if (!VALID_VERSION_RANGES.matcher(versionsString).matches())
    	{
    		throw new IllegalArgumentException("Version range doesn't match pattern: " + VALID_VERSION_RANGES.pattern());
    	}
    	
    	List versions = new ArrayList();
    	
		Matcher m = VERSION_RANGES.matcher(versionsString);
		while (m.find())
    	{
			versions.add(new VersionRange(m.group(1)));
    	}
		
		return versions;
    }

	private boolean isLowerBoundInclusive = false;
	private boolean isUpperBoundInclusive = false;
	private String lowerVersion;
	private String upperVersion;
	
	public VersionRange(String versionRange)
	{
		Matcher m = VERSION_RANGES.matcher(versionRange);
		if (!m.matches())
		{
			throw new IllegalArgumentException("Version range doesn't match pattern: " + VERSION_RANGES.pattern());
		}
		if (LOWER_BOUND_INCLUSIVE.equals(m.group(2)))
		{
			isLowerBoundInclusive = true;
		}
		if (UPPER_BOUND_INCLUSIVE.equals(m.group(5)))
		{
			isUpperBoundInclusive = true;
		}
		lowerVersion = m.group(3);
		upperVersion = m.group(4);
	}
	
	public String getLowerVersion()
	{
		return lowerVersion;
	}
	
	public String getUpperVersion()
	{
		return upperVersion;
	}
	
	public boolean isLowerBoundInclusive()
	{
		return isLowerBoundInclusive;
	}
	
	public boolean isUpperBoundInclusive()
	{
		return isUpperBoundInclusive;
	}
	
	@Override
	public String toString()
	{
		StringBuilder sb = new StringBuilder();
		sb.append(isLowerBoundInclusive() ? LOWER_BOUND_INCLUSIVE : LOWER_BOUND_EXCLUSIVE);
		sb.append(getLowerVersion());
		sb.append(",");
		sb.append(getUpperVersion());
		sb.append(isUpperBoundInclusive() ? UPPER_BOUND_INCLUSIVE : UPPER_BOUND_EXCLUSIVE);
		return sb.toString();
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy