1 package net.sourceforge.pmd.lang;
2
3
4
5
6 public class LanguageVersion implements Comparable<LanguageVersion> {
7
8 private final Language language;
9 private final String version;
10 private final LanguageVersionHandler languageVersionHandler;
11
12 public LanguageVersion(Language language, String version, LanguageVersionHandler languageVersionHandler) {
13 this.language = language;
14 this.version = version;
15 this.languageVersionHandler = languageVersionHandler;
16 }
17
18 public Language getLanguage() {
19 return language;
20 }
21
22 public String getVersion() {
23 return version;
24 }
25
26 public LanguageVersionHandler getLanguageVersionHandler() {
27 return languageVersionHandler;
28 }
29
30
31
32
33
34
35 public String getName() {
36 return version.length() > 0 ? language.getName() + ' ' + version : language.getName();
37 }
38
39
40
41
42
43
44 public String getShortName() {
45 return version.length() > 0 ? language.getShortName() + ' ' + version : language.getShortName();
46 }
47
48
49
50
51
52
53 public String getTerseName() {
54 return version.length() > 0 ? language.getTerseName() + ' ' + version : language.getTerseName();
55 }
56
57 @Override
58 public int compareTo(LanguageVersion o) {
59 if(o == null) {
60 return 1;
61 }
62
63 int comp = getName().compareTo(o.getName());
64 if(comp != 0) {
65 return comp;
66 }
67
68 String[] vals1 = getName().split("\\.");
69 String[] vals2 = o.getName().split("\\.");
70 int i = 0;
71 while (i < vals1.length && i < vals2.length && vals1[i].equals(vals2[i])) {
72 i++;
73 }
74 if (i < vals1.length && i < vals2.length) {
75 int diff = Integer.valueOf(vals1[i]).compareTo(Integer.valueOf(vals2[i]));
76 return Integer.signum(diff);
77 } else {
78 return Integer.signum(vals1.length - vals2.length);
79 }
80 }
81
82 @Override
83 public String toString() {
84 return language.toString() + "+version:" + version;
85 }
86 }