Empty string checking for subnet name
[groupbasedpolicy.git] / neutron-mapper / src / main / java / org / opendaylight / groupbasedpolicy / neutron / mapper / mapping / NeutronSubnetAware.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, 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.groupbasedpolicy.neutron.mapper.mapping;
9
10 import static com.google.common.base.Preconditions.checkNotNull;
11
12 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
13 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
14 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
15 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.DataStoreHelper;
16 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.IidFactory;
17 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.Utils;
18 import org.opendaylight.neutron.spi.INeutronSubnetAware;
19 import org.opendaylight.neutron.spi.NeutronSubnet;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Name;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Subnet;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubnetBuilder;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28
29 import com.google.common.base.Optional;
30 import com.google.common.base.Strings;
31
32 public class NeutronSubnetAware implements INeutronSubnetAware {
33
34     private final static Logger LOG = LoggerFactory.getLogger(NeutronSubnetAware.class);
35     private final DataBroker dataProvider;
36
37     public NeutronSubnetAware(DataBroker dataProvider) {
38         this.dataProvider = checkNotNull(dataProvider);
39     }
40
41     /**
42      * @see org.opendaylight.neutron.spi.INeutronSubnetAware#canCreateSubnet(org.opendaylight.neutron.spi.NeutronSubnet)
43      */
44     @Override
45     public int canCreateSubnet(NeutronSubnet subnet) {
46         LOG.trace("canCreateSubnet - {}", subnet);
47         // nothing to consider
48         return StatusCode.OK;
49     }
50
51     /**
52      * @see org.opendaylight.neutron.spi.INeutronSubnetAware#neutronSubnetCreated(org.opendaylight.neutron.spi.NeutronSubnet)
53      */
54     @Override
55     public void neutronSubnetCreated(NeutronSubnet neutronSubnet) {
56         LOG.trace("neutronSubnetCreated - {}", neutronSubnet);
57         ReadWriteTransaction rwTx = dataProvider.newReadWriteTransaction();
58         SubnetId subnetId = new SubnetId(Utils.normalizeUuid(neutronSubnet.getID()));
59         TenantId tenantId = new TenantId(Utils.normalizeUuid(neutronSubnet.getTenantID()));
60         Subnet subnet = createSubnet(neutronSubnet);
61         rwTx.put(LogicalDatastoreType.CONFIGURATION, IidFactory.subnetIid(tenantId, subnetId), subnet, true);
62
63         DataStoreHelper.submitToDs(rwTx);
64     }
65
66     private Subnet createSubnet(NeutronSubnet neutronSubnet) {
67         SubnetBuilder subnetBuilder = new SubnetBuilder();
68         subnetBuilder.setId(new SubnetId(neutronSubnet.getID()));
69         subnetBuilder.setParent(new ContextId(neutronSubnet.getNetworkUUID()));
70         if (!Strings.isNullOrEmpty(neutronSubnet.getName())) {
71             subnetBuilder.setName(new Name(neutronSubnet.getName()));
72         }
73         subnetBuilder.setIpPrefix(Utils.createIpPrefix(neutronSubnet.getCidr()));
74         return subnetBuilder.build();
75     }
76
77     /**
78      * @see org.opendaylight.neutron.spi.INeutronSubnetAware#canUpdateSubnet(org.opendaylight.neutron.spi.NeutronSubnet,
79      *      org.opendaylight.neutron.spi.NeutronSubnet)
80      */
81     @Override
82     public int canUpdateSubnet(NeutronSubnet delta, NeutronSubnet original) {
83         LOG.trace("canUpdateSubnet - delta: {} original: {}", delta, original);
84         // nothing to consider
85         return StatusCode.OK;
86     }
87
88     /**
89      * @see org.opendaylight.neutron.spi.INeutronSubnetAware#neutronSubnetUpdated(org.opendaylight.neutron.spi.NeutronSubnet)
90      */
91     @Override
92     public void neutronSubnetUpdated(NeutronSubnet subnet) {
93         LOG.trace("neutronSubnetUpdated - {}", subnet);
94         neutronSubnetCreated(subnet);
95     }
96
97     /**
98      * @see org.opendaylight.neutron.spi.INeutronSubnetAware#canDeleteSubnet(org.opendaylight.neutron.spi.NeutronSubnet)
99      */
100     @Override
101     public int canDeleteSubnet(NeutronSubnet subnet) {
102         LOG.trace("canDeleteSubnet - {}", subnet);
103         // nothing to consider
104         return StatusCode.OK;
105     }
106
107     /**
108      * @see org.opendaylight.neutron.spi.INeutronSubnetAware#neutronSubnetDeleted(org.opendaylight.neutron.spi.NeutronSubnet)
109      */
110     @Override
111     public void neutronSubnetDeleted(NeutronSubnet neutronSubnet) {
112         LOG.trace("neutronSubnetDeleted - {}", neutronSubnet);
113         ReadWriteTransaction rwTx = dataProvider.newReadWriteTransaction();
114         SubnetId subnetId = new SubnetId(Utils.normalizeUuid(neutronSubnet.getID()));
115         TenantId tenantId = new TenantId(Utils.normalizeUuid(neutronSubnet.getTenantID()));
116         Optional<Subnet> potentialSubnet = DataStoreHelper.removeIfExists(LogicalDatastoreType.CONFIGURATION,
117                 IidFactory.subnetIid(tenantId, subnetId), rwTx);
118         if (!potentialSubnet.isPresent()) {
119             LOG.warn("Illegal state - subnet {} does not exist.", subnetId.getValue());
120             rwTx.cancel();
121             return;
122         }
123
124         DataStoreHelper.submitToDs(rwTx);
125     }
126
127 }