]> git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.app.geo/src/org/argeo/app/geo/geonames/GeonamesAdm.java
JavaScript documentation.
[gpl/argeo-suite.git] / org.argeo.app.geo / src / org / argeo / app / geo / geonames / GeonamesAdm.java
1 package org.argeo.app.geo.geonames;
2
3 import java.time.LocalDate;
4 import java.time.ZoneId;
5 import java.util.ArrayList;
6 import java.util.Arrays;
7 import java.util.List;
8 import java.util.Map;
9 import java.util.function.Function;
10
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;
25
26 private final Long[] upperLevelIds = new Long[5];
27 private final List<GeonamesAdm> upperLevels = new ArrayList<>();
28
29 private List<String> row;
30
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));
40 else
41 level = Integer.parseInt(admLevel.substring(3));
42 } else if (admLevel.equals("PCLI")) {
43 level = 0;
44 } else {
45 throw new IllegalArgumentException("Unsupported admin level " + admLevel);
46 }
47 name = row.get(1);
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));
54 // upper levels
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));
61 this.row = row;
62 }
63
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));
68 }
69 }
70
71 public Long getGeonameId() {
72 return geonameId;
73 }
74
75 public Integer getLevel() {
76 return level;
77 }
78
79 public String getName() {
80 return name;
81 }
82
83 public String getName(Function<String, String> transform) {
84 if (transform != null)
85 return transform.apply(name);
86 else
87 return name;
88
89 }
90
91 public String getAsciiName() {
92 return asciiName;
93 }
94
95 public List<String> getAlternateNames() {
96 return alternateNames;
97 }
98
99 public Double getLat() {
100 return lat;
101 }
102
103 public Double getLng() {
104 return lng;
105 }
106
107 public String getCountryCode() {
108 return countryCode;
109 }
110
111 public String getAdmLevel() {
112 return admLevel;
113 }
114
115 public List<String> getRow() {
116 return row;
117 }
118
119 public LocalDate getLastUpdated() {
120 return lastUpdated;
121 }
122
123 public ZoneId getTimeZone() {
124 return timeZone;
125 }
126
127 public String getAdminCode1() {
128 return adminCode1;
129 }
130
131 public Long[] getUpperLevelIds() {
132 return upperLevelIds;
133 }
134
135 public List<GeonamesAdm> getUpperLevels() {
136 return upperLevels;
137 }
138
139 @Override
140 public int hashCode() {
141 return geonameId.intValue();
142 }
143
144 @Override
145 public boolean equals(Object obj) {
146 if (!(obj instanceof GeonamesAdm))
147 return false;
148 GeonamesAdm other = (GeonamesAdm) obj;
149 return geonameId.equals(other.geonameId);
150 }
151
152 @Override
153 public String toString() {
154 return name + " (ADM" + level + " " + geonameId + ")";
155 }
156
157 }