package io.lumify.gpw.util;
import io.lumify.core.util.LumifyLogger;
import io.lumify.core.util.LumifyLoggerFactory;
import org.json.JSONObject;
import org.securegraph.type.GeoPoint;
import java.util.ArrayList;
public class FFprobeGeoLocationUtil {
private static final LumifyLogger LOGGER = LumifyLoggerFactory.getLogger(FFprobeGeoLocationUtil.class);
public static GeoPoint getGeoPoint(JSONObject json) {
if (json == null) {
return null;
}
JSONObject formatObject = json.optJSONObject("format");
if (formatObject != null) {
JSONObject tagsObject = formatObject.optJSONObject("tags");
if (tagsObject != null) {
String locationString = tagsObject.optString("location");
if (!locationString.equals("")) {
GeoPoint geoPoint = parseGeoLocationString(locationString);
if (geoPoint != null) {
return geoPoint;
}
}
}
}
LOGGER.debug("Could not retrieve a \"geoLocation\" value from the JSON object.");
return null;
}
private static GeoPoint parseGeoLocationString(String locationString) {
String myRegularExpression = "(\\+|\\-|/)";
String[] tempValues = locationString.split(myRegularExpression);
String[] values = removeNullsFromStringArray(tempValues);
if (values.length < 2) {
return null;
}
String latitudeValue = values[0];
String latitudeSign = "";
int indexOfLatitude = locationString.indexOf(latitudeValue);
if (indexOfLatitude != 0) {
latitudeSign = locationString.substring(0, 1);
}
String latitudeString = latitudeSign + latitudeValue;
Double latitude = Double.parseDouble(latitudeString);
String longitudeValue = values[1];
String longitudeSign = "";
int indexOfLongitude = locationString.indexOf(longitudeValue, indexOfLatitude + latitudeValue.length());
String longitudePreviousChar = locationString.substring(indexOfLongitude - 1, indexOfLongitude);
if (longitudePreviousChar.equals("-") || longitudePreviousChar.equals("+")) {
longitudeSign = longitudePreviousChar;
}
String longitudeString = longitudeSign + longitudeValue;
Double longitude = Double.parseDouble(longitudeString);
String altitudeValue = null;
Double altitude = null;
if (values.length == 3) {
altitudeValue = values[2];
String altitudeSign = "";
int indexOfAltitude = locationString.indexOf(altitudeValue, indexOfLongitude + longitudeValue.length());
String altitudePreviousChar = locationString.substring(indexOfAltitude - 1, indexOfAltitude);
if (altitudePreviousChar.equals("-") || altitudePreviousChar.equals("+")) {
altitudeSign = altitudePreviousChar;
}
String altitudeString = altitudeSign + altitudeValue;
altitude = Double.parseDouble(altitudeString);
}
if (latitude != null && longitude != null && altitude != null) {
return new GeoPoint(latitude, longitude, altitude);
} else if (latitude != null && longitude != null && altitude == null) {
return new GeoPoint(latitude, longitude);
} else {
return null;
}
}
public static String[] removeNullsFromStringArray(String[] array) {
ArrayList<String> arrayList = new ArrayList<String>();
for (int i = 0; i < array.length; i++) {
if (array[i] != null && !array[i].equals("")) {
arrayList.add(array[i]);
}
}
String[] newArray = arrayList.toArray(new String[arrayList.size()]);
return newArray;
}
}