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