From 7f7fd337a7c8fb187c6c66f9ffb40fba080255a8 Mon Sep 17 00:00:00 2001 From: Nivedan Bamal <50937743+Nivedan-Bamal@users.noreply.github.com> Date: Thu, 8 Aug 2019 01:38:03 -0400 Subject: [PATCH] Adds after / before mapping example (#7518) --- .../main/java/com/baeldung/dto/CarDTO.java | 1 + .../main/java/com/baeldung/dto/FuelType.java | 5 +++ .../com/baeldung/entity/BioDieselCar.java | 4 ++ .../java/com/baeldung/entity/ElectricCar.java | 4 ++ .../java/com/baeldung/mapper/CarsMapper.java | 32 ++++++++++++++ .../baeldung/mapper/CarsMapperUnitTest.java | 42 +++++++++++++++++++ 6 files changed, 88 insertions(+) create mode 100644 mapstruct/src/main/java/com/baeldung/dto/FuelType.java create mode 100644 mapstruct/src/main/java/com/baeldung/entity/BioDieselCar.java create mode 100644 mapstruct/src/main/java/com/baeldung/entity/ElectricCar.java create mode 100644 mapstruct/src/main/java/com/baeldung/mapper/CarsMapper.java create mode 100644 mapstruct/src/test/java/com/baeldung/mapper/CarsMapperUnitTest.java diff --git a/mapstruct/src/main/java/com/baeldung/dto/CarDTO.java b/mapstruct/src/main/java/com/baeldung/dto/CarDTO.java index 51aa8ccac2..98aefcb971 100644 --- a/mapstruct/src/main/java/com/baeldung/dto/CarDTO.java +++ b/mapstruct/src/main/java/com/baeldung/dto/CarDTO.java @@ -8,4 +8,5 @@ import lombok.Setter; public class CarDTO { private int id; private String name; + private FuelType fuelType; } diff --git a/mapstruct/src/main/java/com/baeldung/dto/FuelType.java b/mapstruct/src/main/java/com/baeldung/dto/FuelType.java new file mode 100644 index 0000000000..88692884ad --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/dto/FuelType.java @@ -0,0 +1,5 @@ +package com.baeldung.dto; + +public enum FuelType { + ELECTRIC, BIO_DIESEL +} diff --git a/mapstruct/src/main/java/com/baeldung/entity/BioDieselCar.java b/mapstruct/src/main/java/com/baeldung/entity/BioDieselCar.java new file mode 100644 index 0000000000..3f868c10a7 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/entity/BioDieselCar.java @@ -0,0 +1,4 @@ +package com.baeldung.entity; + +public class BioDieselCar extends Car { +} diff --git a/mapstruct/src/main/java/com/baeldung/entity/ElectricCar.java b/mapstruct/src/main/java/com/baeldung/entity/ElectricCar.java new file mode 100644 index 0000000000..9b780a244e --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/entity/ElectricCar.java @@ -0,0 +1,4 @@ +package com.baeldung.entity; + +public class ElectricCar extends Car { +} diff --git a/mapstruct/src/main/java/com/baeldung/mapper/CarsMapper.java b/mapstruct/src/main/java/com/baeldung/mapper/CarsMapper.java new file mode 100644 index 0000000000..430aef1440 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapper/CarsMapper.java @@ -0,0 +1,32 @@ +package com.baeldung.mapper; + +import org.mapstruct.AfterMapping; +import org.mapstruct.BeforeMapping; +import org.mapstruct.Mapper; +import org.mapstruct.MappingTarget; + +import com.baeldung.dto.CarDTO; +import com.baeldung.dto.FuelType; +import com.baeldung.entity.BioDieselCar; +import com.baeldung.entity.Car; +import com.baeldung.entity.ElectricCar; + +@Mapper +public abstract class CarsMapper { + + @BeforeMapping + protected void enrichDTOWithFuelType(Car car, @MappingTarget CarDTO carDto) { + if (car instanceof ElectricCar) + carDto.setFuelType(FuelType.ELECTRIC); + if (car instanceof BioDieselCar) + carDto.setFuelType(FuelType.BIO_DIESEL); + } + + @AfterMapping + protected void convertNameToUpperCase(@MappingTarget CarDTO carDto) { + carDto.setName(carDto.getName().toUpperCase()); + } + + public abstract CarDTO toCarDto(Car car); + +} diff --git a/mapstruct/src/test/java/com/baeldung/mapper/CarsMapperUnitTest.java b/mapstruct/src/test/java/com/baeldung/mapper/CarsMapperUnitTest.java new file mode 100644 index 0000000000..e729e1a2d0 --- /dev/null +++ b/mapstruct/src/test/java/com/baeldung/mapper/CarsMapperUnitTest.java @@ -0,0 +1,42 @@ +package com.baeldung.mapper; + +import static org.junit.Assert.assertEquals; + +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; + +import com.baeldung.dto.CarDTO; +import com.baeldung.dto.FuelType; +import com.baeldung.entity.BioDieselCar; +import com.baeldung.entity.Car; +import com.baeldung.entity.ElectricCar; + +class CarsMapperUnitTest { + + private CarsMapper sut = Mappers.getMapper(CarsMapper.class); + + @Test + void testGivenSubTypeElectric_mapsModifiedFieldsToSuperTypeDto_whenBeforeAndAfterMappingMethodscarCalled() { + Car car = new ElectricCar(); + car.setId(12); + car.setName("Tesla_Model_C"); + + CarDTO carDto = sut.toCarDto(car); + + assertEquals("TESLA_MODEL_C", carDto.getName()); + assertEquals(FuelType.ELECTRIC, carDto.getFuelType()); + } + + @Test + void testGivenSubTypeBioDiesel_mapsModifiedFieldsToSuperTypeDto_whenBeforeAndAfterMappingMethodscarCalled() { + Car car = new BioDieselCar(); + car.setId(11); + car.setName("Tesla_Model_X"); + + CarDTO carDto = sut.toCarDto(car); + + assertEquals("TESLA_MODEL_X", carDto.getName()); + assertEquals(FuelType.BIO_DIESEL, carDto.getFuelType()); + } + +}