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;
12 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.CircuitPacks;
13 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.pack.Ports;
14 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.OduSwitchingPools;
15 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.odu.switching.pools.NonBlockingList;
16 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev181019.port.group.restriction.grp.PortGroupRestriction;
17 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev181019.port.group.restriction.grp.port.group.restriction.PortBandwidthSharing;
18 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev181019.port.group.restriction.grp.port.group.restriction.port.bandwidth.sharing.PortList;
19 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev181019.port.group.restriction.grp.port.group.restriction.port.bandwidth.sharing.PossiblePortConfig;
20 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;
23 public class OtnDeviceOperationsImpl implements OtnDeviceOperations {
26 public String validateClientPort(String circuitPackName, String portName, String capacity,
27 PortGroupRestriction portGroupRestriction) {
29 List<PortBandwidthSharing> portBandwidthSharingList = portGroupRestriction
30 .getPortBandwidthSharing();
31 if (portGroupRestriction.getPortBandwidthSharing() != null) {
32 for (PortBandwidthSharing portBandwidthSharing : portBandwidthSharingList) {
33 List<PortList> portLists = portBandwidthSharing.getPortList();
34 for (PortList portList : portLists) {
35 if (portList.getCircuitPackName().equals(circuitPackName)
36 && portList.getPortName().equals(portName)) {
37 if (!usageOfOtherPorts(portBandwidthSharing,
38 getConfigID(portBandwidthSharing,
39 circuitPackName, portName))) {
42 return "not a valid port";
48 // if the client port is not found at all throw exception
49 return "not valid circuitPackName or portName";
52 private Integer getConfigID(PortBandwidthSharing portBandwidthSharing, String circuitPackName, String portName) {
53 List<PossiblePortConfig> possiblePortConfigList = portBandwidthSharing.getPossiblePortConfig();
54 for (PossiblePortConfig possiblePortConfig: possiblePortConfigList
56 List<PortIfTypeConfig> portIfTypeConfigList = possiblePortConfig.getPortIfTypeConfig();
57 for (PortIfTypeConfig portIfTypeConfig : portIfTypeConfigList) {
58 if (portIfTypeConfig.getCircuitPackName().equals(circuitPackName)
59 && portIfTypeConfig.getPortName().equals(portName)) {
60 return possiblePortConfig.getConfigId().toJava();
64 // throw exception if not able to get config id
69 private boolean usageOfOtherPorts(PortBandwidthSharing portBandwidthSharing, Integer configId) {
74 public List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org
75 .openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList>
76 getPossibleNetworkPorts(String circuitPackName, String portName, OduSwitchingPools oduSwitchingPools,
77 CircuitPacks circuitPacks) {
78 List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org
79 .openroadm.device.container.org.openroadm.device.odu.switching
80 .pools.non.blocking.list.PortList> networkPortList = new ArrayList<>();
81 List<NonBlockingList> nonBlockingLists = oduSwitchingPools.getNonBlockingList();
84 for (NonBlockingList nonBlockingList: nonBlockingLists) {
86 for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
87 .container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList port:
88 nonBlockingList.getPortList()) {
90 if (port.getCircuitPackName().equals(circuitPackName) && port.getPortName().equals(portName)) {
91 org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
92 .container.org.openroadm.device.odu.switching.pools.non.blocking.list
93 .PortList networkPort = checkNetworkPorts(nonBlockingList.getPortList(), circuitPacks);
94 if (networkPort != null) {
95 networkPortList.add(networkPort);
100 return networkPortList;
104 private org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
105 .container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList
106 checkNetworkPorts(List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org
107 .openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList> portList,
108 CircuitPacks circuitPacks) {
109 List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.packs
110 .CircuitPacks> circuitPackList = circuitPacks.getCircuitPacks();
112 for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container
113 .org.openroadm.device.odu.switching.pools.non.blocking.list.PortList port: portList) {
114 for (org.opendaylight.yang.gen.v1.http.org.openroadm.device
115 .rev181019.circuit.packs.CircuitPacks circuitPack: circuitPackList) {
116 return searchNetworkPort(port, circuitPack);
119 // TODO: throw exception if no available network ports
123 private org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container
124 .org.openroadm.device.odu.switching.pools.non.blocking.list.PortList
125 searchNetworkPort(org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
126 .container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList port,
127 org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.packs.CircuitPacks circuitPack) {
128 if (port.getCircuitPackName().equals(circuitPack.getCircuitPackName())) {
129 for (Ports prt : circuitPack.getPorts()) {
130 if (prt.getPortQual() != null
131 && port.getPortName().equals(prt.getPortName())
132 && "xpdr-network".equals(prt.getPortQual().getName())) {
137 // TODO: throw exception
142 //check supported interface types