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.List;
11 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.CircuitPacks;
12 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.pack.Ports;
13 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.OduSwitchingPools;
14 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.odu.switching.pools.NonBlockingList;
15 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev181019.port.group.restriction.grp.PortGroupRestriction;
16 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev181019.port.group.restriction.grp.port.group.restriction.PortBandwidthSharing;
17 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev181019.port.group.restriction.grp.port.group.restriction.port.bandwidth.sharing.PortList;
18 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev181019.port.group.restriction.grp.port.group.restriction.port.bandwidth.sharing.PossiblePortConfig;
19 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;
22 public class OtnDeviceOperationsImpl implements OtnDeviceOperations {
25 public String validateClientPort(String nodeID, String circuitPackName, String portName, String capacity) {
27 PortGroupRestriction portGroupRestriction = null; //should not be initiated as null
28 List<PortBandwidthSharing> portBandwidthSharingList = portGroupRestriction.getPortBandwidthSharing();
29 for (PortBandwidthSharing portBandwidthSharing: portBandwidthSharingList) {
30 List<PortList> portLists = portBandwidthSharing.getPortList();
31 for (PortList portList: portLists) {
32 if (portList.getCircuitPackName().equals(circuitPackName) && portList.getPortName().equals(portName)) {
33 if (!usageOfOtherPorts(portBandwidthSharing,
34 getConfigID(portBandwidthSharing, circuitPackName, portName))) {
38 return "not a valid port";
43 return "not valid circuitPackName or portName"; // if the client port is not found at all throw exception
46 private Integer getConfigID(PortBandwidthSharing portBandwidthSharing, String circuitPackName, String portName) {
47 List<PossiblePortConfig> possiblePortConfigList = portBandwidthSharing.getPossiblePortConfig();
48 for (PossiblePortConfig possiblePortConfig: possiblePortConfigList
50 List<PortIfTypeConfig> portIfTypeConfigList = possiblePortConfig.getPortIfTypeConfig();
51 for (PortIfTypeConfig portIfTypeConfig : portIfTypeConfigList) {
52 if (portIfTypeConfig.getCircuitPackName().equals(circuitPackName)
53 && portIfTypeConfig.getPortName().equals(portName)) {
54 return possiblePortConfig.getConfigId().toJava();
58 return null; // throw exception if not able to get config id
62 private boolean usageOfOtherPorts(PortBandwidthSharing portBandwidthSharing, Integer configId) {
67 public List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org
68 .openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList>
69 getPossibleNetworkPorts(String circuitPackName, String portName) {
70 List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org
71 .openroadm.device.container.org.openroadm.device.odu.switching
72 .pools.non.blocking.list.PortList> networkPortList = null;
74 //need a method to get swtiching pool object from device
76 OduSwitchingPools oduSwitchingPools = null; // should not be initiated as null
77 List<NonBlockingList> nonBlockingLists = oduSwitchingPools.getNonBlockingList();
80 for (NonBlockingList nonBlockingList: nonBlockingLists) {
82 for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
83 .container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList port:
84 nonBlockingList.getPortList()) {
86 if (port.getCircuitPackName().equals(circuitPackName) && port.getPortName().equals(portName)) {
87 org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
88 .container.org.openroadm.device.odu.switching.pools.non.blocking.list
89 .PortList networkPort = checkNetworkPorts(nonBlockingList.getPortList());
90 if (networkPort != null) {
91 networkPortList.add(networkPort);
96 return networkPortList;
100 private org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
101 .container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList
102 checkNetworkPorts(List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org
103 .openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList> portList) {
104 CircuitPacks circuitPacks = null;
106 List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.packs
107 .CircuitPacks> circuitPackList = circuitPacks.getCircuitPacks();
109 for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container
110 .org.openroadm.device.odu.switching.pools.non.blocking.list.PortList port: portList) {
111 for (org.opendaylight.yang.gen.v1.http.org.openroadm.device
112 .rev181019.circuit.packs.CircuitPacks circuitPack: circuitPackList) {
113 return searchNetworkPort(port, circuitPack);
116 return null; // throw exception if no available network ports
119 private org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container
120 .org.openroadm.device.odu.switching.pools.non.blocking.list.PortList
121 searchNetworkPort(org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
122 .container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList port,
123 org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.packs.CircuitPacks circuitPack) {
124 if (port.getCircuitPackName().equals(circuitPack.getCircuitPackName())) {
125 for (Ports prt : circuitPack.getPorts()) {
126 if (port.getPortName().equals(prt.getPortName()) && prt.getPortQual().equals("xpdr-network")) {
131 return null; // throw exception
135 //check supported interface types