2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.groupbasedpolicy.neutron.mapper.mapping;
10 import static com.google.common.base.Preconditions.checkNotNull;
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;
29 import com.google.common.base.Optional;
31 public class NeutronSubnetAware implements INeutronSubnetAware {
33 private final static Logger LOG = LoggerFactory.getLogger(NeutronSubnetAware.class);
34 private final DataBroker dataProvider;
36 public NeutronSubnetAware(DataBroker dataProvider) {
37 this.dataProvider = checkNotNull(dataProvider);
41 * @see org.opendaylight.neutron.spi.INeutronSubnetAware#canCreateSubnet(org.opendaylight.neutron.spi.NeutronSubnet)
44 public int canCreateSubnet(NeutronSubnet subnet) {
45 LOG.trace("canCreateSubnet - {}", subnet);
46 // nothing to consider
51 * @see org.opendaylight.neutron.spi.INeutronSubnetAware#neutronSubnetCreated(org.opendaylight.neutron.spi.NeutronSubnet)
54 public void neutronSubnetCreated(NeutronSubnet neutronSubnet) {
55 LOG.trace("neutronSubnetCreated - {}", neutronSubnet);
56 ReadWriteTransaction rwTx = dataProvider.newReadWriteTransaction();
57 SubnetId subnetId = new SubnetId(Utils.normalizeUuid(neutronSubnet.getID()));
58 TenantId tenantId = new TenantId(Utils.normalizeUuid(neutronSubnet.getTenantID()));
59 Subnet subnet = createSubnet(neutronSubnet);
60 rwTx.put(LogicalDatastoreType.CONFIGURATION, IidFactory.subnetIid(tenantId, subnetId), subnet, true);
62 DataStoreHelper.submitToDs(rwTx);
65 private Subnet createSubnet(NeutronSubnet neutronSubnet) {
66 SubnetBuilder subnetBuilder = new SubnetBuilder();
67 subnetBuilder.setId(new SubnetId(neutronSubnet.getID()));
68 subnetBuilder.setParent(new ContextId(neutronSubnet.getNetworkUUID()));
69 if (neutronSubnet.getName() != null) {
70 subnetBuilder.setName(new Name(neutronSubnet.getName()));
72 subnetBuilder.setIpPrefix(Utils.createIpPrefix(neutronSubnet.getCidr()));
73 return subnetBuilder.build();
77 * @see org.opendaylight.neutron.spi.INeutronSubnetAware#canUpdateSubnet(org.opendaylight.neutron.spi.NeutronSubnet,
78 * org.opendaylight.neutron.spi.NeutronSubnet)
81 public int canUpdateSubnet(NeutronSubnet delta, NeutronSubnet original) {
82 LOG.trace("canUpdateSubnet - delta: {} original: {}", delta, original);
83 // nothing to consider
88 * @see org.opendaylight.neutron.spi.INeutronSubnetAware#neutronSubnetUpdated(org.opendaylight.neutron.spi.NeutronSubnet)
91 public void neutronSubnetUpdated(NeutronSubnet subnet) {
92 LOG.trace("neutronSubnetUpdated - {}", subnet);
93 neutronSubnetCreated(subnet);
97 * @see org.opendaylight.neutron.spi.INeutronSubnetAware#canDeleteSubnet(org.opendaylight.neutron.spi.NeutronSubnet)
100 public int canDeleteSubnet(NeutronSubnet subnet) {
101 LOG.trace("canDeleteSubnet - {}", subnet);
102 // nothing to consider
103 return StatusCode.OK;
107 * @see org.opendaylight.neutron.spi.INeutronSubnetAware#neutronSubnetDeleted(org.opendaylight.neutron.spi.NeutronSubnet)
110 public void neutronSubnetDeleted(NeutronSubnet neutronSubnet) {
111 LOG.trace("neutronSubnetDeleted - {}", neutronSubnet);
112 ReadWriteTransaction rwTx = dataProvider.newReadWriteTransaction();
113 SubnetId subnetId = new SubnetId(Utils.normalizeUuid(neutronSubnet.getID()));
114 TenantId tenantId = new TenantId(Utils.normalizeUuid(neutronSubnet.getTenantID()));
115 Optional<Subnet> potentialSubnet = DataStoreHelper.removeIfExists(LogicalDatastoreType.CONFIGURATION,
116 IidFactory.subnetIid(tenantId, subnetId), rwTx);
117 if (!potentialSubnet.isPresent()) {
118 LOG.warn("Illegal state - subnet {} does not exist.", subnetId.getValue());
123 DataStoreHelper.submitToDs(rwTx);