TE Topoplogy subsystem I2RS API changes
This submission contains the following:
1. Major changes in apps/tetopology. The changes are mainly introduced
to support new searching keys in TE Topology.
2. Add RESTCONF notification support in the TE Provider. i.e., for
south-bound RESTCONF communication with the domain controller.
Change-Id: I6786959deb66c98626edc65ff52694dcf08981a3
diff --git a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/CommonLinkData.java b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/CommonLinkData.java
new file mode 100644
index 0000000..61dbe31
--- /dev/null
+++ b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/CommonLinkData.java
@@ -0,0 +1,250 @@
+/*
+ * Copyright 2016 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.api.link;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import org.onosproject.tetopology.management.api.EncodingType;
+import org.onosproject.tetopology.management.api.SwitchingType;
+import org.onosproject.tetopology.management.api.TeStatus;
+
+import java.util.BitSet;
+import java.util.List;
+
+/**
+ * Representation of link common attributes.
+ */
+public class CommonLinkData {
+ private final TeStatus adminStatus;
+ private final TeStatus opStatus;
+ private final BitSet flags;
+
+ private final SwitchingType switchingLayer;
+ private final EncodingType encodingLayer;
+
+ private final ExternalLink externalLink;
+ private final UnderlayPath underlayPath;
+ private final TePathAttributes teAttributes;
+ private final List<Long> interLayerLocks;
+ private final LinkBandwidth bandwidth;
+ private final Long adminGroup;
+
+ /**
+ * Creates an instance of CommonLinkData.
+ *
+ * @param adminStatus the admin status
+ * @param opStatus the operational Status
+ * @param flags the flags
+ * @param switchingLayer the network layer switching type
+ * @param encodingLayer the network layer encoding type
+ * @param externalLink the external link specific attributes
+ * @param underlayPath the link underlay path and supporting tunnel
+ * @param teAttributes the link path TE attributes
+ * @param adminGroup the administrative group
+ * @param interLayerLocks the supported inter-layer locks
+ * @param bandwidth the link maximum and available bandwidth at
+ * each priority level
+ */
+ public CommonLinkData(TeStatus adminStatus,
+ TeStatus opStatus, BitSet flags, SwitchingType switchingLayer,
+ EncodingType encodingLayer, ExternalLink externalLink,
+ UnderlayPath underlayPath, TePathAttributes teAttributes,
+ Long adminGroup, List<Long> interLayerLocks,
+ LinkBandwidth bandwidth) {
+ this.adminStatus = adminStatus;
+ this.opStatus = opStatus;
+ this.flags = flags;
+ this.switchingLayer = switchingLayer;
+ this.encodingLayer = encodingLayer;
+ this.externalLink = externalLink;
+ this.underlayPath = underlayPath;
+ this.teAttributes = teAttributes;
+ this.adminGroup = adminGroup;
+ this.interLayerLocks = interLayerLocks != null ?
+ Lists.newArrayList(interLayerLocks) : null;
+ this.bandwidth = bandwidth;
+ }
+
+ /**
+ * Creates an instance of CommonLinkData with a TeLink.
+ *
+ * @param link the TE link
+ */
+ public CommonLinkData(TeLink link) {
+ this.adminStatus = link.adminStatus();
+ this.opStatus = link.opStatus();
+ this.flags = link.flags();
+ this.switchingLayer = link.switchingLayer();
+ this.encodingLayer = link.encodingLayer();
+ this.externalLink = link.externalLink();
+ this.underlayPath = new UnderlayPath(link);
+ this.teAttributes = new TePathAttributes(link);
+ this.adminGroup = link.administrativeGroup();
+ this.interLayerLocks = link.interLayerLocks() != null ?
+ Lists.newArrayList(link.interLayerLocks()) : null;
+ this.bandwidth = new LinkBandwidth(link);
+ }
+
+
+ /**
+ * Returns the admin status.
+ *
+ * @return the admin status
+ */
+ public TeStatus adminStatus() {
+ return adminStatus;
+ }
+
+ /**
+ * Returns the operational status.
+ *
+ * @return the optional status
+ */
+ public TeStatus opStatus() {
+ return opStatus;
+ }
+
+ /**
+ * Returns the flags.
+ *
+ * @return the flags
+ */
+ public BitSet flags() {
+ return flags;
+ }
+
+ /**
+ * Returns the network layer switching type for this link.
+ *
+ * @return the switching layer type
+ */
+ public SwitchingType switchingLayer() {
+ return switchingLayer;
+ }
+
+ /**
+ * Returns the network layer encoding type for this link.
+ *
+ * @return the encoding type
+ */
+ public EncodingType encodingLayer() {
+ return encodingLayer;
+ }
+
+ /**
+ * Returns the external link.
+ *
+ * @return the external link
+ */
+ public ExternalLink externalLink() {
+ return externalLink;
+ }
+
+ /**
+ * Returns the link underlay path and tunnel.
+ *
+ * @return the underlay path
+ */
+ public UnderlayPath underlayPath() {
+ return underlayPath;
+ }
+
+ /**
+ * Returns the path TE attributes.
+ *
+ * @return the path TE Attributes
+ */
+ public TePathAttributes teAttributes() {
+ return teAttributes;
+ }
+
+ /**
+ * Returns the link administrative group.
+ *
+ * @return the admin group
+ */
+ public Long adminGroup() {
+ return adminGroup;
+ }
+
+ /**
+ * Returns the supported inter-layer locks.
+ *
+ * @return the inter-layer locks
+ */
+ public List<Long> interLayerLocks() {
+ if (interLayerLocks == null) {
+ return null;
+ }
+ return ImmutableList.copyOf(interLayerLocks);
+ }
+
+ /**
+ * Returns the link maximum and available bandwidth at each priority level.
+ *
+ * @return the bandwidth
+ */
+ public LinkBandwidth bandwidth() {
+ return bandwidth;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(adminStatus, opStatus, flags, switchingLayer,
+ encodingLayer, externalLink, underlayPath,
+ teAttributes, interLayerLocks, bandwidth);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (object instanceof CommonLinkData) {
+ CommonLinkData that = (CommonLinkData) object;
+ return Objects.equal(adminStatus, that.adminStatus) &&
+ Objects.equal(opStatus, that.opStatus) &&
+ Objects.equal(flags, that.flags) &&
+ Objects.equal(switchingLayer, that.switchingLayer) &&
+ Objects.equal(encodingLayer, that.encodingLayer) &&
+ Objects.equal(externalLink, that.externalLink) &&
+ Objects.equal(underlayPath, that.underlayPath) &&
+ Objects.equal(teAttributes, that.teAttributes) &&
+ Objects.equal(interLayerLocks, that.interLayerLocks) &&
+ Objects.equal(bandwidth, that.bandwidth);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("adminStatus", adminStatus)
+ .add("opStatus", opStatus)
+ .add("flags", flags)
+ .add("switchingLayer", switchingLayer)
+ .add("encodingLayer", encodingLayer)
+ .add("externalLink", externalLink)
+ .add("underlayPath", underlayPath)
+ .add("teAttributes", teAttributes)
+ .add("interLayerLocks", interLayerLocks)
+ .add("bandwidth", bandwidth)
+ .toString();
+ }
+
+}