View Javadoc
1 package com.thoughtworks.xstream.converters.collections; 2 3 import com.thoughtworks.xstream.alias.ClassMapper; 4 import com.thoughtworks.xstream.converters.ConversionException; 5 import com.thoughtworks.xstream.converters.Converter; 6 import com.thoughtworks.xstream.converters.ConverterLookup; 7 import com.thoughtworks.xstream.objecttree.ObjectTree; 8 import com.thoughtworks.xstream.xml.XMLReader; 9 import com.thoughtworks.xstream.xml.XMLWriter; 10 11 public abstract class AbstractCollectionConverter implements Converter { 12 protected ClassMapper classMapper; 13 14 public abstract boolean canConvert(Class type); 15 16 public AbstractCollectionConverter(ClassMapper classMapper) { 17 this.classMapper = classMapper; 18 } 19 20 public abstract void toXML(ObjectTree objectGraph, XMLWriter xmlWriter, ConverterLookup converterLookup); 21 22 public abstract void fromXML(ObjectTree objectGraph, XMLReader xmlReader, ConverterLookup converterLookup, Class requiredType); 23 24 protected void writeItem(Object item, XMLWriter xmlWriter, ConverterLookup converterLookup, ObjectTree objectGraph) { 25 if (item == null) { 26 xmlWriter.startElement("null"); 27 xmlWriter.endElement(); 28 } else { 29 Class type = item.getClass(); 30 xmlWriter.startElement(classMapper.lookupName(type)); 31 Converter converter = converterLookup.lookupConverterForType(type); 32 converter.toXML(objectGraph.newStack(item), xmlWriter, converterLookup); 33 xmlWriter.endElement(); 34 } 35 } 36 37 protected Object readItem(XMLReader xmlReader, int childIndex, ObjectTree objectGraph, ConverterLookup converterLookup) { 38 xmlReader.child(childIndex); 39 Class type = classMapper.lookupType(xmlReader.name()); 40 ObjectTree itemWriter = objectGraph.newStack(type); 41 Converter converter = converterLookup.lookupConverterForType(type); 42 converter.fromXML(itemWriter, xmlReader, converterLookup, type); 43 xmlReader.pop(); 44 return itemWriter.get(); 45 } 46 47 protected Object createCollection(Class type) { 48 Class defaultType = classMapper.lookupDefaultType(type); 49 try { 50 return defaultType.newInstance(); 51 } catch (InstantiationException e) { 52 throw new ConversionException("Cannot instantiate " + defaultType.getName(), e); 53 } catch (IllegalAccessException e) { 54 throw new ConversionException("Cannot instantiate " + defaultType.getName(), e); 55 } 56 } 57 }

This page was automatically generated by Maven