package org.gedcomx.conclusion;
import org.gedcomx.common.Attribution;
import org.gedcomx.common.ResourceReference;
import org.gedcomx.common.TextValue;
import org.gedcomx.common.URI;
import org.gedcomx.types.IdentifierType;
import org.testng.annotations.Test;
import java.util.*;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
public class PlaceTest {
@Test
public void testPlaceDescription_Tikhvin() throws Exception {
PlaceDescription tikhvinDesc = new PlaceDescription();
assertNull(tikhvinDesc.getNames());
assertNull(tikhvinDesc.getType());
assertNull(tikhvinDesc.getTemporalDescription());
assertNull(tikhvinDesc.getLatitude());
assertNull(tikhvinDesc.getLongitude());
assertNull(tikhvinDesc.getSpatialDescription());
assertNull(tikhvinDesc.getAttribution());
assertNull(tikhvinDesc.getExtensionElements());
tikhvinDesc.setNames(new ArrayList<TextValue>());
tikhvinDesc.getNames().add(new TextValue());
tikhvinDesc.getNames().add(new TextValue());
tikhvinDesc.getNames().add(new TextValue());
tikhvinDesc.getNames().get(0).setLang("ru-Cyrl");
tikhvinDesc.getNames().get(0).setValue("Ти́хвин, Ленингра́дская о́бласть, Россия");
tikhvinDesc.getNames().get(1).setLang("ru-Latn");
tikhvinDesc.getNames().get(1).setValue("Tikhvin, Leningradskaya Oblast', Rossiya");
tikhvinDesc.getNames().get(2).setLang("en-Latn");
tikhvinDesc.getNames().get(2).setValue("Tikhvin, Leningrad Oblast, Russia");
tikhvinDesc.setType(URI.create("urn:place-authority/city"));
tikhvinDesc.setTemporalDescription(new Date());
tikhvinDesc.getTemporalDescription().setFormal("A+1383/");
tikhvinDesc.setLatitude(59.6436111d);
tikhvinDesc.setLongitude(33.5094444d);
tikhvinDesc.setSpatialDescription(new ResourceReference(URI.create("data:application/vnd.google-earth.kml+xml;base64," +
"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxrbWwgeG1sbnM9Imh0dHA6" +
"Ly93d3cub3Blbmdpcy5uZXQva21sLzIuMiIgeG1sbnM6Z3g9Imh0dHA6Ly93d3cuZ29vZ2xlLmNv" +
"bS9rbWwvZXh0LzIuMiIgeG1sbnM6a21sPSJodHRwOi8vd3d3Lm9wZW5naXMubmV0L2ttbC8yLjIi" +
"IHhtbG5zOmF0b209Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSI+DQo8UGxhY2VtYXJrIGlk" +
"PSIyMSI+DQoJPG5hbWU+VGlraHZpbiwgTGVuaW5ncmFkIE9ibGFzdCwgUnVzc2lhPC9uYW1lPg0K" +
"CTxNdWx0aUdlb21ldHJ5Pg0KCQk8UG9pbnQ+DQoJCTxjb29yZGluYXRlcz4zMy41LDU5LjYzMzMz" +
"MzAwMDAwMDAxLDA8L2Nvb3JkaW5hdGVzPg0KCQk8L1BvaW50Pg0KCQk8TGluZWFyUmluZz4NCgkJ" +
"CTxjb29yZGluYXRlcz4NCgkJCQkzMy40NTA5Niw1OS42MTYxNTk0LDAgMzMuNDUwOTYsNTkuNjUw" +
"NTA2NiwwIDMzLjU0OTA0LDU5LjY1MDUwNjYsMCAzMy41NDkwNCw1OS42MTYxNTk0LDAgMzMuNDUw" +
"OTYsNTkuNjE2MTU5NCwwIA0KCQkJPC9jb29yZGluYXRlcz4NCgkJPC9MaW5lYXJSaW5nPg0KCTwv" +
"TXVsdGlHZW9tZXRyeT4NCjwvUGxhY2VtYXJrPg0KPC9rbWw+DQo=")));
tikhvinDesc.setIdentifiers(new ArrayList<Identifier>());
tikhvinDesc.getIdentifiers().add(new Identifier());
tikhvinDesc.getIdentifiers().get(0).setKnownType(IdentifierType.Primary);
tikhvinDesc.getIdentifiers().get(0).setValue(URI.create("https://labs.familysearch.org/stdfinder/PlaceDetail.jsp?placeId=3262902#placeDescriptionId"));
tikhvinDesc.setAttribution(new Attribution());
tikhvinDesc.getAttribution().setContributor(new ResourceReference(URI.create("urn:contributorId")));
tikhvinDesc.getAttribution().setModified(new java.util.Date(1321027871111L)); // 11 Nov 2011 11:11:11.111
tikhvinDesc.addExtensionElement("tikhvinDesc-junkExtensionElement");
assertEquals(tikhvinDesc.getNames().get(0).getLang(), "ru-Cyrl");
assertEquals(tikhvinDesc.getNames().get(0).getValue(), "Ти́хвин, Ленингра́дская о́бласть, Россия");
assertEquals(tikhvinDesc.getNames().get(1).getLang(), "ru-Latn");
assertEquals(tikhvinDesc.getNames().get(1).getValue(), "Tikhvin, Leningradskaya Oblast', Rossiya");
assertEquals(tikhvinDesc.getNames().get(2).getLang(), "en-Latn");
assertEquals(tikhvinDesc.getNames().get(2).getValue(), "Tikhvin, Leningrad Oblast, Russia");
assertEquals(tikhvinDesc.getType().toURI().toString(), "urn:place-authority/city");
assertEquals(tikhvinDesc.getTemporalDescription().getFormal(), "A+1383/");
assertEquals(tikhvinDesc.getLatitude(), 59.6436111d);
assertEquals(tikhvinDesc.getLongitude(), 33.5094444d);
assertEquals(tikhvinDesc.getSpatialDescription().getResource().toURI().toString(), "data:application/vnd.google-earth.kml+xml;base64," +
"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxrbWwgeG1sbnM9Imh0dHA6" +
"Ly93d3cub3Blbmdpcy5uZXQva21sLzIuMiIgeG1sbnM6Z3g9Imh0dHA6Ly93d3cuZ29vZ2xlLmNv" +
"bS9rbWwvZXh0LzIuMiIgeG1sbnM6a21sPSJodHRwOi8vd3d3Lm9wZW5naXMubmV0L2ttbC8yLjIi" +
"IHhtbG5zOmF0b209Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSI+DQo8UGxhY2VtYXJrIGlk" +
"PSIyMSI+DQoJPG5hbWU+VGlraHZpbiwgTGVuaW5ncmFkIE9ibGFzdCwgUnVzc2lhPC9uYW1lPg0K" +
"CTxNdWx0aUdlb21ldHJ5Pg0KCQk8UG9pbnQ+DQoJCTxjb29yZGluYXRlcz4zMy41LDU5LjYzMzMz" +
"MzAwMDAwMDAxLDA8L2Nvb3JkaW5hdGVzPg0KCQk8L1BvaW50Pg0KCQk8TGluZWFyUmluZz4NCgkJ" +
"CTxjb29yZGluYXRlcz4NCgkJCQkzMy40NTA5Niw1OS42MTYxNTk0LDAgMzMuNDUwOTYsNTkuNjUw" +
"NTA2NiwwIDMzLjU0OTA0LDU5LjY1MDUwNjYsMCAzMy41NDkwNCw1OS42MTYxNTk0LDAgMzMuNDUw" +
"OTYsNTkuNjE2MTU5NCwwIA0KCQkJPC9jb29yZGluYXRlcz4NCgkJPC9MaW5lYXJSaW5nPg0KCTwv" +
"TXVsdGlHZW9tZXRyeT4NCjwvUGxhY2VtYXJrPg0KPC9rbWw+DQo=");
assertEquals(tikhvinDesc.getIdentifiers().get(0).getKnownType(), IdentifierType.Primary);
assertEquals(tikhvinDesc.getIdentifiers().get(0).getValue().toURI().toString(), "https://labs.familysearch.org/stdfinder/PlaceDetail.jsp?placeId=3262902#placeDescriptionId");
assertEquals(tikhvinDesc.getAttribution().getContributor().getResource().toURI().toString(), "urn:contributorId");
assertEquals(tikhvinDesc.getAttribution().getModified().getTime(), 1321027871111L);
assertEquals(tikhvinDesc.findExtensionOfType(String.class), "tikhvinDesc-junkExtensionElement");
}
@Test
public void testPlaceReference_Tikhvin() throws Exception {
PlaceReference tikhvinRef = new PlaceReference();
assertNull(tikhvinRef.getOriginal());
assertNull(tikhvinRef.getDescriptionRef());
assertNull(tikhvinRef.getExtensionElements());
tikhvinRef.setOriginal("Tikhvin, Leningradskaya Oblast, Russia");
tikhvinRef.setDescriptionRef(URI.create("#tikhvinDesc1"));
tikhvinRef.addExtensionElement("tikhvinRef-junkExtensionElement");
assertEquals(tikhvinRef.getOriginal(), "Tikhvin, Leningradskaya Oblast, Russia");
assertEquals(tikhvinRef.getDescriptionRef().toURI().toString(), "#tikhvinDesc1");
assertEquals(tikhvinRef.findExtensionOfType(String.class), "tikhvinRef-junkExtensionElement");
assertEquals(tikhvinRef.toString(), "PlaceReference{original='Tikhvin, Leningradskaya Oblast, Russia', descriptionRef='#tikhvinDesc1'}");
}
@Test
public void testPlaceDescription_Luga() throws Exception {
PlaceDescription lugaDesc = new PlaceDescription();
assertNull(lugaDesc.getNames());
assertNull(lugaDesc.getType());
assertNull(lugaDesc.getTemporalDescription());
assertNull(lugaDesc.getLatitude());
assertNull(lugaDesc.getLongitude());
assertNull(lugaDesc.getSpatialDescription());
assertNull(lugaDesc.getAttribution());
assertNull(lugaDesc.getExtensionElements());
lugaDesc.setNames(new ArrayList<TextValue>());
lugaDesc.getNames().add(new TextValue());
lugaDesc.getNames().add(new TextValue());
lugaDesc.getNames().add(new TextValue());
lugaDesc.getNames().get(0).setLang("ru-Cyrl");
lugaDesc.getNames().get(0).setValue("Лу́га, Новгоро́дская о́бласть, Россия");
lugaDesc.getNames().get(1).setLang("ru-Latn");
lugaDesc.getNames().get(1).setValue("Luga, Leningradskaya Oblast', Rossiya");
lugaDesc.getNames().get(2).setLang("en-Latn");
lugaDesc.getNames().get(2).setValue("Luga, Leningrad Oblast, Russia");
lugaDesc.setType(URI.create("urn:place-authority/city"));
lugaDesc.setTemporalDescription(new Date());
lugaDesc.getTemporalDescription().setFormal("+1777-08-03/");
lugaDesc.setLatitude(58.7372222d);
lugaDesc.setLongitude(29.8452778d);
lugaDesc.setSpatialDescription(new ResourceReference(URI.create("data:application/vnd.google-earth.kml+xml;base64," +
"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxrbWwgeG1sbnM9Imh0dHA6" +
"Ly93d3cub3Blbmdpcy5uZXQva21sLzIuMiIgeG1sbnM6Z3g9Imh0dHA6Ly93d3cuZ29vZ2xlLmNv" +
"bS9rbWwvZXh0LzIuMiIgeG1sbnM6a21sPSJodHRwOi8vd3d3Lm9wZW5naXMubmV0L2ttbC8yLjIi" +
"IHhtbG5zOmF0b209Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSI+DQo8UGxhY2VtYXJrPg0K" +
"CTxuYW1lPkx1Z2EsIExlbmluZ3JhZCBPYmxhc3QsIFJ1c3NpYTwvbmFtZT4NCgk8TXVsdGlHZW9t" +
"ZXRyeT4NCgkJPFBvaW50Pg0KCQk8Y29vcmRpbmF0ZXM+MjkuODQ3OTY2LDU4LjczNTIxMywwPC9j" +
"b29yZGluYXRlcz4NCgkJPC9Qb2ludD4NCgkJPExpbmVhclJpbmc+DQoJCQk8Y29vcmRpbmF0ZXM+" +
"DQoJCQkJMjkuODA1NTQzMiw1OC43MDA4MjY2LDAgMjkuODA1NTQzMiw1OC43Njk1OTk0LDAgMjku" +
"ODkwMzg4OCw1OC43Njk1OTk0LDAgMjkuODkwMzg4OCw1OC43MDA4MjY2LDAgMjkuODA1NTQzMiw1" +
"OC43MDA4MjY2LDAgDQoJCQk8L2Nvb3JkaW5hdGVzPg0KCQk8L0xpbmVhclJpbmc+DQoJPC9NdWx0" +
"aUdlb21ldHJ5Pg0KPC9QbGFjZW1hcms+DQo8L2ttbD4NCg==")));
lugaDesc.setIdentifiers(new ArrayList<Identifier>());
lugaDesc.getIdentifiers().add(new Identifier());
lugaDesc.getIdentifiers().get(0).setKnownType(IdentifierType.Primary);
lugaDesc.getIdentifiers().get(0).setValue(URI.create("https://labs.familysearch.org/stdfinder/PlaceDetail.jsp?placeId=3314013#placeDescriptionId"));
lugaDesc.setAttribution(new Attribution());
lugaDesc.getAttribution().setContributor(new ResourceReference(URI.create("urn:contributorId")));
lugaDesc.getAttribution().setModified(new java.util.Date(1321027871111L)); // 11 Nov 2011 11:11:11.111
lugaDesc.addExtensionElement("lugaDesc-junkExtensionElement");
assertEquals(lugaDesc.getNames().get(0).getLang(), "ru-Cyrl");
assertEquals(lugaDesc.getNames().get(0).getValue(), "Лу́га, Новгоро́дская о́бласть, Россия");
assertEquals(lugaDesc.getNames().get(1).getLang(), "ru-Latn");
assertEquals(lugaDesc.getNames().get(1).getValue(), "Luga, Leningradskaya Oblast', Rossiya");
assertEquals(lugaDesc.getNames().get(2).getLang(), "en-Latn");
assertEquals(lugaDesc.getNames().get(2).getValue(), "Luga, Leningrad Oblast, Russia");
assertEquals(lugaDesc.getType().toURI().toString(), "urn:place-authority/city");
assertEquals(lugaDesc.getTemporalDescription().getFormal(), "+1777-08-03/");
assertEquals(lugaDesc.getLatitude(), 58.7372222d);
assertEquals(lugaDesc.getLongitude(), 29.8452778d);
assertEquals(lugaDesc.getSpatialDescription().getResource().toURI().toString(), "data:application/vnd.google-earth.kml+xml;base64," +
"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxrbWwgeG1sbnM9Imh0dHA6" +
"Ly93d3cub3Blbmdpcy5uZXQva21sLzIuMiIgeG1sbnM6Z3g9Imh0dHA6Ly93d3cuZ29vZ2xlLmNv" +
"bS9rbWwvZXh0LzIuMiIgeG1sbnM6a21sPSJodHRwOi8vd3d3Lm9wZW5naXMubmV0L2ttbC8yLjIi" +
"IHhtbG5zOmF0b209Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSI+DQo8UGxhY2VtYXJrPg0K" +
"CTxuYW1lPkx1Z2EsIExlbmluZ3JhZCBPYmxhc3QsIFJ1c3NpYTwvbmFtZT4NCgk8TXVsdGlHZW9t" +
"ZXRyeT4NCgkJPFBvaW50Pg0KCQk8Y29vcmRpbmF0ZXM+MjkuODQ3OTY2LDU4LjczNTIxMywwPC9j" +
"b29yZGluYXRlcz4NCgkJPC9Qb2ludD4NCgkJPExpbmVhclJpbmc+DQoJCQk8Y29vcmRpbmF0ZXM+" +
"DQoJCQkJMjkuODA1NTQzMiw1OC43MDA4MjY2LDAgMjkuODA1NTQzMiw1OC43Njk1OTk0LDAgMjku" +
"ODkwMzg4OCw1OC43Njk1OTk0LDAgMjkuODkwMzg4OCw1OC43MDA4MjY2LDAgMjkuODA1NTQzMiw1" +
"OC43MDA4MjY2LDAgDQoJCQk8L2Nvb3JkaW5hdGVzPg0KCQk8L0xpbmVhclJpbmc+DQoJPC9NdWx0" +
"aUdlb21ldHJ5Pg0KPC9QbGFjZW1hcms+DQo8L2ttbD4NCg==");
assertEquals(lugaDesc.getIdentifiers().get(0).getKnownType(), IdentifierType.Primary);
assertEquals(lugaDesc.getIdentifiers().get(0).getValue().toURI().toString(), "https://labs.familysearch.org/stdfinder/PlaceDetail.jsp?placeId=3314013#placeDescriptionId");
assertEquals(lugaDesc.getAttribution().getContributor().getResource().toURI().toString(), "urn:contributorId");
assertEquals(lugaDesc.getAttribution().getModified().getTime(), 1321027871111L);
assertEquals(lugaDesc.findExtensionOfType(String.class), "lugaDesc-junkExtensionElement");
}
@Test
public void testPlaceReference_Luga() throws Exception {
PlaceReference lugaRef = new PlaceReference();
assertNull(lugaRef.getOriginal());
assertNull(lugaRef.getDescriptionRef());
assertNull(lugaRef.getExtensionElements());
lugaRef.setOriginal("Luga, Leningradskaya Oblast', Russia");
lugaRef.setDescriptionRef(URI.create("#lugaDesc1"));
lugaRef.addExtensionElement("lugaRef-junkExtensionElement");
assertEquals(lugaRef.getOriginal(), "Luga, Leningradskaya Oblast', Russia");
assertEquals(lugaRef.getDescriptionRef().toURI().toString(), "#lugaDesc1");
assertEquals(lugaRef.findExtensionOfType(String.class), "lugaRef-junkExtensionElement");
assertEquals(lugaRef.toString(), "PlaceReference{original='Luga, Leningradskaya Oblast', Russia', descriptionRef='#lugaDesc1'}");
}
}