2 * Copyright © 2019 AT&T 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.transportpce.renderer.provisiondevice.otn;
10 import java.util.ArrayList;
11 import java.util.Collection;
12 import java.util.List;
13 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.CircuitPacks;
14 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.pack.Ports;
15 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.OduSwitchingPools;
16 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.odu.switching.pools.NonBlockingList;
17 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev181019.port.group.restriction.grp.PortGroupRestriction;
18 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev181019.port.group.restriction.grp.port.group.restriction.PortBandwidthSharing;
19 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev181019.port.group.restriction.grp.port.group.restriction.port.bandwidth.sharing.PortList;
20 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev181019.port.group.restriction.grp.port.group.restriction.port.bandwidth.sharing.PossiblePortConfig;
21 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev181019.port.group.restriction.grp.port.group.restriction.port.bandwidth.sharing.possible.port.config.PortIfTypeConfig;
24 public class OtnDeviceOperationsImpl implements OtnDeviceOperations {
27 public String validateClientPort(String circuitPackName, String portName, String capacity,
28 PortGroupRestriction portGroupRestriction) {
30 Collection<PortBandwidthSharing> portBandwidthSharingList = portGroupRestriction
31 .nonnullPortBandwidthSharing().values();
32 if (portGroupRestriction.getPortBandwidthSharing() != null) {
33 for (PortBandwidthSharing portBandwidthSharing : portBandwidthSharingList) {
34 Collection<PortList> portLists = portBandwidthSharing.nonnullPortList().values();
35 for (PortList portList : portLists) {
36 if (portList.getCircuitPackName().equals(circuitPackName)
37 && portList.getPortName().equals(portName)) {
38 if (!usageOfOtherPorts(portBandwidthSharing,
39 getConfigID(portBandwidthSharing,
40 circuitPackName, portName))) {
43 return "not a valid port";
49 // if the client port is not found at all throw exception
50 return "not valid circuitPackName or portName";
53 private Integer getConfigID(PortBandwidthSharing portBandwidthSharing, String circuitPackName, String portName) {
54 Collection<PossiblePortConfig> possiblePortConfigList = portBandwidthSharing
55 .nonnullPossiblePortConfig().values();
56 for (PossiblePortConfig possiblePortConfig: possiblePortConfigList
58 Collection<PortIfTypeConfig> portIfTypeConfigList = possiblePortConfig.nonnullPortIfTypeConfig().values();
59 for (PortIfTypeConfig portIfTypeConfig : portIfTypeConfigList) {
60 if (portIfTypeConfig.getCircuitPackName().equals(circuitPackName)
61 && portIfTypeConfig.getPortName().equals(portName)) {
62 return possiblePortConfig.getConfigId().toJava();
66 // throw exception if not able to get config id
71 private boolean usageOfOtherPorts(PortBandwidthSharing portBandwidthSharing, Integer configId) {
76 public List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org
77 .openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList>
78 getPossibleNetworkPorts(String circuitPackName, String portName, OduSwitchingPools oduSwitchingPools,
79 CircuitPacks circuitPacks) {
80 List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org
81 .openroadm.device.container.org.openroadm.device.odu.switching
82 .pools.non.blocking.list.PortList> networkPortList = new ArrayList<>();
83 Collection<NonBlockingList> nonBlockingLists = oduSwitchingPools.nonnullNonBlockingList().values();
86 for (NonBlockingList nonBlockingList: nonBlockingLists) {
88 for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
89 .container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList port:
90 nonBlockingList.nonnullPortList().values()) {
92 if (port.getCircuitPackName().equals(circuitPackName) && port.getPortName().equals(portName)) {
93 org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
94 .container.org.openroadm.device.odu.switching.pools.non.blocking.list
95 .PortList networkPort = checkNetworkPorts(nonBlockingList
96 .nonnullPortList().values(), circuitPacks);
97 if (networkPort != null) {
98 networkPortList.add(networkPort);
103 return networkPortList;
107 private org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
108 .container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList
109 checkNetworkPorts(Collection<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org
110 .openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList> portList,
111 CircuitPacks circuitPacks) {
112 Collection<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.packs
113 .CircuitPacks> circuitPackList = circuitPacks.nonnullCircuitPacks().values();
115 for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container
116 .org.openroadm.device.odu.switching.pools.non.blocking.list.PortList port: portList) {
117 for (org.opendaylight.yang.gen.v1.http.org.openroadm.device
118 .rev181019.circuit.packs.CircuitPacks circuitPack: circuitPackList) {
119 return searchNetworkPort(port, circuitPack);
122 // TODO: throw exception if no available network ports
126 private org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container
127 .org.openroadm.device.odu.switching.pools.non.blocking.list.PortList
128 searchNetworkPort(org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
129 .container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList port,
130 org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.packs.CircuitPacks circuitPack) {
131 if (port.getCircuitPackName().equals(circuitPack.getCircuitPackName())) {
132 for (Ports prt : circuitPack.nonnullPorts().values()) {
133 if (prt.getPortQual() != null
134 && port.getPortName().equals(prt.getPortName())
135 && "xpdr-network".equals(prt.getPortQual().getName())) {
140 // TODO: throw exception
145 //check supported interface types