2 * Copyright (c) 2017 Ericsson India Global Services Pvt Ltd. 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
8 package org.opendaylight.neutron.transcriber;
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;
36 @Service(classes = INeutronTrunkCRUD.class)
37 public final class NeutronTrunkInterface extends AbstractNeutronInterface<Trunk, Trunks, TrunkKey, NeutronTrunk>
38 implements INeutronTrunkCRUD {
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();
46 public NeutronTrunkInterface(DataBroker db) {
47 super(TrunkBuilder.class, db);
51 protected Collection<Trunk> getDataObjectList(Trunks trunks) {
52 return trunks.nonnullTrunk().values();
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());
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);
72 result.setSubPorts(subPortList);
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()));
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()))
93 .collect(BindingMap.toOrderedMap()));
95 return trunkBuilder.build();