Migrate to stringValue()
[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 package org.opendaylight.neutron.transcriber;
9
10 import com.google.common.collect.ImmutableBiMap;
11 import java.util.List;
12 import javax.inject.Inject;
13 import javax.inject.Singleton;
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
15 import org.opendaylight.neutron.northbound.api.BadRequestException;
16 import org.opendaylight.neutron.spi.INeutronFirewallRuleCRUD;
17 import org.opendaylight.neutron.spi.NeutronFirewallRule;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.IpVersionBase;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.IpVersionV4;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.IpVersionV6;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.NeutronUtils.FwProtocolMapper;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.ActionAllow;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.ActionBase;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.ActionDeny;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.FirewallRuleAttributes.Protocol;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.FirewallRuleAttributesProtocolBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.FirewallRules;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.firewall.rules.FirewallRule;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.firewall.rules.FirewallRuleBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.firewall.rules.FirewallRuleKey;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.types.rev160517.IpPrefixOrAddress;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.types.rev160517.IpPrefixOrAddressBuilder;
33 import org.ops4j.pax.cdi.api.OsgiServiceProvider;
34
35 @Singleton
36 @OsgiServiceProvider(classes = INeutronFirewallRuleCRUD.class)
37 public final class NeutronFirewallRuleInterface
38         extends AbstractNeutronInterface<FirewallRule, FirewallRules, FirewallRuleKey, NeutronFirewallRule>
39         implements INeutronFirewallRuleCRUD {
40
41     private static final ImmutableBiMap<Class<? extends ActionBase>,
42             String> ACTION_MAP = new ImmutableBiMap.Builder<Class<? extends ActionBase>, String>()
43                     .put(ActionAllow.class, "allow").put(ActionDeny.class, "deny").build();
44
45     private static final ImmutableBiMap<Class<? extends IpVersionBase>,
46             Integer> IP_VERSION_MAP = new ImmutableBiMap.Builder<Class<? extends IpVersionBase>, Integer>()
47                     .put(IpVersionV4.class, Integer.valueOf(4)).put(IpVersionV6.class, Integer.valueOf(6)).build();
48
49     @Inject
50     public NeutronFirewallRuleInterface(DataBroker db) {
51         super(FirewallRuleBuilder.class, db);
52     }
53
54     @Override
55     protected List<FirewallRule> getDataObjectList(FirewallRules rules) {
56         return rules.getFirewallRule();
57     }
58
59     @Override
60     protected NeutronFirewallRule fromMd(FirewallRule rule) {
61         final NeutronFirewallRule answer = new NeutronFirewallRule();
62         fromMdBaseAttributes(rule, answer);
63         if (rule.isShared() != null) {
64             answer.setFirewallRuleIsShared(rule.isShared());
65         }
66         if (rule.isEnabled() != null) {
67             answer.setFirewallRuleIsEnabled(rule.isEnabled());
68         }
69         if (rule.getFirewallPolicyId() != null) {
70             answer.setFirewallRulePolicyID(rule.getFirewallPolicyId().getValue());
71         }
72         if (rule.getProtocol() != null) {
73             final Protocol protocol = rule.getProtocol();
74             if (protocol.getUint8() != null) {
75                 // uint8
76                 answer.setFirewallRuleProtocol(protocol.getUint8().toString());
77             } else {
78                 // symbolic protocol name
79                 answer.setFirewallRuleProtocol(FwProtocolMapper.getName(protocol.getIdentityref()));
80             }
81         }
82         if (rule.getIpVersion() != null) {
83             answer.setFirewallRuleIpVer(IP_VERSION_MAP.get(rule.getIpVersion()));
84         }
85         if (rule.getSourceIpAddr() != null) {
86             answer.setFirewallRuleSrcIpAddr(rule.getSourceIpAddr().stringValue());
87         }
88         if (rule.getDestinationIpAddr() != null) {
89             answer.setFirewallRuleDstIpAddr(rule.getDestinationIpAddr().stringValue());
90         }
91         if (rule.getSourcePortRangeMin() != null) {
92             answer.setFirewallRuleSrcPortRangeMin(rule.getSourcePortRangeMin());
93         }
94         if (rule.getSourcePortRangeMax() != null) {
95             answer.setFirewallRuleSrcPortRangeMax(rule.getSourcePortRangeMax());
96         }
97         if (rule.getDestinationPortRangeMin() != null) {
98             answer.setFirewallRuleDstPortRangeMin(rule.getDestinationPortRangeMin());
99         }
100         if (rule.getDestinationPortRangeMax() != null) {
101             answer.setFirewallRuleDstPortRangeMax(rule.getDestinationPortRangeMax());
102         }
103         if (rule.getPosition() != null) {
104             answer.setFirewallRulePosition(Integer.valueOf(rule.getPosition().intValue()));
105         }
106         if (rule.getAction() != null) {
107             answer.setFirewallRuleAction(ACTION_MAP.get(rule.getAction()));
108         }
109         return answer;
110     }
111
112     @Override
113     @SuppressWarnings("checkstyle:AvoidHidingCauseException")
114     protected FirewallRule toMd(NeutronFirewallRule rule) {
115         final FirewallRuleBuilder ruleBuilder = new FirewallRuleBuilder();
116         toMdBaseAttributes(rule, ruleBuilder);
117         if (rule.getFirewallRuleIsShared() != null) {
118             ruleBuilder.setShared(rule.getFirewallRuleIsShared());
119         }
120         if (rule.getFirewallRuleIsEnabled() != null) {
121             ruleBuilder.setEnabled(rule.getFirewallRuleIsEnabled());
122         }
123         if (rule.getFirewallRulePolicyID() != null) {
124             ruleBuilder.setFirewallPolicyId(toUuid(rule.getFirewallRulePolicyID()));
125         }
126         if (rule.getFirewallRuleProtocol() != null) {
127             final String protocolString = rule.getFirewallRuleProtocol();
128             try {
129                 final Protocol protocol = FirewallRuleAttributesProtocolBuilder.getDefaultInstance(protocolString);
130                 ruleBuilder.setProtocol(protocol);
131             } catch (NumberFormatException e) {
132                 throw new BadRequestException("Protocol {" + rule.getFirewallRuleProtocol() + "} is not supported");
133             }
134         }
135         if (rule.getFirewallRuleIpVer() != null) {
136             final ImmutableBiMap<Integer, Class<? extends IpVersionBase>> mapper = IP_VERSION_MAP.inverse();
137             ruleBuilder.setIpVersion(mapper.get(rule.getFirewallRuleIpVer()));
138         }
139         if (rule.getFirewallRuleSrcIpAddr() != null) {
140             final IpPrefixOrAddress ipAddress = IpPrefixOrAddressBuilder.getDefaultInstance(
141                 rule.getFirewallRuleSrcIpAddr());
142             ruleBuilder.setSourceIpAddr(ipAddress);
143         }
144         if (rule.getFirewallRuleDstIpAddr() != null) {
145             final IpPrefixOrAddress ipAddress = IpPrefixOrAddressBuilder.getDefaultInstance(
146                 rule.getFirewallRuleDstIpAddr());
147             ruleBuilder.setDestinationIpAddr(ipAddress);
148         }
149         if (rule.getFirewallRuleSrcPortRangeMin() != null) {
150             ruleBuilder.setSourcePortRangeMin(rule.getFirewallRuleSrcPortRangeMin());
151         }
152         if (rule.getFirewallRuleSrcPortRangeMax() != null) {
153             ruleBuilder.setSourcePortRangeMax(rule.getFirewallRuleSrcPortRangeMax());
154         }
155         if (rule.getFirewallRuleDstPortRangeMin() != null) {
156             ruleBuilder.setDestinationPortRangeMin(rule.getFirewallRuleDstPortRangeMin());
157         }
158         if (rule.getFirewallRuleDstPortRangeMax() != null) {
159             ruleBuilder.setDestinationPortRangeMax(rule.getFirewallRuleDstPortRangeMax());
160         }
161         if (rule.getFirewallRulePosition() != null) {
162             ruleBuilder.setPosition(rule.getFirewallRulePosition().shortValue());
163         }
164         if (rule.getFirewallRuleAction() != null) {
165             final ImmutableBiMap<String, Class<? extends ActionBase>> mapper = ACTION_MAP.inverse();
166             ruleBuilder.setAction(mapper.get(rule.getFirewallRuleAction()));
167         }
168         return ruleBuilder.build();
169     }
170 }