package mil.nga.giat.geowave.analytic.mapreduce.kmeans;
import java.io.DataInputStream;
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import mil.nga.giat.geowave.adapter.vector.FeatureWritable;
import org.apache.hadoop.io.serializer.Deserializer;
import org.apache.hadoop.io.serializer.Serialization;
import org.apache.hadoop.io.serializer.Serializer;
import org.geotools.feature.simple.SimpleFeatureImpl;
public class SimpleFeatureImplSerialization implements
Serialization<SimpleFeatureImpl>
{
@Override
public boolean accept(
final Class<?> c ) {
return SimpleFeatureImpl.class.isAssignableFrom(c);
}
@Override
public Deserializer<SimpleFeatureImpl> getDeserializer(
final Class<SimpleFeatureImpl> arg0 ) {
return new SFDeserializer();
}
@Override
public Serializer<SimpleFeatureImpl> getSerializer(
final Class<SimpleFeatureImpl> arg0 ) {
return new SFSerializer();
}
public class SFDeserializer implements
Deserializer<SimpleFeatureImpl>
{
private InputStream in;
private DataInputStream dataInput;
@Override
public void open(
final InputStream in )
throws IOException {
this.in = in;
dataInput = new DataInputStream(
in);
}
@Override
public SimpleFeatureImpl deserialize(
final SimpleFeatureImpl t )
throws IOException {
final FeatureWritable fw = new FeatureWritable();
fw.readFields(dataInput);
return (SimpleFeatureImpl) fw.getFeature();
}
@Override
public void close()
throws IOException {
in.close();
}
}
private static class SFSerializer implements
Serializer<SimpleFeatureImpl>
{
private OutputStream out;
private DataOutput dataOutput;
@Override
public void open(
final OutputStream out )
throws IOException {
this.out = out;
dataOutput = new DataOutputStream(
out);
}
@Override
public void serialize(
final SimpleFeatureImpl t )
throws IOException {
final FeatureWritable fw = new FeatureWritable(
t.getFeatureType(),
t);
fw.write(dataOutput);
}
@Override
public void close()
throws IOException {
out.close();
}
}
}