package com.gisgraphy.importer;
import static com.gisgraphy.fulltext.Constants.ONLY_CITY_PLACETYPE;
import static com.gisgraphy.importer.OpenStreetMapCitiesSimpleImporter.DEFAUL_OUTPUT_STYLE;
import static com.gisgraphy.test.GisgraphyTestHelper.alternateNameContains;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.test.context.web.WebAppConfiguration;
import com.gisgraphy.domain.geoloc.entity.Adm;
import com.gisgraphy.domain.geoloc.entity.AlternateName;
import com.gisgraphy.domain.geoloc.entity.City;
import com.gisgraphy.domain.geoloc.entity.CitySubdivision;
import com.gisgraphy.domain.geoloc.entity.GisFeature;
import com.gisgraphy.domain.geoloc.entity.ZipCode;
import com.gisgraphy.domain.repository.CitySubdivisionDao;
import com.gisgraphy.domain.repository.IAdmDao;
import com.gisgraphy.domain.repository.ICityDao;
import com.gisgraphy.domain.repository.ICitySubdivisionDao;
import com.gisgraphy.domain.repository.IGisFeatureDao;
import com.gisgraphy.domain.repository.IIdGenerator;
import com.gisgraphy.domain.valueobject.AlternateNameSource;
import com.gisgraphy.domain.valueobject.GISSource;
import com.gisgraphy.domain.valueobject.Pagination;
import com.gisgraphy.fulltext.Constants;
import com.gisgraphy.fulltext.FulltextQuery;
import com.gisgraphy.fulltext.FulltextQuerySolrHelper;
import com.gisgraphy.fulltext.FulltextResultsDto;
import com.gisgraphy.fulltext.IFullTextSearchEngine;
import com.gisgraphy.fulltext.SolrResponseDto;
import com.gisgraphy.helper.GeolocHelper;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.Point;
public class OpenStreetMapCitiesSimpleImporterTest {
LabelGenerator generator = LabelGenerator.getInstance();
@Test
public void testNoName(){
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter();
ICityDao cityDao = EasyMock.createMock(ICityDao.class);
EasyMock.replay(cityDao);
importer.setCityDao(cityDao);
IIdGenerator idGenerator = EasyMock.createMock(IIdGenerator.class);
EasyMock.replay(idGenerator);
importer.setIdGenerator(idGenerator);
IAdmDao admDao = EasyMock.createMock(IAdmDao.class);
EasyMock.replay(admDao);
importer.setAdmDao(admDao);
importer.setMunicipalityDetector(new MunicipalityDetector());
String line= "R\t6530243\t3009735615\t\tPL\t28-210\t28-2101\t8\t1000000\t0101000020E6100000D13BC9B91361354030E055AC9D524940\t0101000020E6100000DE7C7E73DA603540ACFF18DFBC524940\t0106000020E610000001000000010300000001000000D20000008D8F60F4265C35401215AA9B8B524940D2C5A695425C35401598A9A4A9524940A367695D595C3540A06B0487BC524940A1C211A4525C35408BC3995FCD52494005543882545C35403A9270C6D55249401950148D5A5C35405551BCCADA52494088FC8E3C6B5C3540EDA17DACE05249401C2ECD08CA5C35408B1D8D43FD524940627B7775D85C35400F8DDDF41D534940ACD09BE50D5D35407961C66F6553494017F2ADB4315D3540B0027CB779534940FDA6B052415D35402569ED6C7E534940DF910C946F5D3540D998D71187534940E861B2028D5D3540A0F76B578D5349400E349F73B75D35402D4D00B49C534940BD53A63DCA5D35403B9AD99DA4534940C4DD0F2ED35D3540611514ABAB534940608033E7CF5D35406009A4C4AE534940D2D0F533AB5D3540A46F777BB553494044499231885D35400D09CECFC3534940F17096ED9E5D35409378D4F3C95349400D82D8E3CF5D354003452C62D8534940137DE310165E3540708912E3EB534940E68931FA1B5E354035B91803EB5349404A21DAD8365E3540CBF4F00AE9534940A8261CD5445E35406CD84A43E8534940ADA92C0ABB5E3540906335A7DC5349400E49D2DAD95E354073840CE4D95349408813984EEB5E354056CDBDD1D85349403DF4DDAD2C5F354077A22424D253494076995077545F3540DF1D19ABCD534940207821C2645F354099BF42E6CA534940C97553CA6B5F354094AC1E8BC85349403F3E213B6F5F354060E74B14C653494025D63D0D735F354037887BD1C35349409FCBD424785F3540CD4D8A45C253494000A13F7E805F35405C6ACE0BC1534940E6F91DD48F5F354021109EBFBF534940262B757FAB5F35406AE27899BC534940FA88F3CBBB5F35402AB7A3EEB95349409C487A62E75F3540E285634CB053494074FB9B06FB5F35405B80B6D5AC534940ADD6D3580C603540CD898741AA5349403667333D17603540754AF6BEA75349400B0BEE073C6035406759411DA0534940241D2FEE50603540B2097AB99953494051FD8348866035402E89FDAF845349402B3D2E05FF60354042E1FD028B534940853EFD0C146135403B600D068D534940BAF8DB9E20613540031544937A53494013B46E28216135405334C5D276534940B226BB3E18613540D6C7E8256B5349404BD05FE81161354019EEB7D15B534940A627D1370E613540150FDE0D58534940DFB4CF1907613540ACB24A44535349403D409C2C5A6135406DAA93D85A534940396403E9626135408EF5C3BE535349403E44A33B886135401B5C847357534940A98B14CAC261354071B77FC05E534940B92869B40B623540FD4E93196F534940BECE3C6F196235403D8ED59C7253494099C51FA056623540006201028C53494054DB977D68623540014F5AB8AC534940E9894226746235408AB3226AA2534940D00B772E8C6235403444BA449A5349400A078C3F9B623540F5A85379965349403F3A75E5B3623540A176AEDE97534940F862DE99BF623540B39F200C97534940010BAA57DB6235405000C5C892534940E72F3E16EC62354075F684DB905349404ABD022C4D6335406BCA04B28D534940F11879B4CC6335402E7590D7835349400B8EDCE4016435401AADFE637C534940CCAEC5B82C6435401F1906877253494039FC242D4B643540B6EA84E16D534940878494449B643540513640C461534940D3DA34B6D7643540D788601C5C5349403A4B7FE5F7643540F1C2312658534940B0A1E58A9C6535402B02F797385349404E6D5FF6A16535405559CAE8365349403316F2ADB4653540408E41823D534940F27794EFBE65354032A0CD60425349407843BF5BC56535402C3FBA224253494099B21D9D0466354059B1AEC046534940090FE4EA11663540E99FE06245534940A6E5513B0D66354031105F81435349408D43A275F9653540CAF500272553494054E17437F4653540C586B883225349404721C9ACDE653540D917BFDF1E5349409FFBBCF3D5653540F3F56BA11A53494011CE0248C8653540FF44C07C0D534940A4A60293C0653540CB6548BA0B53494090B81160A26535401332EB200A5349407AC7293A92653540EF6F75A50A534940100BB5A67965354085C5F2F8075349408ACFF819726535400243FBFD07534940FF20376854653540F42334380053494087FBC8AD49653540A7A091BEFF5249400F5A59EC4065354038C30DF8FC52494048A41243176535403ABB1006F95249400BFB2C85F66435401FA0A0B9F35249407C09BA62EB643540A3B83E07F1524940D42B6519E2643540166C239EEC524940607AFB73D164354022B53F06E152494044CCDBC7C0643540A244F064DC524940856A3986B6643540A2A64C20DB524940B7B585E7A56435407707C25FDD524940F5F34B69A2643540963A1279DC5249406A60F591A5643540B25879B8D352494026E9F582AA643540095B47B0CC524940DAE9077591643540543651F0B952494023FCE659A46435409728D604AC524940CA75AE83DE643540B7AC0CF49A5249408C50C7BEBF643540E3395B406852494032074147AB64354071975874465249406EC905C2A96435402CC9F08E42524940E78CCD339B6435402EC1F39C3E5249407E9D8A0A8B64354077514F7A3A52494004FE953A6D6435401CF1643733524940B8B475CB696435408D7E349C325249407CF2B0506B6435409AEA6E4331524940629E3AFB6F64354034958FEE31524940F455F2B1BB643540E133C813F7514940C830822106653540058D9944BD514940C474C69C0C6535404D3F975FBC5149402CC6AF0E366535409768DA0FC2514940BF3D192D51653540E435AFEAAC514940134A5F0839653540D85F1B96AB51494060483DFA15653540EF0802BFA15149402199695611653540D4A5DA029D5149405041D9EFE4643540A1A4C00298514940BC88A53792643540C9E0720690514940AB17320D79643540B96D84EA8B514940CDEF8F5264643540DFDF450488514940231A38FB5E6435400FAC996B875149405E4E0988496435403D6304F97E5149405EE3E94B2564354005DF347D7651494069B57691F8633540B5B002D7705149401E3B037EE86335401808A7AA7551494069554B3ACA6335403F16478A6D514940667330F6B96335408D6BD7DF6D514940D2883EC4AB633540CABD0A3A6B514940BBF083F3A9633540384D9F1D70514940381D5C959F6335405C7FA6B97051494041F273E899633540F629C764715149400FA1A5869163354066F3DD5273514940D451691F8663354007D1FF1774514940575B56067A6335404E6958E7735149408089D3A46F633540F551A11573514940C637143E5B6335401577BCC96F5149409C3F5C284F63354027E8E5666E514940F243A511336335406F6CD15D6D514940074E6CF4206335406FAE505A6E5149402D184B47EF623540BB59CD84705149409E5A22BCE26235402033ABD2715149401EE7919AD1623540596DFE5F75514940C2E2CB9FCA6235405F865A2E76514940B27AD168BC623540FBB2B453735149409EFAF664B462354007A925677251494080208A13A9623540194229B5725149402E2526039B62354013F5824F73514940EA735A5C886235406C54F190735149407AD44E8358623540A38790A971514940D204E51137623540E53AD7416F5149405D55F65D11623540BCA7BC676E5149405889C3E3EC61354028DAB0016C5149406C73AD07DD61354059AC3CDC69514940ACE23213B161354052F4C0C7605149405DEB41F79B613540185E49F25C514940027C5CC070613540B60CDD91565149409838F24064613540A04C4810535149402ADDA7F45D613540E2B19FC55251494058772CB649613540065A70F552514940122A82493B613540E9EAD8525151494071B9B0242F613540B4F7F3B74E5149409923754C2761354079831E204E514940687682A21E6135406D1D1CEC4D514940085C57CC086135408AFC44AF505149407039A80E03613540E3FF8EA8505149404BCADDE7F86035404983802150514940A9195245F160354067A263624E514940CC762A85E5603540DF4EC7084D5149406BFDE373DD603540321F10E84C514940D662A6A3D2603540A97D84AB4D514940C64263DCC36035405B6A73524E514940447BAB64B6603540AF68CE554E514940F6C07DD3AA603540FD6772D64C51494027A435069D603540B573F5BE4C514940BA1798158A603540DFF2A2C04C514940F3B803D083603540B088AB144C5149402418BD0974603540E659EE714B514940DB1C42F053603540637BD22E4B5149404F18DEF64E6035405EAA2DD049514940F76A91FEA85F3540FA08A12875514940FEB1B5638F5F354096D39E92735149400C10BBA58B5F354010536C1679514940338001CE9C5F3540E4141DC9E551494061C9552C7E5F35402588A9E3E751494011FFB0A5475F35406FC5596CEE5149404CCD7921785F35400E198F52095249403561FBC9185F3540C613E6E2145249407514D67C4B5F3540F5835F8F2E52494012C9EB1C5E5F35408E90268348524940307777AE395F3540A5B84F33495249402E4F31186D5D3540E0F8DA334B52494071F55267A45C3540991E03684A52494070795160A65C354017FE672849524940A084E3439A5C35404654F2FB48524940CD76853E585C3540C14A4FA26F5249408D8F60F4265C35401215AA9B8B524940\tvillage\tis in foobar\tpowiat staszowski___6___2635574___województwo świętokrzyskie___4___130914___gmina Bogoria___7___2963727\t\"{\"\"\"\",name:genitive===Pełczyczyc___name:adjective===pełczycki}\"";
importer.processData(line);
EasyMock.verify(cityDao);
EasyMock.verify(admDao);
EasyMock.verify(idGenerator);
}
@Test
public void parsePopulation(){
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter();
Assert.assertEquals(5000,importer.parsePopulation("5000"));
Assert.assertEquals(5000,importer.parsePopulation("5 000"));
Assert.assertEquals(5000,importer.parsePopulation("5,000"));
}
@Test
public void populatezip(){
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter();
City city = new City();
importer.populateZip("23456", city);
Assert.assertEquals(1,city.getZipCodes().size());
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("23456")));
city = new City();
importer.populateZip("23456,789", city);
Assert.assertEquals(2,city.getZipCodes().size());
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("23456")));
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("789")));
city = new City();
importer.populateZip("23456|789", city);
Assert.assertEquals(2,city.getZipCodes().size());
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("23456")));
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("789")));
city = new City();
importer.populateZip("23456;789", city);
Assert.assertEquals(2,city.getZipCodes().size());
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("23456")));
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("789")));
city = new City();
importer.populateZip("23456;789;", city);
Assert.assertEquals(2,city.getZipCodes().size());
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("23456")));
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("789")));
//test cumulative and deduplicate
city = new City();
importer.populateZip("23456;789;", city);
importer.populateZip("1011;12;789;75009 cedex", city);
//12 is too short and cedex is not a code we wish to import
Assert.assertEquals(3,city.getZipCodes().size());
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("23456")));
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("789")));
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("1011")));
}
@Test
public void populatezip_duplicate(){
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter();
City city = new City();
city.addZipCode(new ZipCode("23456"));
importer.populateZip("23456,789", city);
Assert.assertEquals(2,city.getZipCodes().size());
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("23456")));
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("789")));
}
@Test
public void createNewCity() {
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter();
IIdGenerator idGenerator = EasyMock.createMock(IIdGenerator.class);
EasyMock.expect(idGenerator.getNextFeatureId()).andReturn(1234L);
EasyMock.replay(idGenerator);
importer.setIdGenerator(idGenerator);
importer.idGenerator= idGenerator;
Point location = GeolocHelper.createPoint(3D, 2D);
Point locationAdminCentre = GeolocHelper.createPoint(4D, 8D);
City actual = importer.createNewCity("name","FR",location ,locationAdminCentre);
Assert.assertEquals(GISSource.OSM, actual.getSource());
Assert.assertEquals(1234L, actual.getFeatureId().longValue());
Assert.assertEquals("name", actual.getName());
Assert.assertEquals("FR", actual.getCountryCode());
Assert.assertEquals(location, actual.getLocation());
Assert.assertEquals(locationAdminCentre, actual.getAdminCentreLocation());
}
@Test
public void createNewPoi() {
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter();
IIdGenerator idGenerator = EasyMock.createMock(IIdGenerator.class);
EasyMock.expect(idGenerator.getNextFeatureId()).andReturn(1234L);
EasyMock.replay(idGenerator);
importer.setIdGenerator(idGenerator);
importer.idGenerator= idGenerator;
Point location = GeolocHelper.createPoint(3D, 2D);
Point locationAdminCentre = GeolocHelper.createPoint(4D, 8D);
GisFeature actual = importer.createNewPoi("name","FR",location ,locationAdminCentre);
Assert.assertEquals(GISSource.OSM, actual.getSource());
Assert.assertEquals(1234L, actual.getFeatureId().longValue());
Assert.assertEquals("name", actual.getName());
Assert.assertEquals("FR", actual.getCountryCode());
Assert.assertEquals(location, actual.getLocation());
Assert.assertEquals(locationAdminCentre, actual.getAdminCentreLocation());
}
@Test
public void populateAlternateNames() {
String RawAlternateNames="";
GisFeature poi = new GisFeature();
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter();
RawAlternateNames ="\"{\"\"\"\",name:genitive===Pełczyczyc___short_name===pełczycki}\"";
poi = new GisFeature();
poi = importer.populateAlternateNames(poi, RawAlternateNames);
Assert.assertEquals(2,poi.getAlternateNames().size());
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Pełczyczyc","GENITIVE"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"pełczycki",null));
RawAlternateNames="\"{\"\"name:af===Parys t___name:am===ፓሪስ___name:an===París___alt_name:fr===Париж\"\"}\"";
//RawAlternateNames ="\"{\"\"name:ca===Sant Andreu de Sueda___name:fr===Saint-André___name:oc===Sant Andreu de Sueda\"\",\"\"name:ca===Sant Andreu de Sueda___name:oc===Sant Andreu de Sueda\"\"}\"";
poi = new GisFeature();
poi = importer.populateAlternateNames(poi, RawAlternateNames);
Assert.assertEquals(4, poi.getAlternateNames().size());
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Parys t","AF"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"ፓሪስ","AM"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"París","AN"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Париж","FR"));
Iterator<AlternateName> iterator = poi.getAlternateNames().iterator();
while (iterator.hasNext()){
Assert.assertEquals(AlternateNameSource.OPENSTREETMAP,iterator.next().getSource());
}
RawAlternateNames ="\"{\"\"\"\"}\"";
poi = new GisFeature();
poi = importer.populateAlternateNames(poi, RawAlternateNames);
Assert.assertNull(poi.getAlternateNames());
RawAlternateNames ="\"{\"\"\"\",name:genitive===Pełczyczyc___name:adjective===pełczycki}\"";
poi = new GisFeature();
poi = importer.populateAlternateNames(poi, RawAlternateNames);
Assert.assertEquals(2,poi.getAlternateNames().size());
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Pełczyczyc","GENITIVE"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"pełczycki","ADJECTIVE"));
//w comma, one duplicate w same name and one with different for the same lang
RawAlternateNames ="{name:CA===Argelers___name:fr===Argelès-sur-Mer___name:oc===Argelersoc,name:ca===Argelers___name:oc===Argelers}";
poi = new GisFeature();
poi = importer.populateAlternateNames(poi, RawAlternateNames);
Assert.assertEquals(4,poi.getAlternateNames().size());
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelers","CA"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelès-sur-Mer","FR"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelersoc","OC"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelers","OC"));
RawAlternateNames ="{name:CA===Argelers___name:fr===Argelès-sur-Mer___name:oc===Argelersoc1,Argelersoc2,name:ca===Argelers___name:oc===Argelers}";
poi = new GisFeature();
poi = importer.populateAlternateNames(poi, RawAlternateNames);
Assert.assertEquals(5,poi.getAlternateNames().size());
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelers","CA"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelès-sur-Mer","FR"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelersoc1","OC"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelersoc2","OC"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelers","OC"));
//w comma and alt_name after coma
RawAlternateNames ="{name:CA===Argelers___name:fr===Argelès-sur-Mer___name:oc===Argelersoc3,Argelersoc4,alt_name:ca===Argelers___name:oc===Argelers}";
poi = new GisFeature();
poi = importer.populateAlternateNames(poi, RawAlternateNames);
Assert.assertEquals(5,poi.getAlternateNames().size());
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelers","CA"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelès-sur-Mer","FR"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelersoc3","OC"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelersoc4","OC"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelers","OC"));
//w comma and no duplicates
RawAlternateNames ="{name:ca===Argelers___name:fr===Argelès-sur-Mer___name:oc===Argelers,name:xx===Argelers___name:yy===Argelers}";
poi = new GisFeature();
poi = importer.populateAlternateNames(poi, RawAlternateNames);
Assert.assertEquals(5,poi.getAlternateNames().size());
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelers","CA"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelès-sur-Mer","FR"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelers","OC"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelers","XX"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Argelers","YY"));
RawAlternateNames ="\"{\"\"name:ca===Sant Andreu de Sueda1,Sant Andreu de Sueda2___name:fr===Saint-André___name:oc===Sant Andreu de Sueda\"\",\"\"name:ca===Sant Andreu de Sueda___name:oc===Sant Andreu de Sueda\"\"}\"";
poi = new GisFeature();
poi = importer.populateAlternateNames(poi, RawAlternateNames);
Assert.assertEquals(5,poi.getAlternateNames().size());
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Sant Andreu de Sueda1","CA"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Sant Andreu de Sueda2","CA"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Saint-André","FR"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Sant Andreu de Sueda","CA"));
Assert.assertTrue(alternateNameContains(poi.getAlternateNames(),"Sant Andreu de Sueda","OC"));
}
@Test
public void isSame(){
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter();
String text = "toto";
List<SolrResponseDto> results = new ArrayList<SolrResponseDto>();
SolrResponseDto solrResponseDto = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDto.getScore()).andReturn(OpenStreetMapCitiesSimpleImporter.SCORE_LIMIT+0.2F);
EasyMock.expect(solrResponseDto.getOpenstreetmap_id()).andReturn(null);
EasyMock.expect(solrResponseDto.getName()).andReturn(text).times(2);
EasyMock.replay(solrResponseDto);
results.add(solrResponseDto);
FulltextResultsDto mockResultDTO = EasyMock.createMock(FulltextResultsDto.class);
EasyMock.expect(mockResultDTO.getResultsSize()).andReturn(1);
EasyMock.expect(mockResultDTO.getResults()).andReturn(results);
EasyMock.replay(mockResultDTO);
/* String countryCode = "FR";
Point location = GeolocHelper.createPoint(3F, 4F);
IFullTextSearchEngine mockfullFullTextSearchEngine = EasyMock.createMock(IFullTextSearchEngine.class);
FulltextQuery query = new FulltextQuery(text, Pagination.ONE_RESULT, DEFAUL_OUTPUT_STYLE, ONLY_CITY_PLACETYPE, countryCode);
query.withAllWordsRequired(false).withoutSpellChecking();
EasyMock.expect(mockfullFullTextSearchEngine.executeQuery(query)).andReturn(mockResultDTO);
EasyMock.replay(mockfullFullTextSearchEngine);
importer.setFullTextSearchEngine(mockfullFullTextSearchEngine);
*/
Assert.assertTrue(importer.isSame(solrResponseDto, text, null));
}
@Test
public void isSame_sameName_lowScore(){
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter();
List<SolrResponseDto> results = new ArrayList<SolrResponseDto>();
SolrResponseDto solrResponseDto = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDto.getScore()).andReturn(FulltextQuerySolrHelper.MIN_SCORE-0.2F);
EasyMock.expect(solrResponseDto.getName()).andReturn("toto");
EasyMock.expect(solrResponseDto.getOpenstreetmap_id()).andReturn(null);
EasyMock.replay(solrResponseDto);
results.add(solrResponseDto);
FulltextResultsDto mockResultDTO = EasyMock.createMock(FulltextResultsDto.class);
EasyMock.expect(mockResultDTO.getResultsSize()).andReturn(1);
EasyMock.expect(mockResultDTO.getResults()).andReturn(results);
EasyMock.replay(mockResultDTO);
Assert.assertTrue(importer.isSame(solrResponseDto, "toto", null));
}
@Test
public void isSame_NotsameName_lowScore(){
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter();
List<SolrResponseDto> results = new ArrayList<SolrResponseDto>();
SolrResponseDto solrResponseDto = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDto.getScore()).andReturn(FulltextQuerySolrHelper.MIN_SCORE-0.2F);
EasyMock.expect(solrResponseDto.getName()).andReturn("tata");
EasyMock.expect(solrResponseDto.getName_alternates()).andReturn(new ArrayList<String>());
EasyMock.expect(solrResponseDto.getOpenstreetmap_id()).andReturn(null);
EasyMock.replay(solrResponseDto);
results.add(solrResponseDto);
FulltextResultsDto mockResultDTO = EasyMock.createMock(FulltextResultsDto.class);
EasyMock.expect(mockResultDTO.getResultsSize()).andReturn(1);
EasyMock.expect(mockResultDTO.getResults()).andReturn(results);
EasyMock.replay(mockResultDTO);
Assert.assertFalse(importer.isSame(solrResponseDto, "toto", null));
}
@Test
public void isSame_WithNullName(){
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter();
Point location = GeolocHelper.createPoint(3F, 4F);
Assert.assertNull(importer.getNearestByPlaceType(location, "", "FR",ONLY_CITY_PLACETYPE, null, null));
Assert.assertNull(importer.getNearestByPlaceType(location, " ", "FR",ONLY_CITY_PLACETYPE, null, null));
Assert.assertNull(importer.getNearestByPlaceType(location, null, "FR",ONLY_CITY_PLACETYPE, null, null));
}
@Test
public void isSame_WithNullLocation(){
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter();
Assert.assertNull(importer.getNearestByPlaceType(null, "paris", "FR",ONLY_CITY_PLACETYPE, null, null));
}
@Test
public void getAdm(){
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter();
List<SolrResponseDto> results = new ArrayList<SolrResponseDto>();
SolrResponseDto solrResponseDto = EasyMock.createNiceMock(SolrResponseDto.class);
results.add(solrResponseDto);
FulltextResultsDto mockResultDTO = EasyMock.createMock(FulltextResultsDto.class);
EasyMock.expect(mockResultDTO.getResultsSize()).andReturn(1);
EasyMock.expect(mockResultDTO.getResults()).andReturn(results);
EasyMock.replay(mockResultDTO);
String text = "toto";
String countryCode = "FR";
IFullTextSearchEngine mockfullFullTextSearchEngine = EasyMock.createMock(IFullTextSearchEngine.class);
FulltextQuery query = new FulltextQuery(text, Pagination.ONE_RESULT, OpenStreetMapCitiesSimpleImporter.DEFAUL_OUTPUT_STYLE, Constants.ONLY_ADM_PLACETYPE, countryCode);
query.withAllWordsRequired(false).withoutSpellChecking();
EasyMock.expect(mockfullFullTextSearchEngine.executeQuery(query)).andReturn(mockResultDTO);
EasyMock.replay(mockfullFullTextSearchEngine);
importer.setFullTextSearchEngine(mockfullFullTextSearchEngine);
SolrResponseDto actual = importer.getAdm(text, countryCode);
Assert.assertEquals(solrResponseDto, actual);
EasyMock.verify(mockfullFullTextSearchEngine);
}
@Test
public void linkAdm(){
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter(){
int call = 0;
protected SolrResponseDto getAdm(String name, String countryCode) {
if (call == 0){
call++;
return null;
} else if (call==1){
if (!name.equals("admName4") || !countryCode.equals("PL")){
Assert.fail("getAdm Is not call with the correct parameters : " +name+";"+countryCode);
}
final SolrResponseDto solrResponseDtoAdm = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoAdm.getFeature_id()).andReturn(4356L).times(2);
EasyMock.expect(solrResponseDtoAdm.getName()).andReturn("admName");
EasyMock.replay(solrResponseDtoAdm);
return solrResponseDtoAdm;
}else {
throw new RuntimeException("getAdmShouldOnlyBeCall 2 times");
}
}
};
City city = new City();
city.setCountryCode("PL");
List<AdmDTO> dtos = new ArrayList<AdmDTO>();
AdmDTO dto1 = new AdmDTO("admName1", 4, 123L);
AdmDTO dto2 = new AdmDTO("admName2", 5, 123L);
AdmDTO dto3 = new AdmDTO("admName2", 6, 123L);//should be ignre because same name as previous
AdmDTO dto4 = new AdmDTO("admName4", 7, 123L);
AdmDTO dto5 = new AdmDTO("admName5", 8, 123L);//should be ignore because 8 >= 8
dtos.add(dto1);
dtos.add(dto2);
dtos.add(dto3);
dtos.add(dto4);
dtos.add(dto5);
Collections.sort(dtos);
IAdmDao admDao = EasyMock.createMock(IAdmDao.class);
Adm adm = new Adm(2);
adm.setName("admName");
EasyMock.expect(admDao.getByFeatureId(4356L)).andReturn(adm);
EasyMock.replay(admDao);
importer.setAdmDao(admDao);
importer.LinkAdm(city, dtos);
Assert.assertEquals(adm, city.getAdm());
EasyMock.verify(admDao);
}
@Test
public void processWithUnknownCityAndKnownAdm(){
final SolrResponseDto solrResponseDtoAdm = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoAdm.getFeature_id()).andReturn(4356L).times(2);
EasyMock.expect(solrResponseDtoAdm.getName()).andReturn("admName");
EasyMock.replay(solrResponseDtoAdm);
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter(){
@Override
protected SolrResponseDto getNearestByPlaceType(Point location, String name, String countryCode,Class[]placetype, Geometry shape, Class target) {
if (!name.equals("Pełczyce") || !countryCode.equals("PL")){
throw new RuntimeException("the getNearestCity() function is not called with the correct parameter");
}
return null;
};
@Override
protected SolrResponseDto getAdm(String name, String countryCode) {
if (!name.equals("gmina Bogoria") || !countryCode.equals("PL")){
throw new RuntimeException("the getAdm() function is not called with the correct parameter : "+name+";"+countryCode);
}
return solrResponseDtoAdm;
}
@Override
void savecity(GisFeature city) {
super.savecity(city);
Assert.assertEquals("village", city.getAmenity());
Assert.assertEquals("Pełczyce", city.getName());
Assert.assertEquals("PL", city.getCountryCode());
Assert.assertEquals(50.64543, city.getLatitude().doubleValue(),0.1);
Assert.assertEquals(21.379207240704833, city.getLongitude().doubleValue(),0.1);
Assert.assertEquals(50.646, city.getAdminCentreLatitude().doubleValue(),0.1);
Assert.assertEquals(21.378, city.getAdminCentreLongitude().doubleValue(),0.1);
Assert.assertEquals(6530243L, city.getOpenstreetmapId().longValue());
Assert.assertEquals(1000000L, city.getPopulation().longValue());
Assert.assertEquals(2, city.getZipCodes().size());
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("28-210")));
Assert.assertTrue( city.getZipCodes().contains(new ZipCode("28-2101")));
Assert.assertEquals(generator.getBestZip(city.getZipCodes()), city.getZipCode());
}
};
ICityDao cityDao = EasyMock.createMock(ICityDao.class);
City city=new City();
city.setFeatureId(9876L);
EasyMock.expect(cityDao.save(city)).andReturn(city);
EasyMock.replay(cityDao);
importer.setCityDao(cityDao);
IIdGenerator idGenerator = EasyMock.createMock(IIdGenerator.class);
EasyMock.expect(idGenerator.getNextFeatureId()).andReturn(9876L);
EasyMock.replay(idGenerator);
importer.setIdGenerator(idGenerator);
List<AdmDTO> dtos = new ArrayList<AdmDTO>();
AdmDTO dto1 = new AdmDTO("admName1", 4, 123L);
AdmDTO dto2 = new AdmDTO("admName2", 5, 123L);
AdmDTO dto3 = new AdmDTO("admName2", 6, 123L);//should be ignre because same name as previous
AdmDTO dto4 = new AdmDTO("admName4", 7, 123L);
AdmDTO dto5 = new AdmDTO("admName5", 8, 123L);//should be ignore because 8 >= 8
dtos.add(dto1);
dtos.add(dto2);
dtos.add(dto3);
dtos.add(dto4);
dtos.add(dto5);
Collections.sort(dtos);
IAdmDao admDao = EasyMock.createMock(IAdmDao.class);
Adm adm = new Adm(2);
adm.setName("admName");
EasyMock.expect(admDao.getByFeatureId(4356L)).andReturn(adm);
EasyMock.replay(admDao);
importer.setAdmDao(admDao);
importer.setMunicipalityDetector(new MunicipalityDetector());
String line= "R\t6530243\t3009735615\tPełczyce\tPL\t28-210\t28-2101\t8\t1000000\t0101000020E6100000D13BC9B91361354030E055AC9D524940\t0101000020E6100000DE7C7E73DA603540ACFF18DFBC524940\t0106000020E610000001000000010300000001000000D20000008D8F60F4265C35401215AA9B8B524940D2C5A695425C35401598A9A4A9524940A367695D595C3540A06B0487BC524940A1C211A4525C35408BC3995FCD52494005543882545C35403A9270C6D55249401950148D5A5C35405551BCCADA52494088FC8E3C6B5C3540EDA17DACE05249401C2ECD08CA5C35408B1D8D43FD524940627B7775D85C35400F8DDDF41D534940ACD09BE50D5D35407961C66F6553494017F2ADB4315D3540B0027CB779534940FDA6B052415D35402569ED6C7E534940DF910C946F5D3540D998D71187534940E861B2028D5D3540A0F76B578D5349400E349F73B75D35402D4D00B49C534940BD53A63DCA5D35403B9AD99DA4534940C4DD0F2ED35D3540611514ABAB534940608033E7CF5D35406009A4C4AE534940D2D0F533AB5D3540A46F777BB553494044499231885D35400D09CECFC3534940F17096ED9E5D35409378D4F3C95349400D82D8E3CF5D354003452C62D8534940137DE310165E3540708912E3EB534940E68931FA1B5E354035B91803EB5349404A21DAD8365E3540CBF4F00AE9534940A8261CD5445E35406CD84A43E8534940ADA92C0ABB5E3540906335A7DC5349400E49D2DAD95E354073840CE4D95349408813984EEB5E354056CDBDD1D85349403DF4DDAD2C5F354077A22424D253494076995077545F3540DF1D19ABCD534940207821C2645F354099BF42E6CA534940C97553CA6B5F354094AC1E8BC85349403F3E213B6F5F354060E74B14C653494025D63D0D735F354037887BD1C35349409FCBD424785F3540CD4D8A45C253494000A13F7E805F35405C6ACE0BC1534940E6F91DD48F5F354021109EBFBF534940262B757FAB5F35406AE27899BC534940FA88F3CBBB5F35402AB7A3EEB95349409C487A62E75F3540E285634CB053494074FB9B06FB5F35405B80B6D5AC534940ADD6D3580C603540CD898741AA5349403667333D17603540754AF6BEA75349400B0BEE073C6035406759411DA0534940241D2FEE50603540B2097AB99953494051FD8348866035402E89FDAF845349402B3D2E05FF60354042E1FD028B534940853EFD0C146135403B600D068D534940BAF8DB9E20613540031544937A53494013B46E28216135405334C5D276534940B226BB3E18613540D6C7E8256B5349404BD05FE81161354019EEB7D15B534940A627D1370E613540150FDE0D58534940DFB4CF1907613540ACB24A44535349403D409C2C5A6135406DAA93D85A534940396403E9626135408EF5C3BE535349403E44A33B886135401B5C847357534940A98B14CAC261354071B77FC05E534940B92869B40B623540FD4E93196F534940BECE3C6F196235403D8ED59C7253494099C51FA056623540006201028C53494054DB977D68623540014F5AB8AC534940E9894226746235408AB3226AA2534940D00B772E8C6235403444BA449A5349400A078C3F9B623540F5A85379965349403F3A75E5B3623540A176AEDE97534940F862DE99BF623540B39F200C97534940010BAA57DB6235405000C5C892534940E72F3E16EC62354075F684DB905349404ABD022C4D6335406BCA04B28D534940F11879B4CC6335402E7590D7835349400B8EDCE4016435401AADFE637C534940CCAEC5B82C6435401F1906877253494039FC242D4B643540B6EA84E16D534940878494449B643540513640C461534940D3DA34B6D7643540D788601C5C5349403A4B7FE5F7643540F1C2312658534940B0A1E58A9C6535402B02F797385349404E6D5FF6A16535405559CAE8365349403316F2ADB4653540408E41823D534940F27794EFBE65354032A0CD60425349407843BF5BC56535402C3FBA224253494099B21D9D0466354059B1AEC046534940090FE4EA11663540E99FE06245534940A6E5513B0D66354031105F81435349408D43A275F9653540CAF500272553494054E17437F4653540C586B883225349404721C9ACDE653540D917BFDF1E5349409FFBBCF3D5653540F3F56BA11A53494011CE0248C8653540FF44C07C0D534940A4A60293C0653540CB6548BA0B53494090B81160A26535401332EB200A5349407AC7293A92653540EF6F75A50A534940100BB5A67965354085C5F2F8075349408ACFF819726535400243FBFD07534940FF20376854653540F42334380053494087FBC8AD49653540A7A091BEFF5249400F5A59EC4065354038C30DF8FC52494048A41243176535403ABB1006F95249400BFB2C85F66435401FA0A0B9F35249407C09BA62EB643540A3B83E07F1524940D42B6519E2643540166C239EEC524940607AFB73D164354022B53F06E152494044CCDBC7C0643540A244F064DC524940856A3986B6643540A2A64C20DB524940B7B585E7A56435407707C25FDD524940F5F34B69A2643540963A1279DC5249406A60F591A5643540B25879B8D352494026E9F582AA643540095B47B0CC524940DAE9077591643540543651F0B952494023FCE659A46435409728D604AC524940CA75AE83DE643540B7AC0CF49A5249408C50C7BEBF643540E3395B406852494032074147AB64354071975874465249406EC905C2A96435402CC9F08E42524940E78CCD339B6435402EC1F39C3E5249407E9D8A0A8B64354077514F7A3A52494004FE953A6D6435401CF1643733524940B8B475CB696435408D7E349C325249407CF2B0506B6435409AEA6E4331524940629E3AFB6F64354034958FEE31524940F455F2B1BB643540E133C813F7514940C830822106653540058D9944BD514940C474C69C0C6535404D3F975FBC5149402CC6AF0E366535409768DA0FC2514940BF3D192D51653540E435AFEAAC514940134A5F0839653540D85F1B96AB51494060483DFA15653540EF0802BFA15149402199695611653540D4A5DA029D5149405041D9EFE4643540A1A4C00298514940BC88A53792643540C9E0720690514940AB17320D79643540B96D84EA8B514940CDEF8F5264643540DFDF450488514940231A38FB5E6435400FAC996B875149405E4E0988496435403D6304F97E5149405EE3E94B2564354005DF347D7651494069B57691F8633540B5B002D7705149401E3B037EE86335401808A7AA7551494069554B3ACA6335403F16478A6D514940667330F6B96335408D6BD7DF6D514940D2883EC4AB633540CABD0A3A6B514940BBF083F3A9633540384D9F1D70514940381D5C959F6335405C7FA6B97051494041F273E899633540F629C764715149400FA1A5869163354066F3DD5273514940D451691F8663354007D1FF1774514940575B56067A6335404E6958E7735149408089D3A46F633540F551A11573514940C637143E5B6335401577BCC96F5149409C3F5C284F63354027E8E5666E514940F243A511336335406F6CD15D6D514940074E6CF4206335406FAE505A6E5149402D184B47EF623540BB59CD84705149409E5A22BCE26235402033ABD2715149401EE7919AD1623540596DFE5F75514940C2E2CB9FCA6235405F865A2E76514940B27AD168BC623540FBB2B453735149409EFAF664B462354007A925677251494080208A13A9623540194229B5725149402E2526039B62354013F5824F73514940EA735A5C886235406C54F190735149407AD44E8358623540A38790A971514940D204E51137623540E53AD7416F5149405D55F65D11623540BCA7BC676E5149405889C3E3EC61354028DAB0016C5149406C73AD07DD61354059AC3CDC69514940ACE23213B161354052F4C0C7605149405DEB41F79B613540185E49F25C514940027C5CC070613540B60CDD91565149409838F24064613540A04C4810535149402ADDA7F45D613540E2B19FC55251494058772CB649613540065A70F552514940122A82493B613540E9EAD8525151494071B9B0242F613540B4F7F3B74E5149409923754C2761354079831E204E514940687682A21E6135406D1D1CEC4D514940085C57CC086135408AFC44AF505149407039A80E03613540E3FF8EA8505149404BCADDE7F86035404983802150514940A9195245F160354067A263624E514940CC762A85E5603540DF4EC7084D5149406BFDE373DD603540321F10E84C514940D662A6A3D2603540A97D84AB4D514940C64263DCC36035405B6A73524E514940447BAB64B6603540AF68CE554E514940F6C07DD3AA603540FD6772D64C51494027A435069D603540B573F5BE4C514940BA1798158A603540DFF2A2C04C514940F3B803D083603540B088AB144C5149402418BD0974603540E659EE714B514940DB1C42F053603540637BD22E4B5149404F18DEF64E6035405EAA2DD049514940F76A91FEA85F3540FA08A12875514940FEB1B5638F5F354096D39E92735149400C10BBA58B5F354010536C1679514940338001CE9C5F3540E4141DC9E551494061C9552C7E5F35402588A9E3E751494011FFB0A5475F35406FC5596CEE5149404CCD7921785F35400E198F52095249403561FBC9185F3540C613E6E2145249407514D67C4B5F3540F5835F8F2E52494012C9EB1C5E5F35408E90268348524940307777AE395F3540A5B84F33495249402E4F31186D5D3540E0F8DA334B52494071F55267A45C3540991E03684A52494070795160A65C354017FE672849524940A084E3439A5C35404654F2FB48524940CD76853E585C3540C14A4FA26F5249408D8F60F4265C35401215AA9B8B524940\tvillage\tis in foobar\tpowiat staszowski___6___2635574___województwo świętokrzyskie___4___130914___gmina Bogoria___7___2963727\t\"{\"\"\"\",name:genitive===Pełczyczyc___name:adjective===pełczycki}\"";
importer.processData(line);
EasyMock.verify(cityDao);
EasyMock.verify(idGenerator);
}
@Test
public void processWithUnknownCityAndKnownAdm_WhenAdmlevelIsNull(){
final SolrResponseDto solrResponseDtoAdm = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoAdm.getFeature_id()).andReturn(4356L).times(2);
EasyMock.expect(solrResponseDtoAdm.getName()).andReturn("admName");
EasyMock.replay(solrResponseDtoAdm);
final Adm adm = new Adm(2);
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter(){
@Override
protected SolrResponseDto getNearestByPlaceType(Point location, String name, String countryCode,Class[]placetype, Geometry shape, Class target) {
if (!name.equals("Pełczyce") || !countryCode.equals("PL")){
throw new RuntimeException("the getNearestCity() function is not called with the correct parameter");
}
return null;
};
@Override
protected SolrResponseDto getAdm(String name, String countryCode) {
if (!name.equals("is in foobar") || !countryCode.equals("PL")){
throw new RuntimeException("the getAdm() function is not called with the correct parameter : "+name+";"+countryCode);
}
return solrResponseDtoAdm;
}
@Override
void savecity(GisFeature city) {
super.savecity(city);
Assert.assertEquals("village", city.getAmenity());
Assert.assertEquals("Pełczyce", city.getName());
Assert.assertEquals("PL", city.getCountryCode());
Assert.assertEquals(50.64543, city.getLatitude().doubleValue(),0.1);
Assert.assertEquals(21.379207240704833, city.getLongitude().doubleValue(),0.1);
Assert.assertEquals(50.646, city.getAdminCentreLatitude().doubleValue(),0.1);
Assert.assertEquals(21.378, city.getAdminCentreLongitude().doubleValue(),0.1);
Assert.assertEquals(6530243L, city.getOpenstreetmapId().longValue());
Assert.assertEquals(1000000L, city.getPopulation().longValue());
Assert.assertEquals("adm should be set",adm, city.getAdm());
Assert.assertEquals(2, city.getZipCodes().size());
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("28-210")));
Assert.assertTrue( city.getZipCodes().contains(new ZipCode("28-2101")));
Assert.assertEquals(generator.getBestZip(city.getZipCodes()), city.getZipCode());
Assert.assertEquals(generator.generateLabel(city), city.getLabel());
Assert.assertTrue("alternate labels are empty and shouldn't be", city.getAlternateLabels().size()!=0);
Assert.assertEquals(generator.generateLabels(city).size(), city.getAlternateLabels().size());
Assert.assertEquals(generator.getFullyQualifiedName(city), city.getFullyQualifiedName());
}
};
ICityDao cityDao = EasyMock.createMock(ICityDao.class);
City city=new City();
city.setFeatureId(9876L);
EasyMock.expect(cityDao.save(city)).andReturn(city);
EasyMock.replay(cityDao);
importer.setCityDao(cityDao);
IIdGenerator idGenerator = EasyMock.createMock(IIdGenerator.class);
EasyMock.expect(idGenerator.getNextFeatureId()).andReturn(9876L);
EasyMock.replay(idGenerator);
importer.setIdGenerator(idGenerator);
List<AdmDTO> dtos = new ArrayList<AdmDTO>();
AdmDTO dto1 = new AdmDTO("admName1", 4, 123L);
AdmDTO dto2 = new AdmDTO("admName2", 5, 123L);
AdmDTO dto3 = new AdmDTO("admName2", 6, 123L);//should be ignre because same name as previous
AdmDTO dto4 = new AdmDTO("admName4", 7, 123L);
AdmDTO dto5 = new AdmDTO("admName5", 8, 123L);//should be ignore because 8 >= 8
dtos.add(dto1);
dtos.add(dto2);
dtos.add(dto3);
dtos.add(dto4);
dtos.add(dto5);
Collections.sort(dtos);
IAdmDao admDao = EasyMock.createMock(IAdmDao.class);
adm.setName("admName");
EasyMock.expect(admDao.getByFeatureId(4356L)).andReturn(adm);
EasyMock.replay(admDao);
importer.setAdmDao(admDao);
importer.setMunicipalityDetector(new MunicipalityDetector());
String line= "R\t6530243\t3009735615\tPełczyce\tPL\t28-210\t28-2101\t8\t1000000\t0101000020E6100000D13BC9B91361354030E055AC9D524940\t0101000020E6100000DE7C7E73DA603540ACFF18DFBC524940\t0106000020E610000001000000010300000001000000D20000008D8F60F4265C35401215AA9B8B524940D2C5A695425C35401598A9A4A9524940A367695D595C3540A06B0487BC524940A1C211A4525C35408BC3995FCD52494005543882545C35403A9270C6D55249401950148D5A5C35405551BCCADA52494088FC8E3C6B5C3540EDA17DACE05249401C2ECD08CA5C35408B1D8D43FD524940627B7775D85C35400F8DDDF41D534940ACD09BE50D5D35407961C66F6553494017F2ADB4315D3540B0027CB779534940FDA6B052415D35402569ED6C7E534940DF910C946F5D3540D998D71187534940E861B2028D5D3540A0F76B578D5349400E349F73B75D35402D4D00B49C534940BD53A63DCA5D35403B9AD99DA4534940C4DD0F2ED35D3540611514ABAB534940608033E7CF5D35406009A4C4AE534940D2D0F533AB5D3540A46F777BB553494044499231885D35400D09CECFC3534940F17096ED9E5D35409378D4F3C95349400D82D8E3CF5D354003452C62D8534940137DE310165E3540708912E3EB534940E68931FA1B5E354035B91803EB5349404A21DAD8365E3540CBF4F00AE9534940A8261CD5445E35406CD84A43E8534940ADA92C0ABB5E3540906335A7DC5349400E49D2DAD95E354073840CE4D95349408813984EEB5E354056CDBDD1D85349403DF4DDAD2C5F354077A22424D253494076995077545F3540DF1D19ABCD534940207821C2645F354099BF42E6CA534940C97553CA6B5F354094AC1E8BC85349403F3E213B6F5F354060E74B14C653494025D63D0D735F354037887BD1C35349409FCBD424785F3540CD4D8A45C253494000A13F7E805F35405C6ACE0BC1534940E6F91DD48F5F354021109EBFBF534940262B757FAB5F35406AE27899BC534940FA88F3CBBB5F35402AB7A3EEB95349409C487A62E75F3540E285634CB053494074FB9B06FB5F35405B80B6D5AC534940ADD6D3580C603540CD898741AA5349403667333D17603540754AF6BEA75349400B0BEE073C6035406759411DA0534940241D2FEE50603540B2097AB99953494051FD8348866035402E89FDAF845349402B3D2E05FF60354042E1FD028B534940853EFD0C146135403B600D068D534940BAF8DB9E20613540031544937A53494013B46E28216135405334C5D276534940B226BB3E18613540D6C7E8256B5349404BD05FE81161354019EEB7D15B534940A627D1370E613540150FDE0D58534940DFB4CF1907613540ACB24A44535349403D409C2C5A6135406DAA93D85A534940396403E9626135408EF5C3BE535349403E44A33B886135401B5C847357534940A98B14CAC261354071B77FC05E534940B92869B40B623540FD4E93196F534940BECE3C6F196235403D8ED59C7253494099C51FA056623540006201028C53494054DB977D68623540014F5AB8AC534940E9894226746235408AB3226AA2534940D00B772E8C6235403444BA449A5349400A078C3F9B623540F5A85379965349403F3A75E5B3623540A176AEDE97534940F862DE99BF623540B39F200C97534940010BAA57DB6235405000C5C892534940E72F3E16EC62354075F684DB905349404ABD022C4D6335406BCA04B28D534940F11879B4CC6335402E7590D7835349400B8EDCE4016435401AADFE637C534940CCAEC5B82C6435401F1906877253494039FC242D4B643540B6EA84E16D534940878494449B643540513640C461534940D3DA34B6D7643540D788601C5C5349403A4B7FE5F7643540F1C2312658534940B0A1E58A9C6535402B02F797385349404E6D5FF6A16535405559CAE8365349403316F2ADB4653540408E41823D534940F27794EFBE65354032A0CD60425349407843BF5BC56535402C3FBA224253494099B21D9D0466354059B1AEC046534940090FE4EA11663540E99FE06245534940A6E5513B0D66354031105F81435349408D43A275F9653540CAF500272553494054E17437F4653540C586B883225349404721C9ACDE653540D917BFDF1E5349409FFBBCF3D5653540F3F56BA11A53494011CE0248C8653540FF44C07C0D534940A4A60293C0653540CB6548BA0B53494090B81160A26535401332EB200A5349407AC7293A92653540EF6F75A50A534940100BB5A67965354085C5F2F8075349408ACFF819726535400243FBFD07534940FF20376854653540F42334380053494087FBC8AD49653540A7A091BEFF5249400F5A59EC4065354038C30DF8FC52494048A41243176535403ABB1006F95249400BFB2C85F66435401FA0A0B9F35249407C09BA62EB643540A3B83E07F1524940D42B6519E2643540166C239EEC524940607AFB73D164354022B53F06E152494044CCDBC7C0643540A244F064DC524940856A3986B6643540A2A64C20DB524940B7B585E7A56435407707C25FDD524940F5F34B69A2643540963A1279DC5249406A60F591A5643540B25879B8D352494026E9F582AA643540095B47B0CC524940DAE9077591643540543651F0B952494023FCE659A46435409728D604AC524940CA75AE83DE643540B7AC0CF49A5249408C50C7BEBF643540E3395B406852494032074147AB64354071975874465249406EC905C2A96435402CC9F08E42524940E78CCD339B6435402EC1F39C3E5249407E9D8A0A8B64354077514F7A3A52494004FE953A6D6435401CF1643733524940B8B475CB696435408D7E349C325249407CF2B0506B6435409AEA6E4331524940629E3AFB6F64354034958FEE31524940F455F2B1BB643540E133C813F7514940C830822106653540058D9944BD514940C474C69C0C6535404D3F975FBC5149402CC6AF0E366535409768DA0FC2514940BF3D192D51653540E435AFEAAC514940134A5F0839653540D85F1B96AB51494060483DFA15653540EF0802BFA15149402199695611653540D4A5DA029D5149405041D9EFE4643540A1A4C00298514940BC88A53792643540C9E0720690514940AB17320D79643540B96D84EA8B514940CDEF8F5264643540DFDF450488514940231A38FB5E6435400FAC996B875149405E4E0988496435403D6304F97E5149405EE3E94B2564354005DF347D7651494069B57691F8633540B5B002D7705149401E3B037EE86335401808A7AA7551494069554B3ACA6335403F16478A6D514940667330F6B96335408D6BD7DF6D514940D2883EC4AB633540CABD0A3A6B514940BBF083F3A9633540384D9F1D70514940381D5C959F6335405C7FA6B97051494041F273E899633540F629C764715149400FA1A5869163354066F3DD5273514940D451691F8663354007D1FF1774514940575B56067A6335404E6958E7735149408089D3A46F633540F551A11573514940C637143E5B6335401577BCC96F5149409C3F5C284F63354027E8E5666E514940F243A511336335406F6CD15D6D514940074E6CF4206335406FAE505A6E5149402D184B47EF623540BB59CD84705149409E5A22BCE26235402033ABD2715149401EE7919AD1623540596DFE5F75514940C2E2CB9FCA6235405F865A2E76514940B27AD168BC623540FBB2B453735149409EFAF664B462354007A925677251494080208A13A9623540194229B5725149402E2526039B62354013F5824F73514940EA735A5C886235406C54F190735149407AD44E8358623540A38790A971514940D204E51137623540E53AD7416F5149405D55F65D11623540BCA7BC676E5149405889C3E3EC61354028DAB0016C5149406C73AD07DD61354059AC3CDC69514940ACE23213B161354052F4C0C7605149405DEB41F79B613540185E49F25C514940027C5CC070613540B60CDD91565149409838F24064613540A04C4810535149402ADDA7F45D613540E2B19FC55251494058772CB649613540065A70F552514940122A82493B613540E9EAD8525151494071B9B0242F613540B4F7F3B74E5149409923754C2761354079831E204E514940687682A21E6135406D1D1CEC4D514940085C57CC086135408AFC44AF505149407039A80E03613540E3FF8EA8505149404BCADDE7F86035404983802150514940A9195245F160354067A263624E514940CC762A85E5603540DF4EC7084D5149406BFDE373DD603540321F10E84C514940D662A6A3D2603540A97D84AB4D514940C64263DCC36035405B6A73524E514940447BAB64B6603540AF68CE554E514940F6C07DD3AA603540FD6772D64C51494027A435069D603540B573F5BE4C514940BA1798158A603540DFF2A2C04C514940F3B803D083603540B088AB144C5149402418BD0974603540E659EE714B514940DB1C42F053603540637BD22E4B5149404F18DEF64E6035405EAA2DD049514940F76A91FEA85F3540FA08A12875514940FEB1B5638F5F354096D39E92735149400C10BBA58B5F354010536C1679514940338001CE9C5F3540E4141DC9E551494061C9552C7E5F35402588A9E3E751494011FFB0A5475F35406FC5596CEE5149404CCD7921785F35400E198F52095249403561FBC9185F3540C613E6E2145249407514D67C4B5F3540F5835F8F2E52494012C9EB1C5E5F35408E90268348524940307777AE395F3540A5B84F33495249402E4F31186D5D3540E0F8DA334B52494071F55267A45C3540991E03684A52494070795160A65C354017FE672849524940A084E3439A5C35404654F2FB48524940CD76853E585C3540C14A4FA26F5249408D8F60F4265C35401215AA9B8B524940\tvillage\tis in foobar\t\t\"{\"\"\"\",name:genitive===Pełczyczyc___name:adjective===pełczycki}\"";
importer.processData(line);
EasyMock.verify(cityDao);
EasyMock.verify(idGenerator);
}
@Test
public void processWithknownCityAndAdm_citySubdivision(){
final SolrResponseDto solrResponseDtoCity = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoCity.getPlacetype()).andReturn(CitySubdivision.class.getSimpleName());
EasyMock.expect(solrResponseDtoCity.getFeature_id()).andReturn(123L);
EasyMock.replay(solrResponseDtoCity);
final Adm adm = new Adm(2);
final SolrResponseDto solrResponseDtoAdm = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoAdm.getFeature_id()).andReturn(4356L).times(2);
EasyMock.replay(solrResponseDtoAdm);
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter(){
@Override
protected SolrResponseDto getNearestByPlaceType(Point location, String name, String countryCode,Class[]placetype, Geometry shape, Class target) {
if (!name.equals("Pełczyce 02") || !countryCode.equals("PL") || placetype != Constants.CITY_AND_CITYSUBDIVISION_PLACETYPE){
throw new RuntimeException("the function getNearestCity() is not called with the correct parameter");
}
return solrResponseDtoCity;
};
@Override
protected SolrResponseDto getAdm(String name, String countryCode) {
if (!name.equals("gmina Bogoria") || !countryCode.equals("PL")){
throw new RuntimeException("the function getAdm() is not called with the correct parameter : "+name+";"+countryCode);
}
return solrResponseDtoAdm;
}
@Override
void savecity(GisFeature city) {
super.savecity(city);
Assert.assertEquals("village", city.getAmenity());
Assert.assertEquals("When a city is already present, we overide the name","Pełczyce 02", city.getName());
Assert.assertEquals("When a city is already present, we overide the countrycode","PL", city.getCountryCode());
Assert.assertEquals("When a city is already present, we overide the lat",50.6454D, city.getLatitude().doubleValue(),0.01);
Assert.assertEquals("When a city is already present, we overide the long",21.379D, city.getLongitude().doubleValue(),0.01);
Assert.assertEquals("When a city is already present, we set the admin centre lat",50.646D, city.getAdminCentreLatitude().doubleValue(),0.01);
Assert.assertEquals("When a city is already present, we set the admin centre long",21.378D, city.getAdminCentreLongitude().doubleValue(),0.01);
Assert.assertEquals(6530243L, city.getOpenstreetmapId().longValue());
Assert.assertEquals(1000000L, city.getPopulation().longValue());
Assert.assertEquals(2, city.getZipCodes().size());
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("28-210")));
Assert.assertTrue( city.getZipCodes().contains(new ZipCode("28-2101")));
Assert.assertEquals(generator.getBestZip(city.getZipCodes()), city.getZipCode());
Assert.assertEquals("adm should be set",adm, city.getAdm());
Assert.assertEquals(generator.generateLabel(city), city.getLabel());
Assert.assertTrue("alternate labels are empty and shouldn't be", city.getAlternateLabels().size()!=0);
Assert.assertEquals(generator.generateLabels(city).size(), city.getAlternateLabels().size());
Assert.assertEquals(generator.getFullyQualifiedName(city), city.getFullyQualifiedName());
}
};
CitySubdivisionDao citySubdivisionDao = EasyMock.createMock(CitySubdivisionDao.class);
CitySubdivision city=new CitySubdivision();
city.setName("initial name");
city.setCountryCode("DE");
city.setLocation(GeolocHelper.createPoint(30D, 20D));
city.setFeatureId(123L);
EasyMock.expect(citySubdivisionDao.getByFeatureId(123L)).andReturn(city);
EasyMock.expect(citySubdivisionDao.save(city)).andReturn(city);
EasyMock.replay(citySubdivisionDao);
importer.setCitySubdivisionDao(citySubdivisionDao);
IAdmDao admDao = EasyMock.createMock(IAdmDao.class);
adm.setName("admName");
EasyMock.expect(admDao.getByFeatureId(4356L)).andReturn(adm);
EasyMock.replay(admDao);
importer.setAdmDao(admDao);
importer.setMunicipalityDetector(new MunicipalityDetector());
String line= "R\t6530243\t3009735615\tPełczyce 02\tPL\t28-210\t28-2101\t8\t1000000\t0101000020E6100000D13BC9B91361354030E055AC9D524940\t0101000020E6100000DE7C7E73DA603540ACFF18DFBC524940\t0106000020E610000001000000010300000001000000D20000008D8F60F4265C35401215AA9B8B524940D2C5A695425C35401598A9A4A9524940A367695D595C3540A06B0487BC524940A1C211A4525C35408BC3995FCD52494005543882545C35403A9270C6D55249401950148D5A5C35405551BCCADA52494088FC8E3C6B5C3540EDA17DACE05249401C2ECD08CA5C35408B1D8D43FD524940627B7775D85C35400F8DDDF41D534940ACD09BE50D5D35407961C66F6553494017F2ADB4315D3540B0027CB779534940FDA6B052415D35402569ED6C7E534940DF910C946F5D3540D998D71187534940E861B2028D5D3540A0F76B578D5349400E349F73B75D35402D4D00B49C534940BD53A63DCA5D35403B9AD99DA4534940C4DD0F2ED35D3540611514ABAB534940608033E7CF5D35406009A4C4AE534940D2D0F533AB5D3540A46F777BB553494044499231885D35400D09CECFC3534940F17096ED9E5D35409378D4F3C95349400D82D8E3CF5D354003452C62D8534940137DE310165E3540708912E3EB534940E68931FA1B5E354035B91803EB5349404A21DAD8365E3540CBF4F00AE9534940A8261CD5445E35406CD84A43E8534940ADA92C0ABB5E3540906335A7DC5349400E49D2DAD95E354073840CE4D95349408813984EEB5E354056CDBDD1D85349403DF4DDAD2C5F354077A22424D253494076995077545F3540DF1D19ABCD534940207821C2645F354099BF42E6CA534940C97553CA6B5F354094AC1E8BC85349403F3E213B6F5F354060E74B14C653494025D63D0D735F354037887BD1C35349409FCBD424785F3540CD4D8A45C253494000A13F7E805F35405C6ACE0BC1534940E6F91DD48F5F354021109EBFBF534940262B757FAB5F35406AE27899BC534940FA88F3CBBB5F35402AB7A3EEB95349409C487A62E75F3540E285634CB053494074FB9B06FB5F35405B80B6D5AC534940ADD6D3580C603540CD898741AA5349403667333D17603540754AF6BEA75349400B0BEE073C6035406759411DA0534940241D2FEE50603540B2097AB99953494051FD8348866035402E89FDAF845349402B3D2E05FF60354042E1FD028B534940853EFD0C146135403B600D068D534940BAF8DB9E20613540031544937A53494013B46E28216135405334C5D276534940B226BB3E18613540D6C7E8256B5349404BD05FE81161354019EEB7D15B534940A627D1370E613540150FDE0D58534940DFB4CF1907613540ACB24A44535349403D409C2C5A6135406DAA93D85A534940396403E9626135408EF5C3BE535349403E44A33B886135401B5C847357534940A98B14CAC261354071B77FC05E534940B92869B40B623540FD4E93196F534940BECE3C6F196235403D8ED59C7253494099C51FA056623540006201028C53494054DB977D68623540014F5AB8AC534940E9894226746235408AB3226AA2534940D00B772E8C6235403444BA449A5349400A078C3F9B623540F5A85379965349403F3A75E5B3623540A176AEDE97534940F862DE99BF623540B39F200C97534940010BAA57DB6235405000C5C892534940E72F3E16EC62354075F684DB905349404ABD022C4D6335406BCA04B28D534940F11879B4CC6335402E7590D7835349400B8EDCE4016435401AADFE637C534940CCAEC5B82C6435401F1906877253494039FC242D4B643540B6EA84E16D534940878494449B643540513640C461534940D3DA34B6D7643540D788601C5C5349403A4B7FE5F7643540F1C2312658534940B0A1E58A9C6535402B02F797385349404E6D5FF6A16535405559CAE8365349403316F2ADB4653540408E41823D534940F27794EFBE65354032A0CD60425349407843BF5BC56535402C3FBA224253494099B21D9D0466354059B1AEC046534940090FE4EA11663540E99FE06245534940A6E5513B0D66354031105F81435349408D43A275F9653540CAF500272553494054E17437F4653540C586B883225349404721C9ACDE653540D917BFDF1E5349409FFBBCF3D5653540F3F56BA11A53494011CE0248C8653540FF44C07C0D534940A4A60293C0653540CB6548BA0B53494090B81160A26535401332EB200A5349407AC7293A92653540EF6F75A50A534940100BB5A67965354085C5F2F8075349408ACFF819726535400243FBFD07534940FF20376854653540F42334380053494087FBC8AD49653540A7A091BEFF5249400F5A59EC4065354038C30DF8FC52494048A41243176535403ABB1006F95249400BFB2C85F66435401FA0A0B9F35249407C09BA62EB643540A3B83E07F1524940D42B6519E2643540166C239EEC524940607AFB73D164354022B53F06E152494044CCDBC7C0643540A244F064DC524940856A3986B6643540A2A64C20DB524940B7B585E7A56435407707C25FDD524940F5F34B69A2643540963A1279DC5249406A60F591A5643540B25879B8D352494026E9F582AA643540095B47B0CC524940DAE9077591643540543651F0B952494023FCE659A46435409728D604AC524940CA75AE83DE643540B7AC0CF49A5249408C50C7BEBF643540E3395B406852494032074147AB64354071975874465249406EC905C2A96435402CC9F08E42524940E78CCD339B6435402EC1F39C3E5249407E9D8A0A8B64354077514F7A3A52494004FE953A6D6435401CF1643733524940B8B475CB696435408D7E349C325249407CF2B0506B6435409AEA6E4331524940629E3AFB6F64354034958FEE31524940F455F2B1BB643540E133C813F7514940C830822106653540058D9944BD514940C474C69C0C6535404D3F975FBC5149402CC6AF0E366535409768DA0FC2514940BF3D192D51653540E435AFEAAC514940134A5F0839653540D85F1B96AB51494060483DFA15653540EF0802BFA15149402199695611653540D4A5DA029D5149405041D9EFE4643540A1A4C00298514940BC88A53792643540C9E0720690514940AB17320D79643540B96D84EA8B514940CDEF8F5264643540DFDF450488514940231A38FB5E6435400FAC996B875149405E4E0988496435403D6304F97E5149405EE3E94B2564354005DF347D7651494069B57691F8633540B5B002D7705149401E3B037EE86335401808A7AA7551494069554B3ACA6335403F16478A6D514940667330F6B96335408D6BD7DF6D514940D2883EC4AB633540CABD0A3A6B514940BBF083F3A9633540384D9F1D70514940381D5C959F6335405C7FA6B97051494041F273E899633540F629C764715149400FA1A5869163354066F3DD5273514940D451691F8663354007D1FF1774514940575B56067A6335404E6958E7735149408089D3A46F633540F551A11573514940C637143E5B6335401577BCC96F5149409C3F5C284F63354027E8E5666E514940F243A511336335406F6CD15D6D514940074E6CF4206335406FAE505A6E5149402D184B47EF623540BB59CD84705149409E5A22BCE26235402033ABD2715149401EE7919AD1623540596DFE5F75514940C2E2CB9FCA6235405F865A2E76514940B27AD168BC623540FBB2B453735149409EFAF664B462354007A925677251494080208A13A9623540194229B5725149402E2526039B62354013F5824F73514940EA735A5C886235406C54F190735149407AD44E8358623540A38790A971514940D204E51137623540E53AD7416F5149405D55F65D11623540BCA7BC676E5149405889C3E3EC61354028DAB0016C5149406C73AD07DD61354059AC3CDC69514940ACE23213B161354052F4C0C7605149405DEB41F79B613540185E49F25C514940027C5CC070613540B60CDD91565149409838F24064613540A04C4810535149402ADDA7F45D613540E2B19FC55251494058772CB649613540065A70F552514940122A82493B613540E9EAD8525151494071B9B0242F613540B4F7F3B74E5149409923754C2761354079831E204E514940687682A21E6135406D1D1CEC4D514940085C57CC086135408AFC44AF505149407039A80E03613540E3FF8EA8505149404BCADDE7F86035404983802150514940A9195245F160354067A263624E514940CC762A85E5603540DF4EC7084D5149406BFDE373DD603540321F10E84C514940D662A6A3D2603540A97D84AB4D514940C64263DCC36035405B6A73524E514940447BAB64B6603540AF68CE554E514940F6C07DD3AA603540FD6772D64C51494027A435069D603540B573F5BE4C514940BA1798158A603540DFF2A2C04C514940F3B803D083603540B088AB144C5149402418BD0974603540E659EE714B514940DB1C42F053603540637BD22E4B5149404F18DEF64E6035405EAA2DD049514940F76A91FEA85F3540FA08A12875514940FEB1B5638F5F354096D39E92735149400C10BBA58B5F354010536C1679514940338001CE9C5F3540E4141DC9E551494061C9552C7E5F35402588A9E3E751494011FFB0A5475F35406FC5596CEE5149404CCD7921785F35400E198F52095249403561FBC9185F3540C613E6E2145249407514D67C4B5F3540F5835F8F2E52494012C9EB1C5E5F35408E90268348524940307777AE395F3540A5B84F33495249402E4F31186D5D3540E0F8DA334B52494071F55267A45C3540991E03684A52494070795160A65C354017FE672849524940A084E3439A5C35404654F2FB48524940CD76853E585C3540C14A4FA26F5249408D8F60F4265C35401215AA9B8B524940\tvillage\tis in foobar\tpowiat staszowski___6___2635574___województwo świętokrzyskie___4___130914___gmina Bogoria___7___2963727\t\"{\"\"\"\",name:genitive===Pełczyczyc___name:adjective===pełczycki}\"";
importer.processData(line);
EasyMock.verify(citySubdivisionDao);
}
@Test
public void processWithknownCityAndAdm_citySubdivision_placetype(){
final SolrResponseDto solrResponseDtoCity = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoCity.getPlacetype()).andReturn(CitySubdivision.class.getSimpleName());
EasyMock.expect(solrResponseDtoCity.getFeature_id()).andReturn(123L);
EasyMock.replay(solrResponseDtoCity);
final SolrResponseDto solrResponseDtoAdm = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoAdm.getFeature_id()).andReturn(4356L).times(2);
EasyMock.replay(solrResponseDtoAdm);
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter(){
@Override
protected SolrResponseDto getNearestByPlaceType(Point location, String name, String countryCode,Class[]placetype, Geometry shape, Class target) {
if (!name.equals("Pełczyce") || !countryCode.equals("PL") || placetype != Constants.CITY_AND_CITYSUBDIVISION_PLACETYPE){
throw new RuntimeException("the getNearestCity() function is not called with the correct parameter");
}
return solrResponseDtoCity;
};
@Override
protected SolrResponseDto getAdm(String name, String countryCode) {
if (!name.equals("gmina Bogoria") || !countryCode.equals("PL")){
throw new RuntimeException("the getAdm() function is not called with the correct parameter");
}
return solrResponseDtoAdm;
}
@Override
void savecity(GisFeature city) {
super.savecity(city);
Assert.assertEquals("neighbourhood", city.getAmenity());
Assert.assertEquals("When a city is already present, we overide the name","Pełczyce", city.getName());
Assert.assertEquals("When a city is already present, we overide the countrycode","PL", city.getCountryCode());
Assert.assertEquals("When a city is already present, we overide the lat",50.6454D, city.getLatitude().doubleValue(),0.01);
Assert.assertEquals("When a city is already present, we overide the long",21.379D, city.getLongitude().doubleValue(),0.01);
Assert.assertEquals("When a city is already present, we set the admin centre lat",50.646D, city.getAdminCentreLatitude().doubleValue(),0.01);
Assert.assertEquals("When a city is already present, we set the admin centre long",21.378D, city.getAdminCentreLongitude().doubleValue(),0.01);
Assert.assertEquals(6530243L, city.getOpenstreetmapId().longValue());
Assert.assertEquals(1000000L, city.getPopulation().longValue());
Assert.assertEquals(2, city.getZipCodes().size());
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("28-210")));
Assert.assertTrue( city.getZipCodes().contains(new ZipCode("28-2101")));
Assert.assertEquals(generator.getBestZip(city.getZipCodes()), city.getZipCode());
Assert.assertEquals(generator.generateLabel(city), city.getLabel());
Assert.assertTrue("alternate labels are empty and shouldn't be", city.getAlternateLabels().size()!=0);
Assert.assertEquals(generator.generateLabels(city).size(), city.getAlternateLabels().size());
Assert.assertEquals(generator.getFullyQualifiedName(city), city.getFullyQualifiedName());
}
};
CitySubdivisionDao citySubdivisionDao = EasyMock.createMock(CitySubdivisionDao.class);
CitySubdivision city=new CitySubdivision();
city.setName("initial name");
city.setCountryCode("DE");
city.setLocation(GeolocHelper.createPoint(30D, 20D));
city.setFeatureId(123L);
EasyMock.expect(citySubdivisionDao.getByFeatureId(123L)).andReturn(city);
EasyMock.expect(citySubdivisionDao.save(city)).andReturn(city);
EasyMock.replay(citySubdivisionDao);
importer.setCitySubdivisionDao(citySubdivisionDao);
IAdmDao admDao = EasyMock.createMock(IAdmDao.class);
Adm adm = new Adm(2);
adm.setName("admName");
EasyMock.expect(admDao.getByFeatureId(4356L)).andReturn(adm);
EasyMock.replay(admDao);
importer.setAdmDao(admDao);
importer.setMunicipalityDetector(new MunicipalityDetector());
String line= "R\t6530243\t3009735615\tPełczyce\tPL\t28-210\t28-2101\t8\t1000000\t0101000020E6100000D13BC9B91361354030E055AC9D524940\t0101000020E6100000DE7C7E73DA603540ACFF18DFBC524940\t0106000020E610000001000000010300000001000000D20000008D8F60F4265C35401215AA9B8B524940D2C5A695425C35401598A9A4A9524940A367695D595C3540A06B0487BC524940A1C211A4525C35408BC3995FCD52494005543882545C35403A9270C6D55249401950148D5A5C35405551BCCADA52494088FC8E3C6B5C3540EDA17DACE05249401C2ECD08CA5C35408B1D8D43FD524940627B7775D85C35400F8DDDF41D534940ACD09BE50D5D35407961C66F6553494017F2ADB4315D3540B0027CB779534940FDA6B052415D35402569ED6C7E534940DF910C946F5D3540D998D71187534940E861B2028D5D3540A0F76B578D5349400E349F73B75D35402D4D00B49C534940BD53A63DCA5D35403B9AD99DA4534940C4DD0F2ED35D3540611514ABAB534940608033E7CF5D35406009A4C4AE534940D2D0F533AB5D3540A46F777BB553494044499231885D35400D09CECFC3534940F17096ED9E5D35409378D4F3C95349400D82D8E3CF5D354003452C62D8534940137DE310165E3540708912E3EB534940E68931FA1B5E354035B91803EB5349404A21DAD8365E3540CBF4F00AE9534940A8261CD5445E35406CD84A43E8534940ADA92C0ABB5E3540906335A7DC5349400E49D2DAD95E354073840CE4D95349408813984EEB5E354056CDBDD1D85349403DF4DDAD2C5F354077A22424D253494076995077545F3540DF1D19ABCD534940207821C2645F354099BF42E6CA534940C97553CA6B5F354094AC1E8BC85349403F3E213B6F5F354060E74B14C653494025D63D0D735F354037887BD1C35349409FCBD424785F3540CD4D8A45C253494000A13F7E805F35405C6ACE0BC1534940E6F91DD48F5F354021109EBFBF534940262B757FAB5F35406AE27899BC534940FA88F3CBBB5F35402AB7A3EEB95349409C487A62E75F3540E285634CB053494074FB9B06FB5F35405B80B6D5AC534940ADD6D3580C603540CD898741AA5349403667333D17603540754AF6BEA75349400B0BEE073C6035406759411DA0534940241D2FEE50603540B2097AB99953494051FD8348866035402E89FDAF845349402B3D2E05FF60354042E1FD028B534940853EFD0C146135403B600D068D534940BAF8DB9E20613540031544937A53494013B46E28216135405334C5D276534940B226BB3E18613540D6C7E8256B5349404BD05FE81161354019EEB7D15B534940A627D1370E613540150FDE0D58534940DFB4CF1907613540ACB24A44535349403D409C2C5A6135406DAA93D85A534940396403E9626135408EF5C3BE535349403E44A33B886135401B5C847357534940A98B14CAC261354071B77FC05E534940B92869B40B623540FD4E93196F534940BECE3C6F196235403D8ED59C7253494099C51FA056623540006201028C53494054DB977D68623540014F5AB8AC534940E9894226746235408AB3226AA2534940D00B772E8C6235403444BA449A5349400A078C3F9B623540F5A85379965349403F3A75E5B3623540A176AEDE97534940F862DE99BF623540B39F200C97534940010BAA57DB6235405000C5C892534940E72F3E16EC62354075F684DB905349404ABD022C4D6335406BCA04B28D534940F11879B4CC6335402E7590D7835349400B8EDCE4016435401AADFE637C534940CCAEC5B82C6435401F1906877253494039FC242D4B643540B6EA84E16D534940878494449B643540513640C461534940D3DA34B6D7643540D788601C5C5349403A4B7FE5F7643540F1C2312658534940B0A1E58A9C6535402B02F797385349404E6D5FF6A16535405559CAE8365349403316F2ADB4653540408E41823D534940F27794EFBE65354032A0CD60425349407843BF5BC56535402C3FBA224253494099B21D9D0466354059B1AEC046534940090FE4EA11663540E99FE06245534940A6E5513B0D66354031105F81435349408D43A275F9653540CAF500272553494054E17437F4653540C586B883225349404721C9ACDE653540D917BFDF1E5349409FFBBCF3D5653540F3F56BA11A53494011CE0248C8653540FF44C07C0D534940A4A60293C0653540CB6548BA0B53494090B81160A26535401332EB200A5349407AC7293A92653540EF6F75A50A534940100BB5A67965354085C5F2F8075349408ACFF819726535400243FBFD07534940FF20376854653540F42334380053494087FBC8AD49653540A7A091BEFF5249400F5A59EC4065354038C30DF8FC52494048A41243176535403ABB1006F95249400BFB2C85F66435401FA0A0B9F35249407C09BA62EB643540A3B83E07F1524940D42B6519E2643540166C239EEC524940607AFB73D164354022B53F06E152494044CCDBC7C0643540A244F064DC524940856A3986B6643540A2A64C20DB524940B7B585E7A56435407707C25FDD524940F5F34B69A2643540963A1279DC5249406A60F591A5643540B25879B8D352494026E9F582AA643540095B47B0CC524940DAE9077591643540543651F0B952494023FCE659A46435409728D604AC524940CA75AE83DE643540B7AC0CF49A5249408C50C7BEBF643540E3395B406852494032074147AB64354071975874465249406EC905C2A96435402CC9F08E42524940E78CCD339B6435402EC1F39C3E5249407E9D8A0A8B64354077514F7A3A52494004FE953A6D6435401CF1643733524940B8B475CB696435408D7E349C325249407CF2B0506B6435409AEA6E4331524940629E3AFB6F64354034958FEE31524940F455F2B1BB643540E133C813F7514940C830822106653540058D9944BD514940C474C69C0C6535404D3F975FBC5149402CC6AF0E366535409768DA0FC2514940BF3D192D51653540E435AFEAAC514940134A5F0839653540D85F1B96AB51494060483DFA15653540EF0802BFA15149402199695611653540D4A5DA029D5149405041D9EFE4643540A1A4C00298514940BC88A53792643540C9E0720690514940AB17320D79643540B96D84EA8B514940CDEF8F5264643540DFDF450488514940231A38FB5E6435400FAC996B875149405E4E0988496435403D6304F97E5149405EE3E94B2564354005DF347D7651494069B57691F8633540B5B002D7705149401E3B037EE86335401808A7AA7551494069554B3ACA6335403F16478A6D514940667330F6B96335408D6BD7DF6D514940D2883EC4AB633540CABD0A3A6B514940BBF083F3A9633540384D9F1D70514940381D5C959F6335405C7FA6B97051494041F273E899633540F629C764715149400FA1A5869163354066F3DD5273514940D451691F8663354007D1FF1774514940575B56067A6335404E6958E7735149408089D3A46F633540F551A11573514940C637143E5B6335401577BCC96F5149409C3F5C284F63354027E8E5666E514940F243A511336335406F6CD15D6D514940074E6CF4206335406FAE505A6E5149402D184B47EF623540BB59CD84705149409E5A22BCE26235402033ABD2715149401EE7919AD1623540596DFE5F75514940C2E2CB9FCA6235405F865A2E76514940B27AD168BC623540FBB2B453735149409EFAF664B462354007A925677251494080208A13A9623540194229B5725149402E2526039B62354013F5824F73514940EA735A5C886235406C54F190735149407AD44E8358623540A38790A971514940D204E51137623540E53AD7416F5149405D55F65D11623540BCA7BC676E5149405889C3E3EC61354028DAB0016C5149406C73AD07DD61354059AC3CDC69514940ACE23213B161354052F4C0C7605149405DEB41F79B613540185E49F25C514940027C5CC070613540B60CDD91565149409838F24064613540A04C4810535149402ADDA7F45D613540E2B19FC55251494058772CB649613540065A70F552514940122A82493B613540E9EAD8525151494071B9B0242F613540B4F7F3B74E5149409923754C2761354079831E204E514940687682A21E6135406D1D1CEC4D514940085C57CC086135408AFC44AF505149407039A80E03613540E3FF8EA8505149404BCADDE7F86035404983802150514940A9195245F160354067A263624E514940CC762A85E5603540DF4EC7084D5149406BFDE373DD603540321F10E84C514940D662A6A3D2603540A97D84AB4D514940C64263DCC36035405B6A73524E514940447BAB64B6603540AF68CE554E514940F6C07DD3AA603540FD6772D64C51494027A435069D603540B573F5BE4C514940BA1798158A603540DFF2A2C04C514940F3B803D083603540B088AB144C5149402418BD0974603540E659EE714B514940DB1C42F053603540637BD22E4B5149404F18DEF64E6035405EAA2DD049514940F76A91FEA85F3540FA08A12875514940FEB1B5638F5F354096D39E92735149400C10BBA58B5F354010536C1679514940338001CE9C5F3540E4141DC9E551494061C9552C7E5F35402588A9E3E751494011FFB0A5475F35406FC5596CEE5149404CCD7921785F35400E198F52095249403561FBC9185F3540C613E6E2145249407514D67C4B5F3540F5835F8F2E52494012C9EB1C5E5F35408E90268348524940307777AE395F3540A5B84F33495249402E4F31186D5D3540E0F8DA334B52494071F55267A45C3540991E03684A52494070795160A65C354017FE672849524940A084E3439A5C35404654F2FB48524940CD76853E585C3540C14A4FA26F5249408D8F60F4265C35401215AA9B8B524940\tneighbourhood\tis in foobar\tpowiat staszowski___6___2635574___województwo świętokrzyskie___4___130914___gmina Bogoria___7___2963727\t\"{\"\"\"\",name:genitive===Pełczyczyc___name:adjective===pełczycki}\"";
importer.processData(line);
EasyMock.verify(citySubdivisionDao);
}
@Test
public void processWithknownCityAndAdm_CityThatIsAlreadyAMunicipalityShouldAlwaysBe(){
final SolrResponseDto solrResponseDtoCity = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoCity.getFeature_id()).andReturn(123L).times(2);
EasyMock.replay(solrResponseDtoCity);
final SolrResponseDto solrResponseDtoAdm = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoAdm.getFeature_id()).andReturn(4356L).times(2);
EasyMock.replay(solrResponseDtoAdm);
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter(){
@Override
protected SolrResponseDto getNearestByPlaceType(Point location, String name, String countryCode,Class[]placetype, Geometry shape, Class target) {
if (!name.equals("Pełczyce") || !countryCode.equals("PL")|| placetype != Constants.ONLY_CITY_PLACETYPE){
throw new RuntimeException("the function is not called with the correct parameter");
}
return solrResponseDtoCity;
};
@Override
protected SolrResponseDto getAdm(String name, String countryCode) {
if (!name.equals("gmina Bogoria") || !countryCode.equals("PL")){
throw new RuntimeException("the function is not called with the correct parameter");
}
return solrResponseDtoAdm;
}
@Override
void savecity(GisFeature city) {
super.savecity(city);
Assert.assertEquals("village", city.getAmenity());
Assert.assertEquals("When a city is already present, we overide the name","Pełczyce", city.getName());
Assert.assertEquals("When a city is already present, we overide the countrycode","PL", city.getCountryCode());
Assert.assertEquals("When a city is already present, we overide the lat",50.6454D, city.getLatitude().doubleValue(),0.01);
Assert.assertEquals("When a city is already present, we overide the long",21.379D, city.getLongitude().doubleValue(),0.01);
Assert.assertEquals("When a city is already present, we set the admin centre lat",50.646D, city.getAdminCentreLatitude().doubleValue(),0.01);
Assert.assertEquals("When a city is already present, we set the admin centre long",21.378D, city.getAdminCentreLongitude().doubleValue(),0.01);
Assert.assertEquals(6530243L, city.getOpenstreetmapId().longValue());
Assert.assertEquals(1000000L, city.getPopulation().longValue());
Assert.assertEquals(2, city.getZipCodes().size());
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("28-210")));
Assert.assertTrue( city.getZipCodes().contains(new ZipCode("28-2101")));
Assert.assertEquals(generator.getBestZip(city.getZipCodes()), city.getZipCode());
Assert.assertTrue("city should still be a municipality because it was before, even if it is a node, a previous condition make this city a municipality",((City)city).isMunicipality());
Assert.assertEquals(generator.generateLabel(city), city.getLabel());
Assert.assertTrue("alternate labels are empty and shouldn't be", city.getAlternateLabels().size()!=0);
Assert.assertEquals(generator.generateLabels(city).size(), city.getAlternateLabels().size());
Assert.assertEquals(generator.getFullyQualifiedName(city), city.getFullyQualifiedName());
}
};
ICityDao cityDao = EasyMock.createMock(ICityDao.class);
City city=new City();
city.setName("initial name");
city.setCountryCode("DE");
city.setLocation(GeolocHelper.createPoint(30D, 20D));
city.setFeatureId(123L);
city.setMunicipality(true);
EasyMock.expect(cityDao.getByFeatureId(123L)).andReturn(city);
EasyMock.expect(cityDao.save(city)).andReturn(city);
EasyMock.replay(cityDao);
importer.setCityDao(cityDao);
IAdmDao admDao = EasyMock.createMock(IAdmDao.class);
Adm adm = new Adm(2);
adm.setName("admName");
EasyMock.expect(admDao.getByFeatureId(4356L)).andReturn(adm);
EasyMock.replay(admDao);
importer.setAdmDao(admDao);
importer.setMunicipalityDetector(new MunicipalityDetector());
String line= "R\t6530243\t3009735615\tPełczyce\tPL\t28-210\t28-2101\t8\t1000000\t0101000020E6100000D13BC9B91361354030E055AC9D524940\t0101000020E6100000DE7C7E73DA603540ACFF18DFBC524940\t0106000020E610000001000000010300000001000000D20000008D8F60F4265C35401215AA9B8B524940D2C5A695425C35401598A9A4A9524940A367695D595C3540A06B0487BC524940A1C211A4525C35408BC3995FCD52494005543882545C35403A9270C6D55249401950148D5A5C35405551BCCADA52494088FC8E3C6B5C3540EDA17DACE05249401C2ECD08CA5C35408B1D8D43FD524940627B7775D85C35400F8DDDF41D534940ACD09BE50D5D35407961C66F6553494017F2ADB4315D3540B0027CB779534940FDA6B052415D35402569ED6C7E534940DF910C946F5D3540D998D71187534940E861B2028D5D3540A0F76B578D5349400E349F73B75D35402D4D00B49C534940BD53A63DCA5D35403B9AD99DA4534940C4DD0F2ED35D3540611514ABAB534940608033E7CF5D35406009A4C4AE534940D2D0F533AB5D3540A46F777BB553494044499231885D35400D09CECFC3534940F17096ED9E5D35409378D4F3C95349400D82D8E3CF5D354003452C62D8534940137DE310165E3540708912E3EB534940E68931FA1B5E354035B91803EB5349404A21DAD8365E3540CBF4F00AE9534940A8261CD5445E35406CD84A43E8534940ADA92C0ABB5E3540906335A7DC5349400E49D2DAD95E354073840CE4D95349408813984EEB5E354056CDBDD1D85349403DF4DDAD2C5F354077A22424D253494076995077545F3540DF1D19ABCD534940207821C2645F354099BF42E6CA534940C97553CA6B5F354094AC1E8BC85349403F3E213B6F5F354060E74B14C653494025D63D0D735F354037887BD1C35349409FCBD424785F3540CD4D8A45C253494000A13F7E805F35405C6ACE0BC1534940E6F91DD48F5F354021109EBFBF534940262B757FAB5F35406AE27899BC534940FA88F3CBBB5F35402AB7A3EEB95349409C487A62E75F3540E285634CB053494074FB9B06FB5F35405B80B6D5AC534940ADD6D3580C603540CD898741AA5349403667333D17603540754AF6BEA75349400B0BEE073C6035406759411DA0534940241D2FEE50603540B2097AB99953494051FD8348866035402E89FDAF845349402B3D2E05FF60354042E1FD028B534940853EFD0C146135403B600D068D534940BAF8DB9E20613540031544937A53494013B46E28216135405334C5D276534940B226BB3E18613540D6C7E8256B5349404BD05FE81161354019EEB7D15B534940A627D1370E613540150FDE0D58534940DFB4CF1907613540ACB24A44535349403D409C2C5A6135406DAA93D85A534940396403E9626135408EF5C3BE535349403E44A33B886135401B5C847357534940A98B14CAC261354071B77FC05E534940B92869B40B623540FD4E93196F534940BECE3C6F196235403D8ED59C7253494099C51FA056623540006201028C53494054DB977D68623540014F5AB8AC534940E9894226746235408AB3226AA2534940D00B772E8C6235403444BA449A5349400A078C3F9B623540F5A85379965349403F3A75E5B3623540A176AEDE97534940F862DE99BF623540B39F200C97534940010BAA57DB6235405000C5C892534940E72F3E16EC62354075F684DB905349404ABD022C4D6335406BCA04B28D534940F11879B4CC6335402E7590D7835349400B8EDCE4016435401AADFE637C534940CCAEC5B82C6435401F1906877253494039FC242D4B643540B6EA84E16D534940878494449B643540513640C461534940D3DA34B6D7643540D788601C5C5349403A4B7FE5F7643540F1C2312658534940B0A1E58A9C6535402B02F797385349404E6D5FF6A16535405559CAE8365349403316F2ADB4653540408E41823D534940F27794EFBE65354032A0CD60425349407843BF5BC56535402C3FBA224253494099B21D9D0466354059B1AEC046534940090FE4EA11663540E99FE06245534940A6E5513B0D66354031105F81435349408D43A275F9653540CAF500272553494054E17437F4653540C586B883225349404721C9ACDE653540D917BFDF1E5349409FFBBCF3D5653540F3F56BA11A53494011CE0248C8653540FF44C07C0D534940A4A60293C0653540CB6548BA0B53494090B81160A26535401332EB200A5349407AC7293A92653540EF6F75A50A534940100BB5A67965354085C5F2F8075349408ACFF819726535400243FBFD07534940FF20376854653540F42334380053494087FBC8AD49653540A7A091BEFF5249400F5A59EC4065354038C30DF8FC52494048A41243176535403ABB1006F95249400BFB2C85F66435401FA0A0B9F35249407C09BA62EB643540A3B83E07F1524940D42B6519E2643540166C239EEC524940607AFB73D164354022B53F06E152494044CCDBC7C0643540A244F064DC524940856A3986B6643540A2A64C20DB524940B7B585E7A56435407707C25FDD524940F5F34B69A2643540963A1279DC5249406A60F591A5643540B25879B8D352494026E9F582AA643540095B47B0CC524940DAE9077591643540543651F0B952494023FCE659A46435409728D604AC524940CA75AE83DE643540B7AC0CF49A5249408C50C7BEBF643540E3395B406852494032074147AB64354071975874465249406EC905C2A96435402CC9F08E42524940E78CCD339B6435402EC1F39C3E5249407E9D8A0A8B64354077514F7A3A52494004FE953A6D6435401CF1643733524940B8B475CB696435408D7E349C325249407CF2B0506B6435409AEA6E4331524940629E3AFB6F64354034958FEE31524940F455F2B1BB643540E133C813F7514940C830822106653540058D9944BD514940C474C69C0C6535404D3F975FBC5149402CC6AF0E366535409768DA0FC2514940BF3D192D51653540E435AFEAAC514940134A5F0839653540D85F1B96AB51494060483DFA15653540EF0802BFA15149402199695611653540D4A5DA029D5149405041D9EFE4643540A1A4C00298514940BC88A53792643540C9E0720690514940AB17320D79643540B96D84EA8B514940CDEF8F5264643540DFDF450488514940231A38FB5E6435400FAC996B875149405E4E0988496435403D6304F97E5149405EE3E94B2564354005DF347D7651494069B57691F8633540B5B002D7705149401E3B037EE86335401808A7AA7551494069554B3ACA6335403F16478A6D514940667330F6B96335408D6BD7DF6D514940D2883EC4AB633540CABD0A3A6B514940BBF083F3A9633540384D9F1D70514940381D5C959F6335405C7FA6B97051494041F273E899633540F629C764715149400FA1A5869163354066F3DD5273514940D451691F8663354007D1FF1774514940575B56067A6335404E6958E7735149408089D3A46F633540F551A11573514940C637143E5B6335401577BCC96F5149409C3F5C284F63354027E8E5666E514940F243A511336335406F6CD15D6D514940074E6CF4206335406FAE505A6E5149402D184B47EF623540BB59CD84705149409E5A22BCE26235402033ABD2715149401EE7919AD1623540596DFE5F75514940C2E2CB9FCA6235405F865A2E76514940B27AD168BC623540FBB2B453735149409EFAF664B462354007A925677251494080208A13A9623540194229B5725149402E2526039B62354013F5824F73514940EA735A5C886235406C54F190735149407AD44E8358623540A38790A971514940D204E51137623540E53AD7416F5149405D55F65D11623540BCA7BC676E5149405889C3E3EC61354028DAB0016C5149406C73AD07DD61354059AC3CDC69514940ACE23213B161354052F4C0C7605149405DEB41F79B613540185E49F25C514940027C5CC070613540B60CDD91565149409838F24064613540A04C4810535149402ADDA7F45D613540E2B19FC55251494058772CB649613540065A70F552514940122A82493B613540E9EAD8525151494071B9B0242F613540B4F7F3B74E5149409923754C2761354079831E204E514940687682A21E6135406D1D1CEC4D514940085C57CC086135408AFC44AF505149407039A80E03613540E3FF8EA8505149404BCADDE7F86035404983802150514940A9195245F160354067A263624E514940CC762A85E5603540DF4EC7084D5149406BFDE373DD603540321F10E84C514940D662A6A3D2603540A97D84AB4D514940C64263DCC36035405B6A73524E514940447BAB64B6603540AF68CE554E514940F6C07DD3AA603540FD6772D64C51494027A435069D603540B573F5BE4C514940BA1798158A603540DFF2A2C04C514940F3B803D083603540B088AB144C5149402418BD0974603540E659EE714B514940DB1C42F053603540637BD22E4B5149404F18DEF64E6035405EAA2DD049514940F76A91FEA85F3540FA08A12875514940FEB1B5638F5F354096D39E92735149400C10BBA58B5F354010536C1679514940338001CE9C5F3540E4141DC9E551494061C9552C7E5F35402588A9E3E751494011FFB0A5475F35406FC5596CEE5149404CCD7921785F35400E198F52095249403561FBC9185F3540C613E6E2145249407514D67C4B5F3540F5835F8F2E52494012C9EB1C5E5F35408E90268348524940307777AE395F3540A5B84F33495249402E4F31186D5D3540E0F8DA334B52494071F55267A45C3540991E03684A52494070795160A65C354017FE672849524940A084E3439A5C35404654F2FB48524940CD76853E585C3540C14A4FA26F5249408D8F60F4265C35401215AA9B8B524940\tvillage\tis in foobar\tpowiat staszowski___6___2635574___województwo świętokrzyskie___4___130914___gmina Bogoria___7___2963727\t\"{\"\"\"\",name:genitive===Pełczyczyc___name:adjective===pełczycki}\"";
importer.processData(line);
EasyMock.verify(cityDao);
}
@Test
public void processWithknownCityAndAdm(){
final SolrResponseDto solrResponseDtoCity = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoCity.getFeature_id()).andReturn(123L);
EasyMock.replay(solrResponseDtoCity);
final SolrResponseDto solrResponseDtoAdm = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoAdm.getFeature_id()).andReturn(4356L).times(2);
EasyMock.replay(solrResponseDtoAdm);
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter(){
@Override
protected SolrResponseDto getNearestByPlaceType(Point location, String name, String countryCode,Class[]placetype, Geometry shape, Class target) {
if (!name.equals("Pełczyce") || !countryCode.equals("PL")|| placetype != Constants.ONLY_CITY_PLACETYPE){
throw new RuntimeException("the function is not called with the correct parameter");
}
return solrResponseDtoCity;
};
@Override
protected SolrResponseDto getAdm(String name, String countryCode) {
if (!name.equals("gmina Bogoria") || !countryCode.equals("PL")){
throw new RuntimeException("the function is not called with the correct parameter : "+name+";"+countryCode);
}
return solrResponseDtoAdm;
}
@Override
void savecity(GisFeature city) {
super.savecity(city);
Assert.assertEquals("village", city.getAmenity());
Assert.assertEquals("Pełczyce", city.getName());
Assert.assertEquals("PL", city.getCountryCode());
Assert.assertEquals(50.64543, city.getLatitude().doubleValue(),0.1);
Assert.assertEquals(21.379207240704833, city.getLongitude().doubleValue(),0.1);
Assert.assertEquals(50.646, city.getAdminCentreLatitude().doubleValue(),0.1);
Assert.assertEquals(21.378, city.getAdminCentreLongitude().doubleValue(),0.1);
Assert.assertEquals(6530243L, city.getOpenstreetmapId().longValue());
Assert.assertEquals(1000000L, city.getPopulation().longValue());
Assert.assertEquals(2, city.getZipCodes().size());
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("28-210")));
Assert.assertTrue( city.getZipCodes().contains(new ZipCode("28-2101")));
Assert.assertEquals(generator.getBestZip(city.getZipCodes()), city.getZipCode());
Assert.assertEquals(generator.generateLabel(city), city.getLabel());
Assert.assertTrue("alternate labels are empty and shouldn't be", city.getAlternateLabels().size()!=0);
Assert.assertEquals(generator.generateLabels(city).size(), city.getAlternateLabels().size());
Assert.assertEquals(generator.getFullyQualifiedName(city), city.getFullyQualifiedName());
}
};
ICityDao cityDao = EasyMock.createMock(ICityDao.class);
City city=new City();
city.setName("initial name");
city.setCountryCode("DE");
city.setLocation(GeolocHelper.createPoint(30D, 20D));
city.setFeatureId(123L);
EasyMock.expect(cityDao.getByFeatureId(123L)).andReturn(city);
EasyMock.expect(cityDao.save(city)).andReturn(city);
EasyMock.replay(cityDao);
importer.setCityDao(cityDao);
IAdmDao admDao = EasyMock.createMock(IAdmDao.class);
Adm adm = new Adm(2);
adm.setName("admName");
EasyMock.expect(admDao.getByFeatureId(4356L)).andReturn(adm);
EasyMock.replay(admDao);
importer.setAdmDao(admDao);
importer.setMunicipalityDetector(new MunicipalityDetector());
String line= "R\t6530243\t3009735615\tPełczyce\tPL\t28-210\t28-2101\t8\t1000000\t0101000020E6100000D13BC9B91361354030E055AC9D524940\t0101000020E6100000DE7C7E73DA603540ACFF18DFBC524940\t0106000020E610000001000000010300000001000000D20000008D8F60F4265C35401215AA9B8B524940D2C5A695425C35401598A9A4A9524940A367695D595C3540A06B0487BC524940A1C211A4525C35408BC3995FCD52494005543882545C35403A9270C6D55249401950148D5A5C35405551BCCADA52494088FC8E3C6B5C3540EDA17DACE05249401C2ECD08CA5C35408B1D8D43FD524940627B7775D85C35400F8DDDF41D534940ACD09BE50D5D35407961C66F6553494017F2ADB4315D3540B0027CB779534940FDA6B052415D35402569ED6C7E534940DF910C946F5D3540D998D71187534940E861B2028D5D3540A0F76B578D5349400E349F73B75D35402D4D00B49C534940BD53A63DCA5D35403B9AD99DA4534940C4DD0F2ED35D3540611514ABAB534940608033E7CF5D35406009A4C4AE534940D2D0F533AB5D3540A46F777BB553494044499231885D35400D09CECFC3534940F17096ED9E5D35409378D4F3C95349400D82D8E3CF5D354003452C62D8534940137DE310165E3540708912E3EB534940E68931FA1B5E354035B91803EB5349404A21DAD8365E3540CBF4F00AE9534940A8261CD5445E35406CD84A43E8534940ADA92C0ABB5E3540906335A7DC5349400E49D2DAD95E354073840CE4D95349408813984EEB5E354056CDBDD1D85349403DF4DDAD2C5F354077A22424D253494076995077545F3540DF1D19ABCD534940207821C2645F354099BF42E6CA534940C97553CA6B5F354094AC1E8BC85349403F3E213B6F5F354060E74B14C653494025D63D0D735F354037887BD1C35349409FCBD424785F3540CD4D8A45C253494000A13F7E805F35405C6ACE0BC1534940E6F91DD48F5F354021109EBFBF534940262B757FAB5F35406AE27899BC534940FA88F3CBBB5F35402AB7A3EEB95349409C487A62E75F3540E285634CB053494074FB9B06FB5F35405B80B6D5AC534940ADD6D3580C603540CD898741AA5349403667333D17603540754AF6BEA75349400B0BEE073C6035406759411DA0534940241D2FEE50603540B2097AB99953494051FD8348866035402E89FDAF845349402B3D2E05FF60354042E1FD028B534940853EFD0C146135403B600D068D534940BAF8DB9E20613540031544937A53494013B46E28216135405334C5D276534940B226BB3E18613540D6C7E8256B5349404BD05FE81161354019EEB7D15B534940A627D1370E613540150FDE0D58534940DFB4CF1907613540ACB24A44535349403D409C2C5A6135406DAA93D85A534940396403E9626135408EF5C3BE535349403E44A33B886135401B5C847357534940A98B14CAC261354071B77FC05E534940B92869B40B623540FD4E93196F534940BECE3C6F196235403D8ED59C7253494099C51FA056623540006201028C53494054DB977D68623540014F5AB8AC534940E9894226746235408AB3226AA2534940D00B772E8C6235403444BA449A5349400A078C3F9B623540F5A85379965349403F3A75E5B3623540A176AEDE97534940F862DE99BF623540B39F200C97534940010BAA57DB6235405000C5C892534940E72F3E16EC62354075F684DB905349404ABD022C4D6335406BCA04B28D534940F11879B4CC6335402E7590D7835349400B8EDCE4016435401AADFE637C534940CCAEC5B82C6435401F1906877253494039FC242D4B643540B6EA84E16D534940878494449B643540513640C461534940D3DA34B6D7643540D788601C5C5349403A4B7FE5F7643540F1C2312658534940B0A1E58A9C6535402B02F797385349404E6D5FF6A16535405559CAE8365349403316F2ADB4653540408E41823D534940F27794EFBE65354032A0CD60425349407843BF5BC56535402C3FBA224253494099B21D9D0466354059B1AEC046534940090FE4EA11663540E99FE06245534940A6E5513B0D66354031105F81435349408D43A275F9653540CAF500272553494054E17437F4653540C586B883225349404721C9ACDE653540D917BFDF1E5349409FFBBCF3D5653540F3F56BA11A53494011CE0248C8653540FF44C07C0D534940A4A60293C0653540CB6548BA0B53494090B81160A26535401332EB200A5349407AC7293A92653540EF6F75A50A534940100BB5A67965354085C5F2F8075349408ACFF819726535400243FBFD07534940FF20376854653540F42334380053494087FBC8AD49653540A7A091BEFF5249400F5A59EC4065354038C30DF8FC52494048A41243176535403ABB1006F95249400BFB2C85F66435401FA0A0B9F35249407C09BA62EB643540A3B83E07F1524940D42B6519E2643540166C239EEC524940607AFB73D164354022B53F06E152494044CCDBC7C0643540A244F064DC524940856A3986B6643540A2A64C20DB524940B7B585E7A56435407707C25FDD524940F5F34B69A2643540963A1279DC5249406A60F591A5643540B25879B8D352494026E9F582AA643540095B47B0CC524940DAE9077591643540543651F0B952494023FCE659A46435409728D604AC524940CA75AE83DE643540B7AC0CF49A5249408C50C7BEBF643540E3395B406852494032074147AB64354071975874465249406EC905C2A96435402CC9F08E42524940E78CCD339B6435402EC1F39C3E5249407E9D8A0A8B64354077514F7A3A52494004FE953A6D6435401CF1643733524940B8B475CB696435408D7E349C325249407CF2B0506B6435409AEA6E4331524940629E3AFB6F64354034958FEE31524940F455F2B1BB643540E133C813F7514940C830822106653540058D9944BD514940C474C69C0C6535404D3F975FBC5149402CC6AF0E366535409768DA0FC2514940BF3D192D51653540E435AFEAAC514940134A5F0839653540D85F1B96AB51494060483DFA15653540EF0802BFA15149402199695611653540D4A5DA029D5149405041D9EFE4643540A1A4C00298514940BC88A53792643540C9E0720690514940AB17320D79643540B96D84EA8B514940CDEF8F5264643540DFDF450488514940231A38FB5E6435400FAC996B875149405E4E0988496435403D6304F97E5149405EE3E94B2564354005DF347D7651494069B57691F8633540B5B002D7705149401E3B037EE86335401808A7AA7551494069554B3ACA6335403F16478A6D514940667330F6B96335408D6BD7DF6D514940D2883EC4AB633540CABD0A3A6B514940BBF083F3A9633540384D9F1D70514940381D5C959F6335405C7FA6B97051494041F273E899633540F629C764715149400FA1A5869163354066F3DD5273514940D451691F8663354007D1FF1774514940575B56067A6335404E6958E7735149408089D3A46F633540F551A11573514940C637143E5B6335401577BCC96F5149409C3F5C284F63354027E8E5666E514940F243A511336335406F6CD15D6D514940074E6CF4206335406FAE505A6E5149402D184B47EF623540BB59CD84705149409E5A22BCE26235402033ABD2715149401EE7919AD1623540596DFE5F75514940C2E2CB9FCA6235405F865A2E76514940B27AD168BC623540FBB2B453735149409EFAF664B462354007A925677251494080208A13A9623540194229B5725149402E2526039B62354013F5824F73514940EA735A5C886235406C54F190735149407AD44E8358623540A38790A971514940D204E51137623540E53AD7416F5149405D55F65D11623540BCA7BC676E5149405889C3E3EC61354028DAB0016C5149406C73AD07DD61354059AC3CDC69514940ACE23213B161354052F4C0C7605149405DEB41F79B613540185E49F25C514940027C5CC070613540B60CDD91565149409838F24064613540A04C4810535149402ADDA7F45D613540E2B19FC55251494058772CB649613540065A70F552514940122A82493B613540E9EAD8525151494071B9B0242F613540B4F7F3B74E5149409923754C2761354079831E204E514940687682A21E6135406D1D1CEC4D514940085C57CC086135408AFC44AF505149407039A80E03613540E3FF8EA8505149404BCADDE7F86035404983802150514940A9195245F160354067A263624E514940CC762A85E5603540DF4EC7084D5149406BFDE373DD603540321F10E84C514940D662A6A3D2603540A97D84AB4D514940C64263DCC36035405B6A73524E514940447BAB64B6603540AF68CE554E514940F6C07DD3AA603540FD6772D64C51494027A435069D603540B573F5BE4C514940BA1798158A603540DFF2A2C04C514940F3B803D083603540B088AB144C5149402418BD0974603540E659EE714B514940DB1C42F053603540637BD22E4B5149404F18DEF64E6035405EAA2DD049514940F76A91FEA85F3540FA08A12875514940FEB1B5638F5F354096D39E92735149400C10BBA58B5F354010536C1679514940338001CE9C5F3540E4141DC9E551494061C9552C7E5F35402588A9E3E751494011FFB0A5475F35406FC5596CEE5149404CCD7921785F35400E198F52095249403561FBC9185F3540C613E6E2145249407514D67C4B5F3540F5835F8F2E52494012C9EB1C5E5F35408E90268348524940307777AE395F3540A5B84F33495249402E4F31186D5D3540E0F8DA334B52494071F55267A45C3540991E03684A52494070795160A65C354017FE672849524940A084E3439A5C35404654F2FB48524940CD76853E585C3540C14A4FA26F5249408D8F60F4265C35401215AA9B8B524940\tvillage\tis in foobar\tpowiat staszowski___6___2635574___województwo świętokrzyskie___4___130914___gmina Bogoria___7___2963727\t\"{\"\"\"\",name:genitive===Pełczyczyc___name:adjective===pełczycki}\"";
importer.processData(line);
EasyMock.verify(cityDao);
}
@Test
public void processData_subdivision(){
final SolrResponseDto solrResponseDtoCity = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoCity.getPlacetype()).andReturn(CitySubdivision.class.getSimpleName());
EasyMock.expect(solrResponseDtoCity.getFeature_id()).andReturn(123L);
EasyMock.replay(solrResponseDtoCity);
final SolrResponseDto solrResponseDtoAdm = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoAdm.getFeature_id()).andReturn(4356L).times(2);
EasyMock.replay(solrResponseDtoAdm);
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter(){
@Override
protected SolrResponseDto getNearestByPlaceType(Point location, String name, String countryCode,Class[]placetype, Geometry shape, Class target) {
return solrResponseDtoCity;
};
@Override
protected SolrResponseDto getAdm(String name, String countryCode) {
return solrResponseDtoAdm;
}
void savecity(GisFeature city) {
Assert.assertTrue(city instanceof CitySubdivision);
}
};
ICityDao cityDao = EasyMock.createMock(ICityDao.class);
City city=new City();
city.setName("initial name");
city.setCountryCode("DE");
city.setLocation(GeolocHelper.createPoint(30D, 20D));
city.setFeatureId(123L);
EasyMock.replay(cityDao);
importer.setCityDao(cityDao);
IAdmDao admDao = EasyMock.createMock(IAdmDao.class);
Adm adm = new Adm(2);
adm.setName("admName");
EasyMock.expect(admDao.getByFeatureId(4356L)).andReturn(adm);
EasyMock.replay(admDao);
importer.setAdmDao(admDao);
ICitySubdivisionDao subdivisionDao = EasyMock.createMock(ICitySubdivisionDao.class);
CitySubdivision citySubdivision = new CitySubdivision();
EasyMock.expect(subdivisionDao.getByFeatureId(123L)).andReturn(citySubdivision);
EasyMock.expect(subdivisionDao.save(citySubdivision)).andReturn(citySubdivision);
EasyMock.replay(subdivisionDao);
importer.setCitySubdivisionDao(subdivisionDao);
importer.setMunicipalityDetector(new MunicipalityDetector());
String line= "R\t6530243\t3009735615\tPełczyce\tPL\t28-210\t28-2101\t8\t1000000\t0101000020E6100000D13BC9B91361354030E055AC9D524940\t0101000020E6100000DE7C7E73DA603540ACFF18DFBC524940\t0106000020E610000001000000010300000001000000D20000008D8F60F4265C35401215AA9B8B524940D2C5A695425C35401598A9A4A9524940A367695D595C3540A06B0487BC524940A1C211A4525C35408BC3995FCD52494005543882545C35403A9270C6D55249401950148D5A5C35405551BCCADA52494088FC8E3C6B5C3540EDA17DACE05249401C2ECD08CA5C35408B1D8D43FD524940627B7775D85C35400F8DDDF41D534940ACD09BE50D5D35407961C66F6553494017F2ADB4315D3540B0027CB779534940FDA6B052415D35402569ED6C7E534940DF910C946F5D3540D998D71187534940E861B2028D5D3540A0F76B578D5349400E349F73B75D35402D4D00B49C534940BD53A63DCA5D35403B9AD99DA4534940C4DD0F2ED35D3540611514ABAB534940608033E7CF5D35406009A4C4AE534940D2D0F533AB5D3540A46F777BB553494044499231885D35400D09CECFC3534940F17096ED9E5D35409378D4F3C95349400D82D8E3CF5D354003452C62D8534940137DE310165E3540708912E3EB534940E68931FA1B5E354035B91803EB5349404A21DAD8365E3540CBF4F00AE9534940A8261CD5445E35406CD84A43E8534940ADA92C0ABB5E3540906335A7DC5349400E49D2DAD95E354073840CE4D95349408813984EEB5E354056CDBDD1D85349403DF4DDAD2C5F354077A22424D253494076995077545F3540DF1D19ABCD534940207821C2645F354099BF42E6CA534940C97553CA6B5F354094AC1E8BC85349403F3E213B6F5F354060E74B14C653494025D63D0D735F354037887BD1C35349409FCBD424785F3540CD4D8A45C253494000A13F7E805F35405C6ACE0BC1534940E6F91DD48F5F354021109EBFBF534940262B757FAB5F35406AE27899BC534940FA88F3CBBB5F35402AB7A3EEB95349409C487A62E75F3540E285634CB053494074FB9B06FB5F35405B80B6D5AC534940ADD6D3580C603540CD898741AA5349403667333D17603540754AF6BEA75349400B0BEE073C6035406759411DA0534940241D2FEE50603540B2097AB99953494051FD8348866035402E89FDAF845349402B3D2E05FF60354042E1FD028B534940853EFD0C146135403B600D068D534940BAF8DB9E20613540031544937A53494013B46E28216135405334C5D276534940B226BB3E18613540D6C7E8256B5349404BD05FE81161354019EEB7D15B534940A627D1370E613540150FDE0D58534940DFB4CF1907613540ACB24A44535349403D409C2C5A6135406DAA93D85A534940396403E9626135408EF5C3BE535349403E44A33B886135401B5C847357534940A98B14CAC261354071B77FC05E534940B92869B40B623540FD4E93196F534940BECE3C6F196235403D8ED59C7253494099C51FA056623540006201028C53494054DB977D68623540014F5AB8AC534940E9894226746235408AB3226AA2534940D00B772E8C6235403444BA449A5349400A078C3F9B623540F5A85379965349403F3A75E5B3623540A176AEDE97534940F862DE99BF623540B39F200C97534940010BAA57DB6235405000C5C892534940E72F3E16EC62354075F684DB905349404ABD022C4D6335406BCA04B28D534940F11879B4CC6335402E7590D7835349400B8EDCE4016435401AADFE637C534940CCAEC5B82C6435401F1906877253494039FC242D4B643540B6EA84E16D534940878494449B643540513640C461534940D3DA34B6D7643540D788601C5C5349403A4B7FE5F7643540F1C2312658534940B0A1E58A9C6535402B02F797385349404E6D5FF6A16535405559CAE8365349403316F2ADB4653540408E41823D534940F27794EFBE65354032A0CD60425349407843BF5BC56535402C3FBA224253494099B21D9D0466354059B1AEC046534940090FE4EA11663540E99FE06245534940A6E5513B0D66354031105F81435349408D43A275F9653540CAF500272553494054E17437F4653540C586B883225349404721C9ACDE653540D917BFDF1E5349409FFBBCF3D5653540F3F56BA11A53494011CE0248C8653540FF44C07C0D534940A4A60293C0653540CB6548BA0B53494090B81160A26535401332EB200A5349407AC7293A92653540EF6F75A50A534940100BB5A67965354085C5F2F8075349408ACFF819726535400243FBFD07534940FF20376854653540F42334380053494087FBC8AD49653540A7A091BEFF5249400F5A59EC4065354038C30DF8FC52494048A41243176535403ABB1006F95249400BFB2C85F66435401FA0A0B9F35249407C09BA62EB643540A3B83E07F1524940D42B6519E2643540166C239EEC524940607AFB73D164354022B53F06E152494044CCDBC7C0643540A244F064DC524940856A3986B6643540A2A64C20DB524940B7B585E7A56435407707C25FDD524940F5F34B69A2643540963A1279DC5249406A60F591A5643540B25879B8D352494026E9F582AA643540095B47B0CC524940DAE9077591643540543651F0B952494023FCE659A46435409728D604AC524940CA75AE83DE643540B7AC0CF49A5249408C50C7BEBF643540E3395B406852494032074147AB64354071975874465249406EC905C2A96435402CC9F08E42524940E78CCD339B6435402EC1F39C3E5249407E9D8A0A8B64354077514F7A3A52494004FE953A6D6435401CF1643733524940B8B475CB696435408D7E349C325249407CF2B0506B6435409AEA6E4331524940629E3AFB6F64354034958FEE31524940F455F2B1BB643540E133C813F7514940C830822106653540058D9944BD514940C474C69C0C6535404D3F975FBC5149402CC6AF0E366535409768DA0FC2514940BF3D192D51653540E435AFEAAC514940134A5F0839653540D85F1B96AB51494060483DFA15653540EF0802BFA15149402199695611653540D4A5DA029D5149405041D9EFE4643540A1A4C00298514940BC88A53792643540C9E0720690514940AB17320D79643540B96D84EA8B514940CDEF8F5264643540DFDF450488514940231A38FB5E6435400FAC996B875149405E4E0988496435403D6304F97E5149405EE3E94B2564354005DF347D7651494069B57691F8633540B5B002D7705149401E3B037EE86335401808A7AA7551494069554B3ACA6335403F16478A6D514940667330F6B96335408D6BD7DF6D514940D2883EC4AB633540CABD0A3A6B514940BBF083F3A9633540384D9F1D70514940381D5C959F6335405C7FA6B97051494041F273E899633540F629C764715149400FA1A5869163354066F3DD5273514940D451691F8663354007D1FF1774514940575B56067A6335404E6958E7735149408089D3A46F633540F551A11573514940C637143E5B6335401577BCC96F5149409C3F5C284F63354027E8E5666E514940F243A511336335406F6CD15D6D514940074E6CF4206335406FAE505A6E5149402D184B47EF623540BB59CD84705149409E5A22BCE26235402033ABD2715149401EE7919AD1623540596DFE5F75514940C2E2CB9FCA6235405F865A2E76514940B27AD168BC623540FBB2B453735149409EFAF664B462354007A925677251494080208A13A9623540194229B5725149402E2526039B62354013F5824F73514940EA735A5C886235406C54F190735149407AD44E8358623540A38790A971514940D204E51137623540E53AD7416F5149405D55F65D11623540BCA7BC676E5149405889C3E3EC61354028DAB0016C5149406C73AD07DD61354059AC3CDC69514940ACE23213B161354052F4C0C7605149405DEB41F79B613540185E49F25C514940027C5CC070613540B60CDD91565149409838F24064613540A04C4810535149402ADDA7F45D613540E2B19FC55251494058772CB649613540065A70F552514940122A82493B613540E9EAD8525151494071B9B0242F613540B4F7F3B74E5149409923754C2761354079831E204E514940687682A21E6135406D1D1CEC4D514940085C57CC086135408AFC44AF505149407039A80E03613540E3FF8EA8505149404BCADDE7F86035404983802150514940A9195245F160354067A263624E514940CC762A85E5603540DF4EC7084D5149406BFDE373DD603540321F10E84C514940D662A6A3D2603540A97D84AB4D514940C64263DCC36035405B6A73524E514940447BAB64B6603540AF68CE554E514940F6C07DD3AA603540FD6772D64C51494027A435069D603540B573F5BE4C514940BA1798158A603540DFF2A2C04C514940F3B803D083603540B088AB144C5149402418BD0974603540E659EE714B514940DB1C42F053603540637BD22E4B5149404F18DEF64E6035405EAA2DD049514940F76A91FEA85F3540FA08A12875514940FEB1B5638F5F354096D39E92735149400C10BBA58B5F354010536C1679514940338001CE9C5F3540E4141DC9E551494061C9552C7E5F35402588A9E3E751494011FFB0A5475F35406FC5596CEE5149404CCD7921785F35400E198F52095249403561FBC9185F3540C613E6E2145249407514D67C4B5F3540F5835F8F2E52494012C9EB1C5E5F35408E90268348524940307777AE395F3540A5B84F33495249402E4F31186D5D3540E0F8DA334B52494071F55267A45C3540991E03684A52494070795160A65C354017FE672849524940A084E3439A5C35404654F2FB48524940CD76853E585C3540C14A4FA26F5249408D8F60F4265C35401215AA9B8B524940\tsuburb\tis in foobar\tpowiat staszowski___6___2635574___województwo świętokrzyskie___4___130914___gmina Bogoria___7___2963727\t\"{\"\"\"\",name:genitive===Pełczyczyc___name:adjective===pełczycki}\"";
importer.processData(line);
EasyMock.verify(cityDao);
}
@Test
public void processData(){
final SolrResponseDto solrResponseDtoCity = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoCity.getFeature_id()).andReturn(123L);
EasyMock.replay(solrResponseDtoCity);
final SolrResponseDto solrResponseDtoAdm = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoAdm.getFeature_id()).andReturn(4356L).times(2);
EasyMock.replay(solrResponseDtoAdm);
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter(){
@Override
protected SolrResponseDto getNearestByPlaceType(Point location, String name, String countryCode,Class[]placetype, Geometry shape, Class target) {
return solrResponseDtoCity;
};
@Override
protected SolrResponseDto getAdm(String name, String countryCode) {
return solrResponseDtoAdm;
}
};
ICityDao cityDao = EasyMock.createMock(ICityDao.class);
City city=new City();
city.setName("initial name");
city.setCountryCode("DE");
city.setLocation(GeolocHelper.createPoint(30D, 20D));
city.setFeatureId(123L);
EasyMock.expect(cityDao.getByFeatureId(123L)).andReturn(city);
EasyMock.expect(cityDao.save(city)).andReturn(city);
EasyMock.replay(cityDao);
importer.setCityDao(cityDao);
List<AdmDTO> dtos = new ArrayList<AdmDTO>();
AdmDTO dto1 = new AdmDTO("admName1", 4, 123L);
AdmDTO dto2 = new AdmDTO("admName2", 5, 123L);
AdmDTO dto3 = new AdmDTO("admName2", 6, 123L);//should be ignre because same name as previous
AdmDTO dto4 = new AdmDTO("admName4", 7, 123L);
AdmDTO dto5 = new AdmDTO("admName5", 8, 123L);//should be ignore because 8 >= 8
dtos.add(dto1);
dtos.add(dto2);
dtos.add(dto3);
dtos.add(dto4);
dtos.add(dto5);
Collections.sort(dtos);
IAdmDao admDao = EasyMock.createMock(IAdmDao.class);
Adm adm = new Adm(2);
adm.setName("admName");
EasyMock.expect(admDao.getByFeatureId(4356L)).andReturn(adm);
EasyMock.replay(admDao);
importer.setAdmDao(admDao);
importer.setMunicipalityDetector(new MunicipalityDetector());
String line= "R\t6530243\t3009735615\tPełczyce\tPL\t28-210\t28-2101\t8\t1000000\t0101000020E6100000D13BC9B91361354030E055AC9D524940\t0101000020E6100000DE7C7E73DA603540ACFF18DFBC524940\t0106000020E610000001000000010300000001000000D20000008D8F60F4265C35401215AA9B8B524940D2C5A695425C35401598A9A4A9524940A367695D595C3540A06B0487BC524940A1C211A4525C35408BC3995FCD52494005543882545C35403A9270C6D55249401950148D5A5C35405551BCCADA52494088FC8E3C6B5C3540EDA17DACE05249401C2ECD08CA5C35408B1D8D43FD524940627B7775D85C35400F8DDDF41D534940ACD09BE50D5D35407961C66F6553494017F2ADB4315D3540B0027CB779534940FDA6B052415D35402569ED6C7E534940DF910C946F5D3540D998D71187534940E861B2028D5D3540A0F76B578D5349400E349F73B75D35402D4D00B49C534940BD53A63DCA5D35403B9AD99DA4534940C4DD0F2ED35D3540611514ABAB534940608033E7CF5D35406009A4C4AE534940D2D0F533AB5D3540A46F777BB553494044499231885D35400D09CECFC3534940F17096ED9E5D35409378D4F3C95349400D82D8E3CF5D354003452C62D8534940137DE310165E3540708912E3EB534940E68931FA1B5E354035B91803EB5349404A21DAD8365E3540CBF4F00AE9534940A8261CD5445E35406CD84A43E8534940ADA92C0ABB5E3540906335A7DC5349400E49D2DAD95E354073840CE4D95349408813984EEB5E354056CDBDD1D85349403DF4DDAD2C5F354077A22424D253494076995077545F3540DF1D19ABCD534940207821C2645F354099BF42E6CA534940C97553CA6B5F354094AC1E8BC85349403F3E213B6F5F354060E74B14C653494025D63D0D735F354037887BD1C35349409FCBD424785F3540CD4D8A45C253494000A13F7E805F35405C6ACE0BC1534940E6F91DD48F5F354021109EBFBF534940262B757FAB5F35406AE27899BC534940FA88F3CBBB5F35402AB7A3EEB95349409C487A62E75F3540E285634CB053494074FB9B06FB5F35405B80B6D5AC534940ADD6D3580C603540CD898741AA5349403667333D17603540754AF6BEA75349400B0BEE073C6035406759411DA0534940241D2FEE50603540B2097AB99953494051FD8348866035402E89FDAF845349402B3D2E05FF60354042E1FD028B534940853EFD0C146135403B600D068D534940BAF8DB9E20613540031544937A53494013B46E28216135405334C5D276534940B226BB3E18613540D6C7E8256B5349404BD05FE81161354019EEB7D15B534940A627D1370E613540150FDE0D58534940DFB4CF1907613540ACB24A44535349403D409C2C5A6135406DAA93D85A534940396403E9626135408EF5C3BE535349403E44A33B886135401B5C847357534940A98B14CAC261354071B77FC05E534940B92869B40B623540FD4E93196F534940BECE3C6F196235403D8ED59C7253494099C51FA056623540006201028C53494054DB977D68623540014F5AB8AC534940E9894226746235408AB3226AA2534940D00B772E8C6235403444BA449A5349400A078C3F9B623540F5A85379965349403F3A75E5B3623540A176AEDE97534940F862DE99BF623540B39F200C97534940010BAA57DB6235405000C5C892534940E72F3E16EC62354075F684DB905349404ABD022C4D6335406BCA04B28D534940F11879B4CC6335402E7590D7835349400B8EDCE4016435401AADFE637C534940CCAEC5B82C6435401F1906877253494039FC242D4B643540B6EA84E16D534940878494449B643540513640C461534940D3DA34B6D7643540D788601C5C5349403A4B7FE5F7643540F1C2312658534940B0A1E58A9C6535402B02F797385349404E6D5FF6A16535405559CAE8365349403316F2ADB4653540408E41823D534940F27794EFBE65354032A0CD60425349407843BF5BC56535402C3FBA224253494099B21D9D0466354059B1AEC046534940090FE4EA11663540E99FE06245534940A6E5513B0D66354031105F81435349408D43A275F9653540CAF500272553494054E17437F4653540C586B883225349404721C9ACDE653540D917BFDF1E5349409FFBBCF3D5653540F3F56BA11A53494011CE0248C8653540FF44C07C0D534940A4A60293C0653540CB6548BA0B53494090B81160A26535401332EB200A5349407AC7293A92653540EF6F75A50A534940100BB5A67965354085C5F2F8075349408ACFF819726535400243FBFD07534940FF20376854653540F42334380053494087FBC8AD49653540A7A091BEFF5249400F5A59EC4065354038C30DF8FC52494048A41243176535403ABB1006F95249400BFB2C85F66435401FA0A0B9F35249407C09BA62EB643540A3B83E07F1524940D42B6519E2643540166C239EEC524940607AFB73D164354022B53F06E152494044CCDBC7C0643540A244F064DC524940856A3986B6643540A2A64C20DB524940B7B585E7A56435407707C25FDD524940F5F34B69A2643540963A1279DC5249406A60F591A5643540B25879B8D352494026E9F582AA643540095B47B0CC524940DAE9077591643540543651F0B952494023FCE659A46435409728D604AC524940CA75AE83DE643540B7AC0CF49A5249408C50C7BEBF643540E3395B406852494032074147AB64354071975874465249406EC905C2A96435402CC9F08E42524940E78CCD339B6435402EC1F39C3E5249407E9D8A0A8B64354077514F7A3A52494004FE953A6D6435401CF1643733524940B8B475CB696435408D7E349C325249407CF2B0506B6435409AEA6E4331524940629E3AFB6F64354034958FEE31524940F455F2B1BB643540E133C813F7514940C830822106653540058D9944BD514940C474C69C0C6535404D3F975FBC5149402CC6AF0E366535409768DA0FC2514940BF3D192D51653540E435AFEAAC514940134A5F0839653540D85F1B96AB51494060483DFA15653540EF0802BFA15149402199695611653540D4A5DA029D5149405041D9EFE4643540A1A4C00298514940BC88A53792643540C9E0720690514940AB17320D79643540B96D84EA8B514940CDEF8F5264643540DFDF450488514940231A38FB5E6435400FAC996B875149405E4E0988496435403D6304F97E5149405EE3E94B2564354005DF347D7651494069B57691F8633540B5B002D7705149401E3B037EE86335401808A7AA7551494069554B3ACA6335403F16478A6D514940667330F6B96335408D6BD7DF6D514940D2883EC4AB633540CABD0A3A6B514940BBF083F3A9633540384D9F1D70514940381D5C959F6335405C7FA6B97051494041F273E899633540F629C764715149400FA1A5869163354066F3DD5273514940D451691F8663354007D1FF1774514940575B56067A6335404E6958E7735149408089D3A46F633540F551A11573514940C637143E5B6335401577BCC96F5149409C3F5C284F63354027E8E5666E514940F243A511336335406F6CD15D6D514940074E6CF4206335406FAE505A6E5149402D184B47EF623540BB59CD84705149409E5A22BCE26235402033ABD2715149401EE7919AD1623540596DFE5F75514940C2E2CB9FCA6235405F865A2E76514940B27AD168BC623540FBB2B453735149409EFAF664B462354007A925677251494080208A13A9623540194229B5725149402E2526039B62354013F5824F73514940EA735A5C886235406C54F190735149407AD44E8358623540A38790A971514940D204E51137623540E53AD7416F5149405D55F65D11623540BCA7BC676E5149405889C3E3EC61354028DAB0016C5149406C73AD07DD61354059AC3CDC69514940ACE23213B161354052F4C0C7605149405DEB41F79B613540185E49F25C514940027C5CC070613540B60CDD91565149409838F24064613540A04C4810535149402ADDA7F45D613540E2B19FC55251494058772CB649613540065A70F552514940122A82493B613540E9EAD8525151494071B9B0242F613540B4F7F3B74E5149409923754C2761354079831E204E514940687682A21E6135406D1D1CEC4D514940085C57CC086135408AFC44AF505149407039A80E03613540E3FF8EA8505149404BCADDE7F86035404983802150514940A9195245F160354067A263624E514940CC762A85E5603540DF4EC7084D5149406BFDE373DD603540321F10E84C514940D662A6A3D2603540A97D84AB4D514940C64263DCC36035405B6A73524E514940447BAB64B6603540AF68CE554E514940F6C07DD3AA603540FD6772D64C51494027A435069D603540B573F5BE4C514940BA1798158A603540DFF2A2C04C514940F3B803D083603540B088AB144C5149402418BD0974603540E659EE714B514940DB1C42F053603540637BD22E4B5149404F18DEF64E6035405EAA2DD049514940F76A91FEA85F3540FA08A12875514940FEB1B5638F5F354096D39E92735149400C10BBA58B5F354010536C1679514940338001CE9C5F3540E4141DC9E551494061C9552C7E5F35402588A9E3E751494011FFB0A5475F35406FC5596CEE5149404CCD7921785F35400E198F52095249403561FBC9185F3540C613E6E2145249407514D67C4B5F3540F5835F8F2E52494012C9EB1C5E5F35408E90268348524940307777AE395F3540A5B84F33495249402E4F31186D5D3540E0F8DA334B52494071F55267A45C3540991E03684A52494070795160A65C354017FE672849524940A084E3439A5C35404654F2FB48524940CD76853E585C3540C14A4FA26F5249408D8F60F4265C35401215AA9B8B524940\tvillage\tis in foobar\tpowiat staszowski___6___2635574___województwo świętokrzyskie___4___130914___gmina Bogoria___7___2963727\t\"{\"\"\"\",name:genitive===Pełczyczyc___name:adjective===pełczycki}\"";
importer.processData(line);
EasyMock.verify(cityDao);
//EasyMock.verify(admDao);
}
@Test
public void processData_poi(){
final SolrResponseDto solrResponseDtoCity = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoCity.getFeature_id()).andStubReturn(123L);
EasyMock.expect(solrResponseDtoCity.getOpenstreetmap_id()).andStubReturn(345L);
EasyMock.expect(solrResponseDtoCity.getPlacetype()).andStubReturn("Restaurant");
EasyMock.replay(solrResponseDtoCity);
final SolrResponseDto solrResponseDtoAdm = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoAdm.getFeature_id()).andReturn(4356L).times(2);
EasyMock.expect(solrResponseDtoAdm.getPlacetype()).andStubReturn("Restaurant");
EasyMock.replay(solrResponseDtoAdm);
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter(){
@Override
protected SolrResponseDto getNearestByPlaceType(Point location, String name, String countryCode,Class[]placetype, Geometry shape, Class target) {
return solrResponseDtoCity;
};
@Override
protected SolrResponseDto getAdm(String name, String countryCode) {
return solrResponseDtoAdm;
}
};
IGisFeatureDao gisFeatureDao = EasyMock.createMock(IGisFeatureDao.class);
GisFeature city=new GisFeature();
city.setName("Pełczyce");
city.setCountryCode("PL");
city.setLocation(GeolocHelper.createPoint(30D, 20D));
city.setFeatureId(9876L);
//EasyMock.expect(gisFeatureDao.getByFeatureId(123L)).andReturn(city);
EasyMock.expect(gisFeatureDao.save(city)).andReturn(city);
EasyMock.replay(gisFeatureDao);
importer.setGisFeatureDao(gisFeatureDao);
List<AdmDTO> dtos = new ArrayList<AdmDTO>();
AdmDTO dto1 = new AdmDTO("admName1", 4, 123L);
AdmDTO dto2 = new AdmDTO("admName2", 5, 123L);
AdmDTO dto3 = new AdmDTO("admName2", 6, 123L);//should be ignre because same name as previous
AdmDTO dto4 = new AdmDTO("admName4", 7, 123L);
AdmDTO dto5 = new AdmDTO("admName5", 8, 123L);//should be ignore because 8 >= 8
dtos.add(dto1);
dtos.add(dto2);
dtos.add(dto3);
dtos.add(dto4);
dtos.add(dto5);
Collections.sort(dtos);
IAdmDao admDao = EasyMock.createMock(IAdmDao.class);
Adm adm = new Adm(2);
adm.setName("admName");
EasyMock.expect(admDao.getByFeatureId(4356L)).andReturn(adm);
EasyMock.replay(admDao);
importer.setAdmDao(admDao);
IIdGenerator idGenerator = EasyMock.createMock(IIdGenerator.class);
EasyMock.expect(idGenerator.getNextFeatureId()).andReturn(9876L);
EasyMock.replay(idGenerator);
importer.setIdGenerator(idGenerator);
importer.setMunicipalityDetector(new MunicipalityDetector());
ICityDao cityDao = EasyMock.createMock(ICityDao.class);
City city2=new City();
city.setFeatureId(9876L);
EasyMock.expect(cityDao.save(city2)).andReturn(city2);
EasyMock.replay(cityDao);
importer.setCityDao(cityDao);
String line= "R\t6530243\t3009735615\tPełczyce\tPL\t28-210\t28-2101\t11\t1000000\t0101000020E6100000D13BC9B91361354030E055AC9D524940\t0101000020E6100000DE7C7E73DA603540ACFF18DFBC524940\t0106000020E610000001000000010300000001000000D20000008D8F60F4265C35401215AA9B8B524940D2C5A695425C35401598A9A4A9524940A367695D595C3540A06B0487BC524940A1C211A4525C35408BC3995FCD52494005543882545C35403A9270C6D55249401950148D5A5C35405551BCCADA52494088FC8E3C6B5C3540EDA17DACE05249401C2ECD08CA5C35408B1D8D43FD524940627B7775D85C35400F8DDDF41D534940ACD09BE50D5D35407961C66F6553494017F2ADB4315D3540B0027CB779534940FDA6B052415D35402569ED6C7E534940DF910C946F5D3540D998D71187534940E861B2028D5D3540A0F76B578D5349400E349F73B75D35402D4D00B49C534940BD53A63DCA5D35403B9AD99DA4534940C4DD0F2ED35D3540611514ABAB534940608033E7CF5D35406009A4C4AE534940D2D0F533AB5D3540A46F777BB553494044499231885D35400D09CECFC3534940F17096ED9E5D35409378D4F3C95349400D82D8E3CF5D354003452C62D8534940137DE310165E3540708912E3EB534940E68931FA1B5E354035B91803EB5349404A21DAD8365E3540CBF4F00AE9534940A8261CD5445E35406CD84A43E8534940ADA92C0ABB5E3540906335A7DC5349400E49D2DAD95E354073840CE4D95349408813984EEB5E354056CDBDD1D85349403DF4DDAD2C5F354077A22424D253494076995077545F3540DF1D19ABCD534940207821C2645F354099BF42E6CA534940C97553CA6B5F354094AC1E8BC85349403F3E213B6F5F354060E74B14C653494025D63D0D735F354037887BD1C35349409FCBD424785F3540CD4D8A45C253494000A13F7E805F35405C6ACE0BC1534940E6F91DD48F5F354021109EBFBF534940262B757FAB5F35406AE27899BC534940FA88F3CBBB5F35402AB7A3EEB95349409C487A62E75F3540E285634CB053494074FB9B06FB5F35405B80B6D5AC534940ADD6D3580C603540CD898741AA5349403667333D17603540754AF6BEA75349400B0BEE073C6035406759411DA0534940241D2FEE50603540B2097AB99953494051FD8348866035402E89FDAF845349402B3D2E05FF60354042E1FD028B534940853EFD0C146135403B600D068D534940BAF8DB9E20613540031544937A53494013B46E28216135405334C5D276534940B226BB3E18613540D6C7E8256B5349404BD05FE81161354019EEB7D15B534940A627D1370E613540150FDE0D58534940DFB4CF1907613540ACB24A44535349403D409C2C5A6135406DAA93D85A534940396403E9626135408EF5C3BE535349403E44A33B886135401B5C847357534940A98B14CAC261354071B77FC05E534940B92869B40B623540FD4E93196F534940BECE3C6F196235403D8ED59C7253494099C51FA056623540006201028C53494054DB977D68623540014F5AB8AC534940E9894226746235408AB3226AA2534940D00B772E8C6235403444BA449A5349400A078C3F9B623540F5A85379965349403F3A75E5B3623540A176AEDE97534940F862DE99BF623540B39F200C97534940010BAA57DB6235405000C5C892534940E72F3E16EC62354075F684DB905349404ABD022C4D6335406BCA04B28D534940F11879B4CC6335402E7590D7835349400B8EDCE4016435401AADFE637C534940CCAEC5B82C6435401F1906877253494039FC242D4B643540B6EA84E16D534940878494449B643540513640C461534940D3DA34B6D7643540D788601C5C5349403A4B7FE5F7643540F1C2312658534940B0A1E58A9C6535402B02F797385349404E6D5FF6A16535405559CAE8365349403316F2ADB4653540408E41823D534940F27794EFBE65354032A0CD60425349407843BF5BC56535402C3FBA224253494099B21D9D0466354059B1AEC046534940090FE4EA11663540E99FE06245534940A6E5513B0D66354031105F81435349408D43A275F9653540CAF500272553494054E17437F4653540C586B883225349404721C9ACDE653540D917BFDF1E5349409FFBBCF3D5653540F3F56BA11A53494011CE0248C8653540FF44C07C0D534940A4A60293C0653540CB6548BA0B53494090B81160A26535401332EB200A5349407AC7293A92653540EF6F75A50A534940100BB5A67965354085C5F2F8075349408ACFF819726535400243FBFD07534940FF20376854653540F42334380053494087FBC8AD49653540A7A091BEFF5249400F5A59EC4065354038C30DF8FC52494048A41243176535403ABB1006F95249400BFB2C85F66435401FA0A0B9F35249407C09BA62EB643540A3B83E07F1524940D42B6519E2643540166C239EEC524940607AFB73D164354022B53F06E152494044CCDBC7C0643540A244F064DC524940856A3986B6643540A2A64C20DB524940B7B585E7A56435407707C25FDD524940F5F34B69A2643540963A1279DC5249406A60F591A5643540B25879B8D352494026E9F582AA643540095B47B0CC524940DAE9077591643540543651F0B952494023FCE659A46435409728D604AC524940CA75AE83DE643540B7AC0CF49A5249408C50C7BEBF643540E3395B406852494032074147AB64354071975874465249406EC905C2A96435402CC9F08E42524940E78CCD339B6435402EC1F39C3E5249407E9D8A0A8B64354077514F7A3A52494004FE953A6D6435401CF1643733524940B8B475CB696435408D7E349C325249407CF2B0506B6435409AEA6E4331524940629E3AFB6F64354034958FEE31524940F455F2B1BB643540E133C813F7514940C830822106653540058D9944BD514940C474C69C0C6535404D3F975FBC5149402CC6AF0E366535409768DA0FC2514940BF3D192D51653540E435AFEAAC514940134A5F0839653540D85F1B96AB51494060483DFA15653540EF0802BFA15149402199695611653540D4A5DA029D5149405041D9EFE4643540A1A4C00298514940BC88A53792643540C9E0720690514940AB17320D79643540B96D84EA8B514940CDEF8F5264643540DFDF450488514940231A38FB5E6435400FAC996B875149405E4E0988496435403D6304F97E5149405EE3E94B2564354005DF347D7651494069B57691F8633540B5B002D7705149401E3B037EE86335401808A7AA7551494069554B3ACA6335403F16478A6D514940667330F6B96335408D6BD7DF6D514940D2883EC4AB633540CABD0A3A6B514940BBF083F3A9633540384D9F1D70514940381D5C959F6335405C7FA6B97051494041F273E899633540F629C764715149400FA1A5869163354066F3DD5273514940D451691F8663354007D1FF1774514940575B56067A6335404E6958E7735149408089D3A46F633540F551A11573514940C637143E5B6335401577BCC96F5149409C3F5C284F63354027E8E5666E514940F243A511336335406F6CD15D6D514940074E6CF4206335406FAE505A6E5149402D184B47EF623540BB59CD84705149409E5A22BCE26235402033ABD2715149401EE7919AD1623540596DFE5F75514940C2E2CB9FCA6235405F865A2E76514940B27AD168BC623540FBB2B453735149409EFAF664B462354007A925677251494080208A13A9623540194229B5725149402E2526039B62354013F5824F73514940EA735A5C886235406C54F190735149407AD44E8358623540A38790A971514940D204E51137623540E53AD7416F5149405D55F65D11623540BCA7BC676E5149405889C3E3EC61354028DAB0016C5149406C73AD07DD61354059AC3CDC69514940ACE23213B161354052F4C0C7605149405DEB41F79B613540185E49F25C514940027C5CC070613540B60CDD91565149409838F24064613540A04C4810535149402ADDA7F45D613540E2B19FC55251494058772CB649613540065A70F552514940122A82493B613540E9EAD8525151494071B9B0242F613540B4F7F3B74E5149409923754C2761354079831E204E514940687682A21E6135406D1D1CEC4D514940085C57CC086135408AFC44AF505149407039A80E03613540E3FF8EA8505149404BCADDE7F86035404983802150514940A9195245F160354067A263624E514940CC762A85E5603540DF4EC7084D5149406BFDE373DD603540321F10E84C514940D662A6A3D2603540A97D84AB4D514940C64263DCC36035405B6A73524E514940447BAB64B6603540AF68CE554E514940F6C07DD3AA603540FD6772D64C51494027A435069D603540B573F5BE4C514940BA1798158A603540DFF2A2C04C514940F3B803D083603540B088AB144C5149402418BD0974603540E659EE714B514940DB1C42F053603540637BD22E4B5149404F18DEF64E6035405EAA2DD049514940F76A91FEA85F3540FA08A12875514940FEB1B5638F5F354096D39E92735149400C10BBA58B5F354010536C1679514940338001CE9C5F3540E4141DC9E551494061C9552C7E5F35402588A9E3E751494011FFB0A5475F35406FC5596CEE5149404CCD7921785F35400E198F52095249403561FBC9185F3540C613E6E2145249407514D67C4B5F3540F5835F8F2E52494012C9EB1C5E5F35408E90268348524940307777AE395F3540A5B84F33495249402E4F31186D5D3540E0F8DA334B52494071F55267A45C3540991E03684A52494070795160A65C354017FE672849524940A084E3439A5C35404654F2FB48524940CD76853E585C3540C14A4FA26F5249408D8F60F4265C35401215AA9B8B524940\tlocality\tis in foobar\tpowiat staszowski___6___2635574___województwo świętokrzyskie___4___130914___gmina Bogoria___7___2963727\t\"{\"\"\"\",name:genitive===Pełczyczyc___name:adjective===pełczycki}\"";
importer.processData(line);
EasyMock.verify(gisFeatureDao);
//EasyMock.verify(admDao);
}
@Test
public void processWithunKnownCityAndUnknownAdm(){
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter(){
@Override
protected SolrResponseDto getNearestByPlaceType(Point location, String name, String countryCode,Class[]placetype, Geometry shape, Class target) {
if (!name.equals("Pełczyce") || !countryCode.equals("PL")){
throw new RuntimeException("the function is not called with the correct parameter");
}
return null;
};
@Override
protected SolrResponseDto getAdm(String name, String countryCode) {
return null;
}
@Override
void savecity(GisFeature city) {
super.savecity(city);
}
};
ICityDao cityDao = EasyMock.createMock(ICityDao.class);
City city=new City();
city.setFeatureId(9876L);
EasyMock.expect(cityDao.save(city)).andReturn(city);
EasyMock.replay(cityDao);
importer.setCityDao(cityDao);
IIdGenerator idGenerator = EasyMock.createMock(IIdGenerator.class);
EasyMock.expect(idGenerator.getNextFeatureId()).andReturn(9876L);
EasyMock.replay(idGenerator);
importer.setIdGenerator(idGenerator);
IAdmDao admDao = EasyMock.createMock(IAdmDao.class);
EasyMock.replay(admDao);
importer.setAdmDao(admDao);
importer.setMunicipalityDetector(new MunicipalityDetector());
String line= "R\t6530243\t3009735615\tPełczyce\tPL\t28-210\t28-2101\t8\t1000000\t0101000020E6100000D13BC9B91361354030E055AC9D524940\t0101000020E6100000DE7C7E73DA603540ACFF18DFBC524940\t0106000020E610000001000000010300000001000000D20000008D8F60F4265C35401215AA9B8B524940D2C5A695425C35401598A9A4A9524940A367695D595C3540A06B0487BC524940A1C211A4525C35408BC3995FCD52494005543882545C35403A9270C6D55249401950148D5A5C35405551BCCADA52494088FC8E3C6B5C3540EDA17DACE05249401C2ECD08CA5C35408B1D8D43FD524940627B7775D85C35400F8DDDF41D534940ACD09BE50D5D35407961C66F6553494017F2ADB4315D3540B0027CB779534940FDA6B052415D35402569ED6C7E534940DF910C946F5D3540D998D71187534940E861B2028D5D3540A0F76B578D5349400E349F73B75D35402D4D00B49C534940BD53A63DCA5D35403B9AD99DA4534940C4DD0F2ED35D3540611514ABAB534940608033E7CF5D35406009A4C4AE534940D2D0F533AB5D3540A46F777BB553494044499231885D35400D09CECFC3534940F17096ED9E5D35409378D4F3C95349400D82D8E3CF5D354003452C62D8534940137DE310165E3540708912E3EB534940E68931FA1B5E354035B91803EB5349404A21DAD8365E3540CBF4F00AE9534940A8261CD5445E35406CD84A43E8534940ADA92C0ABB5E3540906335A7DC5349400E49D2DAD95E354073840CE4D95349408813984EEB5E354056CDBDD1D85349403DF4DDAD2C5F354077A22424D253494076995077545F3540DF1D19ABCD534940207821C2645F354099BF42E6CA534940C97553CA6B5F354094AC1E8BC85349403F3E213B6F5F354060E74B14C653494025D63D0D735F354037887BD1C35349409FCBD424785F3540CD4D8A45C253494000A13F7E805F35405C6ACE0BC1534940E6F91DD48F5F354021109EBFBF534940262B757FAB5F35406AE27899BC534940FA88F3CBBB5F35402AB7A3EEB95349409C487A62E75F3540E285634CB053494074FB9B06FB5F35405B80B6D5AC534940ADD6D3580C603540CD898741AA5349403667333D17603540754AF6BEA75349400B0BEE073C6035406759411DA0534940241D2FEE50603540B2097AB99953494051FD8348866035402E89FDAF845349402B3D2E05FF60354042E1FD028B534940853EFD0C146135403B600D068D534940BAF8DB9E20613540031544937A53494013B46E28216135405334C5D276534940B226BB3E18613540D6C7E8256B5349404BD05FE81161354019EEB7D15B534940A627D1370E613540150FDE0D58534940DFB4CF1907613540ACB24A44535349403D409C2C5A6135406DAA93D85A534940396403E9626135408EF5C3BE535349403E44A33B886135401B5C847357534940A98B14CAC261354071B77FC05E534940B92869B40B623540FD4E93196F534940BECE3C6F196235403D8ED59C7253494099C51FA056623540006201028C53494054DB977D68623540014F5AB8AC534940E9894226746235408AB3226AA2534940D00B772E8C6235403444BA449A5349400A078C3F9B623540F5A85379965349403F3A75E5B3623540A176AEDE97534940F862DE99BF623540B39F200C97534940010BAA57DB6235405000C5C892534940E72F3E16EC62354075F684DB905349404ABD022C4D6335406BCA04B28D534940F11879B4CC6335402E7590D7835349400B8EDCE4016435401AADFE637C534940CCAEC5B82C6435401F1906877253494039FC242D4B643540B6EA84E16D534940878494449B643540513640C461534940D3DA34B6D7643540D788601C5C5349403A4B7FE5F7643540F1C2312658534940B0A1E58A9C6535402B02F797385349404E6D5FF6A16535405559CAE8365349403316F2ADB4653540408E41823D534940F27794EFBE65354032A0CD60425349407843BF5BC56535402C3FBA224253494099B21D9D0466354059B1AEC046534940090FE4EA11663540E99FE06245534940A6E5513B0D66354031105F81435349408D43A275F9653540CAF500272553494054E17437F4653540C586B883225349404721C9ACDE653540D917BFDF1E5349409FFBBCF3D5653540F3F56BA11A53494011CE0248C8653540FF44C07C0D534940A4A60293C0653540CB6548BA0B53494090B81160A26535401332EB200A5349407AC7293A92653540EF6F75A50A534940100BB5A67965354085C5F2F8075349408ACFF819726535400243FBFD07534940FF20376854653540F42334380053494087FBC8AD49653540A7A091BEFF5249400F5A59EC4065354038C30DF8FC52494048A41243176535403ABB1006F95249400BFB2C85F66435401FA0A0B9F35249407C09BA62EB643540A3B83E07F1524940D42B6519E2643540166C239EEC524940607AFB73D164354022B53F06E152494044CCDBC7C0643540A244F064DC524940856A3986B6643540A2A64C20DB524940B7B585E7A56435407707C25FDD524940F5F34B69A2643540963A1279DC5249406A60F591A5643540B25879B8D352494026E9F582AA643540095B47B0CC524940DAE9077591643540543651F0B952494023FCE659A46435409728D604AC524940CA75AE83DE643540B7AC0CF49A5249408C50C7BEBF643540E3395B406852494032074147AB64354071975874465249406EC905C2A96435402CC9F08E42524940E78CCD339B6435402EC1F39C3E5249407E9D8A0A8B64354077514F7A3A52494004FE953A6D6435401CF1643733524940B8B475CB696435408D7E349C325249407CF2B0506B6435409AEA6E4331524940629E3AFB6F64354034958FEE31524940F455F2B1BB643540E133C813F7514940C830822106653540058D9944BD514940C474C69C0C6535404D3F975FBC5149402CC6AF0E366535409768DA0FC2514940BF3D192D51653540E435AFEAAC514940134A5F0839653540D85F1B96AB51494060483DFA15653540EF0802BFA15149402199695611653540D4A5DA029D5149405041D9EFE4643540A1A4C00298514940BC88A53792643540C9E0720690514940AB17320D79643540B96D84EA8B514940CDEF8F5264643540DFDF450488514940231A38FB5E6435400FAC996B875149405E4E0988496435403D6304F97E5149405EE3E94B2564354005DF347D7651494069B57691F8633540B5B002D7705149401E3B037EE86335401808A7AA7551494069554B3ACA6335403F16478A6D514940667330F6B96335408D6BD7DF6D514940D2883EC4AB633540CABD0A3A6B514940BBF083F3A9633540384D9F1D70514940381D5C959F6335405C7FA6B97051494041F273E899633540F629C764715149400FA1A5869163354066F3DD5273514940D451691F8663354007D1FF1774514940575B56067A6335404E6958E7735149408089D3A46F633540F551A11573514940C637143E5B6335401577BCC96F5149409C3F5C284F63354027E8E5666E514940F243A511336335406F6CD15D6D514940074E6CF4206335406FAE505A6E5149402D184B47EF623540BB59CD84705149409E5A22BCE26235402033ABD2715149401EE7919AD1623540596DFE5F75514940C2E2CB9FCA6235405F865A2E76514940B27AD168BC623540FBB2B453735149409EFAF664B462354007A925677251494080208A13A9623540194229B5725149402E2526039B62354013F5824F73514940EA735A5C886235406C54F190735149407AD44E8358623540A38790A971514940D204E51137623540E53AD7416F5149405D55F65D11623540BCA7BC676E5149405889C3E3EC61354028DAB0016C5149406C73AD07DD61354059AC3CDC69514940ACE23213B161354052F4C0C7605149405DEB41F79B613540185E49F25C514940027C5CC070613540B60CDD91565149409838F24064613540A04C4810535149402ADDA7F45D613540E2B19FC55251494058772CB649613540065A70F552514940122A82493B613540E9EAD8525151494071B9B0242F613540B4F7F3B74E5149409923754C2761354079831E204E514940687682A21E6135406D1D1CEC4D514940085C57CC086135408AFC44AF505149407039A80E03613540E3FF8EA8505149404BCADDE7F86035404983802150514940A9195245F160354067A263624E514940CC762A85E5603540DF4EC7084D5149406BFDE373DD603540321F10E84C514940D662A6A3D2603540A97D84AB4D514940C64263DCC36035405B6A73524E514940447BAB64B6603540AF68CE554E514940F6C07DD3AA603540FD6772D64C51494027A435069D603540B573F5BE4C514940BA1798158A603540DFF2A2C04C514940F3B803D083603540B088AB144C5149402418BD0974603540E659EE714B514940DB1C42F053603540637BD22E4B5149404F18DEF64E6035405EAA2DD049514940F76A91FEA85F3540FA08A12875514940FEB1B5638F5F354096D39E92735149400C10BBA58B5F354010536C1679514940338001CE9C5F3540E4141DC9E551494061C9552C7E5F35402588A9E3E751494011FFB0A5475F35406FC5596CEE5149404CCD7921785F35400E198F52095249403561FBC9185F3540C613E6E2145249407514D67C4B5F3540F5835F8F2E52494012C9EB1C5E5F35408E90268348524940307777AE395F3540A5B84F33495249402E4F31186D5D3540E0F8DA334B52494071F55267A45C3540991E03684A52494070795160A65C354017FE672849524940A084E3439A5C35404654F2FB48524940CD76853E585C3540C14A4FA26F5249408D8F60F4265C35401215AA9B8B524940\tvillage\tis in foobar\tpowiat staszowski___6___2635574___województwo świętokrzyskie___4___130914___gmina Bogoria___7___2963727\t\"{\"\"\"\",name:genitive===Pełczyczyc___name:adjective===pełczycki}\"";
importer.processData(line);
EasyMock.verify(cityDao);
EasyMock.verify(admDao);
EasyMock.verify(idGenerator);
}
@Test
public void isACitySubdivision(){
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter();
Assert.assertTrue(importer.isACitySubdivision("neighbourhood","FR","8"));
Assert.assertTrue("the placetype should be case insensitive",importer.isACitySubdivision("NEIghbourhood","FR","8"));
Assert.assertTrue(importer.isACitySubdivision("quarter","FR","8"));
Assert.assertTrue(importer.isACitySubdivision("isolated_dwelling","FR","8"));
Assert.assertTrue(importer.isACitySubdivision("suburb","FR","8"));
Assert.assertTrue(importer.isACitySubdivision("suburb","FR","2"));
Assert.assertTrue(importer.isACitySubdivision("city_block","FR","8"));
Assert.assertTrue(importer.isACitySubdivision("borough","FR","8"));
Assert.assertFalse(importer.isACitySubdivision("city","FR","8"));
Assert.assertFalse(importer.isACitySubdivision("city","FR",""));
Assert.assertFalse(importer.isACitySubdivision("","US",""));
Assert.assertFalse(importer.isACitySubdivision(" ","US"," "));
Assert.assertFalse(importer.isACitySubdivision("","US","2"));
Assert.assertTrue(importer.isACitySubdivision("foo","FR","9"));
Assert.assertFalse(importer.isACitySubdivision("foo","FR","8"));
Assert.assertFalse(importer.isACitySubdivision("foo","FR",null));
}
@Test
public void processWithKnownCityAndUnknownAdm(){
final SolrResponseDto solrResponseDtoCity = EasyMock.createMock(SolrResponseDto.class);
EasyMock.expect(solrResponseDtoCity.getFeature_id()).andReturn(123L);
EasyMock.replay(solrResponseDtoCity);
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter(){
@Override
protected SolrResponseDto getNearestByPlaceType(Point location, String name, String countryCode,Class[]placetype, Geometry shape, Class target) {
if (!name.equals("Pełczyce") || !countryCode.equals("PL")){
throw new RuntimeException("the function is not called with the correct parameter");
}
return solrResponseDtoCity;
};
@Override
protected SolrResponseDto getAdm(String name, String countryCode) {
return null;
}
@Override
void savecity(GisFeature city) {
super.savecity(city);
Assert.assertEquals("village", city.getAmenity());
Assert.assertEquals("Pełczyce", city.getName());
Assert.assertEquals("PL", city.getCountryCode());
Assert.assertEquals(50.64543, city.getLatitude().doubleValue(),0.1);
Assert.assertEquals(21.379207240704833, city.getLongitude().doubleValue(),0.1);
Assert.assertEquals(50.646, city.getAdminCentreLatitude().doubleValue(),0.1);
Assert.assertEquals(21.378, city.getAdminCentreLongitude().doubleValue(),0.1);
Assert.assertEquals(6530243L, city.getOpenstreetmapId().longValue());
Assert.assertEquals(1000000L, city.getPopulation().longValue());
Assert.assertEquals(2, city.getZipCodes().size());
Assert.assertTrue(city.getZipCodes().contains(new ZipCode("28-210")));
Assert.assertTrue( city.getZipCodes().contains(new ZipCode("28-2101")));
Assert.assertEquals(generator.generateLabel(city), city.getLabel());
Assert.assertTrue("alternate labels are empty and shouldn't be", city.getAlternateLabels().size()!=0);
Assert.assertEquals(generator.generateLabels(city).size(), city.getAlternateLabels().size());
Assert.assertEquals(generator.getFullyQualifiedName(city), city.getFullyQualifiedName());
}
};
ICityDao cityDao = EasyMock.createMock(ICityDao.class);
City city=new City();
city.setFeatureId(123L);
EasyMock.expect(cityDao.getByFeatureId(123L)).andReturn(city);
EasyMock.expect(cityDao.save(city)).andReturn(city);
EasyMock.replay(cityDao);
importer.setCityDao(cityDao);
IAdmDao admDao = EasyMock.createMock(IAdmDao.class);
EasyMock.replay(admDao);
importer.setAdmDao(admDao);
importer.setMunicipalityDetector(new MunicipalityDetector());
String line= "R\t6530243\t3009735615\tPełczyce\tPL\t28-210\t28-2101\t8\t1000000\t0101000020E6100000D13BC9B91361354030E055AC9D524940\t0101000020E6100000DE7C7E73DA603540ACFF18DFBC524940\t0106000020E610000001000000010300000001000000D20000008D8F60F4265C35401215AA9B8B524940D2C5A695425C35401598A9A4A9524940A367695D595C3540A06B0487BC524940A1C211A4525C35408BC3995FCD52494005543882545C35403A9270C6D55249401950148D5A5C35405551BCCADA52494088FC8E3C6B5C3540EDA17DACE05249401C2ECD08CA5C35408B1D8D43FD524940627B7775D85C35400F8DDDF41D534940ACD09BE50D5D35407961C66F6553494017F2ADB4315D3540B0027CB779534940FDA6B052415D35402569ED6C7E534940DF910C946F5D3540D998D71187534940E861B2028D5D3540A0F76B578D5349400E349F73B75D35402D4D00B49C534940BD53A63DCA5D35403B9AD99DA4534940C4DD0F2ED35D3540611514ABAB534940608033E7CF5D35406009A4C4AE534940D2D0F533AB5D3540A46F777BB553494044499231885D35400D09CECFC3534940F17096ED9E5D35409378D4F3C95349400D82D8E3CF5D354003452C62D8534940137DE310165E3540708912E3EB534940E68931FA1B5E354035B91803EB5349404A21DAD8365E3540CBF4F00AE9534940A8261CD5445E35406CD84A43E8534940ADA92C0ABB5E3540906335A7DC5349400E49D2DAD95E354073840CE4D95349408813984EEB5E354056CDBDD1D85349403DF4DDAD2C5F354077A22424D253494076995077545F3540DF1D19ABCD534940207821C2645F354099BF42E6CA534940C97553CA6B5F354094AC1E8BC85349403F3E213B6F5F354060E74B14C653494025D63D0D735F354037887BD1C35349409FCBD424785F3540CD4D8A45C253494000A13F7E805F35405C6ACE0BC1534940E6F91DD48F5F354021109EBFBF534940262B757FAB5F35406AE27899BC534940FA88F3CBBB5F35402AB7A3EEB95349409C487A62E75F3540E285634CB053494074FB9B06FB5F35405B80B6D5AC534940ADD6D3580C603540CD898741AA5349403667333D17603540754AF6BEA75349400B0BEE073C6035406759411DA0534940241D2FEE50603540B2097AB99953494051FD8348866035402E89FDAF845349402B3D2E05FF60354042E1FD028B534940853EFD0C146135403B600D068D534940BAF8DB9E20613540031544937A53494013B46E28216135405334C5D276534940B226BB3E18613540D6C7E8256B5349404BD05FE81161354019EEB7D15B534940A627D1370E613540150FDE0D58534940DFB4CF1907613540ACB24A44535349403D409C2C5A6135406DAA93D85A534940396403E9626135408EF5C3BE535349403E44A33B886135401B5C847357534940A98B14CAC261354071B77FC05E534940B92869B40B623540FD4E93196F534940BECE3C6F196235403D8ED59C7253494099C51FA056623540006201028C53494054DB977D68623540014F5AB8AC534940E9894226746235408AB3226AA2534940D00B772E8C6235403444BA449A5349400A078C3F9B623540F5A85379965349403F3A75E5B3623540A176AEDE97534940F862DE99BF623540B39F200C97534940010BAA57DB6235405000C5C892534940E72F3E16EC62354075F684DB905349404ABD022C4D6335406BCA04B28D534940F11879B4CC6335402E7590D7835349400B8EDCE4016435401AADFE637C534940CCAEC5B82C6435401F1906877253494039FC242D4B643540B6EA84E16D534940878494449B643540513640C461534940D3DA34B6D7643540D788601C5C5349403A4B7FE5F7643540F1C2312658534940B0A1E58A9C6535402B02F797385349404E6D5FF6A16535405559CAE8365349403316F2ADB4653540408E41823D534940F27794EFBE65354032A0CD60425349407843BF5BC56535402C3FBA224253494099B21D9D0466354059B1AEC046534940090FE4EA11663540E99FE06245534940A6E5513B0D66354031105F81435349408D43A275F9653540CAF500272553494054E17437F4653540C586B883225349404721C9ACDE653540D917BFDF1E5349409FFBBCF3D5653540F3F56BA11A53494011CE0248C8653540FF44C07C0D534940A4A60293C0653540CB6548BA0B53494090B81160A26535401332EB200A5349407AC7293A92653540EF6F75A50A534940100BB5A67965354085C5F2F8075349408ACFF819726535400243FBFD07534940FF20376854653540F42334380053494087FBC8AD49653540A7A091BEFF5249400F5A59EC4065354038C30DF8FC52494048A41243176535403ABB1006F95249400BFB2C85F66435401FA0A0B9F35249407C09BA62EB643540A3B83E07F1524940D42B6519E2643540166C239EEC524940607AFB73D164354022B53F06E152494044CCDBC7C0643540A244F064DC524940856A3986B6643540A2A64C20DB524940B7B585E7A56435407707C25FDD524940F5F34B69A2643540963A1279DC5249406A60F591A5643540B25879B8D352494026E9F582AA643540095B47B0CC524940DAE9077591643540543651F0B952494023FCE659A46435409728D604AC524940CA75AE83DE643540B7AC0CF49A5249408C50C7BEBF643540E3395B406852494032074147AB64354071975874465249406EC905C2A96435402CC9F08E42524940E78CCD339B6435402EC1F39C3E5249407E9D8A0A8B64354077514F7A3A52494004FE953A6D6435401CF1643733524940B8B475CB696435408D7E349C325249407CF2B0506B6435409AEA6E4331524940629E3AFB6F64354034958FEE31524940F455F2B1BB643540E133C813F7514940C830822106653540058D9944BD514940C474C69C0C6535404D3F975FBC5149402CC6AF0E366535409768DA0FC2514940BF3D192D51653540E435AFEAAC514940134A5F0839653540D85F1B96AB51494060483DFA15653540EF0802BFA15149402199695611653540D4A5DA029D5149405041D9EFE4643540A1A4C00298514940BC88A53792643540C9E0720690514940AB17320D79643540B96D84EA8B514940CDEF8F5264643540DFDF450488514940231A38FB5E6435400FAC996B875149405E4E0988496435403D6304F97E5149405EE3E94B2564354005DF347D7651494069B57691F8633540B5B002D7705149401E3B037EE86335401808A7AA7551494069554B3ACA6335403F16478A6D514940667330F6B96335408D6BD7DF6D514940D2883EC4AB633540CABD0A3A6B514940BBF083F3A9633540384D9F1D70514940381D5C959F6335405C7FA6B97051494041F273E899633540F629C764715149400FA1A5869163354066F3DD5273514940D451691F8663354007D1FF1774514940575B56067A6335404E6958E7735149408089D3A46F633540F551A11573514940C637143E5B6335401577BCC96F5149409C3F5C284F63354027E8E5666E514940F243A511336335406F6CD15D6D514940074E6CF4206335406FAE505A6E5149402D184B47EF623540BB59CD84705149409E5A22BCE26235402033ABD2715149401EE7919AD1623540596DFE5F75514940C2E2CB9FCA6235405F865A2E76514940B27AD168BC623540FBB2B453735149409EFAF664B462354007A925677251494080208A13A9623540194229B5725149402E2526039B62354013F5824F73514940EA735A5C886235406C54F190735149407AD44E8358623540A38790A971514940D204E51137623540E53AD7416F5149405D55F65D11623540BCA7BC676E5149405889C3E3EC61354028DAB0016C5149406C73AD07DD61354059AC3CDC69514940ACE23213B161354052F4C0C7605149405DEB41F79B613540185E49F25C514940027C5CC070613540B60CDD91565149409838F24064613540A04C4810535149402ADDA7F45D613540E2B19FC55251494058772CB649613540065A70F552514940122A82493B613540E9EAD8525151494071B9B0242F613540B4F7F3B74E5149409923754C2761354079831E204E514940687682A21E6135406D1D1CEC4D514940085C57CC086135408AFC44AF505149407039A80E03613540E3FF8EA8505149404BCADDE7F86035404983802150514940A9195245F160354067A263624E514940CC762A85E5603540DF4EC7084D5149406BFDE373DD603540321F10E84C514940D662A6A3D2603540A97D84AB4D514940C64263DCC36035405B6A73524E514940447BAB64B6603540AF68CE554E514940F6C07DD3AA603540FD6772D64C51494027A435069D603540B573F5BE4C514940BA1798158A603540DFF2A2C04C514940F3B803D083603540B088AB144C5149402418BD0974603540E659EE714B514940DB1C42F053603540637BD22E4B5149404F18DEF64E6035405EAA2DD049514940F76A91FEA85F3540FA08A12875514940FEB1B5638F5F354096D39E92735149400C10BBA58B5F354010536C1679514940338001CE9C5F3540E4141DC9E551494061C9552C7E5F35402588A9E3E751494011FFB0A5475F35406FC5596CEE5149404CCD7921785F35400E198F52095249403561FBC9185F3540C613E6E2145249407514D67C4B5F3540F5835F8F2E52494012C9EB1C5E5F35408E90268348524940307777AE395F3540A5B84F33495249402E4F31186D5D3540E0F8DA334B52494071F55267A45C3540991E03684A52494070795160A65C354017FE672849524940A084E3439A5C35404654F2FB48524940CD76853E585C3540C14A4FA26F5249408D8F60F4265C35401215AA9B8B524940\tvillage\tis in foobar\tpowiat staszowski___6___2635574___województwo świętokrzyskie___4___130914___gmina Bogoria___7___2963727\t\"{\"\"\"\",name:genitive===Pełczyczyc___name:adjective===pełczycki}\"";
importer.processData(line);
EasyMock.verify(cityDao);
EasyMock.verify(admDao);
}
@Test
public void testIsPoi(){
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter();
Assert.assertTrue(importer.isPoi("locality", "FR", "9"));
Assert.assertFalse(importer.isPoi("locality", "FR", "8"));
Assert.assertFalse(importer.isPoi("foo", "FR", "8"));// it is a city
Assert.assertFalse(importer.isPoi("foo", "FR", "9"));// it is a subdivision, not a poi
Assert.assertFalse(importer.isPoi("locality","FR","8"));
Assert.assertFalse(importer.isPoi("foo","FR",null));
Assert.assertFalse(importer.isPoi("","",""));
Assert.assertTrue(importer.isPoi("locality","FR","10"));
Assert.assertTrue(importer.isPoi("locality","FR",""));
Assert.assertTrue(importer.isPoi("locality","FR",null));
Assert.assertFalse(importer.isPoi("citylocality","FR","8"));
Assert.assertFalse(importer.isPoi("citylocality","FR","10"));
}
@Test
public void populateAdmNamesFromAdm(){
Adm adm = new Adm(5);
adm.setAdm1Name("adm1Name");
adm.setAdm2Name("adm2Name");
adm.setAdm3Name("adm2Name");
adm.setAdm4Name("adm4Name");
adm.setAdm5Name("adm5Name");
OpenStreetMapCitiesSimpleImporter importer = new OpenStreetMapCitiesSimpleImporter();
City city = new City();
importer.populateAdmNamesFromAdm(city, adm);
Assert.assertEquals("adm1Name", city.getAdm1Name());
Assert.assertEquals("adm2Name", city.getAdm2Name());
Assert.assertEquals("adm4Name", city.getAdm3Name());
Assert.assertEquals("adm5Name", city.getAdm4Name());
}
}