| 1 |
Todo |
|---|
| 2 |
|
|---|
| 3 |
-------------------------------------------------------------------------------- |
|---|
| 4 |
Remove references to getEvent(id) |
|---|
| 5 |
-------------------------------------------------------------------------------- |
|---|
| 6 |
Changes caused by use of calendar id. |
|---|
| 7 |
The last round of changes were caused by the need to make the guid unique only |
|---|
| 8 |
within the context of a calendar collection. This requires that the calendar |
|---|
| 9 |
id be part of the event key. |
|---|
| 10 |
|
|---|
| 11 |
All of the url for fetching single events need to change. There are about 8 of |
|---|
| 12 |
them in the public default stylesheet. |
|---|
| 13 |
|
|---|
| 14 |
The changes were relatively simple: |
|---|
| 15 |
Change all occurrences of |
|---|
| 16 |
subid={$subscriptionId}& |
|---|
| 17 |
to |
|---|
| 18 |
subid={$subscriptionId}&calid={$calendarId}& |
|---|
| 19 |
In 2-3 places you need to define calendarId. Look for occurences of |
|---|
| 20 |
<xsl:variable name="subscriptionId" select="subscription/id"/> |
|---|
| 21 |
and immediately following add |
|---|
| 22 |
<xsl:variable name="calendarId" select="calendar/id"/> |
|---|
| 23 |
|
|---|
| 24 |
A further change is to look for the addEventRef.do url and change the text |
|---|
| 25 |
eventId={$id} |
|---|
| 26 |
to |
|---|
| 27 |
subid={$subscriptionId}&calid={$calendarId}&guid={$guid}&recurrenceId={$recurrenceId} |
|---|
| 28 |
that is, make it the same form as the others. (I found 2 of these) |
|---|
| 29 |
|
|---|
| 30 |
These changes will also be required in the user client stylesheet. |
|---|
| 31 |
-------------------------------------------------------------------------------- |
|---|
| 32 |
Lost the exrules from the recurrence info hbm - add them |
|---|
| 33 |
-------------------------------------------------------------------------------- |
|---|
| 34 |
Installing webtest |
|---|
| 35 |
|
|---|
| 36 |
1. Download build.zip from http://webtest.canoo.com/webtest/manual/Downloads.html |
|---|
| 37 |
|
|---|
| 38 |
2. Create a directory webtest in the quickstart at the same level as calendar3 |
|---|
| 39 |
|
|---|
| 40 |
3. Unzip build.zip into that directory |
|---|
| 41 |
|
|---|
| 42 |
++++++++++++ |
|---|
| 43 |
into svn |
|---|
| 44 |
calendar3/webtest (recurse) |
|---|
| 45 |
|
|---|
| 46 |
-------------------------------------------------------------------------------- |
|---|
| 47 |
Testing: |
|---|
| 48 |
Add events at boundaries - start/end of day, week, month. |
|---|
| 49 |
|
|---|
| 50 |
Switch displays and ensure they turn up. |
|---|
| 51 |
-------------------------------------------------------------------------------- |
|---|
| 52 |
Same url - eg week tab still causes fetch of events |
|---|
| 53 |
-------------------------------------------------------------------------------- |
|---|
| 54 |
Watch for same event appearing in different calendars through ref. |
|---|
| 55 |
-------------------------------------------------------------------------------- |
|---|
| 56 |
2.3.2 dump needs to dump filters before events. |
|---|
| 57 |
-------------------------------------------------------------------------------- |
|---|
| 58 |
update quickstart stuff |
|---|
| 59 |
-------------------------------------------------------------------------------- |
|---|
| 60 |
After error (try deleting subscription) - jump to main menu gets null pointer |
|---|
| 61 |
in HibSession.isOpen(HibSession.java:120) |
|---|
| 62 |
|
|---|
| 63 |
Probably because we threw session away. Get a new one? |
|---|
| 64 |
-------------------------------------------------------------------------------- |
|---|
| 65 |
Admin delete event button doesn't work. |
|---|
| 66 |
-------------------------------------------------------------------------------- |
|---|
| 67 |
When duplicating event - set creator |
|---|
| 68 |
-------------------------------------------------------------------------------- |
|---|
| 69 |
Web-client - ensure no unexpected data modifications. |
|---|
| 70 |
-------------------------------------------------------------------------------- |
|---|
| 71 |
Check all day events are correct in all clients. |
|---|
| 72 |
-------------------------------------------------------------------------------- |
|---|
| 73 |
Finish off moving calendar labeling stuff out of TimeDateComponents |
|---|
| 74 |
am/pm etc. |
|---|
| 75 |
-------------------------------------------------------------------------------- |
|---|
| 76 |
Floating times should be as the result of an explicit user request. |
|---|
| 77 |
-------------------------------------------------------------------------------- |
|---|
| 78 |
-------------------------------------------------------------------------------- |
|---|
| 79 |
What was I trying to do with the default access stuff in the principal? |
|---|
| 80 |
There must be a better way - or maybe I've got it the wrong way round. |
|---|
| 81 |
|
|---|
| 82 |
I think I must have decided that the principal was a reasonable place to store |
|---|
| 83 |
the default access for that principals locations etc. In effect the principal |
|---|
| 84 |
is the container for that stuff. |
|---|
| 85 |
-------------------------------------------------------------------------------- |
|---|
| 86 |
The EventAnnotation class was causing multiple queries - (polymorphic queries) |
|---|
| 87 |
For example, the hql "select count(*) from BwEvents where ..." |
|---|
| 88 |
caused 2 queries and a non-unique result exception |
|---|
| 89 |
|
|---|
| 90 |
Fixed by changing the hierarchy, making BwEvent a common base class then |
|---|
| 91 |
subclass for BwEventObj and BwEventAnnotation. |
|---|
| 92 |
-------------------------------------------------------------------------------- |
|---|
| 93 |
-------------------------------------------------------------------------------- |
|---|
| 94 |
lazy="false" is set on calendar objects. |
|---|
| 95 |
-------------------------------------------------------------------------------- |
|---|
| 96 |
Acl.encode should not encode Ace with inherited = true |
|---|
| 97 |
|
|---|
| 98 |
Check this - update made |
|---|
| 99 |
-------------------------------------------------------------------------------- |
|---|
| 100 |
-------------------------------------------------------------------------------- |
|---|
| 101 |
Need to ensure update doesn't change the guid |
|---|
| 102 |
-------------------------------------------------------------------------------- |
|---|
| 103 |
Fix the add event link in calendar gui |
|---|
| 104 |
-------------------------------------------------------------------------------- |
|---|
| 105 |
-------------------------------------------------------------------------------- |
|---|
| 106 |
We probably need the equivalent of an event info object at the Calintf level to |
|---|
| 107 |
contain transient information about the event. Should hold: |
|---|
| 108 |
a. Overrides |
|---|
| 109 |
b. Allowed access (read/write) |
|---|
| 110 |
|
|---|
| 111 |
Information can be copied into the EventInfo object. |
|---|
| 112 |
-------------------------------------------------------------------------------- |
|---|
| 113 |
Notes on annotations and overrides and fetching events. |
|---|
| 114 |
-------------------------------------------------------------------------------- |
|---|
| 115 |
Add an inbox calendar - do we want outbox? Put proxy in outbox? |
|---|
| 116 |
Delete proxy |
|---|
| 117 |
-------------------------------------------------------------------------------- |
|---|
| 118 |
Recurrences - ask that add not be removed - just limit to 1 instance |
|---|
| 119 |
Feb 31st - RFC2445 page 44 |
|---|
| 120 |
-------------------------------------------------------------------------------- |
|---|
| 121 |
BwDateTime.makeDtEnd and makeDtStart probably will not work. |
|---|
| 122 |
They probably need to set the value after setting the timezone. |
|---|
| 123 |
-------------------------------------------------------------------------------- |
|---|
| 124 |
addEventRef.do |
|---|
| 125 |
What form of link do we build. Some form of url to the event |
|---|
| 126 |
-------------------------------------------------------------------------------- |
|---|
| 127 |
Caldav |
|---|
| 128 |
** Can set start before end - validate in CalSvc |
|---|
| 129 |
|
|---|
| 130 |
** Was able to create 2 events - different guids same name |
|---|
| 131 |
|
|---|
| 132 |
** CaldavComponentNode.init called from lastmod and gets multiple objects |
|---|
| 133 |
besides the inefficiency? We need to handle multiple objects for recurrences |
|---|
| 134 |
A node represents a name so all instances need to be packed into |
|---|
| 135 |
one node - example 7.6.3 shows this |
|---|
| 136 |
|
|---|
| 137 |
Filter.query should do this bit I think. |
|---|
| 138 |
|
|---|
| 139 |
** Need to change back end to support limit-recurrence-set and expand |
|---|
| 140 |
time ranges (why they there anyway) |
|---|
| 141 |
|
|---|
| 142 |
** getEventsByName needs to get any overrides |
|---|
| 143 |
|
|---|
| 144 |
** Icalendar.toIcal(Collection) -- add timezones |
|---|
| 145 |
|
|---|
| 146 |
** What response for mismatched name + guid |
|---|
| 147 |
|
|---|
| 148 |
** Need to check that a put hasn't changed the calendar (can it?) |
|---|
| 149 |
|
|---|
| 150 |
** Is 3.1.1.3 working OK? Returning timezone |
|---|
| 151 |
|
|---|
| 152 |
** Is 3.1.1.4 working OK? Also returning timezone |
|---|
| 153 |
|
|---|
| 154 |
** Report is ignoring depth |
|---|
| 155 |
|
|---|
| 156 |
** Initial PUT of recurring event with overrides doesn't work. |
|---|
| 157 |
|
|---|
| 158 |
** calendar-access in headers |
|---|
| 159 |
|
|---|
| 160 |
** Was able to create 2 events with same guid and name |
|---|
| 161 |
|
|---|
| 162 |
** Adding same (recurring) event twice seems to duplicate instances |
|---|
| 163 |
Try exd1 twice |
|---|
| 164 |
|
|---|
| 165 |
** Hibernate seems to update objects just because they changed. Doesn't need |
|---|
| 166 |
explicit save? |
|---|
| 167 |
|
|---|
| 168 |
** Message set on bad request exception isn't making it back to client. Try a |
|---|
| 169 |
duplicate guid for example. |
|---|
| 170 |
-------------------------------------------------------------------------------- |
|---|
| 171 |
Caldav question(s) |
|---|
| 172 |
|
|---|
| 173 |
+++ |
|---|
| 174 |
Is the draft inconsistent (or unclear) around |
|---|
| 175 |
4.1 Calendar Object Resource |
|---|
| 176 |
|
|---|
| 177 |
The vcalendar shown has 3 vevents and 2 uids. Spec say's |
|---|
| 178 |
|
|---|
| 179 |
Calendar components in a calendar collection that have different UID |
|---|
| 180 |
property values MUST be stored in separate calendar object resources. |
|---|
| 181 |
|
|---|
| 182 |
So we have 2 resources |
|---|
| 183 |
|
|---|
| 184 |
5.3.2 says |
|---|
| 185 |
|
|---|
| 186 |
The Request-URI on the PUT request MUST include the target collection, |
|---|
| 187 |
where the resource is to be created, plus the name of the resource in |
|---|
| 188 |
the last path segment. |
|---|
| 189 |
|
|---|
| 190 |
which seems to require 2 urls for each of those resources so they couldn't |
|---|
| 191 |
appear in the same vcalendar object? |
|---|
| 192 |
|
|---|
| 193 |
Or to put it another way caldav requires that each PUT only be for one |
|---|
| 194 |
uid? |
|---|
| 195 |
+++ |
|---|
| 196 |
What response for attempt to create duplicate guids? |
|---|
| 197 |
bad-request + message? |
|---|
| 198 |
-------------------------------------------------------------------------------- |
|---|
| 199 |
Delete in user calendar doesn't work |
|---|
| 200 |
-------------------------------------------------------------------------------- |
|---|
| 201 |
-------------------------------------------------------------------------------- |
|---|
| 202 |
Event_Attendees table has wrong column name |
|---|
| 203 |
-------------------------------------------------------------------------------- |
|---|
| 204 |
Recurrences and proxies |
|---|
| 205 |
|
|---|
| 206 |
1. Don't fetch master event for getEvents - needs a flag on recurrences |
|---|
| 207 |
Fetch if named explicitly - UNLESS we are being asked specifically for |
|---|
| 208 |
unexpanded events |
|---|
| 209 |
|
|---|
| 210 |
2. Don't use master as first entry |
|---|
| 211 |
|
|---|
| 212 |
3. Need to fix proxy events. |
|---|
| 213 |
-------------------------------------------------------------------------------- |
|---|
| 214 |
Proxy events and/or annotations |
|---|
| 215 |
|
|---|
| 216 |
What we're trying to solve here are a number of problems. |
|---|
| 217 |
|
|---|
| 218 |
First we need to be able to modify an instance of a recurring event without |
|---|
| 219 |
losing track of the changes to the master event. Modifying an instance means |
|---|
| 220 |
changing the start date for instance but not missing changes to the master event |
|---|
| 221 |
attendees. |
|---|
| 222 |
|
|---|
| 223 |
Another case is very similar - we want to be able to annotate events we don't |
|---|
| 224 |
have write access to - for example public events or events owned by a group or |
|---|
| 225 |
user. |
|---|
| 226 |
|
|---|
| 227 |
The mechanism might also be seen as a way of versioning events. |
|---|
| 228 |
|
|---|
| 229 |
The approach is to create an event object which is empty and point it at the |
|---|
| 230 |
target event. It has to be populated with the start date/time and the guid so |
|---|
| 231 |
we can find it during the search. The guid is no problem - it never changes, the |
|---|
| 232 |
dates are a problem as we'll see later. |
|---|
| 233 |
|
|---|
| 234 |
Simple fields are relatively simple. For example the description. The process is |
|---|
| 235 |
something like - |
|---|
| 236 |
|
|---|
| 237 |
If the referring event has a value then use that, otherwise use the target event |
|---|
| 238 |
value. |
|---|
| 239 |
|
|---|
| 240 |
A problem occurs when the target event changes. Without tracking all changes to |
|---|
| 241 |
the target we can't tell the user what changed. For example, user A annotates |
|---|
| 242 |
the description only, then user B changes the target summary then there is no |
|---|
| 243 |
need to notify user A. On the other hand if user B changes the description maybe |
|---|
| 244 |
we should tell user A. |
|---|
| 245 |
|
|---|
| 246 |
Collections are harder because we need to track changes to individual elements |
|---|
| 247 |
as well as additions and deletions from the collection. |
|---|
| 248 |
|
|---|
| 249 |
Probably we ought to save only the changes to collections and apply them at each |
|---|
| 250 |
retrieval. That requires a field in the collection elements flagging that |
|---|
| 251 |
element as a change. |
|---|
| 252 |
|
|---|
| 253 |
Some implications: |
|---|
| 254 |
When we update an event - if the event object is an annotation we need to |
|---|
| 255 |
compare every field and see if it differs from the target. If not don't set the |
|---|
| 256 |
annotation. The BwEventProxy object will do that for us. |
|---|
| 257 |
-------------------------------------------------------------------------------- |
|---|
| 258 |
Timezones: |
|---|
| 259 |
getMergedTimezones might be wrong - seems to assume at least a match in public |
|---|
| 260 |
|
|---|
| 261 |
Need a two stage lookup in the timezones table |
|---|
| 262 |
1. static public timezone table |
|---|
| 263 |
2. non-static user timezone table |
|---|
| 264 |
|
|---|
| 265 |
User lookup needs to be the owner of the event which contains the timezone. All |
|---|
| 266 |
timezone info can be regarded as public I guess. |
|---|
| 267 |
|
|---|
| 268 |
We should do a 3 stage lookup. |
|---|
| 269 |
1. In current user's table |
|---|
| 270 |
2. In event owners table if different |
|---|
| 271 |
3. In system table. |
|---|
| 272 |
|
|---|
| 273 |
Also, for public events don't check any user table? |
|---|
| 274 |
|
|---|
| 275 |
Is this ok? user was douglm |
|---|
| 276 |
[java] 10:48:52,041 DEBUG [CalSvcTimezones] trace: find timezone with id US/Eastern for owner null |
|---|
| 277 |
[java] 10:48:52,049 DEBUG [CalSvcTimezones] trace: register timezone with id US/Eastern |
|---|
| 278 |
[java] 10:48:52,049 DEBUG [IcalTranslator] Timezone already in db |
|---|
| 279 |
|
|---|
| 280 |
-------------------------------------------------------------------------------- |
|---|
| 281 |
Status property |
|---|
| 282 |
Use it in the client(s). |
|---|
| 283 |
-------------------------------------------------------------------------------- |
|---|
| 284 |
Use guid (+recurrenceid) to fetch events |
|---|
| 285 |
-------------------------------------------------------------------------------- |
|---|
| 286 |
Fix up messages. |
|---|
| 287 |
-------------------------------------------------------------------------------- |
|---|
| 288 |
Users pluggable interface |
|---|
| 289 |
-------------------------------------------------------------------------------- |
|---|
| 290 |
Preferences - mod/etc |
|---|
| 291 |
Move some deploy time configuration stuff into pref. |
|---|
| 292 |
-------------------------------------------------------------------------------- |
|---|
| 293 |
Quotas and limits - entity size and total |
|---|
| 294 |
limit x-properties size? |
|---|
| 295 |
-------------------------------------------------------------------------------- |
|---|
| 296 |
Manage calendars. |
|---|
| 297 |
|
|---|
| 298 |
Check that access is limited to calendars to which auth user has at least |
|---|
| 299 |
write-content access |
|---|
| 300 |
|
|---|
| 301 |
Looks like we need to give super users specific access to the calendars. |
|---|
| 302 |
|
|---|
| 303 |
Also delete needs to clean up beforehand |
|---|
| 304 |
- remove any subscriptions |
|---|
| 305 |
- which means remove subscriptions from views |
|---|
| 306 |
-------------------------------------------------------------------------------- |
|---|
| 307 |
Do add/remove views in admin (and user) |
|---|
| 308 |
|
|---|
| 309 |
url of form |
|---|
| 310 |
http://localhost:8080/caladmin/addView.do?name=All |
|---|
| 311 |
-------------------------------------------------------------------------------- |
|---|
| 312 |
Do add/remove/mod subscriptions |
|---|
| 313 |
|
|---|
| 314 |
url of form |
|---|
| 315 |
http://localhost:8080/ucal/subscribe.do?calid=16&name=Arts[&email=y/n][&freebusy=y/n][&view=Arts|addToDefaultView=y/n] |
|---|
| 316 |
|
|---|
| 317 |
http://localhost:8080/ucal/unsubscribe.do?name=Arts |
|---|
| 318 |
This needs to remove subscription from all views |
|---|
| 319 |
-------------------------------------------------------------------------------- |
|---|
| 320 |
Simplify public events user/owner stuff |
|---|
| 321 |
It all seems over complicated. For public events we have 3 users |
|---|
| 322 |
1. The authenticated user - for access checks |
|---|
| 323 |
2. The owner for objects created by that user - e.g. an admin group |
|---|
| 324 |
3. The calendar system owner - for global entities such as prefs |
|---|
| 325 |
|
|---|
| 326 |
For a personal user they are all the same thing. I think 1 and 2 could become |
|---|
| 327 |
the same thing |
|---|
| 328 |
|
|---|
| 329 |
For public calendars 3 is the owner of the preferences object which defines the |
|---|
| 330 |
preferred view etc and also the view and subscription objects. |
|---|
| 331 |
-------------------------------------------------------------------------------- |
|---|
| 332 |
A number of classes need to be marked serializable |
|---|
| 333 |
|
|---|
| 334 |
Particularly HibSession |
|---|
| 335 |
-------------------------------------------------------------------------------- |
|---|
| 336 |
Argentina holidays has a bunch of x-properties |
|---|
| 337 |
-------------------------------------------------------------------------------- |
|---|
| 338 |
Uploads sort of work. Need to allow specification of receiving calendar. |
|---|
| 339 |
-------------------------------------------------------------------------------- |
|---|
| 340 |
Access control testing |
|---|
| 341 |
Caldav access reports probably need fixing |
|---|
| 342 |
-------------------------------------------------------------------------------- |
|---|
| 343 |
-------------------------------------------------------------------------------- |
|---|
| 344 |
-------------------------------------------------------------------------------- |
|---|
| 345 |
-------------------------------------------------------------------------------- |
|---|