Overview
I have contributed to Eclipse Che as my Google Summer of Code (GSoC) 2016 project. In this project I have concentrated on implementing a pair programming extension for Eclipse Che. The implementation was divided into the following three sub tasks
- Display cursors of other participants
- Participants getting notified when the files which are not opened by them are getting modified at the moment
- Chat feature.
Implementation
- My mentor has already started implementing a pair programming plugin for Eclipse Che. Therefore, I have started contributing to his repository. By the deadline I was capable of completing the first two features; Displaying cursors of other participants and notifying the participants once the other participants are modifying any file which is not opened simultaneously. My commit history to that repository can be found here
(https://github.com/sunix/che-plugin-flux-live-edit/commits/master?author=rnavagamuwa). - When implementing this feature I have used Eclipse Flux as the communication protocol. I had to add another message type for Eclipse Flux. That commit can be found here.
(https://github.com/eclipse/flux/commits/master?author=rnavagamuwa) - After completing the plugin I had to add this to the Eclipse Che code base. I have done that and sent a Pull Request. The pull request can be found here (https://github.com/eclipse/che/pull/2131). (Since the pull request has not been merged when I submitted this, I have included the url to the PR.)
- Commits that I have added to the Eclipse Che code base can be found here. (Since these are not yet merged I’ve added the forked repo) (https://github.com/rnavagamuwa/che/commits/master?author=rnavagamuwa )
- Complete documentation of the plugin : http://rnavagamuwa/EclipseChePairProgrammingExtensionDocumentation.pdf
Work in progress
- Chat feature should be implemented.
- The implemented extension should be split into two separate extensions.
- One plugin should be a general extension for pair programming. Any protocol other than Eclipse Flux should be able to plug to this plugin and use.
- The other plugin should be a sample protocol for the above plugin one. In this case, it should be Eclipse Flux.
Demo
Requirements
To make the demo up and running:
Build and launch Eclipse Che (With pair programming extension)
- Clone my forked repository (https://github.com/rnavagamuwa/che.git)
- Go into the cloned folder and build the product.
- Launch Eclipse Che
Use the bellow code snippet to execute the above steps
Enable extension in Eclipse Che
- Create a workspace with Eclipse Flux by selecting the Flux stack from the stacks library. (Dockerfile which is used to create this stack can be found here )
- Start the workspace, open in IDE and create a new project. You can simply select a sample project in the previous step.
- Start the flux custom command.
- Open a file to edit.
- Open a new browser windows to the same workspace, open the same file to edit.
Video demo of the plugin
Blog posts
During the implementation, I posted some interesting and pivotal posts on my personal blog.
- Eclipse Che uses docker as a workspace. To understand how it works, I managed to run Eclipse Mars IDE inside a docker space.
http://rnavagamuwa.com/open-source/run-eclipse-mars-ide-inside-eclipse-che/
- Eclipse Che uses Orion as the editor. I spent few weeks to understand how it works. I wrote a blog post on that.
http://rnavagamuwa.com/open-source/pluggable-editor-for-your-web-site/
- Before completing the project I wrote a small blog post on customizing annotations in Eclipse Che editor.
http://rnavagamuwa.com/open-source/customize-orion-editor-to-have-multiple-cursors-on-eclipse-che/
Finally I’d like to express my gratitude and thanks to my mentor Sun Seng David Tan (https://twitter.com/sunsengdavidtan) for immensely guiding me during the GSoC period. Without his guidance, I wouldn’t have completed my project. This was an amazing experience and I was capable of gaining a thorough knowledge on the dimension. 🙂