2 * Copyright IBM Corporation, 2013. 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;
16 import java.util.concurrent.ConcurrentHashMap;
17 import java.util.concurrent.ConcurrentMap;
19 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
20 import org.opendaylight.neutron.spi.INeutronNetworkCRUD;
21 import org.opendaylight.neutron.spi.NeutronNetwork;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev141002.networks.attributes.Networks;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev141002.networks.attributes.networks.Network;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev141002.networks.attributes.networks.NetworkBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
27 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
31 public class NeutronNetworkInterface extends AbstractNeutronInterface<Network,NeutronNetwork> implements INeutronNetworkCRUD {
32 private static final Logger LOGGER = LoggerFactory.getLogger(NeutronNetworkInterface.class);
33 private ConcurrentMap<String, NeutronNetwork> networkDB = new ConcurrentHashMap<String, NeutronNetwork>();
35 NeutronNetworkInterface(ProviderContext providerContext) {
36 super(providerContext);
39 // IfNBNetworkCRUD methods
42 public boolean networkExists(String uuid) {
43 return networkDB.containsKey(uuid);
47 public NeutronNetwork getNetwork(String uuid) {
48 if (!networkExists(uuid)) {
51 return networkDB.get(uuid);
55 public List<NeutronNetwork> getAllNetworks() {
56 Set<NeutronNetwork> allNetworks = new HashSet<NeutronNetwork>();
57 for (Entry<String, NeutronNetwork> entry : networkDB.entrySet()) {
58 NeutronNetwork network = entry.getValue();
59 allNetworks.add(network);
61 LOGGER.debug("Exiting getAllNetworks, Found {} OpenStackNetworks", allNetworks.size());
62 List<NeutronNetwork> ans = new ArrayList<NeutronNetwork>();
63 ans.addAll(allNetworks);
68 public boolean addNetwork(NeutronNetwork input) {
69 if (networkExists(input.getID())) {
72 networkDB.putIfAbsent(input.getID(), input);
74 //TODO: add code to find INeutronNetworkAware services and call newtorkCreated on them
79 public boolean removeNetwork(String uuid) {
80 if (!networkExists(uuid)) {
83 networkDB.remove(uuid);
85 //TODO: add code to find INeutronNetworkAware services and call newtorkDeleted on them
90 public boolean updateNetwork(String uuid, NeutronNetwork delta) {
91 if (!networkExists(uuid)) {
94 /* note: because what we get is *not* a delta but (at this point) the updated
95 * object, this is much simpler - just replace the value and update the mdsal
97 networkDB.replace(uuid, delta);
103 public boolean networkInUse(String netUUID) {
104 if (!networkExists(netUUID)) {
107 NeutronNetwork target = networkDB.get(netUUID);
108 if (target.getPortsOnNetwork().size() > 0) {
114 protected Network toMd(NeutronNetwork network) {
115 NetworkBuilder networkBuilder = new NetworkBuilder();
116 networkBuilder.setAdminStateUp(network.getAdminStateUp());
117 if (network.getNetworkName() != null) {
118 networkBuilder.setName(network.getNetworkName());
120 if (network.getShared() != null) {
121 networkBuilder.setShared(network.getShared());
123 if (network.getStatus() != null) {
124 networkBuilder.setStatus(network.getStatus());
126 if (network.getSubnets() != null) {
127 List<Uuid> subnets = new ArrayList<Uuid>();
128 for( String subnet : network.getSubnets()) {
129 subnets.add(toUuid(subnet));
131 networkBuilder.setSubnets(subnets);
133 if (network.getTenantID() != null) {
134 networkBuilder.setTenantId(toUuid(network.getTenantID()));
136 if (network.getNetworkUUID() != null) {
137 networkBuilder.setUuid(toUuid(network.getNetworkUUID()));
139 LOGGER.warn("Attempting to write neutron network without UUID");
141 return networkBuilder.build();
144 protected Network toMd(String uuid) {
145 NetworkBuilder networkBuilder = new NetworkBuilder();
146 networkBuilder.setUuid(toUuid(uuid));
147 return networkBuilder.build();
151 protected InstanceIdentifier<Network> createInstanceIdentifier(Network network) {
152 return InstanceIdentifier.create(Neutron.class)
153 .child(Networks.class)
154 .child(Network.class,network.getKey());