001 /** 002 * OntoBride library. 003 * GAIA - Group for Artifical Intelligence Applications 004 * Departamento de Ingeniería del Software e Inteligencia Artificial 005 * Universidad Complutense de Madrid 006 * 007 * Licensed under the terms of the GNU Library or Lesser General Public License (LGPL) 008 * 009 * @author Juan A. Recio García 010 * @version 1.0 beta 011 * 012 * This software is a subproject of the jCOLIBRI framework 013 * http://sourceforge.net/projects/jcolibri-cbr/ 014 * http://gaia.fdi.ucm.es/projects/jcolibri/ 015 * 016 * File: PnlConceptsTree.java 017 * 26/02/2007 018 */ 019 package es.ucm.fdi.gaia.ontobridge.test.gui; 020 021 import java.awt.event.MouseAdapter; 022 import java.awt.event.MouseEvent; 023 024 import javax.swing.BorderFactory; 025 import javax.swing.Icon; 026 import javax.swing.JPanel; 027 import javax.swing.JScrollPane; 028 import javax.swing.JTree; 029 import javax.swing.border.Border; 030 import javax.swing.event.TreeSelectionEvent; 031 import javax.swing.event.TreeSelectionListener; 032 import javax.swing.tree.DefaultMutableTreeNode; 033 import javax.swing.tree.DefaultTreeCellRenderer; 034 import javax.swing.tree.TreePath; 035 import javax.swing.tree.TreeSelectionModel; 036 037 import java.awt.*; 038 039 import es.ucm.fdi.gaia.ontobridge.OntoBridge; 040 041 import java.util.*; 042 043 044 /** 045 * Shows the concepts hierarchy of an ontology 046 * @author Juan Ant. Recio García 047 * 048 */ 049 public class PnlConceptsTree extends JPanel implements TreeSelectionListener{ 050 051 private static final long serialVersionUID = 1L; 052 053 private JTree ontologyTree; 054 private DefaultMutableTreeNode root; 055 056 private static Icon CONCEPT = new javax.swing.ImageIcon(PnlConceptsTree.class.getResource("/es/ucm/fdi/gaia/ontobridge/test/gui/class-orange.gif")); 057 058 059 private static int maxdepth = 20; //Constant to avoid cycles; 060 061 062 /** 063 * Constructor 064 */ 065 public PnlConceptsTree(OntoBridge ob) { 066 super(); 067 createComponents(); 068 readOntology(ob); 069 } 070 071 072 public String getSelectedConcept(){ 073 return selectedConcept; 074 } 075 076 private String selectedConcept = null; 077 078 public void valueChanged(TreeSelectionEvent event) { 079 selectedConcept = ontologyTree.getLastSelectedPathComponent().toString(); 080 } 081 082 083 protected void createComponents(){ 084 JScrollPane scrPnl; 085 Border lineBorder, titleBorder, emptyBorder, compoundBorder; 086 087 //set border and layout 088 emptyBorder = BorderFactory.createEmptyBorder(0, 5, 0, 5); 089 lineBorder = BorderFactory.createLineBorder(Color.BLACK); 090 titleBorder = BorderFactory.createTitledBorder(lineBorder, "Ontology Structure"); 091 compoundBorder = BorderFactory.createCompoundBorder(titleBorder, 092 emptyBorder); 093 setBorder(compoundBorder); 094 095 //set Ontology 096 root= new DefaultMutableTreeNode("Thing"); 097 098 ontologyTree = new JTree(root); 099 ontologyTree.setCellRenderer(new MyRenderer()); 100 ontologyTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); 101 ontologyTree.addTreeSelectionListener(this); 102 103 ontologyTree.addMouseListener(new MouseAdapter() { 104 public void mousePressed(MouseEvent e) { 105 int selRow = ontologyTree.getRowForLocation(e.getX(), e.getY()); 106 TreePath selPath = ontologyTree.getPathForLocation(e.getX(), e.getY()); 107 if(selRow != -1) { 108 selectedConcept = selPath.toString(); 109 } 110 } 111 }); 112 113 scrPnl = new JScrollPane(ontologyTree); 114 scrPnl.setViewportView(ontologyTree); 115 116 setLayout(new BorderLayout()); 117 add(scrPnl,BorderLayout.CENTER); 118 } 119 120 /** 121 * Read the ontology classes. 122 * 123 */ 124 protected void readOntology(OntoBridge ob) { 125 try 126 { 127 ontologyTree.getModel().getRoot(); 128 Iterator<String> rc = ob.listRootClasses(); 129 while(rc.hasNext()) 130 { 131 DefaultMutableTreeNode node = createNode(rc.next(), ob, 0); 132 root.add(node); 133 } 134 ontologyTree.expandRow(0); 135 136 } catch (Exception e) { 137 org.apache.commons.logging.LogFactory.getLog(this.getClass()).error(e); 138 } 139 } 140 141 142 private DefaultMutableTreeNode createNode(String nodeName, OntoBridge ob, int depth) 143 { 144 DefaultMutableTreeNode node = new DefaultMutableTreeNode(ob.getShortName(nodeName)); 145 if(depth > maxdepth) 146 return node; 147 148 Iterator<String> subClasses = ob.listSubClasses(nodeName, true); 149 while(subClasses.hasNext()) 150 { 151 String subClassName = ob.getShortName(subClasses.next()); 152 if(!subClassName.equals("owl:Nothing")) 153 node.add(createNode(subClassName, ob, depth+1)); 154 } 155 156 return node; 157 } 158 159 160 class MyRenderer extends DefaultTreeCellRenderer { 161 private static final long serialVersionUID = 1L; 162 163 public MyRenderer() { 164 } 165 166 public Component getTreeCellRendererComponent(JTree tree, Object value, 167 boolean sel, boolean expanded, boolean leaf, int row, 168 boolean hasFocus) { 169 170 super.getTreeCellRendererComponent(tree, value, sel, expanded, 171 leaf, row, hasFocus); 172 173 try { 174 setIcon(CONCEPT); 175 } catch (Exception e) { 176 org.apache.commons.logging.LogFactory.getLog(this.getClass()).error(e); 177 } 178 179 return this; 180 } 181 } 182 } 183 184 185