/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang;
/**
* Created by christoferdutz on 21.09.14.
*/
public class LanguageVersion implements Comparable<LanguageVersion> {
private final Language language;
private final String version;
private final LanguageVersionHandler languageVersionHandler;
public LanguageVersion(Language language, String version, LanguageVersionHandler languageVersionHandler) {
this.language = language;
this.version = version;
this.languageVersionHandler = languageVersionHandler;
}
public Language getLanguage() {
return language;
}
public String getVersion() {
return version;
}
public LanguageVersionHandler getLanguageVersionHandler() {
return languageVersionHandler;
}
/**
* Get the name of this LanguageVersion. This is Language name appended with
* the LanguageVersion version if not an empty String.
*
* @return The name of this LanguageVersion.
*/
public String getName() {
return version.length() > 0 ? language.getName() + ' ' + version : language.getName();
}
/**
* Get the short name of this LanguageVersion. This is Language short name
* appended with the LanguageVersion version if not an empty String.
*
* @return The short name of this LanguageVersion.
*/
public String getShortName() {
return version.length() > 0 ? language.getShortName() + ' ' + version : language.getShortName();
}
/**
* Get the terse name of this LanguageVersion. This is Language terse name
* appended with the LanguageVersion version if not an empty String.
*
* @return The terse name of this LanguageVersion.
*/
public String getTerseName() {
return version.length() > 0 ? language.getTerseName() + ' ' + version : language.getTerseName();
}
@Override
public int compareTo(LanguageVersion o) {
if (o == null) {
return 1;
}
int comp = getName().compareTo(o.getName());
if (comp != 0) {
return comp;
}
String[] vals1 = getName().split("\\.");
String[] vals2 = o.getName().split("\\.");
int i = 0;
while (i < vals1.length && i < vals2.length && vals1[i].equals(vals2[i])) {
i++;
}
if (i < vals1.length && i < vals2.length) {
int diff = Integer.valueOf(vals1[i]).compareTo(Integer.valueOf(vals2[i]));
return Integer.signum(diff);
} else {
return Integer.signum(vals1.length - vals2.length);
}
}
@Override
public String toString() {
return language.toString() + "+version:" + version;
}
}