package com.maxmind.geoip2.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.maxmind.geoip2.record.*;
import java.util.ArrayList;
import java.util.List;
public abstract class AbstractCityResponse extends AbstractCountryResponse {
private final City city;
private final Location location;
private final Postal postal;
private final List<Subdivision> subdivisions;
AbstractCityResponse() {
this(null, null, null, null, null, null, null, null, null, null);
}
AbstractCityResponse(
City city,
Continent continent,
Country country,
Location location,
MaxMind maxmind,
Postal postal,
Country registeredCountry,
RepresentedCountry representedCountry,
List<Subdivision> subdivisions,
Traits traits
) {
super(continent, country, maxmind, registeredCountry, representedCountry, traits);
this.city = city != null ? city : new City();
this.location = location != null ? location : new Location();
this.postal = postal != null ? postal : new Postal();
this.subdivisions = subdivisions != null ? subdivisions : new ArrayList<Subdivision>();
}
/**
* @return City record for the requested IP address.
*/
public City getCity() {
return this.city;
}
/**
* @return Location record for the requested IP address.
*/
public Location getLocation() {
return this.location;
}
/**
* @return the postal
*/
public Postal getPostal() {
return this.postal;
}
/**
* @return An {@link List} of {@link Subdivision} objects representing the
* country subdivisions for the requested IP address. The number and
* type of subdivisions varies by country, but a subdivision is
* typically a state, province, county, etc. Subdivisions are
* ordered from most general (largest) to most specific (smallest).
* If the response did not contain any subdivisions, this method
* returns an empty array.
*/
public List<Subdivision> getSubdivisions() {
return new ArrayList<>(this.subdivisions);
}
/**
* @return An object representing the most specific subdivision returned. If
* the response did not contain any subdivisions, this method
* returns an empty {@link Subdivision} object.
*/
@JsonIgnore
public Subdivision getMostSpecificSubdivision() {
if (this.subdivisions.isEmpty()) {
return new Subdivision();
}
return this.subdivisions.get(this.subdivisions.size() - 1);
}
/**
* @return An object representing the least specific subdivision returned. If
* the response did not contain any subdivisions, this method
* returns an empty {@link Subdivision} object.
*/
@JsonIgnore
public Subdivision getLeastSpecificSubdivision() {
if (this.subdivisions.isEmpty()) {
return new Subdivision();
}
return this.subdivisions.get(0);
}
}