Code cleanup: use collection interfaces in declarations
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronNetworkInterface.java
1 /*
2  * Copyright IBM Corporation, 2013.  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
9 package org.opendaylight.neutron.transcriber;
10
11 import java.util.ArrayList;
12 import java.util.HashSet;
13 import java.util.List;
14 import java.util.Map.Entry;
15 import java.util.Set;
16 import java.util.concurrent.ConcurrentHashMap;
17 import java.util.concurrent.ConcurrentMap;
18
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;
30
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>();
34
35     NeutronNetworkInterface(ProviderContext providerContext) {
36         super(providerContext);
37     }
38
39     // IfNBNetworkCRUD methods
40
41     @Override
42     public boolean networkExists(String uuid) {
43         return networkDB.containsKey(uuid);
44     }
45
46     @Override
47     public NeutronNetwork getNetwork(String uuid) {
48         if (!networkExists(uuid)) {
49             return null;
50         }
51         return networkDB.get(uuid);
52     }
53
54     @Override
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);
60         }
61         LOGGER.debug("Exiting getAllNetworks, Found {} OpenStackNetworks", allNetworks.size());
62         List<NeutronNetwork> ans = new ArrayList<NeutronNetwork>();
63         ans.addAll(allNetworks);
64         return ans;
65     }
66
67     @Override
68     public boolean addNetwork(NeutronNetwork input) {
69         if (networkExists(input.getID())) {
70             return false;
71         }
72         networkDB.putIfAbsent(input.getID(), input);
73         addMd(input);
74       //TODO: add code to find INeutronNetworkAware services and call newtorkCreated on them
75         return true;
76     }
77
78     @Override
79     public boolean removeNetwork(String uuid) {
80         if (!networkExists(uuid)) {
81             return false;
82         }
83         networkDB.remove(uuid);
84         removeMd(toMd(uuid));
85       //TODO: add code to find INeutronNetworkAware services and call newtorkDeleted on them
86         return true;
87     }
88
89     @Override
90     public boolean updateNetwork(String uuid, NeutronNetwork delta) {
91         if (!networkExists(uuid)) {
92             return false;
93         }
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
96  * with it */
97         networkDB.replace(uuid, delta);
98         updateMd(delta);
99         return true;
100     }
101
102     @Override
103     public boolean networkInUse(String netUUID) {
104         if (!networkExists(netUUID)) {
105             return true;
106         }
107         NeutronNetwork target = networkDB.get(netUUID);
108         if (target.getPortsOnNetwork().size() > 0) {
109             return true;
110         }
111         return false;
112     }
113
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());
119         }
120         if (network.getShared() != null) {
121             networkBuilder.setShared(network.getShared());
122         }
123         if (network.getStatus() != null) {
124             networkBuilder.setStatus(network.getStatus());
125         }
126         if (network.getSubnets() != null) {
127             List<Uuid> subnets = new ArrayList<Uuid>();
128             for( String subnet : network.getSubnets()) {
129                 subnets.add(toUuid(subnet));
130             }
131             networkBuilder.setSubnets(subnets);
132         }
133         if (network.getTenantID() != null) {
134             networkBuilder.setTenantId(toUuid(network.getTenantID()));
135         }
136         if (network.getNetworkUUID() != null) {
137             networkBuilder.setUuid(toUuid(network.getNetworkUUID()));
138         } else {
139             LOGGER.warn("Attempting to write neutron network without UUID");
140         }
141         return networkBuilder.build();
142     }
143
144     protected Network toMd(String uuid) {
145         NetworkBuilder networkBuilder = new NetworkBuilder();
146         networkBuilder.setUuid(toUuid(uuid));
147         return networkBuilder.build();
148     }
149
150     @Override
151     protected InstanceIdentifier<Network> createInstanceIdentifier(Network network) {
152         return InstanceIdentifier.create(Neutron.class)
153                 .child(Networks.class)
154                 .child(Network.class,network.getKey());
155     }
156 }