Merge "MD-SAL OVSDB SB - handle update to ovsdb node."
[ovsdb.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_CREATED;
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_CREATED;
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         // TODO Auto-generated method stub
54         return HttpURLConnection.HTTP_CREATED;
55     }
56
57     @Override
58     public void neutronSubnetDeleted(NeutronSubnet subnet) {
59         enqueueEvent(new NorthboundEvent(subnet, Action.DELETE));
60     }
61
62     /**
63      * Process the event.
64      *
65      * @param abstractEvent the {@link org.opendaylight.ovsdb.openstack.netvirt.AbstractEvent} event to be handled.
66      * @see org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher
67      */
68     @Override
69     public void processEvent(AbstractEvent abstractEvent) {
70         if (!(abstractEvent instanceof NorthboundEvent)) {
71             logger.error("Unable to process abstract event " + abstractEvent);
72             return;
73         }
74         NorthboundEvent ev = (NorthboundEvent) abstractEvent;
75         switch (ev.getAction()) {
76             case ADD:
77                 // fall through
78             case DELETE:
79                 // fall through
80             case UPDATE:
81                 Preconditions.checkNotNull(neutronL3Adapter);
82                 neutronL3Adapter.handleNeutronSubnetEvent(ev.getSubnet(), ev.getAction());
83                 break;
84             default:
85                 logger.warn("Unable to process event action " + ev.getAction());
86                 break;
87         }
88     }
89 }