X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=common%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fcommon%2Fcrossconnect%2FCrossConnectImpl.java;h=4c9d3272171f32886915ea4e7d94a87e9d60bf13;hb=ed0789eb5b14e334c5750e73e456157d9076b1bc;hp=b67f76c6fdbc3bd162bed1f1afe515a5e93f76ce;hpb=f8f1b05b6eefd0f5c18e22c22b4d4e023f61faf6;p=transportpce.git diff --git a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl.java b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl.java index b67f76c6f..4c9d32721 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl.java @@ -8,34 +8,19 @@ package org.opendaylight.transportpce.common.crossconnect; -import com.google.common.util.concurrent.ListenableFuture; +import static org.opendaylight.transportpce.common.StringConstants.OPENROADM_DEVICE_VERSION_1_2_1; +import static org.opendaylight.transportpce.common.StringConstants.OPENROADM_DEVICE_VERSION_2_2_1; +import static org.opendaylight.transportpce.common.StringConstants.OPENROADM_DEVICE_VERSION_7_1; -import java.util.Collections; +import java.math.BigDecimal; import java.util.List; import java.util.Optional; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; - -import org.opendaylight.controller.md.sal.binding.api.MountPoint; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry; -import org.opendaylight.transportpce.common.Timeouts; -import org.opendaylight.transportpce.common.device.DeviceTransaction; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation; +import org.opendaylight.transportpce.common.mapping.MappingUtils; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.OpticalControlMode; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.GetConnectionPortTrailInputBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.GetConnectionPortTrailOutput; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.OrgOpenroadmDeviceService; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.connection.DestinationBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.connection.SourceBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.get.connection.port.trail.output.Ports; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnections; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsKey; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.common.RpcResult; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev201211.otn.renderer.input.Nodes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,146 +28,116 @@ public class CrossConnectImpl implements CrossConnect { private static final Logger LOG = LoggerFactory.getLogger(CrossConnectImpl.class); - private final DeviceTransactionManager deviceTransactionManager; - - public CrossConnectImpl(DeviceTransactionManager deviceTransactionManager) { - this.deviceTransactionManager = deviceTransactionManager; + protected CrossConnect crossConnect; + private final MappingUtils mappingUtils; + private CrossConnectImpl121 crossConnectImpl121; + private CrossConnectImpl221 crossConnectImpl221; + private CrossConnectImpl710 crossConnectImpl710; + + public CrossConnectImpl(DeviceTransactionManager deviceTransactionManager, MappingUtils mappingUtils, + CrossConnectImpl121 crossConnectImpl121, + CrossConnectImpl221 crossConnectImpl221, + CrossConnectImpl710 crossConnectImpl710) { + this.mappingUtils = mappingUtils; + this.crossConnectImpl121 = crossConnectImpl121; + this.crossConnectImpl221 = crossConnectImpl221; + this.crossConnectImpl710 = crossConnectImpl710; + this.crossConnect = null; } - @Override - public Optional getCrossConnect(String deviceId, String connectionNumber) { - return deviceTransactionManager.getDataFromDevice(deviceId, LogicalDatastoreType.OPERATIONAL, - generateRdmConnectionIID(connectionNumber), Timeouts.DEVICE_READ_TIMEOUT, - Timeouts.DEVICE_READ_TIMEOUT_UNIT); + public Optional getCrossConnect(String nodeId, String connectionNumber) { + String openRoadmVersion = mappingUtils.getOpenRoadmVersion(nodeId); + if (OPENROADM_DEVICE_VERSION_1_2_1.equals(openRoadmVersion)) { + return crossConnectImpl121.getCrossConnect(nodeId,connectionNumber); + } + else if (OPENROADM_DEVICE_VERSION_2_2_1.equals(openRoadmVersion)) { + return crossConnectImpl221.getCrossConnect(nodeId,connectionNumber); + } + return Optional.empty(); } - @Override - public Optional postCrossConnect(String deviceId, Long waveNumber, String srcTp, String destTp) { - RoadmConnectionsBuilder rdmConnBldr = new RoadmConnectionsBuilder(); - String connectionNumber = generateConnectionNumber(srcTp, destTp, waveNumber); - rdmConnBldr.setConnectionNumber(connectionNumber); - rdmConnBldr.setWavelengthNumber(waveNumber); - rdmConnBldr.setOpticalControlMode(OpticalControlMode.Off); - rdmConnBldr.setSource(new SourceBuilder().setSrcIf(srcTp + "-" + waveNumber.toString()).build()); - rdmConnBldr.setDestination(new DestinationBuilder().setDstIf(destTp + "-" + waveNumber.toString()).build()); - InstanceIdentifier rdmConnectionIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) - .child(RoadmConnections.class, new RoadmConnectionsKey(rdmConnBldr.getConnectionNumber())); - - Future> deviceTxFuture = deviceTransactionManager.getDeviceTransaction(deviceId); - DeviceTransaction deviceTx; - try { - Optional deviceTxOpt = deviceTxFuture.get(); - if (deviceTxOpt.isPresent()) { - deviceTx = deviceTxOpt.get(); - } else { - LOG.error("Device transaction for device {} was not found!", deviceId); - return Optional.empty(); - } - } catch (InterruptedException | ExecutionException e) { - LOG.error("Unable to obtain device transaction for device {}!", deviceId, e); - return Optional.empty(); - } - // post the cross connect on the device - deviceTx.put(LogicalDatastoreType.CONFIGURATION, rdmConnectionIID, rdmConnBldr.build()); - ListenableFuture submit = - deviceTx.submit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT); - try { - submit.get(); - LOG.info("Roadm-connection successfully created: {}-{}-{}", srcTp, destTp, waveNumber); - return Optional.of(connectionNumber); - } catch (InterruptedException | ExecutionException e) { - LOG.warn("Failed to post {}. Exception: {}", rdmConnBldr.build(), e); + public Optional postCrossConnect(String nodeId, String srcTp, String destTp, + SpectrumInformation spectrumInformation) { + String openRoadmVersion = mappingUtils.getOpenRoadmVersion(nodeId); + LOG.info("Cross Connect post request received for node {} with version {}",nodeId,openRoadmVersion); + if (OPENROADM_DEVICE_VERSION_1_2_1.equals(openRoadmVersion)) { + LOG.info("Device Version is 1.2.1"); + return crossConnectImpl121.postCrossConnect(nodeId, srcTp, destTp, spectrumInformation); } + else if (OPENROADM_DEVICE_VERSION_2_2_1.equals(openRoadmVersion)) { + LOG.info("Device Version is 2.2"); + return crossConnectImpl221.postCrossConnect(nodeId, srcTp, destTp, + spectrumInformation); + } + LOG.info("Device Version not found"); return Optional.empty(); + } - @Override - public boolean deleteCrossConnect(String deviceId, String connectionNumber) { - //Check if cross connect exists before delete - if (!getCrossConnect(deviceId, connectionNumber).isPresent()) { - LOG.warn("Cross connect does not exist, halting delete"); - return false; + + public List deleteCrossConnect(String nodeId, String connectionNumber, Boolean isOtn) { + + String openRoadmVersion = mappingUtils.getOpenRoadmVersion(nodeId); + if (OPENROADM_DEVICE_VERSION_1_2_1.equals(openRoadmVersion)) { + return crossConnectImpl121.deleteCrossConnect(nodeId, connectionNumber); } - Future> deviceTxFuture = deviceTransactionManager.getDeviceTransaction(deviceId); - DeviceTransaction deviceTx; - try { - Optional deviceTxOpt = deviceTxFuture.get(); - if (deviceTxOpt.isPresent()) { - deviceTx = deviceTxOpt.get(); - } else { - LOG.error("Device transaction for device {} was not found!", deviceId); - return false; - } - } catch (InterruptedException | ExecutionException e) { - LOG.error("Unable to obtain device transaction for device {}!", deviceId, e); - return false; + else if (OPENROADM_DEVICE_VERSION_2_2_1.equals(openRoadmVersion)) { + return crossConnectImpl221.deleteCrossConnect(nodeId, connectionNumber, isOtn); } + return null; + } - // post the cross connect on the device - deviceTx.delete(LogicalDatastoreType.CONFIGURATION, generateRdmConnectionIID(connectionNumber)); - ListenableFuture submit = - deviceTx.submit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT); - try { - submit.get(); - LOG.info("Roadm connection successfully deleted "); - return true; - } catch (InterruptedException | ExecutionException e) { - LOG.warn("Failed to delete {}", connectionNumber, e); + public List deleteCrossConnect(String nodeId, String connectionNumber) { + String openRoadmVersion = mappingUtils.getOpenRoadmVersion(nodeId); + if (OPENROADM_DEVICE_VERSION_7_1.equals(openRoadmVersion)) { + return crossConnectImpl710.deleteOtnCrossConnect(nodeId, connectionNumber); } - return false; + return null; } - @Override - public List getConnectionPortTrail(String nodeId, Long waveNumber, String srcTp, String destTp) + public List getConnectionPortTrail(String nodeId, String srcTp, String destTp, int lowerSpectralSlotNumber, + int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { - String connectionName = generateConnectionNumber(srcTp, destTp, waveNumber); - Optional mountPointOpt = deviceTransactionManager.getDeviceMountPoint(nodeId); - List ports = null; - MountPoint mountPoint; - if (mountPointOpt.isPresent()) { - mountPoint = mountPointOpt.get(); - } else { - LOG.error("Failed to obtain mount point for device {}!", nodeId); - return Collections.emptyList(); - } - final Optional service = mountPoint.getService(RpcConsumerRegistry.class).toJavaUtil(); - if (!service.isPresent()) { - LOG.error("Failed to get RpcService for node {}", nodeId); + String openRoadmVersion = mappingUtils.getOpenRoadmVersion(nodeId); + if (OPENROADM_DEVICE_VERSION_1_2_1.equals(openRoadmVersion)) { + return crossConnectImpl121.getConnectionPortTrail(nodeId, srcTp, destTp, + lowerSpectralSlotNumber, higherSpectralSlotNumber); } - final OrgOpenroadmDeviceService rpcService = service.get().getRpcService(OrgOpenroadmDeviceService.class); - final GetConnectionPortTrailInputBuilder portTrainInputBuilder = new GetConnectionPortTrailInputBuilder(); - portTrainInputBuilder.setConnectionNumber(connectionName); - final Future> portTrailOutput = rpcService.getConnectionPortTrail( - portTrainInputBuilder.build()); - if (portTrailOutput != null) { - try { - RpcResult connectionPortTrailOutputRpcResult = portTrailOutput.get(); - GetConnectionPortTrailOutput connectionPortTrailOutput = connectionPortTrailOutputRpcResult.getResult(); - if (connectionPortTrailOutput == null) { - throw new OpenRoadmInterfaceException(String.format("RPC get connection port trail called on" - + " node %s returned null!", nodeId)); - } - LOG.info("Getting port trail for node {}'s connection number {}", nodeId, connectionName); - ports = connectionPortTrailOutput.getPorts(); - for (Ports port : ports) { - LOG.info("{} - Circuit pack {} - Port {}", nodeId, port.getCircuitPackName(), port.getPortName()); - } - } catch (InterruptedException | ExecutionException e) { - LOG.warn("Exception caught", e); - } - } else { - LOG.warn("Port trail is null in getConnectionPortTrail for nodeId {}", nodeId); + else if (OPENROADM_DEVICE_VERSION_2_2_1.equals(openRoadmVersion)) { + return crossConnectImpl221 + .getConnectionPortTrail(nodeId, srcTp, destTp, lowerSpectralSlotNumber, higherSpectralSlotNumber); } - return ports != null ? ports : Collections.emptyList(); + return null; } - private InstanceIdentifier generateRdmConnectionIID(String connectionNumber) { - return InstanceIdentifier.create(OrgOpenroadmDevice.class) - .child(RoadmConnections.class, new RoadmConnectionsKey(connectionNumber)); + public boolean setPowerLevel(String nodeId, String mode, BigDecimal powerValue, String connectionNumber) { + String openRoadmVersion = mappingUtils.getOpenRoadmVersion(nodeId); + if (OPENROADM_DEVICE_VERSION_1_2_1.equals(openRoadmVersion) && OpticalControlMode.forName(mode).isPresent()) { + return crossConnectImpl121.setPowerLevel(nodeId,OpticalControlMode.forName(mode).get(), + powerValue,connectionNumber); + } + else if (OPENROADM_DEVICE_VERSION_2_2_1.equals(openRoadmVersion) + && org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.OpticalControlMode.forName(mode) + .isPresent()) { + return crossConnectImpl221.setPowerLevel(nodeId, + org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.OpticalControlMode.forName(mode) + .get(), powerValue,connectionNumber); + } + return false; } - private String generateConnectionNumber(String srcTp, String destTp, Long waveNumber) { - return srcTp + "-" + destTp + "-" + waveNumber; + @Override + public Optional postOtnCrossConnect(List createdOduInterfaces, Nodes node) + throws OpenRoadmInterfaceException { + String openRoadmVersion = mappingUtils.getOpenRoadmVersion(node.getNodeId()); + + if (OPENROADM_DEVICE_VERSION_2_2_1.equals(openRoadmVersion)) { + return crossConnectImpl221.postOtnCrossConnect(createdOduInterfaces, node); + } + else if (OPENROADM_DEVICE_VERSION_7_1.equals(openRoadmVersion)) { + return crossConnectImpl710.postOtnCrossConnect(createdOduInterfaces, node); + } + return Optional.empty(); } }