l3 support (partial): move event dispatch from southBoundHandler
[netvirt.git] / openstack / net-virt / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / PortSecurityHandler.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 : Brent Salisbury, Madhu Venugopal
9  */
10
11 package org.opendaylight.ovsdb.openstack.netvirt;
12
13 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupAware;
14 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleAware;
15 import org.opendaylight.controller.networkconfig.neutron.NeutronSecurityGroup;
16 import org.opendaylight.controller.networkconfig.neutron.NeutronSecurityRule;
17
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
20
21 import java.net.HttpURLConnection;
22
23 /**
24  * Handle requests for OpenStack Neutron v2.0 Port Security API calls.
25  */
26 public class PortSecurityHandler extends AbstractHandler
27         implements INeutronSecurityGroupAware, INeutronSecurityRuleAware{
28
29     static final Logger logger = LoggerFactory.getLogger(PortSecurityHandler.class);
30
31     @Override
32     public int canCreateNeutronSecurityGroup(NeutronSecurityGroup neutronSecurityGroup) {
33         return HttpURLConnection.HTTP_CREATED;
34     }
35
36     @Override
37     public void neutronSecurityGroupCreated(NeutronSecurityGroup neutronSecurityGroup) {
38         int result = HttpURLConnection.HTTP_BAD_REQUEST;
39
40         result = canCreateNeutronSecurityGroup(neutronSecurityGroup);
41         if (result != HttpURLConnection.HTTP_CREATED) {
42             logger.debug("Neutron Security Group creation failed {} ", result);
43             return;
44         }
45     }
46
47     @Override
48     public int canUpdateNeutronSecurityGroup(NeutronSecurityGroup delta, NeutronSecurityGroup original) {
49         return HttpURLConnection.HTTP_OK;
50     }
51
52     @Override
53     public void neutronSecurityGroupUpdated(NeutronSecurityGroup neutronSecurityGroup) {
54         return;
55     }
56
57     @Override
58     public int canDeleteNeutronSecurityGroup(NeutronSecurityGroup neutronSecurityGroup) {
59         return HttpURLConnection.HTTP_OK;
60     }
61
62     @Override
63     public void neutronSecurityGroupDeleted(NeutronSecurityGroup neutronSecurityGroup) {
64         //TODO: Trigger flowmod removals
65         int result = canDeleteNeutronSecurityGroup(neutronSecurityGroup);
66         if  (result != HttpURLConnection.HTTP_OK) {
67             logger.error(" delete Neutron Security Rule validation failed for result - {} ", result);
68             return;
69         }
70     }
71
72     /**
73      * Invoked when a Security Rules creation is requested
74      * to indicate if the specified Rule can be created.
75      *
76      * @param neutronSecurityRule  An instance of proposed new Neutron Security Rule object.
77      * @return A HTTP status code to the creation request.
78      */
79
80     @Override
81     public int canCreateNeutronSecurityRule(NeutronSecurityRule neutronSecurityRule) {
82         return HttpURLConnection.HTTP_CREATED;
83     }
84
85     @Override
86     public void neutronSecurityRuleCreated(NeutronSecurityRule neutronSecurityRule) {
87         int result = HttpURLConnection.HTTP_BAD_REQUEST;
88
89         result = canCreateNeutronSecurityRule(neutronSecurityRule);
90         if (result != HttpURLConnection.HTTP_CREATED) {
91             logger.debug("Neutron Security Group creation failed {} ", result);
92             return;
93         }
94     }
95
96     @Override
97     public int canUpdateNeutronSecurityRule(NeutronSecurityRule delta, NeutronSecurityRule original) {
98         return HttpURLConnection.HTTP_OK;
99     }
100
101     @Override
102     public void neutronSecurityRuleUpdated(NeutronSecurityRule neutronSecurityRule) {
103         return;
104     }
105
106     @Override
107     public int canDeleteNeutronSecurityRule(NeutronSecurityRule neutronSecurityRule) {
108         return HttpURLConnection.HTTP_OK;
109     }
110
111     @Override
112     public void neutronSecurityRuleDeleted(NeutronSecurityRule neutronSecurityRule) {
113         int result = canDeleteNeutronSecurityRule(neutronSecurityRule);
114         if  (result != HttpURLConnection.HTTP_OK) {
115             logger.error(" delete Neutron Security Rule validation failed for result - {} ", result);
116             return;
117         }
118     }
119
120     /**
121      * Process the event.
122      *
123      * @param abstractEvent the {@link org.opendaylight.ovsdb.openstack.netvirt.AbstractEvent} event to be handled.
124      * @see org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher
125      */
126     @Override
127     public void processEvent(AbstractEvent abstractEvent) {
128         if (!(abstractEvent instanceof NorthboundEvent)) {
129             logger.error("Unable to process abstract event " + abstractEvent);
130             return;
131         }
132         NorthboundEvent ev = (NorthboundEvent) abstractEvent;
133         switch (ev.getAction()) {
134             // TODO: add handling of events here, once callbacks do something
135             //       other than logging.
136             default:
137                 logger.warn("Unable to process event action " + ev.getAction());
138                 break;
139         }
140     }
141
142 }