Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve diagnostics when GetCapabilties fails #2384

Merged
merged 2 commits into from
Sep 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 33 additions & 15 deletions src/main/java/de/blau/android/resources/WmsCapabilities.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import de.blau.android.exception.UnsupportedFormatException;
import de.blau.android.osm.BoundingBox;
import de.blau.android.osm.Node;
import de.blau.android.util.GeoMath;
Expand Down Expand Up @@ -66,13 +67,21 @@ public class WmsCapabilities {
private static final String REQUEST = "Request";
private static final String GETMAP = "GetMap";
private static final String GET = "Get";
private static final String MAXY_ATTR = "maxy";
private static final String MAXX_ATTR = "maxx";
private static final String MINY_ATTR = "miny";
private static final String MINX_ATTR = "minx";
private static final String ONLINE_RESOURCE = "OnlineResource";
private static final String XLINK_HREF_ATTR = "xlink:href";

private static final String IMAGE_BMP = "image/bmp";
private static final String IMAGE_PNG = "image/png";
private static final String IMAGE_PNG8 = "image/png8";
public static final String IMAGE_JPEG = "image/jpeg";
private static final String IMAGE_JPEG_PNG = "image/vnd.jpeg-png";
private static final String IMAGE_JPEG_PNG8 = "image/vnd.jpeg-png8";
private static final String IMAGE_BMP = "image/bmp";
private static final String IMAGE_PNG = "image/png";
private static final String IMAGE_PNG8 = "image/png8";
public static final String IMAGE_JPEG = "image/jpeg";
private static final String IMAGE_JPEG_PNG = "image/vnd.jpeg-png";
private static final String IMAGE_JPEG_PNG8 = "image/vnd.jpeg-png8";

// order is most preferred to least
public static final List<String> FORMAT_PREFERENCE = Collections
.unmodifiableList(Arrays.asList(IMAGE_JPEG_PNG8, IMAGE_JPEG_PNG, IMAGE_PNG8, IMAGE_PNG, IMAGE_JPEG, IMAGE_BMP));

Expand Down Expand Up @@ -222,10 +231,10 @@ public void startElement(String uri, String localName, String name, Attributes a
if (TileLayerSource.EPSG_4326.equals(tempCrs)
|| (TileLayerSource.is3857compatible(tempCrs) && !TileLayerSource.EPSG_4326.equals(current.boxCrs))) {
try {
current.minx = new BigDecimal(attr.getValue("minx"));
current.miny = new BigDecimal(attr.getValue("miny"));
current.maxx = new BigDecimal(attr.getValue("maxx"));
current.maxy = new BigDecimal(attr.getValue("maxy"));
current.minx = new BigDecimal(attr.getValue(MINX_ATTR));
current.miny = new BigDecimal(attr.getValue(MINY_ATTR));
current.maxx = new BigDecimal(attr.getValue(MAXX_ATTR));
current.maxy = new BigDecimal(attr.getValue(MAXY_ATTR));
current.boxCrs = tempCrs;
} catch (NumberFormatException e) {
Log.e(DEBUG_TAG, "Error in bounding box " + e.getMessage());
Expand Down Expand Up @@ -307,8 +316,8 @@ public void startElement(String uri, String localName, String name, Attributes a
}
break;
case GET:
if ("OnlineResource".equals(name)) {
getMapUrl = attr.getValue("xlink:href");
if (ONLINE_RESOURCE.equals(name)) {
getMapUrl = attr.getValue(XLINK_HREF_ATTR);
}
break;
default:
Expand Down Expand Up @@ -360,8 +369,12 @@ public void endElement(String uri, String localName, String name) throws SAXExce
break;
case LAYER:
if (!current.group && current.name != null) {
Layer layer = constructLayer(layerStack);
layers.add(layer);
try {
Layer layer = constructLayer(layerStack);
layers.add(layer);
} catch (UnsupportedFormatException fex) {
Log.e(DEBUG_TAG, fex.getMessage());
}
}
layerStack.pop();
currentState = stateStack.pop();
Expand Down Expand Up @@ -481,10 +494,13 @@ public void endElement(String uri, String localName, String name) throws SAXExce
* @return a Layer object
*/
@NonNull
Layer constructLayer(@NonNull Deque<LayerTemp> stack) {
private Layer constructLayer(@NonNull Deque<LayerTemp> stack) {
Layer layer = new Layer();
layer.wmsVersion = wmsVersion;
layer.format = tileFormat;
if (layer.format == null) {
throw new UnsupportedFormatException("No supported image format");
}
StringBuilder resultTitle = new StringBuilder();
boolean first = true;
Iterator<LayerTemp> it = stack.descendingIterator();
Expand All @@ -504,6 +520,8 @@ Layer constructLayer(@NonNull Deque<LayerTemp> stack) {
}
if (t.crs != null) {
layer.proj = t.crs;
} else {
throw new UnsupportedFormatException("No supported projection");
}
if (t.boxCrs != null) {
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,10 @@ public AppCompatDialog onCreateDialog(Bundle savedInstanceState) {
}

private class EndpointAdapter extends CursorAdapter {
private static final String SERVICE_PARAM = "service";
private static final String REQUEST_PARAM = "request";
private static final String GET_CAPABILITIES_REQUEST = "GetCapabilities";

final SQLiteDatabase db;
final FragmentActivity activity;

Expand Down Expand Up @@ -178,16 +182,17 @@ protected void onPreExecute() {

@Override
protected WmsCapabilities doInBackground(Void params) throws IOException, ParserConfigurationException, SAXException {
String url = Util.appendQuery(sanitize(endpoint.getTileUrl()), "request=GetCapabilities&service=wms");
String url = Util.appendQuery(sanitize(endpoint.getTileUrl()),
REQUEST_PARAM + "=" + GET_CAPABILITIES_REQUEST + "&" + SERVICE_PARAM + "=wms");
try (InputStream is = Server.openConnection(activity, new URL(url))) {
return new WmsCapabilities(is);
}
}

@Override
protected void onBackgroundError(Exception e) {
Progress.dismissDialog(activity, Progress.PROGRESS_DOWNLOAD);
Snack.toastTopError(activity, activity.getString(R.string.toast_querying_wms_server_failed, e.getLocalizedMessage()));
Log.e(DEBUG_TAG, e.getMessage());
Snack.toastTopError(context, activity.getString(R.string.toast_querying_wms_server_failed, e.getMessage()));
}

@Override
Expand Down Expand Up @@ -236,7 +241,7 @@ private String sanitize(@NonNull String url) {
Uri.Builder uriBuilder = uri.buildUpon();
uriBuilder.clearQuery();
for (String n : uri.getQueryParameterNames()) {
if (!"".equals(n) && !"request".equalsIgnoreCase(n) && !"service".equalsIgnoreCase(n)) {
if (!"".equals(n) && !REQUEST_PARAM.equalsIgnoreCase(n) && !SERVICE_PARAM.equalsIgnoreCase(n)) {
uriBuilder.appendQueryParameter(n, uri.getQueryParameter(n));
}
}
Expand Down
Loading