package mil.nga.giat.geowave.cli.geoserver; import java.io.File; import java.io.FileInputStream; 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 = "addstyle", parentOperation = GeoServerSection.class) @Parameters(commandDescription = "Add a GeoServer style") public class GeoServerAddStyleCommand extends DefaultOperation implements Command { private GeoServerRestClient geoserverClient = null; @Parameter(names = { "-sld", "--stylesld" }, required = true, description = "<style sld file>") private String stylesld = null; @Parameter(description = "<GeoWave style name>") private List<String> parameters = new ArrayList<String>(); private String gwStyle = 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: <style name>"); } gwStyle = parameters.get(0); if (gwStyle == null) { throw new ParameterException( "Requires argument: <style xml file>"); } File styleXmlFile = new File( stylesld); try (final FileInputStream inStream = new FileInputStream( styleXmlFile)) { Response addStyleResponse = geoserverClient.addStyle( gwStyle, inStream); if (addStyleResponse.getStatus() == Status.OK.getStatusCode() || addStyleResponse.getStatus() == Status.CREATED.getStatusCode()) { System.out.println("Add style for '" + gwStyle + "' on GeoServer: OK"); } else { System.err.println("Error adding style for '" + gwStyle + "' on GeoServer; code = " + addStyleResponse.getStatus()); } } } }