xuxiuxi
2017-07-22 4bee2fa9f76f7e200bf1bf01c24b709d16a58488
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.awsle.aibatis.xml.engine.converters.collections;
 
import com.awsle.aibatis.xml.engine.alias.ClassMapper;
import com.awsle.aibatis.xml.engine.converters.ConverterLookup;
import com.awsle.aibatis.xml.engine.objecttree.ObjectTree;
import com.awsle.aibatis.xml.engine.xml.XMLReader;
import com.awsle.aibatis.xml.engine.xml.XMLWriter;
 
import java.util.Iterator;
import java.util.Map;
 
public class MapConverter extends AbstractCollectionConverter {
 
    public MapConverter(ClassMapper classMapper) {
        super(classMapper);
    }
 
    public boolean canConvert(Class type) {
        return Map.class.isAssignableFrom(type);
    }
 
    public void toXML(ObjectTree objectGraph, XMLWriter xmlWriter, ConverterLookup converterLookup) {
        Map map = (Map) objectGraph.get();
        for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext();) {
            Map.Entry entry = (Map.Entry) iterator.next();
            xmlWriter.startElement("entry");
 
            writeItem(entry.getKey(), xmlWriter, converterLookup, objectGraph);
            writeItem(entry.getValue(), xmlWriter, converterLookup, objectGraph);
 
            xmlWriter.endElement();
        }
    }
 
    public void fromXML(ObjectTree objectGraph, XMLReader xmlReader, ConverterLookup converterLookup, Class requiredType) {
        int childCount = xmlReader.childCount();
        Map map = (Map) createCollection(requiredType);
        for (int i = 0; i < childCount; i++) {
            xmlReader.child(i);
 
            Object key = readItem(xmlReader, 0, objectGraph, converterLookup);
            Object value = readItem(xmlReader, 1, objectGraph, converterLookup);
            map.put(key, value);
 
            xmlReader.pop();
        }
        objectGraph.set(map);
    }
 
}