Merge "Fix spotbugs issues in common module"
[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
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;
22
23
24 public class OtnDeviceOperationsImpl implements OtnDeviceOperations {
25
26     @Override
27     public String validateClientPort(String circuitPackName, String portName, String capacity,
28             PortGroupRestriction portGroupRestriction) {
29
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))) {
41                             return "valid port";
42                         } else {
43                             return "not a valid port";
44                         }
45                     }
46                 }
47             }
48         }
49      // if the client port is not found at all throw exception
50         return "not valid circuitPackName or portName";
51     }
52
53     private Integer getConfigID(PortBandwidthSharing portBandwidthSharing, String circuitPackName, String portName) {
54         List<PossiblePortConfig> possiblePortConfigList = portBandwidthSharing.getPossiblePortConfig();
55         for (PossiblePortConfig possiblePortConfig: possiblePortConfigList
56              ) {
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();
62                 }
63             }
64         }
65         // throw exception if not able to get config id
66         return null;
67     }
68
69
70     private boolean usageOfOtherPorts(PortBandwidthSharing portBandwidthSharing, Integer configId) {
71         return false;
72     }
73
74     @Override
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();
83
84
85         for (NonBlockingList nonBlockingList: nonBlockingLists) {
86
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()) {
90
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);
97                     }
98                 }
99             }
100         }
101         return networkPortList;
102     }
103
104
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();
112
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);
118             }
119         }
120      // TODO: throw exception if no available network ports
121         return null;
122     }
123
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())) {
134                     return port;
135                 }
136             }
137         }
138      // TODO: throw exception
139         return null;
140     }
141
142
143     //check supported interface types
144
145 }