]>
git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.app.geo/src/org/argeo/app/geo/geonames/GeonamesAdm.java
1 package org
.argeo
.app
.geo
.geonames
;
3 import java
.time
.LocalDate
;
4 import java
.time
.ZoneId
;
5 import java
.util
.ArrayList
;
6 import java
.util
.Arrays
;
9 import java
.util
.function
.Function
;
11 /** A Geonames administrative subdivision. */
12 public class GeonamesAdm
{
13 private final Long geonameId
;
14 private final String countryCode
;
15 private final String adminCode1
;
16 private final String admLevel
;
17 private final Integer level
;
18 private final String name
;
19 private final String asciiName
;
20 private final List
<String
> alternateNames
;
21 private final Double lat
;
22 private final Double lng
;
23 private final LocalDate lastUpdated
;
24 private final ZoneId timeZone
;
26 private final Long
[] upperLevelIds
= new Long
[5];
27 private final List
<GeonamesAdm
> upperLevels
= new ArrayList
<>();
29 private List
<String
> row
;
31 /** Initialise from a row in the main Geonames table. */
32 public GeonamesAdm(List
<String
> row
) {
33 geonameId
= Long
.parseLong(row
.get(0));
34 admLevel
= row
.get(7);
35 countryCode
= row
.get(8);
36 adminCode1
= row
.get(10);
37 if (admLevel
.startsWith("ADM")) {
38 if (admLevel
.endsWith("H"))
39 level
= Integer
.parseInt(admLevel
.substring(3, admLevel
.length() - 1));
41 level
= Integer
.parseInt(admLevel
.substring(3));
42 } else if (admLevel
.equals("PCLI")) {
45 throw new IllegalArgumentException("Unsupported admin level " + admLevel
);
48 asciiName
= row
.get(2);
49 alternateNames
= Arrays
.asList(row
.get(3).split(","));
50 lat
= Double
.parseDouble(row
.get(4));
51 lng
= Double
.parseDouble(row
.get(5));
52 lastUpdated
= LocalDate
.parse(row
.get(18));
53 timeZone
= ZoneId
.of(row
.get(17));
55 if (row
.get(11) != null && !row
.get(11).trim().equals(""))
56 upperLevelIds
[2] = Long
.parseLong(row
.get(11));
57 if (row
.get(12) != null && !row
.get(12).trim().equals(""))
58 upperLevelIds
[3] = Long
.parseLong(row
.get(12));
59 if (row
.get(13) != null && !row
.get(13).trim().equals(""))
60 upperLevelIds
[4] = Long
.parseLong(row
.get(13));
64 public void mapUpperLevels(Map
<Long
, GeonamesAdm
> index
) {
65 for (int i
= 0; i
< level
; i
++) {
66 Long geonameId
= upperLevelIds
[i
];
67 upperLevels
.add(i
, index
.get(geonameId
));
71 public Long
getGeonameId() {
75 public Integer
getLevel() {
79 public String
getName() {
83 public String
getName(Function
<String
, String
> transform
) {
84 if (transform
!= null)
85 return transform
.apply(name
);
91 public String
getAsciiName() {
95 public List
<String
> getAlternateNames() {
96 return alternateNames
;
99 public Double
getLat() {
103 public Double
getLng() {
107 public String
getCountryCode() {
111 public String
getAdmLevel() {
115 public List
<String
> getRow() {
119 public LocalDate
getLastUpdated() {
123 public ZoneId
getTimeZone() {
127 public String
getAdminCode1() {
131 public Long
[] getUpperLevelIds() {
132 return upperLevelIds
;
135 public List
<GeonamesAdm
> getUpperLevels() {
140 public int hashCode() {
141 return geonameId
.intValue();
145 public boolean equals(Object obj
) {
146 if (!(obj
instanceof GeonamesAdm
))
148 GeonamesAdm other
= (GeonamesAdm
) obj
;
149 return geonameId
.equals(other
.geonameId
);
153 public String
toString() {
154 return name
+ " (ADM" + level
+ " " + geonameId
+ ")";