yang model revise: neutron-fwaas.yang
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronFirewallRuleInterface.java
1 /*
2  * Copyright (c) 2014, 2015 Red Hat, Inc. and others.  All rights reserved.
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
9 package org.opendaylight.neutron.transcriber;
10
11 import java.util.List;
12
13 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
14 import org.opendaylight.neutron.spi.INeutronFirewallRuleCRUD;
15 import org.opendaylight.neutron.spi.NeutronFirewallRule;
16
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.IpVersionBase;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.IpVersionV4;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.IpVersionV6;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.NeutronUtils.FwProtocolMapper;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.ActionAllow;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.ActionBase;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.ActionDeny;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.FirewallRuleAttributes.Protocol;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.FirewallRules;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.firewall.rules.FirewallRule;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.firewall.rules.FirewallRuleBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.types.rev160517.IpPrefixOrAddress;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
31
32
33 import com.google.common.collect.ImmutableBiMap;
34 import org.osgi.framework.BundleContext;
35 import org.osgi.framework.ServiceRegistration;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
38
39 public class NeutronFirewallRuleInterface extends AbstractNeutronInterface<FirewallRule, FirewallRules, NeutronFirewallRule> implements INeutronFirewallRuleCRUD {
40     private static final Logger LOGGER = LoggerFactory.getLogger(NeutronFirewallRuleInterface.class);
41
42     private static final ImmutableBiMap<Class<? extends ActionBase>, String> ACTION_MAP
43             = new ImmutableBiMap.Builder<Class<? extends ActionBase>, String>()
44             .put(ActionAllow.class, "allow")
45             .put(ActionDeny.class, "deny")
46             .build();
47
48     private static final ImmutableBiMap<Class<? extends IpVersionBase>, Integer> IP_VERSION_MAP
49             = new ImmutableBiMap.Builder<Class<? extends IpVersionBase>, Integer>()
50             .put(IpVersionV4.class, Integer.valueOf(4))
51             .put(IpVersionV6.class, Integer.valueOf(6))
52             .build();
53
54     NeutronFirewallRuleInterface(ProviderContext providerContext) {
55         super(providerContext);
56     }
57
58     @Override
59     public boolean neutronFirewallRuleExists(String uuid) {
60         return exists(uuid);
61     }
62
63     @Override
64     public NeutronFirewallRule getNeutronFirewallRule(String uuid) {
65         return get(uuid);
66     }
67
68     @Override
69     protected List<FirewallRule> getDataObjectList(FirewallRules rules) {
70         return rules.getFirewallRule();
71     }
72
73     @Override
74     public List<NeutronFirewallRule> getAllNeutronFirewallRules() {
75         return getAll();
76     }
77
78     @Override
79     public boolean addNeutronFirewallRule(NeutronFirewallRule input) {
80         return add(input);
81     }
82
83     @Override
84     public boolean removeNeutronFirewallRule(String uuid) {
85         return remove(uuid);
86     }
87
88     @Override
89     public boolean updateNeutronFirewallRule(String uuid, NeutronFirewallRule delta) {
90         return update(uuid, delta);
91     }
92
93     @Override
94     public boolean neutronFirewallRuleInUse(String firewallRuleUUID) {
95         return !exists(firewallRuleUUID);
96     }
97
98     @Override
99     protected InstanceIdentifier<FirewallRule> createInstanceIdentifier(FirewallRule item) {
100         return InstanceIdentifier.create(Neutron.class)
101                 .child(FirewallRules.class)
102                 .child(FirewallRule.class, item.getKey());
103     }
104
105     @Override
106     protected InstanceIdentifier<FirewallRules> createInstanceIdentifier() {
107         return InstanceIdentifier.create(Neutron.class)
108                 .child(FirewallRules.class);
109     }
110
111     protected NeutronFirewallRule fromMd(FirewallRule rule) {
112         final NeutronFirewallRule answer = new NeutronFirewallRule();
113         if (rule.getUuid() != null) {
114             answer.setID(rule.getUuid().getValue());
115         }
116         if (rule.getName() != null) {
117             answer.setFirewallRuleName(rule.getName());
118         }
119         if (rule.getTenantId() != null) {
120             answer.setTenantID(rule.getTenantId());
121         }
122         if (rule.isShared() != null) {
123             answer.setFirewallRuleIsShared(rule.isShared());
124         }
125         if (rule.isEnabled() != null) {
126             answer.setFirewallRuleIsEnabled(rule.isEnabled());
127         }
128         if (rule.getFirewallPolicyId() != null) {
129             answer.setFirewallRulePolicyID(rule.getFirewallPolicyId().getValue());
130         }
131         if (rule.getProtocol() != null) {
132             final Protocol protocol = rule.getProtocol();
133             if (protocol.getUint8() != null) {
134                 // uint8
135                 answer.setFirewallRuleProtocol(protocol.getUint8().toString());
136             } else {
137                 // symbolic protocol name
138                 answer.setFirewallRuleProtocol(FwProtocolMapper.getName(protocol.getIdentityref()));
139             }
140         }
141         if (rule.getIpVersion() != null) {
142             answer.setFirewallRuleIpVer(IP_VERSION_MAP.get(rule.getIpVersion()));
143         }
144         if (rule.getSourceIpAddr() != null) {
145             answer.setFirewallRuleSrcIpAddr(String.valueOf(rule.getSourceIpAddr().getValue()));
146         }
147         if (rule.getDestinationIpAddr() != null) {
148             answer.setFirewallRuleDstIpAddr(String.valueOf(rule.getDestinationIpAddr().getValue()));
149         }
150         if (rule.getSourcePortRangeMin() != null) {
151             answer.setFirewallRuleSrcPortRangeMin(rule.getSourcePortRangeMin());
152         }
153         if (rule.getSourcePortRangeMax() != null) {
154             answer.setFirewallRuleSrcPortRangeMax(rule.getSourcePortRangeMax());
155         }
156         if (rule.getDestinationPortRangeMin() != null) {
157             answer.setFirewallRuleDstPortRangeMin(rule.getDestinationPortRangeMin());
158         }
159         if (rule.getDestinationPortRangeMax() != null) {
160             answer.setFirewallRuleDstPortRangeMax(rule.getDestinationPortRangeMax());
161         }
162         if (rule.getPosition() != null) {
163             answer.setFirewallRulePosition(Integer.valueOf(rule.getPosition().intValue()));
164         }
165         if (rule.getAction() != null) {
166             answer.setFirewallRuleAction(ACTION_MAP.get(rule.getAction()));
167         }
168         return answer;
169     }
170
171     @Override
172     protected FirewallRule toMd(NeutronFirewallRule rule) {
173         final FirewallRuleBuilder ruleBuilder = new FirewallRuleBuilder();
174         if (rule.getID() != null) {
175             ruleBuilder.setUuid(toUuid(rule.getID()));
176         }
177         if (rule.getFirewallRuleName() != null) {
178             ruleBuilder.setName(rule.getFirewallRuleName());
179         }
180         if (rule.getTenantID() != null) {
181             ruleBuilder.setTenantId(toUuid(rule.getTenantID()));
182         }
183         if (rule.getFirewallRuleIsShared() != null) {
184             ruleBuilder.setShared(rule.getFirewallRuleIsShared());
185         }
186         if (rule.getFirewallRuleIsEnabled() != null) {
187             ruleBuilder.setEnabled(rule.getFirewallRuleIsEnabled());
188         }
189         if (rule.getFirewallRulePolicyID() != null) {
190             ruleBuilder.setFirewallPolicyId(toUuid(rule.getFirewallRulePolicyID()));
191         }
192         if (rule.getFirewallRuleProtocol() != null) {
193             final String protocolString = rule.getFirewallRuleProtocol();
194             final Protocol protocol = new Protocol(protocolString.toCharArray());
195             ruleBuilder.setProtocol(protocol);
196         }
197         if (rule.getFirewallRuleIpVer() != null) {
198             final ImmutableBiMap<Integer, Class<? extends IpVersionBase>> mapper = IP_VERSION_MAP.inverse();
199             ruleBuilder.setIpVersion(mapper.get(rule.getFirewallRuleIpVer()));
200         }
201         if (rule.getFirewallRuleSrcIpAddr() != null) {
202             final IpPrefixOrAddress ipAddress = new IpPrefixOrAddress(rule.getFirewallRuleSrcIpAddr().toCharArray());
203             ruleBuilder.setSourceIpAddr(ipAddress);
204         }
205         if (rule.getFirewallRuleDstIpAddr() != null) {
206             final IpPrefixOrAddress ipAddress = new IpPrefixOrAddress(rule.getFirewallRuleDstIpAddr().toCharArray());
207             ruleBuilder.setDestinationIpAddr(ipAddress);
208         }
209         if (rule.getFirewallRuleSrcPortRangeMin() != null) {
210             ruleBuilder.setSourcePortRangeMin(rule.getFirewallRuleSrcPortRangeMin());
211         }
212         if (rule.getFirewallRuleSrcPortRangeMax() != null) {
213             ruleBuilder.setSourcePortRangeMax(rule.getFirewallRuleSrcPortRangeMax());
214         }
215         if (rule.getFirewallRuleDstPortRangeMin() != null) {
216             ruleBuilder.setDestinationPortRangeMin(rule.getFirewallRuleDstPortRangeMin());
217         }
218         if (rule.getFirewallRuleDstPortRangeMax() != null) {
219             ruleBuilder.setDestinationPortRangeMax(rule.getFirewallRuleDstPortRangeMax());
220         }
221         if (rule.getFirewallRulePosition() != null) {
222             ruleBuilder.setPosition(rule.getFirewallRulePosition().shortValue());
223         }
224         if (rule.getFirewallRuleAction() != null) {
225             final ImmutableBiMap<String, Class<? extends ActionBase>> mapper = ACTION_MAP.inverse();
226             ruleBuilder.setAction(mapper.get(rule.getFirewallRuleAction()));
227         }
228         return ruleBuilder.build();
229     }
230
231     @Override
232     protected FirewallRule toMd(String uuid) {
233         final FirewallRuleBuilder ruleBuilder = new FirewallRuleBuilder();
234         ruleBuilder.setUuid(toUuid(uuid));
235         return ruleBuilder.build();
236     }
237
238     public static void registerNewInterface(BundleContext context,
239                                             ProviderContext providerContext,
240                                             List<ServiceRegistration<?>> registrations) {
241         final NeutronFirewallRuleInterface neutronFirewallRuleInterface = new NeutronFirewallRuleInterface(providerContext);
242         final ServiceRegistration<INeutronFirewallRuleCRUD> neutronFirewallRuleInterfaceRegistration = context.registerService(INeutronFirewallRuleCRUD.class, neutronFirewallRuleInterface, null);
243         if(neutronFirewallRuleInterfaceRegistration != null) {
244             registrations.add(neutronFirewallRuleInterfaceRegistration);
245         }
246     }
247 }