6
6
* Time: 2:21 PM
7
7
*/
8
8
public class GAV {
9
+ private static final String OPTIONAL_SUFFIX = "!optional" ;
9
10
public static GAV parse (String gav ) {
10
11
String [] parts = gav .split (":" );
11
12
if (parts .length < 3 || parts .length > 5 ) {
12
13
throw new IllegalArgumentException ("can't parse '" + gav + "' as a module coordinates (GAV). " +
13
14
"It must have at least 3 parts separated by columns. (4th and 5th are optional and correspond to artifact type and classifier)" );
14
15
}
16
+ boolean optional = false ;
17
+ if (parts [parts .length -1 ].endsWith (OPTIONAL_SUFFIX )) {
18
+ optional = true ;
19
+ parts [parts .length -1 ] = parts [parts .length -1 ].substring (0 , parts [parts .length -1 ].length ()-OPTIONAL_SUFFIX .length ());
20
+ }
15
21
if (parts .length == 3 ) {
16
- return new GAV (parts [0 ], parts [1 ], parts [2 ]);
22
+ return new GAV (parts [0 ], parts [1 ], parts [2 ], optional );
17
23
}
18
24
if (parts .length == 4 ) {
19
- return new GAV (parts [0 ], parts [1 ], parts [2 ], parts [3 ]);
25
+ return new GAV (parts [0 ], parts [1 ], parts [2 ], parts [3 ], optional );
20
26
}
21
- return new GAV (parts [0 ], parts [1 ], parts [2 ], parts [3 ], parts [4 ]);
27
+ return new GAV (parts [0 ], parts [1 ], parts [2 ], parts [3 ], parts [4 ], optional );
22
28
}
23
29
24
30
private final String groupId ;
25
31
private final String artifactId ;
26
32
private final String version ;
27
33
private final String type ;
28
34
private final String classifier ;
35
+ private final boolean optional ;
29
36
30
- public GAV (String groupId , String artifactId , String version ) {
31
- this (groupId , artifactId , version , null , null );
37
+ public GAV (String groupId , String artifactId , String version , final boolean optional ) {
38
+ this (groupId , artifactId , version , null , null , optional );
32
39
}
33
40
34
- public GAV (String groupId , String artifactId , String version , String type ) {
35
- this (groupId , artifactId , version , type , null );
41
+ public GAV (String groupId , String artifactId , String version , String type , final boolean optional ) {
42
+ this (groupId , artifactId , version , type , null , optional );
36
43
}
37
44
38
- public GAV (final String groupId , final String artifactId , final String version , final String type , final String classifier ) {
45
+ public GAV (final String groupId , final String artifactId , final String version , final String type , final String classifier , final boolean optional ) {
39
46
this .groupId = groupId ;
40
47
this .artifactId = artifactId ;
41
48
this .version = version ;
42
49
this .type = type ;
43
50
this .classifier = classifier ;
51
+ this .optional = optional ;
44
52
}
45
53
46
54
public String getGroupId () {
@@ -62,7 +70,11 @@ public String getType() {
62
70
public String getClassifier () {
63
71
return classifier ;
64
72
}
65
-
73
+
74
+ public boolean isOptional () {
75
+ return optional ;
76
+ }
77
+
66
78
@ Override
67
79
public String toString () {
68
80
return groupId + ":" + artifactId + ":" + version ;
@@ -74,12 +86,13 @@ public String toString() {
74
86
* through GAV.parse()
75
87
*/
76
88
public String toParseableString (){
89
+ String suffix = optional ?OPTIONAL_SUFFIX :"" ;
77
90
if (type == null ){
78
- return groupId + ":" + artifactId + ":" + version ;
91
+ return groupId + ":" + artifactId + ":" + version + suffix ;
79
92
}
80
93
if (classifier == null ) {
81
- return groupId + ":" + artifactId + ":" + version + ":" + type ;
94
+ return groupId + ":" + artifactId + ":" + version + ":" + type + suffix ;
82
95
}
83
- return groupId + ":" + artifactId + ":" + version + ":" + type + ":" + classifier ;
96
+ return groupId + ":" + artifactId + ":" + version + ":" + type + ":" + classifier + suffix ;
84
97
}
85
98
}
0 commit comments