package org.wikipedia.createaccount; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.google.gson.annotations.SerializedName; import java.util.List; import java.util.Map; class CreateAccountInfo { @SuppressWarnings("unused,NullableProblems") @NonNull private Tokens tokens; @SuppressWarnings("unused,NullableProblems") @SerializedName("authmanagerinfo") @NonNull private AMInfo amInfo; @NonNull String token() { return tokens.token(); } @Nullable String captchaId() { String captchaId = null; for (CreateAccountInfo.Request request : amInfo.requests()) { if ("CaptchaAuthenticationRequest".equals(request.id())) { captchaId = request.fields().get("captchaId").value(); } } return captchaId; } static class Tokens { @SuppressWarnings("unused,NullableProblems") @SerializedName("createaccounttoken") @NonNull private String token; @NonNull String token() { return token; } } static class AMInfo { @SuppressWarnings("unused,NullableProblems") @NonNull private List<Request> requests; @NonNull List<Request> requests() { return requests; } } static class Request { @SuppressWarnings("unused,NullableProblems") @NonNull private String id; @SuppressWarnings("unused,NullableProblems") @NonNull private Map<String, String> metadata; @SuppressWarnings("unused,NullableProblems") @NonNull private String required; @SuppressWarnings("unused,NullableProblems") @NonNull private String provider; @SuppressWarnings("unused,NullableProblems") @NonNull private String account; @SuppressWarnings("unused,NullableProblems") @NonNull private Map<String, Field> fields; @NonNull String id() { return id; } @NonNull Map<String, Field> fields() { return fields; } } static class Field { @SuppressWarnings("unused") @Nullable private String type; @SuppressWarnings("unused") @Nullable private String value; @SuppressWarnings("unused") @Nullable private String label; @SuppressWarnings("unused") @Nullable private String help; @SuppressWarnings("unused") private boolean optional; @SuppressWarnings("unused") private boolean sensitive; @Nullable String value() { return value; } } }