Dbrant has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/403190 )

Change subject: Extend HttpStatusException to contain ServiceError information.
......................................................................

Extend HttpStatusException to contain ServiceError information.

This is a groundwork patch broken off from the big Syncing patch, to make
the changes more digestible.

The ServiceError structure gets transmitted along with HTTP 40x errors,
but we just weren't using it properly yet. This patch captures this
information, since we'll need it to differentiate between various service
errors when synchronizing.

Change-Id: Iee4d34d3bdd83ca6794ee6c79784b6dedbc2a8fa
---
M app/src/main/java/org/wikipedia/dataclient/ServiceError.java
M app/src/main/java/org/wikipedia/dataclient/mwapi/MwServiceError.java
M app/src/main/java/org/wikipedia/dataclient/okhttp/HttpStatusException.java
M app/src/main/java/org/wikipedia/dataclient/restbase/RbServiceError.java
4 files changed, 36 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/90/403190/1

diff --git a/app/src/main/java/org/wikipedia/dataclient/ServiceError.java 
b/app/src/main/java/org/wikipedia/dataclient/ServiceError.java
index f703338..55dfff5 100644
--- a/app/src/main/java/org/wikipedia/dataclient/ServiceError.java
+++ b/app/src/main/java/org/wikipedia/dataclient/ServiceError.java
@@ -1,10 +1,12 @@
 package org.wikipedia.dataclient;
 
+import android.support.annotation.NonNull;
+
 /**
  * The API reported an error in the payload.
  */
 public interface ServiceError {
-    String getTitle();
+    @NonNull String getTitle();
 
-    String getDetails();
+    @NonNull String getDetails();
 }
diff --git 
a/app/src/main/java/org/wikipedia/dataclient/mwapi/MwServiceError.java 
b/app/src/main/java/org/wikipedia/dataclient/mwapi/MwServiceError.java
index 24ce4a0..b251fb8 100644
--- a/app/src/main/java/org/wikipedia/dataclient/mwapi/MwServiceError.java
+++ b/app/src/main/java/org/wikipedia/dataclient/mwapi/MwServiceError.java
@@ -19,12 +19,12 @@
     @SuppressWarnings("unused") @Nullable private String docref;
     @SuppressWarnings("unused") @NonNull private List<Message> messages = 
Collections.emptyList();
 
-    @Override @Nullable public String getTitle() {
-        return code;
+    @Override @NonNull public String getTitle() {
+        return StringUtils.defaultString(code);
     }
 
-    @Override @Nullable public String getDetails() {
-        return info;
+    @Override @NonNull public String getDetails() {
+        return StringUtils.defaultString(info);
     }
 
     @Nullable public String getDocRef() {
diff --git 
a/app/src/main/java/org/wikipedia/dataclient/okhttp/HttpStatusException.java 
b/app/src/main/java/org/wikipedia/dataclient/okhttp/HttpStatusException.java
index fbc3672..92c3f7a 100644
--- a/app/src/main/java/org/wikipedia/dataclient/okhttp/HttpStatusException.java
+++ b/app/src/main/java/org/wikipedia/dataclient/okhttp/HttpStatusException.java
@@ -1,6 +1,11 @@
 package org.wikipedia.dataclient.okhttp;
 
 import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import org.wikipedia.dataclient.ServiceError;
+import org.wikipedia.dataclient.restbase.RbServiceError;
+import org.wikipedia.util.log.L;
 
 import java.io.IOException;
 
@@ -9,18 +14,35 @@
 public class HttpStatusException extends IOException {
     private final int code;
     private final String url;
+    @Nullable private ServiceError serviceError;
 
     public HttpStatusException(@NonNull Response rsp) {
         this.code = rsp.code();
         this.url = rsp.request().url().uri().toString();
+        try {
+            if (rsp.body() != null && rsp.body().contentType() != null
+                    && rsp.body().contentType().toString().contains("json")) {
+                serviceError = RbServiceError.create(rsp.body().string());
+            }
+        } catch (Exception e) {
+            L.e(e);
+        }
     }
 
     public int code() {
         return code;
     }
 
+    public ServiceError serviceError() {
+        return serviceError;
+    }
+
     @Override
     public String getMessage() {
-        return "Code: " + Integer.toString(code) + ", URL: " + url;
+        String str = "Code: " + Integer.toString(code) + ", URL: " + url;
+        if (serviceError != null) {
+            str += ", title: " + serviceError.getTitle() + ", detail: " + 
serviceError.getDetails();
+        }
+        return str;
     }
 }
diff --git 
a/app/src/main/java/org/wikipedia/dataclient/restbase/RbServiceError.java 
b/app/src/main/java/org/wikipedia/dataclient/restbase/RbServiceError.java
index 8b957aa..31f8d20 100644
--- a/app/src/main/java/org/wikipedia/dataclient/restbase/RbServiceError.java
+++ b/app/src/main/java/org/wikipedia/dataclient/restbase/RbServiceError.java
@@ -2,6 +2,7 @@
 
 import android.support.annotation.NonNull;
 
+import org.apache.commons.lang3.StringUtils;
 import org.wikipedia.dataclient.ServiceError;
 import org.wikipedia.json.GsonUnmarshaller;
 import org.wikipedia.model.BaseModel;
@@ -21,12 +22,14 @@
     }
 
     @Override
+    @NonNull
     public String getTitle() {
-        return title;
+        return StringUtils.defaultString(title);
     }
 
     @Override
+    @NonNull
     public String getDetails() {
-        return detail;
+        return StringUtils.defaultString(detail);
     }
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/403190
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iee4d34d3bdd83ca6794ee6c79784b6dedbc2a8fa
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <dbr...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to