1 package org.onap.sdnc.northbound;
3 import com.google.common.base.Optional;
4 import com.google.common.util.concurrent.CheckedFuture;
5 import com.google.common.util.concurrent.Futures;
6 import com.google.common.util.concurrent.ListenableFuture;
8 import java.text.DateFormat;
9 import java.text.SimpleDateFormat;
10 import java.util.Date;
11 import java.util.Properties;
12 import java.util.TimeZone;
13 import java.util.concurrent.ExecutionException;
14 import java.util.concurrent.ExecutorService;
15 import java.util.concurrent.Executors;
16 import java.util.concurrent.Future;
18 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
19 import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
20 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
21 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
22 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
23 import org.opendaylight.controller.md.sal.common.api.data.OptimisticLockFailedException;
24 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
25 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
26 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
27 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.BrgTopologyOperationInput;
28 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.BrgTopologyOperationInputBuilder;
29 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.BrgTopologyOperationOutput;
30 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.BrgTopologyOperationOutputBuilder;
31 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ConnectionAttachmentTopologyOperationInput;
32 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ConnectionAttachmentTopologyOperationInputBuilder;
33 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ConnectionAttachmentTopologyOperationOutput;
34 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ConnectionAttachmentTopologyOperationOutputBuilder;
35 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ContrailRouteTopologyOperationInput;
36 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ContrailRouteTopologyOperationInputBuilder;
37 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ContrailRouteTopologyOperationOutput;
38 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ContrailRouteTopologyOperationOutputBuilder;
39 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.GENERICRESOURCEAPIService;
40 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.GenericConfigurationNotificationInput;
41 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.GenericConfigurationNotificationInputBuilder;
42 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.GenericConfigurationNotificationOutput;
43 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.GenericConfigurationTopologyOperationInput;
44 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.GenericConfigurationTopologyOperationInputBuilder;
45 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.GenericConfigurationTopologyOperationOutput;
46 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.GenericConfigurationTopologyOperationOutputBuilder;
47 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.GetpathsegmentTopologyOperationInput;
48 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.GetpathsegmentTopologyOperationInputBuilder;
49 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.GetpathsegmentTopologyOperationOutput;
50 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.GetpathsegmentTopologyOperationOutputBuilder;
51 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.NetworkTopologyOperationInput;
52 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.NetworkTopologyOperationInputBuilder;
53 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.NetworkTopologyOperationOutput;
54 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.NetworkTopologyOperationOutputBuilder;
55 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PolicyUpdateNotifyOperationInput;
56 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PolicyUpdateNotifyOperationInputBuilder;
57 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PolicyUpdateNotifyOperationOutput;
58 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PolicyUpdateNotifyOperationOutputBuilder;
59 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PortMirrorTopologyOperationInput;
60 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PortMirrorTopologyOperationInputBuilder;
61 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PortMirrorTopologyOperationOutput;
62 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PortMirrorTopologyOperationOutputBuilder;
63 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadInformation;
64 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadInformationBuilder;
65 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadNetworkTopologyOperationInput;
66 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadNetworkTopologyOperationInputBuilder;
67 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadNetworkTopologyOperationOutput;
68 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadNetworkTopologyOperationOutputBuilder;
69 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadVfModuleTopologyOperationInput;
70 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadVfModuleTopologyOperationInputBuilder;
71 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadVfModuleTopologyOperationOutput;
72 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadVfModuleTopologyOperationOutputBuilder;
73 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.SecurityZoneTopologyOperationInput;
74 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.SecurityZoneTopologyOperationInputBuilder;
75 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.SecurityZoneTopologyOperationOutput;
76 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.SecurityZoneTopologyOperationOutputBuilder;
77 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ServiceTopologyOperationInput;
78 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ServiceTopologyOperationInputBuilder;
79 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ServiceTopologyOperationOutput;
80 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ServiceTopologyOperationOutputBuilder;
81 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.Services;
82 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ServicesBuilder;
83 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.TunnelxconnTopologyOperationInput;
84 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.TunnelxconnTopologyOperationInputBuilder;
85 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.TunnelxconnTopologyOperationOutput;
86 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.TunnelxconnTopologyOperationOutputBuilder;
87 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VfModuleTopologyOperationInput;
88 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VfModuleTopologyOperationInputBuilder;
89 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VfModuleTopologyOperationOutput;
90 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VfModuleTopologyOperationOutputBuilder;
91 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VnfGetResourceRequestInput;
92 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VnfGetResourceRequestInputBuilder;
93 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VnfGetResourceRequestOutput;
94 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VnfGetResourceRequestOutputBuilder;
95 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VnfTopologyOperationInput;
96 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VnfTopologyOperationInputBuilder;
97 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VnfTopologyOperationOutput;
98 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VnfTopologyOperationOutputBuilder;
99 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PnfTopologyOperationInput;
100 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PnfTopologyOperationInputBuilder;
101 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PnfTopologyOperationOutput;
102 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PnfTopologyOperationOutputBuilder;
103 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.brg.response.information.BrgResponseInformationBuilder;
104 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.connection.attachment.response.information.ConnectionAttachmentResponseInformationBuilder;
105 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.contrail.route.response.information.ContrailRouteResponseInformationBuilder;
106 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.gc.response.information.GcResponseInformationBuilder;
107 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.network.response.information.NetworkResponseInformationBuilder;
108 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.port.mirror.response.information.PortMirrorResponseInformationBuilder;
109 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.preload.data.PreloadData;
110 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.preload.data.PreloadDataBuilder;
111 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.preload.model.information.PreloadList;
112 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.preload.model.information.PreloadListBuilder;
113 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.preload.model.information.PreloadListKey;
114 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.request.information.RequestInformation;
115 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.sdnc.request.header.SdncRequestHeader;
116 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.sdnc.request.header.SdncRequestHeader.SvcAction;
117 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.security.zone.response.information.SecurityZoneResponseInformationBuilder;
118 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.data.ServiceData;
119 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.data.ServiceDataBuilder;
120 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.model.infrastructure.Service;
121 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.model.infrastructure.ServiceBuilder;
122 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.model.infrastructure.ServiceKey;
123 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.response.information.ServiceResponseInformationBuilder;
124 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.status.ServiceStatus.RequestStatus;
125 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.status.ServiceStatus.RpcAction;
126 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.status.ServiceStatusBuilder;
127 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.tunnelxconn.response.information.TunnelxconnResponseInformationBuilder;
128 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.vf.module.response.information.VfModuleResponseInformationBuilder;
129 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.vnf.response.information.VnfResponseInformationBuilder;
130 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.pnf.response.information.PnfResponseInformationBuilder;
131 import org.opendaylight.yangtools.yang.binding.DataObject;
132 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
133 import org.opendaylight.yangtools.yang.common.RpcResult;
134 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
135 import org.slf4j.Logger;
136 import org.slf4j.LoggerFactory;
139 * Defines a base implementation for your provider. This class extends from a
140 * helper class which provides storage for the most commonly used components of
141 * the MD-SAL. Additionally the base class provides some basic logging and
142 * initialization / clean up methods.
144 * To use this, copy and paste (overwrite) the following method into the
145 * TestApplicationProviderModule class which is auto generated under
146 * src/main/java in this project (created only once during first compilation):
151 * public java.lang.AutoCloseable createInstance() {
153 * // final GENERIC-RESOURCE-APIProvider provider = new
154 * // GENERIC-RESOURCE-APIProvider();
155 * final GenericResourceApiProvider provider = new GenericResourceApiProvider();
156 * provider.setDataBroker(getDataBrokerDependency());
157 * provider.setNotificationService(getNotificationServiceDependency());
158 * provider.setRpcRegistry(getRpcRegistryDependency());
159 * provider.initialize();
160 * return new AutoCloseable() {
163 * public void close() throws Exception {
164 * // TODO: CLOSE ANY REGISTRATION OBJECTS CREATED USING ABOVE
165 * // BROKER/NOTIFICATION
166 * // SERVIE/RPC REGISTRY
175 public class GenericResourceApiProvider implements AutoCloseable, GENERICRESOURCEAPIService {
177 protected static final String APP_NAME = "generic-resource-api";
178 private static final String CALLED_STR = "{} called.";
179 private static final String NULL_OR_EMPTY_ERROR_MESSAGE = "exiting {} because of null or empty service-instance-id";
180 protected static final String NULL_OR_EMPTY_ERROR_PARAM = "invalid input, null or empty service-instance-id";
181 private static final String ADDING_INPUT_DATA_LOG = "Adding INPUT data for {} [{}] input: {}";
182 private static final String ADDING_OPERATIONAL_DATA_LOG = "Adding OPERATIONAL data for {} [{}] operational-data: {}";
183 private static final String OPERATIONAL_DATA_PARAM = "operational-data";
184 protected static final String NO_SERVICE_LOGIC_ACTIVE = "No service logic active for ";
185 private static final String SERVICE_LOGIC_SEARCH_ERROR_MESSAGE = "Caught exception looking for service logic";
186 private static final String ERROR_CODE_PARAM = "error-code";
187 private static final String ERROR_MESSAGE_PARAM = "error-message";
188 private static final String ACK_FINAL_PARAM = "ack-final";
189 private static final String SERVICE_OBJECT_PATH_PARAM = "service-object-path";
190 private static final String NETWORK_OBJECT_PATH_PARAM = "network-object-path";
191 private static final String VNF_OBJECT_PATH_PARAM = "vnf-object-path";
192 private static final String PNF_OBJECT_PATH_PARAM = "pnf-object-path";
193 private static final String VF_MODULE_OBJECT_PATH_PARAM = "vf-module-object-path";
194 private static final String UPDATING_MDSAL_ERROR_MESSAGE = "Caught Exception updating MD-SAL for {} [{}] \n";
195 private static final String UPDATING_MDSAL_ERROR_MESSAGE_2 = "Caught Exception updating MD-SAL for {} [{},{}] \n";
196 private static final String RETURNED_FAILED_MESSAGE = "Returned FAILED for {} [{}] {}";
197 private static final String UPDATING_MDSAL_INFO_MESSAGE = "Updating MD-SAL for {} [{}] ServiceData: {}";
198 private static final String UPDATED_MDSAL_INFO_MESSAGE = "Updated MD-SAL for {} [{}]";
199 private static final String RETURNED_SUCCESS_MESSAGE = "Returned SUCCESS for {} [{}] {}";
200 private static final String NON_NULL_PARAM = "non-null";
201 private static final String NULL_PARAM = "null";
202 private static final String SERVICE_LOGIC_EXECUTION_ERROR_MESSAGE = "Caught exception executing service logic for {} ";
203 private static final String UPDATING_TREE_INFO_MESSAGE = "Updating OPERATIONAL tree.";
204 private static final String EMPTY_SERVICE_INSTANCE_MESSAGE = "exiting {} because the service-instance does not have any service data in SDNC";
205 protected static final String INVALID_INPUT_ERROR_MESSAGE = "invalid input: the service-instance does not have any service data in SDNC";
206 private static final String ALLOTTED_RESOURCE_ID_PARAM = "allotted-resource-id";
207 private static final String ERROR_NETWORK_ID = "error";
208 private static final String BACKGROUND_THREAD_STARTED_MESSAGE = "Start background thread";
209 private static final String BACKGROUND_THREAD_INFO = "Background thread: input conf_id is {}";
211 private final Logger log = LoggerFactory.getLogger(GenericResourceApiProvider.class);
212 private final ExecutorService executor;
213 private final GenericResourceApiSvcLogicServiceClient svcLogicClient;
215 protected DataBroker dataBroker;
216 protected NotificationPublishService notificationService;
217 protected RpcProviderRegistry rpcRegistry;
218 protected BindingAwareBroker.RpcRegistration<GENERICRESOURCEAPIService> rpcRegistration;
220 public GenericResourceApiProvider(DataBroker dataBroker, NotificationPublishService notificationPublishService,
221 RpcProviderRegistry rpcProviderRegistry, GenericResourceApiSvcLogicServiceClient client) {
222 log.info("Creating provider for {}", APP_NAME);
223 executor = Executors.newFixedThreadPool(1);
224 setDataBroker(dataBroker);
225 setNotificationService(notificationPublishService);
226 setRpcRegistry(rpcProviderRegistry);
227 svcLogicClient = client;
232 public void initialize() {
233 log.info("Initializing provider for {}", APP_NAME);
234 // Create the top level containers
237 GenericResourceApiUtil.loadProperties();
238 } catch (Exception e) {
239 log.error("Caught Exception while trying to load properties file", e);
242 log.info("Initialization complete for {}", APP_NAME);
245 protected void initializeChild() {
246 // Override if you have custom initialization intelligence
250 public void close() throws Exception {
251 log.info("Closing provider for {}", APP_NAME);
253 rpcRegistration.close();
254 log.info("Successfully closed provider for {}", APP_NAME);
257 private static class Iso8601Util {
259 private static TimeZone timeZone = TimeZone.getTimeZone("UTC");
260 private static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
262 private Iso8601Util() {
266 dateFormat.setTimeZone(timeZone);
269 private static String now() {
270 return dateFormat.format(new Date());
274 public void setDataBroker(DataBroker dataBroker) {
275 this.dataBroker = dataBroker;
276 if (log.isDebugEnabled()) {
277 log.debug("DataBroker set to {}", dataBroker == null ? NULL_PARAM : NON_NULL_PARAM);
281 public void setNotificationService(NotificationPublishService notificationService) {
282 this.notificationService = notificationService;
283 if (log.isDebugEnabled()) {
284 log.debug("Notification Service set to {}", notificationService == null ? NULL_PARAM : NON_NULL_PARAM);
288 public void setRpcRegistry(RpcProviderRegistry rpcRegistry) {
289 this.rpcRegistry = rpcRegistry;
290 if (log.isDebugEnabled()) {
291 log.debug("RpcRegistry set to {}", rpcRegistry == null ? NULL_PARAM : NON_NULL_PARAM);
295 private void createContainers() {
297 final WriteTransaction t = dataBroker.newReadWriteTransaction();
299 // Create the service-instance container
300 t.merge(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(Services.class),
301 new ServicesBuilder().build());
302 t.merge(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Services.class),
303 new ServicesBuilder().build());
305 // Create the PreloadInformation container
306 t.merge(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(PreloadInformation.class),
307 new PreloadInformationBuilder().build());
308 t.merge(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(PreloadInformation.class),
309 new PreloadInformationBuilder().build());
312 CheckedFuture<Void, TransactionCommitFailedException> checkedFuture = t.submit();
314 log.info("Create containers succeeded!");
316 } catch (InterruptedException | ExecutionException e) {
317 log.error("Create containers failed: ", e);
321 private void setServiceStatus(ServiceStatusBuilder serviceStatusBuilder, String errorCode, String errorMessage,
323 serviceStatusBuilder.setResponseCode(errorCode);
324 serviceStatusBuilder.setResponseMessage(errorMessage);
325 serviceStatusBuilder.setFinalIndicator(ackFinal);
326 serviceStatusBuilder.setResponseTimestamp(Iso8601Util.now());
329 private void setServiceStatus(ServiceStatusBuilder serviceStatusBuilder, RequestInformation requestInformation) {
330 if (requestInformation != null && requestInformation.getRequestAction() != null) {
331 serviceStatusBuilder.setAction(requestInformation.getRequestAction().toString());
335 private void setServiceStatus(ServiceStatusBuilder serviceStatusBuilder, SdncRequestHeader requestHeader) {
336 if (requestHeader != null && requestHeader.getSvcAction() != null) {
337 switch (requestHeader.getSvcAction()) {
339 serviceStatusBuilder.setRpcAction(RpcAction.Assign);
342 serviceStatusBuilder.setRpcAction(RpcAction.Unassign);
345 serviceStatusBuilder.setRpcAction(RpcAction.Activate);
348 serviceStatusBuilder.setRpcAction(RpcAction.Deactivate);
351 serviceStatusBuilder.setRpcAction(RpcAction.Delete);
354 serviceStatusBuilder.setRpcAction(RpcAction.Create);
357 log.error("Unknown SvcAction: {}", requestHeader.getSvcAction());
363 private void getServiceData(String siid, ServiceDataBuilder serviceDataBuilder) {
365 getServiceData(siid, serviceDataBuilder, LogicalDatastoreType.CONFIGURATION);
368 private void getServiceData(String siid, ServiceDataBuilder serviceDataBuilder, LogicalDatastoreType type) {
369 // See if any data exists yet for this siid, if so grab it.
370 InstanceIdentifier<Service> serviceInstanceIdentifier = InstanceIdentifier.builder(Services.class)
371 .child(Service.class, new ServiceKey(siid)).build();
373 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
374 Optional<Service> data = Optional.absent();
376 data = readTx.read(type, serviceInstanceIdentifier).get();
377 } catch (InterruptedException | ExecutionException e) {
378 log.error("Caught Exception reading MD-SAL ({}) data for [{}] ", type, siid, e);
381 if (data != null && data.isPresent()) {
382 ServiceData serviceData = data.get().getServiceData();
383 if (serviceData != null) {
384 log.info("Read MD-SAL ({}) data for [{}] ServiceData: {}", type, siid, serviceData);
385 serviceDataBuilder.setSdncRequestHeader(serviceData.getSdncRequestHeader());
386 serviceDataBuilder.setRequestInformation(serviceData.getRequestInformation());
387 serviceDataBuilder.setServiceInformation(serviceData.getServiceInformation());
388 serviceDataBuilder.setServiceRequestInput(serviceData.getServiceRequestInput());
389 serviceDataBuilder.setServiceTopology(serviceData.getServiceTopology());
390 serviceDataBuilder.setServiceLevelOperStatus(serviceData.getServiceLevelOperStatus());
391 serviceDataBuilder.setNetworks(serviceData.getNetworks());
392 serviceDataBuilder.setVnfs(serviceData.getVnfs());
393 serviceDataBuilder.setProvidedAllottedResources(serviceData.getProvidedAllottedResources());
394 serviceDataBuilder.setConsumedAllottedResources(serviceData.getConsumedAllottedResources());
395 serviceDataBuilder.setNetworkInstanceGroups(serviceData.getNetworkInstanceGroups());
396 serviceDataBuilder.setVnfcInstanceGroups(serviceData.getVnfcInstanceGroups());
397 serviceDataBuilder.setForwardingPaths(serviceData.getForwardingPaths());
398 serviceDataBuilder.setProvidedConfigurations(serviceData.getProvidedConfigurations());
399 // service-instance-id needs to be set
401 log.info("No service-data found in MD-SAL ({}) for [{}]", type, siid);
404 log.info("No data found in MD-SAL ({}) for [{}]", type, siid);
408 private void saveService(final Service entry, boolean merge, LogicalDatastoreType storeType) {
409 // Each entry will be identifiable by a unique key, we have to create that
411 InstanceIdentifier<Service> path = InstanceIdentifier.builder(Services.class)
412 .child(Service.class, entry.key()).build();
414 trySaveEntry(entry, merge, storeType, path);
417 private <T extends DataObject> void trySaveEntry(T entry, boolean merge, LogicalDatastoreType storeType,
418 InstanceIdentifier<T> path) {
422 save(entry, merge, storeType, path);
424 } catch (OptimisticLockFailedException e) {
426 log.debug("Got OptimisticLockFailedException on last try - failing ");
427 throw new IllegalStateException(e);
429 log.debug("Got OptimisticLockFailedException - trying again ");
430 } catch (TransactionCommitFailedException ex) {
431 log.debug("Update DataStore failed");
432 throw new IllegalStateException(ex);
437 private <T extends DataObject> void save(T entry, boolean merge, LogicalDatastoreType storeType,
438 InstanceIdentifier<T> path) throws TransactionCommitFailedException {
439 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
441 tx.merge(storeType, path, entry);
443 tx.put(storeType, path, entry);
445 tx.submit().checkedGet();
446 log.debug("Update DataStore succeeded");
449 private void deleteService(final Service entry, LogicalDatastoreType storeType) {
450 // Each entry will be identifiable by a unique key, we have to create
452 InstanceIdentifier<Service> path = InstanceIdentifier.builder(Services.class)
453 .child(Service.class, entry.key()).build();
455 tryDeleteEntry(storeType, path);
458 private void tryDeleteEntry(LogicalDatastoreType storeType, InstanceIdentifier<Service> path) {
462 delete(storeType, path);
464 } catch (OptimisticLockFailedException e) {
466 log.debug("Got OptimisticLockFailedException on last try - failing ");
467 throw new IllegalStateException(e);
469 log.debug("Got OptimisticLockFailedException - trying again ");
470 } catch (TransactionCommitFailedException ex) {
471 log.debug("Update DataStore failed");
472 throw new IllegalStateException(ex);
477 private void delete(LogicalDatastoreType storeType, InstanceIdentifier<Service> path)
478 throws TransactionCommitFailedException {
479 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
480 tx.delete(storeType, path);
481 tx.submit().checkedGet();
482 log.debug("DataStore delete succeeded");
485 private void getPreloadData(String vnf_name, String vnf_type, PreloadDataBuilder preloadDataBuilder) {
487 getPreloadData(vnf_name, vnf_type, preloadDataBuilder, LogicalDatastoreType.CONFIGURATION);
490 private void getPreloadData(String preloadName, String preloadType, PreloadDataBuilder preloadDataBuilder,
491 LogicalDatastoreType type) {
492 // See if any data exists yet for this name/type, if so grab it.
493 InstanceIdentifier preloadInstanceIdentifier = InstanceIdentifier
494 .<PreloadInformation>builder(PreloadInformation.class)
495 .child(PreloadList.class, new PreloadListKey(preloadName, preloadType)).build();
496 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
497 Optional<PreloadList> data = null;
499 data = (Optional<PreloadList>) readTx.read(type, preloadInstanceIdentifier).get();
500 } catch (InterruptedException | ExecutionException e) {
501 log.error("Caught Exception reading MD-SAL ({}) for [{},{}] ", type, preloadName, preloadType, e);
504 if (data != null && data.isPresent()) {
505 PreloadData preloadData = data.get().getPreloadData();
506 if (preloadData != null) {
507 log.info("Read MD-SAL ({}) data for [{},{}] PreloadData: {}", type, preloadName, preloadType,
510 .setPreloadVfModuleTopologyInformation(preloadData.getPreloadVfModuleTopologyInformation());
512 .setPreloadNetworkTopologyInformation(preloadData.getPreloadNetworkTopologyInformation());
513 preloadDataBuilder.setPreloadOperStatus(preloadData.getPreloadOperStatus());
515 log.info("No preload-data found in MD-SAL ({}) for [{},{}] ", type, preloadName, preloadType);
518 log.info("No data found in MD-SAL ({}) for [{},{}] ", type, preloadName, preloadType);
522 private void savePreloadList(final PreloadList entry, boolean merge, LogicalDatastoreType storeType)
523 throws IllegalStateException {
525 // Each entry will be identifiable by a unique key, we have to create that
527 InstanceIdentifier.InstanceIdentifierBuilder<PreloadList> preloadListBuilder = InstanceIdentifier
528 .<PreloadInformation>builder(PreloadInformation.class).child(PreloadList.class, entry.key());
529 InstanceIdentifier<PreloadList> path = preloadListBuilder.build();
533 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
535 tx.merge(storeType, path, entry);
537 tx.put(storeType, path, entry);
539 tx.submit().checkedGet();
540 log.debug("Update DataStore succeeded");
542 } catch (final TransactionCommitFailedException e) {
543 if (e instanceof OptimisticLockFailedException) {
545 log.debug("Got OptimisticLockFailedException on last try - failing ");
546 throw new IllegalStateException(e);
548 log.debug("Got OptimisticLockFailedException - trying again ");
550 log.debug("Update DataStore failed");
551 throw new IllegalStateException(e);
557 private void deletePreloadList(final PreloadList entry, LogicalDatastoreType storeType) {
558 // Each entry will be identifiable by a unique key, we have to create
560 InstanceIdentifier<PreloadList> path = InstanceIdentifier.builder(PreloadInformation.class)
561 .child(PreloadList.class, entry.key()).build();
563 tryDeletePreloadListEntry(storeType, path);
566 private void tryDeletePreloadListEntry(LogicalDatastoreType storeType, InstanceIdentifier<PreloadList> path) {
570 deletePreloadList(storeType, path);
572 } catch (OptimisticLockFailedException e) {
574 log.debug("Got OptimisticLockFailedException on last try - failing ");
575 throw new IllegalStateException(e);
577 log.debug("Got OptimisticLockFailedException - trying again ");
578 } catch (TransactionCommitFailedException ex) {
579 log.debug("Update DataStore failed");
580 throw new IllegalStateException(ex);
585 private void deletePreloadList(LogicalDatastoreType storeType, InstanceIdentifier<PreloadList> path)
586 throws TransactionCommitFailedException {
587 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
588 tx.delete(storeType, path);
589 tx.submit().checkedGet();
590 log.debug("DataStore delete succeeded");
594 public ListenableFuture<RpcResult<ServiceTopologyOperationOutput>> serviceTopologyOperation(
595 ServiceTopologyOperationInput input) {
597 final String svcOperation = "service-topology-operation";
598 ServiceData serviceData;
599 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
600 Properties parms = new Properties();
602 log.info(CALLED_STR, svcOperation);
603 // create a new response object
604 ServiceTopologyOperationOutputBuilder responseBuilder = new ServiceTopologyOperationOutputBuilder();
606 if (hasInvalidServiceId(input)) {
607 log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
608 responseBuilder.setResponseCode("404");
609 responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
610 responseBuilder.setAckFinalIndicator("Y");
612 RpcResult<ServiceTopologyOperationOutput> rpcResult = RpcResultBuilder
613 .<ServiceTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
615 return Futures.immediateFuture(rpcResult);
618 // Grab the service instance ID from the input buffer
619 String siid = input.getServiceInformation().getServiceInstanceId();
621 trySetSvcRequestId(input, responseBuilder);
623 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
624 getServiceData(siid, serviceDataBuilder);
626 ServiceDataBuilder operDataBuilder = new ServiceDataBuilder();
627 getServiceData(siid, operDataBuilder, LogicalDatastoreType.OPERATIONAL);
629 // Set the serviceStatus based on input
630 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
631 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
634 * // setup a service-data object builder // ACTION service-topology-operation
635 * // INPUT: // USES uses service-operation-information // OUTPUT: // uses
636 * topology-response-common; // uses service-response-information;
639 log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
640 ServiceTopologyOperationInputBuilder inputBuilder = new ServiceTopologyOperationInputBuilder(input);
641 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
643 log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, siid, operDataBuilder.build());
644 GenericResourceApiUtil.toProperties(parms, OPERATIONAL_DATA_PARAM, operDataBuilder);
646 // Call SLI sync method
647 ResponseObject responseObject = new ResponseObject("200", "");
648 String ackFinal = "Y";
649 String serviceObjectPath = null;
650 Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, responseObject);
652 if (respProps != null) {
653 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
654 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
655 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
656 serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
659 setServiceStatus(serviceStatusBuilder, responseObject.getStatusCode(), responseObject.getMessage(), ackFinal);
660 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
661 serviceStatusBuilder.setRpcName(svcOperation);
663 if (failed(responseObject)) {
664 responseBuilder.setResponseCode(responseObject.getStatusCode());
665 responseBuilder.setResponseMessage(responseObject.getMessage());
666 responseBuilder.setAckFinalIndicator(ackFinal);
668 ServiceBuilder serviceBuilder = new ServiceBuilder();
669 serviceBuilder.setServiceInstanceId(siid);
670 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
672 saveService(serviceBuilder.build(), true, LogicalDatastoreType.CONFIGURATION);
673 } catch (Exception e) {
674 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
676 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
678 RpcResult<ServiceTopologyOperationOutput> rpcResult = RpcResultBuilder
679 .<ServiceTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
681 return Futures.immediateFuture(rpcResult);
684 // Got success from SLI
686 serviceData = serviceDataBuilder.build();
687 log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
690 ServiceBuilder serviceBuilder = new ServiceBuilder();
691 serviceBuilder.setServiceData(serviceData);
692 serviceBuilder.setServiceInstanceId(siid);
693 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
694 saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
696 tryDeleteService(input, serviceBuilder);
698 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
699 serviceResponseInformationBuilder.setInstanceId(siid);
700 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
701 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
703 } catch (Exception e) {
704 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
705 responseBuilder.setResponseCode("500");
706 responseBuilder.setResponseMessage(e.getMessage());
707 responseBuilder.setAckFinalIndicator("Y");
708 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
710 RpcResult<ServiceTopologyOperationOutput> rpcResult = RpcResultBuilder
711 .<ServiceTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
713 return Futures.immediateFuture(rpcResult);
717 responseBuilder.setResponseCode(responseObject.getStatusCode());
718 responseBuilder.setAckFinalIndicator(ackFinal);
719 trySetResponseMessage(responseBuilder, responseObject);
720 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
721 log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
723 RpcResult<ServiceTopologyOperationOutput> rpcResult = RpcResultBuilder
724 .<ServiceTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
726 return Futures.immediateFuture(rpcResult);
729 private void trySetResponseMessage(ServiceTopologyOperationOutputBuilder responseBuilder,
730 ResponseObject responseObject) {
731 if (responseObject.getMessage() != null) {
732 responseBuilder.setResponseMessage(responseObject.getMessage());
736 private boolean hasInvalidServiceId(ServiceTopologyOperationInput input) {
737 return input == null || input.getServiceInformation() == null
738 || input.getServiceInformation().getServiceInstanceId() == null
739 || input.getServiceInformation().getServiceInstanceId().length() == 0;
742 private void trySetSvcRequestId(ServiceTopologyOperationInput input,
743 ServiceTopologyOperationOutputBuilder responseBuilder) {
744 if (input.getSdncRequestHeader() != null) {
745 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
749 private void tryDeleteService(ServiceTopologyOperationInput input, ServiceBuilder serviceBuilder) {
750 if (isValidRequest(input) && input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete)) {
751 // Only update operational tree on delete
752 log.info("Delete from both CONFIGURATION and OPERATIONAL tree.");
753 deleteService(serviceBuilder.build(), LogicalDatastoreType.OPERATIONAL);
754 deleteService(serviceBuilder.build(), LogicalDatastoreType.CONFIGURATION);
758 private Properties tryGetProperties(String svcOperation, Properties parms, ServiceDataBuilder serviceDataBuilder,
759 ResponseObject responseObject) {
761 if (svcLogicClient.hasGraph(APP_NAME, svcOperation, null, "sync")) {
763 return svcLogicClient.execute(APP_NAME, svcOperation, null, "sync", serviceDataBuilder, parms);
764 } catch (Exception e) {
765 log.error(SERVICE_LOGIC_EXECUTION_ERROR_MESSAGE, svcOperation, e);
766 responseObject.setMessage(e.getMessage());
767 responseObject.setStatusCode("500");
770 responseObject.setMessage(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + svcOperation + "'");
771 responseObject.setStatusCode("503");
773 } catch (Exception e) {
774 responseObject.setMessage(e.getMessage());
775 responseObject.setStatusCode("500");
776 log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
782 private boolean failed(ResponseObject error) {
783 return !error.getStatusCode().isEmpty()
784 && !("0".equals(error.getStatusCode()) || "200".equals(error.getStatusCode()));
787 private boolean isValidRequest(ServiceTopologyOperationInput input) {
788 return input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null;
793 public ListenableFuture<RpcResult<PnfTopologyOperationOutput>> pnfTopologyOperation(PnfTopologyOperationInput input) {
795 final String svcOperation = "pnf-topology-operation";
796 ServiceData serviceData;
797 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
798 Properties properties = new Properties();
800 log.info(CALLED_STR, svcOperation);
801 // create a new response object
802 PnfTopologyOperationOutputBuilder responseBuilder = new PnfTopologyOperationOutputBuilder();
804 if (hasInvalidServiceId(input)) {
805 log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
806 responseBuilder.setResponseCode("404");
807 responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
808 responseBuilder.setAckFinalIndicator("Y");
809 RpcResult<PnfTopologyOperationOutput> rpcResult = RpcResultBuilder.<PnfTopologyOperationOutput>status(true)
810 .withResult(responseBuilder.build()).build();
812 return Futures.immediateFuture(rpcResult);
815 // Grab the service instance ID from the input buffer
816 String siid = input.getServiceInformation().getServiceInstanceId();
818 trySetSvcRequestId(input, responseBuilder);
820 /* Comment out mandatory check for pnf id for scenario wherein for assign/create request pnf-id is generated by
822 if (hasInvalidPnfId(input)) {
823 log.debug("exiting {} because of null or empty pnf-id", svcOperation);
824 responseBuilder.setResponseCode("404");
825 responseBuilder.setResponseMessage("invalid input, null or empty pnf-id");
826 responseBuilder.setAckFinalIndicator("Y");
828 RpcResult<PnfTopologyOperationOutput> rpcResult = RpcResultBuilder.<PnfTopologyOperationOutput>status(true)
829 .withResult(responseBuilder.build()).build();
831 return Futures.immediateFuture(rpcResult);
835 String pnfId = input.getPnfDetails().getPnfId();
836 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
837 getServiceData(siid, serviceDataBuilder);
839 ServiceDataBuilder operDataBuilder = new ServiceDataBuilder();
840 getServiceData(siid, operDataBuilder, LogicalDatastoreType.OPERATIONAL);
842 // Set the serviceStatus based on input
843 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
844 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
847 // setup a service-data object builder
848 // ACTION pnf-topology-operation
850 // USES sdnc-request-header;
851 // USES request-information;
852 // USES service-information;
855 // USES pnf-topology-response-body;
857 // USES service-information
861 log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
862 PnfTopologyOperationInputBuilder inputBuilder = new PnfTopologyOperationInputBuilder(input);
863 GenericResourceApiUtil.toProperties(properties, inputBuilder.build());
865 log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, siid, operDataBuilder.build());
866 GenericResourceApiUtil.toProperties(properties, OPERATIONAL_DATA_PARAM, operDataBuilder);
868 // Call SLI sync method
870 ResponseObject responseObject = new ResponseObject("200", "");
871 String ackFinal = "Y";
872 String serviceObjectPath = null;
873 String pnfObjectPath = null;
874 Properties respProps = tryGetProperties(svcOperation, properties, serviceDataBuilder, responseObject);
876 if (respProps != null) {
877 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
878 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
879 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
881 pnfId = respProps.getProperty("pnfId");
883 serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
884 pnfObjectPath = respProps.getProperty(PNF_OBJECT_PATH_PARAM);
887 setServiceStatus(serviceStatusBuilder, responseObject.getStatusCode(), responseObject.getMessage(), ackFinal);
888 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
889 serviceStatusBuilder.setRpcName(svcOperation);
891 if (failed(responseObject)) {
892 responseBuilder.setResponseCode(responseObject.getStatusCode());
893 responseBuilder.setResponseMessage(responseObject.getMessage());
894 responseBuilder.setAckFinalIndicator(ackFinal);
896 ServiceBuilder serviceBuilder = new ServiceBuilder();
897 serviceBuilder.setServiceInstanceId(siid);
898 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
900 saveService(serviceBuilder.build(), true, LogicalDatastoreType.CONFIGURATION);
901 trySaveService(input, serviceBuilder);
902 } catch (Exception e) {
903 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
905 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
907 RpcResult<PnfTopologyOperationOutput> rpcResult = RpcResultBuilder.<PnfTopologyOperationOutput>status(true)
908 .withResult(responseBuilder.build()).build();
911 return Futures.immediateFuture(rpcResult);
914 // Got success from SLI
916 serviceData = serviceDataBuilder.build();
917 log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
920 ServiceBuilder serviceBuilder = new ServiceBuilder();
921 serviceBuilder.setServiceData(serviceData);
922 serviceBuilder.setServiceInstanceId(siid);
923 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
924 saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
926 if (isValidRequest(input) && input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate)) {
927 // Only update operational tree on Assign
928 log.info(UPDATING_TREE_INFO_MESSAGE);
929 saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
932 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
933 serviceResponseInformationBuilder.setInstanceId(siid);
934 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
935 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
937 PnfResponseInformationBuilder pnfResponseInformationBuilder = new PnfResponseInformationBuilder();
938 pnfResponseInformationBuilder.setInstanceId(pnfId);
939 pnfResponseInformationBuilder.setObjectPath(pnfObjectPath);
940 responseBuilder.setPnfResponseInformation(pnfResponseInformationBuilder.build());
942 } catch (Exception e) {
943 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
944 responseBuilder.setResponseCode("500");
945 responseBuilder.setResponseMessage(e.getMessage());
946 responseBuilder.setAckFinalIndicator("Y");
947 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
949 RpcResult<PnfTopologyOperationOutput> rpcResult = RpcResultBuilder.<PnfTopologyOperationOutput>status(true)
950 .withResult(responseBuilder.build()).build();
952 return Futures.immediateFuture(rpcResult);
956 responseBuilder.setResponseCode(responseObject.getStatusCode());
957 responseBuilder.setAckFinalIndicator(ackFinal);
958 trySetResponseMessage(responseBuilder, responseObject);
959 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
960 log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
962 RpcResult<PnfTopologyOperationOutput> rpcResult = RpcResultBuilder.<PnfTopologyOperationOutput>status(true)
963 .withResult(responseBuilder.build()).build();
966 return Futures.immediateFuture(rpcResult);
969 private void trySetResponseMessage(PnfTopologyOperationOutputBuilder responseBuilder,
970 ResponseObject responseObject) {
971 if (responseObject.getMessage() != null) {
972 responseBuilder.setResponseMessage(responseObject.getMessage());
976 private void trySaveService(PnfTopologyOperationInput input, ServiceBuilder serviceBuilder) {
977 if (isValidRequest(input) && (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete)
978 || input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))) {
980 // Only update operational tree on activate or delete
981 log.info(UPDATING_TREE_INFO_MESSAGE);
982 saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
986 private boolean hasInvalidPnfId(PnfTopologyOperationInput input) {
987 return input.getPnfDetails() == null || input.getPnfDetails().getPnfId() == null
988 || input.getPnfDetails().getPnfId().length() == 0;
991 private boolean hasInvalidServiceId(PnfTopologyOperationInput input) {
992 return input == null || input.getServiceInformation() == null
993 || input.getServiceInformation().getServiceInstanceId() == null
994 || input.getServiceInformation().getServiceInstanceId().length() == 0;
997 private void trySetSvcRequestId(PnfTopologyOperationInput input,
998 PnfTopologyOperationOutputBuilder responseBuilder) {
999 if (input.getSdncRequestHeader() != null) {
1000 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1004 private boolean isValidRequest(PnfTopologyOperationInput input) {
1005 return input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null;
1010 public ListenableFuture<RpcResult<VnfTopologyOperationOutput>> vnfTopologyOperation(VnfTopologyOperationInput input) {
1012 final String svcOperation = "vnf-topology-operation";
1013 ServiceData serviceData;
1014 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
1015 Properties properties = new Properties();
1017 log.info(CALLED_STR, svcOperation);
1018 // create a new response object
1019 VnfTopologyOperationOutputBuilder responseBuilder = new VnfTopologyOperationOutputBuilder();
1021 if (hasInvalidServiceId(input)) {
1022 log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
1023 responseBuilder.setResponseCode("404");
1024 responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
1025 responseBuilder.setAckFinalIndicator("Y");
1026 RpcResult<VnfTopologyOperationOutput> rpcResult = RpcResultBuilder.<VnfTopologyOperationOutput>status(true)
1027 .withResult(responseBuilder.build()).build();
1029 return Futures.immediateFuture(rpcResult);
1032 // Grab the service instance ID from the input buffer
1033 String siid = input.getServiceInformation().getServiceInstanceId();
1035 trySetSvcRequestId(input, responseBuilder);
1037 /* Comment out mandatory check for vnf id for scenario wherein for assign/create request vnf-id is generated by
1039 if (hasInvalidVnfId(input)) {
1040 log.debug("exiting {} because of null or empty vnf-id", svcOperation);
1041 responseBuilder.setResponseCode("404");
1042 responseBuilder.setResponseMessage("invalid input, null or empty vnf-id");
1043 responseBuilder.setAckFinalIndicator("Y");
1045 RpcResult<VnfTopologyOperationOutput> rpcResult = RpcResultBuilder.<VnfTopologyOperationOutput>status(true)
1046 .withResult(responseBuilder.build()).build();
1048 return Futures.immediateFuture(rpcResult);
1052 String vnfId = input.getVnfInformation().getVnfId();
1053 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
1054 getServiceData(siid, serviceDataBuilder);
1056 ServiceDataBuilder operDataBuilder = new ServiceDataBuilder();
1057 getServiceData(siid, operDataBuilder, LogicalDatastoreType.OPERATIONAL);
1059 // Set the serviceStatus based on input
1060 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
1061 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
1064 // setup a service-data object builder
1065 // ACTION vnf-topology-operation
1067 // USES sdnc-request-header;
1068 // USES request-information;
1069 // USES service-information;
1070 // USES vnf-request-information
1072 // USES vnf-topology-response-body;
1073 // USES vnf-information
1074 // USES service-information
1076 // container service-data
1077 // uses vnf-configuration-information;
1078 // uses oper-status;
1080 log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
1081 VnfTopologyOperationInputBuilder inputBuilder = new VnfTopologyOperationInputBuilder(input);
1082 GenericResourceApiUtil.toProperties(properties, inputBuilder.build());
1084 log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, siid, operDataBuilder.build());
1085 GenericResourceApiUtil.toProperties(properties, OPERATIONAL_DATA_PARAM, operDataBuilder);
1087 // Call SLI sync method
1089 ResponseObject responseObject = new ResponseObject("200", "");
1090 String ackFinal = "Y";
1091 String serviceObjectPath = null;
1092 String vnfObjectPath = null;
1093 Properties respProps = tryGetProperties(svcOperation, properties, serviceDataBuilder, responseObject);
1095 if (respProps != null) {
1096 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
1097 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
1098 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
1099 if (vnfId == null) {
1100 vnfId = respProps.getProperty("vnfId");
1102 serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
1103 vnfObjectPath = respProps.getProperty(VNF_OBJECT_PATH_PARAM);
1106 setServiceStatus(serviceStatusBuilder, responseObject.getStatusCode(), responseObject.getMessage(), ackFinal);
1107 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
1108 serviceStatusBuilder.setRpcName(svcOperation);
1110 if (failed(responseObject)) {
1111 responseBuilder.setResponseCode(responseObject.getStatusCode());
1112 responseBuilder.setResponseMessage(responseObject.getMessage());
1113 responseBuilder.setAckFinalIndicator(ackFinal);
1115 ServiceBuilder serviceBuilder = new ServiceBuilder();
1116 serviceBuilder.setServiceInstanceId(siid);
1117 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
1119 saveService(serviceBuilder.build(), true, LogicalDatastoreType.CONFIGURATION);
1120 trySaveService(input, serviceBuilder);
1121 } catch (Exception e) {
1122 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
1124 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
1126 RpcResult<VnfTopologyOperationOutput> rpcResult = RpcResultBuilder.<VnfTopologyOperationOutput>status(true)
1127 .withResult(responseBuilder.build()).build();
1130 return Futures.immediateFuture(rpcResult);
1133 // Got success from SLI
1135 serviceData = serviceDataBuilder.build();
1136 log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
1139 ServiceBuilder serviceBuilder = new ServiceBuilder();
1140 serviceBuilder.setServiceData(serviceData);
1141 serviceBuilder.setServiceInstanceId(siid);
1142 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
1143 saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
1145 if (isValidRequest(input) && input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate)) {
1146 // Only update operational tree on Assign
1147 log.info(UPDATING_TREE_INFO_MESSAGE);
1148 saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1151 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
1152 serviceResponseInformationBuilder.setInstanceId(siid);
1153 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
1154 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
1156 VnfResponseInformationBuilder vnfResponseInformationBuilder = new VnfResponseInformationBuilder();
1157 vnfResponseInformationBuilder.setInstanceId(vnfId);
1158 vnfResponseInformationBuilder.setObjectPath(vnfObjectPath);
1159 responseBuilder.setVnfResponseInformation(vnfResponseInformationBuilder.build());
1161 } catch (Exception e) {
1162 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
1163 responseBuilder.setResponseCode("500");
1164 responseBuilder.setResponseMessage(e.getMessage());
1165 responseBuilder.setAckFinalIndicator("Y");
1166 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
1168 RpcResult<VnfTopologyOperationOutput> rpcResult = RpcResultBuilder.<VnfTopologyOperationOutput>status(true)
1169 .withResult(responseBuilder.build()).build();
1171 return Futures.immediateFuture(rpcResult);
1175 responseBuilder.setResponseCode(responseObject.getStatusCode());
1176 responseBuilder.setAckFinalIndicator(ackFinal);
1177 trySetResponseMessage(responseBuilder, responseObject);
1178 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
1179 log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
1181 RpcResult<VnfTopologyOperationOutput> rpcResult = RpcResultBuilder.<VnfTopologyOperationOutput>status(true)
1182 .withResult(responseBuilder.build()).build();
1185 return Futures.immediateFuture(rpcResult);
1188 private void trySetResponseMessage(VnfTopologyOperationOutputBuilder responseBuilder,
1189 ResponseObject responseObject) {
1190 if (responseObject.getMessage() != null) {
1191 responseBuilder.setResponseMessage(responseObject.getMessage());
1195 private void trySaveService(VnfTopologyOperationInput input, ServiceBuilder serviceBuilder) {
1196 if (isValidRequest(input) && (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete)
1197 || input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))) {
1199 // Only update operational tree on activate or delete
1200 log.info(UPDATING_TREE_INFO_MESSAGE);
1201 saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1205 private boolean hasInvalidVnfId(VnfTopologyOperationInput input) {
1206 return input.getVnfInformation() == null || input.getVnfInformation().getVnfId() == null
1207 || input.getVnfInformation().getVnfId().length() == 0;
1210 private boolean hasInvalidServiceId(VnfTopologyOperationInput input) {
1211 return input == null || input.getServiceInformation() == null
1212 || input.getServiceInformation().getServiceInstanceId() == null
1213 || input.getServiceInformation().getServiceInstanceId().length() == 0;
1216 private void trySetSvcRequestId(VnfTopologyOperationInput input,
1217 VnfTopologyOperationOutputBuilder responseBuilder) {
1218 if (input.getSdncRequestHeader() != null) {
1219 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1223 private boolean isValidRequest(VnfTopologyOperationInput input) {
1224 return input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null;
1228 public ListenableFuture<RpcResult<VfModuleTopologyOperationOutput>> vfModuleTopologyOperation(
1229 VfModuleTopologyOperationInput input) {
1231 final String svcOperation = "vf-module-topology-operation";
1232 ServiceData serviceData;
1233 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
1234 Properties parms = new Properties();
1236 log.info(CALLED_STR, svcOperation);
1237 // create a new response object
1238 VfModuleTopologyOperationOutputBuilder responseBuilder = new VfModuleTopologyOperationOutputBuilder();
1240 if (hasInvalidServiceId(input)) {
1241 log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
1242 responseBuilder.setResponseCode("403");
1243 responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
1244 responseBuilder.setAckFinalIndicator("Y");
1246 RpcResult<VfModuleTopologyOperationOutput> rpcResult = RpcResultBuilder
1247 .<VfModuleTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1250 return Futures.immediateFuture(rpcResult);
1253 if (hasInvalidVnfId(input)) {
1254 log.debug("exiting {} because of null or empty vnf-id", svcOperation);
1255 responseBuilder.setResponseCode("403");
1256 responseBuilder.setResponseMessage("invalid input, null or empty vnf-id");
1257 responseBuilder.setAckFinalIndicator("Y");
1258 RpcResult<VfModuleTopologyOperationOutput> rpcResult = RpcResultBuilder
1259 .<VfModuleTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1260 return Futures.immediateFuture(rpcResult);
1263 if (hasInvalidVfModuleId(input)) {
1264 log.debug("exiting {} because of null or empty vf-module-id", svcOperation);
1265 responseBuilder.setResponseCode("403");
1266 responseBuilder.setResponseMessage("invalid input, vf-module-id is null or empty");
1267 responseBuilder.setAckFinalIndicator("Y");
1269 RpcResult<VfModuleTopologyOperationOutput> rpcResult = RpcResultBuilder
1270 .<VfModuleTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1272 return Futures.immediateFuture(rpcResult);
1275 // Grab the service instance ID from the input buffer
1276 String siid = input.getServiceInformation().getServiceInstanceId();
1277 String vnfId = input.getVnfInformation().getVnfId();
1278 String vfModuleId = input.getVfModuleInformation().getVfModuleId();
1280 trySetSvcRequestId(input, responseBuilder);
1282 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
1283 getServiceData(siid, serviceDataBuilder);
1285 ServiceDataBuilder operDataBuilder = new ServiceDataBuilder();
1286 getServiceData(siid, operDataBuilder, LogicalDatastoreType.OPERATIONAL);
1288 // Set the serviceStatus based on input
1289 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
1290 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
1293 // setup a service-data object builder
1294 // ACTION vnf-topology-operation
1296 // USES sdnc-request-header;
1297 // USES request-information;
1298 // USES service-information;
1299 // USES vnf-request-information
1301 // USES vnf-topology-response-body;
1302 // USES vnf-information
1303 // USES service-information
1305 // container service-data
1306 // uses vnf-configuration-information;
1307 // uses oper-status;
1309 log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
1310 VfModuleTopologyOperationInputBuilder inputBuilder = new VfModuleTopologyOperationInputBuilder(input);
1311 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
1313 log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, siid, operDataBuilder.build());
1314 GenericResourceApiUtil.toProperties(parms, OPERATIONAL_DATA_PARAM, operDataBuilder);
1316 // Call SLI sync method
1318 ResponseObject responseObject = new ResponseObject("200", "");
1319 String ackFinal = "Y";
1320 String serviceObjectPath = null;
1321 String vnfObjectPath = null;
1322 String vfModuleObjectPath = null;
1323 Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, responseObject);
1325 if (respProps != null) {
1326 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
1327 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
1328 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
1329 serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
1330 vnfObjectPath = respProps.getProperty(VNF_OBJECT_PATH_PARAM);
1331 vfModuleObjectPath = respProps.getProperty(VF_MODULE_OBJECT_PATH_PARAM);
1334 setServiceStatus(serviceStatusBuilder, responseObject.getStatusCode(), responseObject.getMessage(), ackFinal);
1335 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
1336 serviceStatusBuilder.setRpcName(svcOperation);
1338 if (failed(responseObject)) {
1339 responseBuilder.setResponseCode(responseObject.getStatusCode());
1340 responseBuilder.setResponseMessage(responseObject.getMessage());
1341 responseBuilder.setAckFinalIndicator(ackFinal);
1343 ServiceBuilder serviceBuilder = new ServiceBuilder();
1344 serviceBuilder.setServiceInstanceId(siid);
1345 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
1347 saveService(serviceBuilder.build(), true, LogicalDatastoreType.CONFIGURATION);
1348 } catch (Exception e) {
1349 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
1351 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
1353 RpcResult<VfModuleTopologyOperationOutput> rpcResult = RpcResultBuilder
1354 .<VfModuleTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1357 return Futures.immediateFuture(rpcResult);
1360 // Got success from SLI
1362 serviceData = serviceDataBuilder.build();
1363 log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
1366 ServiceBuilder serviceBuilder = new ServiceBuilder();
1367 serviceBuilder.setServiceData(serviceData);
1368 serviceBuilder.setServiceInstanceId(siid);
1369 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
1370 saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
1372 trySaveService(input, serviceBuilder);
1374 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
1375 serviceResponseInformationBuilder.setInstanceId(siid);
1376 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
1377 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
1379 VnfResponseInformationBuilder vnfResponseInformationBuilder = new VnfResponseInformationBuilder();
1380 vnfResponseInformationBuilder.setInstanceId(vnfId);
1381 vnfResponseInformationBuilder.setObjectPath(vnfObjectPath);
1382 responseBuilder.setVnfResponseInformation(vnfResponseInformationBuilder.build());
1384 VfModuleResponseInformationBuilder vfModuleResponseInformationBuilder = new VfModuleResponseInformationBuilder();
1385 vfModuleResponseInformationBuilder.setInstanceId(vfModuleId);
1386 vfModuleResponseInformationBuilder.setObjectPath(vfModuleObjectPath);
1387 responseBuilder.setVfModuleResponseInformation(vfModuleResponseInformationBuilder.build());
1389 } catch (Exception e) {
1390 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
1391 responseBuilder.setResponseCode("500");
1392 responseBuilder.setResponseMessage(e.getMessage());
1393 responseBuilder.setAckFinalIndicator("Y");
1394 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
1396 RpcResult<VfModuleTopologyOperationOutput> rpcResult = RpcResultBuilder
1397 .<VfModuleTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1399 return Futures.immediateFuture(rpcResult);
1403 responseBuilder.setResponseCode(responseObject.getStatusCode());
1404 responseBuilder.setAckFinalIndicator(ackFinal);
1405 trySetResponseMessage(responseBuilder, responseObject);
1406 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
1407 log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
1409 RpcResult<VfModuleTopologyOperationOutput> rpcResult = RpcResultBuilder
1410 .<VfModuleTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1413 return Futures.immediateFuture(rpcResult);
1416 private void trySetResponseMessage(VfModuleTopologyOperationOutputBuilder responseBuilder,
1417 ResponseObject responseObject) {
1418 if (responseObject.getMessage() != null) {
1419 responseBuilder.setResponseMessage(responseObject.getMessage());
1423 private void trySaveService(VfModuleTopologyOperationInput input, ServiceBuilder serviceBuilder) {
1424 if (isValidRequest(input) && (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Unassign)
1425 || input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))) {
1426 // Only update operational tree on activate or delete
1428 log.info(UPDATING_TREE_INFO_MESSAGE);
1429 saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1433 private void trySetSvcRequestId(VfModuleTopologyOperationInput input,
1434 VfModuleTopologyOperationOutputBuilder responseBuilder) {
1435 if (input.getSdncRequestHeader() != null) {
1436 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1440 private boolean hasInvalidVfModuleId(VfModuleTopologyOperationInput input) {
1441 return input.getVfModuleInformation() == null || input.getVfModuleInformation().getVfModuleId() == null
1442 || input.getVfModuleInformation().getVfModuleId().length() == 0;
1445 private boolean hasInvalidVnfId(VfModuleTopologyOperationInput input) {
1446 return input.getVnfInformation() == null || input.getVnfInformation().getVnfId() == null
1447 || input.getVnfInformation().getVnfId().length() == 0;
1450 private boolean hasInvalidServiceId(VfModuleTopologyOperationInput input) {
1451 return input == null || input.getServiceInformation() == null
1452 || input.getServiceInformation().getServiceInstanceId() == null
1453 || input.getServiceInformation().getServiceInstanceId().length() == 0;
1456 private boolean isValidRequest(VfModuleTopologyOperationInput input) {
1457 return input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null;
1461 public ListenableFuture<RpcResult<NetworkTopologyOperationOutput>> networkTopologyOperation(
1462 NetworkTopologyOperationInput input) {
1464 final String svcOperation = "network-topology-operation";
1465 ServiceData serviceData;
1466 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
1467 Properties parms = new Properties();
1469 log.info(CALLED_STR, svcOperation);
1470 // create a new response object
1471 NetworkTopologyOperationOutputBuilder responseBuilder = new NetworkTopologyOperationOutputBuilder();
1473 if (hasInvalidServiceId(input)) {
1474 log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
1475 return buildRpcResultFuture(responseBuilder, NULL_OR_EMPTY_ERROR_PARAM);
1478 String siid = input.getServiceInformation().getServiceInstanceId();
1480 // Get the service-instance service data from MD-SAL
1481 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
1482 getServiceData(siid, serviceDataBuilder);
1484 this.trySetSvcRequestId(input, responseBuilder);
1486 ServiceData sd = serviceDataBuilder.build();
1487 if (isInvalidServiceData(sd)) {
1488 log.debug(EMPTY_SERVICE_INSTANCE_MESSAGE, svcOperation);
1489 return buildRpcResultFuture(responseBuilder, INVALID_INPUT_ERROR_MESSAGE);
1492 log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
1493 NetworkTopologyOperationInputBuilder inputBuilder = new NetworkTopologyOperationInputBuilder(input);
1494 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
1496 // Call SLI sync method
1498 ResponseObject responseObject = new ResponseObject("200", "");
1499 String ackFinal = "Y";
1500 String networkId = ERROR_NETWORK_ID;
1501 String serviceObjectPath = null;
1502 String networkObjectPath = null;
1503 Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, responseObject);
1505 if (respProps != null) {
1506 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
1507 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
1508 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
1509 networkId = respProps.getProperty("networkId");
1510 serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
1511 networkObjectPath = respProps.getProperty(NETWORK_OBJECT_PATH_PARAM);
1514 if (failed(responseObject)) {
1515 responseBuilder.setResponseCode(responseObject.getStatusCode());
1516 responseBuilder.setResponseMessage(responseObject.getMessage());
1517 responseBuilder.setAckFinalIndicator(ackFinal);
1519 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
1521 RpcResult<NetworkTopologyOperationOutput> rpcResult = RpcResultBuilder
1522 .<NetworkTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1524 return Futures.immediateFuture(rpcResult);
1527 // Got success from SLI
1530 serviceData = serviceDataBuilder.build();
1531 log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
1534 ServiceBuilder serviceBuilder = new ServiceBuilder();
1535 serviceBuilder.setServiceData(serviceData);
1536 serviceBuilder.setServiceInstanceId(siid);
1537 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
1538 saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
1540 trySaveService(input, serviceBuilder);
1542 NetworkResponseInformationBuilder networkResponseInformationBuilder = new NetworkResponseInformationBuilder();
1543 networkResponseInformationBuilder.setInstanceId(networkId);
1544 networkResponseInformationBuilder.setObjectPath(networkObjectPath);
1545 responseBuilder.setNetworkResponseInformation(networkResponseInformationBuilder.build());
1547 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
1548 serviceResponseInformationBuilder.setInstanceId(siid);
1549 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
1550 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
1552 } catch (IllegalStateException e) {
1553 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
1554 responseBuilder.setResponseCode("500");
1555 responseBuilder.setResponseMessage(e.getMessage());
1556 responseBuilder.setAckFinalIndicator("Y");
1557 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
1559 RpcResult<NetworkTopologyOperationOutput> rpcResult = RpcResultBuilder
1560 .<NetworkTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1562 return Futures.immediateFuture(rpcResult);
1566 responseBuilder.setResponseCode(responseObject.getStatusCode());
1567 responseBuilder.setAckFinalIndicator(ackFinal);
1568 trySetResponseMessage(responseBuilder, responseObject);
1569 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
1570 log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
1572 RpcResult<NetworkTopologyOperationOutput> rpcResult = RpcResultBuilder
1573 .<NetworkTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1575 return Futures.immediateFuture(rpcResult);
1578 private void trySetResponseMessage(NetworkTopologyOperationOutputBuilder responseBuilder,
1579 ResponseObject responseObject) {
1580 if (responseObject.getMessage() != null) {
1581 responseBuilder.setResponseMessage(responseObject.getMessage());
1585 private void trySetSvcRequestId(NetworkTopologyOperationInput input,
1586 NetworkTopologyOperationOutputBuilder responseBuilder) {
1587 if (input.getSdncRequestHeader() != null) {
1588 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1592 private void trySaveService(NetworkTopologyOperationInput input, ServiceBuilder serviceBuilder) {
1593 if (isValidRequest(input) && (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate)
1594 || input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Create))) {
1595 // Only update operational tree on Activate
1596 log.info(UPDATING_TREE_INFO_MESSAGE);
1597 saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1601 private boolean hasInvalidServiceId(NetworkTopologyOperationInput input) {
1602 return input == null || input.getServiceInformation() == null
1603 || input.getServiceInformation().getServiceInstanceId() == null
1604 || input.getServiceInformation().getServiceInstanceId().length() == 0;
1607 private ListenableFuture<RpcResult<NetworkTopologyOperationOutput>> buildRpcResultFuture(
1608 NetworkTopologyOperationOutputBuilder responseBuilder, String responseMessage) {
1610 responseBuilder.setResponseCode("404");
1611 responseBuilder.setResponseMessage(responseMessage);
1612 responseBuilder.setAckFinalIndicator("Y");
1614 RpcResult<NetworkTopologyOperationOutput> rpcResult = RpcResultBuilder
1615 .<NetworkTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1617 return Futures.immediateFuture(rpcResult);
1620 private boolean isValidRequest(NetworkTopologyOperationInput input) {
1621 return input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null;
1625 public ListenableFuture<RpcResult<ContrailRouteTopologyOperationOutput>> contrailRouteTopologyOperation(
1626 ContrailRouteTopologyOperationInput input) {
1628 final String svcOperation = "contrail-route-topology-operation";
1629 ServiceData serviceData;
1630 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
1631 Properties properties = new Properties();
1633 log.info(CALLED_STR, svcOperation);
1634 // create a new response object
1635 ContrailRouteTopologyOperationOutputBuilder responseBuilder = new ContrailRouteTopologyOperationOutputBuilder();
1637 if (hasInvalidServiceId(input)) {
1638 log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
1639 return buildRpcResultFuture(responseBuilder, NULL_OR_EMPTY_ERROR_PARAM);
1642 String siid = input.getServiceInformation().getServiceInstanceId();
1644 // Get the service-instance service data from MD-SAL
1645 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
1646 getServiceData(siid, serviceDataBuilder);
1648 trySetSvcRequestId(input, responseBuilder);
1650 ServiceData sd = serviceDataBuilder.build();
1651 if (isInvalidServiceData(sd)) {
1652 log.debug(EMPTY_SERVICE_INSTANCE_MESSAGE, svcOperation);
1653 return buildRpcResultFuture(responseBuilder, INVALID_INPUT_ERROR_MESSAGE);
1656 log.info("Adding INPUT data for " + svcOperation + " [" + siid + "] input: " + input);
1657 ContrailRouteTopologyOperationInputBuilder inputBuilder = new ContrailRouteTopologyOperationInputBuilder(input);
1658 GenericResourceApiUtil.toProperties(properties, inputBuilder.build());
1660 // Call SLI sync method
1662 ResponseObject responseObject = new ResponseObject("200", "");
1663 String ackFinal = "Y";
1664 String allottedResourceId = ERROR_NETWORK_ID;
1665 String serviceObjectPath = null;
1666 String contrailRouteObjectPath = null;
1667 Properties respProps = tryGetProperties(svcOperation, properties, serviceDataBuilder, responseObject);
1669 if (respProps != null) {
1670 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
1671 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
1672 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
1673 allottedResourceId = respProps.getProperty(ALLOTTED_RESOURCE_ID_PARAM);
1674 serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
1675 contrailRouteObjectPath = respProps.getProperty("contrail-route-object-path");
1678 if (failed(responseObject)) {
1679 responseBuilder.setResponseCode(responseObject.getStatusCode());
1680 responseBuilder.setResponseMessage(responseObject.getMessage());
1681 responseBuilder.setAckFinalIndicator(ackFinal);
1682 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
1684 RpcResult<ContrailRouteTopologyOperationOutput> rpcResult = RpcResultBuilder
1685 .<ContrailRouteTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1687 return Futures.immediateFuture(rpcResult);
1690 // Got success from SLI
1692 serviceData = serviceDataBuilder.build();
1693 log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
1696 ServiceBuilder serviceBuilder = new ServiceBuilder();
1697 serviceBuilder.setServiceData(serviceData);
1698 serviceBuilder.setServiceInstanceId(siid);
1699 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
1700 saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
1702 trySaveService(input, serviceBuilder);
1704 ContrailRouteResponseInformationBuilder contrailRouteResponseInformationBuilder = new ContrailRouteResponseInformationBuilder();
1705 contrailRouteResponseInformationBuilder.setInstanceId(allottedResourceId);
1706 contrailRouteResponseInformationBuilder.setObjectPath(contrailRouteObjectPath);
1707 responseBuilder.setContrailRouteResponseInformation(contrailRouteResponseInformationBuilder.build());
1709 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
1710 serviceResponseInformationBuilder.setInstanceId(siid);
1711 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
1712 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
1714 } catch (IllegalStateException e) {
1715 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
1716 responseBuilder.setResponseCode("500");
1717 responseBuilder.setResponseMessage(e.getMessage());
1718 responseBuilder.setAckFinalIndicator("Y");
1719 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
1721 RpcResult<ContrailRouteTopologyOperationOutput> rpcResult = RpcResultBuilder
1722 .<ContrailRouteTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1724 return Futures.immediateFuture(rpcResult);
1728 responseBuilder.setResponseCode(responseObject.getStatusCode());
1729 responseBuilder.setAckFinalIndicator(ackFinal);
1730 trySetResponseMessage(responseBuilder, responseObject);
1731 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
1732 log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
1734 RpcResult<ContrailRouteTopologyOperationOutput> rpcResult = RpcResultBuilder
1735 .<ContrailRouteTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1737 return Futures.immediateFuture(rpcResult);
1740 private void trySetResponseMessage(ContrailRouteTopologyOperationOutputBuilder responseBuilder,
1741 ResponseObject responseObject) {
1742 if (responseObject.getMessage() != null) {
1743 responseBuilder.setResponseMessage(responseObject.getMessage());
1747 private void trySaveService(ContrailRouteTopologyOperationInput input, ServiceBuilder serviceBuilder) {
1748 if (isValidRequest(input) && (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Unassign)
1749 || input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))) {
1750 // Only update operational tree on activate or delete
1751 log.info(UPDATING_TREE_INFO_MESSAGE);
1752 saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1756 private void trySetSvcRequestId(ContrailRouteTopologyOperationInput input,
1757 ContrailRouteTopologyOperationOutputBuilder responseBuilder) {
1758 if (input.getSdncRequestHeader() != null) {
1759 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1763 private boolean hasInvalidServiceId(ContrailRouteTopologyOperationInput input) {
1764 return input == null || input.getServiceInformation() == null
1765 || input.getServiceInformation().getServiceInstanceId() == null
1766 || input.getServiceInformation().getServiceInstanceId().length() == 0;
1769 private ListenableFuture<RpcResult<ContrailRouteTopologyOperationOutput>> buildRpcResultFuture(
1770 ContrailRouteTopologyOperationOutputBuilder responseBuilder, String responseMessage) {
1771 responseBuilder.setResponseCode("404");
1772 responseBuilder.setResponseMessage(responseMessage);
1773 responseBuilder.setAckFinalIndicator("Y");
1775 RpcResult<ContrailRouteTopologyOperationOutput> rpcResult = RpcResultBuilder
1776 .<ContrailRouteTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1778 return Futures.immediateFuture(rpcResult);
1781 private boolean isValidRequest(ContrailRouteTopologyOperationInput input) {
1782 return input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null;
1786 public ListenableFuture<RpcResult<SecurityZoneTopologyOperationOutput>> securityZoneTopologyOperation(
1787 SecurityZoneTopologyOperationInput input) {
1789 final String svcOperation = "security-zone-topology-operation";
1790 ServiceData serviceData;
1791 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
1792 Properties parms = new Properties();
1794 log.info(CALLED_STR, svcOperation);
1795 // create a new response object
1796 SecurityZoneTopologyOperationOutputBuilder responseBuilder = new SecurityZoneTopologyOperationOutputBuilder();
1798 if (this.hasInvalidServiceId(input)) {
1799 log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
1800 return buildRpcResultFuture(responseBuilder, NULL_OR_EMPTY_ERROR_PARAM);
1803 String siid = input.getServiceInformation().getServiceInstanceId();
1805 // Get the service-instance service data from MD-SAL
1806 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
1807 getServiceData(siid, serviceDataBuilder);
1808 trySetSvcRequestId(input, responseBuilder);
1810 ServiceData sd = serviceDataBuilder.build();
1811 if (isInvalidServiceData(sd)) {
1812 log.debug(EMPTY_SERVICE_INSTANCE_MESSAGE, svcOperation);
1813 return buildRpcResultFuture(responseBuilder, INVALID_INPUT_ERROR_MESSAGE);
1816 log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
1817 SecurityZoneTopologyOperationInputBuilder inputBuilder = new SecurityZoneTopologyOperationInputBuilder(input);
1818 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
1820 // Call SLI sync method
1822 Properties respProps = null;
1824 ResponseObject responseObject = new ResponseObject("200", "");
1825 String ackFinal = "Y";
1826 String allottedResourceId = ERROR_NETWORK_ID;
1827 String serviceObjectPath = null;
1828 String securityZoneObjectPath = null;
1831 if (svcLogicClient.hasGraph(APP_NAME, svcOperation, null, "sync")) {
1834 respProps = svcLogicClient.execute(APP_NAME, svcOperation, null, "sync", serviceDataBuilder, parms);
1835 } catch (Exception e) {
1836 log.error(SERVICE_LOGIC_EXECUTION_ERROR_MESSAGE, svcOperation, e);
1837 responseObject.setMessage(e.getMessage());
1838 responseObject.setStatusCode("500");
1841 responseObject.setMessage(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + svcOperation + "'");
1842 responseObject.setStatusCode("503");
1844 } catch (Exception e) {
1845 responseObject.setStatusCode("500");
1846 responseObject.setMessage(e.getMessage());
1847 log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
1850 if (respProps != null) {
1851 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
1852 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
1853 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
1854 allottedResourceId = respProps.getProperty(ALLOTTED_RESOURCE_ID_PARAM);
1855 serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
1856 securityZoneObjectPath = respProps.getProperty("security-zone-object-path");
1859 if (failed(responseObject)) {
1860 responseBuilder.setResponseCode(responseObject.getStatusCode());
1861 responseBuilder.setResponseMessage(responseObject.getMessage());
1862 responseBuilder.setAckFinalIndicator(ackFinal);
1863 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
1865 RpcResult<SecurityZoneTopologyOperationOutput> rpcResult = RpcResultBuilder
1866 .<SecurityZoneTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1868 return Futures.immediateFuture(rpcResult);
1871 // Got success from SLI
1874 serviceData = serviceDataBuilder.build();
1875 log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
1878 ServiceBuilder serviceBuilder = new ServiceBuilder();
1879 serviceBuilder.setServiceData(serviceData);
1880 serviceBuilder.setServiceInstanceId(siid);
1881 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
1882 saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
1884 trySaveService(input, serviceBuilder);
1886 SecurityZoneResponseInformationBuilder securityZoneResponseInformationBuilder = new SecurityZoneResponseInformationBuilder();
1887 securityZoneResponseInformationBuilder.setInstanceId(allottedResourceId);
1888 securityZoneResponseInformationBuilder.setObjectPath(securityZoneObjectPath);
1889 responseBuilder.setSecurityZoneResponseInformation(securityZoneResponseInformationBuilder.build());
1891 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
1892 serviceResponseInformationBuilder.setInstanceId(siid);
1893 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
1894 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
1896 } catch (IllegalStateException e) {
1897 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
1898 responseBuilder.setResponseCode("500");
1899 responseBuilder.setResponseMessage(e.getMessage());
1900 responseBuilder.setAckFinalIndicator("Y");
1901 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
1903 RpcResult<SecurityZoneTopologyOperationOutput> rpcResult = RpcResultBuilder
1904 .<SecurityZoneTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1906 return Futures.immediateFuture(rpcResult);
1910 responseBuilder.setResponseCode(responseObject.getStatusCode());
1911 responseBuilder.setAckFinalIndicator(ackFinal);
1912 trySetResponseMessage(responseBuilder, responseObject);
1913 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
1914 log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
1916 RpcResult<SecurityZoneTopologyOperationOutput> rpcResult = RpcResultBuilder
1917 .<SecurityZoneTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1919 return Futures.immediateFuture(rpcResult);
1922 private void trySetResponseMessage(SecurityZoneTopologyOperationOutputBuilder responseBuilder,
1923 ResponseObject responseObject) {
1924 if (responseObject.getMessage() != null) {
1925 responseBuilder.setResponseMessage(responseObject.getMessage());
1929 private void trySaveService(SecurityZoneTopologyOperationInput input, ServiceBuilder serviceBuilder) {
1930 if (isValidRequest(input) && (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Unassign)
1931 || input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))) {
1932 // Only update operational tree on activate or delete
1933 log.info(UPDATING_TREE_INFO_MESSAGE);
1934 saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1938 private void trySetSvcRequestId(SecurityZoneTopologyOperationInput input,
1939 SecurityZoneTopologyOperationOutputBuilder responseBuilder) {
1940 if (input.getSdncRequestHeader() != null) {
1941 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1945 private boolean isInvalidServiceData(ServiceData sd) {
1946 return sd == null || sd.getServiceLevelOperStatus() == null;
1949 private boolean hasInvalidServiceId(SecurityZoneTopologyOperationInput input) {
1950 return input == null || input.getServiceInformation() == null
1951 || input.getServiceInformation().getServiceInstanceId() == null
1952 || input.getServiceInformation().getServiceInstanceId().length() == 0;
1955 private ListenableFuture<RpcResult<SecurityZoneTopologyOperationOutput>> buildRpcResultFuture(
1956 SecurityZoneTopologyOperationOutputBuilder responseBuilder, String responseMessage) {
1958 responseBuilder.setResponseCode("404");
1959 responseBuilder.setResponseMessage(responseMessage);
1960 responseBuilder.setAckFinalIndicator("Y");
1962 RpcResult<SecurityZoneTopologyOperationOutput> rpcResult = RpcResultBuilder
1963 .<SecurityZoneTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
1965 return Futures.immediateFuture(rpcResult);
1968 private boolean isValidRequest(SecurityZoneTopologyOperationInput input) {
1969 return input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null;
1973 private boolean hasInvalidServiceId(ConnectionAttachmentTopologyOperationInput input) {
1974 return input == null || input.getServiceInformation() == null
1975 || input.getServiceInformation().getServiceInstanceId() == null
1976 || input.getServiceInformation().getServiceInstanceId().length() == 0;
1979 private void trySetResponseMessage(ConnectionAttachmentTopologyOperationOutputBuilder responseBuilder,
1980 ResponseObject error) {
1981 if (!error.getMessage().isEmpty()) {
1982 responseBuilder.setResponseMessage(error.getMessage());
1986 private void trySetSvcRequestId(ConnectionAttachmentTopologyOperationInput input,
1987 ConnectionAttachmentTopologyOperationOutputBuilder responseBuilder) {
1988 if (input.getSdncRequestHeader() != null) {
1989 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1993 private ListenableFuture<RpcResult<ConnectionAttachmentTopologyOperationOutput>>
1994 buildRpcResultFuture(ConnectionAttachmentTopologyOperationOutputBuilder responseBuilder, String responseMessage) {
1996 responseBuilder.setResponseCode("404");
1997 responseBuilder.setResponseMessage(responseMessage);
1998 responseBuilder.setAckFinalIndicator("Y");
2000 RpcResult<ConnectionAttachmentTopologyOperationOutput> rpcResult = RpcResultBuilder
2001 .<ConnectionAttachmentTopologyOperationOutput>status(true)
2002 .withResult(responseBuilder.build())
2005 return Futures.immediateFuture(rpcResult);
2008 private void trySaveService(ConnectionAttachmentTopologyOperationInput input, ServiceBuilder serviceBuilder) {
2009 if (isValidRequest(input) &&
2010 (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Unassign) ||
2011 input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))) {
2012 // Only update operational tree on activate or delete
2013 log.info(UPDATING_TREE_INFO_MESSAGE);
2014 saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
2018 private boolean isValidRequest(ConnectionAttachmentTopologyOperationInput input) {
2019 return input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null;
2023 public ListenableFuture<RpcResult<ConnectionAttachmentTopologyOperationOutput>> connectionAttachmentTopologyOperation(ConnectionAttachmentTopologyOperationInput input) {
2024 final String svcOperation = "connection-attachment-topology-operation";
2025 Properties parms = new Properties();
2026 log.info(CALLED_STR, svcOperation);
2028 // create a new response object
2029 ConnectionAttachmentTopologyOperationOutputBuilder responseBuilder = new ConnectionAttachmentTopologyOperationOutputBuilder();
2030 if (hasInvalidServiceId(input)) {
2031 log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
2032 responseBuilder.setResponseCode("404");
2033 responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
2034 responseBuilder.setAckFinalIndicator("Y");
2036 RpcResult<ConnectionAttachmentTopologyOperationOutput> rpcResult = RpcResultBuilder
2037 .<ConnectionAttachmentTopologyOperationOutput>status(true)
2038 .withResult(responseBuilder.build())
2041 return Futures.immediateFuture(rpcResult);
2044 ServiceData serviceData;
2045 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
2047 String siid = input.getServiceInformation().getServiceInstanceId();
2048 log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
2050 // Get the service-instance service data from MD-SAL
2051 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
2052 getServiceData(siid, serviceDataBuilder);
2054 trySetSvcRequestId(input, responseBuilder);
2056 ServiceData sd = serviceDataBuilder.build();
2057 if (isInvalidServiceData(sd)) {
2058 log.debug(EMPTY_SERVICE_INSTANCE_MESSAGE, svcOperation);
2059 return buildRpcResultFuture(responseBuilder, INVALID_INPUT_ERROR_MESSAGE);
2062 ConnectionAttachmentTopologyOperationInputBuilder inputBuilder = new ConnectionAttachmentTopologyOperationInputBuilder(input);
2063 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
2065 // Call SLI sync method
2066 // Get SvcLogicService reference
2067 ResponseObject responseObject = new ResponseObject("200", "");
2068 String ackFinal = "Y";
2069 String allottedResourceId = ERROR_NETWORK_ID;
2070 String serviceObjectPath = null;
2071 String connectionAttachmentObjectPath = null;
2073 Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, responseObject);
2075 if (respProps != null) {
2076 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
2077 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
2078 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
2079 allottedResourceId = respProps.getProperty(ALLOTTED_RESOURCE_ID_PARAM);
2080 serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
2081 connectionAttachmentObjectPath = respProps.getProperty("connection-attachment-object-path");
2084 if (failed(responseObject)) {
2085 responseBuilder.setResponseCode(responseObject.getStatusCode());
2086 responseBuilder.setResponseMessage(responseObject.getMessage());
2087 responseBuilder.setAckFinalIndicator(ackFinal);
2089 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
2091 RpcResult<ConnectionAttachmentTopologyOperationOutput> rpcResult = RpcResultBuilder
2092 .<ConnectionAttachmentTopologyOperationOutput>status(true)
2093 .withResult(responseBuilder.build())
2096 return Futures.immediateFuture(rpcResult);
2099 // Got success from SLI
2102 serviceData = serviceDataBuilder.build();
2103 log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
2106 ServiceBuilder serviceBuilder = new ServiceBuilder();
2107 serviceBuilder.setServiceData(serviceData);
2108 serviceBuilder.setServiceInstanceId(siid);
2109 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
2110 saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
2112 trySaveService(input, serviceBuilder);
2114 ConnectionAttachmentResponseInformationBuilder connectionAttachmentResponseInformationBuilder = new ConnectionAttachmentResponseInformationBuilder();
2115 connectionAttachmentResponseInformationBuilder.setInstanceId(allottedResourceId);
2116 connectionAttachmentResponseInformationBuilder.setObjectPath(connectionAttachmentObjectPath);
2117 responseBuilder.setConnectionAttachmentResponseInformation(connectionAttachmentResponseInformationBuilder.build());
2119 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
2120 serviceResponseInformationBuilder.setInstanceId(siid);
2121 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
2122 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
2124 } catch (IllegalStateException e) {
2125 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
2126 responseBuilder.setResponseCode("500");
2127 responseBuilder.setResponseMessage(e.getMessage());
2128 responseBuilder.setAckFinalIndicator("Y");
2129 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
2131 RpcResult<ConnectionAttachmentTopologyOperationOutput> rpcResult = RpcResultBuilder
2132 .<ConnectionAttachmentTopologyOperationOutput>status(true)
2133 .withResult(responseBuilder.build())
2136 return Futures.immediateFuture(rpcResult);
2140 responseBuilder.setResponseCode(responseObject.getStatusCode());
2141 responseBuilder.setAckFinalIndicator(ackFinal);
2142 trySetResponseMessage(responseBuilder, responseObject);
2143 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
2144 log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
2146 RpcResult<ConnectionAttachmentTopologyOperationOutput> rpcResult = RpcResultBuilder
2147 .<ConnectionAttachmentTopologyOperationOutput>status(true)
2148 .withResult(responseBuilder.build())
2151 return Futures.immediateFuture(rpcResult);
2155 public ListenableFuture<RpcResult<TunnelxconnTopologyOperationOutput>> tunnelxconnTopologyOperation(
2156 TunnelxconnTopologyOperationInput input) {
2158 final String svcOperation = "tunnelxconn-topology-operation";
2159 Properties parms = new Properties();
2160 log.info(CALLED_STR, svcOperation);
2162 // create a new response object
2163 TunnelxconnTopologyOperationOutputBuilder responseBuilder = new TunnelxconnTopologyOperationOutputBuilder();
2164 if (hasInvalidServiceId(input)) {
2165 log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
2166 responseBuilder.setResponseCode("404");
2167 responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
2168 responseBuilder.setAckFinalIndicator("Y");
2170 RpcResult<TunnelxconnTopologyOperationOutput> rpcResult = RpcResultBuilder
2171 .<TunnelxconnTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
2173 return Futures.immediateFuture(rpcResult);
2175 String siid = input.getServiceInformation().getServiceInstanceId();
2176 log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
2177 TunnelxconnTopologyOperationInputBuilder inputBuilder = new TunnelxconnTopologyOperationInputBuilder(input);
2178 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
2180 // Call SLI sync method
2182 ResponseObject responseObject = new ResponseObject("200", "");
2183 String ackFinal = "Y";
2184 String allottedResourceId = ERROR_NETWORK_ID;
2185 String serviceObjectPath = null;
2186 String tunnelxconnObjectPath = null;
2187 Properties respProps = tryGetProperties(svcOperation, parms, responseObject);
2189 if (respProps != null) {
2190 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
2191 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
2192 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
2193 allottedResourceId = respProps.getProperty(ALLOTTED_RESOURCE_ID_PARAM);
2194 serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
2195 tunnelxconnObjectPath = respProps.getProperty("tunnelxconn-object-path");
2198 if (failed(responseObject)) {
2199 responseBuilder.setResponseCode(responseObject.getStatusCode());
2200 responseBuilder.setResponseMessage(responseObject.getMessage());
2201 responseBuilder.setAckFinalIndicator(ackFinal);
2203 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
2205 RpcResult<TunnelxconnTopologyOperationOutput> rpcResult = RpcResultBuilder
2206 .<TunnelxconnTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
2208 return Futures.immediateFuture(rpcResult);
2211 // Got success from SLI
2213 TunnelxconnResponseInformationBuilder tunnelxconnResponseInformationBuilder = new TunnelxconnResponseInformationBuilder();
2214 tunnelxconnResponseInformationBuilder.setInstanceId(allottedResourceId);
2215 tunnelxconnResponseInformationBuilder.setObjectPath(tunnelxconnObjectPath);
2216 responseBuilder.setTunnelxconnResponseInformation(tunnelxconnResponseInformationBuilder.build());
2218 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
2219 serviceResponseInformationBuilder.setInstanceId(siid);
2220 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
2221 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
2223 } catch (IllegalStateException e) {
2224 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
2225 responseBuilder.setResponseCode("500");
2226 responseBuilder.setResponseMessage(e.getMessage());
2227 responseBuilder.setAckFinalIndicator("Y");
2228 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
2230 RpcResult<TunnelxconnTopologyOperationOutput> rpcResult = RpcResultBuilder
2231 .<TunnelxconnTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
2233 return Futures.immediateFuture(rpcResult);
2237 responseBuilder.setResponseCode(responseObject.getStatusCode());
2238 responseBuilder.setAckFinalIndicator(ackFinal);
2239 trySetResponseMessage(responseBuilder, responseObject);
2240 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
2241 log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
2243 RpcResult<TunnelxconnTopologyOperationOutput> rpcResult = RpcResultBuilder
2244 .<TunnelxconnTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
2246 return Futures.immediateFuture(rpcResult);
2249 private void trySetResponseMessage(TunnelxconnTopologyOperationOutputBuilder responseBuilder,
2250 ResponseObject responseObject) {
2251 if (responseObject.getMessage() != null) {
2252 responseBuilder.setResponseMessage(responseObject.getMessage());
2256 private boolean hasInvalidServiceId(TunnelxconnTopologyOperationInput input) {
2257 return input == null || input.getServiceInformation() == null
2258 || input.getServiceInformation().getServiceInstanceId() == null
2259 || input.getServiceInformation().getServiceInstanceId().length() == 0;
2262 private Properties tryGetProperties(String svcOperation, Properties parms, ResponseObject responseObject) {
2264 if (svcLogicClient.hasGraph(APP_NAME, svcOperation, null, "sync")) {
2267 return svcLogicClient.execute(APP_NAME, svcOperation, null, "sync", parms);
2268 } catch (Exception e) {
2269 log.error(SERVICE_LOGIC_EXECUTION_ERROR_MESSAGE, svcOperation, e);
2270 responseObject.setMessage(e.getMessage());
2271 responseObject.setStatusCode("500");
2274 responseObject.setMessage(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + svcOperation + "'");
2275 responseObject.setStatusCode("503");
2277 } catch (Exception e) {
2278 responseObject.setMessage(e.getMessage());
2279 responseObject.setStatusCode("500");
2280 log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
2286 public ListenableFuture<RpcResult<BrgTopologyOperationOutput>> brgTopologyOperation(BrgTopologyOperationInput input) {
2287 final String svcOperation = "brg-topology-operation";
2288 Properties parms = new Properties();
2290 log.info(CALLED_STR, svcOperation);
2291 // create a new response object
2292 BrgTopologyOperationOutputBuilder responseBuilder = new BrgTopologyOperationOutputBuilder();
2294 if (this.hasInvalidServiceId(input)) {
2296 log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
2297 responseBuilder.setResponseCode("404");
2298 responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
2299 responseBuilder.setAckFinalIndicator("Y");
2301 RpcResult<BrgTopologyOperationOutput> rpcResult = RpcResultBuilder.<BrgTopologyOperationOutput>status(true)
2302 .withResult(responseBuilder.build()).build();
2304 return Futures.immediateFuture(rpcResult);
2307 String siid = input.getServiceInformation().getServiceInstanceId();
2309 log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
2310 BrgTopologyOperationInputBuilder inputBuilder = new BrgTopologyOperationInputBuilder(input);
2311 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
2313 // Call SLI sync method
2315 ResponseObject responseObject = new ResponseObject("200", "");
2316 String ackFinal = "Y";
2317 String allottedResourceId = ERROR_NETWORK_ID;
2318 String serviceObjectPath = null;
2319 String brgObjectPath = null;
2320 Properties respProps = tryGetProperties(svcOperation, parms, responseObject);
2322 if (respProps != null) {
2323 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
2324 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
2325 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
2326 allottedResourceId = respProps.getProperty(ALLOTTED_RESOURCE_ID_PARAM);
2327 serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
2328 brgObjectPath = respProps.getProperty("brg-object-path");
2331 if (failed(responseObject)) {
2332 responseBuilder.setResponseCode(responseObject.getStatusCode());
2333 responseBuilder.setResponseMessage(responseObject.getMessage());
2334 responseBuilder.setAckFinalIndicator(ackFinal);
2336 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
2337 RpcResult<BrgTopologyOperationOutput> rpcResult = RpcResultBuilder.<BrgTopologyOperationOutput>status(true)
2338 .withResult(responseBuilder.build()).build();
2340 return Futures.immediateFuture(rpcResult);
2343 // Got success from SLI
2346 BrgResponseInformationBuilder brgResponseInformationBuilder = new BrgResponseInformationBuilder();
2347 brgResponseInformationBuilder.setInstanceId(allottedResourceId);
2348 brgResponseInformationBuilder.setObjectPath(brgObjectPath);
2349 responseBuilder.setBrgResponseInformation(brgResponseInformationBuilder.build());
2351 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
2352 serviceResponseInformationBuilder.setInstanceId(siid);
2353 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
2354 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
2356 } catch (IllegalStateException e) {
2357 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
2358 responseBuilder.setResponseCode("500");
2359 responseBuilder.setResponseMessage(e.getMessage());
2360 responseBuilder.setAckFinalIndicator("Y");
2361 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
2363 RpcResult<BrgTopologyOperationOutput> rpcResult = RpcResultBuilder.<BrgTopologyOperationOutput>status(true)
2364 .withResult(responseBuilder.build()).build();
2366 return Futures.immediateFuture(rpcResult);
2370 responseBuilder.setResponseCode(responseObject.getStatusCode());
2371 responseBuilder.setAckFinalIndicator(ackFinal);
2372 trySetResponseMessage(responseBuilder, responseObject);
2373 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
2374 log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
2376 RpcResult<BrgTopologyOperationOutput> rpcResult = RpcResultBuilder.<BrgTopologyOperationOutput>status(true)
2377 .withResult(responseBuilder.build()).build();
2379 return Futures.immediateFuture(rpcResult);
2382 private void trySetResponseMessage(BrgTopologyOperationOutputBuilder responseBuilder,
2383 ResponseObject responseObject) {
2384 if (responseObject.getMessage() != null) {
2385 responseBuilder.setResponseMessage(responseObject.getMessage());
2389 private boolean hasInvalidServiceId(BrgTopologyOperationInput input) {
2390 return input == null || input.getServiceInformation() == null
2391 || input.getServiceInformation().getServiceInstanceId() == null
2392 || input.getServiceInformation().getServiceInstanceId().length() == 0;
2395 private String resolveAckFinal(ResponseObject responseObject, Properties respProps) {
2396 if (respProps != null) {
2397 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
2398 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
2399 return respProps.getProperty(ACK_FINAL_PARAM, "Y");
2405 public ListenableFuture<RpcResult<PreloadNetworkTopologyOperationOutput>> preloadNetworkTopologyOperation(
2406 PreloadNetworkTopologyOperationInput input) {
2408 final String svcOperation = "preload-network-topology-operation";
2409 PreloadData preloadData;
2410 Properties properties = new Properties();
2412 log.info(CALLED_STR, svcOperation);
2413 // create a new response object
2414 PreloadNetworkTopologyOperationOutputBuilder responseBuilder = new PreloadNetworkTopologyOperationOutputBuilder();
2416 if (hasInvalidPreloadNetwork(input)) {
2417 log.debug("exiting {} because of null or empty preload-network-topology-information", svcOperation);
2418 responseBuilder.setResponseCode("403");
2419 responseBuilder.setResponseMessage("invalid input, null or empty preload-network-topology-information");
2420 responseBuilder.setAckFinalIndicator("Y");
2422 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult = RpcResultBuilder
2423 .<PreloadNetworkTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
2425 return Futures.immediateFuture(rpcResult);
2428 // Grab the preload ID from the input buffer
2429 String preloadId = input.getPreloadNetworkTopologyInformation().getNetworkTopologyIdentifierStructure()
2431 String preloadType = "network";
2433 trySetSvcRequestId(input, responseBuilder);
2435 PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
2436 getPreloadData(preloadId, preloadType, preloadDataBuilder);
2438 PreloadDataBuilder operDataBuilder = new PreloadDataBuilder();
2439 getPreloadData(preloadId, preloadType, operDataBuilder, LogicalDatastoreType.OPERATIONAL);
2442 // setup a preload-data object builder
2443 // ACTION preload-network-topology-operation
2445 // uses sdnc-request-header;
2446 // uses request-information;
2447 // uses preload-network-topology-information;
2449 // uses preload-topology-response-body;
2451 // container preload-data
2452 // uses preload-network-topology-information;
2453 // uses preload-oper-status;
2455 log.info(ADDING_INPUT_DATA_LOG, svcOperation, preloadId, input);
2456 PreloadNetworkTopologyOperationInputBuilder inputBuilder = new PreloadNetworkTopologyOperationInputBuilder(
2458 GenericResourceApiUtil.toProperties(properties, inputBuilder.build());
2459 log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, preloadId, input);
2460 GenericResourceApiUtil.toProperties(properties, OPERATIONAL_DATA_PARAM, operDataBuilder);
2462 // Call SLI sync method
2463 ResponseObject responseObject = new ResponseObject("200", "");
2464 String ackFinal = "Y";
2465 Properties respProps = tryGetProperties(svcOperation, properties, preloadDataBuilder, responseObject);
2467 if (respProps != null) {
2468 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
2469 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
2470 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
2473 if (failed(responseObject)) {
2474 responseBuilder.setResponseCode(responseObject.getStatusCode());
2475 responseBuilder.setResponseMessage(responseObject.getMessage());
2476 responseBuilder.setAckFinalIndicator(ackFinal);
2477 log.error(RETURNED_FAILED_MESSAGE, svcOperation, preloadId, responseBuilder.build());
2478 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult = RpcResultBuilder
2479 .<PreloadNetworkTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
2480 return Futures.immediateFuture(rpcResult);
2483 // Got success from SLI
2485 preloadData = preloadDataBuilder.build();
2486 log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, preloadId, preloadData);
2488 // preload-list object
2489 PreloadListBuilder preloadListBuilder = new PreloadListBuilder();
2490 preloadListBuilder.setPreloadId(preloadId);
2491 preloadListBuilder.setPreloadType(preloadType);
2492 preloadListBuilder.setPreloadData(preloadData);
2494 savePreloadList(preloadListBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
2495 log.info(UPDATING_TREE_INFO_MESSAGE);
2496 savePreloadList(preloadListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
2498 tryDeletePreload(input, preloadListBuilder);
2499 } catch (Exception e) {
2500 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, preloadId, e);
2501 responseBuilder.setResponseCode("500");
2502 responseBuilder.setResponseMessage(e.getMessage());
2503 responseBuilder.setAckFinalIndicator("Y");
2504 log.error(RETURNED_FAILED_MESSAGE, svcOperation, preloadId, responseBuilder.build());
2505 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult = RpcResultBuilder
2506 .<PreloadNetworkTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
2507 return Futures.immediateFuture(rpcResult);
2511 responseBuilder.setResponseCode(responseObject.getStatusCode());
2512 responseBuilder.setAckFinalIndicator(ackFinal);
2513 trySetResponseMessage(responseBuilder, responseObject);
2514 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, preloadId);
2515 log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, preloadId, responseBuilder.build());
2517 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult = RpcResultBuilder
2518 .<PreloadNetworkTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
2519 return Futures.immediateFuture(rpcResult);
2522 private boolean hasInvalidPreloadNetwork(PreloadNetworkTopologyOperationInput input) {
2523 return input == null || input.getPreloadNetworkTopologyInformation() == null
2524 || input.getPreloadNetworkTopologyInformation().getNetworkTopologyIdentifierStructure() == null;
2527 private boolean hasInvalidPreloadId(String preloadId) {
2528 return preloadId == null || preloadId.length() == 0;
2531 private void trySetSvcRequestId(PreloadNetworkTopologyOperationInput input,
2532 PreloadNetworkTopologyOperationOutputBuilder responseBuilder) {
2533 if (input.getSdncRequestHeader() != null) {
2534 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
2538 private Properties tryGetProperties(String svcOperation, Properties parms, PreloadDataBuilder preloadDataBuilder,
2539 ResponseObject responseObject) {
2541 if (svcLogicClient.hasGraph(APP_NAME, svcOperation, null, "sync")) {
2543 return svcLogicClient.execute(APP_NAME, svcOperation, null, "sync", preloadDataBuilder, parms);
2544 } catch (Exception e) {
2545 log.error(SERVICE_LOGIC_EXECUTION_ERROR_MESSAGE, svcOperation, e);
2546 responseObject.setMessage(e.getMessage());
2547 responseObject.setStatusCode("500");
2550 responseObject.setMessage(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + svcOperation + "'");
2551 responseObject.setStatusCode("503");
2553 } catch (Exception e) {
2554 responseObject.setMessage(e.getMessage());
2555 responseObject.setStatusCode("500");
2556 log.error(SERVICE_LOGIC_SEARCH_ERROR_MESSAGE, e);
2562 private void trySetResponseMessage(PreloadNetworkTopologyOperationOutputBuilder responseBuilder,
2563 ResponseObject responseObject) {
2564 if (responseObject.getMessage() != null) {
2565 if (!responseObject.getMessage().isEmpty()) {
2566 responseBuilder.setResponseMessage(responseObject.getMessage());
2571 private void tryDeletePreload(PreloadNetworkTopologyOperationInput input, PreloadListBuilder preloadListBuilder) {
2572 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete)) {
2573 log.info("Delete from both CONFIGURATION and OPERATIONAL tree.");
2574 deletePreloadList(preloadListBuilder.build(), LogicalDatastoreType.OPERATIONAL);
2575 deletePreloadList(preloadListBuilder.build(), LogicalDatastoreType.CONFIGURATION);
2580 public ListenableFuture<RpcResult<PreloadVfModuleTopologyOperationOutput>> preloadVfModuleTopologyOperation(
2581 PreloadVfModuleTopologyOperationInput input) {
2583 final String svcOperation = "preload-vf-module-topology-operation";
2584 PreloadData preloadData;
2585 Properties properties = new Properties();
2587 log.info(CALLED_STR, svcOperation);
2588 // create a new response object
2589 PreloadVfModuleTopologyOperationOutputBuilder responseBuilder = new PreloadVfModuleTopologyOperationOutputBuilder();
2591 if (hasInvalidPreloadVfModule(input)) {
2593 "exiting {} because of null or empty preload-vf-module-topology-information.vf-module-topology.vf-module-topology-identifier.vf-module-name",
2595 responseBuilder.setResponseCode("403");
2596 responseBuilder.setResponseMessage(
2597 "invalid input, null or empty preload-vf-module-topology-information.vf-module-topology.vf-module-topology-identifier.vf-module-name");
2598 responseBuilder.setAckFinalIndicator("Y");
2600 RpcResult<PreloadVfModuleTopologyOperationOutput> rpcResult = RpcResultBuilder
2601 .<PreloadVfModuleTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
2603 return Futures.immediateFuture(rpcResult);
2606 // Grab the preload ID from the input buffer
2607 String preloadId = input.getPreloadVfModuleTopologyInformation().getVfModuleTopology()
2608 .getVfModuleTopologyIdentifier().getVfModuleName();
2609 String preloadType = "vf-module";
2611 trySetSvcRequestId(input, responseBuilder);
2613 PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
2614 getPreloadData(preloadId, preloadType, preloadDataBuilder);
2616 PreloadDataBuilder operDataBuilder = new PreloadDataBuilder();
2617 getPreloadData(preloadId, preloadType, operDataBuilder, LogicalDatastoreType.OPERATIONAL);
2620 // setup a preload-data object builder
2621 // ACTION preload-vf-module-topology-operation
2623 // uses sdnc-request-header;
2624 // uses request-information;
2625 // uses preload-vnf-topology-information;
2627 // uses preload-topology-response-body;
2629 // container preload-data
2630 // uses preload-vf-module-topology-information;
2631 // uses preload-oper-status;
2633 log.info(ADDING_INPUT_DATA_LOG, svcOperation, preloadId, input);
2634 PreloadVfModuleTopologyOperationInputBuilder inputBuilder = new PreloadVfModuleTopologyOperationInputBuilder(
2636 GenericResourceApiUtil.toProperties(properties, inputBuilder.build());
2637 log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, preloadId, input);
2638 GenericResourceApiUtil.toProperties(properties, OPERATIONAL_DATA_PARAM, operDataBuilder);
2640 // Call SLI sync method
2641 ResponseObject responseObject = new ResponseObject("200", "");
2642 String ackFinal = "Y";
2643 Properties respProps = tryGetProperties(svcOperation, properties, preloadDataBuilder, responseObject);
2645 if (respProps != null) {
2646 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
2647 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
2648 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
2651 if (failed(responseObject)) {
2652 responseBuilder.setResponseCode(responseObject.getStatusCode());
2653 responseBuilder.setResponseMessage(responseObject.getMessage());
2654 responseBuilder.setAckFinalIndicator(ackFinal);
2655 log.error(RETURNED_FAILED_MESSAGE, svcOperation, preloadId, responseBuilder.build());
2656 RpcResult<PreloadVfModuleTopologyOperationOutput> rpcResult = RpcResultBuilder
2657 .<PreloadVfModuleTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
2658 return Futures.immediateFuture(rpcResult);
2661 // Got success from SLI
2663 preloadData = preloadDataBuilder.build();
2664 log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, preloadId, preloadData);
2666 // preload-list object
2667 PreloadListBuilder preloadListBuilder = new PreloadListBuilder();
2668 preloadListBuilder.setPreloadId(preloadId);
2669 preloadListBuilder.setPreloadType(preloadType);
2670 preloadListBuilder.setPreloadData(preloadData);
2672 savePreloadList(preloadListBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
2673 log.info(UPDATING_TREE_INFO_MESSAGE);
2674 savePreloadList(preloadListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
2676 tryDeletePreload(input, preloadListBuilder);
2678 } catch (Exception e) {
2679 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, preloadId, e);
2680 responseBuilder.setResponseCode("500");
2681 responseBuilder.setResponseMessage(e.getMessage());
2682 responseBuilder.setAckFinalIndicator("Y");
2683 log.error(RETURNED_FAILED_MESSAGE, svcOperation, preloadId, responseBuilder.build());
2684 RpcResult<PreloadVfModuleTopologyOperationOutput> rpcResult = RpcResultBuilder
2685 .<PreloadVfModuleTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
2686 return Futures.immediateFuture(rpcResult);
2690 responseBuilder.setResponseCode(responseObject.getStatusCode());
2691 responseBuilder.setAckFinalIndicator(ackFinal);
2692 trySetResponseMessage(responseBuilder, responseObject);
2693 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, preloadId);
2694 log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, preloadId, responseBuilder.build());
2696 RpcResult<PreloadVfModuleTopologyOperationOutput> rpcResult = RpcResultBuilder
2697 .<PreloadVfModuleTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
2698 return Futures.immediateFuture(rpcResult);
2701 private boolean hasInvalidPreloadVfModule(PreloadVfModuleTopologyOperationInput input) {
2702 return input == null || input.getPreloadVfModuleTopologyInformation() == null
2703 || input.getPreloadVfModuleTopologyInformation().getVfModuleTopology() == null
2704 || input.getPreloadVfModuleTopologyInformation().getVfModuleTopology()
2705 .getVfModuleTopologyIdentifier() == null
2706 || input.getPreloadVfModuleTopologyInformation().getVfModuleTopology().getVfModuleTopologyIdentifier()
2707 .getVfModuleName() == null;
2710 private void trySetSvcRequestId(PreloadVfModuleTopologyOperationInput input,
2711 PreloadVfModuleTopologyOperationOutputBuilder responseBuilder) {
2712 if (input.getSdncRequestHeader() != null) {
2713 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
2717 private void trySetResponseMessage(PreloadVfModuleTopologyOperationOutputBuilder responseBuilder,
2718 ResponseObject responseObject) {
2719 if (responseObject.getMessage() != null) {
2720 if (!responseObject.getMessage().isEmpty()) {
2721 responseBuilder.setResponseMessage(responseObject.getMessage());
2726 private void tryDeletePreload(PreloadVfModuleTopologyOperationInput input, PreloadListBuilder preloadListBuilder) {
2727 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete)) {
2728 log.info("Delete from both CONFIGURATION and OPERATIONAL tree.");
2729 deletePreloadList(preloadListBuilder.build(), LogicalDatastoreType.OPERATIONAL);
2730 deletePreloadList(preloadListBuilder.build(), LogicalDatastoreType.CONFIGURATION);
2735 public ListenableFuture<RpcResult<GenericConfigurationTopologyOperationOutput>> genericConfigurationTopologyOperation(
2736 GenericConfigurationTopologyOperationInput input) {
2738 final String svcOperation = "generic-configuration-topology-operation";
2739 ServiceData serviceData;
2740 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
2741 Properties parms = new Properties();
2743 log.info(CALLED_STR, svcOperation);
2744 // create a new response object
2745 GenericConfigurationTopologyOperationOutputBuilder responseBuilder = new GenericConfigurationTopologyOperationOutputBuilder();
2747 if (hasInvalidService(input)) {
2748 log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
2749 responseBuilder.setResponseCode("404");
2750 responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
2751 responseBuilder.setAckFinalIndicator("Y");
2753 RpcResult<GenericConfigurationTopologyOperationOutput> rpcResult = RpcResultBuilder
2754 .<GenericConfigurationTopologyOperationOutput>status(true).withResult(responseBuilder.build())
2757 return Futures.immediateFuture(rpcResult);
2760 // Grab the service instance ID from the input buffer
2761 String siid = input.getServiceInformation().getServiceInstanceId();
2763 trySetSvcRequestId(input, responseBuilder);
2765 if (hasInvalidConfigurationIdOrType(input)) {
2766 log.debug("exiting {} because of null or empty configuration-id or configuration-type", svcOperation);
2767 responseBuilder.setResponseCode("404");
2768 responseBuilder.setResponseMessage("invalid input, null or empty configuration-id or configuration-type");
2769 responseBuilder.setAckFinalIndicator("Y");
2770 RpcResult<GenericConfigurationTopologyOperationOutput> rpcResult = RpcResultBuilder
2771 .<GenericConfigurationTopologyOperationOutput>status(true).withResult(responseBuilder.build())
2773 return Futures.immediateFuture(rpcResult);
2776 // Grab the configuration ID from the input buffer
2777 String configId = input.getConfigurationInformation().getConfigurationId();
2779 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
2780 getServiceData(siid, serviceDataBuilder);
2782 ServiceDataBuilder operDataBuilder = new ServiceDataBuilder();
2783 getServiceData(siid, operDataBuilder, LogicalDatastoreType.OPERATIONAL);
2785 // Set the serviceStatus based on input
2786 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
2787 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
2789 log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
2790 GenericConfigurationTopologyOperationInputBuilder inputBuilder = new GenericConfigurationTopologyOperationInputBuilder(
2792 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
2794 log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, siid, operDataBuilder.build());
2795 GenericResourceApiUtil.toProperties(parms, OPERATIONAL_DATA_PARAM, operDataBuilder);
2797 // Call SLI sync method
2799 ResponseObject responseObject = new ResponseObject("200", "");
2800 String ackFinal = "Y";
2801 String serviceObjectPath = "";
2802 Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, responseObject);
2804 if (respProps != null) {
2805 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
2806 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
2807 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
2808 serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
2811 setServiceStatus(serviceStatusBuilder, responseObject.getStatusCode(), responseObject.getMessage(), ackFinal);
2812 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
2813 serviceStatusBuilder.setRpcName(svcOperation);
2815 if (failed(responseObject)) {
2816 responseBuilder.setResponseCode(responseObject.getStatusCode());
2817 responseBuilder.setResponseMessage(responseObject.getMessage());
2818 responseBuilder.setAckFinalIndicator(ackFinal);
2820 ServiceBuilder serviceBuilder = new ServiceBuilder();
2821 serviceBuilder.setServiceInstanceId(siid);
2822 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
2824 saveService(serviceBuilder.build(), true, LogicalDatastoreType.CONFIGURATION);
2825 } catch (Exception e) {
2826 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
2828 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
2830 RpcResult<GenericConfigurationTopologyOperationOutput> rpcResult = RpcResultBuilder
2831 .<GenericConfigurationTopologyOperationOutput>status(true).withResult(responseBuilder.build())
2834 return Futures.immediateFuture(rpcResult);
2837 // Got success from SLI
2839 serviceData = serviceDataBuilder.build();
2842 ServiceBuilder serviceBuilder = new ServiceBuilder();
2843 serviceBuilder.setServiceData(serviceData);
2844 serviceBuilder.setServiceInstanceId(siid);
2845 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
2846 saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
2848 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
2849 serviceResponseInformationBuilder.setInstanceId(siid);
2850 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
2851 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
2852 GcResponseInformationBuilder gcResponseInformationBuilder = new GcResponseInformationBuilder();
2853 gcResponseInformationBuilder.setInstanceId(configId);
2854 responseBuilder.setGcResponseInformation(gcResponseInformationBuilder.build());
2856 } catch (Exception e) {
2857 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
2858 responseBuilder.setResponseCode("500");
2859 responseBuilder.setResponseMessage(e.getMessage());
2860 responseBuilder.setAckFinalIndicator("Y");
2861 RpcResult<GenericConfigurationTopologyOperationOutput> rpcResult = RpcResultBuilder
2862 .<GenericConfigurationTopologyOperationOutput>status(true).withResult(responseBuilder.build())
2865 return Futures.immediateFuture(rpcResult);
2869 responseBuilder.setResponseCode(responseObject.getStatusCode());
2870 responseBuilder.setAckFinalIndicator(ackFinal);
2871 trySetResponseMessage(responseBuilder, responseObject);
2872 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
2873 log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
2875 RpcResult<GenericConfigurationTopologyOperationOutput> rpcResult = RpcResultBuilder
2876 .<GenericConfigurationTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
2878 return Futures.immediateFuture(rpcResult);
2881 private boolean hasInvalidService(GenericConfigurationTopologyOperationInput input) {
2882 return input == null || input.getServiceInformation() == null
2883 || input.getServiceInformation().getServiceInstanceId() == null
2884 || input.getServiceInformation().getServiceInstanceId().length() == 0;
2887 private void trySetSvcRequestId(GenericConfigurationTopologyOperationInput input,
2888 GenericConfigurationTopologyOperationOutputBuilder responseBuilder) {
2889 if (input.getSdncRequestHeader() != null) {
2890 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
2894 private boolean hasInvalidConfigurationIdOrType(GenericConfigurationTopologyOperationInput input) {
2895 return input.getConfigurationInformation() == null
2896 || input.getConfigurationInformation().getConfigurationId() == null
2897 || input.getConfigurationInformation().getConfigurationType() == null;
2900 private void trySetResponseMessage(GenericConfigurationTopologyOperationOutputBuilder responseBuilder,
2901 ResponseObject responseObject) {
2902 if (responseObject.getMessage() != null) {
2903 if (!responseObject.getMessage().isEmpty()) {
2904 responseBuilder.setResponseMessage(responseObject.getMessage());
2910 public ListenableFuture<RpcResult<GenericConfigurationNotificationOutput>> genericConfigurationNotification(GenericConfigurationNotificationInput input) {
2912 final String svcOperation = "generic-configuration-notification";
2913 ServiceData serviceData;
2914 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
2915 Properties parms = new Properties();
2917 log.info(CALLED_STR, svcOperation);
2919 // Grab the service instance ID from the input buffer
2920 String siid = input.getServiceInformation().getServiceInstanceId();
2922 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
2923 getServiceData(siid, serviceDataBuilder);
2925 ServiceDataBuilder operDataBuilder = new ServiceDataBuilder();
2926 getServiceData(siid, operDataBuilder, LogicalDatastoreType.OPERATIONAL);
2928 // Set the serviceStatus based on input
2929 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
2930 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
2932 log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
2933 GenericConfigurationNotificationInputBuilder inputBuilder = new GenericConfigurationNotificationInputBuilder(
2935 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
2937 log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, siid, operDataBuilder.build());
2938 GenericResourceApiUtil.toProperties(parms, OPERATIONAL_DATA_PARAM, operDataBuilder);
2940 // Call SLI sync method
2942 ResponseObject responseObject = new ResponseObject("200", "");
2943 String ackFinal = "Y";
2944 Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, responseObject);
2946 if (respProps != null) {
2947 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
2948 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
2949 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
2952 setServiceStatus(serviceStatusBuilder, responseObject.getStatusCode(), responseObject.getMessage(), ackFinal);
2953 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
2954 serviceStatusBuilder.setRpcName(svcOperation);
2956 if (failed(responseObject)) {
2957 ServiceBuilder serviceBuilder = new ServiceBuilder();
2958 serviceBuilder.setServiceInstanceId(siid);
2959 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
2961 saveService(serviceBuilder.build(), true, LogicalDatastoreType.CONFIGURATION);
2962 } catch (Exception e) {
2963 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
2969 RpcResult<GenericConfigurationNotificationOutput> rpcResult = RpcResultBuilder.<GenericConfigurationNotificationOutput>status(true).build();
2971 return Futures.immediateFuture(rpcResult);
2974 // Got success from SLI
2976 serviceData = serviceDataBuilder.build();
2979 ServiceBuilder serviceBuilder = new ServiceBuilder();
2980 serviceBuilder.setServiceData(serviceData);
2981 serviceBuilder.setServiceInstanceId(siid);
2982 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
2983 saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
2985 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
2986 serviceResponseInformationBuilder.setInstanceId(siid);
2988 } catch (Exception e) {
2989 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
2990 RpcResult<GenericConfigurationNotificationOutput> rpcResult = RpcResultBuilder.<GenericConfigurationNotificationOutput>status(true).build();
2992 return Futures.immediateFuture(rpcResult);
2996 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
2998 RpcResult<GenericConfigurationNotificationOutput> rpcResult = RpcResultBuilder.<GenericConfigurationNotificationOutput>status(true).build();
3000 return Futures.immediateFuture(rpcResult);
3004 public ListenableFuture<RpcResult<GetpathsegmentTopologyOperationOutput>> getpathsegmentTopologyOperation(
3005 GetpathsegmentTopologyOperationInput input) {
3007 final String svcOperation = "getpathsegment-topology-operation";
3008 ServiceData serviceData;
3009 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
3010 Properties parms = new Properties();
3012 log.info(CALLED_STR, svcOperation);
3013 // create a new response object
3014 GetpathsegmentTopologyOperationOutputBuilder responseBuilder = new GetpathsegmentTopologyOperationOutputBuilder();
3016 if (hasInvalidService(input)) {
3017 log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
3018 responseBuilder.setResponseCode("404");
3019 responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
3020 responseBuilder.setAckFinalIndicator("Y");
3022 RpcResult<GetpathsegmentTopologyOperationOutput> rpcResult = RpcResultBuilder
3023 .<GetpathsegmentTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
3025 return Futures.immediateFuture(rpcResult);
3028 // Grab the service instance ID from the input buffer
3029 String siid = input.getServiceInformation().getServiceInstanceId();
3031 trySetSvcRequestId(input, responseBuilder);
3033 if (hasInvalidOnapModelInformation(input)) {
3034 log.debug("exiting {} because no model-uuid provided", svcOperation);
3035 responseBuilder.setResponseCode("404");
3036 responseBuilder.setResponseMessage("invalid input, no model-uuid provided");
3037 responseBuilder.setAckFinalIndicator("Y");
3038 RpcResult<GetpathsegmentTopologyOperationOutput> rpcResult = RpcResultBuilder
3039 .<GetpathsegmentTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
3040 return Futures.immediateFuture(rpcResult);
3043 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
3044 getServiceData(siid, serviceDataBuilder);
3046 ServiceDataBuilder operDataBuilder = new ServiceDataBuilder();
3047 getServiceData(siid, operDataBuilder, LogicalDatastoreType.OPERATIONAL);
3049 // Set the serviceStatus based on input
3050 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
3051 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
3053 log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
3054 GetpathsegmentTopologyOperationInputBuilder inputBuilder = new GetpathsegmentTopologyOperationInputBuilder(
3056 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
3058 log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, siid, operDataBuilder.build());
3059 GenericResourceApiUtil.toProperties(parms, OPERATIONAL_DATA_PARAM, operDataBuilder);
3061 // Call SLI sync method
3063 ResponseObject responseObject = new ResponseObject("200", "");
3064 String ackFinal = "Y";
3065 String serviceObjectPath = null;
3066 Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, responseObject);
3068 if (respProps != null) {
3069 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
3070 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
3071 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
3072 serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
3075 setServiceStatus(serviceStatusBuilder, responseObject.getStatusCode(), responseObject.getMessage(), ackFinal);
3076 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
3077 serviceStatusBuilder.setRpcName(svcOperation);
3079 if (failed(responseObject)) {
3080 responseBuilder.setResponseCode(responseObject.getStatusCode());
3081 responseBuilder.setResponseMessage(responseObject.getMessage());
3082 responseBuilder.setAckFinalIndicator(ackFinal);
3084 ServiceBuilder serviceBuilder = new ServiceBuilder();
3085 serviceBuilder.setServiceInstanceId(siid);
3086 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
3088 saveService(serviceBuilder.build(), true, LogicalDatastoreType.CONFIGURATION);
3089 } catch (Exception e) {
3090 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
3092 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
3094 RpcResult<GetpathsegmentTopologyOperationOutput> rpcResult = RpcResultBuilder
3095 .<GetpathsegmentTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
3097 return Futures.immediateFuture(rpcResult);
3100 // Got success from SLI
3102 serviceData = serviceDataBuilder.build();
3103 log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
3106 ServiceBuilder serviceBuilder = new ServiceBuilder();
3107 serviceBuilder.setServiceData(serviceData);
3108 serviceBuilder.setServiceInstanceId(siid);
3109 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
3110 saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
3112 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
3113 serviceResponseInformationBuilder.setInstanceId(siid);
3114 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
3115 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
3117 } catch (Exception e) {
3118 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
3119 responseBuilder.setResponseCode("500");
3120 responseBuilder.setResponseMessage(e.getMessage());
3121 responseBuilder.setAckFinalIndicator("Y");
3122 RpcResult<GetpathsegmentTopologyOperationOutput> rpcResult = RpcResultBuilder
3123 .<GetpathsegmentTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
3125 return Futures.immediateFuture(rpcResult);
3129 responseBuilder.setResponseCode(responseObject.getStatusCode());
3130 responseBuilder.setAckFinalIndicator(ackFinal);
3131 trySetResponseMessage(responseBuilder, responseObject);
3132 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
3133 log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
3135 RpcResult<GetpathsegmentTopologyOperationOutput> rpcResult = RpcResultBuilder
3136 .<GetpathsegmentTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
3138 return Futures.immediateFuture(rpcResult);
3141 private boolean hasInvalidService(GetpathsegmentTopologyOperationInput input) {
3142 return input == null || input.getServiceInformation() == null
3143 || input.getServiceInformation().getServiceInstanceId() == null
3144 || input.getServiceInformation().getServiceInstanceId().length() == 0;
3147 private void trySetSvcRequestId(GetpathsegmentTopologyOperationInput input,
3148 GetpathsegmentTopologyOperationOutputBuilder responseBuilder) {
3149 if (input.getSdncRequestHeader() != null) {
3150 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
3154 private boolean hasInvalidOnapModelInformation(GetpathsegmentTopologyOperationInput input) {
3155 return input.getServiceInformation() == null || input.getServiceInformation().getOnapModelInformation() == null
3156 || input.getServiceInformation().getOnapModelInformation().getModelUuid() == null;
3159 private void trySetResponseMessage(GetpathsegmentTopologyOperationOutputBuilder responseBuilder,
3160 ResponseObject responseObject) {
3161 if (responseObject.getMessage() != null) {
3162 if (!responseObject.getMessage().isEmpty()) {
3163 responseBuilder.setResponseMessage(responseObject.getMessage());
3169 public ListenableFuture<RpcResult<PolicyUpdateNotifyOperationOutput>> policyUpdateNotifyOperation(
3170 PolicyUpdateNotifyOperationInput input) {
3172 final String svcOperation = "policy-update-notify-operation";
3173 Properties parms = new Properties();
3175 log.info(CALLED_STR, svcOperation);
3177 // create a new response object
3178 PolicyUpdateNotifyOperationOutputBuilder responseBuilder = new PolicyUpdateNotifyOperationOutputBuilder();
3180 // Make sure we have a valid input
3181 if (hasInvalidInput(input)) {
3182 log.debug("exiting {} because policy name, update type, or version id was not provided", svcOperation);
3183 responseBuilder.setErrorCode("404");
3184 responseBuilder.setErrorMsg("Invalid input, missing input data");
3185 RpcResult<PolicyUpdateNotifyOperationOutput> rpcResult = RpcResultBuilder
3186 .<PolicyUpdateNotifyOperationOutput>status(true).withResult(responseBuilder.build()).build();
3187 return Futures.immediateFuture(rpcResult);
3190 log.info("Adding INPUT data for {} input: {}", svcOperation, input);
3191 PolicyUpdateNotifyOperationInputBuilder inputBuilder = new PolicyUpdateNotifyOperationInputBuilder(input);
3192 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
3194 // Call SLI sync method
3195 ResponseObject responseObject = new ResponseObject("200", "");
3196 String ackFinal = "Y";
3197 String serviceObjectPath = null;
3198 Properties respProps = tryGetProperties(svcOperation, parms, responseObject);
3200 if (respProps != null) {
3201 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
3202 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
3203 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
3204 serviceObjectPath = respProps.getProperty(SERVICE_OBJECT_PATH_PARAM);
3207 if (failed(responseObject)) {
3208 responseBuilder.setErrorCode(responseObject.getStatusCode());
3209 responseBuilder.setErrorMsg(responseObject.getMessage());
3210 log.error(RETURNED_FAILED_MESSAGE, svcOperation, "policy update", responseBuilder.build());
3212 RpcResult<PolicyUpdateNotifyOperationOutput> rpcResult = RpcResultBuilder
3213 .<PolicyUpdateNotifyOperationOutput>status(true).withResult(responseBuilder.build()).build();
3215 return Futures.immediateFuture(rpcResult);
3218 // Got success from SLI
3219 responseBuilder.setErrorCode(responseObject.getStatusCode());
3220 if (responseObject.getMessage() != null) {
3221 responseBuilder.setErrorMsg(responseObject.getMessage());
3223 log.info("Returned SUCCESS for " + svcOperation + responseBuilder.build());
3224 RpcResult<PolicyUpdateNotifyOperationOutput> rpcResult = RpcResultBuilder
3225 .<PolicyUpdateNotifyOperationOutput>status(true).withResult(responseBuilder.build()).build();
3227 return Futures.immediateFuture(rpcResult);
3230 private boolean hasInvalidInput(PolicyUpdateNotifyOperationInput input) {
3231 return (input.getPolicyName() == null) || (input.getUpdateType() == null) || (input.getVersionId() == null);
3235 public ListenableFuture<RpcResult<PortMirrorTopologyOperationOutput>> portMirrorTopologyOperation(
3236 final PortMirrorTopologyOperationInput input) {
3238 final String svcOperation = "port-mirror-topology-operation";
3239 ServiceData serviceData = null;
3240 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
3241 Properties properties = new Properties();
3243 log.info(CALLED_STR, svcOperation);
3245 // create a new response object
3246 PortMirrorTopologyOperationOutputBuilder responseBuilder = new PortMirrorTopologyOperationOutputBuilder();
3248 if (hasInvalidService(input)) {
3249 log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
3250 responseBuilder.setResponseCode("404");
3251 responseBuilder.setResponseMessage(NULL_OR_EMPTY_ERROR_PARAM);
3252 responseBuilder.setAckFinalIndicator("Y");
3253 RpcResult<PortMirrorTopologyOperationOutput> rpcResult = RpcResultBuilder
3254 .<PortMirrorTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
3256 return Futures.immediateFuture(rpcResult);
3259 if (hasInvalidConfigurationId(input)) {
3260 log.debug("exiting {} because of null or empty configuration-id", svcOperation);
3261 responseBuilder.setResponseCode("404");
3262 responseBuilder.setResponseMessage("invalid input, null or empty configuration-id");
3263 responseBuilder.setAckFinalIndicator("Y");
3264 RpcResult<PortMirrorTopologyOperationOutput> rpcResult = RpcResultBuilder
3265 .<PortMirrorTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
3266 return Futures.immediateFuture(rpcResult);
3269 // Grab the service instance ID from the input buffer
3270 String siid = input.getServiceInformation().getServiceInstanceId();
3272 trySetSvcRequestId(input, responseBuilder);
3274 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
3275 getServiceData(siid, serviceDataBuilder);
3277 ServiceDataBuilder operDataBuilder = new ServiceDataBuilder();
3278 getServiceData(siid, operDataBuilder, LogicalDatastoreType.OPERATIONAL);
3280 // Set the serviceStatus based on input
3281 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
3282 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
3284 log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
3285 PortMirrorTopologyOperationInputBuilder inputBuilder = new PortMirrorTopologyOperationInputBuilder(input);
3286 GenericResourceApiUtil.toProperties(properties, inputBuilder.build());
3288 log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, siid, operDataBuilder.build());
3289 GenericResourceApiUtil.toProperties(properties, OPERATIONAL_DATA_PARAM, operDataBuilder);
3291 // Call SLI sync method
3292 ResponseObject responseObject = new ResponseObject("200", "");
3293 String ackFinal = "Y";
3294 String serviceObjectPath = null;
3295 String portMirrorObjectPath = null;
3296 Properties respProps = tryGetProperties(svcOperation, properties, serviceDataBuilder, responseObject);
3298 if (respProps != null) {
3299 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
3300 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
3301 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
3302 serviceObjectPath = respProps.getProperty("service-object-path");
3303 portMirrorObjectPath = respProps.getProperty("port-mirror-object-path");
3306 setServiceStatus(serviceStatusBuilder, responseObject.getStatusCode(), responseObject.getMessage(), ackFinal);
3307 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
3308 serviceStatusBuilder.setRpcName(svcOperation);
3310 if (failed(responseObject)) {
3311 responseBuilder.setResponseCode(responseObject.getStatusCode());
3312 responseBuilder.setResponseMessage(responseObject.getMessage());
3313 responseBuilder.setAckFinalIndicator(ackFinal);
3315 ServiceBuilder serviceBuilder = new ServiceBuilder();
3316 serviceBuilder.setServiceInstanceId(siid);
3317 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
3319 saveService(serviceBuilder.build(), true, LogicalDatastoreType.CONFIGURATION);
3320 } catch (Exception e) {
3321 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
3323 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
3325 RpcResult<PortMirrorTopologyOperationOutput> rpcResult = RpcResultBuilder
3326 .<PortMirrorTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
3329 return Futures.immediateFuture(rpcResult);
3332 // Got success from SLI
3334 serviceData = serviceDataBuilder.build();
3335 log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
3338 ServiceBuilder serviceBuilder = new ServiceBuilder();
3339 serviceBuilder.setServiceData(serviceData);
3340 serviceBuilder.setServiceInstanceId(siid);
3341 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
3342 saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
3344 if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null) {
3345 // Only update operational tree on activate or delete
3346 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Unassign)
3347 || input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate)) {
3348 log.info(UPDATING_TREE_INFO_MESSAGE);
3349 saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
3353 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
3354 serviceResponseInformationBuilder.setInstanceId(siid);
3355 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
3356 responseBuilder.setServiceResponseInformation(serviceResponseInformationBuilder.build());
3357 PortMirrorResponseInformationBuilder portMirrorResponseInformationBuilder = new PortMirrorResponseInformationBuilder();
3358 portMirrorResponseInformationBuilder
3359 .setInstanceId(input.getConfigurationInformation().getConfigurationId());
3360 portMirrorResponseInformationBuilder.setObjectPath(portMirrorObjectPath);
3361 responseBuilder.setPortMirrorResponseInformation(portMirrorResponseInformationBuilder.build());
3363 } catch (Exception e) {
3364 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
3365 responseBuilder.setResponseCode("500");
3366 responseBuilder.setResponseMessage(e.getMessage());
3367 responseBuilder.setAckFinalIndicator("Y");
3368 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
3369 RpcResult<PortMirrorTopologyOperationOutput> rpcResult = RpcResultBuilder
3370 .<PortMirrorTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
3371 return Futures.immediateFuture(rpcResult);
3375 responseBuilder.setResponseCode(responseObject.getStatusCode());
3376 responseBuilder.setAckFinalIndicator(ackFinal);
3377 trySetResponseMessage(responseBuilder, responseObject);
3378 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
3379 log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
3381 RpcResult<PortMirrorTopologyOperationOutput> rpcResult = RpcResultBuilder
3382 .<PortMirrorTopologyOperationOutput>status(true).withResult(responseBuilder.build()).build();
3384 if (ackFinal.equals("N")) {
3385 // Spawn background thread to invoke the Async DG
3386 Runnable backgroundThread = new Runnable() {
3388 log.info(BACKGROUND_THREAD_STARTED_MESSAGE);
3389 processAsyncPortMirrorTopologyOperation(input);
3392 new Thread(backgroundThread).start();
3396 return Futures.immediateFuture(rpcResult);
3399 private boolean hasInvalidService(PortMirrorTopologyOperationInput input) {
3400 return input == null || input.getServiceInformation() == null
3401 || input.getServiceInformation().getServiceInstanceId() == null
3402 || input.getServiceInformation().getServiceInstanceId().length() == 0;
3405 private boolean hasInvalidConfigurationId(PortMirrorTopologyOperationInput input) {
3406 return input.getConfigurationInformation() == null
3407 || input.getConfigurationInformation().getConfigurationId() == null
3408 || input.getConfigurationInformation().getConfigurationId().length() == 0;
3411 private void trySetSvcRequestId(PortMirrorTopologyOperationInput input,
3412 PortMirrorTopologyOperationOutputBuilder responseBuilder) {
3413 if (input.getSdncRequestHeader() != null) {
3414 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
3418 private void trySetResponseMessage(PortMirrorTopologyOperationOutputBuilder responseBuilder,
3419 ResponseObject responseObject) {
3420 if (responseObject.getMessage() != null) {
3421 if (!responseObject.getMessage().isEmpty()) {
3422 responseBuilder.setResponseMessage(responseObject.getMessage());
3427 public void processAsyncPortMirrorTopologyOperation(PortMirrorTopologyOperationInput input) {
3428 log.info(BACKGROUND_THREAD_INFO, input.getConfigurationInformation().getConfigurationId());
3430 final String svcOperation = "port-mirror-topology-operation-async";
3431 ServiceData serviceData = null;
3432 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
3433 Properties parms = new Properties();
3435 log.info(CALLED_STR, svcOperation);
3437 // Grab the service instance ID from the input buffer
3438 String siid = input.getServiceInformation().getServiceInstanceId();
3440 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
3441 getServiceData(siid, serviceDataBuilder);
3443 ServiceDataBuilder operDataBuilder = new ServiceDataBuilder();
3444 getServiceData(siid, operDataBuilder, LogicalDatastoreType.OPERATIONAL);
3446 // Set the serviceStatus based on input
3447 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
3448 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
3450 log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
3451 PortMirrorTopologyOperationInputBuilder inputBuilder = new PortMirrorTopologyOperationInputBuilder(input);
3452 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
3454 log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, siid, operDataBuilder.build());
3455 GenericResourceApiUtil.toProperties(parms, OPERATIONAL_DATA_PARAM, operDataBuilder);
3457 // Call SLI sync method
3458 ResponseObject responseObject = new ResponseObject("200", "");
3459 String ackFinal = "Y";
3460 String serviceObjectPath = null;
3461 Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, responseObject);
3463 if (respProps != null) {
3464 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
3465 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
3466 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
3469 setServiceStatus(serviceStatusBuilder, responseObject.getStatusCode(), responseObject.getMessage(), ackFinal);
3470 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
3471 serviceStatusBuilder.setRpcName(svcOperation);
3473 if (failed(responseObject)) {
3474 ServiceBuilder serviceBuilder = new ServiceBuilder();
3475 serviceBuilder.setServiceInstanceId(siid);
3476 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
3478 saveService(serviceBuilder.build(), true, LogicalDatastoreType.CONFIGURATION);
3479 } catch (Exception e) {
3480 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
3487 // Got success from SLI
3489 serviceData = serviceDataBuilder.build();
3490 log.info(UPDATING_MDSAL_INFO_MESSAGE, svcOperation, siid, serviceData);
3493 ServiceBuilder serviceBuilder = new ServiceBuilder();
3494 serviceBuilder.setServiceData(serviceData);
3495 serviceBuilder.setServiceInstanceId(siid);
3496 serviceBuilder.setServiceStatus(serviceStatusBuilder.build());
3497 saveService(serviceBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
3499 if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null) {
3500 // Only update operational tree on activate or delete
3501 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Unassign)
3502 || input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate)) {
3503 log.info(UPDATING_TREE_INFO_MESSAGE);
3504 saveService(serviceBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
3508 ServiceResponseInformationBuilder serviceResponseInformationBuilder = new ServiceResponseInformationBuilder();
3509 serviceResponseInformationBuilder.setInstanceId(siid);
3510 serviceResponseInformationBuilder.setObjectPath(serviceObjectPath);
3512 } catch (Exception e) {
3513 log.error(UPDATING_MDSAL_ERROR_MESSAGE, svcOperation, siid, e);
3518 log.info(UPDATED_MDSAL_INFO_MESSAGE, svcOperation, siid);
3524 public ListenableFuture<RpcResult<VnfGetResourceRequestOutput>> vnfGetResourceRequest(VnfGetResourceRequestInput input) {
3526 final String svcOperation = "vnf-get-resource-request";
3527 ServiceData serviceData;
3528 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
3529 Properties parms = new Properties();
3531 log.info(CALLED_STR, svcOperation);
3532 // create a new response object
3533 VnfGetResourceRequestOutputBuilder responseBuilder = new VnfGetResourceRequestOutputBuilder();
3535 if (hasInvalidService(input)) {
3536 log.debug(NULL_OR_EMPTY_ERROR_MESSAGE, svcOperation);
3537 RpcResult<VnfGetResourceRequestOutput> rpcResult = RpcResultBuilder
3538 .<VnfGetResourceRequestOutput>status(true).withResult(responseBuilder.build()).build();
3540 return Futures.immediateFuture(rpcResult);
3543 // Grab the service instance ID from the input buffer
3544 String siid = input.getServiceInformation().getServiceInstanceId();
3546 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
3547 getServiceData(siid, serviceDataBuilder);
3549 ServiceDataBuilder operDataBuilder = new ServiceDataBuilder();
3550 getServiceData(siid, operDataBuilder, LogicalDatastoreType.OPERATIONAL);
3552 // Set the serviceStatus based on input
3553 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
3554 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
3556 log.info(ADDING_INPUT_DATA_LOG, svcOperation, siid, input);
3557 VnfGetResourceRequestInputBuilder inputBuilder = new VnfGetResourceRequestInputBuilder(input);
3558 GenericResourceApiUtil.toProperties(parms, inputBuilder.build());
3560 log.info(ADDING_OPERATIONAL_DATA_LOG, svcOperation, siid, operDataBuilder.build());
3561 GenericResourceApiUtil.toProperties(parms, OPERATIONAL_DATA_PARAM, operDataBuilder);
3563 // Call SLI sync method
3565 ResponseObject responseObject = new ResponseObject("200", "");
3566 String ackFinal = "Y";
3567 String serviceObjectPath = null;
3568 Properties respProps = tryGetProperties(svcOperation, parms, serviceDataBuilder, responseObject);
3570 if (respProps != null) {
3571 responseObject.setMessage(respProps.getProperty(ERROR_MESSAGE_PARAM));
3572 responseObject.setStatusCode(respProps.getProperty(ERROR_CODE_PARAM));
3573 ackFinal = respProps.getProperty(ACK_FINAL_PARAM, "Y");
3574 serviceObjectPath = respProps.getProperty("service-object-path");
3577 setServiceStatus(serviceStatusBuilder, responseObject.getStatusCode(), responseObject.getMessage(), ackFinal);
3578 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
3579 serviceStatusBuilder.setRpcName(svcOperation);
3581 if (failed(responseObject)) {
3582 log.error(RETURNED_FAILED_MESSAGE, svcOperation, siid, responseBuilder.build());
3583 RpcResult<VnfGetResourceRequestOutput> rpcResult = RpcResultBuilder
3584 .<VnfGetResourceRequestOutput>status(true).withResult(responseBuilder.build()).build();
3586 return Futures.immediateFuture(rpcResult);
3589 // Got success from SLI
3590 log.info(RETURNED_SUCCESS_MESSAGE, svcOperation, siid, responseBuilder.build());
3592 if (respProps != null) {
3593 GenericResourceApiUtil.toBuilder(respProps, responseBuilder);
3596 RpcResult<VnfGetResourceRequestOutput> rpcResult = RpcResultBuilder.<VnfGetResourceRequestOutput>status(true)
3597 .withResult(responseBuilder.build()).build();
3600 return Futures.immediateFuture(rpcResult);
3603 private boolean hasInvalidService(VnfGetResourceRequestInput input) {
3604 return input == null || input.getServiceInformation() == null
3605 || input.getServiceInformation().getServiceInstanceId() == null
3606 || input.getServiceInformation().getServiceInstanceId().length() == 0;