Cosmo Feed Requirements
This page documents the requirements for the Cosmo feed service. Implementation of these features is likely to be staged over several dot releases culminating in full support of all requirements for the 1.0 release.
RPC Replacement
One goal of the feed service is to completely replace the use of JSON-RPC for communication between the web UI and the server. These are the 0.6 RPC methods that need to have feed service equivalents:
- event date-range query in a calendar-stamped collection (default sort by start date ascending)
- create event in a calendar-stamped collection
- create, update, remove event
- get all owned collections
- get all collection subscriptions
- subscribe to, unsubscribe from a collection
- update collection subscription
- get collection
- create, remove collection
- stamp collection as calendar
- get, set all user prefs
- get, set, remove named user pref
- get event's recurrence rules only unclear if this is really necessary, or if get event is sufficient
- set event's recurrence rule ui only allows user to edit a single rrule
- expand event recurrence
- detach recurrence instance from event
- get item's ticket
Use Cases
Live Clients
"Live clients" are those that perform management and querying tasks against calendars that are "owned" by the Cosmo server.
Calendar Use Cases
- Fetch the contents of a calendar as a feed
- Fetch the contents of a single event as a feed entry
- Create a calendar, optionally populating it with one or more events
- Add an event to a calendar
- Update an event in a calendar
- Remove an event from a calendar
- Query a calendar for events occurring within a time range, fetching the result as a feed
- Query a calendar for freebusy information, fetching result as a feed (GData) or a freebusy resource (CalAtom?)
Generic Resource Use Cases
- Fetch the contents of a collection as a feed
- Fetch the contents of a single resource as a feed entry
- Create a collection, optionally populating it with one or more resources
- Add a resource to a collection
- Update a resource in a collection
- Remove a resource from a collection
Parameterizing Queries
Whenever an operation returns a feed, the service will support request parameters that limit the number of entries returned in the feed and that indicate the position of the first item in the feed (allowing for subranges of the entire feed to be returned). It will also support a parameter that indicates only entries updated after a certain timestamp should be returned.
The feed service may in the future allow full text queries, but this is not required for 1.0.
User Interface
The Web Console will make feed or entry URLs available for every calendar, event, collection and resource displayed in the home directory browser. For calendars, it will allow the user to specify time ranges to narrow the feed results, and for all collections, it will allow size and position parameters as well. It will also allow the user to include any ticket that has been granted on the collection or resource in the feed or entry URL.
Syncing Clients
Syncing clients manage their own copies of calendars and synchronize the contents of those local calendars with the server copies. Syncing operations typically occur much less frequently than live operations and involve many more resources.
Because the feed service is aimed primarily at live clients, Cosmo won't provide any special support for syncing in the way that CalDAV does with its multiget report.
Import/Export
In some cases, a user will want to copy a calendar into or out of Cosmo. This can be accomplished by reading a feed from a local file or a remote feed service (or by writing to same). In this case, Cosmo's feed service behaves as a feed client itself:
- Read a feed from a local file and create and populate a corresponding calendar or collection
- Fetch a feed from a remote GData or CalAtom? service and create and populate a corresponding calendar or collection
- Write a feed representing a calendar or collection to a local file
- Send a feed representing a calendar or collection to a remote GData or CalAtom? service
As much as possible, Cosmo will attempt to save bandwidth by providing links to entry content when exporting feeds rather than by including the content inline. When importing feeds, Cosmo will follow any links provided to import the content of each entry (for links that specify media types that Cosmo understands).
User Interface
The Web Console will allow users to do the following:
- Select a local feed file to import a calendar, collection, event or resource
- Enter a remote URL that provides a feed to import as above
- Select a local feed file to export a calendar, collection, event or resource
- Enter a remote URL that accepts a feed to export as above