root/trunk/calendar3/docs/todo.txt

Revision 207 (checked in by douglm, 7 years ago)

Changes caused by use of calendar id in uris.

This 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.

Some reorganizarion of the calcore code also took place.

In addition, adding a public event to the personal calendar now seems to work.

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

<xsl:variable name="subscriptionId" select="subscription/id"/>

and immediately following add

<xsl:variable name="calendarId" select="calendar/id"/>

A further change is to look for the addEventRef.do url and change the text

eventId={$id}

to

subid={$subscriptionId}&amp;calid={$calendarId}&amp;guid={$guid}&amp;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.

Line 
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}&amp;
17     to
18       subid={$subscriptionId}&amp;calid={$calendarId}&amp;
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}&amp;calid={$calendarId}&amp;guid={$guid}&amp;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 --------------------------------------------------------------------------------
Note: See TracBrowser for help on using the browser.