Skip to content

ical4j/ical4j-streams

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

iCal4j Streams

Reactive programming for iCalendar (and vCard)

Introduction

Streams provides a means to respond to changes in model state, useful when implementing automated workflows and other event-driven behaviours. The general idea is that in a bounded context, delivery of a model object (new or updated) can trigger fixed or configurable responses.

For example, when you create a new meeting it must be forwarded to all participants in order for them to communicate their availability (i.e. accept or decline). The context in this instance is a Calendar User Agent (CUA) capable of securely (and durably) sending email via a configured transport (i.e. SMTP).

Similarly, when the CUA receives a response from a participant (as a modified object), via a configured transport (i.e. POP3 or IMAP), it must be able to locate and update the corresponding event with their participation status.

These are examples of predefined workflow automation within a calendaring system, however it is also conceivable to support customisable workflows to support bespoke solutions. iCal4j Streams allows you to define intent-based actions in response to triggers, and the corresponding automation to fulfill those intents.

Workflow Rules

Workflow automation are defined in the rule definitions, which define the conditions that trigger a workflow and the workflow intent. Each rule is applied to the workflow context (e.g. a content collection, etc.), and the specified intent is triggered if the rule is satisfied.

Rules may be defined programmatically or via the rule definition language (TBD).

Intents

Intents are used to track (and persist) actions generated by a workflow rule, and provide an abstraction to the underlying implementation.

For example, when a new meeting invitation is created, it may generate an action to email all participants. This action can be persisted with the EMAIL_PARTICIPANTS Intent, and a link to the meeting invitation. Futher processing of the action would see it fulfilled by a configured email service.

Summary

Managing schedules across multiple CUAs can be complex and time-consuming, even when using sophisticated software such as Microsoft Outlook or on of the many capable CalDAV implementations. The ical4j-scheduler aims to provide functions that can automate some of the time-consuming manual aspects of schedule management.

Features

  • Automatic resource allocation - a common use-case for scheduling software is allocation of resources, such as meeting rooms, for an event. Instead of manually searching for an available resource, just include the ical4j-scheduler as an attendee and it will provide a counter-invitation that includes an appropriate resource. Resources may be allocated intelligently using event event properties such as number of attendees, location, etc. to allocate the most appropriate available resource.
  • Automated conflict resolution - often resources and people may have conflicts in their schedule that prevent them from being available for simultaneous events. The ical4j-scheduler can offer to resolve such conflicts whilst avoiding new conflicts based on the free/busy availability of the resources and people in question. One or more counter-invitations will be provided to the events managed (attended) by the ical4j-scheduler that offer a solution to the conflict. This can also be useful for constructing recurring timetables for many people and resources.