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