|
1 |
| |
|
2 |
| |
|
3 |
| |
|
4 |
| |
|
5 |
| |
|
6 |
| |
|
7 |
| |
|
8 |
| |
|
9 |
| |
|
10 |
| |
|
11 |
| |
|
12 |
| |
|
13 |
| |
|
14 |
| |
|
15 |
| |
|
16 |
| |
|
17 |
| |
|
18 |
| package javax.mail; |
|
19 |
| |
|
20 |
| import java.net.MalformedURLException; |
|
21 |
| import java.net.URI; |
|
22 |
| import java.net.URISyntaxException; |
|
23 |
| import java.net.URL; |
|
24 |
| |
|
25 |
| |
|
26 |
| |
|
27 |
| |
|
28 |
| public class URLName { |
|
29 |
| private String file; |
|
30 |
| private String host; |
|
31 |
| private String password; |
|
32 |
| private int port; |
|
33 |
| private String protocol; |
|
34 |
| private String ref; |
|
35 |
| private String username; |
|
36 |
| protected String fullURL; |
|
37 |
| private int hashCode; |
|
38 |
| |
|
39 |
37
| public URLName(String url) {
|
|
40 |
37
| parseString(url);
|
|
41 |
| } |
|
42 |
| |
|
43 |
37
| protected void parseString(String url) {
|
|
44 |
37
| URI uri;
|
|
45 |
37
| try {
|
|
46 |
37
| if (url == null) {
|
|
47 |
1
| uri = null;
|
|
48 |
| } else { |
|
49 |
36
| uri = new URI(url);
|
|
50 |
| } |
|
51 |
| } catch (URISyntaxException e) { |
|
52 |
0
| uri = null;
|
|
53 |
| } |
|
54 |
37
| if (uri == null) {
|
|
55 |
1
| protocol = null;
|
|
56 |
1
| host = null;
|
|
57 |
1
| port = -1;
|
|
58 |
1
| file = null;
|
|
59 |
1
| ref = null;
|
|
60 |
1
| username = null;
|
|
61 |
1
| password = null;
|
|
62 |
1
| return;
|
|
63 |
| } |
|
64 |
| |
|
65 |
36
| protocol = checkBlank(uri.getScheme());
|
|
66 |
36
| host = checkBlank(uri.getHost());
|
|
67 |
36
| port = uri.getPort();
|
|
68 |
36
| file = checkBlank(uri.getPath());
|
|
69 |
36
| ref = checkBlank(uri.getFragment());
|
|
70 |
36
| String userInfo = checkBlank(uri.getUserInfo());
|
|
71 |
36
| if (userInfo == null) {
|
|
72 |
18
| username = null;
|
|
73 |
18
| password = null;
|
|
74 |
| } else { |
|
75 |
18
| int pos = userInfo.indexOf(':');
|
|
76 |
18
| if (pos == -1) {
|
|
77 |
14
| username = userInfo;
|
|
78 |
14
| password = null;
|
|
79 |
| } else { |
|
80 |
4
| username = userInfo.substring(0, pos);
|
|
81 |
4
| password = userInfo.substring(pos + 1);
|
|
82 |
| } |
|
83 |
| } |
|
84 |
36
| updateFullURL();
|
|
85 |
| } |
|
86 |
| |
|
87 |
13
| public URLName(String protocol, String host, int port, String file, String username, String password) {
|
|
88 |
13
| this.protocol = checkBlank(protocol);
|
|
89 |
13
| this.host = checkBlank(host);
|
|
90 |
13
| this.port = port;
|
|
91 |
13
| if (file == null || file.length() == 0) {
|
|
92 |
9
| this.file = null;
|
|
93 |
9
| ref = null;
|
|
94 |
| } else { |
|
95 |
4
| int pos = file.indexOf('#');
|
|
96 |
4
| if (pos == -1) {
|
|
97 |
4
| this.file = file;
|
|
98 |
4
| ref = null;
|
|
99 |
| } else { |
|
100 |
0
| this.file = file.substring(0, pos);
|
|
101 |
0
| ref = file.substring(pos + 1);
|
|
102 |
| } |
|
103 |
| } |
|
104 |
13
| this.username = checkBlank(username);
|
|
105 |
13
| if (this.username != null) {
|
|
106 |
4
| this.password = checkBlank(password);
|
|
107 |
| } else { |
|
108 |
9
| this.password = null;
|
|
109 |
| } |
|
110 |
13
| updateFullURL();
|
|
111 |
| } |
|
112 |
| |
|
113 |
3
| public URLName(URL url) {
|
|
114 |
3
| protocol = checkBlank(url.getProtocol());
|
|
115 |
3
| host = checkBlank(url.getHost());
|
|
116 |
3
| port = url.getPort();
|
|
117 |
3
| file = checkBlank(url.getFile());
|
|
118 |
3
| ref = checkBlank(url.getRef());
|
|
119 |
3
| String userInfo = checkBlank(url.getUserInfo());
|
|
120 |
3
| if (userInfo == null) {
|
|
121 |
2
| username = null;
|
|
122 |
2
| password = null;
|
|
123 |
| } else { |
|
124 |
1
| int pos = userInfo.indexOf(':');
|
|
125 |
1
| if (pos == -1) {
|
|
126 |
0
| username = userInfo;
|
|
127 |
0
| password = null;
|
|
128 |
| } else { |
|
129 |
1
| username = userInfo.substring(0, pos);
|
|
130 |
1
| password = userInfo.substring(pos + 1);
|
|
131 |
| } |
|
132 |
| } |
|
133 |
3
| updateFullURL();
|
|
134 |
| } |
|
135 |
| |
|
136 |
238
| private static String checkBlank(String target) {
|
|
137 |
238
| if (target == null || target.length() == 0) {
|
|
138 |
107
| return null;
|
|
139 |
| } else { |
|
140 |
131
| return target;
|
|
141 |
| } |
|
142 |
| } |
|
143 |
| |
|
144 |
52
| private void updateFullURL() {
|
|
145 |
52
| hashCode = 0;
|
|
146 |
52
| StringBuffer buf = new StringBuffer(100);
|
|
147 |
52
| if (protocol != null) {
|
|
148 |
47
| buf.append(protocol).append(':');
|
|
149 |
47
| if (host != null) {
|
|
150 |
47
| buf.append("//");
|
|
151 |
47
| if (username != null) {
|
|
152 |
23
| buf.append(username);
|
|
153 |
23
| if (password != null) {
|
|
154 |
7
| buf.append(':').append(password);
|
|
155 |
| } |
|
156 |
23
| buf.append('@');
|
|
157 |
| } |
|
158 |
47
| buf.append(host);
|
|
159 |
47
| if (port != -1) {
|
|
160 |
2
| buf.append(':').append(port);
|
|
161 |
| } |
|
162 |
47
| if (file != null) {
|
|
163 |
11
| buf.append(file);
|
|
164 |
| } |
|
165 |
47
| hashCode = buf.toString().hashCode();
|
|
166 |
47
| if (ref != null) {
|
|
167 |
3
| buf.append('#').append(ref);
|
|
168 |
| } |
|
169 |
| } |
|
170 |
| } |
|
171 |
52
| fullURL = buf.toString();
|
|
172 |
| } |
|
173 |
| |
|
174 |
16
| public boolean equals(Object o) {
|
|
175 |
16
| if (o instanceof URLName == false) {
|
|
176 |
0
| return false;
|
|
177 |
| } |
|
178 |
16
| URLName other = (URLName) o;
|
|
179 |
| |
|
180 |
16
| if (protocol == null || other.protocol == null || !protocol.equals(other.protocol)) {
|
|
181 |
2
| return false;
|
|
182 |
| } |
|
183 |
| |
|
184 |
14
| if (port != other.port) {
|
|
185 |
1
| return false;
|
|
186 |
| } |
|
187 |
| |
|
188 |
| |
|
189 |
13
| return areSame(host, other.host) && areSame(file, other.file) && areSame(username, other.username) && areSame(password, other.password);
|
|
190 |
| } |
|
191 |
| |
|
192 |
47
| private static boolean areSame(String s1, String s2) {
|
|
193 |
47
| if (s1 == null) {
|
|
194 |
24
| return s2 == null;
|
|
195 |
| } else { |
|
196 |
23
| return s1.equals(s2);
|
|
197 |
| } |
|
198 |
| } |
|
199 |
| |
|
200 |
2
| public int hashCode() {
|
|
201 |
2
| return hashCode;
|
|
202 |
| } |
|
203 |
| |
|
204 |
12
| public String toString() {
|
|
205 |
12
| return fullURL;
|
|
206 |
| } |
|
207 |
| |
|
208 |
18
| public String getFile() {
|
|
209 |
18
| return file;
|
|
210 |
| } |
|
211 |
| |
|
212 |
18
| public String getHost() {
|
|
213 |
18
| return host;
|
|
214 |
| } |
|
215 |
| |
|
216 |
18
| public String getPassword() {
|
|
217 |
18
| return password;
|
|
218 |
| } |
|
219 |
| |
|
220 |
18
| public int getPort() {
|
|
221 |
18
| return port;
|
|
222 |
| } |
|
223 |
| |
|
224 |
18
| public String getProtocol() {
|
|
225 |
18
| return protocol;
|
|
226 |
| } |
|
227 |
| |
|
228 |
18
| public String getRef() {
|
|
229 |
18
| return ref;
|
|
230 |
| } |
|
231 |
| |
|
232 |
17
| public URL getURL() throws MalformedURLException {
|
|
233 |
17
| return new URL(fullURL);
|
|
234 |
| } |
|
235 |
| |
|
236 |
18
| public String getUsername() {
|
|
237 |
18
| return username;
|
|
238 |
| } |
|
239 |
| } |