checkstyle: TypeName
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronNetworkInterface.java
1 /*
2  * Copyright (c) 2013, 2015 IBM Corporation 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
9 package org.opendaylight.neutron.transcriber;
10
11 import com.google.common.collect.ImmutableBiMap;
12 import java.util.ArrayList;
13 import java.util.List;
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
15 import org.opendaylight.neutron.spi.INeutronNetworkCRUD;
16 import org.opendaylight.neutron.spi.NeutronNetwork;
17 import org.opendaylight.neutron.spi.NeutronNetworkSegment;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.ext.rev150712.NetworkL3Extension;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.ext.rev150712.NetworkL3ExtensionBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeBase;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeFlat;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeGre;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeVlan;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeVxlan;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.Networks;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.NetworkBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.NetworkKey;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtension;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtensionBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.neutron.networks.network.Segments;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.neutron.networks.network.SegmentsBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.qos.ext.rev160613.QosNetworkExtension;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.qos.ext.rev160613.QosNetworkExtensionBuilder;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
37
38 public final class NeutronNetworkInterface
39         extends AbstractNeutronInterface<Network, Networks, NetworkKey, NeutronNetwork>
40         implements INeutronNetworkCRUD {
41     private static final Logger LOGGER = LoggerFactory.getLogger(NeutronNetworkInterface.class);
42
43     private static final ImmutableBiMap<Class<? extends NetworkTypeBase>,
44             String> NETWORK_MAP = new ImmutableBiMap.Builder<Class<? extends NetworkTypeBase>, String>()
45                     .put(NetworkTypeFlat.class, "flat").put(NetworkTypeGre.class, "gre")
46                     .put(NetworkTypeVlan.class, "vlan").put(NetworkTypeVxlan.class, "vxlan").build();
47
48     NeutronNetworkInterface(DataBroker db) {
49         super(NetworkBuilder.class, db);
50     }
51
52     // IfNBNetworkCRUD methods
53     @Override
54     protected List<Network> getDataObjectList(Networks networks) {
55         return networks.getNetwork();
56     }
57
58     protected NeutronNetwork fromMd(Network network) {
59         final NeutronNetwork result = new NeutronNetwork();
60         result.initDefaults();
61         fromMdAdminAttributes(network, result);
62         result.setShared(network.isShared());
63
64         final NetworkL3Extension l3Extension = network.getAugmentation(NetworkL3Extension.class);
65         result.setRouterExternal(l3Extension.isExternal());
66
67         final NetworkProviderExtension providerExtension = network.getAugmentation(NetworkProviderExtension.class);
68         result.setProviderPhysicalNetwork(providerExtension.getPhysicalNetwork());
69         result.setProviderSegmentationID(providerExtension.getSegmentationId());
70         result.setProviderNetworkType(NETWORK_MAP.get(providerExtension.getNetworkType()));
71         final List<NeutronNetworkSegment> segments = new ArrayList<NeutronNetworkSegment>();
72         if (providerExtension.getSegments() != null) {
73             for (final Segments segment : providerExtension.getSegments()) {
74                 final NeutronNetworkSegment neutronSegment = new NeutronNetworkSegment();
75                 neutronSegment.setProviderPhysicalNetwork(segment.getPhysicalNetwork());
76                 neutronSegment.setProviderSegmentationID(segment.getSegmentationId());
77                 neutronSegment.setProviderNetworkType(NETWORK_MAP.get(segment.getNetworkType()));
78                 segments.add(neutronSegment);
79             }
80         }
81         final QosNetworkExtension qos = network.getAugmentation(QosNetworkExtension.class);
82         if (qos != null && qos.getQosPolicyId() != null) {
83             result.setQosPolicyId(qos.getQosPolicyId().getValue());
84         }
85         result.setSegments(segments);
86         return result;
87     }
88
89     private void fillExtensions(NetworkBuilder networkBuilder, NeutronNetwork network) {
90         final NetworkL3ExtensionBuilder l3ExtensionBuilder = new NetworkL3ExtensionBuilder();
91         if (network.getRouterExternal() != null) {
92             l3ExtensionBuilder.setExternal(network.getRouterExternal());
93         }
94
95         final NetworkProviderExtensionBuilder providerExtensionBuilder = new NetworkProviderExtensionBuilder();
96         if (network.getProviderPhysicalNetwork() != null) {
97             providerExtensionBuilder.setPhysicalNetwork(network.getProviderPhysicalNetwork());
98         }
99         if (network.getProviderSegmentationID() != null) {
100             providerExtensionBuilder.setSegmentationId(network.getProviderSegmentationID());
101         }
102         if (network.getProviderNetworkType() != null) {
103             final ImmutableBiMap<String, Class<? extends NetworkTypeBase>> mapper = NETWORK_MAP.inverse();
104             providerExtensionBuilder
105                     .setNetworkType((Class<? extends NetworkTypeBase>) mapper.get(network.getProviderNetworkType()));
106         }
107         if (network.getSegments() != null) {
108             final List<Segments> segments = new ArrayList<Segments>();
109             long count = 0;
110             for (final NeutronNetworkSegment segment : network.getSegments()) {
111                 count++;
112                 final SegmentsBuilder segmentsBuilder = new SegmentsBuilder();
113                 if (segment.getProviderPhysicalNetwork() != null) {
114                     segmentsBuilder.setPhysicalNetwork(segment.getProviderPhysicalNetwork());
115                 }
116                 if (segment.getProviderSegmentationID() != null) {
117                     segmentsBuilder.setSegmentationId(segment.getProviderSegmentationID());
118                 }
119                 if (segment.getProviderNetworkType() != null) {
120                     final ImmutableBiMap<String, Class<? extends NetworkTypeBase>> mapper = NETWORK_MAP.inverse();
121                     segmentsBuilder.setNetworkType(
122                             (Class<? extends NetworkTypeBase>) mapper.get(segment.getProviderNetworkType()));
123                 }
124                 segmentsBuilder.setSegmentationIndex(Long.valueOf(count));
125                 segments.add(segmentsBuilder.build());
126             }
127             providerExtensionBuilder.setSegments(segments);
128         }
129         if (network.getProviderSegmentationID() != null) {
130             providerExtensionBuilder.setSegmentationId(network.getProviderSegmentationID());
131         }
132         if (network.getQosPolicyId() != null) {
133             final QosNetworkExtensionBuilder qosExtensionBuilder = new QosNetworkExtensionBuilder();
134             qosExtensionBuilder.setQosPolicyId(toUuid(network.getQosPolicyId()));
135             networkBuilder.addAugmentation(QosNetworkExtension.class, qosExtensionBuilder.build());
136         }
137         networkBuilder.addAugmentation(NetworkL3Extension.class, l3ExtensionBuilder.build());
138         networkBuilder.addAugmentation(NetworkProviderExtension.class, providerExtensionBuilder.build());
139     }
140
141     protected Network toMd(NeutronNetwork network) {
142         final NetworkBuilder networkBuilder = new NetworkBuilder();
143         toMdAdminAttributes(network, networkBuilder);
144         fillExtensions(networkBuilder, network);
145
146         if (network.getShared() != null) {
147             networkBuilder.setShared(network.getShared());
148         }
149         return networkBuilder.build();
150     }
151 }