/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.cloud.ucsm.service;
import java.util.regex.Pattern;
public class UcsmVersionChecker {
/**
* TODO This code is *copied* from VersionChecker in com.emc.storageos.util package in the controllersvc project. Cannot create a direct
* dependency on controllersvc
* project as controllersvc depends on this (compute) project. Best to refactor the code into common area
*/
/**
* Compare the two versions
*
* @param minimumSupportedVersion
* @param version - version discovered
* @return 0 if versions are equal,
* < 0 if version is lower than minimumSupportedVersion,
* > 0 if version is higher than minimumSupportedVersion.
*/
public static int verifyVersionDetails(String minimumSupportedVersion, String version) {
if (minimumSupportedVersion == null) {
throw new IllegalArgumentException("minimum supported version received cannot be null");
} else if (version == null) {
throw new IllegalArgumentException("discovered version received cannot be null");
}
version = version.trim();
// split by dots, parentheses, and adjoining letters and numbers
String[] versionToVerifyWith = Pattern.compile("[\\.|\\)|\\(| ]|(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)", Pattern.DOTALL).split(
minimumSupportedVersion);
String[] versionProvided = Pattern.compile("[\\.|\\)|\\(| ]|(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)", Pattern.DOTALL).split(version);
// to remove leading zeroes from the first part. For vnxblock, the version is 05.32
versionToVerifyWith[0] = versionToVerifyWith[0].replaceFirst("^0*", "");
versionProvided[0] = versionProvided[0].replaceFirst("^0*", "");
int i = 0;
while (i < versionProvided.length && i < versionToVerifyWith.length
&& versionProvided[i].equals(versionToVerifyWith[i])) {
i++;
}
if (i < versionProvided.length && i < versionToVerifyWith.length) {
int length = (versionToVerifyWith[i].length() > versionProvided[i].length()) ?
versionToVerifyWith[i].length() : versionProvided[i].length();
if (versionToVerifyWith[i].length() > versionProvided[i].length()) {
versionProvided[i] = String.format("%" + length + 's', versionProvided[i]);
} else {
versionToVerifyWith[i] = String.format("%" + length + 's', versionToVerifyWith[i]);
}
int diff = versionProvided[i].compareTo(versionToVerifyWith[i]);
return diff < 0 ? -1 : diff == 0 ? 0 : 1;
}
return versionProvided.length < versionToVerifyWith.length ? -1
: versionProvided.length == versionToVerifyWith.length ? 0 : 1;
}
}