Version.java
4.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
* Decompiled with CFR 0_118.
*/
package com.day.jcr.vault.packaging;
import com.day.jcr.vault.util.Text;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
/*
* This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6.
*/
@Deprecated
public class Version
implements Comparable<Version> {
public static final Version EMPTY = new Version("", new String[0]);
private final String str;
private final String[] segments;
public Version(String str) {
this(str, Text.explode(str, 46));
}
public Version(String[] segments) {
this(Text.implode(segments, "."), segments);
}
public static Version create(String str) {
if (str == null || str.length() == 0) {
return EMPTY;
}
return new Version(str, Text.explode(str, 46));
}
public static Version create(String[] segments) {
if (segments == null || segments.length == 0) {
return EMPTY;
}
return new Version(Text.implode(segments, "."), segments);
}
private Version(String str, String[] segments) {
if (str == null) {
throw new NullPointerException("Version String must not be null.");
}
this.str = str;
this.segments = segments;
}
public int hashCode() {
return this.str.hashCode();
}
public boolean equals(Object o) {
return this == o || o instanceof Version && this.str.equals(((Version)o).str);
}
public String toString() {
return this.str;
}
public String[] getNormalizedSegments() {
return this.segments;
}
@Override
public int compareTo(Version o) {
String[] oSegs = o.getNormalizedSegments();
for (int i = 0; i < Math.min(this.segments.length, oSegs.length); ++i) {
String s1 = this.segments[i];
String s2 = oSegs[i];
if (s1.equals(s2)) continue;
try {
int v1 = Integer.parseInt(this.segments[i]);
int v2 = Integer.parseInt(oSegs[i]);
if (v1 != v2) {
return v1 - v2;
}
}
catch (NumberFormatException e) {
// empty catch block
}
String[] ss1 = Text.explode(s1, 45);
String[] ss2 = Text.explode(s2, 45);
for (int j = 0; j < Math.min(ss1.length, ss2.length); ++j) {
int c;
String c1 = ss1[j];
String c2 = ss2[j];
try {
int v1 = Integer.parseInt(c1);
int v2 = Integer.parseInt(c2);
if (v1 != v2) {
return v1 - v2;
}
}
catch (NumberFormatException e) {
// empty catch block
}
if ((c = c1.compareTo(c2)) == 0) continue;
return c;
}
int c = ss1.length - ss2.length;
if (c == 0) continue;
return - c;
}
return this.segments.length - oSegs.length;
}
public int osgiCompareTo(Version o) {
ArrayList<String> segs0 = new ArrayList<String>();
ArrayList<String> segs1 = new ArrayList<String>();
for (String s2 : this.segments) {
segs0.addAll(Arrays.asList(Text.explode(s2, 45)));
}
for (String s2 : o.getNormalizedSegments()) {
segs1.addAll(Arrays.asList(Text.explode(s2, 45)));
}
int len = Math.min(segs0.size(), segs1.size());
for (int i = 0; i < len; ++i) {
String s22;
String s1 = (String)segs0.get(i);
int c = s1.compareTo(s22 = (String)segs1.get(i));
if (c == 0) continue;
try {
int v1 = Integer.parseInt(s1);
int v2 = Integer.parseInt(s22);
if (v1 != v2) {
return v1 - v2;
}
}
catch (NumberFormatException e) {
// empty catch block
}
return c;
}
return segs0.size() - segs1.size();
}
}