Enhancement of tetopology implementation
To support regualar network and TE topology
Change-Id: Ib8319212d775c78f49a86a7b7685759099189967
diff --git a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/InternalTeNode.java b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/InternalTeNode.java
new file mode 100644
index 0000000..03d47ff
--- /dev/null
+++ b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/InternalTeNode.java
@@ -0,0 +1,348 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.tetopology.management.impl;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
+import org.onosproject.tetopology.management.api.TeTopologyKey;
+import org.onosproject.tetopology.management.api.link.TeLinkTpGlobalKey;
+import org.onosproject.tetopology.management.api.node.CommonNodeData;
+import org.onosproject.tetopology.management.api.node.ConnectivityMatrix;
+import org.onosproject.tetopology.management.api.node.ConnectivityMatrixKey;
+import org.onosproject.tetopology.management.api.node.NetworkNodeKey;
+import org.onosproject.tetopology.management.api.node.TeNode;
+import org.onosproject.tetopology.management.api.node.TeNodeKey;
+import org.onosproject.tetopology.management.api.node.TtpKey;
+import org.onosproject.tetopology.management.api.node.TunnelTerminationPoint;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
+
+/**
+ * The Node representation in store.
+ */
+public class InternalTeNode {
+ private CommonNodeData teData;
+ private TeTopologyKey underlayTopologyKey;
+ private TeNodeKey supportNodeKey;
+ private TeNodeKey sourceTeNodeKey;
+ private List<ConnectivityMatrixKey> connMatrixKeys;
+ private List<TeLinkTpGlobalKey> teLinkTpKeys;
+ private List<TeLinkTpGlobalKey> teTpKeys;
+ private List<TtpKey> ttpKeys;
+ private NetworkNodeKey networkNodeKey;
+ private boolean parentUpdate;
+ private boolean childUpdate;
+
+ // Next available TE link Id egressing from the TE node.
+ private long nextTeLinkId;
+
+ /**
+ * Creates an instance of InternalTeNode.
+ *
+ * @param nodeKey the TE node key
+ * @param node the TE node
+ * @param networkNodeKey the network node key
+ * @param parentUpdate the flag if the data is updated by parent
+ */
+ public InternalTeNode(TeNodeKey nodeKey, TeNode node,
+ NetworkNodeKey networkNodeKey, boolean parentUpdate) {
+ this.networkNodeKey = networkNodeKey;
+ this.parentUpdate = parentUpdate;
+ // Underlay topology
+ this.underlayTopologyKey = node.underlayTeTopologyId();
+ // Supporting topology
+ this.supportNodeKey = node.supportingTeNodeId();
+ // Source topology
+ this.sourceTeNodeKey = node.sourceTeNodeId();
+ // Common data
+ this.teData = new CommonNodeData(node);
+ // Connectivity matrix
+ if (MapUtils.isNotEmpty(node.connectivityMatrices())) {
+ this.connMatrixKeys = Lists.newArrayList();
+ for (Map.Entry<Long, ConnectivityMatrix> entry : node.connectivityMatrices().entrySet()) {
+ this.connMatrixKeys.add(new ConnectivityMatrixKey(nodeKey, entry.getKey()));
+ }
+ }
+ // Tunnel termination point
+ if (MapUtils.isNotEmpty(node.tunnelTerminationPoints())) {
+ this.ttpKeys = Lists.newArrayList();
+ for (Map.Entry<Long, TunnelTerminationPoint> entry : node.tunnelTerminationPoints().entrySet()) {
+ this.ttpKeys.add(new TtpKey(nodeKey, entry.getKey()));
+ }
+ }
+ // teLink Keys
+ if (CollectionUtils.isNotEmpty(node.teLinkIds())) {
+ this.teLinkTpKeys = Lists.newArrayList();
+ for (Long linkId : node.teLinkIds()) {
+ this.teLinkTpKeys.add(new TeLinkTpGlobalKey(nodeKey, linkId));
+ }
+
+ }
+ // teTp Keys
+ if (CollectionUtils.isNotEmpty(node.teTerminationPointIds())) {
+ this.teTpKeys = Lists.newArrayList();
+ for (Long tpId : node.teTerminationPointIds()) {
+ this.teTpKeys.add(new TeLinkTpGlobalKey(nodeKey, tpId));
+ }
+ }
+ }
+
+ /**
+ * Returns the node common data.
+ *
+ * @return the teData
+ */
+ public CommonNodeData teData() {
+ return teData;
+ }
+
+ /**
+ * Sets the node common data.
+ *
+ * @param teData the teData to set
+ */
+ public void setTeData(CommonNodeData teData) {
+ this.teData = teData;
+ }
+
+ /**
+ * Returns the node underlay topology key.
+ *
+ * @return the underlayTopologyKey
+ */
+ public TeTopologyKey underlayTopologyKey() {
+ return underlayTopologyKey;
+ }
+
+ /**
+ * Sets the node underlay topology key.
+ *
+ * @param underlayTopologyKey the underlayTopologyKey to set
+ */
+ public void setUnderlayTopologyKey(TeTopologyKey underlayTopologyKey) {
+ this.underlayTopologyKey = underlayTopologyKey;
+ }
+
+ /**
+ * Returns the supporting node key.
+ *
+ * @return the supportNodeKey
+ */
+ public TeNodeKey supportNodeKey() {
+ return supportNodeKey;
+ }
+
+ /**
+ * Sets the supporting node key.
+ *
+ * @param supportNodeKey the supportNodeKey to set
+ */
+ public void setSupportNodeKey(TeNodeKey supportNodeKey) {
+ this.supportNodeKey = supportNodeKey;
+ }
+
+ /**
+ * Returns the source node key.
+ *
+ * @return the sourceTeNodeKey
+ */
+ public TeNodeKey sourceTeNodeKey() {
+ return sourceTeNodeKey;
+ }
+
+ /**
+ * Sets the source node key.
+ *
+ * @param sourceTeNodeKey the sourceTeNodeKey to set
+ */
+ public void setSourceTeNodeKey(TeNodeKey sourceTeNodeKey) {
+ this.sourceTeNodeKey = sourceTeNodeKey;
+ }
+
+ /**
+ * Returns the node connect matrix keys.
+ *
+ * @return the connMatrixKeys
+ */
+ public List<ConnectivityMatrixKey> connMatrixKeys() {
+ return connMatrixKeys;
+ }
+
+ /**
+ * Sets the node connect matrix keys.
+ *
+ * @param connMatrixKeys the connMatrixKeys to set
+ */
+ public void setConnMatrixKeys(List<ConnectivityMatrixKey> connMatrixKeys) {
+ this.connMatrixKeys = connMatrixKeys;
+ }
+
+ /**
+ * Returns the TE link Ids.
+ *
+ * @return the teLinkTpKeys
+ */
+ public List<TeLinkTpGlobalKey> teLinkTpKeys() {
+ return teLinkTpKeys;
+ }
+
+ /**
+ * Sets the TE link Ids from the node.
+ *
+ * @param teLinkTpKeys the teLinkTpKeys to set
+ */
+ public void setTeLinkTpKeys(List<TeLinkTpGlobalKey> teLinkTpKeys) {
+ this.teLinkTpKeys = teLinkTpKeys;
+ }
+
+ /**
+ * Returns the TE termitation point Ids.
+ *
+ * @return the teTpKeys
+ */
+ public List<TeLinkTpGlobalKey> teTpKeys() {
+ return teTpKeys;
+ }
+
+ /**
+ * Sets the TE termitation point Ids.
+ *
+ * @param teTpKeys the teTpKeys to set
+ */
+ public void setTeTpKeys(List<TeLinkTpGlobalKey> teTpKeys) {
+ this.teTpKeys = teTpKeys;
+ }
+
+ /**
+ * Returns the list of Tunnel Termination Point keys of the node.
+ *
+ * @return the ttpKeys
+ */
+ public List<TtpKey> ttpKeys() {
+ return ttpKeys;
+ }
+
+ /**
+ * Sets the list of Tunnel Termination Point keys.
+ *
+ * @param ttpKeys the ttpKeys to set
+ */
+ public void setTtpKeys(List<TtpKey> ttpKeys) {
+ this.ttpKeys = ttpKeys;
+ }
+
+ /**
+ * Returns the network node Key.
+ *
+ * @return the networkNodeKey
+ */
+ public NetworkNodeKey networkNodeKey() {
+ return networkNodeKey;
+ }
+
+ /**
+ * Returns the next available TE link id from the node.
+ *
+ * @return the nextTeLinkId
+ */
+ public long nextTeLinkId() {
+ return nextTeLinkId;
+ }
+
+ /**
+ * Sets the next available TE link id.
+ *
+ * @param nextTeLinkId the nextTeLinkId to set
+ */
+ public void setNextTeLinkId(long nextTeLinkId) {
+ this.nextTeLinkId = nextTeLinkId;
+ }
+
+ /**
+ * Returns the flag if the data was updated by parent change.
+ *
+ * @return value of parentUpdate
+ */
+ public boolean parentUpdate() {
+ return parentUpdate;
+ }
+
+ /**
+ * Returns the flag if the data was updated by child change.
+ *
+ * @return value of childUpdate
+ */
+ public boolean childUpdate() {
+ return childUpdate;
+ }
+
+ /**
+ * Sets the flag if the data was updated by child change.
+ *
+ * @param childUpdate the childUpdate value to set
+ */
+ public void setChildUpdate(boolean childUpdate) {
+ this.childUpdate = childUpdate;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(teData, underlayTopologyKey, supportNodeKey,
+ sourceTeNodeKey, connMatrixKeys, teLinkTpKeys, ttpKeys, networkNodeKey);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (object instanceof InternalTeNode) {
+ InternalTeNode that = (InternalTeNode) object;
+ return Objects.equal(teData, that.teData)
+ && Objects.equal(underlayTopologyKey,
+ that.underlayTopologyKey)
+ && Objects.equal(supportNodeKey, that.supportNodeKey)
+ && Objects.equal(sourceTeNodeKey, that.sourceTeNodeKey)
+ && Objects.equal(connMatrixKeys, that.connMatrixKeys)
+ && Objects.equal(teLinkTpKeys, that.teLinkTpKeys)
+ && Objects.equal(ttpKeys, that.ttpKeys)
+ && Objects.equal(networkNodeKey, that.networkNodeKey);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("teData", teData)
+ .add("underlayTopologyKey", underlayTopologyKey)
+ .add("supportNodeKey", supportNodeKey)
+ .add("sourceTeNodeKey", sourceTeNodeKey)
+ .add("connMatrixKeys", connMatrixKeys)
+ .add("teLinkTpKeys", teLinkTpKeys)
+ .add("ttpKeys", ttpKeys)
+ .add("nextTeLinkId", nextTeLinkId)
+ .add("networkNodeKey", networkNodeKey)
+ .add("parentUpdate", parentUpdate)
+ .add("childUpdate", childUpdate)
+ .toString();
+ }
+}