diff --git a/libraries/src/main/java/com/baeldung/commons/beanutils/CourseEntity.java b/libraries/src/main/java/com/baeldung/commons/beanutils/CourseEntity.java new file mode 100644 index 0000000000..4a0b59404d --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/beanutils/CourseEntity.java @@ -0,0 +1,35 @@ +package com.baeldung.commons.beanutils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class CourseEntity { + private String name; + private List codes; + private Map students = new HashMap(); + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getCodes() { + return codes; + } + + public void setCodes(List codes) { + this.codes = codes; + } + + public void setStudent(String id, Student student) { + students.put(id, student); + } + + public Student getStudent(String enrolledId) { + return students.get(enrolledId); + } +} diff --git a/libraries/src/main/java/com/baeldung/commons/beanutils/CourseService.java b/libraries/src/main/java/com/baeldung/commons/beanutils/CourseService.java index f519365dab..1f566a782a 100644 --- a/libraries/src/main/java/com/baeldung/commons/beanutils/CourseService.java +++ b/libraries/src/main/java/com/baeldung/commons/beanutils/CourseService.java @@ -3,32 +3,38 @@ package com.baeldung.commons.beanutils; import java.lang.reflect.InvocationTargetException; import java.util.List; +import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.PropertyUtils; public class CourseService { public static void setValues(Course course, String name, List codes) - throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { + throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { // Setting the simple properties PropertyUtils.setSimpleProperty(course, "name", name); PropertyUtils.setSimpleProperty(course, "codes", codes); } public static void setIndexedValue(Course course, int codeIndex, String code) - throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { + throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { // Setting the indexed properties PropertyUtils.setIndexedProperty(course, "codes[" + codeIndex + "]", code); } public static void setMappedValue(Course course, String enrollId, Student student) - throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { + throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { // Setting the mapped properties PropertyUtils.setMappedProperty(course, "enrolledStudent(" + enrollId + ")", student); } public static String getNestedValue(Course course, String enrollId, String nestedPropertyName) - throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { + throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { return (String) PropertyUtils.getNestedProperty( course, "enrolledStudent(" + enrollId + ")." + nestedPropertyName); } + + public static void copyProperties(Course course, CourseEntity courseEntity) + throws IllegalAccessException, InvocationTargetException { + BeanUtils.copyProperties(course, courseEntity); + } } diff --git a/libraries/src/test/java/com/baeldung/commons/beanutils/CourseServiceTest.java b/libraries/src/test/java/com/baeldung/commons/beanutils/CourseServiceTest.java index d2ae6d7d55..5407477a00 100644 --- a/libraries/src/test/java/com/baeldung/commons/beanutils/CourseServiceTest.java +++ b/libraries/src/test/java/com/baeldung/commons/beanutils/CourseServiceTest.java @@ -8,31 +8,46 @@ import org.junit.Assert; import org.junit.Test; public class CourseServiceTest { - + @Test public void givenCourse_whenSetValuesUsingPropertyUtil_thenReturnSetValues() - throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { + throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { Course course = new Course(); String name = "Computer Science"; List codes = Arrays.asList("CS", "CS01"); CourseService.setValues(course, name, codes); - + Assert.assertEquals(name, course.getName()); Assert.assertEquals(2, course.getCodes().size()); Assert.assertEquals("CS", course.getCodes().get(0)); - + CourseService.setIndexedValue(course, 1, "CS02"); Assert.assertEquals("CS02", course.getCodes().get(1)); - + Student student = new Student(); String studentName = "Joe"; student.setName(studentName); - + CourseService.setMappedValue(course, "ST-1", student); Assert.assertEquals(student, course.getEnrolledStudent("ST-1")); - + String accessedStudentName = CourseService.getNestedValue(course, "ST-1", "name"); Assert.assertEquals(studentName, accessedStudentName); } + @Test + public void givenCopyProperties_whenCopyCourseToCourseEntity_thenCopyPropertyWithSameName() + throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { + Course course = new Course(); + course.setName("Computer Science"); + course.setCodes(Arrays.asList("CS")); + course.setEnrolledStudent("ST-1", new Student()); + + CourseEntity courseEntity = new CourseEntity(); + + CourseService.copyProperties(course, courseEntity); + Assert.assertEquals(course.getName(), courseEntity.getName()); + Assert.assertEquals(course.getCodes(), courseEntity.getCodes()); + Assert.assertNull(courseEntity.getStudent("ST-1")); + } }