package com.revolsys.record.io.format.xml;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.Charset;
import com.revolsys.collection.map.MapEx;
import com.revolsys.io.AbstractIoFactoryWithCoordinateSystem;
import com.revolsys.io.map.IteratorMapReader;
import com.revolsys.io.map.MapReader;
import com.revolsys.io.map.MapReaderFactory;
import com.revolsys.io.map.MapWriter;
import com.revolsys.io.map.MapWriterFactory;
import com.revolsys.record.io.RecordWriter;
import com.revolsys.record.io.RecordWriterFactory;
import com.revolsys.record.schema.RecordDefinition;
import com.revolsys.spring.resource.Resource;
public class Xml extends AbstractIoFactoryWithCoordinateSystem
implements RecordWriterFactory, MapReaderFactory, MapWriterFactory {
public static MapEx toMap(final Resource resource) {
final XmlMapIterator iterator = new XmlMapIterator(resource, true);
try {
if (iterator.hasNext()) {
return iterator.next();
} else {
return null;
}
} finally {
iterator.close();
}
}
public Xml() {
super("XML");
addMediaTypeAndFileExtension("text/xml", "xml");
}
@Override
public boolean isReadFromZipFileSupported() {
return true;
}
@Override
public MapReader newMapReader(final Resource resource) {
final XmlMapIterator iterator = new XmlMapIterator(resource);
return new IteratorMapReader(iterator);
}
@Override
public MapWriter newMapWriter(final Writer out) {
return new XmlMapWriter(out);
}
@Override
public RecordWriter newRecordWriter(final String baseName,
final RecordDefinition recordDefinition, final OutputStream outputStream,
final Charset charset) {
final OutputStreamWriter writer = new OutputStreamWriter(outputStream, charset);
return new XmlRecordWriter(recordDefinition, writer);
}
}