/* * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.tools.visualvm.host; import java.net.InetAddress; import java.net.UnknownHostException; import com.sun.tools.visualvm.core.datasource.DataSource; import com.sun.tools.visualvm.core.datasupport.Stateful; /** * Abstract implementation of Host. * Each host is defined by a hostname/ip if resolvable or hostname/ip and InetAddress. * * @author Jiri Sedlacek */ public abstract class Host extends DataSource implements Stateful { /** * Instance representing the localhost. */ public static final Host LOCALHOST = HostsSupport.getInstance().createLocalHost(); /** * Instance representing an unknown host (placeholder node in Applications window, hidden if not used). */ public static final Host UNKNOWN_HOST = HostsSupport.getInstance().createUnknownHost(); private final String hostName; private InetAddress inetAddress; private int state = STATE_AVAILABLE; /** * Creates new instance of Host defined by hostName. * * @param hostName name or IP of the host. * @throws java.net.UnknownHostException if host cannot be resolved using provided hostName/IP. */ public Host(String hostName) throws UnknownHostException { this(hostName, InetAddress.getByName(hostName)); } /** * Creates new instance of Host defined by hostName and InetAddress instance for the host. * * @param hostName name or IP of the host, * @param inetAddress InetAddress instance for the host. */ public Host(String hostName, InetAddress inetAddress) { if (hostName == null) throw new IllegalArgumentException("Host name cannot be null"); // NOI18N if (inetAddress == null) throw new IllegalArgumentException("InetAddress cannot be null"); // NOI18N this.hostName = hostName; this.inetAddress = inetAddress; } /** * Returns hostname of the host. * * @return hostname of the host. */ public String getHostName() { return hostName; } /** * Returns InetAddress instance of the host. * * @return InetAddress instance of the host. */ public final InetAddress getInetAddress() { return inetAddress; } public synchronized int getState() { return state; } protected final synchronized void setState(int newState) { int oldState = state; state = newState; getChangeSupport().firePropertyChange(PROPERTY_STATE, oldState, newState); } public int hashCode() { if (Host.UNKNOWN_HOST == this) return super.hashCode(); InetAddress address = getInetAddress(); if (this == LOCALHOST) return address.hashCode(); if (address.isLoopbackAddress()) return LOCALHOST.hashCode(); else return address.hashCode(); } public boolean equals(Object obj) { if (!(obj instanceof Host)) return false; if (Host.UNKNOWN_HOST == this) return obj == this; Host host = (Host)obj; InetAddress thisAddress = getInetAddress(); InetAddress otherAddress = host.getInetAddress(); if (thisAddress.isLoopbackAddress() && otherAddress.isLoopbackAddress()) return true; return thisAddress.equals(otherAddress); } public String toString() { return getHostName() + " [IP: " + getInetAddress().getHostAddress() + "]"; // NOI18N } }