All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.greenback.kit.okhttp.OkHttpGreenbackClient Maven / Gradle / Ivy

package com.greenback.kit.okhttp;

import com.greenback.kit.client.GreenbackCodec;
import com.greenback.kit.client.impl.AbstractGreenbackClient;
import com.greenback.kit.model.*;
import com.greenback.kit.okhttp.impl.BaseOkHttpClient;
import com.greenback.kit.util.Bytes;
import java.io.IOException;
import static java.util.Optional.ofNullable;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;

public class OkHttpGreenbackClient extends AbstractGreenbackClient implements BaseOkHttpClient {
        
    protected final OkHttpClient httpClient;
    
    public OkHttpGreenbackClient(
            OkHttpClient httpClient,
            String baseUrl,
            GreenbackCodec codec,
            String accessToken) {
        
        super(baseUrl, codec, accessToken);
        this.httpClient = httpClient;
    }

    @Override
    public OkHttpClient getHttpClient() {
        return this.httpClient;
    }

    @Override
    public String getAccessToken() {
        return accessToken;
    }
    
    @Override
    protected User getUserByUrl(String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);
        
        return this.execute(requestBuilder, this.codec::readUser);
    }

    @Override
    protected Paginated getTeamMembersByUrl(String url) throws IOException {

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);

        return this.execute(requestBuilder, this.codec::readTeamMembers);
    }

    @Override
    protected Entitlements getEntitlementsByUrl(String url) throws IOException {

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);

        return this.execute(requestBuilder, this.codec::readEntitlements);
    }

    @Override
    protected Paginated getConnectsByUrl(String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);
        
        return this.execute(requestBuilder, this.codec::readConnects);
    }
    
    @Override
    protected Connect getConnectByUrl(String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);
        
        return this.execute(requestBuilder, this.codec::readConnect);
    }
    
    @Override
    protected ConnectIntent getConnectIntentByUrl(
            String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);
        
        return this.execute(requestBuilder, this.codec::readConnectIntent);
    }
    
    @Override
    protected ConnectIntent postConnectIntentRequestByUrl(
            String url,
            Object request) throws IOException {
        
        final byte[] body = this.codec.writeBytes(request);

        final RequestBody requestBody = this.jsonRequestBody(body);

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url)
            .post(requestBody);
        
        return this.execute(requestBuilder, this.codec::readConnectIntent);
    }
    
    @Override
    protected Paginated getAccountsByUrl(String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);
        
        return this.execute(requestBuilder, this.codec::readAccounts);
    }
    
    @Override
    protected Account getAccountByUrl(String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);
        
        return this.execute(requestBuilder, this.codec::readAccount);
    }
    
    @Override
    protected Account deleteAccountByUrl(String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url)
            .delete();
        
        return this.execute(requestBuilder, this.codec::readAccount);
    }
    
    @Override
    protected Account postAccountByUrl(
            String url,
            Object request) throws IOException {
        
        final byte[] body = this.codec.writeBytes(request);

        final RequestBody requestBody = this.jsonRequestBody(body);

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url)
            .post(requestBody);
        
        return this.execute(requestBuilder, this.codec::readAccount);
    }
    
    private RequestBody toRequestBody(Bytes bytes) {
        if (bytes.getFile() != null) {
            return RequestBody.create(MediaType.parse("application/octet-stream"), bytes.getFile());
        }
        else {
            return RequestBody.create(MediaType.parse("application/octet-stream"), bytes.getBytes());
        }
    }
    
    @Override
    protected Vision createVisionByUrl(
            String url,
            Bytes documentBytes) throws IOException {
        
        final String name = ofNullable(documentBytes.getName()).orElse("file");
        
        final MultipartBody multipartBody = new MultipartBody.Builder()
            .setType(MultipartBody.FORM)
            .addFormDataPart("file", name, toRequestBody(documentBytes))
            .build();

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url)
            .post(multipartBody);
        
        return this.execute(requestBuilder, this.codec::readVision);
    }
    
    @Override
    protected Vision getVisionByUrl(String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);
        
        return this.execute(requestBuilder, this.codec::readVision);
    }
    
    //
    // Messages
    //
    
    @Override
    protected Message createMessageByUrl(
            String url,
            Bytes documentBytes) throws IOException {
        
        final String name = ofNullable(documentBytes.getName()).orElse("file");
        
        final MultipartBody multipartBody = new MultipartBody.Builder()
            .setType(MultipartBody.FORM)
            .addFormDataPart("file", name, toRequestBody(documentBytes))
            .build();

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url)
            .post(multipartBody);
        
        return this.execute(requestBuilder, this.codec::readMessage);
    }
    
    @Override
    protected Paginated getMessagesByUrl(String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);
        
        return this.execute(requestBuilder, this.codec::readMessages);
    }
    
    @Override
    protected Message getMessageByUrl(String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);
        
        return this.execute(requestBuilder, this.codec::readMessage);
    }
    
    //
    // Transactions
    //
    
    @Override
    protected Paginated getTransactionsByUrl(String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);
        
        return this.execute(requestBuilder, this.codec::readTransactions);
    }
    
    @Override
    protected Transaction getTransactionByUrl(String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);
        
        return this.execute(requestBuilder, this.codec::readTransaction);
    }
    
    @Override
    protected Transaction postTransactionByUrl(
            String url,
            Object request) throws IOException {
        
        final byte[] body = this.codec.writeBytes(request);

        final RequestBody requestBody = this.jsonRequestBody(body);

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url)
            .post(requestBody);
        
        return this.execute(requestBuilder, this.codec::readTransaction);
    }
    
    @Override
    protected Transaction deleteTransactionByUrl(String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .delete()
            .url(url);
        
        return this.execute(requestBuilder, this.codec::readTransaction);
    }

    //
    // Exports
    //
    
    @Override
    protected TransactionExportIntent getTransactionExporterByUrl(String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);
        
        return this.execute(requestBuilder, this.codec::readTransactionExporter);
    }

    @Override
    protected TransactionExport postTransactionExportByUrl(
            String url,
            TransactionExportIntentRequest transactionExporterRequest) throws IOException {
        
        final byte[] body = this.codec.writeBytes(transactionExporterRequest);

        final RequestBody requestBody = this.jsonRequestBody(body);

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url)
            .post(requestBody);
        
        return this.execute(requestBuilder, this.codec::readTransactionExport);
    }

    @Override
    protected TransactionExport getTransactionExportByUrl(String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);
        
        return this.execute(requestBuilder, this.codec::readTransactionExport);
    }

    @Override
    protected TransactionExport deleteTransactionExportByUrl(String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url)
            .delete();
        
        return this.execute(requestBuilder, this.codec::readTransactionExport);
    }

    //
    // Transforms
    //
    
    @Override
    protected Transform postTransformByUrl(String url, Object request) throws IOException {
        final byte[] body = this.codec.writeBytes(request);

        final RequestBody requestBody = this.jsonRequestBody(body);

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url)
            .post(requestBody);

        return this.execute(requestBuilder, this.codec::readTransform);
    }

    @Override
    protected Paginated getTransformsByUrl(String url) throws IOException {

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);

        return this.execute(requestBuilder, this.codec::readTransforms);
    }
    
    @Override
    protected Transform getTransformByUrl(String url) throws IOException {
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);

        return this.execute(requestBuilder, this.codec::readTransform);
    }
    
    @Override
    protected Transform deleteTransformByUrl(String url) throws IOException {
        
        final Request.Builder requestBuilder = new Request.Builder()
            .url(url)
            .delete();
        
        return this.execute(requestBuilder, this.codec::readTransform);
    }
    
    //
    // Auto Exports
    //

    @Override
    protected Paginated getAutoExportsByUrl(String url) throws IOException {

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);

        return this.execute(requestBuilder, this.codec::readAutoExports);
    }

    @Override
    protected AutoExport getAutoExportByUrl(String url) throws IOException {

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);

        return this.execute(requestBuilder, this.codec::readAutoExport);
    }

    @Override
    protected AutoExport deleteAutoExportByUrl(String url) throws IOException {

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url)
            .delete();

        return this.execute(requestBuilder, this.codec::readAutoExport);
    }
    
    @Override
    protected AutoExport postAutoExportByUrl(
            String url,
            Object request) throws IOException {

        final byte[] body = this.codec.writeBytes(request);

        final RequestBody requestBody = this.jsonRequestBody(body);

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url)
            .post(requestBody);

        return this.execute(requestBuilder, this.codec::readAutoExport);
    }

    @Override
    protected Paginated getExportRunsByUrl(String url) throws IOException {

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);

        return this.execute(requestBuilder, this.codec::readExportRuns);
    }

    @Override
    protected ExportRun getExportRunByUrl(String url) throws IOException {

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url);

        return this.execute(requestBuilder, this.codec::readExportRun);
    }

    @Override
    protected ExportRun postExportRunByUrl(
        String url,
        Object request) throws IOException {

        final byte[] body = this.codec.writeBytes(request);

        final RequestBody requestBody = this.jsonRequestBody(body);

        final Request.Builder requestBuilder = new Request.Builder()
            .url(url)
            .post(requestBody);

        return this.execute(requestBuilder, this.codec::readExportRun);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy