blob: 420978f290e0d5ec8313b579a8f61e7d7815c16f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.core.network.proxy;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Immutable class representing all network proxy settings.
*
* Holds all proxy settings values if they were successfully retrieved
* or tells that they were not retrieved well.
*
* @author lfischme
*/
public final class NetworkProxySettings {
public static enum ProxyMode {
DIRECT,
AUTO,
MANUAL
}
private static final Logger LOGGER = Logger.getLogger(NetworkProxySettings.class.getName());
private static final String COLON = ":"; //NOI18N
private static final String SLASH = "/"; //NOI18N
private static final String EMPTY_STRING = ""; //NOI18N
private final boolean resolved;
private final ProxyMode proxyMode;
private final String httpProxyHost;
private final String httpProxyPort;
private final String httpsProxyHost;
private final String httpsProxyPort;
private final String socksProxyHost;
private final String socksProxyPort;
private final String pacFileUrl;
private final String[] noProxyHosts;
public NetworkProxySettings() {
this.resolved = true;
this.proxyMode = ProxyMode.DIRECT;
this.pacFileUrl = null;
this.httpProxyHost = null;
this.httpProxyPort = null;
this.httpsProxyHost = null;
this.httpsProxyPort = null;
this.socksProxyHost = null;
this.socksProxyPort = null;
this.noProxyHosts = new String[0];
}
public NetworkProxySettings(String httpProxy, String[] noProxyHosts) {
String httpProxyHostChecked = getHost(httpProxy);
String httpProxyPortChecked = getPort(httpProxy);
this.resolved = true;
this.proxyMode = ProxyMode.MANUAL;
this.pacFileUrl = null;
this.httpProxyHost = httpProxyHostChecked;
this.httpProxyPort = httpProxyPortChecked;
this.httpsProxyHost = httpProxyHostChecked;
this.httpsProxyPort = httpProxyPortChecked;
this.socksProxyHost = httpProxyHostChecked;
this.socksProxyPort = httpProxyPortChecked;
this.noProxyHosts = checkArray(noProxyHosts);
}
public NetworkProxySettings(String httpProxy, String httpsProxy, String socksProxy, String[] noProxyHosts) {
this.resolved = true;
this.proxyMode = ProxyMode.MANUAL;
this.pacFileUrl = null;
this.httpProxyHost = getHost(httpProxy);
this.httpProxyPort = getPort(httpProxy);
this.httpsProxyHost = getHost(httpsProxy);
this.httpsProxyPort = getPort(httpsProxy);
this.socksProxyHost = getHost(socksProxy);
this.socksProxyPort = getPort(socksProxy);
this.noProxyHosts = checkArray(noProxyHosts);
}
public NetworkProxySettings(String httpProxyHost, String httpProxyPort, String[] noProxyHosts) {
String httpProxyHostChecked = checkNull(httpProxyHost);
String httpProxyPortChecked = checkNumber(httpProxyPort);
this.resolved = true;
this.proxyMode = ProxyMode.MANUAL;
this.pacFileUrl = null;
this.httpProxyHost = httpProxyHostChecked;
this.httpProxyPort = httpProxyPortChecked;
this.httpsProxyHost = httpProxyHostChecked;
this.httpsProxyPort = httpProxyPortChecked;
this.socksProxyHost = httpProxyHostChecked;
this.socksProxyPort = httpProxyPortChecked;
this.noProxyHosts = checkArray(noProxyHosts);
}
public NetworkProxySettings(String httpProxyHost, String httpProxyPort,
String httpsProxyHost, String httpsProxyPort,
String socksProxyHost, String socksProxyPort, String[] noProxyHosts) {
this.resolved = true;
this.proxyMode = ProxyMode.MANUAL;
this.pacFileUrl = null;
this.httpProxyHost = checkNull(httpProxyHost);
this.httpProxyPort = checkNumber(httpProxyPort);
this.httpsProxyHost = checkNull(httpsProxyHost);
this.httpsProxyPort = checkNumber(httpsProxyPort);
this.socksProxyHost = checkNull(socksProxyHost);
this.socksProxyPort = checkNumber(socksProxyPort);
this.noProxyHosts = checkArray(noProxyHosts);
}
public NetworkProxySettings(String pacFileUrl) {
this.resolved = true;
this.proxyMode = ProxyMode.AUTO;
this.pacFileUrl = checkNull(pacFileUrl);
this.httpProxyHost = null;
this.httpProxyPort = null;
this.httpsProxyHost = null;
this.httpsProxyPort = null;
this.socksProxyHost = null;
this.socksProxyPort = null;
this.noProxyHosts = new String[0];
}
public NetworkProxySettings(boolean resolved) {
this.resolved = resolved;
this.proxyMode = ProxyMode.DIRECT;
this.pacFileUrl = null;
this.httpProxyHost = null;
this.httpProxyPort = null;
this.httpsProxyHost = null;
this.httpsProxyPort = null;
this.socksProxyHost = null;
this.socksProxyPort = null;
this.noProxyHosts = new String[0];
}
private String getHost(String string) {
if (string == null) {
return EMPTY_STRING;
} else {
if (string.contains(COLON)) {
return string.substring(0, string.lastIndexOf(COLON));
} else {
return string;
}
}
}
private String getPort(String string) {
if (string == null) {
return EMPTY_STRING;
} else {
if (string.endsWith(SLASH)) {
string = string.substring(string.length() - 1, string.length());
}
if (string.contains(COLON)) {
return string.substring(string.lastIndexOf(COLON) + 1);
} else {
return EMPTY_STRING;
}
}
}
private String checkNull(String string) {
return string == null ? EMPTY_STRING : string;
}
private String checkNumber(String string) {
if (string != null) {
try {
Integer.parseInt(string);
return string;
} catch (NumberFormatException nfe) {
LOGGER.log(Level.SEVERE, "Cannot parse number {0}", string); //NOI18N
}
}
return EMPTY_STRING;
}
private String[] checkArray(String[] array) {
return array == null ? new String[0] : array;
}
public boolean isResolved() {
return resolved;
}
public ProxyMode getProxyMode() {
return proxyMode;
}
public String getHttpProxyHost() {
return httpProxyHost;
}
public String getHttpProxyPort() {
return httpProxyPort;
}
public String getHttpsProxyHost() {
return httpsProxyHost;
}
public String getHttpsProxyPort() {
return httpsProxyPort;
}
public String getSocksProxyHost() {
return socksProxyHost;
}
public String getSocksProxyPort() {
return socksProxyPort;
}
public String getPacFileUrl() {
return pacFileUrl;
}
public String[] getNoProxyHosts() {
return noProxyHosts;
}
}