1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.scm.provider;
20
21 import java.util.ArrayList;
22 import java.util.List;
23
24
25
26
27
28
29
30
31
32
33
34
35 public abstract class ScmUrlUtils {
36 private static final String ILLEGAL_SCM_URL =
37 "The scm url must be on the form 'scm:<scm provider><delimiter><provider specific part>' "
38 + "where <delimiter> can be either ':' or '|'.";
39
40
41
42
43
44
45
46 public static String getDelimiter(String scmUrl) {
47 scmUrl = scmUrl.substring(4);
48
49 int index = scmUrl.indexOf('|');
50
51 if (index == -1) {
52 index = scmUrl.indexOf(':');
53
54 if (index == -1) {
55 throw new IllegalArgumentException("The scm url does not contain a valid delimiter.");
56 }
57 }
58
59 return scmUrl.substring(index, index + 1);
60 }
61
62
63
64
65
66
67
68 public static String getProvider(String scmUrl) {
69 String delimiter = getDelimiter(scmUrl);
70
71 scmUrl = scmUrl.substring(4);
72
73 int firstDelimiterIndex = scmUrl.indexOf(delimiter);
74
75 return scmUrl.substring(0, firstDelimiterIndex);
76 }
77
78
79
80
81
82
83
84 public static String getProviderSpecificPart(String scmUrl) {
85 String delimiter = getDelimiter(scmUrl);
86
87 scmUrl = scmUrl.substring(4);
88
89 int firstDelimiterIndex = scmUrl.indexOf(delimiter);
90
91 return scmUrl.substring(firstDelimiterIndex + 1);
92 }
93
94
95
96
97
98
99
100
101
102
103
104 public static boolean isValid(String scmUrl) {
105 List<String> messages = validate(scmUrl);
106
107 return messages.isEmpty();
108 }
109
110
111
112
113
114
115
116
117
118
119 public static List<String> validate(String scmUrl) {
120 List<String> messages = new ArrayList<>();
121
122 if (scmUrl == null) {
123 messages.add("The scm url cannot be null.");
124
125 return messages;
126 }
127
128 if (!scmUrl.startsWith("scm:")) {
129 messages.add("The scm url must start with 'scm:'.");
130
131 return messages;
132 }
133
134 if (scmUrl.length() < 6) {
135 messages.add(ILLEGAL_SCM_URL);
136
137 return messages;
138 }
139
140 try {
141 getDelimiter(scmUrl);
142 } catch (IllegalArgumentException e) {
143 messages.add(e.getMessage());
144 }
145
146 return messages;
147 }
148 }