Compare commits

...

14 Commits

Author SHA1 Message Date
Terekhin Alexandr 7558488fc1 Some fixes, lombok instead of autowired 5 years ago
Terekhin Alexander 9f94469ff1 Rewrite from functional style to simplify code 5 years ago
Terekhin Alexander e7dd1a131e Files in archive order finished 5 years ago
Terekhin Alexander 4ddb56e211 Files in archive order 5 years ago
Terekhin Alexander f3925d267a Unmarshaller hierarhy save 5 years ago
Terekhin Alexander fbd200c8d0 Unmarshaller tests Ok 5 years ago
Terekhin Alexander 5880abc72b Unmarshaller tests Ok 5 years ago
Terekhin Alexander 0e47028087 Add unmarshaller tests 5 years ago
Terekhin Alexander 9fae8eb95c Addrobj unmarshalling adapter 5 years ago
Terekhin Alexander c2a3417f0c Schema test 5 years ago
Terekhin Alexander f166400869 Schema annotaions in code 5 years ago
Terekhin Alexander fbd8d9fc34 Normalize data scheme 5 years ago
Terekhin Alexander 1cc80d9998 fix tests 5 years ago
Terekhin Alexander 3cc7374a30 Resolve some TODOs, change null return based logic to exception based 5 years ago
  1. 7
      src/main/java/me/bearns/fias/config/ApplicationConfig.java
  2. 7
      src/main/java/me/bearns/fias/domain/Addrobj.java
  3. 15
      src/main/java/me/bearns/fias/domain/House.java
  4. 11
      src/main/java/me/bearns/fias/exceptions/RemoteAPIException.java
  5. 21
      src/main/java/me/bearns/fias/helpers/Catalog.java
  6. 1
      src/main/java/me/bearns/fias/helpers/UnmarshallerParameters.java
  7. 63
      src/main/java/me/bearns/fias/helpers/UpdaterImpl.java
  8. 3
      src/main/java/me/bearns/fias/repository/AddrobjRepository.java
  9. 13
      src/main/java/me/bearns/fias/service/FiasUpdater.java
  10. 9
      src/main/java/me/bearns/fias/service/OnlineVersion.java
  11. 44
      src/main/java/me/bearns/fias/service/OnlineVersionImpl.java
  12. 46
      src/main/java/me/bearns/fias/xml/AddrObjAdapter.java
  13. 7
      src/test/java/me/bearns/fias/OnlineVersionsTest.java
  14. 88
      src/test/java/me/bearns/fias/SchemeTest.java
  15. 25
      src/test/java/me/bearns/fias/UpdaterTest.java
  16. 37
      src/test/java/me/bearns/fias/helper/XMLSourceHelper.java
  17. 57
      src/test/java/me/bearns/fias/service/StreamSaverTest.java

@ -1,5 +1,6 @@
package me.bearns.fias.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -21,6 +22,7 @@ import javax.sql.DataSource;
@EnableJpaRepositories("me.bearns.fias.repository")
@EnableTransactionManagement
//@PropertySource(value = "application-{profile}.properties", ignoreResourceNotFound = true)
@Slf4j
class ApplicationConfig {
@Autowired
@ -43,7 +45,10 @@ class ApplicationConfig {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(false); //use liquibase
vendorAdapter.setShowSql(true); //TODO Debug
if(log.isDebugEnabled()) {
log.debug("Enable SQL echo.");
vendorAdapter.setShowSql(true);
}
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);

@ -15,7 +15,6 @@ import java.io.Serializable;
import java.math.BigInteger;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Objects;
import java.util.UUID;
@EqualsAndHashCode
@ -186,15 +185,15 @@ public class Addrobj implements Serializable {
}
public void setEnddate(GregorianCalendar enddate) {
this.enddate = dtf.newXMLGregorianCalendar(enddate);
this.enddate = enddate!= null ? dtf.newXMLGregorianCalendar(enddate) : null;
}
public void setStartdate(GregorianCalendar startdate) {
this.startdate = dtf.newXMLGregorianCalendar(startdate);
this.startdate = startdate != null ? dtf.newXMLGregorianCalendar(startdate) : null;
}
public void setUpdatedate(GregorianCalendar updatedate) {
this.updatedate = dtf.newXMLGregorianCalendar(updatedate);
this.updatedate = updatedate != null ? dtf.newXMLGregorianCalendar(updatedate) : null;
}
public Addrobj aoguid(String aoguid) {

@ -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;
@ -42,8 +44,11 @@ public class House implements Serializable {
//@Type(type="uuid-char")
@XmlAttribute(name = "AOGUID", required = true)
@Column(name = "aoguid")
public UUID aoguid;
//@Column(name = "aoguid")
@ManyToOne(targetEntity = Addrobj.class, cascade = CascadeType.ALL)
@JoinColumn(name = "aoguid", referencedColumnName = "aoguid")
@XmlJavaTypeAdapter(AddrObjAdapter.class)
public Addrobj aoguid;
//@Type(type="uuid-char")
@XmlAttribute(name = "HOUSEGUID", required = true)
@ -96,12 +101,12 @@ public class House implements Serializable {
@XmlAttribute(name = "DIVTYPE", required = true)
protected int divtype;
public House aoguid(String aoguid) {
/* public House aoguid(String aoguid) {
this.aoguid = UUID.fromString(aoguid);
return this;
}
}*/
public void setAoguid(UUID aoguid) {
public void setAoguid(Addrobj aoguid) {
this.aoguid = aoguid;
}

@ -0,0 +1,11 @@
package me.bearns.fias.exceptions;
public class RemoteAPIException extends CommonException{
public RemoteAPIException(Exception e) {
super(e);
}
public RemoteAPIException(String s) {
super(s);
}
}

@ -6,6 +6,7 @@ import me.bearns.fias.domain.House;
import me.bearns.fias.domain.Houses;
import me.bearns.fias.repository.AddrobjRepository;
import me.bearns.fias.repository.HouseRepository;
import me.bearns.fias.xml.AddrObjAdapter;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Component;
@ -25,8 +26,8 @@ public class Catalog {
ADDROBJ_REPOSITORY,
new QName("","Object"),
Addrobj.class,
AddressObjects.class
)
AddressObjects.class,
10)
);
prefixList.add(
new Item(
@ -34,9 +35,12 @@ public class Catalog {
HOUSE_REPOSITORY,
new QName("","House"),
House.class,
Houses.class
)
Houses.class,
20)
);
//init AddrObjAdapter
AddrObjAdapter.setRepository(ADDROBJ_REPOSITORY);
}
public Item getByPrefix(String s){
@ -54,18 +58,20 @@ public class Catalog {
}
public class Item implements UnmarshallerParameters {
private Item(String prefix, JpaRepository repository, QName qName, Class cls, Class parentCls) {
private Item(String prefix, JpaRepository repository, QName qName, Class cls, Class parentCls, int priority) {
this.prefix = prefix;
this.repository = repository;
this.qName = qName;
this.cls = cls;
this.parentCls = parentCls;
this.priority = priority;
}
private final String prefix;
private final JpaRepository repository;
private final QName qName;
private final Class cls;
private final Class parentCls;
private final int priority;
@Override
@ -87,5 +93,10 @@ public class Catalog {
public Class getParentCls() {
return parentCls;
}
@Override
public int getPriority() {
return priority;
}
}
}

@ -9,4 +9,5 @@ public interface UnmarshallerParameters {
public QName getQName();
public Class getCls();
public Class getParentCls();
public int getPriority();
}

@ -1,5 +1,6 @@
package me.bearns.fias.helpers;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.bearns.fias.domain.FiasVersion;
import me.bearns.fias.exceptions.CommonException;
@ -8,7 +9,6 @@ import me.bearns.fias.exceptions.UnzipException;
import me.bearns.fias.repository.FiasVersionRepository;
import me.bearns.fias.service.Downloader;
import me.bearns.fias.service.StreamSaver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@ -16,10 +16,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.function.Predicate;
@ -29,20 +26,16 @@ import org.apache.commons.compress.archivers.zip.ZipFile;
@Slf4j
@Component
@AllArgsConstructor
public class UpdaterImpl implements UpdateHelper {
@Autowired
private static Downloader fileService;
private Downloader fileService;
@Autowired
private static FiasVersionRepository versions;
private FiasVersionRepository versions;
@Autowired
private static Catalog catalog;
@Autowired
private static StreamSaver unmarshaller;
private Catalog catalog;
private StreamSaver unmarshaller;
//transaction from here
@Transactional(rollbackFor = Exception.class)
@ -105,7 +98,10 @@ public class UpdaterImpl implements UpdateHelper {
}
private void processArchive(File file, Predicate filter) throws CommonException {
//TODO
//AddrObj - first
//House - next
//Other - last
try(final ZipFile zipFile = new ZipFile(file)){
@ -113,6 +109,8 @@ public class UpdaterImpl implements UpdateHelper {
final Enumeration<ZipArchiveEntry> entries = zipFile.getEntries();
SortedMap<UnmarshallerParameters, ZipArchiveEntry> map = new TreeMap<>((l,r) -> r.getPriority() - l.getPriority());
while (entries.hasMoreElements()){
final ZipArchiveEntry entry = entries.nextElement();
@ -123,21 +121,46 @@ public class UpdaterImpl implements UpdateHelper {
final UnmarshallerParameters config = catalog.getByPrefix(name);
if(config!=null) {
try (InputStream is = zipFile.getInputStream(entry)) {
log.debug("Process '{}' in zip", name);
unmarshaller.process(is, config, filter);
}
log.debug("Queue {} for processing", name);
map.put(config, entry);
} else {
log.debug("Skip '{}'", name);
}
}
/* map.forEach(ThrowingBiConsumer.unchecked((config, entry) -> {
try (InputStream is = zipFile.getInputStream(entry)) {
log.debug("Process '{}' in zip", entry.getName());
unmarshaller.process(is, config, filter);
}
}));*/
for (Map.Entry<UnmarshallerParameters, ZipArchiveEntry> next : map.entrySet()) {
final UnmarshallerParameters config = next.getKey();
final ZipArchiveEntry entry = next.getValue();
try (InputStream is = zipFile.getInputStream(entry)) {
log.debug("Process '{}' in zip", entry.getName());
unmarshaller.process(is, config, filter);
}
}
log.debug("Completed Zip file");
} catch (IOException e) {
log.error("IO Unzip Exception");
throw new UnzipException(e);
}
} /*catch (RuntimeException e) {
final Throwable cause = e.getCause();
if(cause instanceof CommonException) {
log.error("Probably unmarshalling exception");
throw (CommonException) cause;
} else {
log.error("Unknown exception occured");
}
}*/
}
}

@ -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);
}

@ -1,5 +1,6 @@
package me.bearns.fias.service;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.bearns.fias.domain.FiasVersion;
import me.bearns.fias.exceptions.CommonException;
@ -12,16 +13,14 @@ import java.util.*;
@Slf4j
@Service
@AllArgsConstructor
public class FiasUpdater implements Updater {
@Autowired
private static FiasVersionRepository versions;
private FiasVersionRepository versions;
@Autowired
private static OnlineVersion clientStub;
private OnlineVersion clientStub;
@Autowired
private static UpdateHelper helper;
private UpdateHelper helper;
@Override
public void update() throws CommonException {
@ -81,6 +80,4 @@ public class FiasUpdater implements Updater {
}
}
}

@ -1,14 +1,17 @@
package me.bearns.fias.service;
import me.bearns.fias.domain.FiasVersion;
import me.bearns.fias.exceptions.RemoteAPIException;
import java.util.List;
public interface OnlineVersion {
long getLastVersionId();
long getLastVersionId() throws RemoteAPIException;
List<FiasVersion> getVersionsAfter(long version);
@lombok.NonNull
List<FiasVersion> getVersionsAfter(long version) throws RemoteAPIException;
List<FiasVersion> getLastVersion();
@lombok.NonNull
List<FiasVersion> getLastVersion() throws RemoteAPIException;
}

@ -2,7 +2,9 @@ package me.bearns.fias.service;
import lombok.AllArgsConstructor;
import me.bearns.fias.domain.FiasVersion;
import me.bearns.fias.exceptions.RemoteAPIException;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
@ -20,33 +22,45 @@ public class OnlineVersionImpl implements OnlineVersion{
RestTemplate client = new RestTemplate();
@Override
public long getLastVersionId() {
public long getLastVersionId() throws RemoteAPIException {
final FiasVersion version = client.getForObject(GET_LAST_FILE_INFO, FiasVersion.class);
final FiasVersion version = request(GET_LAST_FILE_INFO, FiasVersion.class);
if(version != null) return version.getVersionId();
return 0; //todo
return version.getVersionId();
}
@Override
public List<FiasVersion> getVersionsAfter(long version) {
final FiasVersion[] versions = client.getForObject(GET_ALL_FILE_INFO, FiasVersion[].class);
public List<FiasVersion> getVersionsAfter(long version) throws RemoteAPIException {
if(versions != null) {
return Arrays.stream(versions).filter(v -> v.getVersionId() > version).collect(Collectors.toList());
}
final FiasVersion[] versions = request(GET_ALL_FILE_INFO, FiasVersion[].class);
return null; //todo
return Arrays.stream(versions).filter(v -> v.getVersionId() > version).collect(Collectors.toList());
}
@Override
public List<FiasVersion> getLastVersion() {
public List<FiasVersion> getLastVersion() throws RemoteAPIException {
List<FiasVersion> versions = new ArrayList<>();
versions.add(client.getForObject(GET_LAST_FILE_INFO, FiasVersion.class));
final FiasVersion lastFile = request(GET_LAST_FILE_INFO, FiasVersion.class);
versions.add(lastFile);
return versions;
}
return versions; //todo
private <T> T request(final String url, Class<T> responseType) throws RemoteAPIException {
try {
final T result = client.getForObject(url, responseType);
if (result == null) throw new RemoteAPIException("Request to " + url + " return no data.");
return result;
} catch (RestClientException e){
throw new RemoteAPIException(e);
}
}
}

@ -0,0 +1,46 @@
package me.bearns.fias.xml;
import lombok.extern.slf4j.Slf4j;
import me.bearns.fias.domain.Addrobj;
import me.bearns.fias.repository.AddrobjRepository;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import java.util.UUID;
@Slf4j
public class AddrObjAdapter extends XmlAdapter<String, Addrobj> {
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);
if(addrobj.aoid == null) {
addrobj.aoid = aoguid;
addrobj.aoguid = aoguid;
//repository.save(addrobj); //TODO FIX IT
log.warn("AddresObject Entity for UUID {} not found, create new.", v);
}
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;
}
public static void setRepository(AddrobjRepository repo){
if(repository == null) repository = repo;
}
}

@ -1,6 +1,7 @@
package me.bearns.fias;
import me.bearns.fias.domain.FiasVersion;
import me.bearns.fias.exceptions.RemoteAPIException;
import me.bearns.fias.service.OnlineVersion;
import org.junit.Ignore;
import org.junit.runner.RunWith;
@ -21,14 +22,14 @@ public class OnlineVersionsTest {
@Ignore
@Test
public void getLastTest(){
public void getLastTest() throws RemoteAPIException {
final long lastVersionId = client.getLastVersionId();
assert lastVersionId > 0;
}
@Test
public void getAfterTest(){
public void getAfterTest() throws RemoteAPIException {
final long count = 14;
@ -46,7 +47,7 @@ public class OnlineVersionsTest {
}
@Test
public void getLastObjTest(){
public void getLastObjTest() throws RemoteAPIException {
final List<FiasVersion> versions = client.getLastVersion();
assert versions != null;

@ -0,0 +1,88 @@
package me.bearns.fias;
import me.bearns.fias.domain.Addrobj;
import me.bearns.fias.domain.FiasVersion;
import me.bearns.fias.domain.House;
import me.bearns.fias.repository.AddrobjRepository;
import me.bearns.fias.repository.HouseRepository;
import org.junit.Before;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.test.context.ActiveProfiles;
import java.util.Optional;
import java.util.UUID;
import static org.assertj.core.api.Assertions.*;
@ActiveProfiles("test")
@DataJpaTest
public class SchemeTest {
private final UUID aoID = UUID.randomUUID();
private final UUID firstHouseID = UUID.randomUUID();
private final UUID nextHouseID = UUID.randomUUID();
private final String REGION_CODE = "22";
@Autowired
private TestEntityManager entityManager;
@Autowired
private AddrobjRepository addrobjRepository;
@Autowired
private HouseRepository houseRepository;
@Test
public void testSave() {
final Addrobj addrobj = new Addrobj();
addrobj.aoid = aoID;
addrobj.aoguid = aoID;
addrobj.regioncode = REGION_CODE;
final House firstHouse = new House();
firstHouse.houseid = firstHouseID;
firstHouse.houseguid = firstHouseID;
firstHouse.aoguid = addrobj;
final House nextHouse = new House();
nextHouse.houseid = nextHouseID;
nextHouse.houseguid = nextHouseID;
nextHouse.aoguid = addrobj;
entityManager.persist(addrobj);
entityManager.persist(firstHouse);
entityManager.persist(nextHouse);
final Optional<House> firstHouseOpt = houseRepository.findById(firstHouseID);
final Optional<House> nextHouseOpt = houseRepository.findById(nextHouseID);
assertThat(firstHouseOpt.isPresent()).isTrue();
assertThat(nextHouseOpt.isPresent()).isTrue();
final House firstHouseRet = firstHouseOpt.orElse(null);
final House nextHouseRet = nextHouseOpt.orElse(null);
assertThat(firstHouseRet).isNotNull();
assertThat(nextHouseRet).isNotNull();
final Addrobj firstAoguid = firstHouseRet.aoguid;
final Addrobj nextAoguid = nextHouseRet.aoguid;
assertThat(firstAoguid.aoguid).isEqualByComparingTo(nextAoguid.aoguid);
final Optional<Addrobj> addrobjRet = addrobjRepository.findByAoguid(aoID);
assertThat(addrobjRet.isPresent()).isTrue();
final Addrobj retval = addrobjRet.orElse(null);
assertThat(retval).isNotNull();
assertThat(retval.regioncode).isEqualTo(REGION_CODE);
}
}

@ -0,0 +1,25 @@
package me.bearns.fias;
import me.bearns.fias.exceptions.CommonException;
import me.bearns.fias.service.Updater;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;
@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@SpringBootTest
public class UpdaterTest {
@Autowired
Updater service;
@Test
public void integrationTest() throws CommonException {
service.reload(22L);
}
}

@ -0,0 +1,37 @@
package me.bearns.fias.helper;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
public class XMLSourceHelper {
public static InputStream getAOStream() {
final StringBuilder sba = new StringBuilder();
sba.append("<?xml version = \"1.0\" encoding=\"utf-8\"?>")
.append("<AddressObjects>")
.append("<Object AOID=\"7635a901-83d9-4ce5-8472-ff8f31476566\" AOGUID=\"7635a901-83d9-4ce5-8472-ff8f31476566\" PARENTGUID=\"f696b011-8ba9-4059-8e35-aa202e97eb2d\" FORMALNAME=\"Объездная\" SHORTNAME=\"ул\" AOLEVEL=\"7\" REGIONCODE=\"89\" AREACODE=\"006\" AUTOCODE=\"0\" CITYCODE=\"000\" CTARCODE=\"000\" PLACECODE=\"001\" PLANCODE=\"0000\" STREETCODE=\"0045\" EXTRCODE=\"0000\" SEXTCODE=\"000\" PLAINCODE=\"890060000010045\" CODE=\"89006000001004500\" CURRSTATUS=\"0\" ACTSTATUS=\"1\" LIVESTATUS=\"1\" CENTSTATUS=\"0\" OPERSTATUS=\"10\" IFNSFL=\"8901\" IFNSUL=\"8901\" OKATO=\"71166912001\" OKTMO=\"71926412101\" STARTDATE=\"2020-08-25\" ENDDATE=\"2079-06-06\" UPDATEDATE=\"2020-08-27\" DIVTYPE=\"0\"/>")
.append("<Object AOID=\"789843b8-8101-4f72-baa2-aeef3712304a\" AOGUID=\"4f1abc44-1bfb-4c8d-b41b-5544dde1fa38\" PARENTGUID=\"4136d0c1-3ff7-44c0-aa30-fa2e7eb96ef7\" NEXTID=\"dc4fa806-30cb-4b71-a223-3504b8488e77\" FORMALNAME=\"Северное Кольцо\" SHORTNAME=\"ул\" AOLEVEL=\"7\" REGIONCODE=\"89\" AREACODE=\"000\" AUTOCODE=\"0\" CITYCODE=\"006\" CTARCODE=\"000\" PLACECODE=\"000\" PLANCODE=\"0000\" STREETCODE=\"0104\" EXTRCODE=\"0000\" SEXTCODE=\"000\" PLAINCODE=\"890000060000104\" CODE=\"89000006000010401\" CURRSTATUS=\"1\" ACTSTATUS=\"0\" LIVESTATUS=\"0\" CENTSTATUS=\"0\" OPERSTATUS=\"1\" IFNSFL=\"8904\" IFNSUL=\"8904\" OKATO=\"71176000000\" OKTMO=\"71956000\" POSTALCODE=\"629306\" STARTDATE=\"1900-01-01\" ENDDATE=\"2079-06-06\" UPDATEDATE=\"2020-08-27\" DIVTYPE=\"0\"/>")
.append("<Object AOID=\"dc4fa806-30cb-4b71-a223-3504b8488e77\" AOGUID=\"4f1abc44-1bfb-4c8d-b41b-5544dde1fa38\" PARENTGUID=\"4136d0c1-3ff7-44c0-aa30-fa2e7eb96ef7\" PREVID=\"789843b8-8101-4f72-baa2-aeef3712304a\" NEXTID=\"02dd311b-dfff-4e9d-8c65-07b90e4d9001\" FORMALNAME=\"Северное Кольцо\" SHORTNAME=\"ул\" AOLEVEL=\"7\" REGIONCODE=\"89\" AREACODE=\"000\" AUTOCODE=\"0\" CITYCODE=\"006\" CTARCODE=\"000\" PLACECODE=\"000\" PLANCODE=\"0000\" STREETCODE=\"0104\" EXTRCODE=\"0000\" SEXTCODE=\"000\" PLAINCODE=\"890000060000104\" CODE=\"89000006000010400\" CURRSTATUS=\"0\" ACTSTATUS=\"0\" LIVESTATUS=\"0\" CENTSTATUS=\"0\" OPERSTATUS=\"21\" IFNSFL=\"8904\" IFNSUL=\"8904\" OKATO=\"71176000000\" OKTMO=\"71956000\" STARTDATE=\"2015-08-31\" ENDDATE=\"2020-08-25\" UPDATEDATE=\"2020-08-27\" DIVTYPE=\"0\"/>")
.append("<Object AOID=\"02dd311b-dfff-4e9d-8c65-07b90e4d9001\" AOGUID=\"4f1abc44-1bfb-4c8d-b41b-5544dde1fa38\" PARENTGUID=\"4136d0c1-3ff7-44c0-aa30-fa2e7eb96ef7\" PREVID=\"dc4fa806-30cb-4b71-a223-3504b8488e77\" FORMALNAME=\"Северное Кольцо\" SHORTNAME=\"ул\" AOLEVEL=\"7\" REGIONCODE=\"89\" AREACODE=\"000\" AUTOCODE=\"0\" CITYCODE=\"006\" CTARCODE=\"000\" PLACECODE=\"000\" PLANCODE=\"0000\" STREETCODE=\"0104\" EXTRCODE=\"0000\" SEXTCODE=\"000\" PLAINCODE=\"890000060000104\" CODE=\"89000006000010400\" CURRSTATUS=\"0\" ACTSTATUS=\"1\" LIVESTATUS=\"1\" CENTSTATUS=\"0\" OPERSTATUS=\"20\" IFNSFL=\"8904\" IFNSUL=\"8904\" OKATO=\"71176000000\" OKTMO=\"71956000001\" STARTDATE=\"2020-08-25\" ENDDATE=\"2079-06-06\" UPDATEDATE=\"2020-08-27\" DIVTYPE=\"0\"/>")
.append("<Object AOID=\"fe893ae4-db60-4276-9c75-2aa0538a909a\" AOGUID=\"fe893ae4-db60-4276-9c75-2aa0538a909a\" PARENTGUID=\"5cb37760-9ac7-4d35-b3bb-b54e559c0017\" FORMALNAME=\"Капитана Раскина\" SHORTNAME=\"пр-д\" AOLEVEL=\"7\" REGIONCODE=\"91\" AREACODE=\"000\" AUTOCODE=\"0\" CITYCODE=\"001\" CTARCODE=\"000\" PLACECODE=\"000\" PLANCODE=\"0963\" STREETCODE=\"0965\" EXTRCODE=\"0000\" SEXTCODE=\"000\" PLAINCODE=\"910000010000965\" CODE=\"91000001000096500\" CURRSTATUS=\"0\" ACTSTATUS=\"1\" LIVESTATUS=\"1\" CENTSTATUS=\"0\" OPERSTATUS=\"10\" IFNSFL=\"9111\" IFNSUL=\"9111\" OKATO=\"35412000000\" OKTMO=\"35715000001\" STARTDATE=\"2020-08-25\" ENDDATE=\"2079-06-06\" UPDATEDATE=\"2020-08-27\" DIVTYPE=\"0\"/>")
.append("</AddressObjects>");
return new ByteArrayInputStream(sba.toString().getBytes());
}
public static InputStream getHouseStream() {
final StringBuilder sbh = new StringBuilder();
sbh.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>")
.append("<Houses>")
.append("<House HOUSEID=\"67774cf4-f7e5-425c-9ab1-474e835dda74\" HOUSEGUID=\"67774cf4-f7e5-425c-9ab1-474e835dda74\" AOGUID=\"f31986b1-d29e-4aa5-aea0-a1e9f261c735\" HOUSENUM=\"108\" STRSTATUS=\"0\" ESTSTATUS=\"2\" STATSTATUS=\"0\" IFNSFL=\"4177\" IFNSUL=\"4177\" TERRIFNSFL=\"4105\" TERRIFNSUL=\"4105\" OKATO=\"30207000021\" OKTMO=\"30607421101\" POSTALCODE=\"684017\" STARTDATE=\"2020-08-28\" ENDDATE=\"2079-06-06\" UPDATEDATE=\"2020-08-29\" COUNTER=\"1\" CADNUM=\"41:05:0101081:2153\" DIVTYPE=\"0\" REGIONCODE=\"41\" />")
.append("<House HOUSEID=\"23b7f431-72f1-47ee-bb1c-6b59a6567490\" HOUSEGUID=\"23b7f431-72f1-47ee-bb1c-6b59a6567490\" AOGUID=\"7e2cb4f7-1f8f-48bf-84a4-07899022f5a7\" HOUSENUM=\"42\" STRSTATUS=\"0\" ESTSTATUS=\"2\" STATSTATUS=\"0\" IFNSFL=\"4177\" IFNSUL=\"4177\" TERRIFNSFL=\"4105\" TERRIFNSUL=\"4105\" OKATO=\"30207554000\" OKTMO=\"30607154051\" POSTALCODE=\"684036\" STARTDATE=\"2020-08-28\" ENDDATE=\"2079-06-06\" UPDATEDATE=\"2020-08-29\" COUNTER=\"32\" DIVTYPE=\"0\" REGIONCODE=\"41\" />")
.append("<House HOUSEID=\"ba1974ff-b056-47eb-b0d6-60eab6a5b122\" HOUSEGUID=\"ba1974ff-b056-47eb-b0d6-60eab6a5b122\" AOGUID=\"f8b60155-e3ba-4d29-8994-5e4be88e8523\" HOUSENUM=\"8а\" STRSTATUS=\"0\" ESTSTATUS=\"2\" STATSTATUS=\"0\" IFNSFL=\"4177\" IFNSUL=\"4177\" TERRIFNSFL=\"4105\" TERRIFNSUL=\"4105\" OKATO=\"30402000000\" OKTMO=\"30607101001\" POSTALCODE=\"684007\" STARTDATE=\"2020-08-27\" ENDDATE=\"2079-06-06\" UPDATEDATE=\"2020-08-29\" COUNTER=\"42\" DIVTYPE=\"0\" REGIONCODE=\"41\" />")
.append("<House HOUSEID=\"3b565d5b-8ca7-460e-9271-0e56723917d7\" HOUSEGUID=\"3b565d5b-8ca7-460e-9271-0e56723917d7\" AOGUID=\"273b6a28-c1c4-4b40-96fa-7a783b0f71ca\" HOUSENUM=\"42\" STRSTATUS=\"0\" ESTSTATUS=\"5\" STATSTATUS=\"0\" IFNSFL=\"4177\" IFNSUL=\"4177\" TERRIFNSFL=\"4105\" TERRIFNSUL=\"4105\" OKATO=\"30207554000\" OKTMO=\"30607154051\" POSTALCODE=\"684036\" STARTDATE=\"2020-08-28\" ENDDATE=\"2079-06-06\" UPDATEDATE=\"2020-08-29\" COUNTER=\"20\" DIVTYPE=\"0\" REGIONCODE=\"41\" />")
.append("<House HOUSEID=\"9a2abe0e-5d39-496d-b442-8ca9588bc775\" HOUSEGUID=\"9a2abe0e-5d39-496d-b442-8ca9588bc775\" AOGUID=\"72f96554-fc02-48ed-a7ad-b1f807f4d99a\" HOUSENUM=\"9\" STRSTATUS=\"0\" ESTSTATUS=\"2\" STATSTATUS=\"0\" IFNSFL=\"4177\" IFNSUL=\"4177\" TERRIFNSFL=\"4105\" TERRIFNSUL=\"4105\" OKATO=\"30402000000\" OKTMO=\"30607101001\" POSTALCODE=\"684000\" STARTDATE=\"2020-08-27\" ENDDATE=\"2079-06-06\" UPDATEDATE=\"2020-08-29\" COUNTER=\"4\" DIVTYPE=\"0\" REGIONCODE=\"41\" />")
.append("</Houses>");
return new ByteArrayInputStream(sbh.toString().getBytes());
}
}

@ -0,0 +1,57 @@
package me.bearns.fias.service;
import me.bearns.fias.exceptions.CommonException;
import me.bearns.fias.helper.XMLSourceHelper;
import me.bearns.fias.helpers.Catalog;
import me.bearns.fias.helpers.UnmarshallerParameters;
import me.bearns.fias.helpers.UpdateHelper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.InputStream;
@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@SpringBootTest
public class StreamSaverTest {
private static final String AO_FILENAME = "AS_ADDROBJ_20200903_b02fb98f-354f-4ed4-af2f-467c5789989f.XML";
private static final String HOUSE_FILENAME = "AS_HOUSE_20200903_f7ab498f-1f85-4d80-8254-349399de9460.XML";
@Autowired
private StreamSaver service;
@Autowired
private Catalog catalog;
@Autowired
private UpdateHelper helper;
@Test
public void addrobjTest() throws CommonException {
final UnmarshallerParameters config = catalog.getByPrefix(AO_FILENAME);
final InputStream stream = XMLSourceHelper.getAOStream();
service.process(stream, config, null);
}
@Test
public void houseTest() throws CommonException {
final UnmarshallerParameters config = catalog.getByPrefix(HOUSE_FILENAME);
final InputStream stream = XMLSourceHelper.getHouseStream();
service.process(stream, config, null);
}
}
Loading…
Cancel
Save