1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.eclipse.aether.repository;
20
21 import java.util.Objects;
22
23 /**
24 * A proxy to use for connections to a repository.
25 */
26 public final class Proxy {
27
28 /**
29 * Type denoting a proxy for HTTP transfers.
30 */
31 public static final String TYPE_HTTP = "http";
32
33 /**
34 * Type denoting a proxy for HTTPS transfers.
35 */
36 public static final String TYPE_HTTPS = "https";
37
38 private final String type;
39
40 private final String host;
41
42 private final int port;
43
44 private final Authentication auth;
45
46 /**
47 * Creates a new proxy with the specified properties and no authentication.
48 *
49 * @param type The type of the proxy, e.g. "http", may be {@code null}.
50 * @param host The host of the proxy, may be {@code null}.
51 * @param port The port of the proxy.
52 */
53 public Proxy(String type, String host, int port) {
54 this(type, host, port, null);
55 }
56
57 /**
58 * Creates a new proxy with the specified properties.
59 *
60 * @param type The type of the proxy, e.g. "http", may be {@code null}.
61 * @param host The host of the proxy, may be {@code null}.
62 * @param port The port of the proxy.
63 * @param auth The authentication to use for the proxy connection, may be {@code null}.
64 */
65 public Proxy(String type, String host, int port, Authentication auth) {
66 this.type = (type != null) ? type : "";
67 this.host = (host != null) ? host : "";
68 this.port = port;
69 this.auth = auth;
70 }
71
72 /**
73 * Gets the type of this proxy.
74 *
75 * @return The type of this proxy, never {@code null}.
76 */
77 public String getType() {
78 return type;
79 }
80
81 /**
82 * Gets the host for this proxy.
83 *
84 * @return The host for this proxy, never {@code null}.
85 */
86 public String getHost() {
87 return host;
88 }
89
90 /**
91 * Gets the port number for this proxy.
92 *
93 * @return The port number for this proxy.
94 */
95 public int getPort() {
96 return port;
97 }
98
99 /**
100 * Gets the authentication to use for the proxy connection.
101 *
102 * @return The authentication to use or {@code null} if none.
103 */
104 public Authentication getAuthentication() {
105 return auth;
106 }
107
108 @Override
109 public String toString() {
110 return getHost() + ':' + getPort();
111 }
112
113 @Override
114 public boolean equals(Object obj) {
115 if (this == obj) {
116 return true;
117 }
118 if (obj == null || !getClass().equals(obj.getClass())) {
119 return false;
120 }
121
122 Proxy that = (Proxy) obj;
123
124 return Objects.equals(type, that.type)
125 && Objects.equals(host, that.host)
126 && port == that.port
127 && Objects.equals(auth, that.auth);
128 }
129
130 @Override
131 public int hashCode() {
132 int hash = 17;
133 hash = hash * 31 + hash(host);
134 hash = hash * 31 + hash(type);
135 hash = hash * 31 + port;
136 hash = hash * 31 + hash(auth);
137 return hash;
138 }
139
140 private static int hash(Object obj) {
141 return obj != null ? obj.hashCode() : 0;
142 }
143 }