]> source.dussan.org Git - archiva.git/blob
1e94ff292ace3a1d424448687f5c6a09ff3e63d4
[archiva.git] /
1 package org.apache.archiva.model;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 /**
23  * RepositoryURL - Mutable (and protocol forgiving) URL object.
24  *
25  *
26  */
27 public class RepositoryURL
28 {
29     private String url;
30
31     private String protocol;
32
33     private String host;
34
35     private String port;
36
37     private String username;
38
39     private String password;
40
41     private String path;
42
43     public RepositoryURL( String url )
44     {
45         this.url = url;
46
47         // .\ Parse the URL \.____________________________________________
48
49         int pos;
50
51         pos = url.indexOf( ":/" );
52         if ( pos == ( -1 ) )
53         {
54             throw new IllegalArgumentException( "Invalid URL, unable to parse protocol:// from " + url );
55         }
56
57         protocol = url.substring( 0, pos );
58
59         // Determine the post protocol position.
60         int postProtocolPos = protocol.length() + 1;
61         while ( url.charAt( postProtocolPos ) == '/' )
62         {
63             postProtocolPos++;
64         }
65         
66         // Handle special case with file protocol (which has no host, port, username, or password)
67         if ( "file".equals( protocol ) )
68         {
69             path = "/" + url.substring( postProtocolPos );
70
71             return;
72         }
73
74         // attempt to find the start of the 'path'
75         pos = url.indexOf( "/", postProtocolPos );
76
77         // no path specified - ex "http://localhost"
78         if ( pos == ( -1 ) )
79         {
80             // set pos to end of string. (needed for 'middle section')
81             pos = url.length();
82             // default path
83             path = "/";
84         }
85         else
86         {
87             // get actual path.
88             path = url.substring( pos );
89         }
90
91         // get the middle section ( username : password @ hostname : port )
92         String middle = url.substring( postProtocolPos, pos );
93
94         pos = middle.indexOf( '@' );
95
96         // we have an authentication section.
97         if ( pos > 0 )
98         {
99             String authentication = middle.substring( 0, pos );
100             middle = middle.substring( pos + 1 ); // lop off authentication for host:port search
101
102             pos = authentication.indexOf( ':' );
103
104             // we have a password.
105             if ( pos > 0 )
106             {
107                 username = authentication.substring( 0, pos );
108                 password = authentication.substring( pos + 1 );
109             }
110             else
111             {
112                 username = authentication;
113             }
114         }
115
116         pos = middle.indexOf( ':' );
117
118         // we have a defined port
119         if ( pos > 0 )
120         {
121             host = middle.substring( 0, pos );
122             port = middle.substring( pos + 1 );
123         }
124         else
125         {
126             host = middle;
127         }
128     }
129
130     public String toString()
131     {
132         return url;
133     }
134
135     public String getUsername()
136     {
137         return username;
138     }
139
140     public String getPassword()
141     {
142         return password;
143     }
144
145     public String getHost()
146     {
147         return host;
148     }
149
150     public String getPath()
151     {
152         return path;
153     }
154
155     public String getPort()
156     {
157         return port;
158     }
159
160     public String getProtocol()
161     {
162         return protocol;
163     }
164
165     public String getUrl()
166     {
167         return url;
168     }
169 }