[VOL-4707] Expose programmed subscribers via REST and move classes and interfaces to the API.
Change-Id: Ibfb9caa48455fd349932297cb9191ee0f0341ffa
Signed-off-by: Gustavo Silva <gsilva@furukawalatam.com>
diff --git a/api/src/main/java/org/opencord/olt/DiscoveredSubscriber.java b/api/src/main/java/org/opencord/olt/DiscoveredSubscriber.java
new file mode 100644
index 0000000..8d837f4
--- /dev/null
+++ b/api/src/main/java/org/opencord/olt/DiscoveredSubscriber.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2021-present Open Networking Foundation
+ *
+ * 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.opencord.olt;
+
+import org.onosproject.net.AnnotationKeys;
+import org.onosproject.net.Device;
+import org.onosproject.net.Port;
+import org.opencord.sadis.SubscriberAndDeviceInformation;
+
+import java.util.Objects;
+
+/**
+ * Contains a subscriber's information and status for a specific device and port.
+ */
+public class DiscoveredSubscriber {
+
+ /**
+ * Describe whether the subscriber needs to be added or removed.
+ */
+ public enum Status {
+ ADDED,
+ REMOVED,
+ // Used for the remove subscriber calls from REST/CLI
+ ADMIN_REMOVED,
+ }
+
+ public Port port;
+ public Device device;
+ public Enum<Status> status;
+ public boolean hasSubscriber;
+ public SubscriberAndDeviceInformation subscriberAndDeviceInformation;
+
+ /**
+ * Creates the class with the proper information.
+ *
+ * @param device the device of the subscriber
+ * @param port the port
+ * @param status the status for this specific subscriber
+ * @param hasSubscriber is the subscriber present
+ * @param si the information about the tags/dhcp and other info.
+ */
+ public DiscoveredSubscriber(Device device, Port port, Status status, boolean hasSubscriber,
+ SubscriberAndDeviceInformation si) {
+ this.device = device;
+ this.port = port;
+ this.status = status;
+ this.hasSubscriber = hasSubscriber;
+ subscriberAndDeviceInformation = si;
+ }
+
+ /**
+ * Returns the port name for the subscriber.
+ *
+ * @return the port name.
+ */
+ public String portName() {
+ return getPortName(port);
+ }
+
+ @Override
+ public String toString() {
+
+ return String.format("%s (status: %s, provisionSubscriber: %s)",
+ portWithName(this.port),
+ this.status, this.hasSubscriber
+ );
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ DiscoveredSubscriber that = (DiscoveredSubscriber) o;
+ return hasSubscriber == that.hasSubscriber &&
+ port.equals(that.port) &&
+ device.equals(that.device) &&
+ status.equals(that.status);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(port, device, status, hasSubscriber, subscriberAndDeviceInformation);
+ }
+
+ private String portWithName(Port port) {
+ return port.element().id().toString() + '/' +
+ port.number() + '[' +
+ getPortName(port) + ']';
+ }
+ private String getPortName(Port port) {
+ String name = port.annotations().value(AnnotationKeys.PORT_NAME);
+ return name == null ? "" : name;
+ }
+}