blob: 7ebb041fcbb78031b4eb92c46a7ae7d5dbafa43b [file] [log] [blame]
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2014-present Open Networking Foundation
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Brian O'Connorabafb502014-12-02 22:26:20 -080016package org.onosproject.net.device;
tome33cc1a2014-08-25 21:59:41 -070017
Yuta HIGUCHIb87ef952014-10-28 23:34:23 -070018import org.joda.time.LocalDateTime;
Brian O'Connorabafb502014-12-02 22:26:20 -080019import org.onosproject.event.AbstractEvent;
20import org.onosproject.net.Device;
21import org.onosproject.net.Port;
tome33cc1a2014-08-25 21:59:41 -070022
Pavlin Radoslavov156c2ff2014-10-22 22:00:15 -070023import static com.google.common.base.MoreObjects.toStringHelper;
24
tome33cc1a2014-08-25 21:59:41 -070025/**
26 * Describes infrastructure device event.
27 */
28public class DeviceEvent extends AbstractEvent<DeviceEvent.Type, Device> {
29
tom29df6f42014-09-05 08:14:14 -070030 private final Port port;
31
tome33cc1a2014-08-25 21:59:41 -070032 /**
33 * Type of device events.
34 */
35 public enum Type {
tom64b7aac2014-08-26 00:18:21 -070036 /**
37 * Signifies that a new device has been detected.
38 */
tome33cc1a2014-08-25 21:59:41 -070039 DEVICE_ADDED,
40
tom64b7aac2014-08-26 00:18:21 -070041 /**
tome5ec3fd2014-09-04 15:18:06 -070042 * Signifies that some device attributes have changed; excludes
43 * availability changes.
44 */
45 DEVICE_UPDATED,
46
47 /**
tom64b7aac2014-08-26 00:18:21 -070048 * Signifies that a device has been removed.
49 */
tome33cc1a2014-08-25 21:59:41 -070050 DEVICE_REMOVED,
51
tom64b7aac2014-08-26 00:18:21 -070052 /**
53 * Signifies that a device has been administratively suspended.
54 */
tome33cc1a2014-08-25 21:59:41 -070055 DEVICE_SUSPENDED,
56
tom64b7aac2014-08-26 00:18:21 -070057 /**
58 * Signifies that a device has come online or has gone offline.
59 */
tome33cc1a2014-08-25 21:59:41 -070060 DEVICE_AVAILABILITY_CHANGED,
61
62 /**
tom29df6f42014-09-05 08:14:14 -070063 * Signifies that a port has been added.
64 */
65 PORT_ADDED,
66
67 /**
68 * Signifies that a port has been updated.
69 */
70 PORT_UPDATED,
71
72 /**
73 * Signifies that a port has been removed.
74 */
sangho538108b2015-04-08 14:29:20 -070075 PORT_REMOVED,
76
Thomas Vachuskacb5016f2015-05-18 14:11:43 -070077 /**
sangho538108b2015-04-08 14:29:20 -070078 * Signifies that port statistics has been updated.
79 */
80 PORT_STATS_UPDATED
tome33cc1a2014-08-25 21:59:41 -070081 }
82
83 /**
tom64b7aac2014-08-26 00:18:21 -070084 * Creates an event of a given type and for the specified device and the
tome33cc1a2014-08-25 21:59:41 -070085 * current time.
86 *
tom64b7aac2014-08-26 00:18:21 -070087 * @param type device event type
88 * @param device event device subject
tome33cc1a2014-08-25 21:59:41 -070089 */
tom64b7aac2014-08-26 00:18:21 -070090 public DeviceEvent(Type type, Device device) {
tom29df6f42014-09-05 08:14:14 -070091 this(type, device, null);
92 }
93
94 /**
95 * Creates an event of a given type and for the specified device, port
96 * and the current time.
97 *
98 * @param type device event type
99 * @param device event device subject
100 * @param port optional port subject
101 */
102 public DeviceEvent(Type type, Device device, Port port) {
tom64b7aac2014-08-26 00:18:21 -0700103 super(type, device);
tom29df6f42014-09-05 08:14:14 -0700104 this.port = port;
tome33cc1a2014-08-25 21:59:41 -0700105 }
106
107 /**
tom64b7aac2014-08-26 00:18:21 -0700108 * Creates an event of a given type and for the specified device and time.
tome33cc1a2014-08-25 21:59:41 -0700109 *
tom64b7aac2014-08-26 00:18:21 -0700110 * @param type device event type
111 * @param device event device subject
tom29df6f42014-09-05 08:14:14 -0700112 * @param port optional port subject
tom64b7aac2014-08-26 00:18:21 -0700113 * @param time occurrence time
tome33cc1a2014-08-25 21:59:41 -0700114 */
tom29df6f42014-09-05 08:14:14 -0700115 public DeviceEvent(Type type, Device device, Port port, long time) {
tom64b7aac2014-08-26 00:18:21 -0700116 super(type, device, time);
tom29df6f42014-09-05 08:14:14 -0700117 this.port = port;
118 }
119
120 /**
121 * Returns the port subject.
122 *
123 * @return port subject or null if the event is not port specific.
124 */
tom0efbb1d2014-09-09 11:54:28 -0700125 public Port port() {
tom29df6f42014-09-05 08:14:14 -0700126 return port;
tome33cc1a2014-08-25 21:59:41 -0700127 }
128
Pavlin Radoslavov156c2ff2014-10-22 22:00:15 -0700129 @Override
130 public String toString() {
131 if (port == null) {
132 return super.toString();
133 }
Yuta HIGUCHIb87ef952014-10-28 23:34:23 -0700134 return toStringHelper(this)
135 .add("time", new LocalDateTime(time()))
136 .add("type", type())
137 .add("subject", subject())
138 .add("port", port)
139 .toString();
Pavlin Radoslavov156c2ff2014-10-22 22:00:15 -0700140 }
tome33cc1a2014-08-25 21:59:41 -0700141}