Changed to unmaintained
[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 com.att.eelf.configuration.EELFLogger;
28 import com.att.eelf.configuration.EELFManager;
29
30 import com.fasterxml.jackson.annotation.JsonIgnore;
31 import com.fasterxml.jackson.annotation.JsonInclude;
32 import com.fasterxml.jackson.annotation.JsonProperty;
33 import com.fasterxml.jackson.annotation.JsonValue;
34 import com.fasterxml.jackson.core.JsonProcessingException;
35 import com.fasterxml.jackson.databind.MapperFeature;
36 import com.fasterxml.jackson.databind.ObjectMapper;
37 import com.fasterxml.jackson.databind.ObjectWriter;
38 import com.fasterxml.jackson.databind.SerializationFeature;
39 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.*;
40 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.CommonHeader;
41 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.CommonHeaderBuilder;
42 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags;
43 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.FlagsBuilder;
44 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.status.Status;
45 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.status.StatusBuilder;
46 import org.opendaylight.yangtools.concepts.Builder;
47 import org.opendaylight.yangtools.yang.binding.DataContainer;
48 import org.onap.appc.domainmodel.lcm.ResponseContext;
49 import org.onap.appc.domainmodel.lcm.VNFOperation;
50 import org.onap.appc.requesthandler.impl.DmaapOutgoingMessage;
51
52 import java.text.ParseException;
53 import java.text.SimpleDateFormat;
54 import java.util.Date;
55 import java.util.TimeZone;
56
57
58 public class Converter {
59     private static final String ISO_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
60     private static final String DMaaP_ROOT_VALUE = "output";
61     private static final SimpleDateFormat isoFormatter = new SimpleDateFormat(ISO_FORMAT);
62     private static final EELFLogger logger = EELFManager.getInstance().getLogger(Converter.class);
63     static {
64         isoFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
65     }
66
67     public static Builder<?> convAsyncResponseToBuilder(
68             VNFOperation vnfOperation, String rpcName, ResponseContext response) {
69         Builder<?> outObj = null;
70         if (response == null) {
71             throw new IllegalArgumentException("empty asyncResponse");
72         }
73         if (vnfOperation == null) {
74             throw new IllegalArgumentException("empty asyncResponse.action");
75         }
76         logger.debug("Entered Converter.convAsyncResponseToBuilder(): Operation Name " + vnfOperation.name());
77         org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.Action action =
78                 org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.Action.valueOf(vnfOperation.name());
79         logger.debug("After resolving action");
80         CommonHeader commonHeader = convAsyncResponseTorev160108CommonHeader(response);
81         Status status = convAsyncResponseTorev160108Status(response);
82         Payload payload = convAsyncResponseTorev160108Payload(response);
83         logger.debug("Extracted action, status, payload");
84         switch (action) {
85             case Rollback:
86                 outObj = new RollbackOutputBuilder();
87                 ((RollbackOutputBuilder)outObj).setCommonHeader(commonHeader);
88                 ((RollbackOutputBuilder)outObj).setStatus(status);
89                 ((RollbackOutputBuilder)outObj).setPayload(payload);
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 is 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             case ConfigScaleIn:
380                 outObj = new ConfigScaleInOutputBuilder();
381                 ((ConfigScaleInOutputBuilder)outObj).setCommonHeader(commonHeader);
382                 ((ConfigScaleInOutputBuilder)outObj).setStatus(status);
383                 ((ConfigScaleInOutputBuilder)outObj).setPayload(payload);
384                 return outObj;
385             case DownloadNESw:
386                 outObj = new DownloadNESwOutputBuilder();
387                 ((DownloadNESwOutputBuilder)outObj).setCommonHeader(commonHeader);
388                 ((DownloadNESwOutputBuilder)outObj).setStatus(status);
389                 ((DownloadNESwOutputBuilder)outObj).setPayload(payload);
390                 return outObj;
391             case ActivateNESw:
392                 outObj = new ActivateNESwOutputBuilder();
393                 ((ActivateNESwOutputBuilder)outObj).setCommonHeader(commonHeader);
394                 ((ActivateNESwOutputBuilder)outObj).setStatus(status);
395                 ((ActivateNESwOutputBuilder)outObj).setPayload(payload);
396                 return outObj;
397             default:
398                 throw new IllegalArgumentException(action+" action is not supported");
399         }
400     }
401
402     public static Payload convAsyncResponseTorev160108Payload(ResponseContext inObj) {
403         logger.debug("Entering convAsyncResponseTorev160108Payload");
404         Payload payload = null;
405         if (inObj.getPayload() != null) {
406             payload = new Payload(inObj.getPayload());
407         }
408         logger.debug("Exiting convAsyncResponseTorev160108Payload");
409         return payload;
410     }
411
412     public static String convPayloadObjectToJsonString(Object inObj) throws ParseException {
413         String payloadAsString = null;
414         if (inObj != null) {
415
416             if (inObj instanceof String) {
417                 payloadAsString = (String)inObj;
418             } else {
419                 try {
420                     ObjectMapper objectMapper = new ObjectMapper();
421                     payloadAsString = objectMapper.writeValueAsString(inObj);
422                 } catch (JsonProcessingException e) {
423                     String errMsg = "Error serialize payload json to string";
424                     throw new ParseException(errMsg + "-" + e.toString(), 0);
425                 }
426             }
427         }
428         return payloadAsString;
429     }
430
431     public static Status convAsyncResponseTorev160108Status(ResponseContext inObj) {
432         logger.debug("Entering convAsyncResponseTorev160108Status");
433         StatusBuilder statusBuilder = new StatusBuilder();
434         statusBuilder.setCode(inObj.getStatus().getCode());
435         statusBuilder.setMessage(inObj.getStatus().getMessage());
436         logger.debug("Exiting convAsyncResponseTorev160108Status");
437         return statusBuilder.build();
438     }
439
440     public static CommonHeader convAsyncResponseTorev160108CommonHeader(ResponseContext inObj) {
441         logger.debug("Entered into convAsyncResponseTorev160108CommonHeader");
442         CommonHeader outObj = null;
443         if (inObj == null) {
444             throw new IllegalArgumentException("empty asyncResponse");
445         }
446
447         CommonHeaderBuilder commonHeaderBuilder = new CommonHeaderBuilder();
448         org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags commonHeaderFlags;
449         if (inObj.getCommonHeader().getFlags() != null) {
450             commonHeaderFlags = Converter.convFlagsMapTorev160108Flags(inObj.getCommonHeader().getFlags());
451             commonHeaderBuilder.setFlags(commonHeaderFlags);
452         }
453
454         logger.debug("Before setApiVer");
455         commonHeaderBuilder.setApiVer(inObj.getCommonHeader().getApiVer());
456         commonHeaderBuilder.setRequestId(inObj.getCommonHeader().getRequestId());
457         if (inObj.getCommonHeader().getSubRequestId() != null) {
458             commonHeaderBuilder.setSubRequestId(inObj.getCommonHeader().getSubRequestId());
459         }
460         logger.debug("Before getOriginatorId");
461         if (inObj.getCommonHeader().getOriginatorId() != null) {
462             commonHeaderBuilder.setOriginatorId(inObj.getCommonHeader().getOriginatorId());
463         }
464         logger.debug("Before getTimeStamp");
465         if (inObj.getCommonHeader().getTimeStamp() != null) {
466             String zuluTimestampStr = Converter.convDateToZuluString(inObj.getCommonHeader().getTimeStamp());
467             logger.debug("After invoking convDateToZuluString()");
468             ZULU zuluTimestamp = new ZULU(zuluTimestampStr);
469             logger.debug("After ZULU()");
470             commonHeaderBuilder.setTimestamp(zuluTimestamp);
471         }
472         outObj = commonHeaderBuilder.build();
473         logger.debug("Exiting from convAsyncResponseTorev160108CommonHeader: Returning outObj: " + outObj.toString());
474         return outObj;
475
476     }
477
478     public static String convDateToZuluString(Date timeStamp) {
479         return isoFormatter.format(timeStamp);
480     }
481
482     public static org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags
483             convFlagsMapTorev160108Flags(org.onap.appc.domainmodel.lcm.Flags flags) {
484         Flags rev160108flags;
485         boolean anyFlag = false;
486         FlagsBuilder flagsBuilder = new FlagsBuilder();
487         /*
488          * TODO: The below flags are related to APP-C request and should not be sent back -
489          * uncomment when response flags are introduced.
490          */
491         /*
492         if (flags.containsKey(FORCE_FLAG)) {
493             org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags.Force force =
494                     org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header
495                         .Flags.Force.valueOf(flags.get(FORCE_FLAG).toString());
496             flagsBuilder.setForce(force);
497             anyFlag = true;
498         }
499         if (flags.containsKey(MODE_FLAG)) {
500             org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags.Mode mode =
501                     org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header
502                         .Flags.Mode.valueOf(flags.get(MODE_FLAG).toString());
503             flagsBuilder.setMode(mode);
504             anyFlag = true;
505         }
506         if (flags.containsKey(TTL_FLAG)) {
507             flagsBuilder.setTtl(Integer.valueOf(flags.get(TTL_FLAG).toString()));
508             anyFlag = true;
509         }
510         if (anyFlag) {
511             rev160108flags = flagsBuilder.build();
512         }
513          */
514
515         rev160108flags = flagsBuilder.build();
516         return rev160108flags;
517     }
518
519     public static String convAsyncResponseToJsonStringBody(
520             VNFOperation vnfOperation, String rpcName, ResponseContext asyncResponse)
521             throws JsonProcessingException {
522         Builder<?> builder = Converter.convAsyncResponseToBuilder(vnfOperation, rpcName, asyncResponse);
523         Object message = builder.build();
524         ObjectMapper objectMapper = new ObjectMapper();
525         objectMapper.addMixIn(message.getClass(), MixInFlagsMessage.class);
526         objectMapper.addMixIn(CommonHeader.class, MixInCommonHeader.class);
527         objectMapper.addMixIn(Flags.class, MixIn.class);
528         objectMapper.addMixIn(Status.class, MixIn.class);
529         objectMapper.addMixIn(Payload.class, MixIn.class);
530         objectMapper.addMixIn(ZULU.class, MixIn.class);
531
532 //                .configure(SerializationConfig.Feature.SORT_PROPERTIES_ALPHABETICALLY, true)
533         ObjectWriter writer = objectMapper
534                 .setSerializationInclusion(JsonInclude.Include.NON_NULL)
535                 .configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)
536                 .writer(SerializationFeature.WRAP_ROOT_VALUE)
537                 .withRootName(DMaaP_ROOT_VALUE)
538                 .withoutFeatures(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS);
539         return writer.writeValueAsString(message);
540     }
541
542     public static String convAsyncResponseToDmaapOutgoingMessageJsonString(
543             VNFOperation vnfOperation, String rpcName, ResponseContext asyncResponse)
544             throws JsonProcessingException {
545         logger.debug("Entered Converter.convAsyncResponseToDmaapOutgoingMessageJsonString()");
546         DmaapOutgoingMessage dmaapOutgoingMessage =
547                 convAsyncResponseToDmaapOutgoingMessage(vnfOperation, rpcName, asyncResponse);
548         ObjectMapper objectMapper = new ObjectMapper();
549         objectMapper.addMixIn(dmaapOutgoingMessage.getBody().getOutput().getClass(), MixInFlagsMessage.class);
550         objectMapper.addMixIn(CommonHeader.class, MixInCommonHeader.class);
551         objectMapper.addMixIn(Flags.class, MixIn.class);
552         objectMapper.addMixIn(Status.class, MixIn.class);
553         objectMapper.addMixIn(Payload.class, MixIn.class);
554         objectMapper.addMixIn(ZULU.class, MixIn.class);
555
556 //                .configure(SerializationConfig.Feature.SORT_PROPERTIES_ALPHABETICALLY, true)
557         ObjectWriter writer = objectMapper
558                 .setSerializationInclusion(JsonInclude.Include.NON_NULL)
559                 .configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)
560                 .writer();
561         logger.debug("Exiting Converter.convAsyncResponseToDmaapOutgoingMessageJsonString()");
562         return writer.writeValueAsString(dmaapOutgoingMessage);
563     }
564
565     public static DmaapOutgoingMessage convAsyncResponseToDmaapOutgoingMessage(
566             VNFOperation vnfOperation, String rpcName, ResponseContext asyncResponse)
567             throws JsonProcessingException {
568         logger.debug("Entered Converter.convAsyncResponseToDmaapOutgoingMessage()");
569         DmaapOutgoingMessage outObj = new DmaapOutgoingMessage();
570         String correlationID = getCorrelationID(asyncResponse);
571         outObj.setCorrelationID(correlationID);
572         outObj.setType("response");
573         outObj.setRpcName(rpcName);
574         logger.debug("In Converter.convAsyncResponseToDmaapOutgoingMessage()"
575                 + " before invoking convAsyncResponseToBuilder");
576         Builder<?> builder = Converter.convAsyncResponseToBuilder(vnfOperation, rpcName, asyncResponse);
577         Object messageBody = builder.build();
578         DmaapOutgoingMessage.Body body = new DmaapOutgoingMessage.Body(messageBody);
579         outObj.setBody(body);
580         logger.debug("Exiting Converter.convAsyncResponseToDmaapOutgoingMessage(): messageBody is: " + body.toString());
581         return outObj;
582     }
583
584     private static String getCorrelationID(ResponseContext context) {
585         return context.getCommonHeader().getRequestId()
586                 + (context.getCommonHeader().getSubRequestId() == null ?
587                     "" : "-" + context.getCommonHeader().getSubRequestId());
588     }
589
590     public static String getRpcName(String action) {
591         String regex = "([a-zA-Z])(?=[A-Z])";
592         String replacement = "$1-";
593         return action.replaceAll(regex, replacement).toLowerCase();
594     }
595
596     abstract class MixIn {
597         @JsonIgnore
598         abstract Class<? extends DataContainer> getImplementedInterface(); // to be removed during serialization
599
600         @JsonValue
601         abstract java.lang.String getValue();
602     }
603     abstract class MixInCommonHeader extends MixIn {
604         @JsonProperty("api-ver")
605         abstract java.lang.String getApiVer();
606         @JsonProperty("originator-id")
607         abstract java.lang.String getOriginatorId();
608         @JsonProperty("request-id")
609         abstract java.lang.String getRequestId();
610         @JsonProperty("sub-request-id")
611         abstract java.lang.String getSubRequestId();
612
613     }
614     abstract class MixInFlagsMessage extends MixIn {
615         @JsonProperty("common-header")
616         abstract CommonHeader getCommonHeader();
617     }
618 }