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