package mil.nga.giat.geowave.format.landsat8;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.converters.IntegerConverter;
import mil.nga.giat.geowave.adapter.raster.adapter.RasterDataAdapter;
public class Landsat8RasterIngestCommandLineOptions
{
@Parameter(names = "--histogram", description = "An option to store the histogram of the values of the coverage so that histogram equalization will be performed")
private boolean createHistogram = false;
@Parameter(names = "--pyramid", description = "An option to store an image pyramid for the coverage")
private boolean createPyramid = false;
@Parameter(names = "--retainimages", description = "An option to keep the images that are ingested in the local workspace directory. By default it will delete the local file after it is ingested successfully.")
private boolean retainImages = false;
@Parameter(names = "--tilesize", description = "The option to set the pixel size for each tile stored in GeoWave. The default is "
+ RasterDataAdapter.DEFAULT_TILE_SIZE)
private int tileSize = 512;
@Parameter(names = "--coverage", description = "The name to give to each unique coverage. Freemarker templating can be used for variable substition based on the same attributes used for filtering. The default coverage name is '${"
+ SceneFeatureIterator.ENTITY_ID_ATTRIBUTE_NAME
+ "}_${"
+ BandFeatureIterator.BAND_ATTRIBUTE_NAME
+ "}'. If ${band} is unused in the coverage name, all bands will be merged together into the same coverage.")
private String coverageName = "${" + SceneFeatureIterator.ENTITY_ID_ATTRIBUTE_NAME + "}_${"
+ BandFeatureIterator.BAND_ATTRIBUTE_NAME + "}";
@Parameter(names = "--converter", description = "Prior to ingesting an image, this converter will be used to massage the data. The default is not to convert the data.")
private String coverageConverter;
@Parameter(names = "--subsample", description = "Subsample the image prior to ingest by the scale factor provided. The scale factor should be an integer value greater than 1.", converter = IntegerConverter.class)
private int scale = 1;
@Parameter(names = "--crop", description = "Use the spatial constraint provided in CQL to crop the image. If no spatial constraint is provided, this will not have an effect.")
private boolean cropToSpatialConstraint;
@Parameter(names = "--skipMerge", description = "By default the ingest will automerge overlapping tiles as a post-processing optimization step for efficient retrieval, but this will skip the merge process")
private boolean skipMerge;
public Landsat8RasterIngestCommandLineOptions() {}
public boolean isCreateHistogram() {
return createHistogram;
}
public boolean isCreatePyramid() {
return createPyramid;
}
public boolean isRetainImages() {
return retainImages;
}
public String getCoverageName() {
return coverageName;
}
public String getCoverageConverter() {
return coverageConverter;
}
public boolean isCoveragePerBand() {
// technically the coverage will be per band if it contains any of the
// band attribute names, but realistically the band name should be the
// only one used
return coverageName.contains("${" + BandFeatureIterator.BAND_ATTRIBUTE_NAME + "}")
|| coverageName.contains("${" + BandFeatureIterator.BAND_DOWNLOAD_ATTRIBUTE_NAME + "}")
|| coverageName.contains("${" + BandFeatureIterator.SIZE_ATTRIBUTE_NAME + "}");
}
public int getTileSize() {
return tileSize;
}
public boolean isSubsample() {
return (scale > 1);
}
public int getScale() {
return scale;
}
public boolean isCropToSpatialConstraint() {
return cropToSpatialConstraint;
}
public void setCreateHistogram(
final boolean createHistogram ) {
this.createHistogram = createHistogram;
}
public void setCreatePyramid(
final boolean createPyramid ) {
this.createPyramid = createPyramid;
}
public void setRetainImages(
final boolean retainImages ) {
this.retainImages = retainImages;
}
public void setTileSize(
final int tileSize ) {
this.tileSize = tileSize;
}
public void setCoverageName(
final String coverageName ) {
this.coverageName = coverageName;
}
public void setCoverageConverter(
final String coverageConverter ) {
this.coverageConverter = coverageConverter;
}
public void setScale(
final int scale ) {
this.scale = scale;
}
public void setCropToSpatialConstraint(
final boolean cropToSpatialConstraint ) {
this.cropToSpatialConstraint = cropToSpatialConstraint;
}
public boolean isSkipMerge() {
return skipMerge;
}
public void setSkipMerge(
boolean skipMerge ) {
this.skipMerge = skipMerge;
}
}