1/*
2 * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25package sun.rmi.transport;
26
27import java.rmi.server.ObjID;
28
29/**
30 * An object used as a key to the object table that maps an
31 * instance of this class to a Target.
32 *
33 * @author  Ann Wollrath
34 **/
35class ObjectEndpoint {
36
37    private final ObjID id;
38    private final Transport transport;
39
40    /**
41     * Constructs a new ObjectEndpoint instance with the specified id and
42     * transport.  The specified id must be non-null, and the specified
43     * transport must either be non-null or the specified id must be
44     * equivalent to an ObjID constructed with ObjID.DGC_ID.
45     *
46     * @param id the object identifier
47     * @param transport the transport
48     * @throws NullPointerException if id is null
49     **/
50    ObjectEndpoint(ObjID id, Transport transport) {
51        if (id == null) {
52            throw new NullPointerException();
53        }
54        assert transport != null || id.equals(new ObjID(ObjID.DGC_ID));
55
56        this.id = id;
57        this.transport = transport;
58    }
59
60    /**
61     * Compares the specified object with this object endpoint for
62     * equality.
63     *
64     * This method returns true if and only if the specified object is an
65     * ObjectEndpoint instance with the same object identifier and
66     * transport as this object.
67     **/
68    public boolean equals(Object obj) {
69        if (obj instanceof ObjectEndpoint) {
70            ObjectEndpoint oe = (ObjectEndpoint) obj;
71            return id.equals(oe.id) && transport == oe.transport;
72        } else {
73            return false;
74        }
75    }
76
77    /**
78     * Returns the hash code value for this object endpoint.
79     */
80    public int hashCode() {
81        return id.hashCode() ^ (transport != null ? transport.hashCode() : 0);
82    }
83
84    /**
85     * Returns a string representation for this object endpoint.
86     */
87    public String toString() {
88        return id.toString();
89    }
90}
91