Corona Design Collaboration

From Eclipsepedia

Jump to: navigation, search
Eclipse Home Corona Wiki Home Development

Contents

Description

Collaboration is the user experience of Corona. It enables a set of individual Eclipse Workbenches to participate in a workgroup. Corona's collaboratoin features involve both client-side (Eclipse Workbench plugins) server-side (SOA) components.

Corona enables a context to collaboration. This context enables collaboration events to be grouped so that relationships between artifacts can be established. Corona provides an exemplary collaboration context of a project as the bases for a workgroup.

References

Scope

  • The Eclipse Workbench is the supported client side environment for collaboration.

Assumptions

Design

Collaboration Project

A Collaboration Project must first be established before any ‘’workgroup’’ collaboration can take place. A Collaboration Project is defined and managed by Corona. When an Eclipse Workbench joins an existing Collaboration Project, the Workbench will be initialized with the local project settings.

The local Eclipse Workbench project will be assigned a Collaboration Nature to indicate it is part of a larger Collaboration Project.

Collaboration Builder

An Eclipse Workbench project builder (nature) will be added to each Workbench project that is associated with a Collaboration project. This will indicate that the Workbench project is participating in a Collaboration project.

The Collaboration Builder will handle all Workbench Resource Change Events and propagate them to registered Collaboration listeners. The following are the types of Collaboration listeners

  • ICollaborationFileListener
  • ICollaborationFolderListener
  • ICollaborationResourceListener

Each Collaboration listener is responsible for handling the Workbench Resource Change event and publishing it as a Collaboration Event, if necessary.

Collaboration Events

Collaboration Events are a special type of OSGi events. Collaboration Events have a set of required attributes. In addition, they are serializable so that they can be distributed to other Corona enabled environments.

Corona defines the base CollaborationEvent class. This class is extended to define the context for collaboration. The following class diagram illustrates the ProjectEvent class that is used for project context collaboration.

CoronaCollabClasses.png

Event Publishing

Collaboration Events are published using the ICollaborationEventAdmin service. This service is an extension of the OSGi EventAdmin service and is specialized to publishing Collaboration Events.

The following is a example of how to publish a Collaboration Event:

   // track the ICollaborationEventAdmin service
   ServiceTracker srvTrackerEventAdmin = new ServiceTracker(context,ICollaborationEventAdmin.class.getName(),null);
   srvTrackerEventAdmin.open();
   ....
   // create CollaborationEvent
   ProjectEvent projectEvent = new ProjectEvent(projectName);
   projectEvent.defineProperty(...);
   ...
   // publish collaboration event
   ICollaborationEventAdmin eventAdmin = srvTrackerEventAdmin.getService();
   eventAdmin.postEvent(projectEvent);

Event Subscription

Collaboration Events are special (serializable) type of OSGi events. Subscribing to Collaboration Events is done using the OSGi EventAdmin service. A component would register an event handler service with OSGi. Once registered, all events that the component is interested in (via filtering) will be posted to the component's handleEvent() method.

Example code:

   // register the default Collaboration event handler
   Dictionary dict = new Hashtable();
   String topics[] = {ICollaborationEvent.TOPIC_ROOT+"*"};
   dict.put(EventConstants.EVENT_TOPIC, topics);
   this.context.registerService(EventHandler.class.getName(), this, dict);
   ...
   public void handleEvent(Event event) {
       ...
   }


Distribution

Within the local environment, Collaboration Events are published to and subscribed from the OSGi EventAdmin service. This allows all components within the local environment to utilize a native event mechanism.

Collaboration Events are also distributed to all Corona enabled environments that are participating in the same Collaboration Project. The Eclipse Communication Framework (ECF) is used as the exemplary provider for event replication. This requires Corona to provide both client and server side plug-ins to handle the distribution of remote Collaboration Events.

ECF Topic

When a Collaboration Project is first ‘’opened’’ within an Eclipse Workbench, the local org.eclipse.corona.client.project plug-in sends a request to the Corona server that the Collaboration Project should be opened. The org.eclipse.corona.server.project plug-in handles the request and opens the project requested. A local project open event is published to the Corona’s server OSGi EventAdmin service. The Corona’s server-side ECF plug-in will handle that event and open an ECF topic for the Collaboration Project. This topic will be the communication channel for all Collaboration Events for the Collaboration Project.

ACtion Types

Events are caused by actions. Actions cause events to be generated. Consequently, each CollaborationEvent has an ACTION_TYPE associated with it.

For the exemplary implementation for project collaboration, the following actions are supported for the project context:

  1. Project Created
  2. Project Modified
    1. User Added
    2. User Deleted
    3. Resource Created
    4. Resource Modified
    5. Resource Deleted
    6. Resource Synchronized
  3. Project Deleted
  4. Project Open
  5. Project Closed

Each action has its own set of event properties that describe that event in more detail.

Risk