org.apache.usergrid.java.client.response.UsergridResponse.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.usergrid.java.client.response.UsergridResponse.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.usergrid.java.client.response;

import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.JsonNode;
import okhttp3.Headers;
import org.apache.usergrid.java.client.UsergridClient;
import org.apache.usergrid.java.client.UsergridEnums;
import org.apache.usergrid.java.client.UsergridRequest;
import org.apache.usergrid.java.client.model.UsergridEntity;
import org.apache.usergrid.java.client.model.UsergridUser;
import org.apache.usergrid.java.client.query.UsergridQuery;
import org.apache.usergrid.java.client.utils.JsonUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.*;

import static org.apache.usergrid.java.client.utils.JsonUtils.toJsonString;

@SuppressWarnings("unused")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class UsergridResponse {

    @Nullable
    private UsergridClient client;
    @NotNull
    private Map<String, JsonNode> properties = new HashMap<>();

    private int statusCode = 0;
    @Nullable
    private JsonNode responseJson = null;
    @Nullable
    private String cursor;
    @Nullable
    private List<UsergridEntity> entities;
    @Nullable
    private Map<String, String> headers;
    @Nullable
    private UsergridQuery query;
    @Nullable
    private UsergridResponseError responseError = null;

    @Nullable
    private String accessToken;
    @Nullable
    private Long expires;

    public boolean ok() {
        return (statusCode > 0 && statusCode < 400);
    }

    public int count() {
        return (entities == null) ? 0 : entities.size();
    }

    public boolean hasNextPage() {
        return (cursor != null);
    }

    @NotNull
    @Override
    public String toString() {
        return toJsonString(this);
    }

    @Nullable
    public UsergridEntity first() {
        return (entities == null || entities.isEmpty()) ? null : entities.get(0);
    }

    @Nullable
    public UsergridEntity entity() {
        return first();
    }

    @Nullable
    public UsergridEntity last() {
        return (entities == null || entities.isEmpty()) ? null : entities.get(entities.size() - 1);
    }

    @Nullable
    public UsergridUser user() {
        UsergridEntity entity = this.first();
        if (entity != null && entity instanceof UsergridUser) {
            return (UsergridUser) entity;
        }
        return null;
    }

    @Nullable
    public List<UsergridUser> users() {
        ArrayList<UsergridUser> users = null;
        if (entities != null && !entities.isEmpty()) {
            for (UsergridEntity entity : entities) {
                if (entity instanceof UsergridUser) {
                    if (users == null) {
                        users = new ArrayList<>();
                    }
                    users.add((UsergridUser) entity);
                }
            }
        }
        return users;
    }

    public int getStatusCode() {
        return this.statusCode;
    }

    @Nullable
    @JsonIgnore
    public UsergridClient getClient() {
        return client;
    }

    @JsonIgnore
    public void setClient(@Nullable final UsergridClient client) {
        this.client = client;
    }

    @Nullable
    @JsonIgnore
    public JsonNode getResponseJson() {
        return responseJson;
    }

    private void setResponseJson(@Nullable final JsonNode responseJson) {
        this.responseJson = responseJson;
    }

    @Nullable
    @JsonIgnore
    public UsergridQuery getQuery() {
        return query;
    }

    private void setQuery(@Nullable final UsergridQuery query) {
        this.query = query;
    }

    @Nullable
    public UsergridResponseError getResponseError() {
        return responseError;
    }

    private void setResponseError(@Nullable final UsergridResponseError responseError) {
        this.responseError = responseError;
    }

    @Nullable
    public Map<String, String> getHeaders() {
        return headers;
    }

    private void setHeaders(@Nullable final Map<String, String> headers) {
        this.headers = headers;
    }

    @Nullable
    public List<UsergridEntity> getEntities() {
        return entities;
    }

    private void setEntities(@NotNull final List<UsergridEntity> entities) {
        this.entities = entities;
    }

    @Nullable
    @JsonProperty("cursor")
    public String getCursor() {
        return cursor;
    }

    @JsonProperty("cursor")
    private void setCursor(@NotNull final String cursor) {
        this.cursor = cursor;
    }

    @Nullable
    @JsonProperty("access_token")
    public String getAccessToken() {
        return this.accessToken;
    }

    @JsonProperty("access_token")
    private void setAccessToken(@NotNull final String accessToken) {
        this.accessToken = accessToken;
    }

    @Nullable
    @JsonProperty("expires_in")
    public Long getExpires() {
        return this.expires;
    }

    @JsonProperty("expires_in")
    private void setExpires(@NotNull final Long expires) {
        this.expires = expires;
    }

    @JsonProperty("user")
    private void setUser(@NotNull final UsergridUser user) {
        if (this.entities == null) {
            this.entities = new ArrayList<>();
        }
        this.entities.add(user);
    }

    @NotNull
    @JsonAnyGetter
    public Map<String, JsonNode> getProperties() {
        return properties;
    }

    @JsonAnySetter
    private void setProperty(@NotNull final String key, @NotNull final JsonNode value) {
        properties.put(key, value);
    }

    @NotNull
    public UsergridResponse loadNextPage() {
        UsergridClient client = this.client;
        UsergridEntity entity = this.first();
        if (this.hasNextPage() && client != null && entity != null) {
            Map<String, Object> paramsMap = new HashMap<>();
            paramsMap.put("cursor", getCursor());
            UsergridRequest request = new UsergridRequest(UsergridEnums.UsergridHttpMethod.GET,
                    UsergridRequest.APPLICATION_JSON_MEDIA_TYPE, client.clientAppUrl(), paramsMap, null, null,
                    this.getQuery(), client.authForRequests(), entity.getType());
            return client.sendRequest(request);
        } else {
            return UsergridResponse.fromError(client, "Error Loading Next Page.", "Unable to load next page.");
        }
    }

    @NotNull
    public static UsergridResponse fromError(@Nullable final UsergridClient client, @NotNull final String errorName,
            @NotNull final String errorDescription) {
        UsergridResponse response = new UsergridResponse();
        response.client = client;
        response.responseError = new UsergridResponseError(errorName, errorDescription);
        return response;
    }

    @NotNull
    public static UsergridResponse fromException(@Nullable final UsergridClient client,
            @NotNull final Exception ex) {
        final UsergridResponse response = new UsergridResponse();
        response.client = client;
        final UsergridResponseError responseError = new UsergridResponseError();
        responseError.setErrorDescription(ex.getMessage());
        if (ex.getClass() != null) {
            responseError.setErrorName(ex.getClass().toString());
        }
        if (ex.getCause() != null) {
            responseError.setErrorException(ex.getCause().toString());
        }
        response.responseError = responseError;
        return response;
    }

    @NotNull
    public static UsergridResponse fromResponse(@NotNull final UsergridClient client,
            @NotNull final UsergridRequest request, @NotNull final okhttp3.Response requestResponse) {
        UsergridResponse response;
        JsonNode responseJson;
        try {
            String responseJsonString = requestResponse.body().string();
            responseJson = JsonUtils.mapper.readTree(responseJsonString);
        } catch (Exception e) {
            return UsergridResponse.fromException(client, e);
        }
        if (responseJson.has("error")) {
            response = new UsergridResponse();
            response.responseError = JsonUtils.fromJsonNode(responseJson, UsergridResponseError.class);
        } else {
            response = JsonUtils.fromJsonNode(responseJson, UsergridResponse.class);
        }
        response.client = client;
        response.responseJson = responseJson;
        response.statusCode = requestResponse.code();

        Headers responseHeaders = requestResponse.headers();
        HashMap<String, String> headers = new HashMap<>();
        for (int i = 0; i < responseHeaders.size(); i++) {
            headers.put(responseHeaders.name(i), responseHeaders.value(i));
        }

        response.headers = headers;
        response.query = request.getQuery();
        return response;
    }
}