- }
-
- @Override
- public ListenableFuture<RpcResult<ServiceCreateOutput>> serviceCreate(ServiceCreateInput input) {
- LOG.info("RPC service creation received");
- // Validation
- OperationResult validationResult = ServiceCreateValidation.validateServiceCreateRequest(
- new ServiceInput(input), RpcActions.ServiceCreate);
- if (! validationResult.isSuccess()) {
- LOG.warn("Aborting service create because validation of service create request failed: {}",
- validationResult.getResultMessage());
- return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES,
- validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED);
- }
- this.pceListenerImpl.setInput(new ServiceInput(input));
- this.pceListenerImpl.setServiceReconfigure(false);
- this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
- this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
- this.rendererListenerImpl.setServiceInput(new ServiceInput(input));
- LOG.info("Commencing PCE");
- PathComputationRequestOutput output = this.pceServiceWrapper.performPCE(input, true);
- if (output != null) {
- LOG.info("Service compliant, serviceCreate in progress...");
- ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
- return ModelMappingUtils.createCreateServiceReply(input, common.getAckFinalIndicator(),
- common.getResponseMessage(), common.getResponseCode());
- } else {
- return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES,
- "PCE calculation failed", ResponseCodes.RESPONSE_FAILED);
- }
- }
-
- @Override
- public ListenableFuture<RpcResult<ServiceDeleteOutput>> serviceDelete(ServiceDeleteInput input) {
- LOG.info("RPC serviceDelete request received for {}", input.getServiceDeleteReqInfo().getServiceName());
- String message = "";
-
- /*
- * Upon receipt of service-deleteService RPC, service header and sdnc-request
- * header compliancy are verified.
- */
- LOG.info("checking Service Compliancy ...");
- ComplianceCheckResult serviceHandlerCheckResult =
- ServicehandlerCompliancyCheck.check(
- input.getServiceDeleteReqInfo().getServiceName(),
- input.getSdncRequestHeader(), null, RpcActions.ServiceDelete, false, true);
- if (serviceHandlerCheckResult.hasPassed()) {
- LOG.info("Service compliant !");
- } else {
- LOG.info("Service is not compliant !");
- return ModelMappingUtils
- .createDeleteServiceReply(input, ResponseCodes.FINAL_ACK_YES,
- "Service not compliant !", ResponseCodes.RESPONSE_FAILED);
- }
-
- //Check presence of service to be deleted
- String serviceName = input.getServiceDeleteReqInfo().getServiceName();
- LOG.info("serviceName : {}", serviceName);
- try {
- Optional<Services> service = this.serviceDataStoreOperations.getService(serviceName);
- if (!service.isPresent()) {
- message = "Service '" + serviceName + "' does not exist in datastore";
- LOG.error(message);
- return ModelMappingUtils.createDeleteServiceReply(input, ResponseCodes.FINAL_ACK_YES,
- message, ResponseCodes.RESPONSE_FAILED);
- }
- } catch (NullPointerException e) {
- LOG.error("failed to get service '{}' from datastore : ", serviceName, e);
- message = "Service '" + serviceName + "' does not exist in datastore";
- LOG.error(message);
- return ModelMappingUtils.createDeleteServiceReply(input, ResponseCodes.FINAL_ACK_YES, message,
- ResponseCodes.RESPONSE_FAILED);
- }
- LOG.info("Service '{}' present in datastore !", serviceName);
- this.pceListenerImpl.setInput(new ServiceInput(input));
- this.pceListenerImpl.setServiceReconfigure(false);
- this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
- this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
- this.rendererListenerImpl.setServiceInput(new ServiceInput(input));
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017
- .ServiceDeleteInput serviceDeleteInput = ModelMappingUtils.createServiceDeleteInput(
- new ServiceInput(input));
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017.ServiceDeleteOutput output =
- this.rendererServiceWrapper.performRenderer(serviceDeleteInput,
- ServiceNotificationTypes.ServiceDeleteResult);
- if (output != null) {
- LOG.info("Service present in datastore, service-delete in progress...");
- ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
- return ModelMappingUtils.createDeleteServiceReply(input, common.getAckFinalIndicator(),
- common.getResponseMessage(), common.getResponseCode());
- } else {
- return ModelMappingUtils.createDeleteServiceReply(input, ResponseCodes.FINAL_ACK_YES,
- "Renderer service delete failed !", ResponseCodes.RESPONSE_FAILED);
- }
- }
-
- @Override
- public ListenableFuture<RpcResult<ServiceFeasibilityCheckOutput>> serviceFeasibilityCheck(
- ServiceFeasibilityCheckInput input) {
- LOG.info("RPC service feasibility check received");
- // Validation
- ServiceInput serviceInput = new ServiceInput(input);
- OperationResult validationResult = ServiceCreateValidation.validateServiceCreateRequest(serviceInput,
- RpcActions.ServiceFeasibilityCheck);
- if (! validationResult.isSuccess()) {
- LOG.warn("Aborting service feasibility check because validation of service create request failed: {}",
- validationResult.getResultMessage());
- return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES,
- validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED);
- }
- this.pceListenerImpl.setInput(new ServiceInput(input));
- this.pceListenerImpl.setServiceReconfigure(false);
- this.pceListenerImpl.setServiceFeasiblity(true);
- this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
- this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
- this.rendererListenerImpl.setServiceInput(new ServiceInput(input));
- LOG.info("Commencing PCE");
- PathComputationRequestOutput output = this.pceServiceWrapper.performPCE(input, true);
- if (output != null) {
- LOG.info("Service compliant, serviceFeasibilityCheck in progress...");
- ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
- return ModelMappingUtils.createCreateServiceReply(input, common.getAckFinalIndicator(),
- common.getResponseMessage(), common.getResponseCode());
- } else {
- return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES,
- "PCE calculation failed", ResponseCodes.RESPONSE_FAILED);
- }
- }
-
- @Override
- public ListenableFuture<RpcResult<ServiceReconfigureOutput>> serviceReconfigure(ServiceReconfigureInput input) {
- LOG.info("RPC service reconfigure received");
- String message = "";
- Optional<Services> servicesObject = this.serviceDataStoreOperations.getService(input.getServiceName());
- if (servicesObject.isPresent()) {
- LOG.info("Service '{}' is present", input.getServiceName());
- OperationResult validationResult = ServiceCreateValidation
- .validateServiceCreateRequest(new ServiceInput(input), RpcActions.ServiceReconfigure);
- if (!validationResult.isSuccess()) {
- LOG.warn("Aborting service reconfigure because validation of service create request failed: {}",
- validationResult.getResultMessage());
- return ModelMappingUtils.createCreateServiceReply(input, validationResult.getResultMessage(),
- RpcStatus.Failed);
- }
- this.pceListenerImpl.setInput(new ServiceInput(input));
- this.pceListenerImpl.setServiceReconfigure(true);
- this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
- this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
- this.rendererListenerImpl.setServiceInput(new ServiceInput(input));
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017
- .ServiceDeleteInput serviceDeleteInput =
- ModelMappingUtils.createServiceDeleteInput(new ServiceInput(input));
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017
- .ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(serviceDeleteInput,
- ServiceNotificationTypes.ServiceDeleteResult);
- if (output != null) {
- LOG.info("Service compliant, service reconfigure in progress...");
- ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
- return ModelMappingUtils.createCreateServiceReply(input, common.getResponseMessage(),
- RpcStatus.Successful);
- } else {
- return ModelMappingUtils.createCreateServiceReply(input, "Renderer service delete failed !",
- RpcStatus.Successful);
- }
- } else {
- LOG.error("Service '{}' is not present", input.getServiceName());
- message = "Service '" + input.getServiceName() + "' is not present";
- return ModelMappingUtils.createCreateServiceReply(input, message, RpcStatus.Failed);
- }
- }
-
- @Override
- public ListenableFuture<RpcResult<ServiceRestorationOutput>> serviceRestoration(ServiceRestorationInput input) {
- LOG.info("RPC service restoration received");
- String message = "";
- String serviceName = input.getServiceName();
- Optional<Services> servicesObject = this.serviceDataStoreOperations.getService(serviceName);
- if (servicesObject.isPresent()) {
- Services service = servicesObject.get();
- State state = service.getOperationalState();
- if (state != State.InService) {
- ServiceDeleteInputBuilder deleteInputBldr = new ServiceDeleteInputBuilder();
- DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
- OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
- DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
- deleteInputBldr.setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder()
- .setServiceName(serviceName).setDueDate(datetime)
- .setTailRetention(TailRetention.No).build());
- SdncRequestHeaderBuilder sdncBuilder = new SdncRequestHeaderBuilder()
- .setNotificationUrl(service.getSdncRequestHeader().getNotificationUrl())
- .setRequestId(service.getSdncRequestHeader().getRequestId())
- .setRequestSystemId(service.getSdncRequestHeader().getRequestSystemId())
- .setRpcAction(RpcActions.ServiceDelete);
- deleteInputBldr.setSdncRequestHeader(sdncBuilder.build());
- ServiceInput serviceInput = new ServiceInput(deleteInputBldr.build());
- serviceInput.setServiceAEnd(service.getServiceAEnd());
- serviceInput.setServiceZEnd(service.getServiceZEnd());
- serviceInput.setConnectionType(service.getConnectionType());
- HardConstraints hardConstraints = service.getHardConstraints();
- if (hardConstraints != null) {
- SoftConstraints softConstraints = service.getSoftConstraints();
- if (softConstraints != null) {
- LOG.info("converting hard constraints to soft constraints ...");
- serviceInput.setSoftConstraints(
- DowngradeConstraints.updateSoftConstraints(hardConstraints, softConstraints));
- serviceInput.setHardConstraints(DowngradeConstraints.downgradeHardConstraints(hardConstraints));
- } else {
- LOG.warn("service '{}' SoftConstraints is not set !", serviceName);
- serviceInput.setSoftConstraints(DowngradeConstraints.convertToSoftConstraints(hardConstraints));
- serviceInput.setHardConstraints(DowngradeConstraints.downgradeHardConstraints(hardConstraints));
- }
- } else {
- LOG.warn("service '{}' HardConstraints is not set !", serviceName);
- }
- this.pceListenerImpl.setInput(serviceInput);
- this.pceListenerImpl.setServiceReconfigure(true);
- this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
- this.rendererListenerImpl.setServiceInput(serviceInput);
- this.rendererListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017
- .ServiceDeleteInput serviceDeleteInput = ModelMappingUtils.createServiceDeleteInput(
- new ServiceInput(deleteInputBldr.build()));
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017
- .ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(serviceDeleteInput,
- ServiceNotificationTypes.ServiceDeleteResult);
- if (output != null) {
- LOG.info("Service present in datastore, service-restore in progress...");
- ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
- return ModelMappingUtils.createRestoreServiceReply(common.getResponseMessage(),
- RpcStatus.Successful);
- } else {
- return ModelMappingUtils.createRestoreServiceReply("Renderer service delete failed !",
- RpcStatus.Failed);
- }
- } else {
- LOG.error("Service '{}' is in 'inService' state", input.getServiceName());
- message = "Service '" + input.getServiceName() + "' is in 'inService' state";
- return ModelMappingUtils.createRestoreServiceReply(message, RpcStatus.Failed);
- }
- } else {
- LOG.error("Service '{}' is not present", input.getServiceName());
- message = "Service '" + input.getServiceName() + "' is not present";
- return ModelMappingUtils.createRestoreServiceReply(message, RpcStatus.Failed);
- }
- }
-
- @Override
- public ListenableFuture<RpcResult<EquipmentNotificationOutput>>
- equipmentNotification(EquipmentNotificationInput input) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public ListenableFuture<RpcResult<ServiceRerouteConfirmOutput>>
- serviceRerouteConfirm(ServiceRerouteConfirmInput input) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public ListenableFuture<RpcResult<ServiceRerouteOutput>> serviceReroute(ServiceRerouteInput input) {
- LOG.info("RPC service reroute received");
- String message = "";
- Optional<Services> servicesObject = this.serviceDataStoreOperations.getService(input.getServiceName());
- if (servicesObject.isPresent()) {
- Services service = servicesObject.get();
- ServiceDeleteInputBuilder deleteInputBldr = new ServiceDeleteInputBuilder();
- DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
- OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
- DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
- deleteInputBldr.setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder()
- .setServiceName(input.getServiceName()).setDueDate(datetime)
- .setTailRetention(TailRetention.No).build());
- SdncRequestHeaderBuilder sdncBuilder = new SdncRequestHeaderBuilder()
- .setNotificationUrl(service.getSdncRequestHeader().getNotificationUrl())
- .setRequestId(service.getSdncRequestHeader().getRequestId())
- .setRequestSystemId(service.getSdncRequestHeader().getRequestSystemId())
- .setRpcAction(RpcActions.ServiceDelete);
- deleteInputBldr.setSdncRequestHeader(sdncBuilder.build());
- ServiceInput serviceInput = new ServiceInput(deleteInputBldr.build());
- serviceInput.setServiceAEnd(service.getServiceAEnd());
- serviceInput.setServiceZEnd(service.getServiceZEnd());
- serviceInput.setConnectionType(service.getConnectionType());
- this.pceListenerImpl.setInput(serviceInput);
- this.pceListenerImpl.setServiceReconfigure(true);
- this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
- this.rendererListenerImpl.setServiceInput(serviceInput);
- this.rendererListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017
- .ServiceDeleteInput serviceDeleteInput = ModelMappingUtils.createServiceDeleteInput(
- new ServiceInput(deleteInputBldr.build()));
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017
- .ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(serviceDeleteInput,
- ServiceNotificationTypes.ServiceDeleteResult);
- if (output != null) {
- LOG.info("Service present in datastore, service-reroute in progress...");
- ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
- return ModelMappingUtils.createRerouteServiceReply(input, common.getAckFinalIndicator(),
- common.getResponseMessage(), RpcStatus.Successful);
- } else {
- return ModelMappingUtils.createRerouteServiceReply(input, ResponseCodes.FINAL_ACK_YES,
- "Renderer service delete failed !", RpcStatus.Failed);
- }
- } else {
- LOG.error("Service '{}' is not present", input.getServiceName());
- message = "Service '" + input.getServiceName() + "' is not present";
- return ModelMappingUtils.createRerouteServiceReply(input, ResponseCodes.FINAL_ACK_NO, message,
- RpcStatus.Failed);
+ this.networkModelListenerImpl = networkModelListenerImpl;
+ this.catalogDataStoreOperations = catalogDataStoreOperations;
+ this.notificationPublishService = notificationPublishService;
+ this.pceServiceWrapper = new PCEServiceWrapper(pathComputationService, notificationPublishService);
+ this.rendererServiceWrapper = new RendererServiceWrapper(rendererServiceOperations, notificationPublishService);
+ this.reg = rpcProviderService.registerRpcImplementations(registerRPCs());
+ LOG.info("ServicehandlerImpl Initiated");
+ }
+
+ @Deactivate
+ public void close() {
+ this.reg.close();
+ LOG.info("ServicehandlerImpl Closed");
+ }
+
+ public Registration getRegisteredRpc() {
+ return reg;
+ }
+
+ private ImmutableClassToInstanceMap<Rpc<?, ?>> registerRPCs() {
+ return ImmutableClassToInstanceMap.<Rpc<?, ?>>builder()
+ .put(ServiceCreate.class, new ServiceCreateImpl(serviceDataStoreOperations, pceListenerImpl,
+ rendererListenerImpl, networkModelListenerImpl, pceServiceWrapper, notificationPublishService))
+ .put(ServiceDelete.class, new ServiceDeleteImpl(serviceDataStoreOperations, pceListenerImpl,
+ rendererListenerImpl, networkModelListenerImpl, rendererServiceWrapper, notificationPublishService))
+ .put(ServiceFeasibilityCheck.class, new ServiceFeasibilityCheckImpl(serviceDataStoreOperations,
+ pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, pceServiceWrapper))
+ .put(ServiceReconfigure.class, new ServiceReconfigureImpl(serviceDataStoreOperations, pceListenerImpl,
+ rendererListenerImpl, networkModelListenerImpl, rendererServiceWrapper))
+ .put(ServiceRestoration.class, new ServiceRestorationImpl(serviceDataStoreOperations, pceListenerImpl,
+ rendererListenerImpl, networkModelListenerImpl, rendererServiceWrapper))
+ .put(ServiceReroute.class, new ServiceRerouteImpl(serviceDataStoreOperations, pceServiceWrapper))
+ .put(TempServiceCreate.class, new TempServiceCreateImpl(serviceDataStoreOperations, pceListenerImpl,
+ rendererListenerImpl, networkModelListenerImpl, pceServiceWrapper))
+ .put(TempServiceDelete.class, new TempServiceDeleteImpl(serviceDataStoreOperations, pceListenerImpl,
+ rendererListenerImpl, rendererServiceWrapper))
+ .put(AddOpenroadmOperationalModesToCatalog.class,
+ new AddOpenroadmOperationalModesToCatalogImpl(catalogDataStoreOperations))
+ .put(AddSpecificOperationalModesToCatalog.class,
+ new AddSpecificOperationalModesToCatalogImpl(catalogDataStoreOperations))
+ .build();
+ }
+
+ // This is class is public so that these messages can be accessed from Junit (avoid duplications).
+ public static final class LogMessages {
+
+ public static final String PCE_CALLING;
+ public static final String ABORT_PCE_FAILED;
+ public static final String PCE_FAILED;
+ public static final String ABORT_SERVICE_NON_COMPLIANT;
+ public static final String SERVICE_NON_COMPLIANT;
+ public static final String RENDERER_DELETE_FAILED;
+ public static final String ABORT_VALID_FAILED;
+ public static final String ABORT_OR_TO_CATALOG_FAILED;
+ public static final String ABORT_SPECIFIC_TO_CATALOG_FAILED;
+
+ // Static blocks are generated once and spare memory.
+ static {
+ PCE_CALLING = "Calling PCE";
+ ABORT_PCE_FAILED = "Aborting: PCE calculation failed ";
+ PCE_FAILED = "PCE calculation failed";
+ ABORT_SERVICE_NON_COMPLIANT = "Aborting: non-compliant service ";
+ SERVICE_NON_COMPLIANT = "non-compliant service";
+ RENDERER_DELETE_FAILED = "Renderer service delete failed";
+ ABORT_VALID_FAILED = "Aborting: validation of service create request failed";
+ ABORT_OR_TO_CATALOG_FAILED = "Aborting: validation of add OR to catalog request failed";
+ ABORT_SPECIFIC_TO_CATALOG_FAILED = "Aborting: validation of add Specific to catalog request failed";