[SDC] Fix sonar issues
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / utils / MapUtils.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20 package org.openecomp.sdc.be.components.utils;
21
22 import java.util.List;
23 import java.util.Map;
24
25 public class MapUtils {
26
27     public static boolean compareMaps(Map<String, Object> source, Map<String, Object> target) {
28         if (source == null && target == null) {
29             return true;
30         }
31         if (source == null || target == null || source.keySet().size() != target.keySet().size()) {
32             return false;
33         }
34         for (Map.Entry<String, Object> entry : source.entrySet()) {
35             Object sourceObj = entry.getValue();
36             Object targetObj = target.get(entry.getKey());
37             if ((sourceObj == null && targetObj != null) || (sourceObj != null && targetObj == null)) {
38                 return false;
39             }
40             if (!handleSourceAndTargetObjects(sourceObj, targetObj)) {
41                 return false;
42             }
43         }
44         return true;
45     }
46
47     public static boolean compareLists(List<Object> source, List<Object> target) {
48         if (source == null && target == null) {
49             return true;
50         }
51         if (source == null || target == null || source.size() != target.size()) {
52             return false;
53         }
54         for (int i = 0; i < source.size(); i++) {
55             Object sourceObj = source.get(i);
56             Object targetObj = target.get(i);
57             if ((sourceObj == null && targetObj != null) || sourceObj != null && targetObj == null) {
58                 return false;
59             }
60             if (!handleSourceAndTargetObjects(sourceObj, targetObj)) {
61                 return false;
62             }
63         }
64         return true;
65     }
66
67     public static boolean handleSourceAndTargetObjects(Object sourceObj, Object targetObj) {
68         if (sourceObj == null && targetObj == null) {
69             return true;
70         }
71         if (sourceObj == null) {
72             return false;
73         }
74         if (sourceObj.getClass().equals(targetObj.getClass())) {
75             if (sourceObj instanceof Map) {
76                 if (!compareMaps((Map<String, Object>) sourceObj, (Map<String, Object>) targetObj)) {
77                     return false;
78                 }
79             } else if (sourceObj instanceof List) {
80                 if (!compareLists((List<Object>) sourceObj, (List<Object>) targetObj)) {
81                     return false;
82                 }
83             } else {
84                 if (!sourceObj.equals(targetObj)) {
85                     return false;
86                 }
87             }
88         }
89         return true;
90     }
91 }