BeanUtils upgrade to 1.9.x 93/89693/4
authorTomasz Golabek <tomasz.golabek@nokia.com>
Tue, 11 Jun 2019 11:41:48 +0000 (13:41 +0200)
committerOren Kleks <orenkle@amdocs.com>
Sun, 16 Jun 2019 08:40:58 +0000 (08:40 +0000)
Transitive dependency to beanutils 1.8.3 removed.
Refactor of existing usage of beanutils proposed.

Change-Id: I6614a5794979225376338c778b25f71911ae9c50
Issue-ID: SDC-2269
Signed-off-by: Tomasz Golabek <tomasz.golabek@nokia.com>
asdctool/pom.xml
catalog-be/src/main/java/org/openecomp/sdc/externalupload/utils/ServiceUtils.java
common/onap-common-configuration-management/onap-configuration-management-core/pom.xml
common/onap-tosca-datatype/pom.xml
common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/services/CommonUtil.java
common/onap-tosca-datatype/src/test/java/org/onap/sdc/tosca/services/CommonUtilTest.java [new file with mode: 0644]
common/onap-tosca-datatype/src/test/java/org/onap/sdc/tosca/services/TestModel.java [new file with mode: 0644]
onboarding/pom.xml
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImpl.java
openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/utils/CommonUtil.java
pom.xml

index d7ac069..9f9dc56 100644 (file)
                </dependency>
 
                <dependency>
-                       <groupId>commons-configuration</groupId>
-                       <artifactId>commons-configuration</artifactId>
-                       <version>1.6</version>
-                       <scope>compile</scope>
-                       <exclusions>
-                               <exclusion>
-                                       <artifactId>commons-collections</artifactId>
-                                       <groupId>commons-collections</groupId>
-                               </exclusion>
-                       </exclusions>
+                       <groupId>org.apache.commons</groupId>
+                       <artifactId>commons-configuration2</artifactId>
+                       <version>${commons-configuration}</version>
                </dependency>
 
                <dependency>
index 20501ef..47e676d 100644 (file)
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
+ * ============LICENSE_END=========================================================
+ * Modifications copyright (c) 2019 Nokia
+ * ================================================================================
  */
 
 package org.openecomp.sdc.externalupload.utils;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.collect.ImmutableSet;
-import org.apache.commons.beanutils.BeanUtils;
 
 import java.lang.reflect.Field;
 import java.util.*;
+import org.onap.sdc.tosca.services.CommonUtil;
 
 public class ServiceUtils {
 
@@ -38,20 +41,11 @@ public class ServiceUtils {
     }
 
     Map<String, Object> objectAsMap = getObjectAsMap(objectCandidate);
-    T result = classToCreate.newInstance();
 
     List<Field> declaredFields = getAllFields(classToCreate);
-    for( Field field : declaredFields){
-      if(isComplexClass(field)){
-        Optional<?> objectUsingSetters =
-            createObjectUsingSetters(objectAsMap.get(field.getName()), field.getType());
-        if( objectUsingSetters.isPresent()){
-          objectAsMap.remove(field.getName());
-          objectAsMap.put(field.getName(), objectUsingSetters.get());
-        }
-      }
-    }
-    BeanUtils.populate(result, objectAsMap);
+
+    CommonUtil.createSubObjectsUsingSetters(objectAsMap, declaredFields.toArray(new Field[0]));
+    T result = CommonUtil.populateBean(objectAsMap, classToCreate);
 
     return Optional.of(result);
   }
index 2aa4226..7f978bf 100755 (executable)
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-configuration2</artifactId>
-            <version>2.3</version>
+            <version>${commons-configuration}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-beanutils</groupId>
+            <artifactId>commons-beanutils</artifactId>
+            <version>${commons-beanutils}</version>
         </dependency>
         <dependency>
             <groupId>commons-logging</groupId>
             <artifactId>commons-logging</artifactId>
             <version>${commons-logging}</version>
         </dependency>
-        <dependency>
-            <groupId>commons-beanutils</groupId>
-            <artifactId>commons-beanutils</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
index 51c557f..eb0a31c 100644 (file)
@@ -42,7 +42,7 @@
                <dependency>
                        <groupId>commons-beanutils</groupId>
                        <artifactId>commons-beanutils</artifactId>
-                       <version>${commons.beanutils.version}</version>
+                       <version>${commons-beanutils}</version>
                </dependency>
                <dependency>
                        <groupId>com.fasterxml.jackson.core</groupId>
index 4ecf869..fdbcb25 100644 (file)
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
+ * ============LICENSE_END=========================================================
+ * Modifications copyright (c) 2019 Nokia
+ * ================================================================================
  */
-
 package org.onap.sdc.tosca.services;
 
-
 import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
@@ -25,10 +27,10 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
-import org.apache.commons.beanutils.BeanUtils;
 import com.google.common.collect.ImmutableSet;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.commons.beanutils.BeanUtils;
 
 public class CommonUtil {
 
@@ -47,9 +49,16 @@ public class CommonUtil {
             return Optional.empty();
         }
         Map<String, Object> objectAsMap = getObjectAsMap(objectCandidate);
-        T result = classToCreate.newInstance();
 
         Field[] declaredFields = classToCreate.getDeclaredFields();
+        createSubObjectsUsingSetters(objectAsMap, declaredFields);
+        T result = populateBean(objectAsMap, classToCreate);
+
+        return Optional.of(result);
+    }
+
+    public static void createSubObjectsUsingSetters(Map<String, Object> objectAsMap, Field[] declaredFields)
+        throws Exception {
         for (Field field : declaredFields) {
             if (isComplexClass(field)) {
                 Optional<?> objectUsingSetters =
@@ -60,9 +69,13 @@ public class CommonUtil {
                 }
             }
         }
-        BeanUtils.populate(result, objectAsMap);
+    }
 
-        return Optional.of(result);
+    public static <T> T populateBean(Map<String, Object> propertiesMap, Class<T> classToCreate)
+        throws IllegalAccessException, InstantiationException, InvocationTargetException {
+        T result = classToCreate.newInstance();
+        BeanUtils.populate(result, propertiesMap);
+        return result;
     }
 
     public static Map<String, Object> getObjectAsMap(Object obj) {
diff --git a/common/onap-tosca-datatype/src/test/java/org/onap/sdc/tosca/services/CommonUtilTest.java b/common/onap-tosca-datatype/src/test/java/org/onap/sdc/tosca/services/CommonUtilTest.java
new file mode 100644 (file)
index 0000000..d9d7f69
--- /dev/null
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.sdc.tosca.services;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.Map;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CommonUtilTest {
+
+    private static final String INT_FIELD_KEY = "field1";
+    private static final Integer INT_FIELD_VALUE = 1;
+    private static final String STRING_FIELD_KEY = "field2";
+    private static final String STRING_FIELD_VALUE = "abc";
+
+    @Test
+    public void testPopulateBeanMethod()
+        throws InstantiationException, IllegalAccessException, InvocationTargetException {
+        Map<String, Object> props = new HashMap<>();
+        props.put(INT_FIELD_KEY, INT_FIELD_VALUE);
+        props.put(STRING_FIELD_KEY, STRING_FIELD_VALUE);
+        TestModel testModel = CommonUtil.populateBean(props, TestModel.class);
+        Assert.assertEquals(testModel.getField1(), INT_FIELD_VALUE);
+        Assert.assertEquals(testModel.getField2(), STRING_FIELD_VALUE);
+    }
+}
\ No newline at end of file
diff --git a/common/onap-tosca-datatype/src/test/java/org/onap/sdc/tosca/services/TestModel.java b/common/onap-tosca-datatype/src/test/java/org/onap/sdc/tosca/services/TestModel.java
new file mode 100644 (file)
index 0000000..e8fc346
--- /dev/null
@@ -0,0 +1,32 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.sdc.tosca.services;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Setter
+@Getter
+@NoArgsConstructor
+public class TestModel {
+    private Integer field1;
+    private String field2;
+}
index dcd952c..e518b73 100644 (file)
@@ -70,7 +70,6 @@
         <bsh.version>2.0b5</bsh.version>
         <cglib.nodep.version>3.2.4</cglib.nodep.version>
         <classmate.version>1.3.3</classmate.version>
-        <commons.beanutils.version>1.9.3</commons.beanutils.version>
         <commons.codec.version>1.10</commons.codec.version>
         <commons.collections.version>4.1</commons.collections.version>
         <commons.digester.version>2.1</commons.digester.version>
             <dependency>
                 <groupId>commons-beanutils</groupId>
                 <artifactId>commons-beanutils</artifactId>
-                <version>${commons.beanutils.version}</version>
+                <version>${commons-beanutils}</version>
             </dependency>
             <dependency>
                 <groupId>com.google.code.findbugs</groupId>
index 4978b3f..5cf6f40 100644 (file)
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
+ * ============LICENSE_END=========================================================
+ * Modifications copyright (c) 2019 Nokia
+ * ================================================================================
  */
 
 package org.openecomp.sdcrests.vsp.rest.services;
 
-import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.cxf.jaxrs.ext.multipart.Attachment;
-import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder;
 import org.openecomp.sdc.activitylog.ActivityLogManager;
 import org.openecomp.sdc.activitylog.ActivityLogManagerFactory;
 import org.openecomp.sdc.activitylog.dao.type.ActivityLogEntity;
@@ -56,7 +57,6 @@ import javax.inject.Named;
 import javax.ws.rs.core.Response;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -125,7 +125,7 @@ public class OrchestrationTemplateCandidateImpl implements OrchestrationTemplate
   @Override
   public Response get(String vspId, String versionId, String user) throws IOException {
     Optional<Pair<String, byte[]>> zipFile = candidateManager.get(vspId, new Version(versionId));
-    String fileName = null;
+    String fileName;
     if (zipFile.isPresent()) {
       fileName = "Candidate." + zipFile.get().getLeft();
     } else {
@@ -147,14 +147,13 @@ public class OrchestrationTemplateCandidateImpl implements OrchestrationTemplate
   }
 
   @Override
-  public Response abort(String vspId, String versionId) throws Exception {
+  public Response abort(String vspId, String versionId) {
     candidateManager.abort(vspId, new Version(versionId));
     return Response.ok().build();
   }
 
   @Override
-  public Response process(String vspId, String versionId, String user)
-      throws InvocationTargetException, IllegalAccessException {
+  public Response process(String vspId, String versionId, String user) {
 
     Version version = new Version(versionId);
     OrchestrationTemplateActionResponse response = candidateManager.process(vspId, version);
@@ -162,27 +161,17 @@ public class OrchestrationTemplateCandidateImpl implements OrchestrationTemplate
     activityLogManager.logActivity(new ActivityLogEntity(vspId, version,
             ActivityType.Upload_Network_Package, user, true, "", ""));
 
-    OrchestrationTemplateActionResponseDto responseDto =
-        new OrchestrationTemplateActionResponseDto();
-    BeanUtils.copyProperties(responseDto, response);
+    OrchestrationTemplateActionResponseDto responseDto = copyOrchestrationTemplateActionResponseToDto(response);
 
     return Response.ok(responseDto).build();
   }
 
   @Override
   public Response updateFilesDataStructure(
-      String vspId, String versionId, FileDataStructureDto fileDataStructureDto, String user)
-      throws Exception {
+      String vspId, String versionId, FileDataStructureDto fileDataStructureDto, String user) {
+
+    FilesDataStructure fileDataStructure = copyFilesDataStructureDtoToFilesDataStructure(fileDataStructureDto);
 
-    FilesDataStructure fileDataStructure = new FilesDataStructure();
-    try {
-      BeanUtils.copyProperties(fileDataStructure, fileDataStructureDto);
-    } catch (IllegalAccessException | InvocationTargetException exception) {
-      String errorWithParameters = ErrorMessagesFormatBuilder
-          .getErrorWithParameters(Messages.MAPPING_OBJECTS_FAILURE.getErrorMessage(),
-              fileDataStructureDto.toString(), fileDataStructure.toString());
-      throw new OrchestrationTemplateCandidateException(errorWithParameters, exception);
-    }
     ValidationResponse response = candidateManager
         .updateFilesDataStructure(vspId, new Version(versionId), fileDataStructure);
 
@@ -195,8 +184,7 @@ public class OrchestrationTemplateCandidateImpl implements OrchestrationTemplate
   }
 
   @Override
-  public Response getFilesDataStructure(String vspId, String versionId, String user)
-      throws Exception {
+  public Response getFilesDataStructure(String vspId, String versionId, String user) {
     Optional<FilesDataStructure> filesDataStructure =
         candidateManager.getFilesDataStructure(vspId, new Version(versionId));
     if (!filesDataStructure.isPresent()) {
@@ -211,4 +199,21 @@ public class OrchestrationTemplateCandidateImpl implements OrchestrationTemplate
     return Response.ok(fileDataStructureDto).build();
   }
 
+  private OrchestrationTemplateActionResponseDto copyOrchestrationTemplateActionResponseToDto(OrchestrationTemplateActionResponse response){
+    OrchestrationTemplateActionResponseDto result = new OrchestrationTemplateActionResponseDto();
+    result.setErrors(response.getErrors());
+    result.setFileNames(response.getFileNames());
+    result.setStatus(response.getStatus());
+    return result;
+  }
+
+  private FilesDataStructure copyFilesDataStructureDtoToFilesDataStructure(FileDataStructureDto fileDataStructureDto){
+    FilesDataStructure filesDataStructure = new FilesDataStructure();
+    filesDataStructure.setArtifacts(fileDataStructureDto.getArtifacts());
+    filesDataStructure.setModules(fileDataStructureDto.getModules());
+    filesDataStructure.setNested(fileDataStructureDto.getNested());
+    filesDataStructure.setUnassigned(fileDataStructureDto.getUnassigned());
+    return filesDataStructure;
+  }
+
 }
index 7d37a55..fcb668f 100644 (file)
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
+ * ============LICENSE_END=========================================================
+ * Modifications copyright (c) 2019 Nokia
+ * ================================================================================
  */
 
 package org.openecomp.sdc.common.utils;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.collect.Multimap;
 
-import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -176,27 +177,7 @@ public class CommonUtil {
   public static <T> Optional<T> createObjectUsingSetters(Object objectCandidate,
                                                          Class<T> classToCreate)
       throws Exception {
-    if (Objects.isNull(objectCandidate)) {
-      return Optional.empty();
-    }
-
-    Map<String, Object> objectAsMap = getObjectAsMap(objectCandidate);
-    T result = classToCreate.newInstance();
-
-    Field[] declaredFields = classToCreate.getDeclaredFields();
-    for( Field field : declaredFields){
-      if(isComplexClass(field)){
-        Optional<?> objectUsingSetters =
-            createObjectUsingSetters(objectAsMap.get(field.getName()), field.getType());
-        if( objectUsingSetters.isPresent()){
-          objectAsMap.remove(field.getName());
-          objectAsMap.put(field.getName(), objectUsingSetters.get());
-        }
-      }
-    }
-    BeanUtils.populate(result, objectAsMap);
-
-    return Optional.of(result);
+    return org.onap.sdc.tosca.services.CommonUtil.createObjectUsingSetters(objectCandidate, classToCreate);
   }
 
   private static boolean isComplexClass(Field field) {
@@ -211,15 +192,7 @@ public class CommonUtil {
   }
 
   public static Map<String, Object> getObjectAsMap(Object obj) {
-    Map<String, Object> objectAsMap = obj instanceof Map ? (Map<String, Object>) obj
-        : new ObjectMapper().convertValue(obj, Map.class);
-
-    if (objectAsMap.containsKey(DEFAULT)) {
-      Object defaultValue = objectAsMap.get(DEFAULT);
-      objectAsMap.remove(DEFAULT);
-      objectAsMap.put(_DEFAULT, defaultValue);
-    }
-    return objectAsMap;
+    return org.onap.sdc.tosca.services.CommonUtil.getObjectAsMap(obj);
   }
 
     public static <K, V> boolean isMultimapEmpty(Multimap<K, V> obj) {
diff --git a/pom.xml b/pom.xml
index 0df3e36..cd1db89 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -48,6 +48,8 @@ Modifications copyright (c) 2018 Nokia
         <ecomp.version>2.4.0</ecomp.version>
         <cassandra.unit.version>3.5.0.1</cassandra.unit.version>
         <lombok.version>1.18.2</lombok.version>
+        <commons-beanutils>1.9.3</commons-beanutils>
+        <commons-configuration>2.3</commons-configuration>
 
         <commons.collections.version>4.1</commons.collections.version>