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.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 List<PortBandwidthSharing> portBandwidthSharingList = portGroupRestriction
31 .getPortBandwidthSharing();
32 if (portGroupRestriction.getPortBandwidthSharing() != null) {
33 for (PortBandwidthSharing portBandwidthSharing : portBandwidthSharingList) {
34 List<PortList> portLists = portBandwidthSharing.getPortList();
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 List<PossiblePortConfig> possiblePortConfigList = portBandwidthSharing.getPossiblePortConfig();
55 for (PossiblePortConfig possiblePortConfig: possiblePortConfigList
57 List<PortIfTypeConfig> portIfTypeConfigList = possiblePortConfig.getPortIfTypeConfig();
58 for (PortIfTypeConfig portIfTypeConfig : portIfTypeConfigList) {
59 if (portIfTypeConfig.getCircuitPackName().equals(circuitPackName)
60 && portIfTypeConfig.getPortName().equals(portName)) {
61 return possiblePortConfig.getConfigId().toJava();
65 // throw exception if not able to get config id
70 private boolean usageOfOtherPorts(PortBandwidthSharing portBandwidthSharing, Integer configId) {
75 public List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org
76 .openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList>
77 getPossibleNetworkPorts(String circuitPackName, String portName, OduSwitchingPools oduSwitchingPools,
78 CircuitPacks circuitPacks) {
79 List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org
80 .openroadm.device.container.org.openroadm.device.odu.switching
81 .pools.non.blocking.list.PortList> networkPortList = new ArrayList<>();
82 List<NonBlockingList> nonBlockingLists = oduSwitchingPools.getNonBlockingList();
85 for (NonBlockingList nonBlockingList: nonBlockingLists) {
87 for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
88 .container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList port:
89 nonBlockingList.getPortList()) {
91 if (port.getCircuitPackName().equals(circuitPackName) && port.getPortName().equals(portName)) {
92 org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
93 .container.org.openroadm.device.odu.switching.pools.non.blocking.list
94 .PortList networkPort = checkNetworkPorts(nonBlockingList.getPortList(), circuitPacks);
95 if (networkPort != null) {
96 networkPortList.add(networkPort);
101 return networkPortList;
105 private org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
106 .container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList
107 checkNetworkPorts(List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org
108 .openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList> portList,
109 CircuitPacks circuitPacks) {
110 List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.packs
111 .CircuitPacks> circuitPackList = circuitPacks.getCircuitPacks();
113 for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container
114 .org.openroadm.device.odu.switching.pools.non.blocking.list.PortList port: portList) {
115 for (org.opendaylight.yang.gen.v1.http.org.openroadm.device
116 .rev181019.circuit.packs.CircuitPacks circuitPack: circuitPackList) {
117 return searchNetworkPort(port, circuitPack);
120 // TODO: throw exception if no available network ports
124 private org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container
125 .org.openroadm.device.odu.switching.pools.non.blocking.list.PortList
126 searchNetworkPort(org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
127 .container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList port,
128 org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.packs.CircuitPacks circuitPack) {
129 if (port.getCircuitPackName().equals(circuitPack.getCircuitPackName())) {
130 for (Ports prt : circuitPack.getPorts()) {
131 if (prt.getPortQual() != null
132 && port.getPortName().equals(prt.getPortName())
133 && "xpdr-network".equals(prt.getPortQual().getName())) {
138 // TODO: throw exception
143 //check supported interface types