2 * Copyright (c) 2013, 2015 IBM Corporation 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
9 package org.opendaylight.neutron.transcriber;
11 import java.util.ArrayList;
12 import java.util.HashSet;
13 import java.util.List;
14 import java.util.Map.Entry;
17 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
18 import org.opendaylight.neutron.spi.INeutronFloatingIPCRUD;
19 import org.opendaylight.neutron.spi.INeutronNetworkCRUD;
20 import org.opendaylight.neutron.spi.INeutronPortCRUD;
21 import org.opendaylight.neutron.spi.INeutronSubnetCRUD;
22 import org.opendaylight.neutron.spi.NeutronCRUDInterfaces;
23 import org.opendaylight.neutron.spi.NeutronFloatingIP;
24 import org.opendaylight.neutron.spi.NeutronSubnet;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.floatingips.attributes.Floatingips;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.floatingips.attributes.floatingips.Floatingip;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.floatingips.attributes.floatingips.FloatingipBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
31 import org.osgi.framework.BundleContext;
32 import org.osgi.framework.ServiceRegistration;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
36 public class NeutronFloatingIPInterface extends AbstractNeutronInterface<Floatingip, Floatingips, NeutronFloatingIP> implements INeutronFloatingIPCRUD {
37 private static final Logger LOGGER = LoggerFactory.getLogger(NeutronFloatingIPInterface.class);
39 NeutronFloatingIPInterface(ProviderContext providerContext) {
40 super(providerContext);
43 // IfNBFloatingIPCRUD interface methods
46 public boolean floatingIPExists(String uuid) {
51 public NeutronFloatingIP getFloatingIP(String uuid) {
56 protected List<Floatingip> getDataObjectList(Floatingips fips) {
57 return fips.getFloatingip();
61 public List<NeutronFloatingIP> getAllFloatingIPs() {
66 public boolean addFloatingIP(NeutronFloatingIP input) {
71 public boolean removeFloatingIP(String uuid) {
76 public boolean updateFloatingIP(String uuid, NeutronFloatingIP delta) {
77 NeutronFloatingIP target = getFloatingIP(uuid);
81 target.setPortUUID(delta.getPortUUID());
82 target.setFixedIPAddress(delta.getFixedIPAddress());
83 return updateMd(target);
87 protected Floatingip toMd(String uuid) {
88 FloatingipBuilder floatingipBuilder = new FloatingipBuilder();
89 floatingipBuilder.setUuid(toUuid(uuid));
90 return floatingipBuilder.build();
94 protected Floatingip toMd(NeutronFloatingIP floatingIp) {
95 FloatingipBuilder floatingipBuilder = new FloatingipBuilder();
96 if (floatingIp.getFixedIPAddress() != null) {
97 floatingipBuilder.setFixedIpAddress(new IpAddress(floatingIp.getFixedIPAddress().toCharArray()));
99 if(floatingIp.getFloatingIPAddress() != null) {
100 floatingipBuilder.setFloatingIpAddress(new IpAddress(floatingIp.getFloatingIPAddress().toCharArray()));
102 if (floatingIp.getFloatingNetworkUUID() != null) {
103 floatingipBuilder.setFloatingNetworkId(toUuid(floatingIp.getFloatingNetworkUUID()));
105 if (floatingIp.getPortUUID() != null) {
106 floatingipBuilder.setPortId(toUuid(floatingIp.getPortUUID()));
108 if (floatingIp.getRouterUUID() != null) {
109 floatingipBuilder.setRouterId(toUuid(floatingIp.getRouterUUID()));
111 if (floatingIp.getStatus() != null) {
112 floatingipBuilder.setStatus(floatingIp.getStatus());
114 if (floatingIp.getTenantID() != null) {
115 floatingipBuilder.setTenantId(toUuid(floatingIp.getTenantID()));
117 if (floatingIp.getID() != null) {
118 floatingipBuilder.setUuid(toUuid(floatingIp.getID()));
121 LOGGER.warn("Attempting to write neutron floating IP without UUID");
123 return floatingipBuilder.build();
126 protected NeutronFloatingIP fromMd(Floatingip fip) {
127 NeutronFloatingIP result = new NeutronFloatingIP();
128 result.setID(fip.getUuid().getValue());
129 if (fip.getFloatingNetworkId() != null) {
130 result.setFloatingNetworkUUID(String.valueOf(fip.getFloatingNetworkId().getValue()));
132 if (fip.getPortId() != null) {
133 result.setPortUUID(String.valueOf(fip.getPortId().getValue()));
135 if (fip.getFixedIpAddress() != null ) {
136 result.setFixedIPAddress(String.valueOf(fip.getFixedIpAddress().getValue()));
138 if (fip.getFloatingIpAddress() != null) {
139 result.setFloatingIPAddress(String.valueOf(fip.getFloatingIpAddress().getValue()));
141 if (fip.getTenantId() != null) {
142 result.setTenantID(fip.getTenantId());
144 if (fip.getRouterId() != null) {
145 result.setRouterUUID(String.valueOf(fip.getRouterId().getValue()));
147 result.setStatus(fip.getStatus());
152 protected InstanceIdentifier<Floatingip> createInstanceIdentifier(
154 return InstanceIdentifier.create(Neutron.class)
155 .child(Floatingips.class)
156 .child(Floatingip.class,item.getKey());
160 protected InstanceIdentifier<Floatingips> createInstanceIdentifier() {
161 return InstanceIdentifier.create(Neutron.class)
162 .child(Floatingips.class);
165 public static void registerNewInterface(BundleContext context,
166 ProviderContext providerContext,
167 List<ServiceRegistration<?>> registrations) {
168 NeutronFloatingIPInterface neutronFloatingIPInterface = new NeutronFloatingIPInterface(providerContext);
169 ServiceRegistration<INeutronFloatingIPCRUD> neutronFloatingIPInterfaceRegistration = context.registerService(INeutronFloatingIPCRUD.class, neutronFloatingIPInterface, null);
170 if (neutronFloatingIPInterfaceRegistration != null) {
171 registrations.add(neutronFloatingIPInterfaceRegistration);