001    /*
002     @license.text@
003      */
004    package biz.hammurapi.xml.dom;
005    
006    import java.util.Iterator;
007    import java.util.Map;
008    
009    import org.w3c.dom.Element;
010    
011    import biz.hammurapi.convert.Converter;
012    
013    /**
014     * @author Pavel Vlasov
015     *
016     * @version $Revision: 1.3 $
017     */
018    public class MapDomSerializer {
019    
020            public DomSerializable convert(final Map map, final Converter master) {
021                    return new DomSerializable() {
022    
023                            public void toDom(Element holder) {
024                                holder.setAttribute("type", map.getClass().getName());
025                                    if (master!=null) {
026                                        Iterator it=map.entrySet().iterator();
027                                        while (it.hasNext()) {
028                                            Map.Entry entry=(Map.Entry) it.next();
029                                                    DomSerializable kds=(DomSerializable) master.convert(entry.getKey(), DomSerializable.class, null);
030                                            DomSerializable vds=(DomSerializable) master.convert(entry.getValue(), DomSerializable.class, null);
031                                            
032                                            if (kds!=null && vds!=null) {
033                                                    Element ee=holder.getOwnerDocument().createElement("entry");                    
034                                                    holder.appendChild(ee);
035    
036                                                    Element ke=holder.getOwnerDocument().createElement("key");                      
037                                                    ee.appendChild(ke);
038                                                    kds.toDom( ke);
039            
040                                                    Element ve=holder.getOwnerDocument().createElement("value");                    
041                                                    ee.appendChild(ve);
042                                                    vds.toDom(ve);
043                                            }
044                                        }
045                                    }
046                            }
047                            
048                    };
049            }
050    
051    }