| /* |
| * Copyright 2017-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.openstacknetworking.api; |
| |
| import org.onlab.util.Tools; |
| import org.onosproject.event.AbstractEvent; |
| import org.openstack4j.model.network.Network; |
| import org.openstack4j.model.network.Port; |
| import org.openstack4j.model.network.Subnet; |
| |
| import static com.google.common.base.MoreObjects.toStringHelper; |
| |
| /** |
| * Describes OpenStack network service event. |
| */ |
| public class OpenstackNetworkEvent extends AbstractEvent<OpenstackNetworkEvent.Type, Network> { |
| |
| private final Port port; |
| private final Subnet subnet; |
| private final String securityGroupId; |
| |
| public enum Type { |
| /** |
| * Signifies that a new OpenStack network is created. |
| */ |
| OPENSTACK_NETWORK_CREATED, |
| |
| /** |
| * Signifies that the OpenStack network is updated. |
| */ |
| OPENSTACK_NETWORK_UPDATED, |
| |
| /** |
| * Signifies that the OpenStack network is removed. |
| */ |
| OPENSTACK_NETWORK_REMOVED, |
| |
| /** |
| * Signifies that a new OpenStack subnet is created. |
| */ |
| OPENSTACK_SUBNET_CREATED, |
| |
| /** |
| * Signifies that the OpenStack subnet is updated. |
| */ |
| OPENSTACK_SUBNET_UPDATED, |
| |
| /** |
| * Signifies that the OpenStack subnet is removed. |
| */ |
| OPENSTACK_SUBNET_REMOVED, |
| |
| /** |
| * Signifies that a new OpenStack port is created. |
| */ |
| OPENSTACK_PORT_CREATED, |
| |
| /** |
| * Signifies that the OpenStack port will be updated. |
| */ |
| OPENSTACK_PORT_PRE_UPDATE, |
| |
| /** |
| * Signifies that the OpenStack port is updated. |
| */ |
| OPENSTACK_PORT_UPDATED, |
| |
| /** |
| * Signifies that the OpenStack port will be removed. |
| */ |
| OPENSTACK_PORT_PRE_REMOVE, |
| |
| /** |
| * Signifies that the OpenStack port is removed. |
| */ |
| OPENSTACK_PORT_REMOVED, |
| |
| /** |
| * Signifies that the OpenStack security group rule is added to a specific port. |
| */ |
| OPENSTACK_PORT_SECURITY_GROUP_ADDED, |
| |
| /** |
| * Signifies that the OpenStack security group rule is removed from a specific port. |
| */ |
| OPENSTACK_PORT_SECURITY_GROUP_REMOVED |
| } |
| |
| /** |
| * Creates an event of a given type for the specified network and the current time. |
| * @param type openstack network event type |
| * @param network openstack network |
| */ |
| public OpenstackNetworkEvent(Type type, Network network) { |
| super(type, network); |
| this.port = null; |
| this.subnet = null; |
| this.securityGroupId = null; |
| } |
| |
| /** |
| * Creates an event of a given type for the specified network, port and the |
| * current time. |
| * |
| * @param type openstack network event type |
| * @param network openstack network |
| * @param port openstack port |
| */ |
| public OpenstackNetworkEvent(Type type, Network network, Port port) { |
| super(type, network); |
| this.port = port; |
| this.subnet = null; |
| this.securityGroupId = null; |
| } |
| |
| /** |
| * Creates an event of a given type for the specified network, subnet and the |
| * current time. |
| * |
| * @param type openstack network event type |
| * @param network openstack network |
| * @param subnet openstack subnet |
| */ |
| public OpenstackNetworkEvent(Type type, Network network, Subnet subnet) { |
| super(type, network); |
| this.port = null; |
| this.subnet = subnet; |
| this.securityGroupId = null; |
| } |
| |
| /** |
| * Creates an event of a given type for the specified port and security groups. |
| * |
| * @param type openstack network event type |
| * @param port openstack port |
| * @param securityGroupId openstack security group |
| */ |
| public OpenstackNetworkEvent(Type type, Port port, String securityGroupId) { |
| super(type, null); |
| this.port = port; |
| this.subnet = null; |
| this.securityGroupId = securityGroupId; |
| } |
| |
| /** |
| * Returns the port of the network event. |
| * |
| * @return openstack port; null if the event is not port specific |
| */ |
| public Port port() { |
| return port; |
| } |
| |
| /** |
| * Returns the subnet of the network event. |
| * |
| * @return openstack subnet; null if the event is not subnet specific |
| */ |
| public Subnet subnet() { |
| return subnet; |
| } |
| |
| /** |
| * Returns the security group rule IDs updated. |
| * |
| * @return openstack security group |
| */ |
| public String securityGroupId() { |
| return securityGroupId; |
| } |
| |
| @Override |
| public String toString() { |
| if (port == null && subnet == null) { |
| return super.toString(); |
| } |
| return toStringHelper(this) |
| .add("time", Tools.defaultOffsetDataTime(time())) |
| .add("type", type()) |
| .add("network", subject()) |
| .add("port", port) |
| .add("subnet", subnet) |
| .add("security group", securityGroupId()) |
| .toString(); |
| } |
| } |