import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors;
import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.NotificationPublishService;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.transportpce.common.ResponseCodes;
import org.opendaylight.transportpce.common.StringConstants;
import org.opendaylight.transportpce.common.service.ServiceTypes;
import org.opendaylight.transportpce.renderer.ModelMappingUtils;
import org.opendaylight.transportpce.renderer.ServicePathInputData;
+import org.opendaylight.transportpce.renderer.provisiondevice.notification.Notification;
import org.opendaylight.transportpce.renderer.provisiondevice.servicepath.ServicePathDirection;
import org.opendaylight.transportpce.renderer.provisiondevice.tasks.DeviceRenderingRollbackTask;
import org.opendaylight.transportpce.renderer.provisiondevice.tasks.DeviceRenderingTask;
import org.opendaylight.transportpce.renderer.provisiondevice.tasks.OlmPowerSetupRollbackTask;
import org.opendaylight.transportpce.renderer.provisiondevice.tasks.OlmPowerSetupTask;
+import org.opendaylight.transportpce.renderer.provisiondevice.tasks.OlmPowerTurnDownTask;
import org.opendaylight.transportpce.renderer.provisiondevice.tasks.OtnDeviceRenderingTask;
import org.opendaylight.transportpce.renderer.provisiondevice.tasks.RollbackProcessor;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.Action;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInputBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.get.pm.output.Measurements;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSp;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSpBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.LinkBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev161014.PmGranularity;
import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev161014.ResourceTypeEnum;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.PathDescription;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.ServicePathNotificationTypes;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.ServicePathList;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePathsKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210930.link.tp.LinkTp;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210930.olm.get.pm.input.ResourceIdentifierBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210930.optical.renderer.nodes.Nodes;
-import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.OtnLinkType;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.PmGranularity;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.link.tp.LinkTp;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.olm.get.pm.input.ResourceIdentifierBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.optical.renderer.nodes.Nodes;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.Notification;
import org.opendaylight.yangtools.yang.common.Uint32;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+@Component(immediate = true)
public class RendererServiceOperationsImpl implements RendererServiceOperations {
private static final Logger LOG = LoggerFactory.getLogger(RendererServiceOperationsImpl.class);
"OLM power setup was not successful! Rendering and OLM will be rolled back.";
private static final String RENDERING_DEVICES_A_Z_MSG = "Rendering devices A-Z";
private static final String RENDERING_DEVICES_Z_A_MSG = "Rendering device Z-A";
- private static final String TURNING_DOWN_POWER_ON_A_TO_Z_PATH_MSG = "Turning down power on A-to-Z path";
- private static final String FAILED = "Failed";
+ private static final String ATOZPATH = "A-to-Z";
+ private static final String ZTOAPATH = "Z-to-A";
private static final String OPERATION_FAILED = "Operation Failed";
private static final String OPERATION_SUCCESSFUL = "Operation Successful";
private static final int NUMBER_OF_THREADS = 4;
private final OtnDeviceRendererService otnDeviceRenderer;
private final TransportpceOlmService olmService;
private final DataBroker dataBroker;
- private final NotificationPublishService notificationPublishService;
+ private final Notification notification;
private final PortMapping portMapping;
private ListeningExecutorService executor;
- public RendererServiceOperationsImpl(DeviceRendererService deviceRenderer,
- OtnDeviceRendererService otnDeviceRenderer, TransportpceOlmService olmService,
- DataBroker dataBroker, NotificationPublishService notificationPublishService, PortMapping portMapping) {
+ @Activate
+ public RendererServiceOperationsImpl(@Reference DeviceRendererService deviceRenderer,
+ @Reference OtnDeviceRendererService otnDeviceRenderer,
+ @Reference TransportpceOlmService olmService,
+ @Reference DataBroker dataBroker,
+ @Reference Notification notification,
+ @Reference PortMapping portMapping) {
this.deviceRenderer = deviceRenderer;
this.otnDeviceRenderer = otnDeviceRenderer;
this.olmService = olmService;
this.dataBroker = dataBroker;
- this.notificationPublishService = notificationPublishService;
+ this.notification = notification;
this.portMapping = portMapping;
this.executor = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(NUMBER_OF_THREADS));
+ LOG.debug("RendererServiceOperationsImpl instantiated");
}
@Override
public ListenableFuture<ServiceImplementationRequestOutput>
- serviceImplementation(ServiceImplementationRequestInput input) {
+ serviceImplementation(ServiceImplementationRequestInput input, boolean isTempService) {
LOG.info("Calling service impl request {}", input.getServiceName());
+ LOG.debug("Check if it is temp-service {}", isTempService);
return executor.submit(new Callable<ServiceImplementationRequestOutput>() {
@Override
"Service compliant, submitting service implementation Request ...");
Uint32 serviceRate = getServiceRate(input);
LOG.info("Using {}G rate", serviceRate);
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316
+ org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221
.network.Nodes mappingNode =
portMapping.isNodeExist(input.getServiceAEnd().getNodeId())
? portMapping.getNode(input.getServiceAEnd().getNodeId())
case StringConstants.SERVICE_TYPE_OTUC2:
case StringConstants.SERVICE_TYPE_OTUC3:
case StringConstants.SERVICE_TYPE_OTUC4:
- if (!manageServicePathCreation(input, serviceType)) {
+ LOG.debug("Check temp service {}", isTempService);
+ if (!manageServicePathCreation(input, serviceType, isTempService)) {
return ModelMappingUtils
.createServiceImplResponse(ResponseCodes.RESPONSE_FAILED, OPERATION_FAILED);
}
return ModelMappingUtils
.createServiceDeleteResponse(ResponseCodes.RESPONSE_FAILED, OPERATION_FAILED);
}
- PathDescription pathDescription = pathDescriptionOpt.get();
+ PathDescription pathDescription = pathDescriptionOpt.orElseThrow();
String serviceType =
ServiceTypes.getServiceType(
service.getServiceAEnd().getServiceFormat().getName(),
service.getServiceAEnd().getServiceRate(),
service.getServiceAEnd().getTxDirection() == null
- || service.getServiceAEnd().getTxDirection().values().stream().findFirst().get()
+ || service.getServiceAEnd().getTxDirection().values().stream().findFirst().orElseThrow()
.getPort() == null
- || service.getServiceAEnd().getTxDirection().values().stream().findFirst().get()
+ || service.getServiceAEnd().getTxDirection().values().stream().findFirst().orElseThrow()
.getPort().getPortName() == null
? null
: portMapping.getMapping(
service.getServiceAEnd().getNodeId().getValue(),
- service.getServiceAEnd().getTxDirection().values().stream().findFirst().get()
- .getPort().getPortName()));
+ service.getServiceAEnd().getTxDirection().values().stream().findFirst()
+ .orElseThrow().getPort().getPortName()));
switch (serviceType) {
case StringConstants.SERVICE_TYPE_100GE_T:
case StringConstants.SERVICE_TYPE_400GE:
});
}
- @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+ @SuppressFBWarnings(
value = "UPM_UNCALLED_PRIVATE_METHOD",
justification = "call in call() method")
private Uint32 getServiceRate(ServiceImplementationRequestInput input) {
}
String serviceName =
ServiceFormat.OTU.getName().equals(input.getServiceAEnd().getServiceFormat().getName())
- ? input.getServiceAEnd().getOtuServiceRate().getSimpleName()
- : input.getServiceAEnd().getOduServiceRate().getSimpleName();
+ ? input.getServiceAEnd().getOtuServiceRate().toString().split("\\{")[0]
+ : input.getServiceAEnd().getOduServiceRate().toString().split("\\{")[0];
if (!formatRateMap.get(input.getServiceAEnd().getServiceFormat()).containsKey(serviceName)) {
LOG.warn("Unable to get service-rate for service {} - unsupported service name {}",
input.getServiceName(), serviceName);
.get(serviceName);
}
- @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
- value = "UPM_UNCALLED_PRIVATE_METHOD",
- justification = "call in call() method")
- private ServicePowerTurndownOutput olmPowerTurndown(ServicePathInputData servicePathInputData)
- throws InterruptedException, ExecutionException, TimeoutException {
- LOG.debug(TURNING_DOWN_POWER_ON_A_TO_Z_PATH_MSG);
- return this.olmService
- .servicePowerTurndown(
- new ServicePowerTurndownInputBuilder(servicePathInputData.getServicePathInput()).build())
- .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS)
- .getResult();
- }
-
- @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+ @SuppressFBWarnings(
value = "UPM_UNCALLED_PRIVATE_METHOD",
justification = "call in call() method")
private Optional<org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
}
}
- @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+ @SuppressFBWarnings(
value = "UPM_UNCALLED_PRIVATE_METHOD",
justification = "call in call() method")
private List<DeviceRenderingResult> deviceRendering(
return renderingResults;
}
- @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+ @SuppressFBWarnings(
value = "UPM_UNCALLED_PRIVATE_METHOD",
justification = "call in call() method")
private List<OtnDeviceRenderingResult> otnDeviceRendering(
return otnRenderingResults;
}
- @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+ @SuppressFBWarnings(
value = "UPM_UNCALLED_PRIVATE_METHOD",
justification = "call in call() method")
private void olmPowerSetup(
RollbackProcessor rollbackProcessor,
ServicePowerSetupInput powerSetupInputAtoZ,
- ServicePowerSetupInput powerSetupInputZtoA) {
+ ServicePowerSetupInput powerSetupInputZtoA, boolean isTempService) {
//TODO olmPowerSetupFutureAtoZ & olmPowerSetupFutureZtoA & olmFutures used only once
// Do notifications & LOG.info deserve this ?
//TODO use constants for LOG.info & notifications common messages
+ // if the service create is a temp-service, OLM will be skipped
+ if (isTempService) {
+ LOG.info("For temp-service create OLM is not computed and skipped");
+ return;
+ }
LOG.info("Olm power setup A-Z");
sendNotifications(
- ServicePathNotificationTypes.ServiceImplementationRequest,
- powerSetupInputAtoZ.getServiceName(),
- RpcStatusEx.Pending,
- "Olm power setup A-Z");
+ ServicePathNotificationTypes.ServiceImplementationRequest,
+ powerSetupInputAtoZ.getServiceName(),
+ RpcStatusEx.Pending,
+ "Olm power setup A-Z");
ListenableFuture<OLMRenderingResult> olmPowerSetupFutureAtoZ =
- this.executor.submit(new OlmPowerSetupTask(this.olmService, powerSetupInputAtoZ));
+ this.executor.submit(new OlmPowerSetupTask(this.olmService, powerSetupInputAtoZ));
LOG.info("OLM power setup Z-A");
sendNotifications(
- ServicePathNotificationTypes.ServiceImplementationRequest,
- powerSetupInputAtoZ.getServiceName(),
- RpcStatusEx.Pending,
- "Olm power setup Z-A");
+ ServicePathNotificationTypes.ServiceImplementationRequest,
+ powerSetupInputAtoZ.getServiceName(),
+ RpcStatusEx.Pending,
+ "Olm power setup Z-A");
ListenableFuture<OLMRenderingResult> olmPowerSetupFutureZtoA =
- this.executor.submit(new OlmPowerSetupTask(this.olmService, powerSetupInputZtoA));
-
+ this.executor.submit(new OlmPowerSetupTask(this.olmService, powerSetupInputZtoA));
ListenableFuture<List<OLMRenderingResult>> olmFutures =
- Futures.allAsList(olmPowerSetupFutureAtoZ, olmPowerSetupFutureZtoA);
+ Futures.allAsList(olmPowerSetupFutureAtoZ, olmPowerSetupFutureZtoA);
List<OLMRenderingResult> olmResults;
try {
} catch (InterruptedException | ExecutionException | TimeoutException e) {
LOG.warn(OLM_ROLL_BACK_MSG, e);
sendNotifications(
- ServicePathNotificationTypes.ServiceImplementationRequest,
- powerSetupInputAtoZ.getServiceName(),
- RpcStatusEx.Pending,
- OLM_ROLL_BACK_MSG);
+ ServicePathNotificationTypes.ServiceImplementationRequest,
+ powerSetupInputAtoZ.getServiceName(),
+ RpcStatusEx.Pending,
+ OLM_ROLL_BACK_MSG);
rollbackProcessor.addTask(
- new OlmPowerSetupRollbackTask("AtoZOLMTask", true, this.olmService, powerSetupInputAtoZ));
+ new OlmPowerSetupRollbackTask("AtoZOLMTask", true, this.olmService, powerSetupInputAtoZ));
rollbackProcessor.addTask(
- new OlmPowerSetupRollbackTask("ZtoAOLMTask", true, this.olmService, powerSetupInputZtoA));
+ new OlmPowerSetupRollbackTask("ZtoAOLMTask", true, this.olmService, powerSetupInputZtoA));
return;
}
-
rollbackProcessor.addTask(
- new OlmPowerSetupRollbackTask(
- "AtoZOLMTask",
- ! olmResults.get(0).isSuccess(),
- this.olmService,
- powerSetupInputAtoZ));
+ new OlmPowerSetupRollbackTask(
+ "AtoZOLMTask",
+ !olmResults.get(0).isSuccess(),
+ this.olmService,
+ powerSetupInputAtoZ));
rollbackProcessor.addTask(
- new OlmPowerSetupRollbackTask(
- "ZtoAOLMTask",
- ! olmResults.get(1).isSuccess(),
- this.olmService,
- powerSetupInputZtoA));
+ new OlmPowerSetupRollbackTask(
+ "ZtoAOLMTask",
+ !olmResults.get(1).isSuccess(),
+ this.olmService,
+ powerSetupInputZtoA));
}
- @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+ @SuppressFBWarnings(
value = "UPM_UNCALLED_PRIVATE_METHOD",
justification = "call in call() method")
private boolean isServiceActivated(String nodeId, String tpId) {
return result <= threshold;
}
- @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+ @SuppressFBWarnings(
value = "UPM_UNCALLED_PRIVATE_METHOD",
justification = "call in call() method")
- private boolean manageServicePathCreation(ServiceImplementationRequestInput input, String serviceType) {
+ private boolean manageServicePathCreation(ServiceImplementationRequestInput input, String serviceType,
+ boolean isTempService) {
ServicePathInputData servicePathInputDataAtoZ =
ModelMappingUtils
.rendererCreateServiceInputAToZ(input.getServiceName(), input.getPathDescription(), Action.Create);
//olmPowerSetupInputAtoZ,
ModelMappingUtils.createServicePowerSetupInput(renderingResults.get(0).getOlmList(), input),
//olmPowerSetupInputZtoA
- ModelMappingUtils.createServicePowerSetupInput(renderingResults.get(1).getOlmList(), input));
+ ModelMappingUtils.createServicePowerSetupInput(renderingResults.get(1).getOlmList(), input), isTempService);
if (rollbackProcessor.rollbackAllIfNecessary() > 0) {
sendNotifications(
ServicePathNotificationTypes.ServiceImplementationRequest,
return true;
}
- @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+ @SuppressFBWarnings(
value = "UPM_UNCALLED_PRIVATE_METHOD",
justification = "call in call() method")
private boolean manageServicePathDeletion(String serviceName, PathDescription pathDescription, String serviceType)
ModelMappingUtils.rendererCreateServiceInputAToZ(serviceName, pathDescription, Action.Delete);
ServicePathInputData servicePathInputDataZtoA =
ModelMappingUtils.rendererCreateServiceInputZToA(serviceName, pathDescription, Action.Delete);
- // OLM turn down power
- try {
- LOG.debug(TURNING_DOWN_POWER_ON_A_TO_Z_PATH_MSG);
- sendNotifications(
- ServicePathNotificationTypes.ServiceDelete,
- serviceName,
- RpcStatusEx.Pending,
- TURNING_DOWN_POWER_ON_A_TO_Z_PATH_MSG);
- // TODO add some flag rather than string
- if (FAILED.equals(
- olmPowerTurndown(servicePathInputDataAtoZ)
- .getResult())) {
- LOG.error("Service power turndown failed on A-to-Z path for service {}!", serviceName);
- sendNotifications(
- ServicePathNotificationTypes.ServiceDelete,
+
+ ListenableFuture<OLMRenderingResult> olmPowerTurnDownFutureAtoZ =
+ this.executor.submit(
+ new OlmPowerTurnDownTask(
serviceName,
- RpcStatusEx.Failed,
- "Service power turndown failed on A-to-Z path for service");
- return false;
- }
- LOG.debug("Turning down power on Z-to-A path");
- sendNotifications(
- ServicePathNotificationTypes.ServiceDelete,
- serviceName,
- RpcStatusEx.Pending,
- "Turning down power on Z-to-A path");
- // TODO add some flag rather than string
- if (FAILED.equals(
- olmPowerTurndown(servicePathInputDataZtoA)
- .getResult())) {
- LOG.error("Service power turndown failed on Z-to-A path for service {}!", serviceName);
- sendNotifications(
- ServicePathNotificationTypes.ServiceDelete,
+ ATOZPATH,
+ olmService,
+ servicePathInputDataAtoZ,
+ notification
+ )
+ );
+
+ ListenableFuture<OLMRenderingResult> olmPowerTurnDownFutureZtoA =
+ this.executor.submit(
+ new OlmPowerTurnDownTask(
serviceName,
- RpcStatusEx.Failed,
- "Service power turndown failed on Z-to-A path for service");
- return false;
- }
+ ZTOAPATH,
+ olmService,
+ servicePathInputDataZtoA,
+ notification
+ )
+ );
+
+ ListenableFuture<List<OLMRenderingResult>> olmPowerTurnDownFutures =
+ Futures.allAsList(olmPowerTurnDownFutureAtoZ, olmPowerTurnDownFutureZtoA);
+
+ List<OLMRenderingResult> olmRenderingResults;
+ // OLM turn down power
+ try {
+ LOG.info("Waiting for A-Z and Z-A OLM power turn down ...");
+ olmRenderingResults = olmPowerTurnDownFutures.get(
+ Timeouts.OLM_TIMEOUT, TimeUnit.MILLISECONDS
+ );
} catch (InterruptedException | ExecutionException | TimeoutException e) {
LOG.error("Error while turning down power!", e);
return false;
}
+ if (!olmRenderingResults.get(0).isSuccess() || !olmRenderingResults.get(1).isSuccess()) {
+ LOG.error("Error while turning down power!");
+ return false;
+ }
+ LOG.info("OLM power successfully turned down!");
// delete service path with renderer
LOG.info("Deleting service path via renderer");
sendNotifications(
return true;
}
- @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+ @SuppressFBWarnings(
value = "UPM_UNCALLED_PRIVATE_METHOD",
justification = "call in call() method")
private boolean manageOtnServicePathCreation(
return true;
}
- @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+ @SuppressFBWarnings(
value = "UPM_UNCALLED_PRIVATE_METHOD",
justification = "call in call() method")
private boolean manageOtnServicePathDeletion(
String serviceName,
RpcStatusEx rpcStatusEx,
String message) {
- send(
- buildNotification(servicePathNotificationTypes, serviceName, rpcStatusEx, message,
- null, null, null, null));
+
+ notification.send(
+ servicePathNotificationTypes,
+ serviceName,
+ rpcStatusEx,
+ message
+ );
}
/**
String message,
PathDescription pathDescription,
Link notifLink,
- List<String> supportedLinks,
- String serviceType) {
- send(
- buildNotification(servicePathNotificationTypes, serviceName, rpcStatusEx, message,
- pathDescription, notifLink, supportedLinks, serviceType));
- }
-
- /**
- * Build notification containing path description information.
- * @param servicePathNotificationTypes ServicePathNotificationTypes
- * @param serviceName String
- * @param rpcStatusEx RpcStatusEx
- * @param message String
- * @param pathDescription PathDescription
- * @return notification with RendererRpcResultSp type.
- */
- private RendererRpcResultSp buildNotification(
- ServicePathNotificationTypes servicePathNotificationTypes,
- String serviceName,
- RpcStatusEx rpcStatusEx,
- String message,
- PathDescription pathDescription,
- Link notifLink,
- List<String> supportedLinks,
+ Set<String> supportedLinks,
String serviceType) {
- RendererRpcResultSpBuilder builder =
- new RendererRpcResultSpBuilder()
- .setNotificationType(servicePathNotificationTypes).setServiceName(serviceName).setStatus(rpcStatusEx)
- .setStatusMessage(message)
- .setServiceType(serviceType);
- if (pathDescription != null) {
- builder
- .setAToZDirection(pathDescription.getAToZDirection())
- .setZToADirection(pathDescription.getZToADirection());
- }
- if (notifLink != null) {
- builder.setLink(notifLink);
- }
- if (supportedLinks != null) {
- builder.setLinkId(supportedLinks);
- }
- return builder.build();
- }
- /**
- * Send renderer notification.
- * @param notification Notification
- */
- private void send(Notification notification) {
- try {
- LOG.info("Sending notification {}", notification);
- notificationPublishService.putNotification(notification);
- } catch (InterruptedException e) {
- LOG.info("notification offer rejected: ", e);
- Thread.currentThread().interrupt();
- }
+ notification.send(
+ notification.buildNotification(
+ servicePathNotificationTypes,
+ serviceName,
+ rpcStatusEx,
+ message,
+ pathDescription,
+ notifLink,
+ supportedLinks,
+ serviceType
+ )
+ );
}
private Link createLinkForNotif(List<LinkTp> otnLinkTerminationPoints) {
.build();
}
- private List<String> getSupportedLinks(List<String> allSupportLinks, String serviceType) {
+ private Set<String> getSupportedLinks(Set<String> allSupportLinks, String serviceType) {
//TODO a Map might be more indicated here
switch (serviceType) {
case StringConstants.SERVICE_TYPE_10GE:
case StringConstants.SERVICE_TYPE_1GE:
return allSupportLinks.stream()
- .filter(lk -> lk.startsWith(OtnLinkType.ODTU4.getName())).collect(Collectors.toList());
+ .filter(lk -> lk.startsWith(OtnLinkType.ODTU4.getName())).collect(Collectors.toSet());
case StringConstants.SERVICE_TYPE_100GE_M:
return allSupportLinks.stream()
- .filter(lk -> lk.startsWith(OtnLinkType.ODUC4.getName())).collect(Collectors.toList());
+ .filter(lk -> lk.startsWith(OtnLinkType.ODUC4.getName())).collect(Collectors.toSet());
case StringConstants.SERVICE_TYPE_ODU4:
case StringConstants.SERVICE_TYPE_100GE_S:
return allSupportLinks.stream()
- .filter(lk -> lk.startsWith(OtnLinkType.OTU4.getName())).collect(Collectors.toList());
+ .filter(lk -> lk.startsWith(OtnLinkType.OTU4.getName())).collect(Collectors.toSet());
case StringConstants.SERVICE_TYPE_ODUC4:
return allSupportLinks.stream()
- .filter(lk -> lk.startsWith(OtnLinkType.OTUC4.getName())).collect(Collectors.toList());
+ .filter(lk -> lk.startsWith(OtnLinkType.OTUC4.getName())).collect(Collectors.toSet());
default:
return null;
}