1f369724215f2cc879cb680bfa18ecb14bbf6a37
[transportpce.git] / renderer / src / main / java / org / opendaylight / transportpce / renderer / provisiondevice / otn / OtnDeviceOperationsImpl.java
1 /*
2  * Copyright © 2019 AT&T and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.transportpce.renderer.provisiondevice.otn;
9
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;
21
22
23 public class OtnDeviceOperationsImpl implements OtnDeviceOperations {
24
25     @Override
26     public String validateClientPort(String circuitPackName, String portName, String capacity,
27             PortGroupRestriction portGroupRestriction) {
28
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))) {
40                             return "valid port";
41                         } else {
42                             return "not a valid port";
43                         }
44                     }
45                 }
46             }
47         }
48      // if the client port is not found at all throw exception
49         return "not valid circuitPackName or portName";
50     }
51
52     private Integer getConfigID(PortBandwidthSharing portBandwidthSharing, String circuitPackName, String portName) {
53         List<PossiblePortConfig> possiblePortConfigList = portBandwidthSharing.getPossiblePortConfig();
54         for (PossiblePortConfig possiblePortConfig: possiblePortConfigList
55              ) {
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();
61                 }
62             }
63         }
64         // throw exception if not able to get config id
65         return null;
66     }
67
68
69     private boolean usageOfOtherPorts(PortBandwidthSharing portBandwidthSharing, Integer configId) {
70         return false;
71     }
72
73     @Override
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();
82
83
84         for (NonBlockingList nonBlockingList: nonBlockingLists) {
85
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()) {
89
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);
96                     }
97                 }
98             }
99         }
100         return networkPortList;
101     }
102
103
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();
111
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);
117             }
118         }
119      // TODO: throw exception if no available network ports
120         return null;
121     }
122
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())) {
133                     return port;
134                 }
135             }
136         }
137      // TODO: throw exception
138         return null;
139     }
140
141
142     //check supported interface types
143
144 }