Sounds good. My only question is about the "propagate change" approach. Does
it really require iteration, or is it just one big query? i.e.:
begin
delete {?person v:email '[email protected]'}
insert {?person v:email '[email protected]'}
from {all user's graphs}
where {?person v:email '[email protected]'}
end
On Wed, Aug 24, 2011 at 5:33 PM, Iain MacNeill <[email protected]> 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