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