blob: 63baeb41c4e94436c6ff14f1be4fba4c349499ba [file] [log] [blame]
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07001/*
2 * Copyright 2014 Open Networking Laboratory
3 *
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 */
tome33cc1a2014-08-25 21:59:41 -070016package org.onlab.onos.net.device;
17
Yuta HIGUCHIb87ef952014-10-28 23:34:23 -070018import org.joda.time.LocalDateTime;
tome33cc1a2014-08-25 21:59:41 -070019import org.onlab.onos.event.AbstractEvent;
20import org.onlab.onos.net.Device;
tom29df6f42014-09-05 08:14:14 -070021import org.onlab.onos.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 */
75 PORT_REMOVED
tome33cc1a2014-08-25 21:59:41 -070076 }
77
78 /**
tom64b7aac2014-08-26 00:18:21 -070079 * Creates an event of a given type and for the specified device and the
tome33cc1a2014-08-25 21:59:41 -070080 * current time.
81 *
tom64b7aac2014-08-26 00:18:21 -070082 * @param type device event type
83 * @param device event device subject
tome33cc1a2014-08-25 21:59:41 -070084 */
tom64b7aac2014-08-26 00:18:21 -070085 public DeviceEvent(Type type, Device device) {
tom29df6f42014-09-05 08:14:14 -070086 this(type, device, null);
87 }
88
89 /**
90 * Creates an event of a given type and for the specified device, port
91 * and the current time.
92 *
93 * @param type device event type
94 * @param device event device subject
95 * @param port optional port subject
96 */
97 public DeviceEvent(Type type, Device device, Port port) {
tom64b7aac2014-08-26 00:18:21 -070098 super(type, device);
tom29df6f42014-09-05 08:14:14 -070099 this.port = port;
tome33cc1a2014-08-25 21:59:41 -0700100 }
101
102 /**
tom64b7aac2014-08-26 00:18:21 -0700103 * Creates an event of a given type and for the specified device and time.
tome33cc1a2014-08-25 21:59:41 -0700104 *
tom64b7aac2014-08-26 00:18:21 -0700105 * @param type device event type
106 * @param device event device subject
tom29df6f42014-09-05 08:14:14 -0700107 * @param port optional port subject
tom64b7aac2014-08-26 00:18:21 -0700108 * @param time occurrence time
tome33cc1a2014-08-25 21:59:41 -0700109 */
tom29df6f42014-09-05 08:14:14 -0700110 public DeviceEvent(Type type, Device device, Port port, long time) {
tom64b7aac2014-08-26 00:18:21 -0700111 super(type, device, time);
tom29df6f42014-09-05 08:14:14 -0700112 this.port = port;
113 }
114
115 /**
116 * Returns the port subject.
117 *
118 * @return port subject or null if the event is not port specific.
119 */
tom0efbb1d2014-09-09 11:54:28 -0700120 public Port port() {
tom29df6f42014-09-05 08:14:14 -0700121 return port;
tome33cc1a2014-08-25 21:59:41 -0700122 }
123
Pavlin Radoslavov156c2ff2014-10-22 22:00:15 -0700124 @Override
125 public String toString() {
126 if (port == null) {
127 return super.toString();
128 }
Yuta HIGUCHIb87ef952014-10-28 23:34:23 -0700129 return toStringHelper(this)
130 .add("time", new LocalDateTime(time()))
131 .add("type", type())
132 .add("subject", subject())
133 .add("port", port)
134 .toString();
Pavlin Radoslavov156c2ff2014-10-22 22:00:15 -0700135 }
tome33cc1a2014-08-25 21:59:41 -0700136}