GUI CONTRIBUTIONS
- new component submission view (drag and drop support from the repository explorer to add dependencies easily :) )
- repository explorer view
- preference page (set repository URL)
IMPLEMENTED FEATURES
- submit a new component
- usual search features (name, version, tags)
- search components providing a set of tasks
- search components providing all the tasks of the selected ones
- "smart" search of components functionally equivalent to the selected one (reasoning here)
- search components depending on the selected one
- assert functional equivalence between components
HANDS-ON
Let's take a test drive. I submit a new component, in this case (just as an example) the "last-gsoc-demo" one. I fill in some data, and press submit. I can just drag-and-drop dependencies from the repository explorer to the dependencies viewer.
I previously submitted some sample components. Now since all jdbc drivers implement the same specification, to some extent it is correct to consider them "functionally equivalent", and I push this statement in the knowledge base.
For sake of brevity I ask you to trust me without further shots, what I did is just assert all jdbc drivers in the repository (besides the "dummy-jdbc" one) "functionally equivalent" to the postgresql one, and then assert the "dummy- jdbc" only equivalent to "mysql-jdbc". I can ask now the repository to give me components "functionally equivalent" to the selected one ("dummy-jdbc"), just clicking on the context menu item:
Here's what I obtain:
You might notice that the selected item is still there, which makes sense since everything is of course functionally equivalent to itself. ;) Furthermore, it is worthwhile to note I only said the "dummy-jdbc" was equivalent to "mysql-jdbc", full stop! The rest is just the result of the reasoning process.
Now, I can also describe a component in terms of the "tasks" it carries out. Let's suppose - just as an example - I have two components, one for "dom-parsing" and the other for "sax-parsing".
Suppose now I was not on earth in the last years and I want to know if there exists a single component doing the two things.
I can select both of them, click on the shown item and I'll get xerces-j actually does both things. I might decide to use it if it fits my needs, since a single dependency is better than two, in most cases.
I also could want to know if other components rely on mine, or for instance how many components actually use one, which usually means it has great reputation. Remember the "last-gsoc-demo" component? I put "mysql-jdbc" as a dependency there. I just right click on the component, and find the components depending on the selected one. :)
CLIENT-SERVER ARCHITECTURAL VIEW (after latest modifications)
KNOWN BUGS
- troubles with SPARQL queries involving literals: searching against id and tasks is ok, versions and tags are not (yet the http://repo.url/tag/{tag} resource works fine... i had no time to investigate further befor pencils were off)
- dangling dependencies (i.e. after a delete operation) are not handled yet.
COMING SOON (random order)
- rest (not in the soa-ish meaning)
- enable license and license-style search criteria on the plugin
- associate a new perspective with the provided views
- improve repository explorer (i don't like that tree very much)
- bundled repository exploiting the eclipse embedded jetty server
- import existing metadata from maven POM or OSGi manifest (URL drag and drop from web browser?)
- address repository data access layer performance issues
- setup an update site somewhere on the globe
CHEERS
That's all for now, I really enjoyed the work, and I am confident this both- side fruitful collaboration will go on. A lot of things remain to be done on this project, and I won't let it down after Google Summer of Code stops.
I want to thank Philippe Ombredanne for mentoring me, and all the guys @ #eclipse-soc for supporting me and other students day after day. It was an invaluable experience to work with you guys.
See you online,
cheers,
Savino Sguera.