Change code in appc dispatcher for new LCMs in R6
[appc.git] / appc-dispatcher / appc-request-handler / appc-request-handler-core / src / main / java / org / onap / appc / requesthandler / conv / Converter.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP : APPC
4  * ================================================================================
5  * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Copyright (C) 2017 Amdocs
8  * ================================================================================
9  * Modifications Copyright (C) 2018-2019 Orange
10  * =============================================================================
11  * Licensed under the Apache License, Version 2.0 (the "License");
12  * you may not use this file except in compliance with the License.
13  * You may obtain a copy of the License at
14  *
15  *      http://www.apache.org/licenses/LICENSE-2.0
16  *
17  * Unless required by applicable law or agreed to in writing, software
18  * distributed under the License is distributed on an "AS IS" BASIS,
19  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20  * See the License for the specific language governing permissions and
21  * limitations under the License.
22  * ============LICENSE_END=========================================================
23  */
24
25 package org.onap.appc.requesthandler.conv;
26
27 import org.apache.commons.lang3.StringUtils;
28 import com.att.eelf.configuration.EELFLogger;
29 import com.att.eelf.configuration.EELFManager;
30
31 import com.fasterxml.jackson.annotation.JsonIgnore;
32 import com.fasterxml.jackson.annotation.JsonInclude;
33 import com.fasterxml.jackson.annotation.JsonProperty;
34 import com.fasterxml.jackson.annotation.JsonValue;
35 import com.fasterxml.jackson.core.JsonProcessingException;
36 import com.fasterxml.jackson.databind.MapperFeature;
37 import com.fasterxml.jackson.databind.ObjectMapper;
38 import com.fasterxml.jackson.databind.ObjectWriter;
39 import com.fasterxml.jackson.databind.SerializationFeature;
40 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.*;
41 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.CommonHeader;
42 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.CommonHeaderBuilder;
43 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags;
44 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.FlagsBuilder;
45 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.status.Status;
46 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.status.StatusBuilder;
47 import org.opendaylight.yangtools.concepts.Builder;
48 import org.opendaylight.yangtools.yang.binding.DataContainer;
49 import org.onap.appc.domainmodel.lcm.ResponseContext;
50 import org.onap.appc.domainmodel.lcm.VNFOperation;
51 import org.onap.appc.requesthandler.impl.AbstractRequestHandlerImpl;
52 import org.onap.appc.requesthandler.impl.DmaapOutgoingMessage;
53
54 import java.text.ParseException;
55 import java.text.SimpleDateFormat;
56 import java.util.Date;
57 import java.util.TimeZone;
58
59
60 public class Converter {
61     private static final String ISO_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
62     private final static String DMaaP_ROOT_VALUE = "output";
63     private static final SimpleDateFormat isoFormatter = new SimpleDateFormat(ISO_FORMAT);
64     private final static EELFLogger logger = EELFManager.getInstance().getLogger(Converter.class);
65     static {
66         isoFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
67     }
68
69     public static Builder<?> convAsyncResponseToBuilder(
70             VNFOperation vnfOperation, String rpcName, ResponseContext response) {
71         Builder<?> outObj = null;
72         if (response == null) {
73             throw new IllegalArgumentException("empty asyncResponse");
74         }
75         if (vnfOperation == null) {
76             throw new IllegalArgumentException("empty asyncResponse.action");
77         }
78         logger.debug("Entered Converter.convAsyncResponseToBuilder(): Operation Name " + vnfOperation.name());
79         org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.Action action =
80                 org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.Action.valueOf(vnfOperation.name());
81         logger.debug("After resolving action");
82         CommonHeader commonHeader = convAsyncResponseTorev160108CommonHeader(response);
83         Status status = convAsyncResponseTorev160108Status(response);
84         Payload payload = convAsyncResponseTorev160108Payload(response);
85         logger.debug("Extracted action, status, payload");
86         switch (action) {
87             case Rollback:
88                 outObj = new RollbackOutputBuilder();
89                 ((RollbackOutputBuilder)outObj).setCommonHeader(commonHeader);
90                 ((RollbackOutputBuilder)outObj).setStatus(status);
91                 return outObj;
92             case Snapshot:
93                 outObj = new SnapshotOutputBuilder();
94                 ((SnapshotOutputBuilder)outObj).setCommonHeader(commonHeader);
95                 ((SnapshotOutputBuilder)outObj).setStatus(status);
96                 try {
97                     ((SnapshotOutputBuilder) outObj)
98                             .setSnapshotId(response.getAdditionalContext().get("output.snapshot-id"));
99                 } catch (NullPointerException ignored) {
100                     // in case of negative response, snapshotID is not populated, so just ignore NPL
101                 }
102                 return outObj;
103             case Audit:
104                 outObj = new AuditOutputBuilder();
105                 ((AuditOutputBuilder)outObj).setCommonHeader(commonHeader);
106                 ((AuditOutputBuilder)outObj).setStatus(status);
107                 ((AuditOutputBuilder)outObj).setPayload(payload);
108                 return outObj;
109             case HealthCheck:
110                 outObj = new HealthCheckOutputBuilder();
111                 ((HealthCheckOutputBuilder)outObj).setCommonHeader(commonHeader);
112                 ((HealthCheckOutputBuilder)outObj).setStatus(status);
113                 ((HealthCheckOutputBuilder)outObj).setPayload(payload);
114                 logger.debug("In HealthCheck case: created outObj, returning");
115                 return outObj;
116             case LiveUpgrade:
117                 outObj = new LiveUpgradeOutputBuilder();
118                 ((LiveUpgradeOutputBuilder)outObj).setCommonHeader(commonHeader);
119                 ((LiveUpgradeOutputBuilder)outObj).setStatus(status);
120                 return outObj;
121             case Lock:
122                 outObj = new LockOutputBuilder();
123                 ((LockOutputBuilder)outObj).setCommonHeader(commonHeader);
124                 ((LockOutputBuilder)outObj).setStatus(status);
125                 return outObj;
126             case Configure:
127                 outObj = new ConfigureOutputBuilder();
128                 ((ConfigureOutputBuilder)outObj).setCommonHeader(commonHeader);
129                 ((ConfigureOutputBuilder)outObj).setStatus(status);
130                 ((ConfigureOutputBuilder)outObj).setPayload(payload);
131                 return outObj;
132             case ConfigModify:
133                 outObj = new ConfigModifyOutputBuilder();
134                 ((ConfigModifyOutputBuilder)outObj).setCommonHeader(commonHeader);
135                 ((ConfigModifyOutputBuilder)outObj).setStatus(status);
136                 ((ConfigModifyOutputBuilder)outObj).setPayload(payload);
137                 return outObj;
138             case ConfigScaleOut:
139                 outObj = new ConfigScaleOutOutputBuilder();
140                 ((ConfigScaleOutOutputBuilder)outObj).setCommonHeader(commonHeader);
141                 ((ConfigScaleOutOutputBuilder)outObj).setStatus(status);
142                 ((ConfigScaleOutOutputBuilder)outObj).setPayload(payload);
143                 return outObj;
144             case ConfigRestore:
145                 outObj = new ConfigRestoreOutputBuilder();
146                 ((ConfigRestoreOutputBuilder)outObj).setCommonHeader(commonHeader);
147                 ((ConfigRestoreOutputBuilder)outObj).setStatus(status);
148                 ((ConfigRestoreOutputBuilder)outObj).setPayload(payload);
149                 return outObj;
150             case SoftwareUpload:
151                 outObj = new SoftwareUploadOutputBuilder();
152                 ((SoftwareUploadOutputBuilder)outObj).setCommonHeader(commonHeader);
153                 ((SoftwareUploadOutputBuilder)outObj).setStatus(status);
154                 return outObj;
155             case Stop:
156                 outObj = new StopOutputBuilder();
157                 ((StopOutputBuilder)outObj).setCommonHeader(commonHeader);
158                 ((StopOutputBuilder)outObj).setStatus(status);
159                 return outObj;
160             case Sync:
161                 outObj = new SyncOutputBuilder();
162                 ((SyncOutputBuilder)outObj).setCommonHeader(commonHeader);
163                 ((SyncOutputBuilder)outObj).setStatus(status);
164                 ((SyncOutputBuilder)outObj).setPayload(payload);
165                 return outObj;
166             case Terminate:
167                 outObj = new TerminateOutputBuilder();
168                 ((TerminateOutputBuilder)outObj).setCommonHeader(commonHeader);
169                 ((TerminateOutputBuilder)outObj).setStatus(status);
170                 return outObj;
171             case Test:
172                 outObj = new TestOutputBuilder();
173                 ((TestOutputBuilder)outObj).setCommonHeader(commonHeader);
174                 ((TestOutputBuilder)outObj).setStatus(status);
175                 return outObj;
176             case Unlock:
177                 outObj = new UnlockOutputBuilder();
178                 ((UnlockOutputBuilder)outObj).setCommonHeader(commonHeader);
179                 ((UnlockOutputBuilder)outObj).setStatus(status);
180                 return outObj;
181             case Restart:
182                 outObj = new RestartOutputBuilder();
183                 ((RestartOutputBuilder)outObj).setCommonHeader(commonHeader);
184                 ((RestartOutputBuilder)outObj).setStatus(status);
185                 return outObj;
186             case Rebuild:
187                 outObj = new RebuildOutputBuilder();
188                 ((RebuildOutputBuilder)outObj).setCommonHeader(commonHeader);
189                 ((RebuildOutputBuilder)outObj).setStatus(status);
190                 return outObj;
191             case Reboot:
192                 outObj = new RebootOutputBuilder();
193                 ((RebootOutputBuilder)outObj).setCommonHeader(commonHeader);
194                 ((RebootOutputBuilder)outObj).setStatus(status);
195                 return outObj;
196             case Migrate:
197                 outObj = new MigrateOutputBuilder();
198                 ((MigrateOutputBuilder)outObj).setCommonHeader(commonHeader);
199                 ((MigrateOutputBuilder)outObj).setStatus(status);
200                 return outObj;
201             case Evacuate:
202                 outObj = new EvacuateOutputBuilder();
203                 ((EvacuateOutputBuilder)outObj).setCommonHeader(commonHeader);
204                 ((EvacuateOutputBuilder)outObj).setStatus(status);
205                 return outObj;
206             case ConfigBackup:
207                 outObj = new ConfigBackupOutputBuilder();
208                 ((ConfigBackupOutputBuilder)outObj).setCommonHeader(commonHeader);
209                 ((ConfigBackupOutputBuilder)outObj).setStatus(status);
210                 ((ConfigBackupOutputBuilder)outObj).setPayload(payload);
211                 return outObj;
212             case ConfigBackupDelete:
213                 outObj = new ConfigBackupDeleteOutputBuilder();
214                 ((ConfigBackupDeleteOutputBuilder)outObj).setCommonHeader(commonHeader);
215                 ((ConfigBackupDeleteOutputBuilder)outObj).setStatus(status);
216                 ((ConfigBackupDeleteOutputBuilder)outObj).setPayload(payload);
217                 return outObj;
218             case ConfigExport:
219                 outObj = new ConfigExportOutputBuilder();
220                 ((ConfigExportOutputBuilder)outObj).setCommonHeader(commonHeader);
221                 ((ConfigExportOutputBuilder)outObj).setStatus(status);
222                 return outObj;
223             case Start:
224                 outObj = new StartOutputBuilder();
225                 ((StartOutputBuilder)outObj).setCommonHeader(commonHeader);
226                 ((StartOutputBuilder)outObj).setStatus(status);
227                 return outObj;
228             case StopApplication:
229                 outObj = new StopApplicationOutputBuilder();
230                 ((StopApplicationOutputBuilder)outObj).setCommonHeader(commonHeader);
231                 ((StopApplicationOutputBuilder)outObj).setStatus(status);
232                 ((StopApplicationOutputBuilder)outObj).setPayload(payload);
233                 return outObj;
234             case StartApplication:
235                 outObj = new StartApplicationOutputBuilder();
236                 ((StartApplicationOutputBuilder)outObj).setCommonHeader(commonHeader);
237                 ((StartApplicationOutputBuilder)outObj).setStatus(status);
238                 ((StartApplicationOutputBuilder)outObj).setPayload(payload);
239                 return outObj;
240             case QuiesceTraffic:
241                 outObj = new QuiesceTrafficOutputBuilder();
242                 ((QuiesceTrafficOutputBuilder)outObj).setCommonHeader(commonHeader);
243                 ((QuiesceTrafficOutputBuilder)outObj).setStatus(status);
244                 ((QuiesceTrafficOutputBuilder)outObj).setPayload(payload);
245                 return outObj;
246             case ResumeTraffic:
247                 outObj = new ResumeTrafficOutputBuilder();
248                 ((ResumeTrafficOutputBuilder)outObj).setCommonHeader(commonHeader);
249                 ((ResumeTrafficOutputBuilder)outObj).setStatus(status);
250                 ((ResumeTrafficOutputBuilder)outObj).setPayload(payload);
251                 return outObj;
252             case UpgradeSoftware:
253                 outObj = new UpgradeSoftwareOutputBuilder();
254                 ((UpgradeSoftwareOutputBuilder)outObj).setCommonHeader(commonHeader);
255                 ((UpgradeSoftwareOutputBuilder)outObj).setStatus(status);
256                 ((UpgradeSoftwareOutputBuilder)outObj).setPayload(payload);
257                 return outObj;
258             case UpgradePostCheck:
259                 outObj = new UpgradePostCheckOutputBuilder();
260                 ((UpgradePostCheckOutputBuilder)outObj).setCommonHeader(commonHeader);
261                 ((UpgradePostCheckOutputBuilder)outObj).setStatus(status);
262                 ((UpgradePostCheckOutputBuilder)outObj).setPayload(payload);
263                 return outObj;
264             case UpgradeBackup:
265                 outObj = new UpgradeBackupOutputBuilder();
266                 ((UpgradeBackupOutputBuilder)outObj).setCommonHeader(commonHeader);
267                 ((UpgradeBackupOutputBuilder)outObj).setStatus(status);
268                 ((UpgradeBackupOutputBuilder)outObj).setPayload(payload);
269                 return outObj;
270             case UpgradeBackout:
271                 outObj = new UpgradeBackoutOutputBuilder();
272                 ((UpgradeBackoutOutputBuilder)outObj).setCommonHeader(commonHeader);
273                 ((UpgradeBackoutOutputBuilder)outObj).setStatus(status);
274                 ((UpgradeBackoutOutputBuilder)outObj).setPayload(payload);
275                 return outObj;
276             case UpgradePreCheck:
277                 outObj = new UpgradePreCheckOutputBuilder();
278                 ((UpgradePreCheckOutputBuilder)outObj).setCommonHeader(commonHeader);
279                 ((UpgradePreCheckOutputBuilder)outObj).setStatus(status);
280                 ((UpgradePreCheckOutputBuilder)outObj).setPayload(payload);
281                 return outObj;
282             case AttachVolume:
283                 outObj = new AttachVolumeOutputBuilder();
284                 ((AttachVolumeOutputBuilder)outObj).setCommonHeader(commonHeader);
285                 ((AttachVolumeOutputBuilder)outObj).setStatus(status);
286                 return outObj;
287             case DetachVolume:
288                 outObj = new DetachVolumeOutputBuilder();
289                 ((DetachVolumeOutputBuilder)outObj).setCommonHeader(commonHeader);
290                 ((DetachVolumeOutputBuilder)outObj).setStatus(status);
291                 return outObj;
292             case DistributeTraffic:
293                 outObj = new DistributeTrafficOutputBuilder();
294                 ((DistributeTrafficOutputBuilder)outObj).setCommonHeader(commonHeader);
295                 ((DistributeTrafficOutputBuilder)outObj).setStatus(status);
296                 return outObj;
297             case DistributeTrafficCheck:
298                 outObj = new DistributeTrafficCheckOutputBuilder();
299                 ((DistributeTrafficCheckOutputBuilder)outObj).setCommonHeader(commonHeader);
300                 ((DistributeTrafficCheckOutputBuilder)outObj).setStatus(status);
301                 return outObj;
302             case PreConfigure:
303                 outObj = new PreConfigureOutputBuilder();
304                 ((PreConfigureOutputBuilder)outObj).setCommonHeader(commonHeader);
305                 ((PreConfigureOutputBuilder)outObj).setStatus(status);
306                 ((PreConfigureOutputBuilder)outObj).setPayload(payload);
307                 return outObj;
308             case GetConfig:
309                 outObj = new GetConfigOutputBuilder();
310                 ((GetConfigOutputBuilder)outObj).setCommonHeader(commonHeader);
311                 ((GetConfigOutputBuilder)outObj).setStatus(status);
312                 ((GetConfigOutputBuilder)outObj).setPayload(payload);
313                 return outObj;
314             case PostEvacuate:
315                 outObj = new PostEvacuateOutputBuilder();
316                 ((PostEvacuateOutputBuilder)outObj).setCommonHeader(commonHeader);
317                 ((PostEvacuateOutputBuilder)outObj).setStatus(status);
318                 ((PostEvacuateOutputBuilder)outObj).setPayload(payload);
319                 return outObj;
320             case PreMigrate:
321                 outObj = new PreMigrateOutputBuilder();
322                 ((PreMigrateOutputBuilder)outObj).setCommonHeader(commonHeader);
323                 ((PreMigrateOutputBuilder)outObj).setStatus(status);
324                 ((PreMigrateOutputBuilder)outObj).setPayload(payload);
325                 return outObj;
326             case PostMigrate:
327                 outObj = new PostMigrateOutputBuilder();
328                 ((PostMigrateOutputBuilder)outObj).setCommonHeader(commonHeader);
329                 ((PostMigrateOutputBuilder)outObj).setStatus(status);
330                 ((PostMigrateOutputBuilder)outObj).setPayload(payload);
331                 return outObj;
332             case PreRebuild:
333                 outObj = new PreRebuildOutputBuilder();
334                 ((PreRebuildOutputBuilder)outObj).setCommonHeader(commonHeader);
335                 ((PreRebuildOutputBuilder)outObj).setStatus(status);
336                 ((PreRebuildOutputBuilder)outObj).setPayload(payload);
337                 return outObj;
338             case Provisioning:
339                 outObj = new ProvisioningOutputBuilder();
340                 ((ProvisioningOutputBuilder)outObj).setCommonHeader(commonHeader);
341                 ((ProvisioningOutputBuilder)outObj).setStatus(status);
342                 ((ProvisioningOutputBuilder)outObj).setPayload(payload);
343                 return outObj;
344             case PostRebuild:
345                 outObj = new PostRebuildOutputBuilder();
346                 ((PostRebuildOutputBuilder)outObj).setCommonHeader(commonHeader);
347                 ((PostRebuildOutputBuilder)outObj).setStatus(status);
348                 ((PostRebuildOutputBuilder)outObj).setPayload(payload);
349                 return outObj;
350             case PreEvacuate:
351                 outObj = new PreEvacuateOutputBuilder();
352                 ((PreEvacuateOutputBuilder)outObj).setCommonHeader(commonHeader);
353                 ((PreEvacuateOutputBuilder)outObj).setStatus(status);
354                 ((PreEvacuateOutputBuilder)outObj).setPayload(payload);
355                 return outObj;
356             case StartTraffic:
357                 outObj = new StartTrafficOutputBuilder();
358                 ((StartTrafficOutputBuilder)outObj).setCommonHeader(commonHeader);
359                 ((StartTrafficOutputBuilder)outObj).setStatus(status);
360                 ((StartTrafficOutputBuilder)outObj).setPayload(payload);
361                 return outObj;
362             case StatusTraffic:
363                 outObj = new StatusTrafficOutputBuilder();
364                 ((StatusTrafficOutputBuilder)outObj).setCommonHeader(commonHeader);
365                 ((StatusTrafficOutputBuilder)outObj).setStatus(status);
366                 ((StatusTrafficOutputBuilder)outObj).setPayload(payload);
367                 return outObj;
368             case StopTraffic:
369                 outObj = new StopTrafficOutputBuilder();
370                 ((StopTrafficOutputBuilder)outObj).setCommonHeader(commonHeader);
371                 ((StopTrafficOutputBuilder)outObj).setStatus(status);
372                 ((StopTrafficOutputBuilder)outObj).setPayload(payload);
373                 return outObj;
374             case LicenseManagement:
375                 outObj = new LicenseManagementOutputBuilder();
376                 ((LicenseManagementOutputBuilder)outObj).setCommonHeader(commonHeader);
377                 ((LicenseManagementOutputBuilder)outObj).setStatus(status);
378                 ((LicenseManagementOutputBuilder)outObj).setPayload(payload);
379                 return outObj;
380             default:
381                 throw new IllegalArgumentException(action+" action is not supported");
382         }
383     }
384
385     public static Payload convAsyncResponseTorev160108Payload(ResponseContext inObj) {
386         logger.debug("Entering convAsyncResponseTorev160108Payload");
387         Payload payload = null;
388         if (inObj.getPayload() != null) {
389             payload = new Payload(inObj.getPayload());
390         }
391         logger.debug("Exiting convAsyncResponseTorev160108Payload");
392         return payload;
393     }
394
395     public static String convPayloadObjectToJsonString(Object inObj) throws ParseException {
396         String payloadAsString = null;
397         if (inObj != null) {
398
399             if (inObj instanceof String) {
400                 payloadAsString = (String)inObj;
401             } else {
402                 try {
403                     ObjectMapper objectMapper = new ObjectMapper();
404                     payloadAsString = objectMapper.writeValueAsString(inObj);
405                 } catch (JsonProcessingException e) {
406                     String errMsg = "Error serialize payload json to string";
407                     throw new ParseException(errMsg + "-" + e.toString(), 0);
408                 }
409             }
410         }
411         return payloadAsString;
412     }
413
414     public static Status convAsyncResponseTorev160108Status(ResponseContext inObj) {
415         logger.debug("Entering convAsyncResponseTorev160108Status");
416         StatusBuilder statusBuilder = new StatusBuilder();
417         statusBuilder.setCode(inObj.getStatus().getCode());
418         statusBuilder.setMessage(inObj.getStatus().getMessage());
419         logger.debug("Exiting convAsyncResponseTorev160108Status");
420         return statusBuilder.build();
421     }
422
423     public static CommonHeader convAsyncResponseTorev160108CommonHeader(ResponseContext inObj) {
424         logger.debug("Entered into convAsyncResponseTorev160108CommonHeader");
425         CommonHeader outObj = null;
426         if (inObj == null) {
427             throw new IllegalArgumentException("empty asyncResponse");
428         }
429
430         CommonHeaderBuilder commonHeaderBuilder = new CommonHeaderBuilder();
431         org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags commonHeaderFlags;
432         if (inObj.getCommonHeader().getFlags() != null) {
433             commonHeaderFlags = Converter.convFlagsMapTorev160108Flags(inObj.getCommonHeader().getFlags());
434             commonHeaderBuilder.setFlags(commonHeaderFlags);
435         }
436
437         logger.debug("Before setApiVer");
438         commonHeaderBuilder.setApiVer(inObj.getCommonHeader().getApiVer());
439         commonHeaderBuilder.setRequestId(inObj.getCommonHeader().getRequestId());
440         if (inObj.getCommonHeader().getSubRequestId() != null) {
441             commonHeaderBuilder.setSubRequestId(inObj.getCommonHeader().getSubRequestId());
442         }
443         logger.debug("Before getOriginatorId");
444         if (inObj.getCommonHeader().getOriginatorId() != null) {
445             commonHeaderBuilder.setOriginatorId(inObj.getCommonHeader().getOriginatorId());
446         }
447         logger.debug("Before getTimeStamp");
448         if (inObj.getCommonHeader().getTimeStamp() != null) {
449             String zuluTimestampStr = Converter.convDateToZuluString(inObj.getCommonHeader().getTimeStamp());
450             logger.debug("After invoking convDateToZuluString()");
451             ZULU zuluTimestamp = new ZULU(zuluTimestampStr);
452             logger.debug("After ZULU()");
453             commonHeaderBuilder.setTimestamp(zuluTimestamp);
454         }
455         outObj = commonHeaderBuilder.build();
456         logger.debug("Exiting from convAsyncResponseTorev160108CommonHeader: Returning outObj: " + outObj.toString());
457         return outObj;
458
459     }
460
461     public static String convDateToZuluString(Date timeStamp) {
462         return isoFormatter.format(timeStamp);
463     }
464
465     public static org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags
466             convFlagsMapTorev160108Flags(org.onap.appc.domainmodel.lcm.Flags flags) {
467         Flags rev160108flags;
468         boolean anyFlag = false;
469         FlagsBuilder flagsBuilder = new FlagsBuilder();
470         /*
471          * TODO: The below flags are related to APP-C request and should not be sent back -
472          * uncomment when response flags are introduced.
473          */
474         /*
475         if (flags.containsKey(FORCE_FLAG)) {
476             org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags.Force force =
477                     org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header
478                         .Flags.Force.valueOf(flags.get(FORCE_FLAG).toString());
479             flagsBuilder.setForce(force);
480             anyFlag = true;
481         }
482         if (flags.containsKey(MODE_FLAG)) {
483             org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags.Mode mode =
484                     org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header
485                         .Flags.Mode.valueOf(flags.get(MODE_FLAG).toString());
486             flagsBuilder.setMode(mode);
487             anyFlag = true;
488         }
489         if (flags.containsKey(TTL_FLAG)) {
490             flagsBuilder.setTtl(Integer.valueOf(flags.get(TTL_FLAG).toString()));
491             anyFlag = true;
492         }
493         if (anyFlag) {
494             rev160108flags = flagsBuilder.build();
495         }
496          */
497
498         rev160108flags = flagsBuilder.build();
499         return rev160108flags;
500     }
501
502     public static String convAsyncResponseToJsonStringBody(
503             VNFOperation vnfOperation, String rpcName, ResponseContext asyncResponse)
504             throws JsonProcessingException {
505         Builder<?> builder = Converter.convAsyncResponseToBuilder(vnfOperation, rpcName, asyncResponse);
506         Object message = builder.build();
507         ObjectMapper objectMapper = new ObjectMapper();
508         objectMapper.addMixIn(message.getClass(), MixInFlagsMessage.class);
509         objectMapper.addMixIn(CommonHeader.class, MixInCommonHeader.class);
510         objectMapper.addMixIn(Flags.class, MixIn.class);
511         objectMapper.addMixIn(Status.class, MixIn.class);
512         objectMapper.addMixIn(Payload.class, MixIn.class);
513         objectMapper.addMixIn(ZULU.class, MixIn.class);
514
515 //                .configure(SerializationConfig.Feature.SORT_PROPERTIES_ALPHABETICALLY, true)
516         ObjectWriter writer = objectMapper
517                 .setSerializationInclusion(JsonInclude.Include.NON_NULL)
518                 .configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)
519                 .writer(SerializationFeature.WRAP_ROOT_VALUE)
520                 .withRootName(DMaaP_ROOT_VALUE)
521                 .withoutFeatures(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS);
522         return writer.writeValueAsString(message);
523     }
524
525     public static String convAsyncResponseToDmaapOutgoingMessageJsonString(
526             VNFOperation vnfOperation, String rpcName, ResponseContext asyncResponse)
527             throws JsonProcessingException {
528         logger.debug("Entered Converter.convAsyncResponseToDmaapOutgoingMessageJsonString()");
529         DmaapOutgoingMessage dmaapOutgoingMessage =
530                 convAsyncResponseToDmaapOutgoingMessage(vnfOperation, rpcName, asyncResponse);
531         ObjectMapper objectMapper = new ObjectMapper();
532         objectMapper.addMixIn(dmaapOutgoingMessage.getBody().getOutput().getClass(), MixInFlagsMessage.class);
533         objectMapper.addMixIn(CommonHeader.class, MixInCommonHeader.class);
534         objectMapper.addMixIn(Flags.class, MixIn.class);
535         objectMapper.addMixIn(Status.class, MixIn.class);
536         objectMapper.addMixIn(Payload.class, MixIn.class);
537         objectMapper.addMixIn(ZULU.class, MixIn.class);
538
539 //                .configure(SerializationConfig.Feature.SORT_PROPERTIES_ALPHABETICALLY, true)
540         ObjectWriter writer = objectMapper
541                 .setSerializationInclusion(JsonInclude.Include.NON_NULL)
542                 .configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)
543                 .writer();
544         logger.debug("Exiting Converter.convAsyncResponseToDmaapOutgoingMessageJsonString()");
545         return writer.writeValueAsString(dmaapOutgoingMessage);
546     }
547
548     public static DmaapOutgoingMessage convAsyncResponseToDmaapOutgoingMessage(
549             VNFOperation vnfOperation, String rpcName, ResponseContext asyncResponse)
550             throws JsonProcessingException {
551         logger.debug("Entered Converter.convAsyncResponseToDmaapOutgoingMessage()");
552         DmaapOutgoingMessage outObj = new DmaapOutgoingMessage();
553         String correlationID = getCorrelationID(asyncResponse);
554         outObj.setCorrelationID(correlationID);
555         outObj.setType("response");
556         outObj.setRpcName(rpcName);
557         logger.debug("In Converter.convAsyncResponseToDmaapOutgoingMessage()"
558                 + " before invoking convAsyncResponseToBuilder");
559         Builder<?> builder = Converter.convAsyncResponseToBuilder(vnfOperation, rpcName, asyncResponse);
560         Object messageBody = builder.build();
561         DmaapOutgoingMessage.Body body = new DmaapOutgoingMessage.Body(messageBody);
562         outObj.setBody(body);
563         logger.debug("Exiting Converter.convAsyncResponseToDmaapOutgoingMessage(): messageBody is: " + body.toString());
564         return outObj;
565     }
566
567     private static String getCorrelationID(ResponseContext context) {
568         return context.getCommonHeader().getRequestId()
569                 + (context.getCommonHeader().getSubRequestId() == null ?
570                     "" : "-" + context.getCommonHeader().getSubRequestId());
571     }
572
573     abstract class MixIn {
574         @JsonIgnore
575         abstract Class<? extends DataContainer> getImplementedInterface(); // to be removed during serialization
576
577         @JsonValue
578         abstract java.lang.String getValue();
579     }
580     abstract class MixInCommonHeader extends MixIn {
581         @JsonProperty("api-ver")
582         abstract java.lang.String getApiVer();
583         @JsonProperty("originator-id")
584         abstract java.lang.String getOriginatorId();
585         @JsonProperty("request-id")
586         abstract java.lang.String getRequestId();
587         @JsonProperty("sub-request-id")
588         abstract java.lang.String getSubRequestId();
589
590     }
591     abstract class MixInFlagsMessage extends MixIn {
592         @JsonProperty("common-header")
593         abstract CommonHeader getCommonHeader();
594     }
595 }