1 package org.apache.maven.plugins.gpg;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.Arrays;
23 import java.util.regex.Matcher;
24 import java.util.regex.Pattern;
25
26
27
28
29
30
31
32
33
34 public class GpgVersion implements Comparable<GpgVersion>
35 {
36
37 private static final Pattern VERSION_PATTERN = Pattern.compile( "(\\d+\\.)+(\\d+)" );
38
39 private final int[] versionSegments;
40
41 private GpgVersion( int... versionSegments )
42 {
43 this.versionSegments = versionSegments;
44 }
45
46 public static GpgVersion parse( String rawVersion )
47 {
48 final Matcher versionMatcher = VERSION_PATTERN.matcher( rawVersion );
49 if ( !versionMatcher.find() )
50 {
51 throw new IllegalArgumentException( "Can't parse version of " + rawVersion );
52 }
53
54 final String[] rawVersionSegments = versionMatcher.group( 0 ).split( "\\." );
55
56 final int[] versionSegments = new int[rawVersionSegments.length];
57 for ( int index = 0; index < rawVersionSegments.length; index++ )
58 {
59 versionSegments[index] = Integer.parseInt( rawVersionSegments[index] );
60 }
61
62 return new GpgVersion( versionSegments );
63 }
64
65 @Override
66 public int compareTo( GpgVersion other )
67 {
68 final int[] thisSegments = versionSegments;
69 final int[] otherSegments = other.versionSegments;
70
71 int minSegments = Math.min( thisSegments.length, otherSegments.length );
72
73 for ( int index = 0; index < minSegments; index++ )
74 {
75 int compareValue = Integer.compare( thisSegments[index], otherSegments[index] );
76
77 if ( compareValue != 0 )
78 {
79 return compareValue;
80 }
81 }
82
83 return ( thisSegments.length - otherSegments.length );
84 }
85
86
87
88
89
90
91
92 public boolean isBefore( GpgVersion other )
93 {
94 return this.compareTo( other ) < 0;
95 }
96
97
98
99
100
101
102
103 public boolean isAtLeast( GpgVersion other )
104 {
105 return this.compareTo( other ) >= 0;
106 }
107
108 @Override
109 public String toString()
110 {
111 if ( versionSegments.length == 0 )
112 {
113 return "";
114 }
115
116 final StringBuilder versionStringBuilder = new StringBuilder();
117 versionStringBuilder.append( versionSegments[0] );
118
119 for ( int index = 1; index < versionSegments.length; index++ )
120 {
121 versionStringBuilder.append( '.' ).append( versionSegments[index] );
122 }
123
124 return versionStringBuilder.toString();
125 }
126
127 @Override
128 public boolean equals( final Object other )
129 {
130 if ( this == other )
131 {
132 return true;
133 }
134
135 if ( !( other instanceof GpgVersion ) )
136 {
137 return false;
138 }
139
140 final GpgVersion that = (GpgVersion) other;
141
142 return compareTo( that ) == 0;
143 }
144
145 @Override
146 public int hashCode()
147 {
148 return Arrays.hashCode( versionSegments );
149 }
150
151 }