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);
|
}
|
|
}
|