1 package org.onap.sdnc.northbound;
3 import java.text.DateFormat;
4 import java.text.SimpleDateFormat;
6 import java.util.Properties;
7 import java.util.TimeZone;
8 import java.util.concurrent.ExecutionException;
9 import java.util.concurrent.ExecutorService;
10 import java.util.concurrent.Executors;
11 import java.util.concurrent.Future;
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
15 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
16 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
17 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
18 import org.opendaylight.controller.md.sal.common.api.data.OptimisticLockFailedException;
19 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
20 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
21 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
22 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ContrailRouteTopologyOperationInput;
23 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ContrailRouteTopologyOperationInputBuilder;
24 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ContrailRouteTopologyOperationOutput;
25 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ContrailRouteTopologyOperationOutputBuilder;
26 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.GENERICRESOURCEAPIService;
27 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.NetworkTopologyOperationInput;
28 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.NetworkTopologyOperationInputBuilder;
29 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.NetworkTopologyOperationOutput;
30 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.NetworkTopologyOperationOutputBuilder;
31 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadNetworkTopologyOperationInput;
32 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadNetworkTopologyOperationInputBuilder;
33 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadNetworkTopologyOperationOutput;
34 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadNetworkTopologyOperationOutputBuilder;
35 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadVnfTopologyOperationInput;
36 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadVnfTopologyOperationInputBuilder;
37 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadVnfTopologyOperationOutput;
38 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadVnfTopologyOperationOutputBuilder;
39 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadVnfs;
40 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadVnfsBuilder;
41 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.SecurityZoneTopologyOperationInput;
42 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.SecurityZoneTopologyOperationInputBuilder;
43 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.SecurityZoneTopologyOperationOutput;
44 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.SecurityZoneTopologyOperationOutputBuilder;
45 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ServiceTopologyOperationInput;
46 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ServiceTopologyOperationInputBuilder;
47 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ServiceTopologyOperationOutput;
48 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ServiceTopologyOperationOutputBuilder;
49 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.Services;
50 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ServicesBuilder;
51 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VfModuleTopologyOperationInput;
52 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VfModuleTopologyOperationInputBuilder;
53 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VfModuleTopologyOperationOutput;
54 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VfModuleTopologyOperationOutputBuilder;
55 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VnfTopologyOperationInput;
56 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VnfTopologyOperationInputBuilder;
57 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VnfTopologyOperationOutput;
58 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VnfTopologyOperationOutputBuilder;
59 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.contrail.route.response.information.ContrailRouteResponseInformationBuilder;
60 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.network.response.information.NetworkResponseInformationBuilder;
61 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.preload.data.PreloadData;
62 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.preload.data.PreloadDataBuilder;
63 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.preload.model.information.VnfPreloadList;
64 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.preload.model.information.VnfPreloadListBuilder;
65 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.preload.model.information.VnfPreloadListKey;
66 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.request.information.RequestInformation;
67 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.sdnc.request.header.SdncRequestHeader;
68 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.sdnc.request.header.SdncRequestHeader.SvcAction;
69 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.security.zone.response.information.SecurityZoneResponseInformationBuilder;
70 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.data.ServiceData;
71 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.data.ServiceDataBuilder;
72 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.model.infrastructure.Service;
73 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.model.infrastructure.ServiceBuilder;
74 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.model.infrastructure.ServiceKey;
75 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.response.information.ServiceResponseInformationBuilder;
76 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.status.ServiceStatus.RequestStatus;
77 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.status.ServiceStatus.RpcAction;
78 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.status.ServiceStatusBuilder;
79 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
80 import org.opendaylight.yangtools.yang.common.RpcResult;
81 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
82 import org.slf4j.Logger;
83 import org.slf4j.LoggerFactory;
85 import com.google.common.base.Optional;
86 import com.google.common.util.concurrent.CheckedFuture;
87 import com.google.common.util.concurrent.Futures;
88 import com.google.common.util.concurrent.SettableFuture;
92 * Defines a base implementation for your provider. This class extends from a helper class
93 * which provides storage for the most commonly used components of the MD-SAL. Additionally the
94 * base class provides some basic logging and initialization / clean up methods.
96 * To use this, copy and paste (overwrite) the following method into the TestApplicationProviderModule
97 * class which is auto generated under src/main/java in this project
98 * (created only once during first compilation):
103 public java.lang.AutoCloseable createInstance() {
105 //final GENERIC-RESOURCE-APIProvider provider = new GENERIC-RESOURCE-APIProvider();
106 final GenericResourceApiProvider provider = new GenericResourceApiProvider();
107 provider.setDataBroker( getDataBrokerDependency() );
108 provider.setNotificationService( getNotificationServiceDependency() );
109 provider.setRpcRegistry( getRpcRegistryDependency() );
110 provider.initialize();
111 return new AutoCloseable() {
114 public void close() throws Exception {
115 //TODO: CLOSE ANY REGISTRATION OBJECTS CREATED USING ABOVE BROKER/NOTIFICATION
116 //SERVIE/RPC REGISTRY
126 public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURCEAPIService{
128 private final Logger log = LoggerFactory.getLogger( GenericResourceApiProvider.class );
129 private final String appName = "generic-resource-api";
131 private final ExecutorService executor;
133 protected DataBroker dataBroker;
134 protected NotificationPublishService notificationService;
135 protected RpcProviderRegistry rpcRegistry;
136 protected BindingAwareBroker.RpcRegistration<GENERICRESOURCEAPIService> rpcRegistration;
138 public GenericResourceApiProvider(DataBroker dataBroker2,
139 NotificationPublishService notificationPublishService,
140 RpcProviderRegistry rpcProviderRegistry) {
141 this.log.info( "Creating provider for " + appName );
142 executor = Executors.newFixedThreadPool(1);
143 dataBroker = dataBroker2;
144 notificationService = notificationPublishService;
145 rpcRegistry = rpcProviderRegistry;
150 public void initialize(){
151 log.info( "Initializing provider for " + appName );
152 // Create the top level containers
155 GenericResourceApiUtil.loadProperties();
156 } catch (Exception e) {
157 log.error("Caught Exception while trying to load properties file");
159 rpcRegistration = rpcRegistry.addRpcImplementation(GENERICRESOURCEAPIService.class, this);
161 log.info( "Initialization complete for " + appName );
165 protected void initializeChild() {
166 //Override if you have custom initialization intelligence
171 public void close() throws Exception {
172 log.info( "Closing provider for " + appName );
174 rpcRegistration.close();
175 log.info( "Successfully closed provider for " + appName );
178 private static class Iso8601Util
180 private static TimeZone tz = TimeZone.getTimeZone("UTC");
181 private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
183 static { df.setTimeZone(tz); }
185 private static String now() {
186 return df.format(new Date());
191 public void setDataBroker(DataBroker dataBroker) {
192 this.dataBroker = dataBroker;
193 if( log.isDebugEnabled() ){
194 log.debug( "DataBroker set to " + (dataBroker==null?"null":"non-null") + "." );
198 public void setNotificationService(
199 NotificationPublishService notificationService) {
200 this.notificationService = notificationService;
201 if( log.isDebugEnabled() ){
202 log.debug( "Notification Service set to " + (notificationService==null?"null":"non-null") + "." );
206 public void setRpcRegistry(RpcProviderRegistry rpcRegistry) {
207 this.rpcRegistry = rpcRegistry;
208 if( log.isDebugEnabled() ){
209 log.debug( "RpcRegistry set to " + (rpcRegistry==null?"null":"non-null") + "." );
213 private void createContainers() {
215 final WriteTransaction t = dataBroker.newReadWriteTransaction();
217 // Create the service-instance container
218 t.merge(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(Services.class),
219 new ServicesBuilder().build());
220 t.merge(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Services.class),
221 new ServicesBuilder().build());
223 // Create the PreloadVnfs container
224 t.merge(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(PreloadVnfs.class),
225 new PreloadVnfsBuilder().build());
226 t.merge(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(PreloadVnfs.class),
227 new PreloadVnfsBuilder().build());
230 CheckedFuture<Void, TransactionCommitFailedException> checkedFuture = t.submit();
232 log.info("Create Containers succeeded!: ");
234 } catch (InterruptedException | ExecutionException e) {
235 log.error("Create Containers Failed: " + e);
240 private void setServiceStatus(ServiceStatusBuilder serviceStatusBuilder, String errorCode, String errorMessage, String ackFinal)
242 serviceStatusBuilder.setResponseCode(errorCode);
243 serviceStatusBuilder.setResponseMessage(errorMessage);
244 serviceStatusBuilder.setFinalIndicator(ackFinal);
245 serviceStatusBuilder.setResponseTimestamp(Iso8601Util.now());
248 private void setServiceStatus(ServiceStatusBuilder serviceStatusBuilder, RequestInformation requestInformation)
250 if (requestInformation != null && requestInformation.getRequestAction() != null) {
251 serviceStatusBuilder.setAction(requestInformation.getRequestAction().toString());
255 if (requestInformation != null && requestInformation.getRequestSubAction() != null) {
256 switch (requestInformation.getRequestSubAction())
259 serviceStatusBuilder.setVnfsdnSubaction(VnfsdnSubaction.SUPP);
262 serviceStatusBuilder.setVnfsdnSubaction(VnfsdnSubaction.CANCEL);
265 log.error("Unknown RequestSubAction: " + requestInformation.getRequestSubAction() );
272 private void setServiceStatus(ServiceStatusBuilder serviceStatusBuilder, SdncRequestHeader requestHeader)
274 if (requestHeader != null && requestHeader.getSvcAction() != null) {
275 switch (requestHeader.getSvcAction())
278 serviceStatusBuilder.setRpcAction(RpcAction.Assign);
281 serviceStatusBuilder.setRpcAction(RpcAction.Unassign);
284 serviceStatusBuilder.setRpcAction(RpcAction.Activate);
287 serviceStatusBuilder.setRpcAction(RpcAction.Deactivate);
290 serviceStatusBuilder.setRpcAction(RpcAction.Delete);
293 log.error("Unknown SvcAction: " + requestHeader.getSvcAction() );
299 private void getServiceData(String siid, ServiceDataBuilder serviceDataBuilder)
302 getServiceData(siid,serviceDataBuilder,LogicalDatastoreType.CONFIGURATION);
306 private void getServiceData(String siid, ServiceDataBuilder serviceDataBuilder, LogicalDatastoreType type)
308 // See if any data exists yet for this siid, if so grab it.
309 InstanceIdentifier serviceInstanceIdentifier =
310 InstanceIdentifier.<Services>builder(Services.class)
311 .child(Service.class, new ServiceKey(siid)).build();
312 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
313 Optional<Service> data = null;
315 data = (Optional<Service>) readTx.read(type, serviceInstanceIdentifier).get();
316 } catch (InterruptedException | ExecutionException e) {
317 log.error("Caught Exception reading MD-SAL ("+type+") for ["+siid+"] " ,e);
320 if (data.isPresent()) {
321 ServiceData serviceData = (ServiceData) data.get().getServiceData();
322 if (serviceData != null) {
323 log.info("Read MD-SAL ("+type+") data for ["+siid+"] ServiceData: " + serviceData);
324 serviceDataBuilder.setSdncRequestHeader(serviceData.getSdncRequestHeader());
325 serviceDataBuilder.setRequestInformation(serviceData.getRequestInformation());
326 serviceDataBuilder.setServiceInformation(serviceData.getServiceInformation());
327 serviceDataBuilder.setServiceRequestInput(serviceData.getServiceRequestInput());
328 serviceDataBuilder.setServiceTopology(serviceData.getServiceTopology());
329 serviceDataBuilder.setServiceLevelOperStatus(serviceData.getServiceLevelOperStatus());
330 serviceDataBuilder.setNetworks(serviceData.getNetworks());
331 serviceDataBuilder.setVnfs(serviceData.getVnfs());
332 serviceDataBuilder.setProvidedAllottedResources(serviceData.getProvidedAllottedResources());
333 serviceDataBuilder.setConsumedAllottedResources(serviceData.getConsumedAllottedResources());
334 // service-instance-id needs to be set
336 log.info("No service-data found in MD-SAL ("+type+") for ["+siid+"] ");
339 log.info("No data found in MD-SAL ("+type+") for ["+siid+"] ");
343 private void getPreloadData(String vnf_name, String vnf_type, PreloadDataBuilder preloadDataBuilder)
346 getPreloadData(vnf_name, vnf_type ,preloadDataBuilder,LogicalDatastoreType.CONFIGURATION);
349 private void getPreloadData(String preload_name, String preload_type, PreloadDataBuilder preloadDataBuilder, LogicalDatastoreType type)
351 // See if any data exists yet for this name/type, if so grab it.
352 InstanceIdentifier preloadInstanceIdentifier =
353 InstanceIdentifier.<PreloadVnfs>builder(PreloadVnfs.class)
354 .child(VnfPreloadList.class, new VnfPreloadListKey(preload_name, preload_type)).build();
355 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
356 Optional<VnfPreloadList> data = null;
358 data = (Optional<VnfPreloadList>) readTx.read(type, preloadInstanceIdentifier).get();
359 } catch (InterruptedException | ExecutionException e) {
360 log.error("Caught Exception reading MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] " ,e);
363 if ( data.isPresent()) {
364 PreloadData preloadData = (PreloadData) data.get().getPreloadData();
365 if (preloadData != null) {
366 log.info("Read MD-SAL ("+type+") data for ["+preload_name+","+preload_type+"] PreloadData: " + preloadData);
367 preloadDataBuilder.setVnfTopologyInformation(preloadData.getVnfTopologyInformation());
368 preloadDataBuilder.setNetworkTopologyInformation(preloadData.getNetworkTopologyInformation());
369 preloadDataBuilder.setOperStatus(preloadData.getOperStatus());
371 log.info("No preload-data found in MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] ");
374 log.info("No data found in MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] ");
378 private void SaveService (final Service entry, boolean merge, LogicalDatastoreType storeType) throws IllegalStateException {
379 // Each entry will be identifiable by a unique key, we have to create that identifier
380 InstanceIdentifier.InstanceIdentifierBuilder<Service> serviceBuilder =
381 InstanceIdentifier.<Services>builder(Services.class)
382 .child(Service.class, entry.getKey());
383 InstanceIdentifier<Service> path = serviceBuilder.build();
388 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
390 tx.merge(storeType, path, entry);
392 tx.put(storeType, path, entry);
394 tx.submit().checkedGet();
395 log.debug("Update DataStore succeeded");
397 } catch (final TransactionCommitFailedException e) {
398 if(e instanceof OptimisticLockFailedException) {
400 log.debug("Got OptimisticLockFailedException on last try - failing ");
401 throw new IllegalStateException(e);
403 log.debug("Got OptimisticLockFailedException - trying again ");
405 log.debug("Update DataStore failed");
406 throw new IllegalStateException(e);
412 private void DeleteService(final Service entry, LogicalDatastoreType storeType) throws IllegalStateException {
413 // Each entry will be identifiable by a unique key, we have to create
415 InstanceIdentifier.InstanceIdentifierBuilder<Service> serviceListIdBuilder = InstanceIdentifier.<Services> builder(Services.class).child(Service.class, entry.getKey());
416 InstanceIdentifier<Service> path = serviceListIdBuilder.build();
421 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
422 tx.delete(storeType, path);
423 tx.submit().checkedGet();
424 log.debug("DataStore delete succeeded");
426 } catch (final TransactionCommitFailedException e) {
427 if (e instanceof OptimisticLockFailedException) {
429 log.debug("Got OptimisticLockFailedException on last try - failing ");
430 throw new IllegalStateException(e);
432 log.debug("Got OptimisticLockFailedException - trying again ");
434 log.debug("Update DataStore failed");
435 throw new IllegalStateException(e);
441 private void SavePreloadList(final VnfPreloadList entry, boolean merge, LogicalDatastoreType storeType) throws IllegalStateException{
443 // Each entry will be identifiable by a unique key, we have to create that identifier
444 InstanceIdentifier.InstanceIdentifierBuilder<VnfPreloadList> vnfPreloadListBuilder =
445 InstanceIdentifier.<PreloadVnfs>builder(PreloadVnfs.class)
446 .child(VnfPreloadList.class, entry.getKey());
447 InstanceIdentifier<VnfPreloadList> path = vnfPreloadListBuilder.build();
451 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
453 tx.merge(storeType, path, entry);
455 tx.put(storeType, path, entry);
457 tx.submit().checkedGet();
458 log.debug("Update DataStore succeeded");
460 } catch (final TransactionCommitFailedException e) {
461 if(e instanceof OptimisticLockFailedException) {
463 log.debug("Got OptimisticLockFailedException on last try - failing ");
464 throw new IllegalStateException(e);
466 log.debug("Got OptimisticLockFailedException - trying again ");
468 log.debug("Update DataStore failed");
469 throw new IllegalStateException(e);
476 public Future<RpcResult<ServiceTopologyOperationOutput>> serviceTopologyOperation(
477 ServiceTopologyOperationInput input) {
479 final String SVC_OPERATION = "service-topology-operation";
480 ServiceData serviceData = null;
481 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
482 Properties parms = new Properties();
484 log.info( SVC_OPERATION +" called." );
485 // create a new response object
486 ServiceTopologyOperationOutputBuilder responseBuilder = new ServiceTopologyOperationOutputBuilder();
489 input.getServiceInformation() == null ||
490 input.getServiceInformation().getServiceInstanceId() == null ||
491 input.getServiceInformation().getServiceInstanceId().length() == 0)
493 log.debug("exiting " +SVC_OPERATION+ " because of null or empty service-instance-id");
494 responseBuilder.setResponseCode("404");
495 responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
496 responseBuilder.setAckFinalIndicator("Y");
497 RpcResult<ServiceTopologyOperationOutput> rpcResult =
498 RpcResultBuilder.<ServiceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
499 return Futures.immediateFuture(rpcResult);
502 // Grab the service instance ID from the input buffer
503 String siid = input.getServiceInformation().getServiceInstanceId();
505 if (input.getSdncRequestHeader() != null) {
506 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
509 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
510 getServiceData(siid,serviceDataBuilder);
512 ServiceDataBuilder operDataBuilder = new ServiceDataBuilder();
513 getServiceData(siid,operDataBuilder, LogicalDatastoreType.OPERATIONAL );
515 // Set the serviceStatus based on input
516 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
517 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
520 // setup a service-data object builder
521 // ACTION service-topology-operation
523 // USES uses service-operation-information
525 // uses topology-response-common;
526 // uses service-response-information;
529 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+siid+"] input: " + input);
530 ServiceTopologyOperationInputBuilder inputBuilder = new ServiceTopologyOperationInputBuilder(input);
531 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
533 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+siid+"] operational-data: " + operDataBuilder.build());
534 GenericResourceApiUtil.toProperties(parms, "operational-data", operDataBuilder);
536 // Call SLI sync method
537 // Get SvcLogicService reference
539 GenericResourceApiSvcLogicServiceClient svcLogicClient = new GenericResourceApiSvcLogicServiceClient();
540 Properties respProps = null;
542 String errorCode = "200";
543 String errorMessage = null;
544 String ackFinal = "Y";
545 String serviceObjectPath = null;
549 if (svcLogicClient.hasGraph(appName, SVC_OPERATION , null, "sync"))
554 respProps = svcLogicClient.execute(appName, SVC_OPERATION, null, "sync", serviceDataBuilder, parms);
558 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
559 errorMessage = e.getMessage();
563 errorMessage = "No service logic active for "+ appName +": '" + SVC_OPERATION + "'";
570 errorMessage = e.getMessage();
571 log.error("Caught exception looking for service logic", e);
575 if (respProps != null)
577 errorCode = respProps.getProperty("error-code");
578 errorMessage = respProps.getProperty("error-message");
579 ackFinal = respProps.getProperty("ack-final", "Y");
580 serviceObjectPath = respProps.getProperty("service-object-path");
583 setServiceStatus(serviceStatusBuilder,errorCode, errorMessage, ackFinal);
584 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
585 //serviceStatusBuilder.setRpcName(RpcName.ServiceTopologyOperation);
586 serviceStatusBuilder.setRpcName(SVC_OPERATION);
588 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
589 responseBuilder.setResponseCode(errorCode);
590 responseBuilder.setResponseMessage(errorMessage);
591 responseBuilder.setAckFinalIndicator(ackFinal);
593 ServiceBuilder serviceBuilder = new ServiceBuilder();
594 serviceBuilder.setServiceInstanceId(siid);
595 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
597 SaveService (serviceBuilder.build(), true,LogicalDatastoreType.CONFIGURATION);
598 } catch (Exception e) {
599 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] \n",e);
601 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
602 RpcResult<ServiceTopologyOperationOutput> rpcResult =
603 RpcResultBuilder.<ServiceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
604 return Futures.immediateFuture(rpcResult);
607 // Got success from SLI
609 serviceData = serviceDataBuilder.build();
610 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] ServiceData: " + serviceData);
613 ServiceBuilder serviceBuilder = new ServiceBuilder();
614 serviceBuilder.setServiceData(serviceData);
615 serviceBuilder.setServiceInstanceId(siid);
616 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
617 SaveService (serviceBuilder.build(), false,LogicalDatastoreType.CONFIGURATION);
619 if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null)
621 // Only update operational tree on delete
622 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete))
624 log.info("Delete from both CONFIGURATION and OPERATIONAL tree.");
625 DeleteService(serviceBuilder.build(), LogicalDatastoreType.OPERATIONAL);
626 DeleteService(serviceBuilder.build(), LogicalDatastoreType.CONFIGURATION);
630 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
631 serviceResponseInformationBuilder.setInstanceId(siid);
632 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
633 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
635 } catch (Exception e) {
636 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] \n",e);
637 responseBuilder.setResponseCode("500");
638 responseBuilder.setResponseMessage(e.toString());
639 responseBuilder.setAckFinalIndicator("Y");
640 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
641 RpcResult<ServiceTopologyOperationOutput> rpcResult =
642 RpcResultBuilder.<ServiceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
643 return Futures.immediateFuture(rpcResult);
647 responseBuilder.setResponseCode(errorCode);
648 responseBuilder.setAckFinalIndicator(ackFinal);
649 if (errorMessage != null)
651 responseBuilder.setResponseMessage(errorMessage);
653 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+siid+"] ");
654 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
656 RpcResult<ServiceTopologyOperationOutput> rpcResult =
657 RpcResultBuilder.<ServiceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
658 return Futures.immediateFuture(rpcResult);
662 public Future<RpcResult<VnfTopologyOperationOutput>> vnfTopologyOperation(
663 VnfTopologyOperationInput input) {
665 final String SVC_OPERATION = "vnf-topology-operation";
666 ServiceData serviceData = null;
667 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
668 Properties parms = new Properties();
670 log.info( SVC_OPERATION +" called." );
671 // create a new response object
672 VnfTopologyOperationOutputBuilder responseBuilder = new VnfTopologyOperationOutputBuilder();
675 input.getServiceInformation() == null ||
676 input.getServiceInformation().getServiceInstanceId() == null ||
677 input.getServiceInformation().getServiceInstanceId().length() == 0)
679 log.debug("exiting " +SVC_OPERATION+ " because of null or empty service-instance-id");
680 responseBuilder.setResponseCode("404");
681 responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
682 responseBuilder.setAckFinalIndicator("Y");
683 RpcResult<VnfTopologyOperationOutput> rpcResult =
684 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
686 return Futures.immediateFuture(rpcResult);
689 // Grab the service instance ID from the input buffer
690 String siid = input.getServiceInformation().getServiceInstanceId();
692 if (input.getSdncRequestHeader() != null) {
693 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
696 if(input.getVnfInformation() == null ||
697 input.getVnfInformation().getVnfId() == null ||
698 input.getVnfInformation().getVnfId().length() == 0)
700 log.debug("exiting " +SVC_OPERATION+ " because of null or empty vnf-id");
701 responseBuilder.setResponseCode("404");
702 responseBuilder.setResponseMessage("invalid input, null or empty vnf-id");
703 responseBuilder.setAckFinalIndicator("Y");
704 RpcResult<VnfTopologyOperationOutput> rpcResult =
705 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
706 return Futures.immediateFuture(rpcResult);
709 /* Mobility wont use vipr intf in 1707
711 String preload_name = null;
712 String preload_type = null;
713 if (input.getVnfRequestInput() != null &&
714 input.getVnfRequestInput().getVnfName() != null && input.getVnfRequestInput().getVnfName().length() != 0) {
715 preload_name = input.getVnfRequestInput().getVnfName();
717 if (input.getVnfInformation().getVnfType() != null &&
718 input.getVnfInformation().getVnfType().length() != 0) {
719 preload_type = input.getVnfInformation().getVnfType();
722 PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
723 if (preload_name != null && preload_type != null) {
724 getPreloadData(preload_name, preload_type, preloadDataBuilder);
727 log.info("vnf-name and vnf-type not present in the request");
731 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
732 getServiceData(siid,serviceDataBuilder);
734 ServiceDataBuilder operDataBuilder = new ServiceDataBuilder();
735 getServiceData(siid,operDataBuilder, LogicalDatastoreType.OPERATIONAL );
737 // Set the serviceStatus based on input
738 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
739 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
742 // setup a service-data object builder
743 // ACTION vnf-topology-operation
745 // USES sdnc-request-header;
746 // USES request-information;
747 // USES service-information;
748 // USES vnf-request-information
750 // USES vnf-topology-response-body;
751 // USES vnf-information
752 // USES service-information
754 // container service-data
755 // uses vnf-configuration-information;
758 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+siid+"] input: " + input);
759 VnfTopologyOperationInputBuilder inputBuilder = new VnfTopologyOperationInputBuilder(input);
760 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
762 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+siid+"] operational-data: " + operDataBuilder.build());
763 GenericResourceApiUtil.toProperties(parms, "operational-data", operDataBuilder);
766 log.info("Adding CONFIG data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preload-data: " + preloadDataBuilder.build());
767 GenericResourceApiUtil.toProperties(parms, "preload-data", preloadDataBuilder);
770 // Call SLI sync method
771 // Get SvcLogicService reference
773 GenericResourceApiSvcLogicServiceClient svcLogicClient = new GenericResourceApiSvcLogicServiceClient();
774 Properties respProps = null;
776 String errorCode = "200";
777 String errorMessage = null;
778 String ackFinal = "Y";
779 String serviceObjectPath = null;
783 if (svcLogicClient.hasGraph(appName, SVC_OPERATION , null, "sync"))
788 respProps = svcLogicClient.execute(appName, SVC_OPERATION, null, "sync", serviceDataBuilder, parms);
792 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
793 errorMessage = e.getMessage();
797 errorMessage = "No service logic active for "+ appName +": '" + SVC_OPERATION + "'";
804 errorMessage = e.getMessage();
805 log.error("Caught exception looking for service logic", e);
808 if (respProps != null)
810 errorCode = respProps.getProperty("error-code");
811 errorMessage = respProps.getProperty("error-message");
812 ackFinal = respProps.getProperty("ack-final", "Y");
813 serviceObjectPath = respProps.getProperty("vnf-object-path");
816 setServiceStatus(serviceStatusBuilder,errorCode, errorMessage, ackFinal);
817 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
818 //serviceStatusBuilder.setRpcName(RpcName.VnfTopologyOperation);
819 serviceStatusBuilder.setRpcName(SVC_OPERATION);
821 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
822 responseBuilder.setResponseCode(errorCode);
823 responseBuilder.setResponseMessage(errorMessage);
824 responseBuilder.setAckFinalIndicator(ackFinal);
826 ServiceBuilder serviceBuilder = new ServiceBuilder();
827 serviceBuilder.setServiceInstanceId(siid);
828 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
830 SaveService (serviceBuilder.build(), true,LogicalDatastoreType.CONFIGURATION);
831 if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null)
833 // Only update operational tree on activate or delete
834 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete) ||
835 input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))
837 log.info("Updating OPERATIONAL tree.");
838 SaveService (serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
841 } catch (Exception e) {
842 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] \n",e);
844 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
845 RpcResult<VnfTopologyOperationOutput> rpcResult =
846 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
848 return Futures.immediateFuture(rpcResult);
851 // Got success from SLI
853 serviceData = serviceDataBuilder.build();
854 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] ServiceData: " + serviceData);
857 ServiceBuilder serviceBuilder = new ServiceBuilder();
858 serviceBuilder.setServiceData(serviceData);
859 serviceBuilder.setServiceInstanceId(siid);
860 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
861 SaveService (serviceBuilder.build(), false,LogicalDatastoreType.CONFIGURATION);
863 if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null)
865 // Only update operational tree on Assign
866 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))
868 log.info("Updating OPERATIONAL tree.");
869 SaveService (serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
873 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
874 serviceResponseInformationBuilder.setInstanceId(siid);
875 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
876 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
878 } catch (Exception e) {
879 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] \n",e);
880 responseBuilder.setResponseCode("500");
881 responseBuilder.setResponseMessage(e.toString());
882 responseBuilder.setAckFinalIndicator("Y");
883 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
884 RpcResult<VnfTopologyOperationOutput> rpcResult =
885 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
886 return Futures.immediateFuture(rpcResult);
890 responseBuilder.setResponseCode(errorCode);
891 responseBuilder.setAckFinalIndicator(ackFinal);
892 if (errorMessage != null)
894 responseBuilder.setResponseMessage(errorMessage);
896 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+siid+"] ");
897 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
899 RpcResult<VnfTopologyOperationOutput> rpcResult =
900 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
902 return Futures.immediateFuture(rpcResult);
906 public Future<RpcResult<VfModuleTopologyOperationOutput>> vfModuleTopologyOperation(
907 VfModuleTopologyOperationInput input) {
909 final String SVC_OPERATION = "vf-module-topology-operation";
910 ServiceData serviceData = null;
911 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
912 Properties parms = new Properties();
914 log.info( SVC_OPERATION +" called." );
915 // create a new response object
916 VfModuleTopologyOperationOutputBuilder responseBuilder = new VfModuleTopologyOperationOutputBuilder();
919 input.getServiceInformation() == null ||
920 input.getServiceInformation().getServiceInstanceId() == null ||
921 input.getServiceInformation().getServiceInstanceId().length() == 0)
923 log.debug("exiting " +SVC_OPERATION+ " because of null or empty service-instance-id");
924 responseBuilder.setResponseCode("403");
925 responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
926 responseBuilder.setAckFinalIndicator("Y");
927 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
928 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
930 return Futures.immediateFuture(rpcResult);
933 if(input.getVnfInformation() == null ||
934 input.getVnfInformation().getVnfId() == null ||
935 input.getVnfInformation().getVnfId().length() == 0)
937 log.debug("exiting " +SVC_OPERATION+ " because of null or empty vnf-id");
938 responseBuilder.setResponseCode("403");
939 responseBuilder.setResponseMessage("invalid input, null or empty vnf-id");
940 responseBuilder.setAckFinalIndicator("Y");
941 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
942 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
943 return Futures.immediateFuture(rpcResult);
946 if(input.getVfModuleInformation() == null ||
947 input.getVfModuleInformation().getVfModuleId() == null ||
948 input.getVfModuleInformation().getVfModuleId().length() == 0)
950 log.debug("exiting " +SVC_OPERATION+ " because of null or empty vf-module-id");
951 responseBuilder.setResponseCode("403");
952 responseBuilder.setResponseMessage("invalid input, vf-module-id is null or empty");
953 responseBuilder.setAckFinalIndicator("Y");
954 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
955 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
956 return Futures.immediateFuture(rpcResult);
959 // Grab the service instance ID from the input buffer
960 String siid = input.getServiceInformation().getServiceInstanceId();
962 if (input.getSdncRequestHeader() != null) {
963 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
967 String preload_name = null;
968 String preload_type = null;
970 preload_name = input.getVfModuleRequestInput().getVfModuleName();
972 if(input.getVfModuleInformation().getVfModuleType() != null &&
973 input.getVfModuleInformation().getVfModuleType().length() != 0) {
974 preload_type = input.getVfModuleInformation().getVfModuleType();
977 PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
978 if (preload_name != null && preload_type != null) {
979 getPreloadData(preload_name, preload_type, preloadDataBuilder);
982 log.debug("vf-module-name and vf-module-type not present in the request.");
986 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
987 getServiceData(siid,serviceDataBuilder);
989 ServiceDataBuilder operDataBuilder = new ServiceDataBuilder();
990 getServiceData(siid,operDataBuilder, LogicalDatastoreType.OPERATIONAL );
992 // Set the serviceStatus based on input
993 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
994 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
997 // setup a service-data object builder
998 // ACTION vnf-topology-operation
1000 // USES sdnc-request-header;
1001 // USES request-information;
1002 // USES service-information;
1003 // USES vnf-request-information
1005 // USES vnf-topology-response-body;
1006 // USES vnf-information
1007 // USES service-information
1009 // container service-data
1010 // uses vnf-configuration-information;
1011 // uses oper-status;
1013 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+siid+"] input: " + input);
1014 VfModuleTopologyOperationInputBuilder inputBuilder = new VfModuleTopologyOperationInputBuilder(input);
1015 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
1017 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+siid+"] operational-data: " + operDataBuilder.build());
1018 GenericResourceApiUtil.toProperties(parms, "operational-data", operDataBuilder);
1021 log.info("Adding CONFIG data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preload-data: " +preloadDataBuilder.build());
1022 GenericResourceApiUtil.toProperties(parms, "preload-data", preloadDataBuilder);
1025 // Call SLI sync method
1026 // Get SvcLogicService reference
1028 GenericResourceApiSvcLogicServiceClient svcLogicClient = new GenericResourceApiSvcLogicServiceClient();
1029 Properties respProps = null;
1031 String errorCode = "200";
1032 String errorMessage = null;
1033 String ackFinal = "Y";
1034 String serviceObjectPath = null;
1038 if (svcLogicClient.hasGraph(appName, SVC_OPERATION , null, "sync"))
1043 respProps = svcLogicClient.execute(appName, SVC_OPERATION, null, "sync", serviceDataBuilder, parms);
1047 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
1048 errorMessage = e.getMessage();
1052 errorMessage = "No service logic active for "+ appName +": '" + SVC_OPERATION + "'";
1059 errorMessage = e.getMessage();
1060 log.error("Caught exception looking for service logic", e);
1063 if (respProps != null)
1065 errorCode = respProps.getProperty("error-code");
1066 errorMessage = respProps.getProperty("error-message");
1067 ackFinal = respProps.getProperty("ack-final", "Y");
1068 serviceObjectPath = respProps.getProperty("vf-module-object-path");
1071 setServiceStatus(serviceStatusBuilder,errorCode, errorMessage, ackFinal);
1072 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
1073 serviceStatusBuilder.setRpcName(SVC_OPERATION);
1075 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
1076 responseBuilder.setResponseCode(errorCode);
1077 responseBuilder.setResponseMessage(errorMessage);
1078 responseBuilder.setAckFinalIndicator(ackFinal);
1080 ServiceBuilder serviceBuilder = new ServiceBuilder();
1081 serviceBuilder.setServiceInstanceId(siid);
1082 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
1084 SaveService (serviceBuilder.build(), true,LogicalDatastoreType.CONFIGURATION);
1085 } catch (Exception e) {
1086 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] \n",e);
1088 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1089 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
1090 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1092 return Futures.immediateFuture(rpcResult);
1095 // Got success from SLI
1097 serviceData = serviceDataBuilder.build();
1098 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] ServiceData: " + serviceData);
1101 ServiceBuilder serviceBuilder = new ServiceBuilder();
1102 serviceBuilder.setServiceData(serviceData);
1103 //serviceBuilder.setServiceInstanceId(serviceData.getServiceTopology().getServiceTopologyIdentifier().getServiceInstanceId());
1104 serviceBuilder.setServiceInstanceId(siid);
1105 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
1106 SaveService (serviceBuilder.build(), false,LogicalDatastoreType.CONFIGURATION);
1108 if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null)
1110 // Only update operational tree on activate or delete
1111 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Unassign) ||
1112 input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))
1114 log.info("Updating OPERATIONAL tree.");
1115 SaveService (serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1119 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
1120 serviceResponseInformationBuilder.setInstanceId(siid);
1121 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
1122 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
1124 } catch (Exception e) {
1125 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] \n",e);
1126 responseBuilder.setResponseCode("500");
1127 responseBuilder.setResponseMessage(e.toString());
1128 responseBuilder.setAckFinalIndicator("Y");
1129 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1130 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
1131 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1132 return Futures.immediateFuture(rpcResult);
1136 responseBuilder.setResponseCode(errorCode);
1137 responseBuilder.setAckFinalIndicator(ackFinal);
1138 if (errorMessage != null)
1140 responseBuilder.setResponseMessage(errorMessage);
1142 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+siid+"] ");
1143 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1145 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
1146 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1148 return Futures.immediateFuture(rpcResult);
1152 public Future<RpcResult<NetworkTopologyOperationOutput>> networkTopologyOperation(
1153 NetworkTopologyOperationInput input) {
1155 final String SVC_OPERATION = "network-topology-operation";
1156 ServiceData serviceData = null;
1157 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
1158 Properties parms = new Properties();
1160 log.info( SVC_OPERATION +" called." );
1161 // create a new response object
1162 NetworkTopologyOperationOutputBuilder responseBuilder = new NetworkTopologyOperationOutputBuilder();
1165 input.getServiceInformation() == null ||
1166 input.getServiceInformation().getServiceInstanceId() == null ||
1167 input.getServiceInformation().getServiceInstanceId().length() == 0)
1169 log.debug("exiting " +SVC_OPERATION+ " because of null or empty service-instance-id");
1170 responseBuilder.setResponseCode("404");
1171 responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
1172 responseBuilder.setAckFinalIndicator("Y");
1173 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1174 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1175 return Futures.immediateFuture(rpcResult);
1178 String siid = input.getServiceInformation().getServiceInstanceId();
1180 // Get the service-instance service data from MD-SAL
1181 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
1182 getServiceData(siid,serviceDataBuilder);
1184 if (input.getSdncRequestHeader() != null) {
1185 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1188 ServiceData sd = serviceDataBuilder.build();
1189 if (sd == null || sd.getServiceLevelOperStatus() == null)
1191 log.debug("exiting " +SVC_OPERATION+ " because the service-instance does not have any service data in SDNC");
1192 responseBuilder.setResponseCode("404");
1193 responseBuilder.setResponseMessage("invalid input: the service-instance does not have any service data in SDNC");
1194 responseBuilder.setAckFinalIndicator("Y");
1195 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1196 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1197 return Futures.immediateFuture(rpcResult);
1202 //String preload_name = null;
1203 //String preload_type = null;
1204 // If both network-name and network-type are present in request, get the preload network from MD-SAL
1205 if (input.getNetworkRequestInput() != null &&
1206 input.getNetworkRequestInput().getNetworkName() != null &&
1207 input.getNetworkRequestInput().getNetworkName().length() != 0) {
1208 preload_name = input.getNetworkRequestInput().getNetworkName();
1210 if (input.getNetworkInformation() != null &&
1211 input.getNetworkInformation().getNetworkType() != null &&
1212 input.getNetworkInformation().getNetworkType().length() != 0) {
1213 preload_type = input.getNetworkInformation().getNetworkType();
1216 PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
1217 if (preload_name != null && preload_type != null) {
1218 getPreloadData(preload_name, preload_type, preloadDataBuilder);
1221 log.debug("network-name and network-type not present in request");
1225 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+siid+"] input: " + input);
1226 NetworkTopologyOperationInputBuilder inputBuilder = new NetworkTopologyOperationInputBuilder(input);
1227 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
1229 // Call SLI sync method
1230 // Get SvcLogicService reference
1232 GenericResourceApiSvcLogicServiceClient svcLogicClient = new GenericResourceApiSvcLogicServiceClient();
1233 Properties respProps = null;
1235 String errorCode = "200";
1236 String errorMessage = null;
1237 String ackFinal = "Y";
1238 String networkId = "error";
1239 String serviceObjectPath = null;
1240 String networkObjectPath = null;
1244 if (svcLogicClient.hasGraph(appName, SVC_OPERATION , null, "sync"))
1249 respProps = svcLogicClient.execute(appName, SVC_OPERATION, null, "sync", serviceDataBuilder, parms);
1253 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
1254 errorMessage = e.getMessage();
1258 errorMessage = "No service logic active for "+ appName +": '" + SVC_OPERATION + "'";
1265 errorMessage = e.getMessage();
1266 log.error("Caught exception looking for service logic", e);
1270 if (respProps != null)
1272 errorCode = respProps.getProperty("error-code");
1273 errorMessage = respProps.getProperty("error-message");
1274 ackFinal = respProps.getProperty("ack-final", "Y");
1275 networkId = respProps.getProperty("networkId");
1276 serviceObjectPath = respProps.getProperty("service-object-path");
1277 networkObjectPath = respProps.getProperty("network-object-path");
1280 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
1281 responseBuilder.setResponseCode(errorCode);
1282 responseBuilder.setResponseMessage(errorMessage);
1283 responseBuilder.setAckFinalIndicator(ackFinal);
1285 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1287 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1288 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1289 return Futures.immediateFuture(rpcResult);
1292 // Got success from SLI
1295 serviceData = serviceDataBuilder.build();
1296 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] ServiceData: " + serviceData);
1299 ServiceBuilder serviceBuilder = new ServiceBuilder();
1300 serviceBuilder.setServiceData(serviceData);
1301 serviceBuilder.setServiceInstanceId(siid);
1302 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
1303 SaveService (serviceBuilder.build(), false,LogicalDatastoreType.CONFIGURATION);
1305 if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null)
1307 // Only update operational tree on Activate
1308 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))
1310 log.info("Updating OPERATIONAL tree.");
1311 SaveService (serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1315 NetworkResponseInformationBuilder networkResponseInformationBuilder = new NetworkResponseInformationBuilder();
1316 networkResponseInformationBuilder.setInstanceId(networkId);
1317 networkResponseInformationBuilder.setObjectPath(networkObjectPath);
1318 responseBuilder.setNetworkResponseInformation(networkResponseInformationBuilder.build());
1320 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
1321 serviceResponseInformationBuilder.setInstanceId(siid);
1322 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
1323 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
1325 } catch (IllegalStateException e) {
1326 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] \n",e);
1327 responseBuilder.setResponseCode("500");
1328 responseBuilder.setResponseMessage(e.toString());
1329 responseBuilder.setAckFinalIndicator("Y");
1330 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1331 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1332 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1333 return Futures.immediateFuture(rpcResult);
1337 responseBuilder.setResponseCode(errorCode);
1338 responseBuilder.setAckFinalIndicator(ackFinal);
1339 if (errorMessage != null)
1341 responseBuilder.setResponseMessage(errorMessage);
1343 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+siid+"] ");
1344 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1346 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1347 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1348 return Futures.immediateFuture(rpcResult);
1352 public Future<RpcResult<ContrailRouteTopologyOperationOutput>> contrailRouteTopologyOperation(
1353 ContrailRouteTopologyOperationInput input) {
1355 final String SVC_OPERATION = "contrail-route-topology-operation";
1356 ServiceData serviceData = null;
1357 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
1358 Properties parms = new Properties();
1360 log.info( SVC_OPERATION +" called." );
1361 // create a new response object
1362 ContrailRouteTopologyOperationOutputBuilder responseBuilder = new ContrailRouteTopologyOperationOutputBuilder();
1365 input.getServiceInformation() == null ||
1366 input.getServiceInformation().getServiceInstanceId() == null ||
1367 input.getServiceInformation().getServiceInstanceId().length() == 0)
1369 log.debug("exiting " +SVC_OPERATION+ " because of null or empty service-instance-id");
1370 responseBuilder.setResponseCode("404");
1371 responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
1372 responseBuilder.setAckFinalIndicator("Y");
1373 RpcResult<ContrailRouteTopologyOperationOutput> rpcResult =
1374 RpcResultBuilder.<ContrailRouteTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1375 return Futures.immediateFuture(rpcResult);
1378 String siid = input.getServiceInformation().getServiceInstanceId();
1380 // Get the service-instance service data from MD-SAL
1381 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
1382 getServiceData(siid,serviceDataBuilder);
1384 if (input.getSdncRequestHeader() != null) {
1385 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1388 ServiceData sd = serviceDataBuilder.build();
1389 if (sd == null || sd.getServiceLevelOperStatus() == null)
1391 log.debug("exiting " +SVC_OPERATION+ " because the service-instance does not have any service data in SDNC");
1392 responseBuilder.setResponseCode("404");
1393 responseBuilder.setResponseMessage("invalid input: the service-instance does not have any service data in SDNC");
1394 responseBuilder.setAckFinalIndicator("Y");
1395 RpcResult<ContrailRouteTopologyOperationOutput> rpcResult =
1396 RpcResultBuilder.<ContrailRouteTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1397 return Futures.immediateFuture(rpcResult);
1400 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+siid+"] input: " + input);
1401 ContrailRouteTopologyOperationInputBuilder inputBuilder = new ContrailRouteTopologyOperationInputBuilder(input);
1402 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
1404 // Call SLI sync method
1405 // Get SvcLogicService reference
1407 GenericResourceApiSvcLogicServiceClient svcLogicClient = new GenericResourceApiSvcLogicServiceClient();
1408 Properties respProps = null;
1410 String errorCode = "200";
1411 String errorMessage = null;
1412 String ackFinal = "Y";
1413 String allottedResourceId = "error";
1414 String serviceObjectPath = null;
1415 String contrailRouteObjectPath = null;
1419 if (svcLogicClient.hasGraph(appName, SVC_OPERATION , null, "sync"))
1424 respProps = svcLogicClient.execute(appName, SVC_OPERATION, null, "sync", serviceDataBuilder, parms);
1428 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
1429 errorMessage = e.getMessage();
1433 errorMessage = "No service logic active for "+ appName +": '" + SVC_OPERATION + "'";
1440 errorMessage = e.getMessage();
1441 log.error("Caught exception looking for service logic", e);
1445 if (respProps != null)
1447 errorCode = respProps.getProperty("error-code");
1448 errorMessage = respProps.getProperty("error-message");
1449 ackFinal = respProps.getProperty("ack-final", "Y");
1450 allottedResourceId = respProps.getProperty("allotted-resource-id");
1451 serviceObjectPath = respProps.getProperty("service-object-path");
1452 contrailRouteObjectPath = respProps.getProperty("contrail-route-object-path");
1455 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
1456 responseBuilder.setResponseCode(errorCode);
1457 responseBuilder.setResponseMessage(errorMessage);
1458 responseBuilder.setAckFinalIndicator(ackFinal);
1460 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1462 RpcResult<ContrailRouteTopologyOperationOutput> rpcResult =
1463 RpcResultBuilder.<ContrailRouteTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1464 return Futures.immediateFuture(rpcResult);
1467 // Got success from SLI
1470 serviceData = serviceDataBuilder.build();
1471 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] ServiceData: " + serviceData);
1474 ServiceBuilder serviceBuilder = new ServiceBuilder();
1475 serviceBuilder.setServiceData(serviceData);
1476 serviceBuilder.setServiceInstanceId(siid);
1477 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
1478 SaveService (serviceBuilder.build(), false,LogicalDatastoreType.CONFIGURATION);
1480 if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null)
1482 // Only update operational tree on activate or delete
1483 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Unassign) ||
1484 input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))
1486 log.info("Updating OPERATIONAL tree.");
1487 SaveService (serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1491 ContrailRouteResponseInformationBuilder contrailRouteResponseInformationBuilder = new ContrailRouteResponseInformationBuilder();
1492 contrailRouteResponseInformationBuilder.setInstanceId(allottedResourceId);
1493 contrailRouteResponseInformationBuilder.setObjectPath(contrailRouteObjectPath);
1494 responseBuilder.setContrailRouteResponseInformation(contrailRouteResponseInformationBuilder.build());
1496 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
1497 serviceResponseInformationBuilder.setInstanceId(siid);
1498 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
1499 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
1501 } catch (IllegalStateException e) {
1502 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] \n",e);
1503 responseBuilder.setResponseCode("500");
1504 responseBuilder.setResponseMessage(e.toString());
1505 responseBuilder.setAckFinalIndicator("Y");
1506 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1507 RpcResult<ContrailRouteTopologyOperationOutput> rpcResult =
1508 RpcResultBuilder.<ContrailRouteTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1509 return Futures.immediateFuture(rpcResult);
1513 responseBuilder.setResponseCode(errorCode);
1514 responseBuilder.setAckFinalIndicator(ackFinal);
1515 if (errorMessage != null)
1517 responseBuilder.setResponseMessage(errorMessage);
1519 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+siid+"] ");
1520 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1522 RpcResult<ContrailRouteTopologyOperationOutput> rpcResult =
1523 RpcResultBuilder.<ContrailRouteTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1524 return Futures.immediateFuture(rpcResult);
1528 public Future<RpcResult<SecurityZoneTopologyOperationOutput>> securityZoneTopologyOperation(
1529 SecurityZoneTopologyOperationInput input) {
1531 final String SVC_OPERATION = "security-zone-topology-operation";
1532 ServiceData serviceData = null;
1533 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
1534 Properties parms = new Properties();
1536 log.info( SVC_OPERATION +" called." );
1537 // create a new response object
1538 SecurityZoneTopologyOperationOutputBuilder responseBuilder = new SecurityZoneTopologyOperationOutputBuilder();
1541 input.getServiceInformation() == null ||
1542 input.getServiceInformation().getServiceInstanceId() == null ||
1543 input.getServiceInformation().getServiceInstanceId().length() == 0)
1545 log.debug("exiting " +SVC_OPERATION+ " because of null or empty service-instance-id");
1546 responseBuilder.setResponseCode("404");
1547 responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
1548 responseBuilder.setAckFinalIndicator("Y");
1549 RpcResult<SecurityZoneTopologyOperationOutput> rpcResult =
1550 RpcResultBuilder.<SecurityZoneTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1551 return Futures.immediateFuture(rpcResult);
1554 String siid = input.getServiceInformation().getServiceInstanceId();
1556 // Get the service-instance service data from MD-SAL
1557 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
1558 getServiceData(siid,serviceDataBuilder);
1560 if (input.getSdncRequestHeader() != null) {
1561 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1564 ServiceData sd = serviceDataBuilder.build();
1565 if (sd == null || sd.getServiceLevelOperStatus() == null)
1567 log.debug("exiting " +SVC_OPERATION+ " because the service-instance does not have any service data in SDNC");
1568 responseBuilder.setResponseCode("404");
1569 responseBuilder.setResponseMessage("invalid input: the service-instance does not have any service data in SDNC");
1570 responseBuilder.setAckFinalIndicator("Y");
1571 RpcResult<SecurityZoneTopologyOperationOutput> rpcResult =
1572 RpcResultBuilder.<SecurityZoneTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1573 return Futures.immediateFuture(rpcResult);
1576 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+siid+"] input: " + input);
1577 SecurityZoneTopologyOperationInputBuilder inputBuilder = new SecurityZoneTopologyOperationInputBuilder(input);
1578 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
1580 // Call SLI sync method
1581 // Get SvcLogicService reference
1583 GenericResourceApiSvcLogicServiceClient svcLogicClient = new GenericResourceApiSvcLogicServiceClient();
1584 Properties respProps = null;
1586 String errorCode = "200";
1587 String errorMessage = null;
1588 String ackFinal = "Y";
1589 String allottedResourceId = "error";
1590 String serviceObjectPath = null;
1591 String securityZoneObjectPath = null;
1595 if (svcLogicClient.hasGraph(appName, SVC_OPERATION , null, "sync"))
1600 respProps = svcLogicClient.execute(appName, SVC_OPERATION, null, "sync", serviceDataBuilder, parms);
1604 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
1605 errorMessage = e.getMessage();
1609 errorMessage = "No service logic active for "+ appName +": '" + SVC_OPERATION + "'";
1616 errorMessage = e.getMessage();
1617 log.error("Caught exception looking for service logic", e);
1621 if (respProps != null)
1623 errorCode = respProps.getProperty("error-code");
1624 errorMessage = respProps.getProperty("error-message");
1625 ackFinal = respProps.getProperty("ack-final", "Y");
1626 allottedResourceId = respProps.getProperty("allotted-resource-id");
1627 serviceObjectPath = respProps.getProperty("service-object-path");
1628 securityZoneObjectPath = respProps.getProperty("security-zone-object-path");
1631 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
1632 responseBuilder.setResponseCode(errorCode);
1633 responseBuilder.setResponseMessage(errorMessage);
1634 responseBuilder.setAckFinalIndicator(ackFinal);
1636 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1638 RpcResult<SecurityZoneTopologyOperationOutput> rpcResult =
1639 RpcResultBuilder.<SecurityZoneTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1640 return Futures.immediateFuture(rpcResult);
1643 // Got success from SLI
1646 serviceData = serviceDataBuilder.build();
1647 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] ServiceData: " + serviceData);
1650 ServiceBuilder serviceBuilder = new ServiceBuilder();
1651 serviceBuilder.setServiceData(serviceData);
1652 serviceBuilder.setServiceInstanceId(siid);
1653 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
1654 SaveService (serviceBuilder.build(), false,LogicalDatastoreType.CONFIGURATION);
1656 if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null)
1658 // Only update operational tree on activate or delete
1659 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Unassign) ||
1660 input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))
1662 log.info("Updating OPERATIONAL tree.");
1663 SaveService (serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1667 SecurityZoneResponseInformationBuilder securityZoneResponseInformationBuilder = new SecurityZoneResponseInformationBuilder();
1668 securityZoneResponseInformationBuilder.setInstanceId(allottedResourceId);
1669 securityZoneResponseInformationBuilder.setObjectPath(securityZoneObjectPath);
1670 responseBuilder.setSecurityZoneResponseInformation(securityZoneResponseInformationBuilder.build());
1672 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
1673 serviceResponseInformationBuilder.setInstanceId(siid);
1674 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
1675 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
1677 } catch (IllegalStateException e) {
1678 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] \n",e);
1679 responseBuilder.setResponseCode("500");
1680 responseBuilder.setResponseMessage(e.toString());
1681 responseBuilder.setAckFinalIndicator("Y");
1682 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1683 RpcResult<SecurityZoneTopologyOperationOutput> rpcResult =
1684 RpcResultBuilder.<SecurityZoneTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1685 return Futures.immediateFuture(rpcResult);
1689 responseBuilder.setResponseCode(errorCode);
1690 responseBuilder.setAckFinalIndicator(ackFinal);
1691 if (errorMessage != null)
1693 responseBuilder.setResponseMessage(errorMessage);
1695 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+siid+"] ");
1696 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1698 RpcResult<SecurityZoneTopologyOperationOutput> rpcResult =
1699 RpcResultBuilder.<SecurityZoneTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1700 return Futures.immediateFuture(rpcResult);
1704 public Future<RpcResult<PreloadVnfTopologyOperationOutput>> preloadVnfTopologyOperation(
1705 PreloadVnfTopologyOperationInput input) {
1707 final String SVC_OPERATION = "preload-vnf-topology-operation";
1708 PreloadData preloadData = null;
1709 Properties parms = new Properties();
1711 log.info( SVC_OPERATION +" called." );
1712 // create a new response object
1713 PreloadVnfTopologyOperationOutputBuilder responseBuilder = new PreloadVnfTopologyOperationOutputBuilder();
1715 // Result from savePreloadData
1716 final SettableFuture<RpcResult<Void>> futureResult = SettableFuture.create();
1718 if(input == null || input.getVnfTopologyInformation() == null ||
1719 input.getVnfTopologyInformation().getVnfTopologyIdentifier() == null) {
1720 log.debug("exiting " +SVC_OPERATION+ " because of null input");
1721 responseBuilder.setResponseCode("403");
1722 responseBuilder.setResponseMessage("invalid input: input is null");
1723 responseBuilder.setAckFinalIndicator("Y");
1724 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
1725 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1726 return Futures.immediateFuture(rpcResult);
1729 // Grab the name and type from the input buffer
1730 String preload_name = input.getVnfTopologyInformation().getVnfTopologyIdentifier().getVnfName();
1731 String preload_type = input.getVnfTopologyInformation().getVnfTopologyIdentifier().getVnfType();
1733 // Make sure we have a preload_name and preload_type
1734 if(preload_name == null || preload_name.length() == 0 || preload_type == null || preload_type.length() == 0 ) {
1735 log.debug("exiting "+ SVC_OPERATION + " vnf-name or vnf-type is null or empty");
1736 responseBuilder.setResponseCode("403");
1737 responseBuilder.setResponseMessage("invalid input: vnf-name or vnf-type is null or empty");
1738 responseBuilder.setAckFinalIndicator("Y");
1739 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
1740 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1741 return Futures.immediateFuture(rpcResult);
1744 if (input.getSdncRequestHeader() != null) {
1745 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1748 PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
1749 getPreloadData(preload_name, preload_type, preloadDataBuilder);
1751 PreloadDataBuilder operDataBuilder = new PreloadDataBuilder();
1752 getPreloadData(preload_name, preload_type, operDataBuilder, LogicalDatastoreType.OPERATIONAL );
1754 // setup a preload-data object builder
1755 // ACTION preload-vnf-topology-operation
1757 // USES sdnc-request-header;
1758 // USES request-information;
1759 // uses vnf-topology-information;
1761 // USES vnf-topology-response-body;
1763 // container preload-data
1764 // uses vnf-topology-information;
1765 // uses network-topology-information;
1766 // uses oper-status;
1768 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] input: " + input);
1769 PreloadVnfTopologyOperationInputBuilder inputBuilder = new PreloadVnfTopologyOperationInputBuilder(input);
1770 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
1771 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+preload_name+","+preload_type +"] operational-data: " + operDataBuilder.build());
1772 GenericResourceApiUtil.toProperties(parms, "operational-data", operDataBuilder);
1774 // Call SLI sync method
1775 // Get SvcLogicService reference
1777 GenericResourceApiSvcLogicServiceClient svcLogicClient = new GenericResourceApiSvcLogicServiceClient();
1778 Properties respProps = null;
1780 String errorCode = "200";
1781 String errorMessage = null;
1782 String ackFinal = "Y";
1787 if (svcLogicClient.hasGraph(appName, SVC_OPERATION , null, "sync"))
1792 respProps = svcLogicClient.execute(appName, SVC_OPERATION, null, "sync", preloadDataBuilder, parms);
1796 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
1797 errorMessage = e.getMessage();
1801 errorMessage = "No service logic active for "+ appName + ": '" + SVC_OPERATION + "'";
1808 errorMessage = e.getMessage();
1809 log.error("Caught exception looking for service logic", e);
1813 if (respProps != null)
1815 errorCode = respProps.getProperty("error-code");
1816 errorMessage = respProps.getProperty("error-message");
1817 ackFinal = respProps.getProperty("ack-final", "Y");
1818 // internalError = respProps.getProperty("internal-error", "false");
1821 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
1823 responseBuilder.setResponseCode(errorCode);
1824 responseBuilder.setResponseMessage(errorMessage);
1825 responseBuilder.setAckFinalIndicator(ackFinal);
1827 VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
1828 preloadVnfListBuilder.setVnfName(preload_name);
1829 preloadVnfListBuilder.setVnfType(preload_type);
1830 preloadVnfListBuilder.setPreloadData(preloadDataBuilder.build());
1831 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] error code: '" + errorCode + "', Reason: '" + errorMessage + "'");
1833 SavePreloadList (preloadVnfListBuilder.build(), true,LogicalDatastoreType.CONFIGURATION);
1834 } catch (Exception e) {
1835 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
1837 log.debug("Sending Success rpc result due to external error");
1838 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
1839 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1840 return Futures.immediateFuture(rpcResult);
1843 // Got success from SLI
1845 preloadData = preloadDataBuilder.build();
1846 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preloadData: " + preloadData);
1847 // svc-configuration-list
1848 VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
1849 preloadVnfListBuilder.setVnfName(preload_name);
1850 preloadVnfListBuilder.setVnfType(preload_type);
1851 preloadVnfListBuilder.setPreloadData(preloadData);
1853 // merge flag sets to false to allow it to be overwritten (not appended)
1854 SavePreloadList (preloadVnfListBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
1855 log.info("Updating OPERATIONAL tree.");
1856 SavePreloadList (preloadVnfListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1857 } catch (Exception e) {
1858 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
1859 responseBuilder.setResponseCode("500");
1860 responseBuilder.setResponseMessage(e.toString());
1861 responseBuilder.setAckFinalIndicator("Y");
1862 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
1863 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
1864 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(false).withResult(responseBuilder.build()).build();
1865 return Futures.immediateFuture(rpcResult);
1869 responseBuilder.setResponseCode(errorCode);
1870 responseBuilder.setAckFinalIndicator(ackFinal);
1871 if (errorMessage != null)
1873 responseBuilder.setResponseMessage(errorMessage);
1875 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] ");
1876 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
1878 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
1879 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1880 return Futures.immediateFuture(rpcResult);
1885 public Future<RpcResult<PreloadNetworkTopologyOperationOutput>> preloadNetworkTopologyOperation(
1886 PreloadNetworkTopologyOperationInput input) {
1888 final String SVC_OPERATION = "preload-network-topology-operation";
1889 PreloadData preloadData = null;
1890 Properties parms = new Properties();
1892 log.info( SVC_OPERATION +" called." );
1893 // create a new response object
1894 PreloadNetworkTopologyOperationOutputBuilder responseBuilder = new PreloadNetworkTopologyOperationOutputBuilder();
1896 // Result from savePreloadData
1897 final SettableFuture<RpcResult<Void>> futureResult = SettableFuture.create();
1899 if(input == null || input.getNetworkTopologyInformation() == null ||
1900 input.getNetworkTopologyInformation().getNetworkTopologyIdentifier() == null) {
1902 log.debug("exiting " +SVC_OPERATION+ " because of null input");
1903 responseBuilder.setResponseCode("403");
1904 responseBuilder.setResponseMessage("input is null");
1905 responseBuilder.setAckFinalIndicator("Y");
1906 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
1907 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1908 return Futures.immediateFuture(rpcResult);
1911 // Grab the name and type from the input buffer
1912 String preload_name = input.getNetworkTopologyInformation().getNetworkTopologyIdentifier().getNetworkName();
1913 String preload_type = input.getNetworkTopologyInformation().getNetworkTopologyIdentifier().getNetworkType();
1915 // Make sure we have a preload_name and preload_type
1916 if(preload_name == null || preload_name.length() == 0 || preload_type == null || preload_type.length() == 0 ) {
1917 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-name");
1918 responseBuilder.setResponseCode("403");
1919 responseBuilder.setResponseMessage("input, invalid preload-name");
1920 responseBuilder.setAckFinalIndicator("Y");
1921 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
1922 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1923 return Futures.immediateFuture(rpcResult);
1926 if (input.getSdncRequestHeader() != null) {
1927 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1930 PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
1931 getPreloadData(preload_name, preload_type, preloadDataBuilder);
1933 PreloadDataBuilder operDataBuilder = new PreloadDataBuilder();
1934 getPreloadData(preload_name, preload_type, operDataBuilder, LogicalDatastoreType.OPERATIONAL );
1937 // setup a preload-data object builder
1938 // ACTION preload-network-topology-operation
1940 // USES sdnc-request-header;
1941 // USES request-information;
1942 // uses network-topology-information;
1944 // USES vnf-topology-response-body;
1946 // container preload-data
1947 // uses vnf-topology-information;
1948 // uses network-topology-information;
1949 // uses oper-status;
1952 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] input: " + input);
1953 PreloadNetworkTopologyOperationInputBuilder inputBuilder = new PreloadNetworkTopologyOperationInputBuilder(input);
1954 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
1955 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+preload_name+","+preload_type +"] operational-data: " + operDataBuilder.build());
1956 GenericResourceApiUtil.toProperties(parms, "operational-data", operDataBuilder);
1958 // Call SLI sync method
1959 // Get SvcLogicService reference
1961 GenericResourceApiSvcLogicServiceClient svcLogicClient = new GenericResourceApiSvcLogicServiceClient();
1962 Properties respProps = null;
1964 String errorCode = "200";
1965 String errorMessage = null;
1966 String ackFinal = "Y";
1971 if (svcLogicClient.hasGraph(appName, SVC_OPERATION , null, "sync"))
1976 respProps = svcLogicClient.execute(appName, SVC_OPERATION, null, "sync", preloadDataBuilder, parms);
1980 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
1981 errorMessage = e.getMessage();
1985 errorMessage = "No service logic active for "+ appName +": '" + SVC_OPERATION + "'";
1992 errorMessage = e.getMessage();
1993 log.error("Caught exception looking for service logic", e);
1997 if (respProps != null)
1999 errorCode = respProps.getProperty("error-code");
2000 errorMessage = respProps.getProperty("error-message");
2001 ackFinal = respProps.getProperty("ack-final", "Y");
2002 // internalError = respProps.getProperty("internal-error", "false");
2005 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
2007 responseBuilder.setResponseCode(errorCode);
2008 responseBuilder.setResponseMessage(errorMessage);
2009 responseBuilder.setAckFinalIndicator(ackFinal);
2011 VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
2012 preloadVnfListBuilder.setVnfName(preload_name);
2013 preloadVnfListBuilder.setVnfType(preload_type);
2014 preloadVnfListBuilder.setPreloadData(preloadDataBuilder.build());
2015 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] error code: '" + errorCode + "', Reason: '" + errorMessage + "'");
2017 SavePreloadList (preloadVnfListBuilder.build(),true,LogicalDatastoreType.CONFIGURATION);
2018 } catch (Exception e) {
2019 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2022 log.debug("Sending Success rpc result due to external error");
2023 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
2024 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2025 return Futures.immediateFuture(rpcResult);
2028 // Got success from SLI
2030 preloadData = preloadDataBuilder.build();
2031 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preloadData: " + preloadData);
2032 // svc-configuration-list
2033 VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
2034 preloadVnfListBuilder.setVnfName(preload_name);
2035 preloadVnfListBuilder.setVnfType(preload_type);
2036 preloadVnfListBuilder.setPreloadData(preloadData);
2038 // merge flag sets to false to allow it to be overwritten (not appended)
2039 SavePreloadList (preloadVnfListBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
2040 log.info("Updating OPERATIONAL tree.");
2041 SavePreloadList (preloadVnfListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
2042 } catch (Exception e) {
2043 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2044 responseBuilder.setResponseCode("500");
2045 responseBuilder.setResponseMessage(e.toString());
2046 responseBuilder.setAckFinalIndicator("Y");
2047 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2048 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
2049 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(false).withResult(responseBuilder.build()).build();
2050 return Futures.immediateFuture(rpcResult);
2054 responseBuilder.setResponseCode(errorCode);
2055 responseBuilder.setAckFinalIndicator(ackFinal);
2056 if (errorMessage != null)
2058 responseBuilder.setResponseMessage(errorMessage);
2060 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] ");
2061 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2063 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
2064 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2065 return Futures.immediateFuture(rpcResult);