+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.List;
+import java.util.Scanner;
+
public class Country {
private String name;
private String region;
private double lat;
private double lng;
+ private String flag;
+ private String csvFile = "data/countries.csv";
+ public Country() {
+ }
- public Country(String name, String region, double lat, double lng) {
+ public Country(String name) {
+ setName(name);
+ initCountryFromCSV(name);
+ }
+
+ public Country(String name, String region, double lat, double lng, String flag) {
setName(name);
setRegion(region);
setLat(lat);
setLng(lng);
- }
-
- public void setName(String name) {
- this.name = name;
+ setFlag(flag);
}
public String getName() {
return name;
}
+ public void setName(String name) {
+ this.name = name;
+ }
+
public void setRegion(String region) {
this.region = region;
}
+ public double getLat() {
+ return lat;
+ }
+
public void setLat(double lat) {
this.lat = lat;
}
+ public double getLng() {
+ return lng;
+ }
+
public void setLng(double lng) {
this.lng = lng;
}
+ public String getFlag() {
+ return flag;
+ }
+
+ public void setFlag(String flag) {
+ this.flag = flag;
+ }
+
+ public int distanceTo(Country country) {
+ if ((this.getLat() == country.getLat()) && (this.getLng() == country.getLng())) {
+ return 0;
+ } else {
+ double theta = this.getLng() - country.getLng();
+ Double dist = Math.sin(Math.toRadians(this.getLat())) * Math.sin(Math.toRadians(country.getLat())) +
+ Math.cos(Math.toRadians(this.getLat())) * Math.cos(Math.toRadians(country.getLat())) *
+ Math.cos(Math.toRadians(theta));
+ dist = Math.acos(dist);
+ dist = Math.toDegrees(dist);
+ dist = dist * 60 * 1.1515;
+ // Kilometers
+ dist = dist * 1.609344;
+ return dist.intValue();
+ }
+ }
+
+ private void initCountryFromCSV(String name) {
+ Scanner scanner = null;
+ try {
+ scanner = new Scanner(new File(csvFile));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ boolean found = false;
+ while (scanner.hasNext()) {
+ List<String> line = CSVUtils.parseLine(scanner.nextLine());
+ String countryList = line.get(0);
+ String[] countryArray = countryList.split(",");
+ String latLng = line.get(16);
+ String[] latLngArray = latLng.split(",");
+ if (countryArray[0].equals(name)) {
+ found = true;
+ setRegion(line.get(12));
+ setLat(Double.parseDouble(latLngArray[0]));
+ setLng(Double.parseDouble(latLngArray[1]));
+ setFlag(line.get(21));
+ break;
+ }
+ }
+ if (!found)
+ System.out.println("Country " + name + " not found");
+ scanner.close();
+ }
+
@Override
public String toString() {
return "Country{" +
", region='" + region + '\'' +
", lat=" + lat +
", lng=" + lng +
+ ", flag=" + flag +
'}';
}
}