From 0b7ceebb66b6b00f83619923881d1c5ef687aca4 Mon Sep 17 00:00:00 2001 From: "anilkivilcim.eray" Date: Sun, 18 Aug 2019 20:02:31 +0300 Subject: [PATCH] BAEL-3097 init for mapstruct custom mapping method --- .../main/java/com/baeldung/dto/UrlDTO.java | 11 ++++++ .../java/com/baeldung/entity/UrlObject.java | 11 ++++++ .../com/baeldung/mapper/SuffixRemover.java | 13 +++++++ .../java/com/baeldung/mapper/UrlMapper.java | 34 +++++++++++++++++++ .../com/baeldung/mapper/UrlMapperTest.java | 22 ++++++++++++ 5 files changed, 91 insertions(+) create mode 100644 mapstruct/src/main/java/com/baeldung/dto/UrlDTO.java create mode 100644 mapstruct/src/main/java/com/baeldung/entity/UrlObject.java create mode 100644 mapstruct/src/main/java/com/baeldung/mapper/SuffixRemover.java create mode 100644 mapstruct/src/main/java/com/baeldung/mapper/UrlMapper.java create mode 100644 mapstruct/src/test/java/com/baeldung/mapper/UrlMapperTest.java diff --git a/mapstruct/src/main/java/com/baeldung/dto/UrlDTO.java b/mapstruct/src/main/java/com/baeldung/dto/UrlDTO.java new file mode 100644 index 0000000000..405473bbd1 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/dto/UrlDTO.java @@ -0,0 +1,11 @@ +package com.baeldung.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class UrlDTO { + private String url; + private String subUrl; +} \ No newline at end of file diff --git a/mapstruct/src/main/java/com/baeldung/entity/UrlObject.java b/mapstruct/src/main/java/com/baeldung/entity/UrlObject.java new file mode 100644 index 0000000000..ceded9e18e --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/entity/UrlObject.java @@ -0,0 +1,11 @@ +package com.baeldung.entity; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class UrlObject { + private String url; + private String subUrl; +} \ No newline at end of file diff --git a/mapstruct/src/main/java/com/baeldung/mapper/SuffixRemover.java b/mapstruct/src/main/java/com/baeldung/mapper/SuffixRemover.java new file mode 100644 index 0000000000..3db963b0e3 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapper/SuffixRemover.java @@ -0,0 +1,13 @@ +package com.baeldung.mapper; + +import org.mapstruct.Qualifier; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Qualifier +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.CLASS) +public @interface SuffixRemover {} diff --git a/mapstruct/src/main/java/com/baeldung/mapper/UrlMapper.java b/mapstruct/src/main/java/com/baeldung/mapper/UrlMapper.java new file mode 100644 index 0000000000..b92c134bde --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapper/UrlMapper.java @@ -0,0 +1,34 @@ +package com.baeldung.mapper; + +import com.baeldung.dto.UrlDTO; +import com.baeldung.entity.UrlObject; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Named; +import org.mapstruct.factory.Mappers; + +import java.net.URI; +import java.net.URISyntaxException; + +@Mapper +public interface UrlMapper { + + UrlMapper INSTANCE = Mappers.getMapper(UrlMapper.class); + + + @Mapping(source = "subUrl", target = "subUrl", qualifiedByName = "protocolRemover") + @Mapping(source = "url", target = "url", qualifiedBy = SuffixRemover.class) + public UrlObject urlObjectDomainMapper(UrlDTO urlDTO); + + @Named("protocolRemover") + public static String protocolRemoverWithCustomMethod(String domain) throws URISyntaxException { + URI uri = new URI(domain); + return uri.getHost(); + } + + @SuffixRemover + public static String protocolRemoverMethod(String domain) throws URISyntaxException { + URI uri = new URI(domain); + return uri.getHost(); + } +} \ No newline at end of file diff --git a/mapstruct/src/test/java/com/baeldung/mapper/UrlMapperTest.java b/mapstruct/src/test/java/com/baeldung/mapper/UrlMapperTest.java new file mode 100644 index 0000000000..1bb0ebcf0c --- /dev/null +++ b/mapstruct/src/test/java/com/baeldung/mapper/UrlMapperTest.java @@ -0,0 +1,22 @@ +package com.baeldung.mapper; + +import com.baeldung.dto.UrlDTO; +import com.baeldung.entity.UrlObject; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class UrlMapperTest { + + @Test + public void givenDomains_whenCallDomainMapper_thenReturnDomainsWithoutProtocols() { + UrlDTO dto = new UrlDTO(); + dto.setUrl("http://www.baeldung.com"); + dto.setSubUrl("https://www.baeldung.com"); + + UrlObject urlObject = UrlMapper.INSTANCE.urlObjectDomainMapper(dto); + + assertEquals(urlObject.getUrl(), "www.baeldung.com"); + assertEquals(urlObject.getSubUrl(), "www.baeldung.com"); + } +} \ No newline at end of file