package jeffaschenk.commons.system.external.geocoding;
import jeffaschenk.commons.touchpoint.model.serviceprovider.GeoLocation;
import jeffaschenk.commons.touchpoint.model.serviceprovider.GeoLocationCoordinates;
import java.math.BigDecimal;
/**
*
* Provides Common GeoCoding Service Provider Interface for performing location lookup and
* validation.
*
* @author jeffaschenk@gmail.com
*/
public interface GeoCodingServiceProvider {
/**
* getGeoCodingByAddress
*
* @param address - The textual Location Address for obtaining the GeoCoding.
* @return GeoLocation Object formulated from json representation
*/
GeoLocation getGeoCodingByAddress(String address);
/**
* getGeoCodingByCoordinates -- Aka Reverse Geo Lookup.
*
* @param coordinates - The specificed coordinates wrapper for latitude/longitude value for which you wish to
* obtain the closest, human-readable address.
*
* @return GeoLocation Object formulated from json representation
*/
GeoLocation getGeoCodingByCoordinates(GeoLocationCoordinates coordinates);
/**
* getGeoCodingByCoordinates -- Aka Reverse Geo Lookup.
*
* @param latitude
* @param longitude
* @return GeoLocation
*/
GeoLocation getGeoCodingByCoordinates(BigDecimal latitude, BigDecimal longitude);
/**
* Provides information if GeoCoding Service is available for Use and enabled to
* service Location requests.
*
* @return boolean
*/
boolean isGeoCodingEnabled();
/**
* GeoCoding Service Provider URL
* @return String
*/
String getGeoCodingServiceProviderUrl();
/**
* GeoCoding Service Provider Output.
* This Value can be either "json" or "xml".
*
* @return String - containing either "json" or "xml"
*
*/
String getGeoCodingServiceProviderOutput();
/**
* GeoCoding Sensor. Usually statically set to False
* as on the Server side we have no known location.
*
* @return String
*/
String getGeoCodingSensorForServer();
long getTotalNumberOfRequestsPerformed();
long getDailyNumberOfRequestsPerformed();
long getTotalNumberOfRequestsBlocked();
long getDailyNumberOfRequestsBlocked();
long getNumberOfRequestsPerSecond();
long getMaximumNumberOfRequestsPerSecondReached();
long getWhenMaximumNumberOfRequestsPerSecondReached();
long getLastRequestBlocked();
long getLastRequestPerformed();
int getDayInterval();
}