/*
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.service.protocol;
import java.util.*;
import net.java.sip.communicator.service.protocol.event.*;
/**
* This interface is an extension of the operation set, meant to be
* implemented by protocols that support exchange of geolocation details (like
* Jabber for example).
*
* @author Guillaume Schreiner
*/
public interface OperationSetGeolocation
extends OperationSet
{
//Names of keys used for storing geolocation data in geolocation Maps.
/**
* The name of the geolocation map key corresponding to the altitude in
* meters above or below sea level (e.g. 1609).
*/
public final static String ALT = "alt";
/**
* The name of the geolocation map key that we use for storing named areas
* such as a campus or neighborhood (e.g. Central Park).
*/
public final static String AREA = "area";
/**
* The name of the geolocation map key that we use for storing GPS bearing
* (direction in which the entity is heading to reach its next waypoint),
* measured in decimal degrees relative to true north.
*/
public final static String BEARING = "bearing";
/**
* The name of the geolocation map key that we use for indicating a
* specific building on a street or in an area (e.g. The Empire State
* Building).
*/
public final static String BUILDING = "building";
/**
* The name of the geolocation map key that we use for indicating the
* nation where the user is located (e.g. Greenland).
*/
public final static String COUNTRY = "country";
/**
* GPS datum.
*/
public final static String DATUM = "datum";
/**
* The name of the geolocation map key that we use for storing a
* natural-language name for or description of a given location (e.g.
* Bill's house).
*/
public final static String DESCRIPTION = "description";
/**
* The name of the geolocation map key that we use for storing horizontal
* GPS errors in arc minutes (e.g. 10).
*/
public final static String ERROR = "error";
/**
* The name of the geolocation map key that we use for storing a particular
* floor in a building (e.g. 102).
*/
public final static String FLOOR = "floor";
/**
* The name of the geolocation map key that we use for storing geographic
* latitude in decimal degrees North (e.g. 39.75).
*/
public final static String LAT = "lat";
/**
* The name of the geolocation map key that we use for indicating a
* locality within the administrative region, such as a town or city (e.g.
* Paris).
*/
public final static String LOCALITY = "locality";
/**
* The name of the geolocation map key that we use for indicating
* longitude in decimal degrees East (e.g. -104.99).
*/
public final static String LON = "lon";
/**
* The name of the geolocation map key that we use for storing post codes
* (or any code used for postal delivery) (e.g. 67000).
*/
public final static String POSTALCODE = "postalcode";
/**
* The name of the geolocation map key that we use for indicating an
* administrative region of the nation, such as a state or province (e.g.
* Ile de France).
*/
public final static String REGION = "region";
/**
* The name of the geolocation map key that we use for indicating a
* particular room in a building (e.g. C-425).
*/
public final static String ROOM = "room";
/**
* The name of the geolocation map key that we use for storing a
* thoroughfare within a locality, or a crossing of two thoroughfares (e.g.
* 34th and Broadway).
*/
public final static String STREET = "street";
/**
* The name of the geolocation map key that we use to indicate a catch-all
* element that captures any other information about the location (e.g.
* North-West corner of the lobby).
*/
public final static String TEXT = "text";
/**
* The name of the geolocation map key that we use to indicate UTC
* timestamp specifying the moment when the reading was taken
* (e.g. 2007-05-27T21:12Z).
*/
public final static String TIMESTAMP = "timestamp";
/**
* Publish the location contained in the <tt>geolocation</tt> map to all
* contacts in our contact list.
*
* @param geolocation a <tt>java.uil.Map</tt> containing the geolocation
* details of the position we'd like to publish.
*/
public void publishGeolocation(Map geolocation);
/**
* Retrieve the geolocation of the contact corresponding to
* <tt>contactIdentifier</tt>.
*
* @param contactIdentifier the address of the <tt>Contact</tt> whose
* geolocation details we'd like to retrieve.
*
* @return a <tt>java.util.Map</tt> containing the geolocation details of
* the contact with address <tt>contactIdentifier</tt>.
*/
public Map queryContactGeolocation(String contactIdentifier);
/**
* Registers a listener that would get notifications any time a contact
* publishes a new geolocation.
*
* @param listener the <tt>GeolocationListener</tt> to register
*/
public void addGeolocationListener( GeolocationListener listener);
/**
* Removes a listener previously registered for notifications of changes in
* the contact geolocation details.
*
* @param listener the <tt>GeolocationListener</tt> to unregister
*/
public void removeGeolocationListener( GeolocationListener listener);
}