diff options
author | Tomasz Golabek <tomasz.golabek@nokia.com> | 2019-06-11 13:41:48 +0200 |
---|---|---|
committer | Oren Kleks <orenkle@amdocs.com> | 2019-06-16 08:40:58 +0000 |
commit | b836d3492984e8c751f00b200d24eb07da792c75 (patch) | |
tree | 5633e0863101d032dd5398530abdcf85c29dcc88 | |
parent | d6bd31bf81c1eb8e4f3a6b349d021f5533f03b03 (diff) |
BeanUtils upgrade to 1.9.x
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>
11 files changed, 149 insertions, 92 deletions
diff --git a/asdctool/pom.xml b/asdctool/pom.xml index d7ac069d45..9f9dc56280 100644 --- a/asdctool/pom.xml +++ b/asdctool/pom.xml @@ -210,16 +210,9 @@ </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> diff --git a/catalog-be/src/main/java/org/openecomp/sdc/externalupload/utils/ServiceUtils.java b/catalog-be/src/main/java/org/openecomp/sdc/externalupload/utils/ServiceUtils.java index 20501efab8..47e676dd25 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/externalupload/utils/ServiceUtils.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/externalupload/utils/ServiceUtils.java @@ -12,16 +12,19 @@ * 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); } diff --git a/common/onap-common-configuration-management/onap-configuration-management-core/pom.xml b/common/onap-common-configuration-management/onap-configuration-management-core/pom.xml index 2aa42265d5..7f978bf930 100755 --- a/common/onap-common-configuration-management/onap-configuration-management-core/pom.xml +++ b/common/onap-common-configuration-management/onap-configuration-management-core/pom.xml @@ -41,7 +41,12 @@ <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> @@ -49,10 +54,6 @@ <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> </dependency> diff --git a/common/onap-tosca-datatype/pom.xml b/common/onap-tosca-datatype/pom.xml index 51c557f513..eb0a31c953 100644 --- a/common/onap-tosca-datatype/pom.xml +++ b/common/onap-tosca-datatype/pom.xml @@ -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> diff --git a/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/services/CommonUtil.java b/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/services/CommonUtil.java index 4ecf869ee8..fdbcb253dc 100644 --- a/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/services/CommonUtil.java +++ b/common/onap-tosca-datatype/src/main/java/org/onap/sdc/tosca/services/CommonUtil.java @@ -12,12 +12,14 @@ * 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 index 0000000000..d9d7f69157 --- /dev/null +++ b/common/onap-tosca-datatype/src/test/java/org/onap/sdc/tosca/services/CommonUtilTest.java @@ -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 index 0000000000..e8fc346494 --- /dev/null +++ b/common/onap-tosca-datatype/src/test/java/org/onap/sdc/tosca/services/TestModel.java @@ -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; +} diff --git a/onboarding/pom.xml b/onboarding/pom.xml index dcd952ce1f..e518b73313 100644 --- a/onboarding/pom.xml +++ b/onboarding/pom.xml @@ -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> @@ -221,7 +220,7 @@ <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> diff --git a/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 b/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 index 4978b3fb34..5cf6f40c37 100644 --- a/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 +++ b/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 @@ -12,14 +12,15 @@ * 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; + } + } diff --git a/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/utils/CommonUtil.java b/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/utils/CommonUtil.java index 7d37a55388..fcb668f393 100644 --- a/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/utils/CommonUtil.java +++ b/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/utils/CommonUtil.java @@ -12,14 +12,15 @@ * 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) { @@ -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> |