Break a loop once the work is done.
[Persons_Comparator.git] / src / Country.java
CommitLineData
9e603249
SP
1import java.io.File;
2import java.io.FileNotFoundException;
3import java.util.List;
4import java.util.Scanner;
5
3ae9566e
JB
6public class Country {
7 private String name;
3ae9566e 8 private String region;
f56708fa
SP
9 private double lat;
10 private double lng;
f710e396 11 private String flag;
9e603249 12 private String csvFile = "data/countries.csv";
3ae9566e 13
9f1e8999
JB
14 public Country() {
15 }
16
17 public Country(String name) {
18 setName(name);
19 initCountryFromCSV(name);
20 }
21
f710e396 22 public Country(String name, String region, double lat, double lng, String flag) {
f56708fa
SP
23 setName(name);
24 setRegion(region);
25 setLat(lat);
26 setLng(lng);
f710e396 27 setFlag(flag);
3ae9566e
JB
28 }
29
822afd4f
SP
30 public String getName() {
31 return name;
32 }
33
64418ffb
JB
34 public void setName(String name) {
35 this.name = name;
3ae9566e
JB
36 }
37
64418ffb
JB
38 public void setRegion(String region) {
39 this.region = region;
3ae9566e
JB
40 }
41
d8b03ca8
SP
42 public double getLat() {
43 return lat;
44 }
45
64418ffb
JB
46 public void setLat(double lat) {
47 this.lat = lat;
3ae9566e
JB
48 }
49
d8b03ca8
SP
50 public double getLng() {
51 return lng;
52 }
53
64418ffb
JB
54 public void setLng(double lng) {
55 this.lng = lng;
f710e396
SP
56 }
57
58 public String getFlag() {
59 return flag;
64418ffb
JB
60 }
61
62 public void setFlag(String flag) {
63 this.flag = flag;
f710e396
SP
64 }
65
e16e3b15 66 public int distanceTo(Country country) {
9f1e8999 67 if ((this.getLat() == country.getLat()) && (this.getLng() == country.getLng())) {
e16e3b15
JB
68 return 0;
69 } else {
9f1e8999 70 double theta = this.getLng() - country.getLng();
b340a28f
JB
71 Double dist = Math.sin(Math.toRadians(this.getLat())) * Math.sin(Math.toRadians(country.getLat())) +
72 Math.cos(Math.toRadians(this.getLat())) * Math.cos(Math.toRadians(country.getLat())) *
73 Math.cos(Math.toRadians(theta));
e16e3b15
JB
74 dist = Math.acos(dist);
75 dist = Math.toDegrees(dist);
76 dist = dist * 60 * 1.1515;
77 // Kilometers
78 dist = dist * 1.609344;
79 return dist.intValue();
80 }
81 }
82
9f1e8999 83 private void initCountryFromCSV(String name) {
9e603249
SP
84 Scanner scanner = null;
85 try {
86 scanner = new Scanner(new File(csvFile));
87 } catch (FileNotFoundException e) {
88 e.printStackTrace();
89 }
b340a28f 90 boolean found = false;
9e603249
SP
91 while (scanner.hasNext()) {
92 List<String> line = CSVUtils.parseLine(scanner.nextLine());
93 String countryList = line.get(0);
94 String[] countryArray = countryList.split(",");
95 String latLng = line.get(16);
96 String[] latLngArray = latLng.split(",");
b340a28f
JB
97 if (countryArray[0].equals(name)) {
98 found = true;
9e603249
SP
99 setRegion(line.get(12));
100 setLat(Double.parseDouble(latLngArray[0]));
101 setLng(Double.parseDouble(latLngArray[1]));
b340a28f 102 setFlag(line.get(21));
99d1477f 103 break;
9e603249
SP
104 }
105 }
b340a28f
JB
106 if (!found)
107 System.out.println("Country " + name + " not found");
9e603249 108 scanner.close();
9e603249
SP
109 }
110
f56708fa
SP
111 @Override
112 public String toString() {
113 return "Country{" +
114 "name='" + name + '\'' +
115 ", region='" + region + '\'' +
116 ", lat=" + lat +
117 ", lng=" + lng +
f710e396 118 ", flag=" + flag +
f56708fa 119 '}';
3ae9566e
JB
120 }
121}