mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-12 16:06:15 +00:00
Merge pull request #6593 from gdicristofaro/7182-statesInDataSourceSummary
7182 add State to geolocation data source summary panel
This commit is contained in:
commit
0b80372ee5
@ -28,18 +28,21 @@ public class CityRecord extends KdTree.XYZPoint {
|
|||||||
|
|
||||||
private final String cityName;
|
private final String cityName;
|
||||||
private final String country;
|
private final String country;
|
||||||
|
private final String state;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main constructor.
|
* Main constructor.
|
||||||
*
|
*
|
||||||
* @param cityName The name of the city.
|
* @param cityName The name of the city.
|
||||||
|
* @param state The state of the city.
|
||||||
* @param country The country of that city.
|
* @param country The country of that city.
|
||||||
* @param latitude Latitude for the city.
|
* @param latitude Latitude for the city.
|
||||||
* @param longitude Longitude for the city.
|
* @param longitude Longitude for the city.
|
||||||
*/
|
*/
|
||||||
CityRecord(String cityName, String country, double latitude, double longitude) {
|
CityRecord(String cityName, String state, String country, double latitude, double longitude) {
|
||||||
super(latitude, longitude);
|
super(latitude, longitude);
|
||||||
this.cityName = cityName;
|
this.cityName = cityName;
|
||||||
|
this.state = state;
|
||||||
this.country = country;
|
this.country = country;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,6 +53,13 @@ public class CityRecord extends KdTree.XYZPoint {
|
|||||||
return cityName;
|
return cityName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The state of the city.
|
||||||
|
*/
|
||||||
|
public String getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return The country of that city.
|
* @return The country of that city.
|
||||||
*/
|
*/
|
||||||
|
@ -42,6 +42,7 @@ class ClosestCityMapper {
|
|||||||
|
|
||||||
// index within a csv row of pertinent data
|
// index within a csv row of pertinent data
|
||||||
private static final int CITY_NAME_IDX = 0;
|
private static final int CITY_NAME_IDX = 0;
|
||||||
|
private static final int STATE_NAME_IDX = 7;
|
||||||
private static final int COUNTRY_NAME_IDX = 4;
|
private static final int COUNTRY_NAME_IDX = 4;
|
||||||
private static final int LAT_IDX = 2;
|
private static final int LAT_IDX = 2;
|
||||||
private static final int LONG_IDX = 3;
|
private static final int LONG_IDX = 3;
|
||||||
@ -52,7 +53,7 @@ class ClosestCityMapper {
|
|||||||
// Identifies if cities are in last, first format like "Korea, South"
|
// Identifies if cities are in last, first format like "Korea, South"
|
||||||
private static final Pattern COUNTRY_WITH_COMMA = Pattern.compile("^\\s*([^,]*)\\s*,\\s*([^,]*)\\s*$");
|
private static final Pattern COUNTRY_WITH_COMMA = Pattern.compile("^\\s*([^,]*)\\s*,\\s*([^,]*)\\s*$");
|
||||||
|
|
||||||
private static final int MAX_IDX = Stream.of(CITY_NAME_IDX, COUNTRY_NAME_IDX, LAT_IDX, LONG_IDX)
|
private static final int MAX_IDX = Stream.of(CITY_NAME_IDX, STATE_NAME_IDX, COUNTRY_NAME_IDX, LAT_IDX, LONG_IDX)
|
||||||
.max(Integer::compare)
|
.max(Integer::compare)
|
||||||
.get();
|
.get();
|
||||||
|
|
||||||
@ -169,12 +170,15 @@ class ClosestCityMapper {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// city is required
|
||||||
String cityName = csvRow.get(CITY_NAME_IDX);
|
String cityName = csvRow.get(CITY_NAME_IDX);
|
||||||
if (StringUtils.isBlank(cityName)) {
|
if (StringUtils.isBlank(cityName)) {
|
||||||
logger.log(Level.WARNING, String.format("No city name determined for line %d.", lineNum));
|
logger.log(Level.WARNING, String.format("No city name determined for line %d.", lineNum));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// state and country can be optional
|
||||||
|
String stateName = csvRow.get(STATE_NAME_IDX);
|
||||||
String countryName = parseCountryName(csvRow.get(COUNTRY_NAME_IDX), lineNum);
|
String countryName = parseCountryName(csvRow.get(COUNTRY_NAME_IDX), lineNum);
|
||||||
|
|
||||||
Double lattitude = tryParse(csvRow.get(LAT_IDX));
|
Double lattitude = tryParse(csvRow.get(LAT_IDX));
|
||||||
@ -189,7 +193,7 @@ class ClosestCityMapper {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new CityRecord(cityName, countryName, lattitude, longitude);
|
return new CityRecord(cityName, stateName, countryName, lattitude, longitude);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -309,7 +309,7 @@ public class GeolocationSummary implements DefaultArtifactUpdateGovernor {
|
|||||||
Long mostRecent = null;
|
Long mostRecent = null;
|
||||||
|
|
||||||
for (MapWaypoint pt : dataSourcePoints) {
|
for (MapWaypoint pt : dataSourcePoints) {
|
||||||
CityRecord city = closestCityMapper.findClosest(new CityRecord(null, null, pt.getX(), pt.getY()));
|
CityRecord city = closestCityMapper.findClosest(new CityRecord(null, null, null, pt.getX(), pt.getY()));
|
||||||
Long curTime = pt.getTimestamp();
|
Long curTime = pt.getTimestamp();
|
||||||
if (curTime != null && (mostRecent == null || curTime > mostRecent)) {
|
if (curTime != null && (mostRecent == null || curTime > mostRecent)) {
|
||||||
mostRecent = curTime;
|
mostRecent = curTime;
|
||||||
|
@ -145,11 +145,19 @@ public class GeolocationPanel extends BaseDataSourceSummaryPanel {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StringUtils.isBlank(record.getCountry())) {
|
List<String> cityIdentifiers = Stream.of(record.getCityName(), record.getState(), record.getCountry())
|
||||||
return record.getCityName();
|
.filter(StringUtils::isNotBlank)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
if (cityIdentifiers.size() == 1) {
|
||||||
|
return cityIdentifiers.get(0);
|
||||||
|
} else if (cityIdentifiers.size() == 2) {
|
||||||
|
return String.format("%s, %s", cityIdentifiers.get(0), cityIdentifiers.get(1));
|
||||||
|
} else if (cityIdentifiers.size() >= 3) {
|
||||||
|
return String.format("%s, %s; %s", cityIdentifiers.get(0), cityIdentifiers.get(1), cityIdentifiers.get(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
return String.format("%s, %s", record.getCityName(), record.getCountry());
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user