This is great stuff. I added a link here:
http://wiki.eclipse.org/PDS_Use_Cases#Design_2
to this new page:
http://wiki.eclipse.org/Context_Editor_Design_Notes
and transcribed your email into the new page and tweaked a couple terms to
harmonize with latest Higgins conventions.
On Aug 24, 2011, at 5:33 PM, Iain MacNeill wrote:
> Including the items discussed in our recent gathering, here is another
> breakdown of the flow/process during updates to context values.
>
> It is broken up between Specific/Individual ("Connector") contexts, and "All
> About Me" aggregator contexts.
>
> Note: This does not attempt to identify specific systems, but rather defines
> the flow of logic in general. Also, this does not go into detail regarding
> the connector synchronization process, but just references it.
>
> Editing of Specific / individual ("Connector") context values:
> When simple scalar values are updated by the user:
> Begin Transaction
> the change is immediately pushed to persistent storage.
> No Errors: Commit Transaction - else Rollback and display error state
> For complex values, a modal dialog is presented to the user with all of the
> relevant context attributes displayed with their current values and
> 'Ok'/'Cancel' buttons.
> If the user either closes the tab or the browser, a browser level alert box
> will be presented requiring the user to confirm the loss of data.
> When the user clicks on the 'Ok' button:
> Begin Transaction
> changes are pushed to persistent storage.
> No Errors: Commit Transaction - else Rollback and display error state
>
> Editing of "All About Me" aggregator context (Addresses, Payment Cards, etc)
> values:
> When a simple scalar values are updated by the user:
> The user is presented with a dialog (TBD) which specifies (possibly: number
> of contexts to be changed, list of contexts to be changed) allowing them to
> confirm or cancel the update before it occurs.
> If user confirms change should occur:
> Begin Transaction:
> Call method to propagate changes across user's contexts (see below).
> If no errors are returned from call:
> Push "All About Me" context attribute value change to persistent storage.
> If update successful, then commit transaction.
> Else rollback transaction - display error state.
> Else Rollback Transaction - display error state
> For complex values, a modal dialog is presented to the user with all of the
> relevant context attributes displayed with their current values and
> 'Ok'/'Cancel' buttons.
> If the user either closes the tab or the browser, a browser level alert box
> will be presented requiring the user to confirm the loss of data.
> When the user clicks on the 'Ok' button:
> If something has actually been changed:
> Begin Transaction
> Call method to propagate changes across user's contexts (see below).
> If no errors are returned from call:
> Push "All About Me" context attribute value change to persistent storage.
> If update successful, then commit transaction.
> Else rollback transaction - display error state.
> Else rollback transaction - display error state.
> Sequence to propagate a change across all user's contexts:
> Begin iterating the list of user's control template contexts:
> (At any point during the process, if an error occurs - processing will halt
> and the error returned.)
> If current searched context is a simple attribute and updated attribute is
> simple, then:
> If current searched context attribute/value matches original updated
> attribute/value, then
> Push updated attribute value to persistent storage.
> NO MATCH: proceed to the next.
> If current searched context is a complex attribute and updated attribute is
> complex, then:
> Compare all old attribute/values of the edited complex attribute against the
> current searched context, if all are equal then:
> Update the individual attribute values that have changed to match the new
> updated values.
> NO MATCH: proceed to the next.
> Proceed to the next retrieved context
>
>
> On Fri, Aug 19, 2011 at 5:43 PM, Paul Trevithick <[email protected]>
> wrote:
> Iain,
>
> I have a suggestion for how the context editor should work. It may well be
> what you and Valeska (and Tom and...) were already thinking. If fact, it may
> already be what we've coded in some cases! But let me describe it to you
> quickly and get your reaction...
>
> Editing modality
> There are no "Edit" vs. "non-Edit" modes (such as Apple AddressBook uses)
> If the user wishes to edit a simple attribute (e.g. gender) then they just
> edit that attribute's widget
> If the user wishes to edit a complex attribute (e.g. an address with street,
> postalCode, locality, etc. subcomponents, or a set of
> online-behavior:interest attributes (as we are doing today)) the UI pops up a
> modal dialog box ONLY for the purpose of editing this one complex-valued
> attribute (e.g. array of p:InterestTopics, v:Address, v:Name, etc.)
> The attribute and both its old and new values are retained for use in
> cross-context update (see below)
> If it is a simple attribute, this is one value
> If it is a complex attribute then all of the old values of the "sibling"
> attributes are retained. For example if the attribute was a v:adr (with an
> instance of v:Address as its value), and if the user changed the value of the
> v:postal-code attribute from 02467 to 01234 then any other "sibling"
> attributes/values would be retained. These sibling values might be the values
> of v:street, v:locality, v:region and v:country.
> Saving
> It saves data to persistent storage after the user has completed the edit
> operation as described in the simple and complex cases mentioned above
> Abandonment
> If the user is in the middle of editing a complex value and closes the tab of
> the portal / context editor it pops up the dialog box attached to this email
> below (copied from Google Docs)
> Cross-context update
> After any attribute of a p:Person in any context is edited, the editor
> searches EVERY other context of this user to update that same attribute of
> every p:Person found.
> If it is a simple attribute and the "old" value of the attribute matches the
> old value of the attribute in the context the user was editing (see
> "modality" above) then replace the old value with the new value that the user
> entered
> If it is a complex attribute that was edited then the same attribute (e.g.
> v:postal-code) will be updated if the following conditions are true:
> The old value of this v:postal-code matches the old value that was retained
> during the editing of the original context by the user
> The old values of the sibling attributes (v:street, v:locality, v:region and
> v:country) match the old values of these sibling attributes in the original
> context edited by the user
>
> A couple more thoughts about cross-context editing:
> I glossed over some complexities/recursion involved when the "sibling"
> attributes are themselves complex. Since we don't have any actual cases of
> this, this wrinkle is only theoretical.
> I didn't mention how cases of multi-valued attributes should be handled. This
> is a very real case we need to handle: the online-behavior:interest attribute
> usually has multiple instances of online-interest:InterestTopic as values. So
> the question is how to represent the "old" value(s) of interest. Should we
> only propagate the edit if ALL old values match? Well the answer is clearly
> no. We need only to remember whether we are adding or deleting a value. When
> we go to the other contexts we should (a) only add the value if it isn't
> already present (which in RDF isn't allowed anyway) AND if that value is
> explicitly mentioned as an allowed value by the template of the context (see
> new Attribute class and "allowedValue" attribute here [1]) and (b) only
> delete the value if it is present
>
> I've written this all very quickly. This is deserving of a wiki page. In fact
> the cross-context attribute update should likely be broken out from the other
> (much simpler) points. I'll try to get to that next week.
>
> Paul
>
> [1] http://wiki.eclipse.org/Template_vocabulary
>
>
>
_______________________________________________
higgins-dev mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/higgins-dev