package mil.nga.giat.geowave.cli.osm.mapreduce.Ingest; import java.io.IOException; import java.util.Calendar; import org.apache.accumulo.core.data.Mutation; import org.apache.accumulo.core.security.ColumnVisibility; import org.apache.avro.mapred.AvroKey; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import mil.nga.giat.geowave.cli.osm.accumulo.osmschema.Constants; import mil.nga.giat.geowave.cli.osm.accumulo.osmschema.Schema; import mil.nga.giat.geowave.cli.osm.types.TypeUtils; import mil.nga.giat.geowave.cli.osm.types.generated.LongArray; import mil.nga.giat.geowave.core.store.data.field.FieldUtils; import mil.nga.giat.geowave.core.store.data.field.FieldWriter; public class OSMMapperBase<T> extends Mapper<AvroKey<T>, NullWritable, Text, Mutation> { private static final Logger log = LoggerFactory.getLogger(OSMMapperBase.class); protected final FieldWriter<?, Long> longWriter = FieldUtils.getDefaultWriterForClass(Long.class); protected final FieldWriter<?, Integer> intWriter = FieldUtils.getDefaultWriterForClass(Integer.class); protected final FieldWriter<?, String> stringWriter = FieldUtils.getDefaultWriterForClass(String.class); protected final FieldWriter<?, Double> doubleWriter = FieldUtils.getDefaultWriterForClass(Double.class); protected final FieldWriter<?, Boolean> booleanWriter = FieldUtils.getDefaultWriterForClass(Boolean.class); protected final FieldWriter<?, Calendar> calendarWriter = FieldUtils.getDefaultWriterForClass(Calendar.class); protected ColumnVisibility _visibility = new ColumnVisibility( "public".getBytes(Constants.CHARSET)); protected Text _tableName = new Text( "OSM"); protected byte[] getIdHash( long id ) { return Schema.getIdHash(id); } protected void put( Mutation m, byte[] cf, byte[] cq, Long val ) { if (val != null) { m.put( cf, cq, _visibility, longWriter.writeField(val)); } } protected void put( Mutation m, byte[] cf, byte[] cq, Integer val ) { if (val != null) { m.put( cf, cq, _visibility, intWriter.writeField(val)); } } protected void put( Mutation m, byte[] cf, byte[] cq, Double val ) { if (val != null) { m.put( cf, cq, _visibility, doubleWriter.writeField(val)); } } protected void put( Mutation m, byte[] cf, byte[] cq, String val ) { if (val != null) { m.put( cf, cq, _visibility, stringWriter.writeField(val)); } } protected void put( Mutation m, byte[] cf, byte[] cq, CharSequence val ) { if (val != null) { m.put( cf, cq, _visibility, stringWriter.writeField(val.toString())); } } protected void put( Mutation m, byte[] cf, byte[] cq, Boolean val ) { if (val != null) { m.put( cf, cq, _visibility, booleanWriter.writeField(val)); } } protected void put( Mutation m, byte[] cf, byte[] cq, Calendar val ) { if (val != null) { m.put( cf, cq, _visibility, calendarWriter.writeField(val)); } } protected void put( Mutation m, byte[] cf, byte[] cq, LongArray val ) { if (val != null) { try { m.put( cf, cq, _visibility, TypeUtils.serializeLongArray(val)); } catch (IOException e) { log.error( "Unable to serialize LongArray instance", e); } } } @Override public void setup( Context context ) throws IOException, InterruptedException { String tn = context.getConfiguration().get( "tableName"); if (tn != null && !tn.isEmpty()) { _tableName.set(tn); } String visibility = context.getConfiguration().get( "osmVisibility"); if (visibility == null) { visibility = ""; } _visibility = new ColumnVisibility( visibility.getBytes(Constants.CHARSET)); } }