package mil.nga.giat.geowave.cli.geoserver; import java.util.ArrayList; import java.util.List; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import mil.nga.giat.geowave.core.cli.annotations.GeowaveOperation; import mil.nga.giat.geowave.core.cli.api.Command; import mil.nga.giat.geowave.core.cli.api.DefaultOperation; import mil.nga.giat.geowave.core.cli.api.OperationParams; import com.beust.jcommander.Parameter; import com.beust.jcommander.ParameterException; import com.beust.jcommander.Parameters; @GeowaveOperation(name = "addcs", parentOperation = GeoServerSection.class) @Parameters(commandDescription = "Add a GeoServer coverage store") public class GeoServerAddCoverageStoreCommand extends DefaultOperation implements Command { private GeoServerRestClient geoserverClient = null; @Parameter(names = { "-ws", "--workspace" }, required = false, description = "<workspace name>") private String workspace = null; @Parameter(names = { "-cs", "--coverageStore" }, required = false, description = "<coverage store name>") private String coverageStore = null; @Parameter(names = { "-histo", "--equalizeHistogramOverride" }, required = false, description = "This parameter will override the behavior to always perform histogram equalization if a histogram exists. Valid values are true and false.", arity = 1) private Boolean equalizeHistogramOverride = null; @Parameter(names = { "-interp", "--interpolationOverride" }, required = false, description = "This will override the default interpolation stored for each layer. Valid values are 0, 1, 2, 3 for NearestNeighbor, Bilinear, Bicubic, and Bicubic (polynomial variant) resepctively. ") private String interpolationOverride = null; @Parameter(names = { "-scale", "--scaleTo8Bit" }, required = false, description = "By default, integer values will automatically be scaled to 8-bit and floating point values will not. This can be overridden setting this value to true or false.", arity = 1) private Boolean scaleTo8Bit = null; @Parameter(description = "<GeoWave store name>") private List<String> parameters = new ArrayList<String>(); private String gwStore = null; @Override public boolean prepare( OperationParams params ) { super.prepare(params); if (geoserverClient == null) { // Create the rest client geoserverClient = new GeoServerRestClient( new GeoServerConfig( getGeoWaveConfigFile(params))); } // Successfully prepared return true; } @Override public void execute( OperationParams params ) throws Exception { if (parameters.size() != 1) { throw new ParameterException( "Requires argument: <GeoWave store name>"); } gwStore = parameters.get(0); if (workspace == null || workspace.isEmpty()) { workspace = geoserverClient.getConfig().getWorkspace(); } Response addStoreResponse = geoserverClient.addCoverageStore( workspace, coverageStore, gwStore, equalizeHistogramOverride, interpolationOverride, scaleTo8Bit); if (addStoreResponse.getStatus() == Status.OK.getStatusCode() || addStoreResponse.getStatus() == Status.CREATED.getStatusCode()) { System.out.println("Add coverage store for '" + gwStore + "' to workspace '" + workspace + "' on GeoServer: OK"); } else { System.err.println("Error adding coverage store for '" + gwStore + "' to workspace '" + workspace + "' on GeoServer; code = " + addStoreResponse.getStatus()); } } }