Bump MRI upstreams
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronTrunkInterface.java
1 /*
2  * Copyright (c) 2017 Ericsson India Global Services Pvt Ltd. 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 package org.opendaylight.neutron.transcriber;
9
10 import com.google.common.collect.ImmutableBiMap;
11 import java.util.ArrayList;
12 import java.util.Collection;
13 import java.util.List;
14 import javax.inject.Inject;
15 import javax.inject.Singleton;
16 import org.apache.aries.blueprint.annotation.service.Service;
17 import org.opendaylight.mdsal.binding.api.DataBroker;
18 import org.opendaylight.neutron.spi.INeutronTrunkCRUD;
19 import org.opendaylight.neutron.spi.NeutronTrunk;
20 import org.opendaylight.neutron.spi.NeutronTrunkSubPort;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeBase;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeFlat;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeGre;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeVlan;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeVxlan;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.trunks.rev170118.trunk.attributes.SubPorts;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.trunks.rev170118.trunk.attributes.SubPortsBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.trunks.rev170118.trunks.attributes.Trunks;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.trunks.rev170118.trunks.attributes.trunks.Trunk;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.trunks.rev170118.trunks.attributes.trunks.TrunkBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.trunks.rev170118.trunks.attributes.trunks.TrunkKey;
32 import org.opendaylight.yangtools.yang.binding.util.BindingMap;
33 import org.opendaylight.yangtools.yang.common.Uint32;
34
35 @Singleton
36 @Service(classes = INeutronTrunkCRUD.class)
37 public final class NeutronTrunkInterface extends AbstractNeutronInterface<Trunk, Trunks, TrunkKey, NeutronTrunk>
38         implements INeutronTrunkCRUD {
39
40     private static final ImmutableBiMap<Class<? extends NetworkTypeBase>, String> NETWORK_TYPE_MAP =
41             new ImmutableBiMap.Builder<Class<? extends NetworkTypeBase>, String>()
42             .put(NetworkTypeFlat.class, "flat").put(NetworkTypeGre.class, "gre")
43             .put(NetworkTypeVlan.class, "vlan").put(NetworkTypeVxlan.class, "vxlan").build();
44
45     @Inject
46     public NeutronTrunkInterface(DataBroker db) {
47         super(TrunkBuilder.class, db);
48     }
49
50     @Override
51     protected Collection<Trunk> getDataObjectList(Trunks trunks) {
52         return trunks.nonnullTrunk().values();
53     }
54
55     @Override
56     protected NeutronTrunk fromMd(Trunk trunk) {
57         final NeutronTrunk result = new NeutronTrunk();
58         fromMdBaseAttributes(trunk, result);
59         fromMdAdminAttributes(trunk, result);
60         if (trunk.getPortId() != null) {
61             result.setPortId(trunk.getPortId().getValue());
62         }
63         if (trunk.getSubPorts() != null) {
64             final List<NeutronTrunkSubPort> subPortList = new ArrayList<>();
65             for (final SubPorts subPort : trunk.getSubPorts().values()) {
66                 NeutronTrunkSubPort trunkSubPort = new NeutronTrunkSubPort();
67                 trunkSubPort.setPortId(subPort.getPortId().getValue());
68                 trunkSubPort.setSegmentationType(NETWORK_TYPE_MAP.get(subPort.getSegmentationType()));
69                 trunkSubPort.setSegmentationId(subPort.getSegmentationId().toString());
70                 subPortList.add(trunkSubPort);
71             }
72             result.setSubPorts(subPortList);
73         }
74         return result;
75     }
76
77     @Override
78     protected Trunk toMd(NeutronTrunk trunk) {
79         final TrunkBuilder trunkBuilder = new TrunkBuilder();
80         toMdBaseAttributes(trunk, trunkBuilder);
81         toMdAdminAttributes(trunk, trunkBuilder);
82         if (trunk.getPortId() != null) {
83             trunkBuilder.setPortId(toUuid(trunk.getPortId()));
84         }
85         if (trunk.getSubPorts() != null) {
86             final ImmutableBiMap<String, Class<? extends NetworkTypeBase>> mapper = NETWORK_TYPE_MAP.inverse();
87             trunkBuilder.setSubPorts(trunk.getSubPorts().stream()
88                 .map(subPort -> new SubPortsBuilder()
89                     .setPortId(toUuid(subPort.getPortId()))
90                     .setSegmentationType(mapper.get(subPort.getSegmentationType()))
91                     .setSegmentationId(Uint32.valueOf(subPort.getSegmentationId()))
92                     .build())
93                 .collect(BindingMap.toOrderedMap()));
94         }
95         return trunkBuilder.build();
96     }
97 }