package com.revolsys.record.io; import java.io.OutputStream; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import com.revolsys.geometry.io.GeometryWriter; import com.revolsys.geometry.io.GeometryWriterFactory; import com.revolsys.io.FileIoFactory; import com.revolsys.io.IoFactoryWithCoordinateSystem; import com.revolsys.record.Records; import com.revolsys.record.schema.RecordDefinition; import com.revolsys.spring.resource.Resource; public interface RecordWriterFactory extends FileIoFactory, GeometryWriterFactory, IoFactoryWithCoordinateSystem { @Override default GeometryWriter newGeometryWriter(final String baseName, final OutputStream out, final Charset charset) { final RecordDefinition recordDefinition = Records.newGeometryRecordDefinition(); final RecordWriter recordWriter = newRecordWriter(baseName, recordDefinition, out, charset); return new RecordWriterGeometryWriter(recordWriter); } /** * Construct a new writer to write to the specified resource. * * @param recordDefinition The recordDefinition for the type of data to write. * @param resource The resource to write to. * @return The writer. */ default RecordWriter newRecordWriter(final RecordDefinition recordDefinition, final Resource resource) { final OutputStream out = resource.newBufferedOutputStream(); final String baseName = resource.getBaseName(); return newRecordWriter(baseName, recordDefinition, out); } default RecordWriter newRecordWriter(final String baseName, final RecordDefinition recordDefinition, final OutputStream outputStream) { return newRecordWriter(baseName, recordDefinition, outputStream, StandardCharsets.UTF_8); } RecordWriter newRecordWriter(String baseName, RecordDefinition recordDefinition, OutputStream outputStream, Charset charset); }