Jump to: navigation, search

Difference between revisions of "Google Wave ECF provider"

(New page: Student: Sebastian Schmidt Mentor: Mustafa K. Isik This project is part of the Google Summer of Code 2010 == Abstract == Google Wave is a real-time collaboration system based upo...)
 
 
(10 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
Student: Sebastian Schmidt
 
Student: Sebastian Schmidt
  
Mentor: Mustafa K. Isik
+
Mentor: [http://codesurgeon.com Mustafa K. Isik]
  
 
This project is part of the [[Google Summer of Code 2010]]  
 
This project is part of the [[Google Summer of Code 2010]]  
Line 7: Line 7:
 
== Abstract  ==
 
== Abstract  ==
  
Google Wave is a real-time collaboration system based upon operational transformation approach to replicated state synchronization. With the Cola System (DocShare), ECF has been using operational transformation, for some time now. I will implement a provider to allow an equinox+ecf based web server to inter-operate with Google Wave.  
+
[http://wave.google.com Google Wave] is a real-time collaboration system based upon operational transformation approach to replicated state synchronization. With the Cola System (DocShare), ECF has been using operational transformations, for some time now. I will implement a provider to allow an equinox+ecf based web server to inter-operate with Google Wave.
  
== Primary goals ==
+
== About Google Wave ==
 +
With an announcement on 08/04/2010 Google [http://googleblog.blogspot.com/2010/08/update-on-google-wave.html discontinued] the development of Google Wave as a standalone product. Anyway, an open source implementation of the [http://code.google.com/p/wave-protocol/ Google Wave] server is available and the protocol is also [http://www.waveprotocol.org open]. The Google Wave (aka Federation One) server comes with an implementation of the operational transformation algorithm, which allows you to build real time shared editing applications from the comfort of your eclipse RT / ECF environment using this provider.
 +
 
 +
== Documentation ==
 +
 
 +
=== Prerequisites  ===
 +
 
 +
* Google Wave / Federation One server, [http://code.google.com/p/wave-protocol/wiki/Installation installation instructions]
 +
 
 +
=== General information ===
 +
 
 +
Please find the provider interfaces at [http://github.com/ECF/Wave/tree/master/org.eclipse.ecf.wave/src/org/eclipse/ecf/wave/ org.eclipse.ecf.wave].
 +
 
 +
=== Connecting to a Google Wave server ===
 +
 
 +
The following example shows how to connect to a Google Wave server using the ECF container modules:
 +
 
 +
<pre>
 +
WaveClientContainer container = (WaveClientContainer) ContainerFactory.getDefault().createContainer("ecf.googlewave.client");
 +
Namespace ns = container.getConnectNamespace();
 +
WaveBackendID id id = (WaveBackendID) ns.createInstance(new String[] { "youruser@yourdomain.de" , "yourdomain.de:9876" });
 +
 
 +
container.connect(id, null);
 +
</pre>
 +
 
 +
When the server has wave updates, it sends requests to all connected clients. You can add a listener to the client to get notified about these updates:
 +
 
 +
<pre>
 +
container.addWaveletOperationListener(new IWaveletListener() {
 +
 
 +
      @Override
 +
      public void notify(IWavelet wavelet, String author, CoreWaveletOperation operation) {
 +
              System.out.println(author + "changed  " + wavelet.getID().toString());
 +
      }
 +
 
 +
      @Override
 +
      public void commit(IWavelet wavelet, ProtocolHashedVersion commitNotice) { }
 +
});
 +
</pre>
 +
 
 +
===  Waves ===
 +
 
 +
 
 +
=== Wavelets ===
 +
 
 +
=== Documents ===
 +
 
 +
== Project goals ==
  
 
<div style="border: 1px solid rgb(170, 170, 170); margin: 0pt 0pt 1em 1em; padding: 4px; background: rgb(249, 249, 249) none repeat scroll 0% 0%; clear: right; font-size: 90%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; width: 250px; text-align: left; float: right;">
 
<div style="border: 1px solid rgb(170, 170, 170); margin: 0pt 0pt 1em 1em; padding: 4px; background: rgb(249, 249, 249) none repeat scroll 0% 0%; clear: right; font-size: 90%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; width: 250px; text-align: left; float: right;">
Line 19: Line 66:
 
</div>  
 
</div>  
  
[[Image:Glass.gif]] incorporate waveprotocol.org code into ECF code, api-level ECF-provider implementation<br>
+
[[Image:Ok green.gif]] Implementation of a Google Wave ECF provider
[[Image:Glass.gif]] example applications for communication between Wave and Eclipse/ECF 
+
that people can use to build their own wave applications on top of
 
+
ECF. The provider will handle the basic wave-protocol operations like
== Timeline  ==
+
managing waves, contacts and documents. Also the provider will provide
{| class="wikitable" style="text-align: center;"
+
an API which allows users to add listeners to wave changes and
|- style="background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"
+
implement real time shared editing applications.<br><br>
! Milestone
+
[[Image:Progress.gif]] Implementation of real time shared editing support
! Date
+
for eclipse. Currently there are
! Planned/Completed/Progressing&nbsp; items
+
[http://www.youtube.com/watch?v=GfeUCT-tRJQ cola and docshare], which
! status
+
allow document based real time shared editing for two collaborators in
|- style="background: lightgrey none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"
+
eclipse. With the help of the wave protocol I want to improve this
! M1
+
approach and allow more than two collaborators to work on one document
| May 5
+
at the same time. Once you logged into your wave account using the well known ECF
| align="left" | research and planning
+
UI, you will be able to share a text-based document for collaborative
| [[Image:Progress.gif]]
+
editing with your friends on your or any standards compliant third-party wave server.
|- style="background: lightgrey none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"
+
|}
+
 
+
  
 +
== On the horizon ==
 +
In their GSoC welcome package Google told us to "think big and have
 +
fun". That's why Mustafa and I already have spoken about ideas we have for the
 +
time after the end of GSoC 2010. The wave protocol allows to
 +
handle more than a single document (= wavelet / blips) in a wave. With an appropriate mapping of Wave components such as Waves to projects and Wavelet/Blips to resources such as sourcecode files, this
 +
feature can be adopted to introduce project-based real time shared
 +
editing to eclipse. Hopefully we will be able to share a complete
 +
project with fellow developers at some point and collaborate with them on multiple files and folders in real time.
  
 
== Getting the source ==
 
== Getting the source ==
 
+
The Wave provider is hosted at [http://github.com/ECF/Wave github].
The Wave provider is hosted at ecf1.osuosl.org. Detailed information are provided on [https://bugs.eclipse.org/bugs/show_bug.cgi?id=280347#c10 the enhancement request]
+
  
 
== Open issues ==
 
== Open issues ==
Line 48: Line 99:
 
== New ideas ==
 
== New ideas ==
 
Do you have a great idea for the provider? Just open a [https://bugs.eclipse.org/bugs/enter_bug.cgi?product=ECF new feature request] or comment on the existing [https://bugs.eclipse.org/bugs/show_bug.cgi?id=280347 enhancement request].
 
Do you have a great idea for the provider? Just open a [https://bugs.eclipse.org/bugs/enter_bug.cgi?product=ECF new feature request] or comment on the existing [https://bugs.eclipse.org/bugs/show_bug.cgi?id=280347 enhancement request].
 
  
 
[[Category:SOC]]
 
[[Category:SOC]]

Latest revision as of 08:37, 20 August 2010

Student: Sebastian Schmidt

Mentor: Mustafa K. Isik

This project is part of the Google Summer of Code 2010

Abstract

Google Wave is a real-time collaboration system based upon operational transformation approach to replicated state synchronization. With the Cola System (DocShare), ECF has been using operational transformations, for some time now. I will implement a provider to allow an equinox+ecf based web server to inter-operate with Google Wave.

About Google Wave

With an announcement on 08/04/2010 Google discontinued the development of Google Wave as a standalone product. Anyway, an open source implementation of the Google Wave server is available and the protocol is also open. The Google Wave (aka Federation One) server comes with an implementation of the operational transformation algorithm, which allows you to build real time shared editing applications from the comfort of your eclipse RT / ECF environment using this provider.

Documentation

Prerequisites

General information

Please find the provider interfaces at org.eclipse.ecf.wave.

Connecting to a Google Wave server

The following example shows how to connect to a Google Wave server using the ECF container modules:

WaveClientContainer container = (WaveClientContainer) ContainerFactory.getDefault().createContainer("ecf.googlewave.client");
Namespace ns = container.getConnectNamespace();
WaveBackendID id id = (WaveBackendID) ns.createInstance(new String[] { "youruser@yourdomain.de" , "yourdomain.de:9876" });

container.connect(id, null);

When the server has wave updates, it sends requests to all connected clients. You can add a listener to the client to get notified about these updates:

container.addWaveletOperationListener(new IWaveletListener() {

       @Override
       public void notify(IWavelet wavelet, String author, CoreWaveletOperation operation) {
               System.out.println(author + "changed  " + wavelet.getID().toString());
       }

       @Override
       public void commit(IWavelet wavelet, ProtocolHashedVersion commitNotice) { }
});

Waves

Wavelets

Documents

Project goals

Legend
Glass.gif Needs some research

Progress.gif Work in progress

Ok green.gif Feature added

Ok green.gif Implementation of a Google Wave ECF provider that people can use to build their own wave applications on top of ECF. The provider will handle the basic wave-protocol operations like managing waves, contacts and documents. Also the provider will provide an API which allows users to add listeners to wave changes and implement real time shared editing applications.

Progress.gif Implementation of real time shared editing support for eclipse. Currently there are cola and docshare, which allow document based real time shared editing for two collaborators in eclipse. With the help of the wave protocol I want to improve this approach and allow more than two collaborators to work on one document at the same time. Once you logged into your wave account using the well known ECF UI, you will be able to share a text-based document for collaborative editing with your friends on your or any standards compliant third-party wave server.

On the horizon

In their GSoC welcome package Google told us to "think big and have fun". That's why Mustafa and I already have spoken about ideas we have for the time after the end of GSoC 2010. The wave protocol allows to handle more than a single document (= wavelet / blips) in a wave. With an appropriate mapping of Wave components such as Waves to projects and Wavelet/Blips to resources such as sourcecode files, this feature can be adopted to introduce project-based real time shared editing to eclipse. Hopefully we will be able to share a complete project with fellow developers at some point and collaborate with them on multiple files and folders in real time.

Getting the source

The Wave provider is hosted at github.

Open issues

To see all the open issues and feature requests of this project, take a look at this Bugzilla query.

New ideas

Do you have a great idea for the provider? Just open a new feature request or comment on the existing enhancement request.