Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Corona Design Collaboration
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
- Project Container
- Eclipse Communication Framework
- OSGi EventAdmin service
- OSGi Service Registration / Service Tracking
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.
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:
- Project Created
- Project Modified
- User Added
- User Deleted
- Resource Created
- Resource Modified
- Resource Deleted
- Resource Synchronized
- Project Deleted
- Project Open
- Project Closed
Each action has its own set of event properties that describe that event in more detail.