org.kie.eclipse.runtime.AbstractRuntime Maven / Gradle / Ivy
/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* 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.
*/
package org.kie.eclipse.runtime;
public abstract class AbstractRuntime implements IRuntime {
/**
* Added because of https://issues.jboss.org/browse/DROOLS-1154 This class
* parses a version string into its component "major number", "minor number"
* , "patch level" and an optional "build name". Major and minor must be
* non-negative integers. The patch number may be a lower- or upper-case "x"
* which is interpreted as "any patch level"; internally this is represented
* as an integer value of -1. The build name can be any text, including "."
* characters. For example these are all valid version numbers:
*
* 6.4.0
* 6.4.0.Final
* 6.4.0.SNAPSHOT-1.0.0
* 6.4.x
* 6.4.x.Final
*/
public static class Version implements Comparable {
int major;
int minor;
int patch;
String build;
public Version(String version) {
this();
if (validate(version)==null) {
String parts[] = version.split("\\.");
major = Integer.parseInt(parts[0]);
minor = Integer.parseInt(parts[1]);
if (parts[2].equalsIgnoreCase("X"))
patch = -1;
else
patch = Integer.parseInt(parts[2]);
for (int i=3; i=0 && minor>=0 && patch >= -1;
}
public static String validate(String version) {
int major = -1;
int minor = -1;
int patch = -2;
if (version==null || version.isEmpty()) {
return "Version may not be empty";
}
String parts[] = version.split("\\.");
if (parts.length < 3) {
return "Version must be in the form major#.minor#.patch#[.build-name]";
} else {
try {
major = Integer.parseInt(parts[0]);
minor = Integer.parseInt(parts[1]);
if (parts[2].equalsIgnoreCase("X"))
patch = -1;
else
patch = Integer.parseInt(parts[2]);
} catch (Exception e) {
}
if (major<0) {
return "Version major number is invalid";
} else if (minor<0) {
return "Version minor number is invalid";
} else if (patch<-1) {
return "Version patch number is invalid";
}
}
return null;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (obj instanceof Version) {
Version that = (Version) obj;
if (this.major == that.major &&
this.minor == that.minor &&
(this.patch==-1 || that.patch==-1 || this.patch==that.patch)) {
// so far, so good. compare build names
if (this.build==null && that.build==null)
return true;
if (this.build!=null && this.build.equals(that.build))
return true;
}
return false;
}
return obj.toString().equals(this.toString());
}
public boolean compatible(Version that) {
return this.major == that.major &&
this.minor == that.minor &&
(this.patch==-1 || that.patch==-1 || this.patch==that.patch);
}
@Override
public int compareTo(Version that) {
int i = this.major - that.major;
if (i==0) {
i = this.minor - that.minor;
if (i==0) {
if (this.patch == -1)
return -1;
if (that.patch == -1)
return 1;
i = this.patch - that.patch;
}
}
return i;
}
@Override
public String toString() {
String version = ""
+ (major<0 ? "z" : major) + "."
+ (minor<0 ? "y" : minor) + "."
+ (patch<0 ? "x" : patch);
if (build!=null && !build.isEmpty())
version += "." + build;
return version;
}
public int getMajor() {
return major;
}
public int getMinor() {
return minor;
}
public int getPatch() {
return patch;
}
public String getBuild() {
return build;
}
}
protected Version version = new Version();
protected String name;
protected String path;
protected boolean isDefault;
protected String[] jars;
@Override
public Version getVersion() {
return version;
}
@Override
public void setVersion(String version) {
this.version = new Version(version);
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public String getPath() {
return path;
}
@Override
public void setPath(String path) {
this.path = path;
}
@Override
public boolean isDefault() {
return isDefault;
}
@Override
public void setDefault(boolean isDefault) {
this.isDefault = isDefault;
}
@Override
public String[] getJars() {
return jars;
}
@Override
public void setJars(String[] jars) {
this.jars = jars;
}
public String toString() {
return getName();
}
abstract public String getProduct();
public void setProduct(String string) {
}
public String getId() {
return createRuntimeId(getProduct(), getVersion().toString());
}
public static String createRuntimeId(String product, String version) {
return product + "_" + version;
}
public static String getProductFromId(String runtimeId) {
int i = runtimeId.lastIndexOf("_");
if (i>0) {
return runtimeId.substring(0,i);
}
return null;
}
public static String getVersionFromId(String runtimeId) {
int i = runtimeId.lastIndexOf("_");
if (i>0) {
return runtimeId.substring(i+1);
}
return null;
}
@Override
public boolean equals(Object obj) {
if (obj==this)
return true;
if (obj==null)
return false;
if (obj instanceof IRuntime) {
IRuntime that = ((IRuntime)obj);
if (this.getProduct().equals(that.getProduct()) && this.getVersion().equals(that.getVersion())) {
return true;
}
}
return super.equals(obj);
}
@Override
public int compareTo(IRuntime that) {
int i = getProduct().compareTo(that.getProduct());
if (i==0) {
i = getVersion()==null ? -1 : getVersion().toString().compareTo(that.getVersion().toString());
}
return i;
}
}