Addrobj unmarshalling adapter

This commit is contained in:
Terekhin Alexander
2020-09-17 14:27:24 +03:00
parent c2a3417f0c
commit 9fae8eb95c
3 changed files with 45 additions and 0 deletions
@@ -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")
@@ -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<Addrobj, UUID> {
public Optional<Addrobj> findByAoguid(UUID aoguid);
}
@@ -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<String, Addrobj> {
@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;
}
}