001    /*
002     @license.text@
003      */
004    package biz.hammurapi.swing;
005    
006    import java.util.ArrayList;
007    import java.util.Iterator;
008    import java.util.List;
009    import java.util.Map;
010    
011    import javax.swing.table.DefaultTableModel;
012    import javax.swing.table.TableModel;
013    import javax.swing.tree.TreeNode;
014    
015    import biz.hammurapi.convert.Converter;
016    
017    /**
018     * @author Pavel Vlasov
019     *
020     * @version $Revision: 1.1 $
021     */
022    public class MapVisualizer {
023    
024            public Visualizable convert(final Map map, final Converter master) {
025                    return new Visualizable() {
026    
027                            public TreeNode toTreeNode(TreeNode parent, String title) {
028                                    return new LazyTreeNodeTableVisualizable(parent, title) {
029    
030                                            protected List loadChildren() {
031                                                    ArrayList ret = new ArrayList();
032                                                    Iterator it = map.entrySet().iterator();                                
033                                                    for (int i=0; it.hasNext(); ++i) {
034                                                            Visualizable vs = (Visualizable) master.convert(it.next(), Visualizable.class, null);
035                                                            ret.add(vs.toTreeNode(this, "entry "+i));
036                                                    }
037                                                    return ret;
038                                            }
039    
040                                            public TableModel toTable() {
041                                                    DefaultTableModel tm=new DefaultTableModel(2,2);
042                                                    tm.setColumnIdentifiers(new String[] {"Property", "Value"});
043                                                    tm.setValueAt("type", 0, 0);
044                                                    tm.setValueAt(map.getClass().getName(), 0, 1);
045                                                    tm.setValueAt("size", 1, 0);
046                                                    tm.setValueAt(String.valueOf(map.size()), 1, 1);
047                                                    
048                                                    return tm;
049                                            }
050                                            
051                                    };
052                            }
053                            
054                    };
055            }
056    
057            public Visualizable convert(final Map.Entry entry, final Converter master) {
058                    return new Visualizable() {
059    
060                            public TreeNode toTreeNode(TreeNode parent, String title) {
061                                    return new LazyTreeNodeTableVisualizable(parent, title) {
062                    
063                                            protected List loadChildren() {
064                                                    List ret = new ArrayList();
065                                                    Visualizable kvs = (Visualizable) master.convert(entry.getKey(), Visualizable.class, null);
066                                                    ret.add(kvs.toTreeNode(this, "key"));
067                                                    Visualizable vvs = (Visualizable) master.convert(entry.getKey(), Visualizable.class, null);
068                                                    ret.add(vvs.toTreeNode(this, "value"));
069                                                    return ret;
070                                            }
071                    
072                                            public TableModel toTable() {
073                                                    DefaultTableModel tm=new DefaultTableModel(2,3);
074                                                    tm.setColumnIdentifiers(new String[] {"Member", "Type", "Value"});
075                                                    tm.setValueAt("key", 0, 0);
076                                                    tm.setValueAt(entry.getKey()==null ? "(null)" : entry.getKey().getClass().getName(), 0, 1);
077                                                    tm.setValueAt(entry.getKey()==null ? "(null)" : entry.getKey(), 0, 2);
078                                                    
079                                                    tm.setValueAt("value", 1, 0);
080                                                    tm.setValueAt(entry.getValue()==null ? "(null)" : entry.getValue().getClass().getName(), 1, 1);
081                                                    tm.setValueAt(entry.getValue()==null ? "(null)" : entry.getValue(), 1, 2);
082                                                    
083                                                    return tm;
084                                            }
085                                            
086                                            
087                                    };
088                            }
089                    };
090            }
091    }