blob: d44c9f99fd911624bfe7d98703c643219dcc4e27 [file] [log] [blame]
Jian Li38e4d942018-07-03 22:19:16 +09001/*
2 * Copyright 2018-present Open Networking Foundation
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 */
16package org.onosproject.openstackvtap.api;
17
18import org.onlab.util.Tools;
19import org.onosproject.event.AbstractEvent;
20
21import static com.google.common.base.MoreObjects.toStringHelper;
Jimo Jung14e87bf2018-09-03 16:28:13 +090022import static com.google.common.base.Preconditions.checkState;
Jian Li38e4d942018-07-03 22:19:16 +090023
24/**
Jimo Jung14e87bf2018-09-03 16:28:13 +090025 * Describes openstack vtap event.
Jian Li38e4d942018-07-03 22:19:16 +090026 */
Jimo Jung14e87bf2018-09-03 16:28:13 +090027public class OpenstackVtapEvent extends AbstractEvent<OpenstackVtapEvent.Type, Object> {
28
29 private static final String INVALID_OBJ_TYPE = "Invalid OpenstackVtapEvent object type of %";
Jian Li38e4d942018-07-03 22:19:16 +090030
31 /**
Jimo Jung14e87bf2018-09-03 16:28:13 +090032 * Type of openstack vtap events.
Jian Li38e4d942018-07-03 22:19:16 +090033 */
34 public enum Type {
35
36 /**
Jimo Jung14e87bf2018-09-03 16:28:13 +090037 * Signifies that a new openstack vtap network has been added.
38 */
39 VTAP_NETWORK_ADDED,
40
41 /**
42 * Signifies that a openstack vtap network has been changed.
43 */
44 VTAP_NETWORK_UPDATED,
45
46 /**
47 * Signifies that a openstack vtap network has been removed.
48 */
49 VTAP_NETWORK_REMOVED,
50
51 /**
52 * Signifies that a new openstack vtap has been added.
Jian Li38e4d942018-07-03 22:19:16 +090053 */
54 VTAP_ADDED,
55
56 /**
Jimo Jung14e87bf2018-09-03 16:28:13 +090057 * Signifies that a openstack vtap has been changed.
Jian Li38e4d942018-07-03 22:19:16 +090058 */
59 VTAP_UPDATED,
Jimo Jung14e87bf2018-09-03 16:28:13 +090060
61 /**
62 * Signifies that a openstack vtap has been removed.
63 */
64 VTAP_REMOVED,
Jian Li38e4d942018-07-03 22:19:16 +090065 }
66
Jimo Jung14e87bf2018-09-03 16:28:13 +090067 private final Object prevSubject;
Jian Li38e4d942018-07-03 22:19:16 +090068
69 /**
Jimo Jung14e87bf2018-09-03 16:28:13 +090070 * Creates an event with previous openstack vtap network subject.
Jian Li38e4d942018-07-03 22:19:16 +090071 *
Jimo Jung14e87bf2018-09-03 16:28:13 +090072 * The openstack vtap network subject is null if the type is removed
73 * The previous openstack vtap network subject is null if the type is added
74 *
75 * @param type openstack vtap event type
76 * @param vtapNetwork event openstack vtap network subject
77 * @param prevVtapNetwork previous openstack vtap network subject
Jian Li38e4d942018-07-03 22:19:16 +090078 */
Jimo Jung14e87bf2018-09-03 16:28:13 +090079 public OpenstackVtapEvent(Type type,
80 OpenstackVtapNetwork vtapNetwork,
81 OpenstackVtapNetwork prevVtapNetwork) {
82 super(type, vtapNetwork);
83 prevSubject = prevVtapNetwork;
Jian Li38e4d942018-07-03 22:19:16 +090084 }
85
86 /**
Jimo Jung14e87bf2018-09-03 16:28:13 +090087 * Creates an event of a given type and for the specified openstack vtap network and time.
Jian Li38e4d942018-07-03 22:19:16 +090088 *
Jimo Jung14e87bf2018-09-03 16:28:13 +090089 * @param type openstack vtap event type
90 * @param vtapNetwork event openstack vtap network subject
91 * @param prevVtapNetwork previous openstack vtap network subject
92 * @param time occurrence time
Jian Li38e4d942018-07-03 22:19:16 +090093 */
Jimo Jung14e87bf2018-09-03 16:28:13 +090094 public OpenstackVtapEvent(Type type,
95 OpenstackVtapNetwork vtapNetwork,
96 OpenstackVtapNetwork prevVtapNetwork,
97 long time) {
98 super(type, vtapNetwork, time);
99 prevSubject = prevVtapNetwork;
Jian Li38e4d942018-07-03 22:19:16 +0900100 }
101
102 /**
Jimo Jung14e87bf2018-09-03 16:28:13 +0900103 * Creates an event with previous openstack vtap subject.
Jian Li38e4d942018-07-03 22:19:16 +0900104 *
Jimo Jung14e87bf2018-09-03 16:28:13 +0900105 * The openstack vtap subject is null if the type is removed
106 * The previous openstack vtap subject is null if the type is added
Jian Li38e4d942018-07-03 22:19:16 +0900107 *
Jimo Jung14e87bf2018-09-03 16:28:13 +0900108 * @param type openstack vtap event type
109 * @param vtap event openstack vtap subject
110 * @param prevVtap previous openstack vtap subject
Jian Li38e4d942018-07-03 22:19:16 +0900111 */
Jimo Jung14e87bf2018-09-03 16:28:13 +0900112 public OpenstackVtapEvent(Type type, OpenstackVtap vtap, OpenstackVtap prevVtap) {
113 super(type, vtap);
114 prevSubject = prevVtap;
Jian Li38e4d942018-07-03 22:19:16 +0900115 }
116
117 /**
Jimo Jung14e87bf2018-09-03 16:28:13 +0900118 * Creates an event of a given type and for the specified openstack vtap and time.
119 *
120 * @param type openstack vtap event type
121 * @param vtap event openstack vtap subject
122 * @param prevVtap previous openstack vtap subject
123 * @param time occurrence time
124 */
125 public OpenstackVtapEvent(Type type, OpenstackVtap vtap, OpenstackVtap prevVtap, long time) {
126 super(type, vtap, time);
127 prevSubject = prevVtap;
128 }
129
130 /**
131 * Gets the previous subject in this openstack vtap event.
Jian Li38e4d942018-07-03 22:19:16 +0900132 *
133 * @return the previous subject, or null if previous subject is not
134 * specified.
135 */
Jimo Jung14e87bf2018-09-03 16:28:13 +0900136 public Object prevSubject() {
137 return prevSubject;
138 }
139
140 /**
141 * Gets the openstack vtap network in this openstack vtap event.
142 *
143 * @return the subject, or null if the type is removed
144 */
145 public OpenstackVtapNetwork openstackVtapNetwork() {
146 Object obj = subject();
147 checkState(obj == null || obj instanceof OpenstackVtapNetwork, INVALID_OBJ_TYPE, obj);
148 return (OpenstackVtapNetwork) obj;
149 }
150
151 /**
152 * Gets the previous openstack vtap network in this openstack vtap event.
153 *
154 * @return the previous subject, or null if type is added
155 */
156 public OpenstackVtapNetwork prevOpenstackVtapNetwork() {
157 Object obj = prevSubject;
158 checkState(obj == null || obj instanceof OpenstackVtapNetwork, INVALID_OBJ_TYPE, obj);
159 return (OpenstackVtapNetwork) obj;
160 }
161
162 /**
163 * Gets the openstack vtap in this openstack vtap event.
164 *
165 * @return the subject, or null if the type is removed
166 */
167 public OpenstackVtap openstackVtap() {
168 Object obj = subject();
169 checkState(obj == null || obj instanceof OpenstackVtap, INVALID_OBJ_TYPE, obj);
170 return (OpenstackVtap) obj;
171 }
172
173 /**
174 * Gets the previous openstack vtap in this openstack vtap event.
175 *
176 * @return the previous subject, or null if type is added
177 */
178 public OpenstackVtap prevOpenstackVtap() {
179 Object obj = prevSubject;
180 checkState(obj == null || obj instanceof OpenstackVtap, INVALID_OBJ_TYPE, obj);
181 return (OpenstackVtap) obj;
Jian Li38e4d942018-07-03 22:19:16 +0900182 }
183
184 @Override
185 public String toString() {
186 return toStringHelper(this)
187 .add("time", Tools.defaultOffsetDataTime(time()))
188 .add("type", type())
189 .add("subject", subject())
190 .add("prevSubject", prevSubject())
191 .toString();
192 }
193}