blob: 7ee86f4b78ad2805bfdadd3fd063e837c21ceaaf [file] [log] [blame]
tome3489412014-08-29 02:30:38 -07001package org.onlab.graph;
2
3import java.util.Objects;
4
5import static com.google.common.base.Preconditions.checkNotNull;
6
7/**
8 * Abstract graph edge implementation.
9 */
10public abstract class AbstractEdge<V extends Vertex> implements Edge<V> {
11
12 private final V src;
13 private final V dst;
14
15 /**
16 * Creates a new edge between the specified source and destination vertexes.
17 *
18 * @param src source vertex
19 * @param dst destination vertex
20 */
21 public AbstractEdge(V src, V dst) {
22 this.src = checkNotNull(src, "Source vertex cannot be null");
23 this.dst = checkNotNull(dst, "Destination vertex cannot be null");
24 }
25
26 @Override
27 public V src() {
28 return src;
29 }
30
31 @Override
32 public V dst() {
33 return dst;
34 }
35
36 @Override
37 public int hashCode() {
38 return Objects.hash(src, dst);
39 }
40
41 @Override
42 public boolean equals(Object obj) {
43 if (obj instanceof AbstractEdge) {
44 final AbstractEdge other = (AbstractEdge) obj;
45 return Objects.equals(this.src, other.src) && Objects.equals(this.dst, other.dst);
46 }
47 return false;
48 }
49
50 @Override
51 public String toString() {
52 return com.google.common.base.Objects.toStringHelper(this)
53 .add("src", src)
54 .add("dst", dst)
55 .toString();
56 }
57}