Difference between revisions of "Working with the graph widget"

From Protege Wiki
Jump to: navigation, search
(created page content)
 
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
<span style="font-size:20px;">Working with the Graph Widget</span>
 +
 +
 
Two questions about programmatic access to the graph widget have been posted on the protege-discussion mailing list with some regularity:
 
Two questions about programmatic access to the graph widget have been posted on the protege-discussion mailing list with some regularity:
  
 
# How do I programmatically save the contents of the graph widget to an image?
 
# How do I programmatically save the contents of the graph widget to an image?
 
# How do I programmatically get position information for nodes in the graph widget?
 
# How do I programmatically get position information for nodes in the graph widget?
 +
  
 
The following code snippet shows how to accomplish both.  It uses the newspaper example project that comes with the default installation of Protege.  In the newspaper example project, The "employees" slot attached to the "Organization" class is configured to use the graph widget.
 
The following code snippet shows how to accomplish both.  It uses the newspaper example project that comes with the default installation of Protege.  In the newspaper example project, The "employees" slot attached to the "Organization" class is configured to use the graph widget.
Line 58: Line 62:
 
}
 
}
 
</pre>
 
</pre>
 +
 +
[[Category:Protege developer documentation]]

Latest revision as of 16:53, May 27, 2008

Working with the Graph Widget


Two questions about programmatic access to the graph widget have been posted on the protege-discussion mailing list with some regularity:

  1. How do I programmatically save the contents of the graph widget to an image?
  2. How do I programmatically get position information for nodes in the graph widget?


The following code snippet shows how to accomplish both. It uses the newspaper example project that comes with the default installation of Protege. In the newspaper example project, The "employees" slot attached to the "Organization" class is configured to use the graph widget.

public class GraphWidget_Test {
  private static final String projectFileName = "C:/Protege_3.3/examples/newspaper/newspaper.pprj";

  public static void main(String[] args) {
    // open the newspaper example
    Collection errors = new ArrayList();
    Project project = new Project(projectFileName, errors);
	
    // get the instance and slot objects from the kb that we want to work with
    Instance instance = project.getKnowledgeBase().getInstance("instance_00064"); // a.k.a. -> "San Jose Mercury News"
    Slot slot = project.getKnowledgeBase().getSlot("employees");
	
    // necessary to put the clswidget into a jframe because the graph 
    // widget uses a 3rd party drawing library that won't initiliaze
    // until it detects that it's in a window
    ClsWidget cw =  project.createRuntimeClsWidget(instance);
    JFrame frame = new JFrame();
    frame.getContentPane().add((Component) cw);
    frame.pack();

    // get the slot widget for the "employees" slot
    SlotWidget sw = cw.getSlotWidget(slot);
    if (sw instanceof GraphWidget) {
      GraphWidget gw = (GraphWidget) sw;
      BufferedImage image = gw.getImage();

      try {
        // save contents of graph widget as jpg
        File f = new File("c:\\temp\\graph-widget.jpg");
        ImageIO.write(image, "jpg", f);
	
        // save contents of graph widget as png
        File f2 = new File("c:\\temp\\graph-widget.png");
        ImageIO.write(image, "png", f2);
      } catch(java.io.IOException e) {
        System.out.println(e.getMessage());
      }

      // print the position information for all of the slot values
      // of the employee slot
      ArrayList ownSlotValues = new ArrayList(instance.getDirectOwnSlotValues(slot));
      Iterator i = ownSlotValues.iterator();
      while (i.hasNext()) {
        Instance ownSlotValue = (Instance) i.next();
        Object obj = gw.getPositionInfo(instance, slot, ownSlotValue);
        System.out.println("Position information for " + ownSlotValue.getBrowserText() + ": " + obj);
      }
    }
  }
}