1 package org.apache.maven.scm.provider.hg.repository;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.scm.provider.ScmProviderRepositoryWithHost;
23 import org.codehaus.plexus.util.StringUtils;
24
25 import java.io.File;
26
27
28
29
30
31 public class HgScmProviderRepository
32 extends ScmProviderRepositoryWithHost
33 {
34
35 private static final String FILE = "";
36
37 private static final String SFTP = "sftp://";
38
39 private static final String FTP = "ftp://";
40
41 private static final String AFTP = "aftp://";
42
43 private static final String HTTP = "http://";
44
45 private static final String HTTPS = "https://";
46
47 private final String path;
48
49 private final String protocol;
50
51 private final String orgUrl;
52
53 public HgScmProviderRepository( String url )
54 {
55 orgUrl = url;
56 protocol = getProtocol( url );
57 path = parseUrl( url );
58 }
59
60 public String getURI()
61 {
62 return protocol + addAuthority() + addHost() + addPort() + addPath();
63 }
64
65
66
67
68 public String validateURI()
69 {
70
71 String msg = null;
72
73 if ( needsAuthentication() )
74 {
75 if ( getUser() == null )
76 {
77 msg = "Username is missing for protocol " + protocol;
78 }
79 else if ( getPassword() == null )
80 {
81 msg = "Password is missing for protocol " + protocol;
82 }
83 else if ( getHost() == null )
84 {
85 msg = "Host (eg. www.myhost.com) is missing for protocol " + protocol;
86 }
87 }
88
89 else if ( getPort() != 0 && getHost() == null )
90 {
91 msg = "Got port information without any host for protocol " + protocol;
92 }
93
94 if ( msg != null )
95 {
96 msg =
97 "Something could be wrong about the repository URL: " + orgUrl + "\nReason: " + msg
98 + "\nCheck http://maven.apache.org/scm for usage and hints.";
99 }
100 return msg;
101 }
102
103 private String getProtocol( String url )
104 {
105
106 String prot = FILE;
107 if ( url.startsWith( SFTP ) )
108 {
109 prot = SFTP;
110 }
111 else if ( url.startsWith( HTTP ) )
112 {
113 prot = HTTP;
114 }
115 else if ( url.startsWith( HTTPS ) )
116 {
117 prot = HTTPS;
118 }
119
120 return prot;
121 }
122
123 private String parseUrl( String url )
124 {
125 if ( protocol == FILE )
126 {
127 return url;
128 }
129
130
131 url = url.substring( protocol.length() );
132
133 url = parseUsernameAndPassword( url );
134
135 url = parseHostAndPort( url );
136
137 url = parsePath( url );
138
139 return url;
140 }
141
142 private String parseHostAndPort( String url )
143 {
144 if ( protocol != FILE )
145 {
146 int indexSlash = url.indexOf( '/' );
147
148 String hostPort = url;
149 if ( indexSlash > 0 )
150 {
151 hostPort = url.substring( 0, indexSlash );
152 url = url.substring( indexSlash );
153 }
154
155 int indexColon = hostPort.indexOf( ':' );
156 if ( indexColon > 0 )
157 {
158 setHost( hostPort.substring( 0, indexColon ) );
159 setPort( Integer.parseInt( hostPort.substring( indexColon + 1 ) ) );
160 }
161 else
162 {
163 setHost( hostPort );
164 }
165 }
166
167 return url;
168 }
169
170 private String parseUsernameAndPassword( String url )
171 {
172 if ( canAuthenticate() )
173 {
174 String[] split = url.split( "@" );
175 if ( split.length == 2 )
176 {
177 url = split[1];
178 split = split[0].split( ":" );
179 if ( split.length == 2 )
180 {
181 setUser( split[0] );
182 setPassword( split[1] );
183 }
184 else
185 {
186 setUser( split[0] );
187 }
188 }
189 }
190 return url;
191 }
192
193 private String parsePath( String url )
194 {
195 if ( protocol == FILE )
196 {
197
198 url = StringUtils.replace( url, "/", File.separator );
199
200
201 File tmpFile = new File( url );
202 String url2 = url.substring( File.pathSeparator.length() );
203 File tmpFile2 = new File( url2 );
204 if ( !tmpFile.exists() && !tmpFile2.exists() )
205 {
206
207 }
208
209 url = tmpFile2.exists() ? url2 : url;
210 }
211
212 return url;
213 }
214
215 private String addUser()
216 {
217 return ( getUser() == null ) ? "" : getUser();
218 }
219
220 private String addPassword()
221 {
222 return ( getPassword() == null ) ? "" : ":" + getPassword();
223 }
224
225 private String addHost()
226 {
227 return ( getHost() == null ) ? "" : getHost();
228 }
229
230 private String addPort()
231 {
232 return ( getPort() == 0 ) ? "" : ":" + getPort();
233 }
234
235 private String addPath()
236 {
237 return path;
238 }
239
240 private boolean needsAuthentication()
241 {
242 return protocol == SFTP || protocol == FTP || protocol == HTTPS || protocol == AFTP;
243 }
244
245 private String addAuthority()
246 {
247 return ( ( canAuthenticate() && ( getUser() != null ) ) ? addUser() + addPassword() + "@" : "" );
248 }
249
250
251 private boolean canAuthenticate()
252 {
253 return needsAuthentication() || protocol == HTTP;
254 }
255
256 public String toString()
257 {
258 return "Hg Repository Interpreted from: " + orgUrl + ":\nProtocol: " + protocol + "\nHost: " + getHost()
259 + "\nPort: " + getPort() + "\nUsername: " + getUser() + "\nPassword: " + getPassword() + "\nPath: "
260 + path;
261 }
262 }