aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/JWalk.java
diff options
context:
space:
mode:
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/JWalk.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/JWalk.java56
1 files changed, 56 insertions, 0 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/JWalk.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/JWalk.java
new file mode 100644
index 000000000..6f9c4cfa5
--- /dev/null
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/JWalk.java
@@ -0,0 +1,56 @@
+package org.sufficientlysecure.keychain.util;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * Minimal hierarchy selector
+ */
+public class JWalk {
+
+ public static int getInt(JSONObject json, String... path) throws JSONException {
+ json = walk(json, path);
+ return json.getInt(path[path.length - 1]);
+ }
+
+ public static long getLong(JSONObject json, String... path) throws JSONException {
+ json = walk(json, path);
+ return json.getLong(path[path.length - 1]);
+ }
+
+ public static String getString(JSONObject json, String... path) throws JSONException {
+ json = walk(json, path);
+ return json.getString(path[path.length - 1]);
+ }
+
+ public static JSONArray getArray(JSONObject json, String... path) throws JSONException {
+ json = walk(json, path);
+ return json.getJSONArray(path[path.length - 1]);
+ }
+
+ public static JSONObject optObject(JSONObject json, String... path) throws JSONException {
+ json = walk(json, path);
+ return json.optJSONObject(path[path.length - 1]);
+ }
+
+ private static JSONObject walk(JSONObject json, String... path) throws JSONException {
+ int len = path.length - 1;
+ int pathIndex = 0;
+ try {
+ while (pathIndex < len) {
+ json = json.getJSONObject(path[pathIndex]);
+ pathIndex++;
+ }
+ } catch (JSONException e) {
+ // try to give ’em a nice-looking error
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < len; i++) {
+ sb.append(path[i]).append('.');
+ }
+ sb.append(path[len]);
+ throw new JSONException("JWalk error at step " + pathIndex + " of " + sb);
+ }
+ return json;
+ }
+}