Migrate renderer module to Aluminium
[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.Collection;
12 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;
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         Collection<PortBandwidthSharing> portBandwidthSharingList = portGroupRestriction
31                 .nonnullPortBandwidthSharing().values();
32         if (portGroupRestriction.getPortBandwidthSharing() != null) {
33             for (PortBandwidthSharing portBandwidthSharing : portBandwidthSharingList) {
34                 Collection<PortList> portLists = portBandwidthSharing.nonnullPortList().values();
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         Collection<PossiblePortConfig> possiblePortConfigList = portBandwidthSharing
55                 .nonnullPossiblePortConfig().values();
56         for (PossiblePortConfig possiblePortConfig: possiblePortConfigList
57              ) {
58             Collection<PortIfTypeConfig> portIfTypeConfigList = possiblePortConfig.nonnullPortIfTypeConfig().values();
59             for (PortIfTypeConfig portIfTypeConfig : portIfTypeConfigList) {
60                 if (portIfTypeConfig.getCircuitPackName().equals(circuitPackName)
61                         && portIfTypeConfig.getPortName().equals(portName)) {
62                     return possiblePortConfig.getConfigId().toJava();
63                 }
64             }
65         }
66         // throw exception if not able to get config id
67         return null;
68     }
69
70
71     private boolean usageOfOtherPorts(PortBandwidthSharing portBandwidthSharing, Integer configId) {
72         return false;
73     }
74
75     @Override
76     public List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org
77                 .openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList>
78                 getPossibleNetworkPorts(String circuitPackName, String portName, OduSwitchingPools oduSwitchingPools,
79                         CircuitPacks circuitPacks) {
80         List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org
81                 .openroadm.device.container.org.openroadm.device.odu.switching
82                 .pools.non.blocking.list.PortList> networkPortList = new ArrayList<>();
83         Collection<NonBlockingList> nonBlockingLists = oduSwitchingPools.nonnullNonBlockingList().values();
84
85
86         for (NonBlockingList nonBlockingList: nonBlockingLists) {
87
88             for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
89                     .container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList port:
90                  nonBlockingList.nonnullPortList().values()) {
91
92                 if (port.getCircuitPackName().equals(circuitPackName) && port.getPortName().equals(portName)) {
93                     org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
94                             .container.org.openroadm.device.odu.switching.pools.non.blocking.list
95                             .PortList networkPort = checkNetworkPorts(nonBlockingList
96                                     .nonnullPortList().values(), circuitPacks);
97                     if (networkPort != null) {
98                         networkPortList.add(networkPort);
99                     }
100                 }
101             }
102         }
103         return networkPortList;
104     }
105
106
107     private org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
108             .container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList
109         checkNetworkPorts(Collection<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org
110             .openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList> portList,
111                 CircuitPacks circuitPacks) {
112         Collection<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.packs
113             .CircuitPacks> circuitPackList = circuitPacks.nonnullCircuitPacks().values();
114
115         for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container
116             .org.openroadm.device.odu.switching.pools.non.blocking.list.PortList port: portList) {
117             for (org.opendaylight.yang.gen.v1.http.org.openroadm.device
118                 .rev181019.circuit.packs.CircuitPacks circuitPack: circuitPackList) {
119                 return searchNetworkPort(port, circuitPack);
120             }
121         }
122      // TODO: throw exception if no available network ports
123         return null;
124     }
125
126     private org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container
127         .org.openroadm.device.odu.switching.pools.non.blocking.list.PortList
128         searchNetworkPort(org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
129             .container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList port,
130             org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.packs.CircuitPacks circuitPack) {
131         if (port.getCircuitPackName().equals(circuitPack.getCircuitPackName())) {
132             for (Ports prt : circuitPack.nonnullPorts().values()) {
133                 if (prt.getPortQual() != null
134                         && port.getPortName().equals(prt.getPortName())
135                         && "xpdr-network".equals(prt.getPortQual().getName())) {
136                     return port;
137                 }
138             }
139         }
140      // TODO: throw exception
141         return null;
142     }
143
144
145     //check supported interface types
146
147 }