[ONOS-7584] Adding Capability of re-connecting to a P4Runtime Device.
Also addresses ONOS-7359
Change-Id: I47ec4ed429af82feb225ab5ac180b94c91366a53
diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/DefaultChannelEvent.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/DefaultChannelEvent.java
new file mode 100644
index 0000000..5f5b3b9
--- /dev/null
+++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/DefaultChannelEvent.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2018-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.onosproject.p4runtime.ctl;
+
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.device.ChannelEvent.Type;
+import org.onosproject.p4runtime.api.P4RuntimeEventSubject;
+
+/**
+ * Default implementation of channel event in P4Runtime. It allows passing any type of event.
+ * If the event is an error a throwable can be directly passed.
+ * Any other type of event cause can be passed as string.
+ */
+public class DefaultChannelEvent implements P4RuntimeEventSubject {
+ private DeviceId deviceId;
+ private Type type;
+ private Throwable throwable;
+ private String message;
+
+ /**
+ * Creates channel event with given status and throwable.
+ *
+ * @param deviceId the device
+ * @param type error type
+ * @param throwable the cause
+ */
+ public DefaultChannelEvent(DeviceId deviceId, Type type, Throwable throwable) {
+ this.deviceId = deviceId;
+ this.type = type;
+ this.message = throwable.getMessage();
+ this.throwable = throwable;
+ }
+
+ /**
+ * Creates channel event with given status and string cause.
+ *
+ * @param deviceId the device
+ * @param type error type
+ * @param message the message
+ */
+ public DefaultChannelEvent(DeviceId deviceId, Type type, String message) {
+ this.deviceId = deviceId;
+ this.type = type;
+ this.message = message;
+ this.throwable = null;
+ }
+
+ /**
+ * Creates channel event with given status, cause and throwable.
+ *
+ * @param deviceId the device
+ * @param type error type
+ * @param message the message
+ * @param throwable the cause
+ */
+ public DefaultChannelEvent(DeviceId deviceId, Type type, String message, Throwable throwable) {
+ this.deviceId = deviceId;
+ this.type = type;
+ this.message = message;
+ this.throwable = throwable;
+ }
+
+ /**
+ * Gets the type of this event.
+ *
+ * @return the error type
+ */
+ public Type type() {
+ return type;
+ }
+
+ /**
+ * Gets the message related to this event.
+ *
+ * @return the message
+ */
+ public String message() {
+ return message;
+ }
+
+
+ /**
+ * Gets throwable of this event.
+ * If no throwable is present returns null.
+ *
+ * @return the throwable
+ */
+ public Throwable throwable() {
+ return throwable;
+ }
+
+ @Override
+ public DeviceId deviceId() {
+ return deviceId;
+ }
+}