Todo
--------------------------------------------------------------------------------
MySql
Have to edit schema then source it
Map user 0 on to user 1.
???
Add driver jar to tomcat common/lib
Need to change vtimezone def to text
--------------------------------------------------------------------------------
Remove references to getEvent(id)
--------------------------------------------------------------------------------
Changes caused by use of calendar id.
The last round of changes were caused by the need to make the guid unique only
within the context of a calendar collection. This requires that the calendar
id be part of the event key.
All of the url for fetching single events need to change. There are about 8 of
them in the public default stylesheet.
The changes were relatively simple:
Change all occurrences of
subid={$subscriptionId}&
to
subid={$subscriptionId}&calid={$calendarId}&
In 2-3 places you need to define calendarId. Look for occurences of
and immediately following add
A further change is to look for the addEventRef.do url and change the text
eventId={$id}
to
subid={$subscriptionId}&calid={$calendarId}&guid={$guid}&recurrenceId={$recurrenceId}
that is, make it the same form as the others. (I found 2 of these)
These changes will also be required in the user client stylesheet.
--------------------------------------------------------------------------------
Lost the exrules from the recurrence info hbm - add them
--------------------------------------------------------------------------------
Installing webtest
1. Download build.zip from http://webtest.canoo.com/webtest/manual/Downloads.html
2. Create a directory webtest in the quickstart at the same level as calendar3
3. Unzip build.zip into that directory
++++++++++++
into svn
calendar3/webtest (recurse)
--------------------------------------------------------------------------------
Testing:
Add events at boundaries - start/end of day, week, month.
Switch displays and ensure they turn up.
--------------------------------------------------------------------------------
Same url - eg week tab still causes fetch of events
--------------------------------------------------------------------------------
Watch for same event appearing in different calendars through ref.
--------------------------------------------------------------------------------
2.3.2 dump needs to dump filters before events.
--------------------------------------------------------------------------------
update quickstart stuff
--------------------------------------------------------------------------------
After error (try deleting subscription) - jump to main menu gets null pointer
in HibSession.isOpen(HibSession.java:120)
Probably because we threw session away. Get a new one?
--------------------------------------------------------------------------------
Admin delete event button doesn't work.
--------------------------------------------------------------------------------
When duplicating event - set creator
--------------------------------------------------------------------------------
Web-client - ensure no unexpected data modifications.
--------------------------------------------------------------------------------
Check all day events are correct in all clients.
--------------------------------------------------------------------------------
Finish off moving calendar labeling stuff out of TimeDateComponents
am/pm etc.
--------------------------------------------------------------------------------
Floating times should be as the result of an explicit user request.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
What was I trying to do with the default access stuff in the principal?
There must be a better way - or maybe I've got it the wrong way round.
I think I must have decided that the principal was a reasonable place to store
the default access for that principals locations etc. In effect the principal
is the container for that stuff.
--------------------------------------------------------------------------------
The EventAnnotation class was causing multiple queries - (polymorphic queries)
For example, the hql "select count(*) from BwEvents where ..."
caused 2 queries and a non-unique result exception
Fixed by changing the hierarchy, making BwEvent a common base class then
subclass for BwEventObj and BwEventAnnotation.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
lazy="false" is set on calendar objects.
--------------------------------------------------------------------------------
Acl.encode should not encode Ace with inherited = true
Check this - update made
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Need to ensure update doesn't change the guid
--------------------------------------------------------------------------------
Fix the add event link in calendar gui
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
We probably need the equivalent of an event info object at the Calintf level to
contain transient information about the event. Should hold:
a. Overrides
b. Allowed access (read/write)
Information can be copied into the EventInfo object.
--------------------------------------------------------------------------------
Notes on annotations and overrides and fetching events.
--------------------------------------------------------------------------------
Add an inbox calendar - do we want outbox? Put proxy in outbox?
Delete proxy
--------------------------------------------------------------------------------
Recurrences - ask that add not be removed - just limit to 1 instance
Feb 31st - RFC2445 page 44
--------------------------------------------------------------------------------
BwDateTime.makeDtEnd and makeDtStart probably will not work.
They probably need to set the value after setting the timezone.
--------------------------------------------------------------------------------
addEventRef.do
What form of link do we build. Some form of url to the event
--------------------------------------------------------------------------------
Caldav
** Can set start before end - validate in CalSvc
** Was able to create 2 events - different guids same name
** CaldavComponentNode.init called from lastmod and gets multiple objects
besides the inefficiency? We need to handle multiple objects for recurrences
A node represents a name so all instances need to be packed into
one node - example 7.6.3 shows this
Filter.query should do this bit I think.
** Need to change back end to support limit-recurrence-set and expand
time ranges (why they there anyway)
** getEventsByName needs to get any overrides
** Icalendar.toIcal(Collection) -- add timezones
** What response for mismatched name + guid
** Need to check that a put hasn't changed the calendar (can it?)
** Is 3.1.1.3 working OK? Returning timezone
** Is 3.1.1.4 working OK? Also returning timezone
** Report is ignoring depth
** Initial PUT of recurring event with overrides doesn't work.
** calendar-access in headers
** Was able to create 2 events with same guid and name
** Adding same (recurring) event twice seems to duplicate instances
Try exd1 twice
** Hibernate seems to update objects just because they changed. Doesn't need
explicit save?
** Message set on bad request exception isn't making it back to client. Try a
duplicate guid for example.
--------------------------------------------------------------------------------
Caldav question(s)
+++
Is the draft inconsistent (or unclear) around
4.1 Calendar Object Resource
The vcalendar shown has 3 vevents and 2 uids. Spec say's
Calendar components in a calendar collection that have different UID
property values MUST be stored in separate calendar object resources.
So we have 2 resources
5.3.2 says
The Request-URI on the PUT request MUST include the target collection,
where the resource is to be created, plus the name of the resource in
the last path segment.
which seems to require 2 urls for each of those resources so they couldn't
appear in the same vcalendar object?
Or to put it another way caldav requires that each PUT only be for one
uid?
+++
What response for attempt to create duplicate guids?
bad-request + message?
--------------------------------------------------------------------------------
Delete in user calendar doesn't work
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Event_Attendees table has wrong column name
--------------------------------------------------------------------------------
Recurrences and proxies
1. Don't fetch master event for getEvents - needs a flag on recurrences
Fetch if named explicitly - UNLESS we are being asked specifically for
unexpanded events
2. Don't use master as first entry
3. Need to fix proxy events.
--------------------------------------------------------------------------------
Proxy events and/or annotations
What we're trying to solve here are a number of problems.
First we need to be able to modify an instance of a recurring event without
losing track of the changes to the master event. Modifying an instance means
changing the start date for instance but not missing changes to the master event
attendees.
Another case is very similar - we want to be able to annotate events we don't
have write access to - for example public events or events owned by a group or
user.
The mechanism might also be seen as a way of versioning events.
The approach is to create an event object which is empty and point it at the
target event. It has to be populated with the start date/time and the guid so
we can find it during the search. The guid is no problem - it never changes, the
dates are a problem as we'll see later.
Simple fields are relatively simple. For example the description. The process is
something like -
If the referring event has a value then use that, otherwise use the target event
value.
A problem occurs when the target event changes. Without tracking all changes to
the target we can't tell the user what changed. For example, user A annotates
the description only, then user B changes the target summary then there is no
need to notify user A. On the other hand if user B changes the description maybe
we should tell user A.
Collections are harder because we need to track changes to individual elements
as well as additions and deletions from the collection.
Probably we ought to save only the changes to collections and apply them at each
retrieval. That requires a field in the collection elements flagging that
element as a change.
Some implications:
When we update an event - if the event object is an annotation we need to
compare every field and see if it differs from the target. If not don't set the
annotation. The BwEventProxy object will do that for us.
--------------------------------------------------------------------------------
Timezones:
getMergedTimezones might be wrong - seems to assume at least a match in public
Need a two stage lookup in the timezones table
1. static public timezone table
2. non-static user timezone table
User lookup needs to be the owner of the event which contains the timezone. All
timezone info can be regarded as public I guess.
We should do a 3 stage lookup.
1. In current user's table
2. In event owners table if different
3. In system table.
Also, for public events don't check any user table?
Is this ok? user was douglm
[java] 10:48:52,041 DEBUG [CalSvcTimezones] trace: find timezone with id US/Eastern for owner null
[java] 10:48:52,049 DEBUG [CalSvcTimezones] trace: register timezone with id US/Eastern
[java] 10:48:52,049 DEBUG [IcalTranslator] Timezone already in db
--------------------------------------------------------------------------------
Status property
Use it in the client(s).
--------------------------------------------------------------------------------
Use guid (+recurrenceid) to fetch events
--------------------------------------------------------------------------------
Fix up messages.
--------------------------------------------------------------------------------
Users pluggable interface
--------------------------------------------------------------------------------
Preferences - mod/etc
Move some deploy time configuration stuff into pref.
--------------------------------------------------------------------------------
Quotas and limits - entity size and total
limit x-properties size?
--------------------------------------------------------------------------------
Manage calendars.
Check that access is limited to calendars to which auth user has at least
write-content access
Looks like we need to give super users specific access to the calendars.
Also delete needs to clean up beforehand
- remove any subscriptions
- which means remove subscriptions from views
--------------------------------------------------------------------------------
Do add/remove views in admin (and user)
url of form
http://localhost:8080/caladmin/addView.do?name=All
--------------------------------------------------------------------------------
Do add/remove/mod subscriptions
url of form
http://localhost:8080/ucal/subscribe.do?calid=16&name=Arts[&email=y/n][&freebusy=y/n][&view=Arts|addToDefaultView=y/n]
http://localhost:8080/ucal/unsubscribe.do?name=Arts
This needs to remove subscription from all views
--------------------------------------------------------------------------------
Simplify public events user/owner stuff
It all seems over complicated. For public events we have 3 users
1. The authenticated user - for access checks
2. The owner for objects created by that user - e.g. an admin group
3. The calendar system owner - for global entities such as prefs
For a personal user they are all the same thing. I think 1 and 2 could become
the same thing
For public calendars 3 is the owner of the preferences object which defines the
preferred view etc and also the view and subscription objects.
--------------------------------------------------------------------------------
A number of classes need to be marked serializable
Particularly HibSession
--------------------------------------------------------------------------------
Argentina holidays has a bunch of x-properties
--------------------------------------------------------------------------------
Uploads sort of work. Need to allow specification of receiving calendar.
--------------------------------------------------------------------------------
Access control testing
Caldav access reports probably need fixing
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------