1 /* 2 * Copyright (c) 1998-2002 The Jgroup Team. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU Lesser General Public License version 2 as 6 * published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU Lesser General Public License for more details. 12 * 13 * You should have received a copy of the GNU Lesser General Public License 14 * along with this program; if not, write to the Free Software 15 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 16 * 17 */ 18 19 package jgroup.relacs.mss; 20 21 import java.io.Externalizable; 22 import java.io.IOException; 23 import java.io.ObjectInput; 24 import java.io.ObjectOutput; 25 26 import jgroup.core.EndPoint; 27 import jgroup.relacs.types.EndPointImpl; 28 29 30 /** 31 * The <code>RoutingTableEntry</code> class. 32 * 33 * @author Salvatore Cammarata 34 * @since Jgroup 1.2 35 */ 36 final class RoutingTableEntry 37 implements Externalizable 38 { 39 40 //////////////////////////////////////////////////////////////////////////////////////////// 41 // Constants 42 //////////////////////////////////////////////////////////////////////////////////////////// 43 44 /** Size of this object in bytes (those that are marshalled) */ 45 public static final int SIZE = EndPointImpl.SIZE + EndPointImpl.SIZE + 4; 46 47 48 //////////////////////////////////////////////////////////////////////////////////////////// 49 // Fields 50 //////////////////////////////////////////////////////////////////////////////////////////// 51 52 /** Unique identifier for the cluster */ 53 EndPoint key; 54 55 /** Route for the cluster */ 56 EndPoint route; 57 58 /** Cost for this route */ 59 int cost; 60 61 /** TTL */ 62 int TTL; 63 64 65 //////////////////////////////////////////////////////////////////////////////////////////// 66 // Constructors 67 //////////////////////////////////////////////////////////////////////////////////////////// 68 69 /** 70 * Default constructor for externalization. 71 */ 72 public RoutingTableEntry() 73 { 74 } 75 76 /** 77 * Builds a new routing table entry by setting the specified 78 * endpoint, the initial route to be used for this endpoint, 79 * the initial cost for this endpoint. 80 */ 81 RoutingTableEntry(EndPoint id, EndPoint route, int cost) 82 { 83 this.key = id; 84 this.route = route; 85 this.cost = cost; 86 } 87 88 89 //////////////////////////////////////////////////////////////////////////////////////////// 90 // Marshaling / unmarshaling 91 //////////////////////////////////////////////////////////////////////////////////////////// 92 93 /** 94 * Restores the content of this object from the marshalled data contained 95 * in the specified input stream. 96 * 97 * @param in the stream to be read 98 */ 99 public void readExternal(ObjectInput in) 100 throws IOException, ClassNotFoundException 101 { 102 key = new EndPointImpl(); 103 key.readExternal(in); 104 route = new EndPointImpl(); 105 route.readExternal(in); 106 cost = in.readInt(); 107 } 108 109 110 /** 111 * Marshals the content of this object to the specified output stream. 112 * 113 * @param out the stream to be written 114 */ 115 public void writeExternal(ObjectOutput out) 116 throws IOException 117 { 118 key.writeExternal(out); 119 route.writeExternal(out); 120 if (cost < 0) { 121 out.writeInt(-cost); 122 } else { 123 out.writeInt(cost); 124 } 125 } 126 127 128 //////////////////////////////////////////////////////////////////////////////////////////// 129 // Methods 130 //////////////////////////////////////////////////////////////////////////////////////////// 131 132 133 /** 134 * Returns a string representation of this object 135 */ 136 public String toString() 137 { 138 return "[" + key + ", " + route + ", " + cost + "]"; 139 } 140 141 142 /** 143 * Compares two objects for content equality. 144 * 145 * @param obj the object to compare with 146 * @return true if these objects are equal; false otherwise. 147 */ 148 public boolean equals(Object obj) 149 { 150 if (this == obj) 151 return true; 152 else 153 if (obj instanceof RoutingTableEntry) 154 return key.equals(((RoutingTableEntry) obj).key); 155 else 156 return false; 157 } 158 159 } // END RoutingTableEntry