001 /*
002 @license.text@
003 */
004 package biz.hammurapi.swing;
005
006 import java.util.Iterator;
007 import java.util.Map;
008
009 import javax.swing.table.DefaultTableModel;
010 import javax.swing.table.TableModel;
011 import javax.swing.tree.DefaultMutableTreeNode;
012 import javax.swing.tree.MutableTreeNode;
013
014 import biz.hammurapi.swing.CompositeVisualizer.Member;
015
016 /**
017 * @author Pavel Vlasov
018 *
019 * @version $Revision: 1.1 $
020 */
021 public class MapVisualizer implements Member {
022
023 private CompositeVisualizer owner;
024
025 public Visualizable toVisualizable(final Map map) {
026 return new Visualizable() {
027
028 public MutableTreeNode toTree(final String title) {
029 DefaultMutableTreeNode ret=new DefaultMutableTreeNode(map) {
030 public String toString() {
031 return title+" ["+map.getClass().getName()+"] size="+map.size();
032 }
033 };
034
035 Iterator it=map.entrySet().iterator();
036 while (it.hasNext()) {
037 Visualizable ev=owner.getStackHead().toVisualizable(it.next());
038 if (ev!=null) {
039 ret.add(ev.toTree("entry"));
040 }
041 }
042
043 return ret;
044 }
045
046 public TableModel toTable() {
047 DefaultTableModel tm=new DefaultTableModel(2,2);
048 tm.setColumnIdentifiers(new String[] {"Property", "Value"});
049 tm.setValueAt("type", 0, 0);
050 tm.setValueAt(map.getClass().getName(), 0, 1);
051 tm.setValueAt("size", 1, 0);
052 tm.setValueAt(String.valueOf(map.size()), 1, 1);
053
054 return tm;
055 }
056 };
057 }
058
059 public Visualizable toVisualizable(final Map.Entry entry) {
060 return new Visualizable() {
061
062 public MutableTreeNode toTree(final String title) {
063 DefaultMutableTreeNode ret=new DefaultMutableTreeNode(entry) {
064 public String toString() {
065 return title;
066 }
067 };
068
069 Visualizable kv=owner.getStackHead().toVisualizable(entry.getKey());
070 ret.add(kv.toTree("key"));
071
072 Visualizable vv=owner.getStackHead().toVisualizable(entry.getValue());
073 ret.add(vv.toTree("value"));
074
075 return ret;
076 }
077
078 public TableModel toTable() {
079 DefaultTableModel tm=new DefaultTableModel(2,3);
080 tm.setColumnIdentifiers(new String[] {"Member", "Type", "Value"});
081 tm.setValueAt("key", 0, 0);
082 tm.setValueAt(entry.getKey()==null ? "(null)" : entry.getKey().getClass().getName(), 0, 1);
083 tm.setValueAt(entry.getKey()==null ? "(null)" : entry.getKey(), 0, 2);
084
085 tm.setValueAt("value", 1, 0);
086 tm.setValueAt(entry.getValue()==null ? "(null)" : entry.getValue().getClass().getName(), 1, 1);
087 tm.setValueAt(entry.getValue()==null ? "(null)" : entry.getValue(), 1, 2);
088
089 return tm;
090 }
091 };
092 }
093
094 /**
095 * Callback method
096 */
097 public void setOwner(CompositeVisualizer owner) {
098 this.owner=owner;
099 }
100 }