remove unnecessary cast
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronFirewallRuleInterface.java
index 1072ef6a5d07eef468be8e1c8696a3be98a671e9..8a2e4c674b9614d302657cf9d6e53b2ff7d59927 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2014 Red Hat, Inc.
+ * Copyright (c) 2014, 2015 Red Hat, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 
 package org.opendaylight.neutron.transcriber;
 
-import java.util.ArrayList;
-import java.util.HashSet;
+import com.google.common.collect.ImmutableBiMap;
 import java.util.List;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.neutron.northbound.api.BadRequestException;
 import org.opendaylight.neutron.spi.INeutronFirewallRuleCRUD;
 import org.opendaylight.neutron.spi.NeutronFirewallRule;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class NeutronFirewallRuleInterface extends AbstractNeutronInterface implements INeutronFirewallRuleCRUD {
-    private static final Logger LOGGER = LoggerFactory.getLogger(NeutronFirewallRuleInterface.class);
-
-    private ConcurrentMap<String, NeutronFirewallRule> firewallRuleDB = new ConcurrentHashMap<String, NeutronFirewallRule>();
-
-
-    NeutronFirewallRuleInterface(ProviderContext providerContext) {
-        super(providerContext);
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.IpVersionBase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.IpVersionV4;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.IpVersionV6;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.NeutronUtils.FwProtocolMapper;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.ActionAllow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.ActionBase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.ActionDeny;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.FirewallRuleAttributes.Protocol;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.FirewallRules;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.firewall.rules.FirewallRule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.firewall.rules.FirewallRuleBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.firewall.rules.FirewallRuleKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.types.rev160517.IpPrefixOrAddress;
+
+public final class NeutronFirewallRuleInterface
+        extends AbstractNeutronInterface<FirewallRule, FirewallRules, FirewallRuleKey, NeutronFirewallRule>
+        implements INeutronFirewallRuleCRUD {
+    private static final ImmutableBiMap<Class<? extends ActionBase>,
+            String> ACTION_MAP = new ImmutableBiMap.Builder<Class<? extends ActionBase>, String>()
+                    .put(ActionAllow.class, "allow").put(ActionDeny.class, "deny").build();
+
+    private static final ImmutableBiMap<Class<? extends IpVersionBase>,
+            Integer> IP_VERSION_MAP = new ImmutableBiMap.Builder<Class<? extends IpVersionBase>, Integer>()
+                    .put(IpVersionV4.class, Integer.valueOf(4)).put(IpVersionV6.class, Integer.valueOf(6)).build();
+
+    NeutronFirewallRuleInterface(DataBroker db) {
+        super(FirewallRuleBuilder.class, db);
     }
 
     @Override
-    public boolean neutronFirewallRuleExists(String uuid) {
-        return firewallRuleDB.containsKey(uuid);
+    protected List<FirewallRule> getDataObjectList(FirewallRules rules) {
+        return rules.getFirewallRule();
     }
 
     @Override
-    public NeutronFirewallRule getNeutronFirewallRule(String uuid) {
-        if (!neutronFirewallRuleExists(uuid)) {
-            LOGGER.debug("No Firewall Rule Have Been Defined");
-            return null;
+    protected NeutronFirewallRule fromMd(FirewallRule rule) {
+        final NeutronFirewallRule answer = new NeutronFirewallRule();
+        fromMdBaseAttributes(rule, answer);
+        if (rule.isShared() != null) {
+            answer.setFirewallRuleIsShared(rule.isShared());
         }
-        return firewallRuleDB.get(uuid);
-    }
-
-    @Override
-    public List<NeutronFirewallRule> getAllNeutronFirewallRules() {
-        Set<NeutronFirewallRule> allFirewallRules = new HashSet<NeutronFirewallRule>();
-        for (Entry<String, NeutronFirewallRule> entry : firewallRuleDB.entrySet()) {
-            NeutronFirewallRule firewallRule = entry.getValue();
-            allFirewallRules.add(firewallRule);
-        }
-        LOGGER.debug("Exiting getFirewallRules, Found {} OpenStackFirewallRule", allFirewallRules.size());
-        List<NeutronFirewallRule> ans = new ArrayList<NeutronFirewallRule>();
-        ans.addAll(allFirewallRules);
-        return ans;
-    }
-
-    @Override
-    public boolean addNeutronFirewallRule(NeutronFirewallRule input) {
-        if (neutronFirewallRuleExists(input.getFirewallRuleUUID())) {
-            return false;
+        if (rule.isEnabled() != null) {
+            answer.setFirewallRuleIsEnabled(rule.isEnabled());
         }
-        firewallRuleDB.putIfAbsent(input.getFirewallRuleUUID(), input);
-        return true;
-    }
-
-    @Override
-    public boolean removeNeutronFirewallRule(String uuid) {
-        if (!neutronFirewallRuleExists(uuid)) {
-            return false;
+        if (rule.getFirewallPolicyId() != null) {
+            answer.setFirewallRulePolicyID(rule.getFirewallPolicyId().getValue());
         }
-        firewallRuleDB.remove(uuid);
-        return true;
-    }
-
-    @Override
-    public boolean updateNeutronFirewallRule(String uuid, NeutronFirewallRule delta) {
-        if (!neutronFirewallRuleExists(uuid)) {
-            return false;
+        if (rule.getProtocol() != null) {
+            final Protocol protocol = rule.getProtocol();
+            if (protocol.getUint8() != null) {
+                // uint8
+                answer.setFirewallRuleProtocol(protocol.getUint8().toString());
+            } else {
+                // symbolic protocol name
+                answer.setFirewallRuleProtocol(FwProtocolMapper.getName(protocol.getIdentityref()));
+            }
         }
-        NeutronFirewallRule target = firewallRuleDB.get(uuid);
-        return overwrite(target, delta);
-    }
-
-    @Override
-    public boolean neutronFirewallRuleInUse(String firewallRuleUUID) {
-        return !neutronFirewallRuleExists(firewallRuleUUID);
-    }
-
-    @Override
-    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    protected DataObject toMd(Object neutronObject) {
-        // TODO Auto-generated method stub
-        return null;
+        if (rule.getIpVersion() != null) {
+            answer.setFirewallRuleIpVer(IP_VERSION_MAP.get(rule.getIpVersion()));
+        }
+        if (rule.getSourceIpAddr() != null) {
+            answer.setFirewallRuleSrcIpAddr(String.valueOf(rule.getSourceIpAddr().getValue()));
+        }
+        if (rule.getDestinationIpAddr() != null) {
+            answer.setFirewallRuleDstIpAddr(String.valueOf(rule.getDestinationIpAddr().getValue()));
+        }
+        if (rule.getSourcePortRangeMin() != null) {
+            answer.setFirewallRuleSrcPortRangeMin(rule.getSourcePortRangeMin());
+        }
+        if (rule.getSourcePortRangeMax() != null) {
+            answer.setFirewallRuleSrcPortRangeMax(rule.getSourcePortRangeMax());
+        }
+        if (rule.getDestinationPortRangeMin() != null) {
+            answer.setFirewallRuleDstPortRangeMin(rule.getDestinationPortRangeMin());
+        }
+        if (rule.getDestinationPortRangeMax() != null) {
+            answer.setFirewallRuleDstPortRangeMax(rule.getDestinationPortRangeMax());
+        }
+        if (rule.getPosition() != null) {
+            answer.setFirewallRulePosition(Integer.valueOf(rule.getPosition().intValue()));
+        }
+        if (rule.getAction() != null) {
+            answer.setFirewallRuleAction(ACTION_MAP.get(rule.getAction()));
+        }
+        return answer;
     }
 
     @Override
-    protected DataObject toMd(String uuid) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public static void registerNewInterface(BundleContext context,
-                                            ProviderContext providerContext,
-                                            List<ServiceRegistration<?>> registrations) throws Exception {
-        NeutronFirewallRuleInterface neutronFirewallRuleInterface = new NeutronFirewallRuleInterface(providerContext);
-        ServiceRegistration<INeutronFirewallRuleCRUD> neutronFirewallRuleInterfaceRegistration = context.registerService(INeutronFirewallRuleCRUD.class, neutronFirewallRuleInterface, null);
-        if(neutronFirewallRuleInterfaceRegistration != null) {
-            registrations.add(neutronFirewallRuleInterfaceRegistration);
+    protected FirewallRule toMd(NeutronFirewallRule rule) {
+        final FirewallRuleBuilder ruleBuilder = new FirewallRuleBuilder();
+        toMdBaseAttributes(rule, ruleBuilder);
+        if (rule.getFirewallRuleIsShared() != null) {
+            ruleBuilder.setShared(rule.getFirewallRuleIsShared());
+        }
+        if (rule.getFirewallRuleIsEnabled() != null) {
+            ruleBuilder.setEnabled(rule.getFirewallRuleIsEnabled());
+        }
+        if (rule.getFirewallRulePolicyID() != null) {
+            ruleBuilder.setFirewallPolicyId(toUuid(rule.getFirewallRulePolicyID()));
+        }
+        if (rule.getFirewallRuleProtocol() != null) {
+            final String protocolString = rule.getFirewallRuleProtocol();
+            try {
+                final Protocol protocol = new Protocol(protocolString.toCharArray());
+                ruleBuilder.setProtocol(protocol);
+            } catch (NumberFormatException e) {
+                throw new BadRequestException("Protocol {" + rule.getFirewallRuleProtocol()
+                        + "} is not supported");
+            }
+        }
+        if (rule.getFirewallRuleIpVer() != null) {
+            final ImmutableBiMap<Integer, Class<? extends IpVersionBase>> mapper = IP_VERSION_MAP.inverse();
+            ruleBuilder.setIpVersion(mapper.get(rule.getFirewallRuleIpVer()));
+        }
+        if (rule.getFirewallRuleSrcIpAddr() != null) {
+            final IpPrefixOrAddress ipAddress = new IpPrefixOrAddress(rule.getFirewallRuleSrcIpAddr().toCharArray());
+            ruleBuilder.setSourceIpAddr(ipAddress);
+        }
+        if (rule.getFirewallRuleDstIpAddr() != null) {
+            final IpPrefixOrAddress ipAddress = new IpPrefixOrAddress(rule.getFirewallRuleDstIpAddr().toCharArray());
+            ruleBuilder.setDestinationIpAddr(ipAddress);
+        }
+        if (rule.getFirewallRuleSrcPortRangeMin() != null) {
+            ruleBuilder.setSourcePortRangeMin(rule.getFirewallRuleSrcPortRangeMin());
+        }
+        if (rule.getFirewallRuleSrcPortRangeMax() != null) {
+            ruleBuilder.setSourcePortRangeMax(rule.getFirewallRuleSrcPortRangeMax());
+        }
+        if (rule.getFirewallRuleDstPortRangeMin() != null) {
+            ruleBuilder.setDestinationPortRangeMin(rule.getFirewallRuleDstPortRangeMin());
+        }
+        if (rule.getFirewallRuleDstPortRangeMax() != null) {
+            ruleBuilder.setDestinationPortRangeMax(rule.getFirewallRuleDstPortRangeMax());
+        }
+        if (rule.getFirewallRulePosition() != null) {
+            ruleBuilder.setPosition(rule.getFirewallRulePosition().shortValue());
+        }
+        if (rule.getFirewallRuleAction() != null) {
+            final ImmutableBiMap<String, Class<? extends ActionBase>> mapper = ACTION_MAP.inverse();
+            ruleBuilder.setAction(mapper.get(rule.getFirewallRuleAction()));
         }
+        return ruleBuilder.build();
     }
 }