--- /dev/null
+/*
+ * Copyright © 2017 Orange, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+
+package org.opendaylight.transportpce.stubpce.impl;
+
+import java.util.concurrent.Future;
+
+import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
+import org.opendaylight.transportpce.stubpce.CompliancyCheck;
+import org.opendaylight.transportpce.stubpce.SendingPceRPCs;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.CancelResourceReserveInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.CancelResourceReserveOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.CancelResourceReserveOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.ServicePathRpcResult;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.ServicePathRpcResultBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.StubpceService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.RpcStatusEx;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.ServicePathNotificationTypes;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.response.parameters.sp.response.parameters.PathDescriptionBuilder;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/*
+ * Class to implement
+ * StubpceService
+ * StubpceListener.
+ *
+ * @author Martial Coulibaly ( martial.coulibaly@gfi.com ) on behalf of Orange
+ *
+ */
+
+public class StubpceImpl implements StubpceService {
+
+ /* Logging. */
+ private static final Logger LOG = LoggerFactory.getLogger(StubpceImpl.class);
+
+ private CompliancyCheck compliancyCheck;
+ /* send notification. */
+ private NotificationPublishService notificationPublishService;
+ private ServicePathRpcResult notification;
+
+ public StubpceImpl(NotificationPublishService notificationPublishService) {
+ this.notificationPublishService = notificationPublishService;
+ }
+
+ @Override
+ public Future<RpcResult<CancelResourceReserveOutput>> cancelResourceReserve(CancelResourceReserveInput input) {
+ LOG.info("RPC cancelResourceReserve request received");
+ String message = "";
+
+ notification = new ServicePathRpcResultBuilder()
+ .setNotificationType(ServicePathNotificationTypes.CancelResourceReserve)
+ .setServiceName(input.getServiceName())
+ .setStatus(RpcStatusEx.Pending)
+ .setStatusMessage("Service compliant, submitting cancelResourceReserve Request ...")
+ .build();
+ try {
+ notificationPublishService.putNotification(notification);
+ } catch (InterruptedException e) {
+ LOG.info("notification offer rejected : " + e);
+ }
+
+ SendingPceRPCs sendingPCE = new SendingPceRPCs();
+ sendingPCE.cancelResourceReserve();
+ if (sendingPCE.getSuccess()) {
+ message = "ResourceReserve cancelled ! ";
+ } else {
+ message = "Cancelling ResourceReserve failed ! ";
+ }
+ LOG.info(message);
+ ConfigurationResponseCommonBuilder configurationResponseCommon = new ConfigurationResponseCommonBuilder();
+ configurationResponseCommon
+ .setAckFinalIndicator("Yes")
+ .setRequestId(input.getServiceHandlerHeader().getRequestId())
+ .setResponseCode("200")
+ .setResponseMessage("")
+ .setResponseMessage(message);
+ CancelResourceReserveOutputBuilder output = new CancelResourceReserveOutputBuilder();
+ output
+ .setConfigurationResponseCommon(configurationResponseCommon.build());
+ return RpcResultBuilder.success(output.build()).buildFuture();
+ }
+
+
+ @Override
+ public Future<RpcResult<PathComputationRequestOutput>> pathComputationRequest(PathComputationRequestInput input) {
+ LOG.info("RPC pathcomputation request received");
+ String message = "";
+ PathComputationRequestOutputBuilder output = new PathComputationRequestOutputBuilder();
+ ConfigurationResponseCommonBuilder configurationResponseCommon = new ConfigurationResponseCommonBuilder();
+
+ compliancyCheck = new CompliancyCheck(input);
+ if (!compliancyCheck.check()) {
+ configurationResponseCommon
+ .setAckFinalIndicator("Yes")
+ .setRequestId(input.getServiceHandlerHeader().getRequestId())
+ .setResponseCode("Path not calculated")
+ .setResponseMessage(compliancyCheck.getMessage());
+
+ output
+ .setConfigurationResponseCommon(configurationResponseCommon.build())
+ .setResponseParameters(null);
+
+ return RpcResultBuilder.success(output.build()).buildFuture();
+ }
+ notification = new ServicePathRpcResultBuilder()
+ .setNotificationType(ServicePathNotificationTypes.PathComputationRequest)
+ .setServiceName(input.getServiceName())
+ .setStatus(RpcStatusEx.Pending)
+ .setStatusMessage("Service compliant, submitting pathComputation Request ...")
+ .build();
+ try {
+ notificationPublishService.putNotification(notification);
+ } catch (InterruptedException e) {
+ LOG.info("notification offer rejected : " + e);
+ }
+
+ SendingPceRPCs sendingPCE = new SendingPceRPCs();
+ sendingPCE.pathComputation();
+ if (sendingPCE.getSuccess()) {
+ message = "Path Computated !";
+ ServicePathRpcResultBuilder tmp = new ServicePathRpcResultBuilder()
+ .setNotificationType(ServicePathNotificationTypes.PathComputationRequest)
+ .setServiceName(input.getServiceName())
+ .setStatus(RpcStatusEx.Successful)
+ .setStatusMessage(message);
+ PathDescriptionBuilder path = sendingPCE.getPathDescription();
+ if (path != null) {
+ PathDescription pathDescription = new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce
+ .stubpce.rev170426.service.path.rpc.result.PathDescriptionBuilder()
+ .setAToZDirection(path.getAToZDirection())
+ .setZToADirection(path.getZToADirection())
+ .build();
+ tmp.setPathDescription(pathDescription);
+ }
+ notification = tmp.build();
+ try {
+ notificationPublishService.putNotification(notification);
+ } catch (InterruptedException e) {
+ LOG.info("notification offer rejected : " + e);
+ }
+ } else {
+ message = "Path Computating failed !";
+ }
+ LOG.info(message);
+ configurationResponseCommon
+ .setAckFinalIndicator("Yes")
+ .setRequestId(input.getServiceHandlerHeader().getRequestId())
+ .setResponseCode("200")
+ .setResponseMessage(message);
+
+ output
+ .setConfigurationResponseCommon(configurationResponseCommon.build());
+ return RpcResultBuilder.success(output.build()).buildFuture();
+
+ }
+}