Merge "SouthboundIT: Test to check ovs version for node."
[netvirt.git] / openstack / net-virt / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / SubnetHandler.java
1 /*
2  * Copyright (C) 2013 Red Hat, Inc.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Authors : Madhu Venugopal, Brent Salisbury
9  */
10
11 package org.opendaylight.ovsdb.openstack.netvirt;
12
13 import org.opendaylight.neutron.spi.INeutronSubnetAware;
14 import org.opendaylight.neutron.spi.NeutronSubnet;
15 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
16 import org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter;
17
18 import com.google.common.base.Preconditions;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
21
22 import java.net.HttpURLConnection;
23
24 public class SubnetHandler extends AbstractHandler implements INeutronSubnetAware {
25
26     static final Logger logger = LoggerFactory.getLogger(SubnetHandler.class);
27
28     // The implementation for each of these services is resolved by the OSGi Service Manager
29     private volatile NeutronL3Adapter neutronL3Adapter;
30
31     @Override
32     public int canCreateSubnet(NeutronSubnet subnet) {
33         return HttpURLConnection.HTTP_OK;
34     }
35
36     @Override
37     public void neutronSubnetCreated(NeutronSubnet subnet) {
38         enqueueEvent(new NorthboundEvent(subnet, Action.ADD));
39     }
40
41     @Override
42     public int canUpdateSubnet(NeutronSubnet delta, NeutronSubnet original) {
43         return HttpURLConnection.HTTP_OK;
44     }
45
46     @Override
47     public void neutronSubnetUpdated(NeutronSubnet subnet) {
48         enqueueEvent(new NorthboundEvent(subnet, Action.UPDATE));
49     }
50
51     @Override
52     public int canDeleteSubnet(NeutronSubnet subnet) {
53         return HttpURLConnection.HTTP_OK;
54     }
55
56     @Override
57     public void neutronSubnetDeleted(NeutronSubnet subnet) {
58         enqueueEvent(new NorthboundEvent(subnet, Action.DELETE));
59     }
60
61     /**
62      * Process the event.
63      *
64      * @param abstractEvent the {@link org.opendaylight.ovsdb.openstack.netvirt.AbstractEvent} event to be handled.
65      * @see org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher
66      */
67     @Override
68     public void processEvent(AbstractEvent abstractEvent) {
69         if (!(abstractEvent instanceof NorthboundEvent)) {
70             logger.error("Unable to process abstract event " + abstractEvent);
71             return;
72         }
73         NorthboundEvent ev = (NorthboundEvent) abstractEvent;
74         switch (ev.getAction()) {
75             case ADD:
76                 // fall through
77             case DELETE:
78                 // fall through
79             case UPDATE:
80                 Preconditions.checkNotNull(neutronL3Adapter);
81                 neutronL3Adapter.handleNeutronSubnetEvent(ev.getSubnet(), ev.getAction());
82                 break;
83             default:
84                 logger.warn("Unable to process event action " + ev.getAction());
85                 break;
86         }
87     }
88 }