lundi 1 septembre 2008

Final result!

GSoC 2008 is officially over (evaluations are submitted, etc)!

Since the last update I've been adding some minor features and doing some tests. Of course, I corrected every bugs we found!

The best way to see the updates is to check it out yourself by checking out the code of the plugin manager branch of SIP Communicator. I also posted a new screencast on youtube, but it's far from enough to show all the work I've put in the project for the summer.


My last "official" GSoC post will be next week! Don't miss it!

samedi 9 août 2008

The project on SIP Communicator homepage!

As you can see on SIP Communicator website, the project I'm working on is featured! You can also see a screencast of the differenct features provided by the plug-in manager.

Now, for the project advancement. I'm happy to say it's almost completed! The features have been implemented. What's left to do is correct some minor bugs, refactor some variables/methods and such things. I'm anxious to present to my readers the final product :). Stay tuned!

lundi 28 juillet 2008

What's new?

So, what has been done during the last 2 weeks of this project? Here's a brief list of the completed tasks:

  • Added the resources strings (French and English)
  • Removed the repositories tab and added +/- buttons at the bottom of the available tree
  • Added KeyListeners to textfields in order to submit via the enter key
  • Available plugins are now removed after being installed
  • Corrected 2 bugs that were there before the project (1 in BrandingActivator, 1 in PluginManagerActivator)
  • Tabs are now Enabled/Disabled when the repositories are loading
  • Added validations on buttons for null pointers
  • Fail-over in AddRepositoryDialog (if you add an XML file that doesn't exist and you close the dialog while it's searching, you won't get a timeout after closing it)

As you can see, it's getting more and more complete as the end of the summer approaches :)

Here are some screenshots of the updates:

Loading repositories and disabled components :

Adding a repository and +/- button :

Unknown remote repository in the tree :

That's it for this week! For next week, I'll do mostly "invisible" stuff, like refactoring variable names and applying the code format...

mercredi 16 juillet 2008

Mid-term update!

In this update I'm presenting the work done so far in the plugin management project. First of all, you can check out the source of the project if you want to try. It's in SIP Communicator's SVN under the pluginmgmt branch.

The project consists of making an advanced plugin management system. This system would allow users to add repositories in order to download/install/update the plugins. It would be similar to what you can find in Eclipse IDE / NetBeans and others.

You can see the GUI of what has been done so far in the plugins section (from the configuration window). The first thing you can notice is that it now has tabs! I'll describe what each tab does in the following paragraphs...

Installed tab

This tab represents what could be found in the plugin section before this project. It's basically a list of installed plugins, and a couple of buttons for the different functionalities.

Available tab

This is a brand new tab used to show the available plugins. They are displayed in a tree, with their repository as the parent node. When selecting a resource to download, it's full description will show in the right panel. Many plugins can be downloaded at the same time. The tree allows multiple selections. Once you've chosen your plugins, you click the download button and it's gonna do it in the background. There is a state label with a pretty interesting loading icon showing the status of the download.

Downloaded tab

Once you download plugins, they will be shown in the downloaded tab. From there, you can install one or more of them at the same time. This tab looks very much like the available tab, with the plugins shown as a tree and a panel for the resource description. You can also delete downloaded resources in this tab (downloading won't uninstall installed plugins). If the install is successful, the user will be noticed, and if it's not, the missing requirements will be shown too.

Updates tab

The updates tab shows the currently available or downloaded updates for installed plugins. Once again, it's shown in a tree structure with a panel for the resource information. The first level under the root isn't for the repositories this time, it's for the installed bundles. The leafs are the currently available versions. If an update is "available", clicking the button will download and install it. If the update is "downloaded", it will simply install it. Once again, if there's a problem (like a missing package), the user is noticed.

Repositories tab

This tab is a work in progress. It's used for managing the repositories. Currently, it only allows to add and delete repositories. The URL of an added repository has to point to an XML file with the Felix OBR repository.xml structure.

Search feature

In the Available, Downloaded and Updates tabs, you can see a "Filter" text field at the top. It is used to search within all the plugin shown. In the Available and Downloaded tabs, it searches within the resources names. In the Updates tabs, it searches within the bundles names.

Second part of the project

Many things are left to do for the end of the program. Some parts of the GUI are still very bogus and some functionalities are still missing (refresh buttons and things like this). The most important parts have been implemented, so what's left to do is add functionalities, correct bugs / performance / fail-over issues. The whole OBR service has been overidden in order to provide more functionnalities. That was the core of the project. The remaning features are related to USING those extra functionalities. I also have a bunch of TODOs in my code which I'll have to go through and finish them all. Most of them are for error handling, changing variable/method names, adding functionalities, code formatting. To make it short: expect more for the end of the program!

NOTE : If you want check-out and run the code, you'll need to add some repositories. One of them that is always up is:
However, the resources on this OBR can't be installed because some requirements are missing.
You can also try my own repository. It's not always up so it won't always work:
The resources can all be installed. I modified the version numbers of those plugins in the manifest file. That way, you'll see those resources as updates in the tab of the same name. Isn't that great?

vendredi 4 juillet 2008


So...What happened since the last patch...Hmmm...Well, pretty much everything! I didn't have a lot of time to post since the last one, but it's going to change (I'm moving tomorrow so I was planning it and everything). So, here we go:

First of all, about the OBR. We decided to go for the initial idea of the Felix OBR. Plus, I'll provide an interface for the deployment packages (It's not yet in a felix release, but I'm sure I can play with a SNAPSHOT). So I'm hosting an OBR on a local machine. I won't write the IP address now, since I'm moving tomorrow (my IP is going to change).

About the plugin management system now. We chose to make a plugin management system similar to the Netbeans one (different tabs for updates, downloaded plugins, installed, etc). It's pretty advanced as of today. My personnal goals are achieved, even though I ran into some obstacles. I'm glad I had my mentor and SC/Felix communities to help me. The main features have been implemented. You can add/remove repositories, download resources, install them, delete them. I also started the GUI for it. Everything is now available in a branch of SC. You can see it there:

The code is in the plugin called pluginmanager. So, that's it for this week. Come back next week for further updates!

samedi 31 mai 2008

First week report!

Here it is, the first week is (almost) over. This week I was working on setting up an OBR (next week will be for that too). SIP Communicator recently got an interesting proposal by Luminis. They are ready to provide SC with a provisionning server. It will work as follows:

  1. The developper will match the bundles with groups and groups with licenses via a special client that communicates with the provisioning server.
  2. The user of SC will open an update UI, and will be proposed licenses (users don't want to see 25 bundles for the same feature. They want the whole feature in one package, which we call a license)
  3. When downloading the licenses, the server will send deployment packages to the client associated with the licenses chosen.
  4. The client application will install the deployment packages via a deployment admin.

Some things still have to be cleared up though. How will the client application communicate to retrieve the licenses? How will the server return the deployment packages (No OBR for deployment packages)?

What are the pros and cons of both approaches?

Provisioning server


  • Users of SC can install features instead of bundles
  • Easy to match bundles with groups/licenses
  • Usage of deployment admin to install deployment pacakages
  • Provided by Luminis :)


  • No standards for communicating with the provisioning server. (Nothing like an OBR for deployment packages.
  • The developper would have to create a service to talk to his repository)
  • DeploymentAdmin isn't in the current release of Felix yet. From what I've seen, it will be in the next one.



  • Easy for the developper
  • Implementation already available in Felix


  • Bundles aren't always significative for the user.
  • A feature approach is much more interesting

Everything will be clarified during next week! We will most probably use Luminis server, but we could also use both solutions. To be continued... :)

samedi 17 mai 2008

Managed to make the Felix OBR work!

This week I was playing with Felix OBR (OSGi bundle repository). I had a couple of problems including inconsistency and inheritance. I'll explain my problems and the solutions here.

My goal was to use the Felix OBR in the SIP Communicator project. The first thing I did was to add the Felix OBR jar file to the class path, add the OSGi obr and Felix OBR packages to my bundle, and try the code in my start method. It didn't work. Everytime I was trying to use a class of the OSGi obr package, it would tell me another class of the same package was already loaded.

I found out that the OBR was already installed as a bundle in SC. I searched and found that it was loaded in the system property. I then removed the Felix OBR package import in my manifest, as I only needed the OSGi obr package. Since it was already loaded as a bundle, I only had to get the reference to the service, using RepositoryAdmin.class.getName(). Everything worked afterwards! Thanks to SC developers mailing list and Felix users mailing list!

This week I also discussed the project schedule for the summer with my mentor Cristina. I'll post it as soon as it's confirmed!

TODO List:

  • Continue playing with Felix OBR
  • Think of the project functionnalities

dimanche 11 mai 2008

Long time no post!

From the last post to now, my main goal was to familiarize with SIP Communicator.s source code. I've gotten much better with, as I understand pretty much all the package structure!

My progress with Felix is going great too. I can now say I master all the concepts of it. I only want practice coding right now (especially about the Felix bundle repository:

My goals for the next week is to pratice coding and continue getting better with the source code. This week I will also discuss the project schedule with my mentor, so I'll think about this too.

TODO list:

  • Understanding the source code
  • Praticing with Felix bundle repository framework
  • Discussing the project schedule

mercredi 30 avril 2008

Project features!

I'm currently discussing with my mentor Cristina about the features the GUI would provide. I looked at the plugin management of other (open source) projects for inspiration. The features we discuss go as follows:

Repository management : Possibility to add/remove/manage custom bundle repositories. A repository would consist of an URL. At the root of the URL would be some file (probably XML file, similair to what Eclipse offers) that provides the bundles information (and their dependencies).

Tree-like table in the GUI: The plugins from a repository will be shown in a table, structured like a tree for the dependencies. If a bundle has other required bundles, a plus sign would be visible next to the row in the table. Upon pressing on the plus, the dependencies would be shown (with information like "has to be installed", or "has to be updated"). We thought of adding a version dropdown list to choose which one we want to install for a specific bundle. This dropdown list still has to be discussed though, so it may change.

The GUI would also provide some download properties like "download and activate" or just "download" (with a checkbox I suppose).

I will also update the current "Update" button of the plugin management system. How it is going to be upgraded still has to be discussed, but we know for sure we will permit to update more than one plugin at the same time.

Another feature is a search function. I would functionalities to search within one or more repositories.

There still has a lot to be thought of, and that's what I'm for!

TODO List:

  • Check existing plugin management
  • systems for inspiration
  • Think about an updated GUI for the project
  • Continue reading the developer documentation (going very well)
  • Continue reading SIP Communicator source code
  • Continue reading on OSGi and Felix (I assimilated most of the concepts and I'm pretty proud of it :) )

vendredi 25 avril 2008

It's going fast.

I'm actually learning OSGi/Felix faster than I though! I coded the tutorials and I feel pretty comfortable with Felix. After doing those tutorials I tried compiling and running SIP Communicator...Success! I worked on the first (almost try)...I had 2 small problems with it. The first one was an Ant error while running target rebuild:

"Error starting modern compiler"

The problem was that Eclipse was not using the good JRE (Window -> Preferences -> Java -> Installed JREs). My JAVA_HOME variable was set to 1.6, while the JRE was 1.5. I changed the current JRE to 1.6, and it worked.

My second problem was another Ant error. I had to run the -deploy-os-specific-bundles since it was my first time use. Ant wouldn't recognize the target as a valid one (because of the first "-"). I simply replaced the target name with something else, ran the target, and restored the target name...

Not big problems if you ask!

So now I'll concentrate on reading the Developer documentation for SIP Communicator. I browsed the source code and I figured that it would be much easier after reading the documentation available.

TODO List:

  • Read the SIP Communicator developper documentation
  • Continue learning about OSGi/Felix (Especially services)

mercredi 23 avril 2008

Project change!

Wow, this is only the second day after the announcement, and already a big surprise! As mentionned in the title, my project changed. From now on, I'll be working on the following project:

Plugin Repository and advanced plugin management

This change was because two students were chosen for the file transfer project. My mentor proposed me to change project, and I accepted. This new project seems very intersting (and not very different of the previous one, since they both require file transfering). I'll need to create an OSGi bundle repository along with the plugin download / installation functionnalities. I'm really excited to start on this new project. My TODO list will change a bit as you may have guessed :)

TODO list:

  • Get more familiar with OSGi! (More than ever)
  • Learn about OBRs

mardi 22 avril 2008

My first post!

Hello everyone! Let me introduce myself:

I'm Mathieu Plourde. I'm a 20 years old student from the École de technologie supérieure, in Montréal, Québec (Canada). I'm ending my first year (already) in software engineering.

This blog was created for the Google Summer of Code 2008. Do you know what that means? I GOT IN! Woohoo! I'm going to be working (more like having fun) with the SIP Communicator community. My project is to implement file transfer support to other IM clients within SIP Communicator.

IM really excited about this! (Did you see the subtle joke there...not funny I know)

From today, I'll post my weekly/daily progress. Here's my first TODO list!

TODO list:

  • Read about OSGi : I've already learned quite a bit about it, but I don't feel like I know enough, particularly about Apache Felix.

  • Try the different file transfer libraries : I've read about them, checked how they could be used. Now it's time to actually try them and see their potential!