package com.esri;
import com.esri.arcgis.geometry.IGeometry;
import com.esri.arcgis.geometry.Point;
import org.apache.avro.file.DataFileWriter;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.specific.SpecificDatumWriter;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
/**
*/
public class PointWriterAvro extends ByteArrayOutputStream implements ShapeWriterInterface
{
private AvroSpatialReference m_spatialReference;
private DataFileWriter<AvroPoint> m_dataFileWriter;
private final byte[] pointQual = Bytes.toBytes("point");
public PointWriterAvro(final int wkid)
{
final DatumWriter<AvroPoint> datumWriter = new SpecificDatumWriter<AvroPoint>(AvroPoint.class);
m_dataFileWriter = new DataFileWriter<AvroPoint>(datumWriter);
m_spatialReference = AvroSpatialReference.newBuilder().setWkid(wkid).build();
}
@Override
public void write(
final Put put,
final byte[] geomColFam,
final IGeometry geometry) throws IOException
{
final Point point = (Point) geometry;
m_dataFileWriter.create(AvroPoint.getClassSchema(), this);
final AvroCoord coord = AvroCoord.newBuilder().
setX(point.getX()).
setY(point.getY()).
build();
m_dataFileWriter.append(AvroPoint.newBuilder().
setSpatialReference(m_spatialReference).
setCoord(coord).
build());
m_dataFileWriter.close();
put.add(geomColFam, pointQual, this.toByteArray());
this.reset();
}
@Override
public void close()
{
}
}