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    }