Showing posts with label Graph. Show all posts
Showing posts with label Graph. Show all posts

Thursday, March 31, 2016

Java Graph visualization and EMF


The begining

I'm actually working in a integration test team. The main goal of this team is to make software parts assembly ant then test them in a nominal to limit way.
To acheive this task they build data :  for input, result validation  and non-regression test data. This team work with (space) flight dynamics algorithm and the manipulated data are
  • numerous
  • have to make a consistent whole
These datas are in fact organized as a graph and a tree view does not always fit to validate/control these data...

One solution : a graph view

We work with an EMF (Eclipse Modeling Framework) data implementation. So I start reusing a generic editor  (based on a reflexive item provider, the source could be found here) and adapt it to fit our needs. But I feel that is not enough to validate, saw data.
At this point I remembered my work on  graph database named OrientDb. This tool has a graph editor and it was cool to see cross references ans so on...
So I searched a java graph visualization tool. I found fast JUNG (Java Universal Network/Graph Framework) that fit my "first order" needs :
  • easily managed graph
  • many provided layout (see KKlayout, FRLayout, SpringLayout, CirculeLayout and more...)

Usage

 The usage is quite easy, JUNG provide a sample project that is very usefull and run quite well.

Eclipse view Integration

My integration is actually very direct. I use  :
  • the AWT_SWT eclipse bridge to integrate visualisation in a view
  • a command in the generic editor popup menu to invoke an handler that call  the refresh and the show graph view.
  • rely on reflexive content provider to build the graph
  • set a color for each datatype (we have about 1000)
TODO Png

Next

  • More integration to allow highlight from generic editor to graph view and opposite
  • set a short name for vertices and tool tip for contents
  • set edge view depending of containment or not
  • Optimize memory usage (actually no more than one hundred vertices... due to sharing memory with eclipse ? )