package com.revolsys.record.io.format.wkt;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.Writer;
import com.revolsys.geometry.model.ClockDirection;
import com.revolsys.geometry.model.Geometry;
import com.revolsys.geometry.model.GeometryFactory;
import com.revolsys.io.AbstractRecordWriter;
import com.revolsys.io.FileUtil;
import com.revolsys.io.IoConstants;
import com.revolsys.record.Record;
import com.revolsys.record.property.FieldProperties;
import com.revolsys.record.schema.FieldDefinition;
import com.revolsys.record.schema.RecordDefinition;
import com.revolsys.util.Exceptions;
public class WktRecordWriter extends AbstractRecordWriter {
private boolean open;
private final Writer out;
private final RecordDefinition recordDefinition;
public WktRecordWriter(final RecordDefinition recordDefinition, final Writer out) {
this.recordDefinition = recordDefinition;
this.out = new BufferedWriter(out);
final FieldDefinition geometryField = recordDefinition.getGeometryField();
if (geometryField != null) {
final GeometryFactory geometryFactory = geometryField
.getProperty(FieldProperties.GEOMETRY_FACTORY);
setProperty(IoConstants.GEOMETRY_FACTORY, geometryFactory);
}
}
@Override
public void close() {
FileUtil.closeSilent(this.out);
}
@Override
public void flush() {
try {
this.out.flush();
} catch (final IOException e) {
}
}
@Override
public ClockDirection getPolygonRingDirection() {
return ClockDirection.COUNTER_CLOCKWISE;
}
@Override
public String toString() {
return this.recordDefinition.getPath().toString();
}
@Override
public void write(final Record record) {
try {
if (!this.open) {
this.open = true;
}
final Geometry geometry = record.getGeometry();
final int srid = geometry.getCoordinateSystemId();
if (srid > 0) {
this.out.write("SRID=");
this.out.write(Integer.toString(srid));
this.out.write(';');
}
EWktWriter.write(this.out, geometry);
this.out.write('\n');
} catch (final IOException e) {
throw Exceptions.wrap(e);
}
}
}