From 8b1fed0ba9c8858599236c2a7e3979b556a1f98e Mon Sep 17 00:00:00 2001 From: apelanovic Date: Wed, 14 Aug 2024 23:02:17 +0200 Subject: [PATCH 1/2] BAEL-8305 Map iterable to object containing iterable --- .../mapstruct/iterable/DepartmentMapper.java | 30 +++++++++++ .../mapstruct/iterable/model/Department.java | 25 +++++++++ .../mapstruct/iterable/model/Employee.java | 32 ++++++++++++ .../iterable/DepartmentMapperTest.java | 52 +++++++++++++++++++ 4 files changed, 139 insertions(+) create mode 100644 mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/DepartmentMapper.java create mode 100644 mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Department.java create mode 100644 mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Employee.java create mode 100644 mapstruct-2/src/test/java/com/baeldung/mapstruct/iterable/DepartmentMapperTest.java diff --git a/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/DepartmentMapper.java b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/DepartmentMapper.java new file mode 100644 index 000000000000..c9016a2aba13 --- /dev/null +++ b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/DepartmentMapper.java @@ -0,0 +1,30 @@ +package com.baeldung.mapstruct.iterable; + +import java.util.List; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import com.baeldung.mapstruct.iterable.model.Department; +import com.baeldung.mapstruct.iterable.model.Employee; + +@Mapper +public interface DepartmentMapper { + DepartmentMapper INSTANCE = Mappers.getMapper(DepartmentMapper.class); + + // This attempt of mapping causes error, preventing code from compiling + // @Mapping(target = "employees", source = "employees") + // Department map(List employees); + + default Department map(List employees) { + Department department = new Department(); + department.setEmployees(employees); + return department; + } + + @Mapping(target = "employees", source = "employees") + @Mapping(target = "manager", source = "departmentManager") + Department mapWithManager(List employees, Employee departmentManager); + +} diff --git a/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Department.java b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Department.java new file mode 100644 index 000000000000..3ae31c56ba03 --- /dev/null +++ b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Department.java @@ -0,0 +1,25 @@ +package com.baeldung.mapstruct.iterable.model; + +import java.util.List; + +public class Department { + + private List employees; + private Employee manager; + + public List getEmployees() { + return employees; + } + + public void setEmployees(List employees) { + this.employees = employees; + } + + public Employee getManager() { + return manager; + } + + public void setManager(Employee manager) { + this.manager = manager; + } +} diff --git a/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Employee.java b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Employee.java new file mode 100644 index 000000000000..27d3c3bb512d --- /dev/null +++ b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Employee.java @@ -0,0 +1,32 @@ +package com.baeldung.mapstruct.iterable.model; + +public class Employee { + + private String name; + private String phoneNumber; + + public Employee() { + } + + public Employee(String name, String phoneNumber) { + this.name = name; + this.phoneNumber = phoneNumber; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + +} diff --git a/mapstruct-2/src/test/java/com/baeldung/mapstruct/iterable/DepartmentMapperTest.java b/mapstruct-2/src/test/java/com/baeldung/mapstruct/iterable/DepartmentMapperTest.java new file mode 100644 index 000000000000..2e924d0c58a7 --- /dev/null +++ b/mapstruct-2/src/test/java/com/baeldung/mapstruct/iterable/DepartmentMapperTest.java @@ -0,0 +1,52 @@ +package com.baeldung.mapstruct.iterable; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.util.Arrays; +import java.util.List; + +import org.junit.jupiter.api.Test; + +import com.baeldung.mapstruct.iterable.model.Department; +import com.baeldung.mapstruct.iterable.model.Employee; + +public class DepartmentMapperTest { + + private final DepartmentMapper departmentMapper = DepartmentMapper.INSTANCE; + private final List employees = Arrays.asList( + new Employee("John", "(555)1111-1234"), + new Employee("Jane", "(555)2222-4321") + ); + + @Test + public void givenListOfEmployees_whenMapDepartment_thenAssertMappingIsSuccessful() { + Department department = departmentMapper.map(employees); + + assertNotNull(department); + assertNotNull(department.getEmployees()); + assertEquals(employees.size(), department.getEmployees().size()); + assertEquals(employees.get(0).getName(), department.getEmployees().get(0).getName()); + assertEquals(employees.get(0).getPhoneNumber(), department.getEmployees().get(0).getPhoneNumber()); + assertEquals(employees.get(1).getName(), department.getEmployees().get(1).getName()); + assertEquals(employees.get(1).getPhoneNumber(), department.getEmployees().get(1).getPhoneNumber()); + } + + @Test + public void givenListOfEmployeesAndManager_whenMapDepartment_thenAssertMappingIsSuccessful() { + Department department = departmentMapper.mapWithManager(employees, employees.get(0)); + + assertNotNull(department); + assertNotNull(department.getEmployees()); + assertEquals(employees.size(), department.getEmployees().size()); + assertEquals(employees.get(0).getName(), department.getEmployees().get(0).getName()); + assertEquals(employees.get(0).getPhoneNumber(), department.getEmployees().get(0).getPhoneNumber()); + assertEquals(employees.get(1).getName(), department.getEmployees().get(1).getName()); + assertEquals(employees.get(1).getPhoneNumber(), department.getEmployees().get(1).getPhoneNumber()); + + assertNotNull(department.getManager()); + assertEquals(department.getManager().getName(), department.getEmployees().get(0).getName()); + assertEquals(department.getManager().getPhoneNumber(), department.getEmployees().get(0).getPhoneNumber()); + } + +} From 48fb535a94a87acc29268408971e7d8a91ff0d86 Mon Sep 17 00:00:00 2001 From: apelanovic Date: Thu, 22 Aug 2024 09:13:07 +0200 Subject: [PATCH 2/2] BAEL-8305 Minor changes - Resolve MR comments --- .../com/baeldung/mapstruct/iterable/DepartmentMapper.java | 7 +------ .../com/baeldung/mapstruct/iterable/model/Department.java | 2 +- .../com/baeldung/mapstruct/iterable/model/Employee.java | 3 +-- .../baeldung/mapstruct/iterable/DepartmentMapperTest.java | 7 +++---- 4 files changed, 6 insertions(+), 13 deletions(-) diff --git a/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/DepartmentMapper.java b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/DepartmentMapper.java index c9016a2aba13..b822dcf347c9 100644 --- a/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/DepartmentMapper.java +++ b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/DepartmentMapper.java @@ -13,10 +13,6 @@ public interface DepartmentMapper { DepartmentMapper INSTANCE = Mappers.getMapper(DepartmentMapper.class); - // This attempt of mapping causes error, preventing code from compiling - // @Mapping(target = "employees", source = "employees") - // Department map(List employees); - default Department map(List employees) { Department department = new Department(); department.setEmployees(employees); @@ -26,5 +22,4 @@ default Department map(List employees) { @Mapping(target = "employees", source = "employees") @Mapping(target = "manager", source = "departmentManager") Department mapWithManager(List employees, Employee departmentManager); - -} +} \ No newline at end of file diff --git a/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Department.java b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Department.java index 3ae31c56ba03..17c871c3e873 100644 --- a/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Department.java +++ b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Department.java @@ -22,4 +22,4 @@ public Employee getManager() { public void setManager(Employee manager) { this.manager = manager; } -} +} \ No newline at end of file diff --git a/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Employee.java b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Employee.java index 27d3c3bb512d..873edd55d424 100644 --- a/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Employee.java +++ b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Employee.java @@ -28,5 +28,4 @@ public String getPhoneNumber() { public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } - -} +} \ No newline at end of file diff --git a/mapstruct-2/src/test/java/com/baeldung/mapstruct/iterable/DepartmentMapperTest.java b/mapstruct-2/src/test/java/com/baeldung/mapstruct/iterable/DepartmentMapperTest.java index 2e924d0c58a7..e1f116df8a28 100644 --- a/mapstruct-2/src/test/java/com/baeldung/mapstruct/iterable/DepartmentMapperTest.java +++ b/mapstruct-2/src/test/java/com/baeldung/mapstruct/iterable/DepartmentMapperTest.java @@ -20,7 +20,7 @@ public class DepartmentMapperTest { ); @Test - public void givenListOfEmployees_whenMapDepartment_thenAssertMappingIsSuccessful() { + void givenListOfEmployees_whenMapDepartment_thenAssertMappingIsSuccessful() { Department department = departmentMapper.map(employees); assertNotNull(department); @@ -33,7 +33,7 @@ public void givenListOfEmployees_whenMapDepartment_thenAssertMappingIsSuccessful } @Test - public void givenListOfEmployeesAndManager_whenMapDepartment_thenAssertMappingIsSuccessful() { + void givenListOfEmployeesAndManager_whenMapDepartment_thenAssertMappingIsSuccessful() { Department department = departmentMapper.mapWithManager(employees, employees.get(0)); assertNotNull(department); @@ -48,5 +48,4 @@ public void givenListOfEmployeesAndManager_whenMapDepartment_thenAssertMappingIs assertEquals(department.getManager().getName(), department.getEmployees().get(0).getName()); assertEquals(department.getManager().getPhoneNumber(), department.getEmployees().get(0).getPhoneNumber()); } - -} +} \ No newline at end of file