geo-utility/src/main/java/org/gcube/spatial/data/geoutility/GeoGetStyles.java

225 lines
7.1 KiB
Java

/**
*
*/
package org.gcube.spatial.data.geoutility;
import java.util.HashMap;
import java.util.List;
import org.apache.log4j.Logger;
import org.gcube.spatial.data.geoutility.bean.NcWmsLayerMetadata;
import org.gcube.spatial.data.geoutility.bean.WmsParameters;
import org.gcube.spatial.data.geoutility.wms.NcWmsGetMetadata;
import org.gcube.spatial.data.geoutility.wms.NcWmsGetMetadataRequest;
import org.gcube.spatial.data.geoutility.wms.WmsGetStyles;
import org.gcube.spatial.data.geoutility.wms.WmsUrlValidator;
/**
* The Class GeoGetStyles.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Jan 22, 2016
*
* return list of styles from a OGC compliant WMS/ncWMS map service like Geoserver, Thredds, Mapsever.
*/
public class GeoGetStyles {
public static Logger logger = Logger.getLogger(GeoGetStyles.class);
public static final String COLORSCALERANGE = "COLORSCALERANGE";
public static final String COLORSCALERANGE_DEFAULT_VALUE = "auto";
boolean isNcWms = false;
private String wmsRequest;
private HashMap<String, String> mapWmsNotStandard;
private WmsUrlValidator validator;
/**
* Instantiates a new geo get styles.
*
* @param wmsRequest the wms request
* @throws Exception
*/
public GeoGetStyles(String wmsRequest) throws Exception{
this.wmsRequest = wmsRequest;
this.validator = new WmsUrlValidator(wmsRequest);
validator.parseWmsRequest(true, false);
}
/**
* Gets the styles.
*
* @return the styles
*/
public List<String> getStyles(){
String uriWMSService = validator.getBaseWmsServiceUrl();
String layerName = validator.getValueOfParsedWMSParameter(WmsParameters.LAYERS);
String versionWms = validator.getValueOfParsedWMSParameter(WmsParameters.VERSION);
String crs = validator.getValueOfParsedWMSParameter(WmsParameters.CRS);
System.out.println(validator.getParameterValues().toString());
try {
if(validator.getMapWmsNotStandardParams()!=null){
mapWmsNotStandard = new HashMap<String, String>(validator.getMapWmsNotStandardParams().size());
mapWmsNotStandard.putAll(validator.getMapWmsNotStandardParams());
if(mapWmsNotStandard.containsKey(NcWmsGetMetadataRequest.COLORSCALERANGE) || mapWmsNotStandard.containsKey(NcWmsGetMetadataRequest.COLORSCALERANGE.toLowerCase())){
logger.debug("Ovveriding "+NcWmsGetMetadataRequest.COLORSCALERANGE +"?");
String value = mapWmsNotStandard.get(NcWmsGetMetadataRequest.COLORSCALERANGE);
if(value.compareToIgnoreCase(NcWmsGetMetadataRequest.COLORSCALERANGE_DEFAULT_VALUE)==0){ //COLORSCALERANGE == 'auto'?
logger.trace(NcWmsGetMetadataRequest.COLORSCALERANGE +" found like 'auto'..");
String[] minmax = NcWmsGetMetadataRequest.getColorScaleRange(uriWMSService,
versionWms,
validator.getValueOfParsedWMSParameter(WmsParameters.BBOX),
layerName,
crs,
validator.getValueOfParsedWMSParameter(WmsParameters.WIDTH),
validator.getValueOfParsedWMSParameter(WmsParameters.HEIGHT));
if(minmax!=null && minmax.length==2 && minmax[0]!=null && minmax[1]!=null){
String valueMinMax = minmax[0]+","+minmax[1];
mapWmsNotStandard.put(NcWmsGetMetadataRequest.COLORSCALERANGE, valueMinMax);
logger.debug("Overrided "+NcWmsGetMetadataRequest.COLORSCALERANGE +" min,max value: "+valueMinMax);
}
}else{
logger.debug(NcWmsGetMetadataRequest.COLORSCALERANGE +" is not \'auto', skipping override");
}
}else{ //NcWmsGetColorScaleRange.COLORSCALERANGE not found
logger.debug(NcWmsGetMetadataRequest.COLORSCALERANGE +" not found");
String[] minmax = NcWmsGetMetadataRequest.getColorScaleRange(uriWMSService,
versionWms,
validator.getValueOfParsedWMSParameter(WmsParameters.BBOX),
layerName,
crs,
validator.getValueOfParsedWMSParameter(WmsParameters.WIDTH),
validator.getValueOfParsedWMSParameter(WmsParameters.HEIGHT));
if(minmax!=null && minmax.length==2 && minmax[0]!=null && minmax[1]!=null){
logger.debug(NcWmsGetMetadataRequest.GET_METADATA +" works, adding "+NcWmsGetMetadataRequest.COLORSCALERANGE + " with minmax");
String valueMinMax = minmax[0]+","+minmax[1];
mapWmsNotStandard.put(NcWmsGetMetadataRequest.COLORSCALERANGE, valueMinMax);
logger.debug("Added "+NcWmsGetMetadataRequest.COLORSCALERANGE +" min,max value: "+valueMinMax);
}else{
logger.debug(NcWmsGetMetadataRequest.GET_METADATA +" failed, skip "+NcWmsGetMetadataRequest.COLORSCALERANGE +" management, is not raster?");
}
}
}
}catch (Exception e) {
logger.error("Exception during ncWMS get style: "+e);
}
logger.trace("versionWms found: "+versionWms);
logger.trace("crs found: "+crs);
String stylesRead = validator.getValueOfParsedWMSParameter(WmsParameters.STYLES);
logger.trace("styles found: "+stylesRead);
List<String> styles;
//VALIDATION STYLES
if(stylesRead==null || stylesRead.isEmpty()){
logger.trace("styles is empty - validator styles "+stylesRead);
WmsGetStyles wmsGetStyles = new WmsGetStyles();
styles = wmsGetStyles.getStylesFromWms(uriWMSService, layerName);
if(wmsGetStyles.getResponseCode()==200){
logger.debug("wms GetStyles found: "+styles);
}else{
logger.debug("Tentative to get styles from NcWmsGetMetadata...");
isNcWms = true;
try{
NcWmsLayerMetadata ncMetadata = NcWmsGetMetadata.getMetadata(uriWMSService, layerName);
if(ncMetadata!=null && ncMetadata.getResponseCode()==200){
if(ncMetadata.getSupportedStyles().size()>0){
styles.add(ncMetadata.getSupportedStyles().get(0)+"/"+ncMetadata.getDefaultPalette()); //DEFAULT STYLE
logger.debug("added ncWms default style: "+ncMetadata.getSupportedStyles().get(0)+"/"+ncMetadata.getDefaultPalette());
for (String s : ncMetadata.getSupportedStyles()) {
for (String p : ncMetadata.getPalettes()) {
String as = s+"/"+p;
if(!styles.contains(as)){
styles.add(as);
logger.trace("added ncWms style: "+as);
}
}
}
}
}
}catch(Exception e){
logger.error(e);
styles = validator.getStylesAsList();
}
}
}else{
styles = validator.getStylesAsList();
}
return styles;
}
/**
* Checks if is nc wms.
*
* @return the isNcWms
*/
public boolean isNcWms() {
return isNcWms;
}
/**
* Gets the wms request.
*
* @return the wmsRequest
*/
public String getWmsRequest() {
return wmsRequest;
}
/**
* Gets the map wms not standard.
*
* @return the mapWmsNotStandard
*/
public HashMap<String, String> getMapWmsNotStandard() {
return mapWmsNotStandard;
}
/**
* Gets the validator.
*
* @return the validator
*/
public WmsUrlValidator getValidator() {
return validator;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("GetStylesUtils [isNcWms=");
builder.append(isNcWms);
builder.append(", wmsRequest=");
builder.append(wmsRequest);
builder.append(", mapWmsNotStandard=");
builder.append(mapWmsNotStandard);
builder.append(", validator=");
builder.append(validator);
builder.append("]");
return builder.toString();
}
}