package senseiTests.domainsTest; import sensei.middleware.domains.Property; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.JTree; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.DefaultMutableTreeNode; import java.util.Iterator; import java.util.TreeSet; import sensei.util.IntWrapper; class PropertiesPanel extends JPanel { public PropertiesPanel() { super(new BorderLayout()); setBorder(BorderFactory.createTitledBorder("Properties info")); propertiesKnown=false; init(); } public void clearProperties() { ((CardLayout)(cardPanel.getLayout())).last(cardPanel); propertiesKnown=false; root.removeAllChildren(); treeModel.nodeStructureChanged(root); } public void setProperties(int member, Property[] properties) { if (!propertiesKnown) { propertiesKnown=true; ((CardLayout)(cardPanel.getLayout())).first(cardPanel); } Node memberNode = findMember(member); if (memberNode==null) { memberNode = new Node(member); treeModel.insertNodeInto(memberNode, root, findMemberPosition(member)); } else { memberNode.removeAllChildren(); treeModel.nodeStructureChanged(memberNode); } setProperties(memberNode, properties); } void setProperties(Node node, Property[] properties) { int size = properties.length; TreeSet sortedProperties = new TreeSet(); while(size-->0) { Property prop = properties[size]; sortedProperties.add(prop.nam+ " = " + prop.val); } Iterator it = sortedProperties.iterator(); while(it.hasNext()) { Node toInsert = new Node((String)(it.next())); treeModel.insertNodeInto(toInsert, node, ++size); } } public Dimension getPreferredSize() { return new Dimension(250, 150); } JPanel createDataPanel() { JPanel ret = new JPanel(new BorderLayout()); root = new Node(0); treeModel = new DefaultTreeModel(root, true); JTree tree = new JTree(treeModel); tree.setRootVisible(false); //Create the scroll pane and add the tree to it. JScrollPane treeView = new JScrollPane(tree); ret.add(treeView, BorderLayout.CENTER); ret.setBorder(BorderFactory.createEtchedBorder()); return ret; } JPanel createEmptyPanel() { JPanel ret = new JPanel(new BorderLayout()); ret.add(new JLabel("Without knowledge yet", SwingConstants.CENTER), BorderLayout.CENTER); return ret; } void init() { cardPanel = new JPanel(new CardLayout()); cardPanel.add(createDataPanel(),"1");//string not used cardPanel.add(createEmptyPanel(),"0"); clearProperties(); add(cardPanel, BorderLayout.CENTER); } //************************************************************************************* //**************************** SUPPORT CLASS ****************************************** //************************************************************************************* class Node extends DefaultMutableTreeNode { public int id; public Node(String Property) { super(Property, false); id=0; } public Node(int id) { super(String.valueOf(id), true); this.id=id; } public Object clone() { Node n = (Node) super.clone(); n.id=id; return n; } } //*************************************************************************************// //**************************** FIND MEMBER POSITION ***********************************// //*************************************************************************************// /** * Finds the member position to insert a member. **/ int findMemberPosition(int memberId) { int len = root.getChildCount(); for (int i=0; i<len ; i++) { Node member = (Node) root.getChildAt(i); if (memberId < member.id) return i; } return len; } //*************************************************************************************// //**************************** FIND MEMBER ********************************************// //*************************************************************************************// /** * Finds a member in the tree **/ Node findMember(int id) { int len = root.getChildCount(); for (int i=0; i<len ; i++) { Node member = (Node) root.getChildAt(i); if (member.id==id) return member; } return null; } //************************************************************************************* //**************************** DATA MEMEBRS ******************************************* //************************************************************************************* JPanel cardPanel; boolean propertiesKnown; DefaultMutableTreeNode root; DefaultTreeModel treeModel; };