Fixed equals methods for better efficiency.
Cleaned up ClusterService API.
Showing
31 changed files
with
148 additions
and
23 deletions
| ... | @@ -8,7 +8,7 @@ import org.onlab.onos.event.AbstractEvent; | ... | @@ -8,7 +8,7 @@ import org.onlab.onos.event.AbstractEvent; |
| 8 | public class ClusterEvent extends AbstractEvent<ClusterEvent.Type, ControllerInstance> { | 8 | public class ClusterEvent extends AbstractEvent<ClusterEvent.Type, ControllerInstance> { |
| 9 | 9 | ||
| 10 | /** | 10 | /** |
| 11 | - * Type of device events. | 11 | + * Type of cluster-related events. |
| 12 | */ | 12 | */ |
| 13 | public enum Type { | 13 | public enum Type { |
| 14 | /** | 14 | /** |
| ... | @@ -24,14 +24,13 @@ public class ClusterEvent extends AbstractEvent<ClusterEvent.Type, ControllerIns | ... | @@ -24,14 +24,13 @@ public class ClusterEvent extends AbstractEvent<ClusterEvent.Type, ControllerIns |
| 24 | /** | 24 | /** |
| 25 | * Signifies that a cluster instance became active. | 25 | * Signifies that a cluster instance became active. |
| 26 | */ | 26 | */ |
| 27 | - INSTANCE_ACTIVE, | 27 | + INSTANCE_ACTIVATED, |
| 28 | 28 | ||
| 29 | /** | 29 | /** |
| 30 | * Signifies that a cluster instance became inactive. | 30 | * Signifies that a cluster instance became inactive. |
| 31 | */ | 31 | */ |
| 32 | - INSTANCE_INACTIVE | 32 | + INSTANCE_DEACTIVATED |
| 33 | } | 33 | } |
| 34 | - // TODO: do we need to fix the verv/adjective mix? discuss | ||
| 35 | 34 | ||
| 36 | /** | 35 | /** |
| 37 | * Creates an event of a given type and for the specified instance and the | 36 | * Creates an event of a given type and for the specified instance and the | ... | ... |
| ... | @@ -21,9 +21,19 @@ public interface ClusterService { | ... | @@ -21,9 +21,19 @@ public interface ClusterService { |
| 21 | * @return availability state | 21 | * @return availability state |
| 22 | */ | 22 | */ |
| 23 | ControllerInstance.State getState(ControllerInstance instance); | 23 | ControllerInstance.State getState(ControllerInstance instance); |
| 24 | - // TODO: determine if this would be better attached to ControllerInstance directly | ||
| 25 | 24 | ||
| 25 | + /** | ||
| 26 | + * Adds the specified cluster event listener. | ||
| 27 | + * | ||
| 28 | + * @param listener the cluster listener | ||
| 29 | + */ | ||
| 30 | + void addListener(ClusterEventListener listener); | ||
| 26 | 31 | ||
| 27 | - // addListener, removeListener | 32 | + /** |
| 33 | + * Removes the specified cluster event listener. | ||
| 34 | + * | ||
| 35 | + * @param listener the cluster listener | ||
| 36 | + */ | ||
| 37 | + void removeListener(ClusterEventListener listener); | ||
| 28 | 38 | ||
| 29 | } | 39 | } | ... | ... |
| 1 | package org.onlab.onos.cluster; | 1 | package org.onlab.onos.cluster; |
| 2 | 2 | ||
| 3 | +import java.util.Objects; | ||
| 4 | + | ||
| 5 | +import static com.google.common.base.MoreObjects.toStringHelper; | ||
| 6 | + | ||
| 3 | /** | 7 | /** |
| 4 | * Controller cluster identity. | 8 | * Controller cluster identity. |
| 5 | */ | 9 | */ |
| 6 | -public interface InstanceId { | 10 | +public class InstanceId { |
| 11 | + | ||
| 12 | + private final String id; | ||
| 13 | + | ||
| 14 | + // Default constructor for serialization | ||
| 15 | + protected InstanceId() { | ||
| 16 | + id = null; | ||
| 17 | + } | ||
| 18 | + | ||
| 19 | + /** | ||
| 20 | + * Creates a new cluster instance identifier from the specified string. | ||
| 21 | + * | ||
| 22 | + * @param id string identifier | ||
| 23 | + */ | ||
| 24 | + public InstanceId(String id) { | ||
| 25 | + this.id = id; | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + @Override | ||
| 29 | + public int hashCode() { | ||
| 30 | + return Objects.hash(id); | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + @Override | ||
| 34 | + public boolean equals(Object obj) { | ||
| 35 | + if (this == obj) { | ||
| 36 | + return true; | ||
| 37 | + } | ||
| 38 | + if (obj instanceof InstanceId) { | ||
| 39 | + final InstanceId other = (InstanceId) obj; | ||
| 40 | + return Objects.equals(this.id, other.id); | ||
| 41 | + } | ||
| 42 | + return false; | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + @Override | ||
| 46 | + public String toString() { | ||
| 47 | + return toStringHelper(this).add("id", id).toString(); | ||
| 48 | + } | ||
| 49 | + | ||
| 7 | } | 50 | } | ... | ... |
| ... | @@ -6,5 +6,4 @@ import org.onlab.onos.event.EventListener; | ... | @@ -6,5 +6,4 @@ import org.onlab.onos.event.EventListener; |
| 6 | * Entity capable of receiving device mastership-related events. | 6 | * Entity capable of receiving device mastership-related events. |
| 7 | */ | 7 | */ |
| 8 | public interface MastershipListener extends EventListener<MastershipEvent> { | 8 | public interface MastershipListener extends EventListener<MastershipEvent> { |
| 9 | - | ||
| 10 | } | 9 | } | ... | ... |
| ... | @@ -38,14 +38,14 @@ public interface MastershipService { | ... | @@ -38,14 +38,14 @@ public interface MastershipService { |
| 38 | MastershipRole requestRoleFor(DeviceId deviceId); | 38 | MastershipRole requestRoleFor(DeviceId deviceId); |
| 39 | 39 | ||
| 40 | /** | 40 | /** |
| 41 | - * Adds the specified mastership listener. | 41 | + * Adds the specified mastership change listener. |
| 42 | * | 42 | * |
| 43 | * @param listener the mastership listener | 43 | * @param listener the mastership listener |
| 44 | */ | 44 | */ |
| 45 | void addListener(MastershipListener listener); | 45 | void addListener(MastershipListener listener); |
| 46 | 46 | ||
| 47 | /** | 47 | /** |
| 48 | - * Removes the specified device listener. | 48 | + * Removes the specified mastership change listener. |
| 49 | * | 49 | * |
| 50 | * @param listener the mastership listener | 50 | * @param listener the mastership listener |
| 51 | */ | 51 | */ | ... | ... |
| ... | @@ -20,8 +20,8 @@ public interface MastershipStore { | ... | @@ -20,8 +20,8 @@ public interface MastershipStore { |
| 20 | * @param role new role | 20 | * @param role new role |
| 21 | * @return a mastership event | 21 | * @return a mastership event |
| 22 | */ | 22 | */ |
| 23 | - MastershipEvent setRole( | 23 | + MastershipEvent setRole(InstanceId instance, DeviceId deviceId, |
| 24 | - InstanceId instance, DeviceId deviceId, MastershipRole role); | 24 | + MastershipRole role); |
| 25 | 25 | ||
| 26 | /** | 26 | /** |
| 27 | * Adds or updates the mastership information for a device. | 27 | * Adds or updates the mastership information for a device. |
| ... | @@ -31,8 +31,8 @@ public interface MastershipStore { | ... | @@ -31,8 +31,8 @@ public interface MastershipStore { |
| 31 | * @param role new role | 31 | * @param role new role |
| 32 | * @return a mastership event | 32 | * @return a mastership event |
| 33 | */ | 33 | */ |
| 34 | - MastershipEvent addOrUpdateDevice( | 34 | + MastershipEvent addOrUpdateDevice(InstanceId instance, DeviceId deviceId, |
| 35 | - InstanceId instance, DeviceId deviceId, MastershipRole role); | 35 | + MastershipRole role); |
| 36 | 36 | ||
| 37 | /** | 37 | /** |
| 38 | * Returns the master for a device. | 38 | * Returns the master for a device. |
| ... | @@ -45,7 +45,7 @@ public interface MastershipStore { | ... | @@ -45,7 +45,7 @@ public interface MastershipStore { |
| 45 | /** | 45 | /** |
| 46 | * Returns the devices that a controller instance is master of. | 46 | * Returns the devices that a controller instance is master of. |
| 47 | * | 47 | * |
| 48 | - * @param instanceId the instance identifier | 48 | + * @param instanceId the instance identifier |
| 49 | * @return a set of device identifiers | 49 | * @return a set of device identifiers |
| 50 | */ | 50 | */ |
| 51 | Set<DeviceId> getDevices(InstanceId instanceId); | 51 | Set<DeviceId> getDevices(InstanceId instanceId); |
| ... | @@ -54,7 +54,7 @@ public interface MastershipStore { | ... | @@ -54,7 +54,7 @@ public interface MastershipStore { |
| 54 | * Returns the role of a device for a specific controller instance. | 54 | * Returns the role of a device for a specific controller instance. |
| 55 | * | 55 | * |
| 56 | * @param instanceId the instance identifier | 56 | * @param instanceId the instance identifier |
| 57 | - * @param deviceId the device identifiers | 57 | + * @param deviceId the device identifiers |
| 58 | * @return the role | 58 | * @return the role |
| 59 | */ | 59 | */ |
| 60 | MastershipRole getRole(InstanceId instanceId, DeviceId deviceId); | 60 | MastershipRole getRole(InstanceId instanceId, DeviceId deviceId); | ... | ... |
| ... | @@ -66,6 +66,9 @@ public class ConnectPoint { | ... | @@ -66,6 +66,9 @@ public class ConnectPoint { |
| 66 | 66 | ||
| 67 | @Override | 67 | @Override |
| 68 | public boolean equals(Object obj) { | 68 | public boolean equals(Object obj) { |
| 69 | + if (this == obj) { | ||
| 70 | + return true; | ||
| 71 | + } | ||
| 69 | if (obj instanceof ConnectPoint) { | 72 | if (obj instanceof ConnectPoint) { |
| 70 | final ConnectPoint other = (ConnectPoint) obj; | 73 | final ConnectPoint other = (ConnectPoint) obj; |
| 71 | return Objects.equals(this.elementId, other.elementId) && | 74 | return Objects.equals(this.elementId, other.elementId) && | ... | ... |
| ... | @@ -85,6 +85,9 @@ public class DefaultDevice extends AbstractElement implements Device { | ... | @@ -85,6 +85,9 @@ public class DefaultDevice extends AbstractElement implements Device { |
| 85 | 85 | ||
| 86 | @Override | 86 | @Override |
| 87 | public boolean equals(Object obj) { | 87 | public boolean equals(Object obj) { |
| 88 | + if (this == obj) { | ||
| 89 | + return true; | ||
| 90 | + } | ||
| 88 | if (obj instanceof DefaultDevice) { | 91 | if (obj instanceof DefaultDevice) { |
| 89 | final DefaultDevice other = (DefaultDevice) obj; | 92 | final DefaultDevice other = (DefaultDevice) obj; |
| 90 | return Objects.equals(this.id, other.id) && | 93 | return Objects.equals(this.id, other.id) && | ... | ... |
| ... | @@ -63,6 +63,9 @@ public class DefaultHost extends AbstractElement implements Host { | ... | @@ -63,6 +63,9 @@ public class DefaultHost extends AbstractElement implements Host { |
| 63 | 63 | ||
| 64 | @Override | 64 | @Override |
| 65 | public boolean equals(Object obj) { | 65 | public boolean equals(Object obj) { |
| 66 | + if (this == obj) { | ||
| 67 | + return true; | ||
| 68 | + } | ||
| 66 | if (obj instanceof DefaultHost) { | 69 | if (obj instanceof DefaultHost) { |
| 67 | final DefaultHost other = (DefaultHost) obj; | 70 | final DefaultHost other = (DefaultHost) obj; |
| 68 | return Objects.equals(this.id, other.id) && | 71 | return Objects.equals(this.id, other.id) && | ... | ... |
| ... | @@ -53,6 +53,9 @@ public class DefaultLink extends AbstractModel implements Link { | ... | @@ -53,6 +53,9 @@ public class DefaultLink extends AbstractModel implements Link { |
| 53 | 53 | ||
| 54 | @Override | 54 | @Override |
| 55 | public boolean equals(Object obj) { | 55 | public boolean equals(Object obj) { |
| 56 | + if (this == obj) { | ||
| 57 | + return true; | ||
| 58 | + } | ||
| 56 | if (obj instanceof DefaultLink) { | 59 | if (obj instanceof DefaultLink) { |
| 57 | final DefaultLink other = (DefaultLink) obj; | 60 | final DefaultLink other = (DefaultLink) obj; |
| 58 | return Objects.equals(this.src, other.src) && | 61 | return Objects.equals(this.src, other.src) && | ... | ... |
| ... | @@ -57,11 +57,14 @@ public class DefaultPath extends DefaultLink implements Path { | ... | @@ -57,11 +57,14 @@ public class DefaultPath extends DefaultLink implements Path { |
| 57 | 57 | ||
| 58 | @Override | 58 | @Override |
| 59 | public int hashCode() { | 59 | public int hashCode() { |
| 60 | - return 31 * super.hashCode() + Objects.hash(links); | 60 | + return Objects.hash(links); |
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | @Override | 63 | @Override |
| 64 | public boolean equals(Object obj) { | 64 | public boolean equals(Object obj) { |
| 65 | + if (this == obj) { | ||
| 66 | + return true; | ||
| 67 | + } | ||
| 65 | if (obj instanceof DefaultPath) { | 68 | if (obj instanceof DefaultPath) { |
| 66 | final DefaultPath other = (DefaultPath) obj; | 69 | final DefaultPath other = (DefaultPath) obj; |
| 67 | return Objects.equals(this.links, other.links); | 70 | return Objects.equals(this.links, other.links); | ... | ... |
| ... | @@ -58,6 +58,9 @@ public class DefaultPort implements Port { | ... | @@ -58,6 +58,9 @@ public class DefaultPort implements Port { |
| 58 | 58 | ||
| 59 | @Override | 59 | @Override |
| 60 | public boolean equals(Object obj) { | 60 | public boolean equals(Object obj) { |
| 61 | + if (this == obj) { | ||
| 62 | + return true; | ||
| 63 | + } | ||
| 61 | if (obj instanceof DefaultPort) { | 64 | if (obj instanceof DefaultPort) { |
| 62 | final DefaultPort other = (DefaultPort) obj; | 65 | final DefaultPort other = (DefaultPort) obj; |
| 63 | return Objects.equals(this.element.id(), other.element.id()) && | 66 | return Objects.equals(this.element.id(), other.element.id()) && | ... | ... |
| ... | @@ -40,6 +40,9 @@ public abstract class ElementId { | ... | @@ -40,6 +40,9 @@ public abstract class ElementId { |
| 40 | 40 | ||
| 41 | @Override | 41 | @Override |
| 42 | public boolean equals(Object obj) { | 42 | public boolean equals(Object obj) { |
| 43 | + if (this == obj) { | ||
| 44 | + return true; | ||
| 45 | + } | ||
| 43 | if (obj instanceof ElementId) { | 46 | if (obj instanceof ElementId) { |
| 44 | final ElementId that = (ElementId) obj; | 47 | final ElementId that = (ElementId) obj; |
| 45 | return this.getClass() == that.getClass() && | 48 | return this.getClass() == that.getClass() && | ... | ... |
| ... | @@ -79,6 +79,9 @@ public final class PortNumber { | ... | @@ -79,6 +79,9 @@ public final class PortNumber { |
| 79 | 79 | ||
| 80 | @Override | 80 | @Override |
| 81 | public boolean equals(Object obj) { | 81 | public boolean equals(Object obj) { |
| 82 | + if (this == obj) { | ||
| 83 | + return true; | ||
| 84 | + } | ||
| 82 | if (obj instanceof PortNumber) { | 85 | if (obj instanceof PortNumber) { |
| 83 | final PortNumber other = (PortNumber) obj; | 86 | final PortNumber other = (PortNumber) obj; |
| 84 | return this.number == other.number; | 87 | return this.number == other.number; | ... | ... |
| ... | @@ -147,7 +147,6 @@ public class DefaultFlowRule implements FlowRule { | ... | @@ -147,7 +147,6 @@ public class DefaultFlowRule implements FlowRule { |
| 147 | * @see java.lang.Object#equals(java.lang.Object) | 147 | * @see java.lang.Object#equals(java.lang.Object) |
| 148 | */ | 148 | */ |
| 149 | public boolean equals(Object obj) { | 149 | public boolean equals(Object obj) { |
| 150 | - | ||
| 151 | if (this == obj) { | 150 | if (this == obj) { |
| 152 | return true; | 151 | return true; |
| 153 | } | 152 | } | ... | ... |
| ... | @@ -54,6 +54,9 @@ public class DefaultInboundPacket implements InboundPacket { | ... | @@ -54,6 +54,9 @@ public class DefaultInboundPacket implements InboundPacket { |
| 54 | 54 | ||
| 55 | @Override | 55 | @Override |
| 56 | public boolean equals(Object obj) { | 56 | public boolean equals(Object obj) { |
| 57 | + if (this == obj) { | ||
| 58 | + return true; | ||
| 59 | + } | ||
| 57 | if (obj instanceof InboundPacket) { | 60 | if (obj instanceof InboundPacket) { |
| 58 | final DefaultInboundPacket other = (DefaultInboundPacket) obj; | 61 | final DefaultInboundPacket other = (DefaultInboundPacket) obj; |
| 59 | return Objects.equals(this.receivedFrom, other.receivedFrom) && | 62 | return Objects.equals(this.receivedFrom, other.receivedFrom) && | ... | ... |
| ... | @@ -50,12 +50,12 @@ public class ProviderId { | ... | @@ -50,12 +50,12 @@ public class ProviderId { |
| 50 | if (this == obj) { | 50 | if (this == obj) { |
| 51 | return true; | 51 | return true; |
| 52 | } | 52 | } |
| 53 | - if (obj == null || getClass() != obj.getClass()) { | 53 | + if (obj instanceof ProviderId) { |
| 54 | - return false; | 54 | + final ProviderId other = (ProviderId) obj; |
| 55 | + return Objects.equals(this.scheme, other.scheme) && | ||
| 56 | + Objects.equals(this.id, other.id); | ||
| 55 | } | 57 | } |
| 56 | - final ProviderId other = (ProviderId) obj; | 58 | + return false; |
| 57 | - return Objects.equals(this.scheme, other.scheme) && | ||
| 58 | - Objects.equals(this.id, other.id); | ||
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | @Override | 61 | @Override | ... | ... |
| ... | @@ -43,6 +43,9 @@ public final class ClusterId { | ... | @@ -43,6 +43,9 @@ public final class ClusterId { |
| 43 | 43 | ||
| 44 | @Override | 44 | @Override |
| 45 | public boolean equals(Object obj) { | 45 | public boolean equals(Object obj) { |
| 46 | + if (this == obj) { | ||
| 47 | + return true; | ||
| 48 | + } | ||
| 46 | if (obj instanceof ClusterId) { | 49 | if (obj instanceof ClusterId) { |
| 47 | final ClusterId other = (ClusterId) obj; | 50 | final ClusterId other = (ClusterId) obj; |
| 48 | return Objects.equals(this.id, other.id); | 51 | return Objects.equals(this.id, other.id); | ... | ... |
| ... | @@ -59,6 +59,9 @@ public class DefaultTopologyCluster implements TopologyCluster { | ... | @@ -59,6 +59,9 @@ public class DefaultTopologyCluster implements TopologyCluster { |
| 59 | 59 | ||
| 60 | @Override | 60 | @Override |
| 61 | public boolean equals(Object obj) { | 61 | public boolean equals(Object obj) { |
| 62 | + if (this == obj) { | ||
| 63 | + return true; | ||
| 64 | + } | ||
| 62 | if (obj instanceof DefaultTopologyCluster) { | 65 | if (obj instanceof DefaultTopologyCluster) { |
| 63 | final DefaultTopologyCluster other = (DefaultTopologyCluster) obj; | 66 | final DefaultTopologyCluster other = (DefaultTopologyCluster) obj; |
| 64 | return Objects.equals(this.id, other.id) && | 67 | return Objects.equals(this.id, other.id) && | ... | ... |
| ... | @@ -50,6 +50,9 @@ public class DefaultTopologyEdge implements TopologyEdge { | ... | @@ -50,6 +50,9 @@ public class DefaultTopologyEdge implements TopologyEdge { |
| 50 | 50 | ||
| 51 | @Override | 51 | @Override |
| 52 | public boolean equals(Object obj) { | 52 | public boolean equals(Object obj) { |
| 53 | + if (this == obj) { | ||
| 54 | + return true; | ||
| 55 | + } | ||
| 53 | if (obj instanceof DefaultTopologyEdge) { | 56 | if (obj instanceof DefaultTopologyEdge) { |
| 54 | final DefaultTopologyEdge other = (DefaultTopologyEdge) obj; | 57 | final DefaultTopologyEdge other = (DefaultTopologyEdge) obj; |
| 55 | return Objects.equals(this.link, other.link); | 58 | return Objects.equals(this.link, other.link); | ... | ... |
| ... | @@ -32,6 +32,9 @@ public class DefaultTopologyVertex implements TopologyVertex { | ... | @@ -32,6 +32,9 @@ public class DefaultTopologyVertex implements TopologyVertex { |
| 32 | 32 | ||
| 33 | @Override | 33 | @Override |
| 34 | public boolean equals(Object obj) { | 34 | public boolean equals(Object obj) { |
| 35 | + if (this == obj) { | ||
| 36 | + return true; | ||
| 37 | + } | ||
| 35 | if (obj instanceof DefaultTopologyVertex) { | 38 | if (obj instanceof DefaultTopologyVertex) { |
| 36 | final DefaultTopologyVertex other = (DefaultTopologyVertex) obj; | 39 | final DefaultTopologyVertex other = (DefaultTopologyVertex) obj; |
| 37 | return Objects.equals(this.deviceId, other.deviceId); | 40 | return Objects.equals(this.deviceId, other.deviceId); | ... | ... |
| ... | @@ -28,6 +28,9 @@ class PathKey { | ... | @@ -28,6 +28,9 @@ class PathKey { |
| 28 | 28 | ||
| 29 | @Override | 29 | @Override |
| 30 | public boolean equals(Object obj) { | 30 | public boolean equals(Object obj) { |
| 31 | + if (this == obj) { | ||
| 32 | + return true; | ||
| 33 | + } | ||
| 31 | if (obj instanceof PathKey) { | 34 | if (obj instanceof PathKey) { |
| 32 | final PathKey other = (PathKey) obj; | 35 | final PathKey other = (PathKey) obj; |
| 33 | return Objects.equals(this.src, other.src) && Objects.equals(this.dst, other.dst); | 36 | return Objects.equals(this.src, other.src) && Objects.equals(this.dst, other.dst); | ... | ... |
| ... | @@ -179,6 +179,9 @@ public class SimpleLinkStore implements LinkStore { | ... | @@ -179,6 +179,9 @@ public class SimpleLinkStore implements LinkStore { |
| 179 | 179 | ||
| 180 | @Override | 180 | @Override |
| 181 | public boolean equals(Object obj) { | 181 | public boolean equals(Object obj) { |
| 182 | + if (this == obj) { | ||
| 183 | + return true; | ||
| 184 | + } | ||
| 182 | if (obj instanceof LinkKey) { | 185 | if (obj instanceof LinkKey) { |
| 183 | final LinkKey other = (LinkKey) obj; | 186 | final LinkKey other = (LinkKey) obj; |
| 184 | return Objects.equals(this.src, other.src) && | 187 | return Objects.equals(this.src, other.src) && | ... | ... |
| ... | @@ -41,6 +41,9 @@ public abstract class AbstractEdge<V extends Vertex> implements Edge<V> { | ... | @@ -41,6 +41,9 @@ public abstract class AbstractEdge<V extends Vertex> implements Edge<V> { |
| 41 | 41 | ||
| 42 | @Override | 42 | @Override |
| 43 | public boolean equals(Object obj) { | 43 | public boolean equals(Object obj) { |
| 44 | + if (this == obj) { | ||
| 45 | + return true; | ||
| 46 | + } | ||
| 44 | if (obj instanceof AbstractEdge) { | 47 | if (obj instanceof AbstractEdge) { |
| 45 | final AbstractEdge other = (AbstractEdge) obj; | 48 | final AbstractEdge other = (AbstractEdge) obj; |
| 46 | return Objects.equals(this.src, other.src) && Objects.equals(this.dst, other.dst); | 49 | return Objects.equals(this.src, other.src) && Objects.equals(this.dst, other.dst); | ... | ... |
| ... | @@ -80,6 +80,9 @@ public class AdjacencyListsGraph<V extends Vertex, E extends Edge<V>> | ... | @@ -80,6 +80,9 @@ public class AdjacencyListsGraph<V extends Vertex, E extends Edge<V>> |
| 80 | 80 | ||
| 81 | @Override | 81 | @Override |
| 82 | public boolean equals(Object obj) { | 82 | public boolean equals(Object obj) { |
| 83 | + if (this == obj) { | ||
| 84 | + return true; | ||
| 85 | + } | ||
| 83 | if (obj instanceof AdjacencyListsGraph) { | 86 | if (obj instanceof AdjacencyListsGraph) { |
| 84 | AdjacencyListsGraph that = (AdjacencyListsGraph) obj; | 87 | AdjacencyListsGraph that = (AdjacencyListsGraph) obj; |
| 85 | return this.getClass() == that.getClass() && | 88 | return this.getClass() == that.getClass() && | ... | ... |
| ... | @@ -107,6 +107,9 @@ public class DefaultMutablePath<V extends Vertex, E extends Edge<V>> implements | ... | @@ -107,6 +107,9 @@ public class DefaultMutablePath<V extends Vertex, E extends Edge<V>> implements |
| 107 | 107 | ||
| 108 | @Override | 108 | @Override |
| 109 | public boolean equals(Object obj) { | 109 | public boolean equals(Object obj) { |
| 110 | + if (this == obj) { | ||
| 111 | + return true; | ||
| 112 | + } | ||
| 110 | if (obj instanceof DefaultMutablePath) { | 113 | if (obj instanceof DefaultMutablePath) { |
| 111 | final DefaultMutablePath other = (DefaultMutablePath) obj; | 114 | final DefaultMutablePath other = (DefaultMutablePath) obj; |
| 112 | return Objects.equals(this.cost, other.cost) && | 115 | return Objects.equals(this.cost, other.cost) && | ... | ... |
| ... | @@ -72,6 +72,9 @@ public class DefaultPath<V extends Vertex, E extends Edge<V>> implements Path<V, | ... | @@ -72,6 +72,9 @@ public class DefaultPath<V extends Vertex, E extends Edge<V>> implements Path<V, |
| 72 | 72 | ||
| 73 | @Override | 73 | @Override |
| 74 | public boolean equals(Object obj) { | 74 | public boolean equals(Object obj) { |
| 75 | + if (this == obj) { | ||
| 76 | + return true; | ||
| 77 | + } | ||
| 75 | if (obj instanceof DefaultPath) { | 78 | if (obj instanceof DefaultPath) { |
| 76 | final DefaultPath other = (DefaultPath) obj; | 79 | final DefaultPath other = (DefaultPath) obj; |
| 77 | return Objects.equals(this.src, other.src) && | 80 | return Objects.equals(this.src, other.src) && | ... | ... |
| ... | @@ -166,6 +166,9 @@ public class Heap<T> { | ... | @@ -166,6 +166,9 @@ public class Heap<T> { |
| 166 | 166 | ||
| 167 | @Override | 167 | @Override |
| 168 | public boolean equals(Object obj) { | 168 | public boolean equals(Object obj) { |
| 169 | + if (this == obj) { | ||
| 170 | + return true; | ||
| 171 | + } | ||
| 169 | if (obj instanceof Heap) { | 172 | if (obj instanceof Heap) { |
| 170 | Heap that = (Heap) obj; | 173 | Heap that = (Heap) obj; |
| 171 | return this.getClass() == that.getClass() && | 174 | return this.getClass() == that.getClass() && | ... | ... |
| ... | @@ -39,6 +39,9 @@ public class TestEdge extends AbstractEdge<TestVertex> { | ... | @@ -39,6 +39,9 @@ public class TestEdge extends AbstractEdge<TestVertex> { |
| 39 | 39 | ||
| 40 | @Override | 40 | @Override |
| 41 | public boolean equals(Object obj) { | 41 | public boolean equals(Object obj) { |
| 42 | + if (this == obj) { | ||
| 43 | + return true; | ||
| 44 | + } | ||
| 42 | if (obj instanceof TestEdge) { | 45 | if (obj instanceof TestEdge) { |
| 43 | final TestEdge other = (TestEdge) obj; | 46 | final TestEdge other = (TestEdge) obj; |
| 44 | return super.equals(obj) && Objects.equals(this.weight, other.weight); | 47 | return super.equals(obj) && Objects.equals(this.weight, other.weight); | ... | ... |
| ... | @@ -20,6 +20,9 @@ public class TestVertex implements Vertex { | ... | @@ -20,6 +20,9 @@ public class TestVertex implements Vertex { |
| 20 | 20 | ||
| 21 | @Override | 21 | @Override |
| 22 | public boolean equals(Object obj) { | 22 | public boolean equals(Object obj) { |
| 23 | + if (this == obj) { | ||
| 24 | + return true; | ||
| 25 | + } | ||
| 23 | if (obj instanceof TestVertex) { | 26 | if (obj instanceof TestVertex) { |
| 24 | final TestVertex other = (TestVertex) obj; | 27 | final TestVertex other = (TestVertex) obj; |
| 25 | return Objects.equals(this.name, other.name); | 28 | return Objects.equals(this.name, other.name); | ... | ... |
-
Please register or login to post a comment