Differences between revisions 12 and 16 (spanning 4 versions)
Revision 12 as of 2008-11-25 10:46:50
Size: 5371
Editor: adsl-67-121-120-92
Comment:
Revision 16 as of 2009-01-13 15:36:42
Size: 7103
Editor: 142
Comment:
Deletions are marked like this. Additions are marked like this.
Line 31: Line 31:
     * drag/drop may be a special case. What layer of ''semantics'' would Cytoscape want to provide above the Java paradigm of Transferables and DataFlavors?      * drag/drop may be a special case. What layer of ''semantics'' would Cytoscape want to provide above the Java paradigm of Transferables and Data''''''Flavors?
Line 55: Line 55:
   * [http://wiki.c2b2.columbia.edu/workbench/index.php/Framework geWorkBench framework for event handling]
== Prototypes ==

1. Svn+ssh://Grenache.ucsd.edu/cellar/common/svn/csplugins/trunk/Agilent/creech/BAMEventModel

2. http://wodaklab.org/viewvc/svn/cytoscapeEventAnnotations/trunk
   svn co https://wodaklab.org/svn/public/cytoscapeEventAnnotations/trunk
Line 57: Line 64:
~-''List any issues, conflict, or dependencies raised by this proposal''-~ === Batching ===
The problem with batching can be imagined in this way: When deleting a node (especially now that nodes exist w.r.t. only to a model, and not independently of it), listeners need to know about the node AND its context before the node is actually deleted. Thus, in a batch of events, with a naieve implementation, the node would already be gone by the time the batch was received. To circumvent this you might flag the node as being "marked for deletion", but this means, for the duration of the batch, every piece of the code the examines and graph and its nodes, needs to be sensitive to this state. (Updates can present similar issues, but deletion is the best example.)

Why did we want batching? Originally to address the issue of excess "noise". It should be noted that there are ways of reducing noise without batching all events. You, could for instance, just batch similar event types. However the failure to be able to apply a batch to any and all events means concepts like transactions if they are to be arbitrarily defined as a 'unit of work' independently of the code being batched is not possible.

Why not deal with batching later? Because batching (in a transactional sense, or any other higher level abstraction that groups events) does appear to be implementable without making changes to the API, something we wish to avoid in future releases.

Do we care about transactions? Why not just

RFC Name : Event Handling

Editor(s): BrianTurner

Date: Nov 21 2008

Status: Draft

TableOfContents([2])

Proposal

How the production and consumption of events should be handled; in particular how plugins interact with each other, the model(s), view(s), etc.

Background

Concerns have been raised on several fronts regarding event handling that cannot be addressed by simple (existing) Java patterns, largely because the application is not monolithic but is made up of independently moving parts.

Use Cases

This is less a listing of use cases as it is issues and concerns; an outline of what any solution should attempt to address:

  1. Batching: The case where many events (like the creation of many nodes) could possibly be grouped together as opposed to handling each one discretely.

    • What does batching mean? In Eclipse a batch is defined as set of nested events:

      It is important to note that the broadcast does not necessarily occur immediately after the method completes. This is because a resource changing operation may be nested inside of another operation. In this case, notification only occurs after the top-level operation completes. For example, calling IFile.move may trigger calls to IFile.create to create the new file, and then IFile.delete to remove the old file. Since the creation and deletion operations are nested inside the move operation, there will only be one notification.

  2. Transactions: Plugins should leave the model in a valid state, and conflicting changes by different plugins prevented. However not all plugins are about editing. Some plugins maybe passive, providing a view like an outline, in which case they should not have to concern themselves with the added complexities implied by participating in a transaction. In Eclipse a contributor to a perspective extends/implements either IViewPart or IEditorPart to help make this distinction in roles.

  3. Mode: Event handling needs to take into account modes of running like headless.

  4. Event Object: What information should the event object contain? Using another eclipse example:

    • The resource it corresponds to.
    • The kind of modification (added, removed, or changed).
    • The precise nature of the change (the change flags).
    • A summary of what markers changed on the resource.
    • Deltas for any added, removed, or changed children.
  5. OSGI: Event handling should reflect and build on the architecture of OSGI, and may therefore be implemented using the concept of a white board.

  6. Abstraction: Plugins should not deal with low-level UI events, e.g. mousePressed, but rather with semantic events that Cytoscape provides, e.g. objectOpened instead of mousePressed() with (e.getClickCount == 2).

    • drag/drop may be a special case. What layer of semantics would Cytoscape want to provide above the Java paradigm of Transferables and DataFlavors?

Implementation Plan

Outline and describe the process and major issues related to implementing this proposal. Illustrate your plan when possible. Try this free online tool for making diagrams -> [http://www.best4c.com/editor/NetMapApplication.jsp Best4c] (draw; save; then insert hyperlink into this page)

Project Management

Project Timeline

Provide a timeline for implementation. Insert a graphic if you can. Try this free online tool for making project timelines -> [http://www.helpuplan.com/index.asp Help-u-Plan] (create a new chart; modify; right-click to save gif; then attach to this page)

Tasks and Milestones

Outline the major milestones and tasks involved in implementation.

  1. Milestone 1: …

    1. Task 1: ...
    2. Task 2: ...
  2. Milestone 2: …

Project Dependencies

Outline and projects that depend on this project, link to relevant RFC's and note at what point dependent projects could be started.

Link to other related RFCs

Prototypes

1. Svn+ssh://Grenache.ucsd.edu/cellar/common/svn/csplugins/trunk/Agilent/creech/BAMEventModel

2. http://wodaklab.org/viewvc/svn/cytoscapeEventAnnotations/trunk

Issues

Batching

The problem with batching can be imagined in this way: When deleting a node (especially now that nodes exist w.r.t. only to a model, and not independently of it), listeners need to know about the node AND its context before the node is actually deleted. Thus, in a batch of events, with a naieve implementation, the node would already be gone by the time the batch was received. To circumvent this you might flag the node as being "marked for deletion", but this means, for the duration of the batch, every piece of the code the examines and graph and its nodes, needs to be sensitive to this state. (Updates can present similar issues, but deletion is the best example.)

Why did we want batching? Originally to address the issue of excess "noise". It should be noted that there are ways of reducing noise without batching all events. You, could for instance, just batch similar event types. However the failure to be able to apply a batch to any and all events means concepts like transactions if they are to be arbitrarily defined as a 'unit of work' independently of the code being batched is not possible.

Why not deal with batching later? Because batching (in a transactional sense, or any other higher level abstraction that groups events) does appear to be implementable without making changes to the API, something we wish to avoid in future releases.

Do we care about transactions? Why not just

Comments

  • Add comment here…

How to Comment

Edit the page and add your comments under the provided header. By adding your ideas to the Wiki directly, we can more easily organize everyone's ideas, and keep clear records. Be sure to include today's date and your name for each comment. Try to keep your comments as concrete and constructive as possible. For example, if you find a part of the RFC makes no sense, please say so, but don't stop there. Take the extra step and propose alternatives.

Outdated_Cytoscape_3.0/EventHandling (last edited 2011-02-24 16:27:51 by PietMolenaar)

Funding for Cytoscape is provided by a federal grant from the U.S. National Institute of General Medical Sciences (NIGMS) of the Na tional Institutes of Health (NIH) under award number GM070743-01. Corporate funding is provided through a contract from Unilever PLC.

MoinMoin Appliance - Powered by TurnKey Linux