From 9fae8eb95c9a419ad5783820895805bd94a7f2b9 Mon Sep 17 00:00:00 2001 From: Terekhin Alexander Date: Thu, 17 Sep 2020 14:27:24 +0300 Subject: [PATCH] Addrobj unmarshalling adapter --- .../java/me/bearns/fias/domain/House.java | 3 ++ .../fias/repository/AddrobjRepository.java | 3 ++ .../me/bearns/fias/xml/AddrObjAdapter.java | 39 +++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 src/main/java/me/bearns/fias/xml/AddrObjAdapter.java diff --git a/src/main/java/me/bearns/fias/domain/House.java b/src/main/java/me/bearns/fias/domain/House.java index 20dcd3a..1da27a4 100644 --- a/src/main/java/me/bearns/fias/domain/House.java +++ b/src/main/java/me/bearns/fias/domain/House.java @@ -2,9 +2,11 @@ package me.bearns.fias.domain; import lombok.EqualsAndHashCode; import lombok.ToString; +import me.bearns.fias.xml.AddrObjAdapter; import javax.persistence.*; import javax.xml.bind.annotation.*; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; @@ -45,6 +47,7 @@ public class House implements Serializable { //@Column(name = "aoguid") @ManyToOne(targetEntity = Addrobj.class) @JoinColumn(name = "aoguid", referencedColumnName = "aoguid") + @XmlJavaTypeAdapter(AddrObjAdapter.class) public Addrobj aoguid; //@Type(type="uuid-char") diff --git a/src/main/java/me/bearns/fias/repository/AddrobjRepository.java b/src/main/java/me/bearns/fias/repository/AddrobjRepository.java index cb20818..c828fb0 100644 --- a/src/main/java/me/bearns/fias/repository/AddrobjRepository.java +++ b/src/main/java/me/bearns/fias/repository/AddrobjRepository.java @@ -4,9 +4,12 @@ import me.bearns.fias.domain.Addrobj; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.Optional; import java.util.UUID; @Repository public interface AddrobjRepository extends JpaRepository { + public Optional findByAoguid(UUID aoguid); + } \ No newline at end of file diff --git a/src/main/java/me/bearns/fias/xml/AddrObjAdapter.java b/src/main/java/me/bearns/fias/xml/AddrObjAdapter.java new file mode 100644 index 0000000..54852a7 --- /dev/null +++ b/src/main/java/me/bearns/fias/xml/AddrObjAdapter.java @@ -0,0 +1,39 @@ +package me.bearns.fias.xml; + +import me.bearns.fias.domain.Addrobj; +import me.bearns.fias.repository.AddrobjRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.xml.bind.annotation.adapters.XmlAdapter; +import java.util.Optional; +import java.util.UUID; + +@Component +public class AddrObjAdapter extends XmlAdapter { + + @Autowired + private static AddrobjRepository repository; + + @Override + public Addrobj unmarshal(String v) throws Exception { + + final UUID aoguid = UUID.fromString(v); + final Addrobj addrobj = repository.findByAoguid(aoguid).orElseGet(Addrobj::new); + addrobj.aoguid = aoguid; + + return addrobj; + } + + @Override + public String marshal(Addrobj v) throws Exception { + + if(v!=null){ + final UUID aoguid = v.aoguid; + + if(aoguid!=null) return aoguid.toString(); + } + + return null; + } +}