/**************************************************************************** * Copyright (c) 2004 Composent, Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Composent, Inc. - initial API and implementation *****************************************************************************/ package org.eclipse.ecf.core.util; import java.io.ObjectStreamException; import java.io.Serializable; public class Proxy implements Serializable { private static final long serialVersionUID = -2481483596779542834L; public static class Type implements Serializable { private static final long serialVersionUID = 361071073081975271L; private static final String DIRECT_NAME = "direct"; //$NON-NLS-1$ private static final String HTTP_NAME = "http"; //$NON-NLS-1$ private static final String SOCKS_NAME = "socks"; //$NON-NLS-1$ private final transient String name; protected Type(String name) { this.name = name; } public static final Type DIRECT = new Type(DIRECT_NAME); public static final Type HTTP = new Type(HTTP_NAME); public static final Type SOCKS = new Type(SOCKS_NAME); public static Type fromString(String type) { if (type == null) return null; else if (type.equals(DIRECT_NAME)) return DIRECT; else if (type.equals(HTTP_NAME)) return HTTP; else if (type.equals(SOCKS_NAME)) return SOCKS; else return null; } public String toString() { return name; } // For serialization private static int nextOrdinal = 0; private final int ordinal = nextOrdinal++; private static final Type[] VALUES = {DIRECT, HTTP, SOCKS}; /** * @return Object * @throws ObjectStreamException not thrown by this implementation. */ Object readResolve() throws ObjectStreamException { return VALUES[ordinal]; } } ProxyAddress address; Type type; String username; String password; public final static Proxy NO_PROXY = new Proxy(); private Proxy() { this.type = Type.DIRECT; this.address = null; } public Proxy(Type type, ProxyAddress address, String username, String password) { this.type = type; this.address = address; this.username = username; this.password = password; } public Proxy(Type type, ProxyAddress address) { this(type, address, null, null); } public Type getType() { return type; } public ProxyAddress getAddress() { return address; } public String getUsername() { return username; } public String getPassword() { return password; } public boolean hasCredentials() { return (username != null && !username.equals("")); //$NON-NLS-1$ } public String toString() { if (getType() == Type.DIRECT) return "DIRECT"; //$NON-NLS-1$ return getType() + " @ " + getAddress(); //$NON-NLS-1$ } public final boolean equals(Object obj) { if (obj == null || !(obj instanceof Proxy)) return false; Proxy p = (Proxy) obj; if (p.getType() == getType()) { if (getAddress() == null) { return (p.getAddress() == null); } return getAddress().equals(p.getAddress()); } return false; } public final int hashCode() { if (getAddress() == null) return getType().hashCode(); return getType().hashCode() + getAddress().hashCode(); } }