2 * Copyright (c) 2019 Orange. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.graph.impl;
11 import static com.google.common.base.Preconditions.checkArgument;
13 import java.util.ArrayList;
14 import java.util.List;
15 import org.eclipse.jdt.annotation.NonNull;
16 import org.opendaylight.graph.ConnectedEdge;
17 import org.opendaylight.graph.ConnectedVertex;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev191125.graph.topology.graph.Edge;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev191125.graph.topology.graph.Prefix;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev191125.graph.topology.graph.Vertex;
23 * This Class implements the Connected Vertex used by the Connected Graph for path computation algorithms.
25 * @author Olivier Dugeon
26 * @author Philippe Niger
29 public class ConnectedVertexImpl implements ConnectedVertex {
31 /* Reference to input and output Connected Edge within the Connected Graph */
32 private ArrayList<ConnectedEdgeImpl> input = new ArrayList<>();
33 private ArrayList<ConnectedEdgeImpl> output = new ArrayList<>();
35 /* List of Prefixes announced by this Vertex */
36 private ArrayList<Prefix> prefixes = new ArrayList<>();
38 /* Reference to the Vertex of the standard Graph associated to the Connected Graph */
39 private Vertex vertex = null;
41 /* Connected Vertex Identifier */
44 public ConnectedVertexImpl(@NonNull Long key) {
45 checkArgument(key != 0, "Vertex Key must not be equal to 0");
50 public ConnectedVertexImpl(@NonNull Vertex vertex) {
51 checkArgument(vertex.getVertexId().longValue() != 0, "Vertex Key must not be equal to 0");
52 this.cvid = vertex.getVertexId().longValue();
57 * When vertex is removed, we must disconnect all Connected Edges.
64 * Set associated Vertex to this Connected Vertex.
66 * @param vertex Vertex
68 public ConnectedVertexImpl setVertex(Vertex vertex) {
74 * Add Connected Edge as input edge.
76 * @param edge Connected Edge
78 public ConnectedVertexImpl addInput(ConnectedEdgeImpl edge) {
79 if (!input.contains(edge)) {
86 * Add Connected Edge as output edge.
88 * @param edge Connected Edge
90 public ConnectedVertexImpl addOutput(ConnectedEdgeImpl edge) {
91 if (!output.contains(edge)) {
98 * Remove input Connected Edge.
100 * @param edge Connected Edge
102 public ConnectedVertexImpl removeInput(ConnectedEdgeImpl edge) {
108 * Remove output Connected Edge.
110 * @param edge Connected Edge
112 public ConnectedVertexImpl removeOutput(ConnectedEdgeImpl edge) {
118 * Disconnect all input and output Connected Edge.
120 public void disconnect() {
121 for (ConnectedEdgeImpl edge : input) {
122 edge.disconnectDestination();
124 for (ConnectedEdgeImpl edge : output) {
125 edge.disconnectSource();
130 * Add Prefix to this Connected Vertex.
132 * @param prefix Prefix
134 public ConnectedVertexImpl addPrefix(Prefix prefix) {
135 if (!prefixes.contains(prefix)) {
136 prefixes.add(prefix);
144 * @param prefix Prefix
146 public void removePrefix(Prefix prefix) {
147 if (prefixes.contains(prefix)) {
148 prefixes.remove(prefix);
153 public Long getKey() {
158 public Vertex getVertex() {
163 public List<ConnectedEdge> getEdgeTo(Long dstRid) {
164 ArrayList<ConnectedEdge> edgeList = new ArrayList<ConnectedEdge>();
165 for (ConnectedEdge edge : output) {
166 if (edge.getDestination().getKey().equals(dstRid)) {
174 public List<Edge> getInputEdges() {
175 ArrayList<Edge> edgeList = new ArrayList<Edge>();
176 for (ConnectedEdge edge : input) {
177 edgeList.add(edge.getEdge());
183 public List<ConnectedEdge> getInputConnectedEdges() {
184 return new ArrayList<ConnectedEdge>(this.input);
188 public List<Edge> getOutputEdges() {
189 ArrayList<Edge> edgeList = new ArrayList<Edge>();
190 for (ConnectedEdge edge : output) {
191 edgeList.add(edge.getEdge());
197 public List<ConnectedEdge> getOutputConnectedEdges() {
198 return new ArrayList<ConnectedEdge>(this.output);
202 public List<Prefix> getPrefixes() {
203 return this.prefixes;
207 * Return the name of the associated Vertex if set or the router-id otherwise.
209 * @return Vertex name or router-id
212 public String toString() {
213 if (vertex == null) {
216 if (vertex.getName() != null) {
217 return vertex.getName();
219 return vertex.getRouterId().toString();