#include <Bonobo.idl>

module GNOME {

	module Calendar {
		
		interface Repository {

			exception NotFound {};
			typedef sequence<string> String_Sequence;

			/*
			 * get_object:
			 * @uid: Unique Identifier for the object
			 *
			 * Returns a vCalendar object for the object
			 * that matches the UID @uid.  
			 */
			string get_object    (in string uid)
				raises (NotFound);

			/*
			 * get_objects_by_id_list:
			 * @uid_list: a sequence of Unique Identifiers
			 *
			 * Returns a vCalendar object for the objects
			 * that matches the given UID list @uid_list;
			 * NotFound is raised if any of the given UIDs
			 * were not found.
			 */
			string get_objects_by_id_list (in String_Sequence uid)
				raises (NotFound);

			/*
			 * get_object_by_pilot_id:
			 * @pilot_id: the pilot id
			 * 
			 * Returns the object that has the @pilot_id 
			 * identifier.
			 */
			string get_object_by_pilot_id (in long pilot_id) 
				raises (NotFound);

			/*
			 * get_id_from_pilot_id:
			 * @pilot_id: the pilot id
			 * 
			 * Returns the object id that matches the @pilot_id 
			 * identifier.
			 */
			string get_id_from_pilot_id (in long pilot_id)
				raises (NotFound);

			/*
			 * delete_object:
			 * @uid: Unique Identifier for the object
			 */
			void delete_object (in string uid)
				raises (NotFound);

			/*
			 * update_object:
			 * @uid: uid of object to update
			 * @object: vcard object to update 
			 */
			void update_object (in string uid, in string object);

			/*
			 * update_pilot_id:
			 * @uid: Unique identifier for the event we want to update
			 * @pilot_id: new ID assigned by the pilot
			 * @pilot_status: Status to flag the event with
			 */
			void update_pilot_id (in string uid, in long pilot_id, in long pilot_status)
				raises (NotFound);

			/*
			 * get_objects:
			 * 
			 * Danger Will Robinson : This can result in a 
			 * huge string, namely the size of all your entries.
			 * Returns a vCalendar with all the objects
			 */
			string get_objects ();

			/*
			 * get_object_id_list
			 *
			 * Returns a sequence of the UID's of the entries
			 */
			String_Sequence get_object_id_list();

			/*
			 * get_updated_objects:
			 * 
			 * Returns a vCalendar with all the objects that have been
			 * modified since the last Pilot Sync
			 */
			string get_updated_objects ();

			/* 
			 * Returns the number of objects of a specific type in the calendar
			 * repository. 
			 */

			enum RecordStatus {
				ANY,      /* This means all records */
				NEW,
				MODIFIED,
				DELETED
			};

			long get_number_of_objects(in RecordStatus record_status);

			/*
			 * done:
			 * 
			 * Informs the calendar that we are done using it,
			 * gets a chance to destroy windows and save information.
			 */
			void done ();
		};
	};
};