Documentation Index
Fetch the complete documentation index at: https://mintlify.com/sakaiproject/sakai/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The CalendarService manages calendars and calendar events in Sakai LMS. Each site can have one or more calendars containing events that can be viewed, edited, and shared.
Package: org.sakaiproject.calendar.api
Source: /calendar/calendar-api/api/src/java/org/sakaiproject/calendar/api/CalendarService.java
Constants
Application Identifiers
public static final String APPLICATION_ID = "sakai:calendar";
public static final String REFERENCE_ROOT = "/calendar";
public static final String REF_TYPE_CALENDAR = "calendar";
public static final String REF_TYPE_EVENT = "event";
Event Types
public static final String EVENT_CREATE_CALENDAR = "calendar.create";
public static final String EVENT_ADD_CALENDAR = "calendar.new";
public static final String EVENT_REMOVE_CALENDAR = "calendar.delete";
public static final String EVENT_MODIFY_CALENDAR = "calendar.revise";
public static final String EVENT_MODIFY_CALENDAR_EVENT_TITLE = "calendar.revise.event.title";
public static final String EVENT_MODIFY_CALENDAR_EVENT_TIME = "calendar.revise.event.time";
public static final String EVENT_MODIFY_CALENDAR_EVENT_TYPE = "calendar.revise.event.type";
public static final String EVENT_MODIFY_CALENDAR_EVENT_ACCESS = "calendar.revise.event.access";
Security Permissions
public static final String AUTH_ADD_CALENDAR = "calendar.new";
public static final String AUTH_REMOVE_CALENDAR_ANY = "calendar.delete.any";
public static final String AUTH_REMOVE_CALENDAR_OWN = "calendar.delete.own";
public static final String AUTH_MODIFY_CALENDAR_ANY = "calendar.revise.any";
public static final String AUTH_MODIFY_CALENDAR_OWN = "calendar.revise.own";
public static final String AUTH_IMPORT_CALENDAR = "calendar.import";
public static final String AUTH_SUBSCRIBE_CALENDAR = "calendar.subscribe";
public static final String AUTH_READ_CALENDAR = "calendar.read";
public static final String AUTH_ALL_GROUPS_CALENDAR = "calendar.all.groups";
View Types
public static final int DAY_VIEW = 0;
public static final int LIST_SUBVIEW = 1;
public static final int WEEK_VIEW = 2;
public static final int MONTH_VIEW = 3;
public static final int LIST_VIEW = 5;
Recurrence Modification Types
public static final int MOD_NA = 0; // No intention
public static final int MOD_THIS = 1; // Just this one
public static final int MOD_ALL = 2; // All occurrences
public static final int MOD_REST = 3; // This and subsequent
public static final int MOD_PRIOR = 4; // This and prior
Calendar Management
addCalendar
Create a new calendar.
public CalendarEdit addCalendar(String ref)
throws IdUsedException, IdInvalidException, PermissionException;
The new calendar reference
Returns: The newly created CalendarEdit object
Throws:
IdUsedException - If the reference is already in use
IdInvalidException - If the reference contains invalid characters
PermissionException - If the user lacks permission to add calendars
Note: You must call commitCalendar() to finalize or cancelCalendar() to discard
Example:
String calendarRef = calendarService.calendarReference(siteId, "main");
try {
CalendarEdit calendar = calendarService.addCalendar(calendarRef);
calendar.getPropertiesEdit().addProperty(
ResourceProperties.PROP_DISPLAY_NAME,
"Site Calendar"
);
calendarService.commitCalendar(calendar);
} catch (IdUsedException e) {
// Calendar already exists
}
getCalendar
Retrieve a specific calendar.
public Calendar getCalendar(String ref)
throws IdUnusedException, PermissionException;
Returns: The Calendar with the specified reference
Throws:
IdUnusedException - If the calendar doesn’t exist
PermissionException - If the user lacks permissions
Example:
String calendarRef = calendarService.calendarReference(siteId, "main");
try {
Calendar calendar = calendarService.getCalendar(calendarRef);
System.out.println("Calendar: " + calendar.getDisplayName());
} catch (IdUnusedException e) {
System.err.println("Calendar not found");
}
editCalendar
Get a locked calendar for editing.
public CalendarEdit editCalendar(String ref)
throws IdUnusedException, PermissionException, InUseException;
Returns: A CalendarEdit object for editing
Throws:
IdUnusedException - If the calendar doesn’t exist
PermissionException - If the user lacks permission
InUseException - If the calendar is locked by another user
Note: Must call commitCalendar(), cancelCalendar(), or removeCalendar() when done
commitCalendar
Commit changes to a calendar and release the lock.
public void commitCalendar(CalendarEdit edit);
The calendar edit object to commit
Note: The CalendarEdit is disabled after this call
cancelCalendar
Cancel changes to a calendar and release the lock.
public void cancelCalendar(CalendarEdit edit);
The calendar edit object to cancel
removeCalendar
Remove a calendar that is locked for edit.
public void removeCalendar(CalendarEdit edit) throws PermissionException;
Throws: PermissionException if the user lacks permission
Event Management
getEvents
Merge events from multiple calendars within a time range.
public CalendarEventVector getEvents(
List references,
TimeRange range
);
List of calendar references
Time period to select events (null = one year before and after)
Returns: CalendarEventVector with the union of all events
Example:
List<String> calendarRefs = Arrays.asList(
calendarService.calendarReference(siteId, "main")
);
TimeRange thisWeek = timeService.newTimeRange(
timeService.newTime(),
7 * 24 * 60 * 60 * 1000L
);
CalendarEventVector events = calendarService.getEvents(calendarRefs, thisWeek);
for (Object obj : events) {
CalendarEvent event = (CalendarEvent) obj;
System.out.println(event.getDisplayName() + " at " + event.getRange());
}
getFilteredEvents
Retrieve filtered events for the current user.
public List<CalendarEvent> getFilteredEvents(
Map<EventFilterKey, Object> options
);
options
Map<EventFilterKey, Object>
required
Filter options (supports “limit” and “siteId”)
Returns: List of CalendarEvent objects matching the filter
Example:
Map<EventFilterKey, Object> options = new HashMap<>();
options.put(EventFilterKey.SITE_ID, siteId);
options.put(EventFilterKey.LIMIT, 10);
List<CalendarEvent> events = calendarService.getFilteredEvents(options);
Recurrence
newRecurrence
Create a new recurrence rule.
public RecurrenceRule newRecurrence(String frequency);
public RecurrenceRule newRecurrence(String frequency, int interval);
public RecurrenceRule newRecurrence(String frequency, int interval, int count);
public RecurrenceRule newRecurrence(String frequency, int interval, Time until);
The frequency description (“DAILY”, “WEEKLY”, “MONTHLY”, “YEARLY”)
Time after which recurrences stop
Returns: A new RecurrenceRule object
Example:
// Every week for 10 occurrences
RecurrenceRule weeklyRule = calendarService.newRecurrence("WEEKLY", 1, 10);
// Daily until a specific date
Time endDate = timeService.newTime(System.currentTimeMillis() + 30L * 24 * 60 * 60 * 1000);
RecurrenceRule dailyRule = calendarService.newRecurrence("DAILY", 1, endDate);
Reference Methods
calendarReference
Get the internal reference for a calendar.
public String calendarReference(String context, String id);
Returns: The internal reference string
eventReference
Get the internal reference for an event.
public String eventReference(String context, String calendarId, String id);
Returns: The internal reference string for the event
calendarICalReference
Get the iCal reference for a calendar.
public String calendarICalReference(Reference ref);
Returns: The iCal reference string
calendarPdfReference
Get the PDF reference for a calendar.
public String calendarPdfReference(
String context,
String id,
int scheduleType,
String timeRangeString,
String userName,
boolean reverseOrder
);
The view type (DAY_VIEW, WEEK_VIEW, etc.)
The user name for the PDF
Whether to reverse event order
Returns: The PDF reference string
Permission Checking
allowGetCalendar
Check if the user can get a calendar.
public boolean allowGetCalendar(String ref);
Returns: true if the user is allowed to get the calendar
allowEditCalendar
Check if the user can edit a calendar.
public boolean allowEditCalendar(String ref);
Returns: true if the user can edit the calendar
allowImportCalendar
Check if the user can import calendar events.
public boolean allowImportCalendar(String ref);
Returns: true if the user can import events
allowSubscribeCalendar
Check if the user can subscribe to external calendars.
public boolean allowSubscribeCalendar(String ref);
Returns: true if the user can subscribe to external calendars
Export and Subscription
getExportEnabled
Check if public iCal export is enabled for a calendar.
public boolean getExportEnabled(String ref);
Returns: true if export is enabled
setExportEnabled
Enable or disable public iCal export for a calendar.
public void setExportEnabled(String ref, boolean enable);
True to enable, false to disable
Utility Methods
getCalendarReferences
Get all calendar references for a site.
public List<String> getCalendarReferences(String siteId);
Returns: List of calendar reference strings
Check if the calendar tool has been initialized for a site.
public boolean isCalendarToolInitialized(String siteId);
Returns: true if the calendar has been created
getUpcomingDaysLimit
Get the limit on upcoming days for filtered events.
public int getUpcomingDaysLimit();
Returns: The number of days (default 60, configurable via calendar.upcoming_days_limit)
Complete Example
import org.sakaiproject.calendar.api.*;
import org.sakaiproject.time.api.*;
import org.sakaiproject.entity.api.ResourceProperties;
public class CalendarExample {
private CalendarService calendarService;
private TimeService timeService;
public void createEventExample(String siteId) {
try {
// Get or create calendar
String calendarRef = calendarService.calendarReference(siteId, "main");
Calendar calendar;
try {
calendar = calendarService.getCalendar(calendarRef);
} catch (IdUnusedException e) {
CalendarEdit calEdit = calendarService.addCalendar(calendarRef);
calEdit.getPropertiesEdit().addProperty(
ResourceProperties.PROP_DISPLAY_NAME,
"Site Calendar"
);
calendarService.commitCalendar(calEdit);
calendar = calendarService.getCalendar(calendarRef);
}
// Edit calendar to add event
CalendarEdit calEdit = calendarService.editCalendar(calendarRef);
// Create event
CalendarEventEdit event = calEdit.addEvent();
event.setDisplayName("Team Meeting");
event.setDescription("Discuss project progress");
event.setType("Meeting");
// Set time range (1 hour from now)
Time start = timeService.newTime();
Time end = timeService.newTime(start.getTime() + 60 * 60 * 1000);
TimeRange range = timeService.newTimeRange(start, end);
event.setRange(range);
// Optional: Make it recurring (weekly for 10 weeks)
RecurrenceRule rule = calendarService.newRecurrence("WEEKLY", 1, 10);
event.setRecurrenceRule(rule);
// Commit changes
calendarService.commitCalendar(calEdit);
System.out.println("Event created: " + event.getDisplayName());
} catch (Exception e) {
System.err.println("Error creating event: " + e.getMessage());
}
}
public void listUpcomingEvents(String siteId) {
String calendarRef = calendarService.calendarReference(siteId, "main");
List<String> refs = Arrays.asList(calendarRef);
// Get events for next 7 days
Time now = timeService.newTime();
Time weekFromNow = timeService.newTime(now.getTime() + 7 * 24 * 60 * 60 * 1000);
TimeRange range = timeService.newTimeRange(now, weekFromNow);
CalendarEventVector events = calendarService.getEvents(refs, range);
System.out.println("Upcoming events:");
for (Object obj : events) {
CalendarEvent event = (CalendarEvent) obj;
System.out.println("- " + event.getDisplayName() +
" (" + event.getRange().firstTime() + ")");
}
}
}
See Also