package mil.nga.giat.geowave.adapter.raster.resize;
import java.io.IOException;
import java.util.Iterator;
import org.apache.hadoop.io.ObjectWritable;
import org.apache.hadoop.mapreduce.MapContext;
import org.apache.hadoop.mapreduce.Mapper;
import org.opengis.coverage.grid.GridCoverage;
import mil.nga.giat.geowave.adapter.raster.FitToIndexGridCoverage;
import mil.nga.giat.geowave.adapter.raster.adapter.RasterDataAdapter;
import mil.nga.giat.geowave.core.store.adapter.DataAdapter;
import mil.nga.giat.geowave.mapreduce.GeoWaveWritableOutputMapper;
import mil.nga.giat.geowave.mapreduce.input.GeoWaveInputKey;
public class RasterTileResizeMapper extends
GeoWaveWritableOutputMapper<GeoWaveInputKey, GridCoverage>
{
private RasterTileResizeHelper helper;
@Override
protected void mapNativeValue(
final GeoWaveInputKey key,
final GridCoverage value,
final MapContext<GeoWaveInputKey, GridCoverage, GeoWaveInputKey, Object> context )
throws IOException,
InterruptedException {
if (helper.isOriginalCoverage(key.getAdapterId())) {
final DataAdapter<?> adapter = super.serializationTool.getAdapter(key.getAdapterId());
if ((adapter != null) && (adapter instanceof RasterDataAdapter)) {
final Iterator<GridCoverage> coverages = helper.getCoveragesForIndex(value);
if (coverages == null) {
LOGGER.error("Couldn't get coverages instance, getCoveragesForIndex returned null");
throw new IOException(
"Couldn't get coverages instance, getCoveragesForIndex returned null");
}
while (coverages.hasNext()) {
final GridCoverage c = coverages.next();
// it should be a FitToIndexGridCoverage because it was just
// converted above
if (c instanceof FitToIndexGridCoverage) {
final GeoWaveInputKey inputKey = new GeoWaveInputKey(
helper.getNewCoverageId(),
((FitToIndexGridCoverage) c).getInsertionId());
inputKey.setInsertionId(((FitToIndexGridCoverage) c).getInsertionId());
context.write(
inputKey,
c);
}
}
}
}
}
@Override
protected void setup(
final Mapper<GeoWaveInputKey, GridCoverage, GeoWaveInputKey, ObjectWritable>.Context context )
throws IOException,
InterruptedException {
super.setup(context);
helper = new RasterTileResizeHelper(
context);
}
}