22
33import org .utplsql .api .exception .InvalidVersionException ;
44
5+ import java .util .Map ;
6+ import java .util .Objects ;
7+ import java .util .function .Function ;
58import java .util .regex .Matcher ;
69import java .util .regex .Pattern ;
10+ import java .util .stream .Stream ;
11+
12+ import static java .util .stream .Collectors .toMap ;
713
814/** Simple class to parse utPLSQL Version-information and provide the separate version-numbers
915 *
1016 * @author pesse
1117 */
1218public class Version implements Comparable <Version > {
13- private String origString ;
14- private Integer major ;
15- private Integer minor ;
16- private Integer bugfix ;
17- private Integer build ;
18- private boolean valid = false ;
19-
20- public Version ( String versionString ) {
19+
20+ public final static Version V3_0_0 = new Version ("3.0.0" , 3 ,0 ,0 ,null , true );
21+ public final static Version V3_0_1 = new Version ("3.0.1" , 3 ,0 ,1 ,null , true );
22+ public final static Version V3_0_2 = new Version ("3.0.2" , 3 ,0 ,2 ,null , true );
23+ public final static Version V3_0_3 = new Version ("3.0.3" , 3 ,0 ,3 ,null , true );
24+ public final static Version V3_0_4 = new Version ("3.0.4" , 3 ,0 ,4 ,null , true );
25+ public final static Version V3_1_0 = new Version ("3.1.0" , 3 ,1 ,0 ,null , true );
26+ public final static Version V3_1_1 = new Version ("3.1.1" , 3 ,1 ,1 ,null , true );
27+ public final static Version V3_1_2 = new Version ("3.1.2" , 3 ,1 ,2 ,null , true );
28+ private final static Map <String , Version > knownVersions =
29+ Stream .of (V3_0_0 , V3_0_1 , V3_0_2 , V3_0_3 , V3_0_4 , V3_1_0 , V3_1_1 , V3_1_2 )
30+ .collect (toMap (Version ::toString , Function .identity ()));
31+
32+ private final String origString ;
33+ private final Integer major ;
34+ private final Integer minor ;
35+ private final Integer bugfix ;
36+ private final Integer build ;
37+ private final boolean valid ;
38+
39+ private Version (String origString , Integer major , Integer minor , Integer bugfix , Integer build , boolean valid ) {
40+ this .origString = origString ;
41+ this .major = major ;
42+ this .minor = minor ;
43+ this .bugfix = bugfix ;
44+ this .build = build ;
45+ this .valid = valid ;
46+ }
47+
48+ /**
49+ * Use {@link Version#create} factory method instead
50+ * For removal
51+ */
52+ @ Deprecated ()
53+ public Version (String versionString ) {
2154 assert versionString != null ;
22- this .origString = versionString ;
23- parseVersionString ();
55+ Version dummy = parseVersionString (versionString );
56+
57+ this .origString = dummy .origString ;
58+ this .major = dummy .major ;
59+ this .minor =dummy .minor ;
60+ this .bugfix = dummy .bugfix ;
61+ this .build = dummy .build ;
62+ this .valid = dummy .valid ;
2463 }
2564
26- private void parseVersionString ()
65+ public static Version create (final String versionString ) {
66+ String origString = Objects .requireNonNull (versionString );
67+ Version version = knownVersions .get (origString );
68+ return version != null ? version : parseVersionString (origString );
69+ }
70+
71+ private static Version parseVersionString (String origString )
2772 {
73+
74+ Integer major = null ;
75+ Integer minor = null ;
76+ Integer bugfix = null ;
77+ Integer build = null ;
78+ boolean valid = false ;
2879 Pattern p = Pattern .compile ("([0-9]+)\\ .?([0-9]+)?\\ .?([0-9]+)?\\ .?([0-9]+)?" );
2980
3081 Matcher m = p .matcher (origString );
@@ -48,6 +99,8 @@ private void parseVersionString()
4899 {
49100 valid = false ;
50101 }
102+
103+ return new Version (origString , major , minor , bugfix , build , valid );
51104 }
52105
53106 @ Override
@@ -83,13 +136,13 @@ public String getNormalizedString()
83136 {
84137 if ( isValid () ) {
85138 StringBuilder sb = new StringBuilder ();
86- sb .append (String . valueOf ( major ) );
139+ sb .append (major );
87140 if ( minor != null )
88- sb .append ("." + String . valueOf (minor ) );
141+ sb .append ("." ). append (minor );
89142 if ( bugfix != null )
90- sb .append ("." + String . valueOf (bugfix ) );
143+ sb .append ("." ). append (bugfix );
91144 if ( build != null )
92- sb .append ("." + String . valueOf (build ) );
145+ sb .append ("." ). append (build );
93146
94147 return sb .toString ();
95148 }
0 commit comments