Compare commits
14 Commits
apache_com
...
master
Author | SHA1 | Date |
---|---|---|
|
7558488fc1 | 5 years ago |
![]() |
9f94469ff1 | 5 years ago |
![]() |
e7dd1a131e | 5 years ago |
![]() |
4ddb56e211 | 5 years ago |
![]() |
f3925d267a | 5 years ago |
![]() |
fbd200c8d0 | 5 years ago |
![]() |
5880abc72b | 5 years ago |
![]() |
0e47028087 | 5 years ago |
![]() |
9fae8eb95c | 5 years ago |
![]() |
c2a3417f0c | 5 years ago |
![]() |
f166400869 | 5 years ago |
![]() |
fbd8d9fc34 | 5 years ago |
![]() |
1cc80d9998 | 5 years ago |
![]() |
3cc7374a30 | 5 years ago |
@ -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); |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
|
@ -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; |
||||
} |
||||
} |
@ -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…
Reference in new issue