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

com.cybozu.kintone.client.module.bulkrequest.BulkRequest Maven / Gradle / Ivy

/**
 * MIT License
 *
 * Copyright (c) 2018 Cybozu
 * https://github.com/kintone/kintone-java-sdk/blob/master/LICENSE
 */

package com.cybozu.kintone.client.module.bulkrequest;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;

import com.cybozu.kintone.client.connection.Connection;
import com.cybozu.kintone.client.connection.ConnectionConstants;
import com.cybozu.kintone.client.exception.KintoneAPIException;
import com.cybozu.kintone.client.model.bulkrequest.BulkRequestConstants;
import com.cybozu.kintone.client.model.bulkrequest.BulkRequestItem;
import com.cybozu.kintone.client.model.bulkrequest.BulkRequestModel;
import com.cybozu.kintone.client.model.bulkrequest.BulkRequestResponse;
import com.cybozu.kintone.client.model.record.AddRecordRequest;
import com.cybozu.kintone.client.model.record.AddRecordResponse;
import com.cybozu.kintone.client.model.record.AddRecordsRequest;
import com.cybozu.kintone.client.model.record.AddRecordsResponse;
import com.cybozu.kintone.client.model.record.DeleteRecordsRequest;
import com.cybozu.kintone.client.model.record.RecordUpdateItem;
import com.cybozu.kintone.client.model.record.RecordUpdateKey;
import com.cybozu.kintone.client.model.record.RecordUpdateStatusItem;
import com.cybozu.kintone.client.model.record.UpdateRecordAssigneesRequest;
import com.cybozu.kintone.client.model.record.UpdateRecordRequest;
import com.cybozu.kintone.client.model.record.UpdateRecordResponse;
import com.cybozu.kintone.client.model.record.UpdateRecordStatusRequest;
import com.cybozu.kintone.client.model.record.UpdateRecordsRequest;
import com.cybozu.kintone.client.model.record.UpdateRecordsResponse;
import com.cybozu.kintone.client.model.record.UpdateRecordsStatusRequest;
import com.cybozu.kintone.client.model.record.field.FieldValue;
import com.cybozu.kintone.client.module.parser.BulkRequestParser;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

public class BulkRequest {
    private static final BulkRequestParser parser = new BulkRequestParser();
    private Connection connection;
    private BulkRequestModel bulkRequests;

    /**
     * Constructor function of BulkRequest.
     * @param connection connection of the BulkRequest
     */
    public BulkRequest(Connection connection) {
        this.connection = connection;
        this.bulkRequests = new BulkRequestModel();
    }

    /**
     * Add the record.
     *
     * @param app app of the addRecord
     * @param record record of the addRecord
     * @return this
     */
    public BulkRequest addRecord(Integer app, HashMap record) {
        AddRecordRequest addRecordRequest = new AddRecordRequest(app, record);
        BulkRequestItem bulkRequestItem = new BulkRequestItem(ConnectionConstants.POST_REQUEST, connection.getPathURI(ConnectionConstants.RECORD), addRecordRequest);
        this.bulkRequests.addRequest(bulkRequestItem);
        return this;
    }

    /**
     * Add multi records.
     *
     * @param app app of the addRecords
     * @param records records of the addRecords
     * @return this
     */
    public BulkRequest addRecords(Integer app, ArrayList> records) {

        ArrayList> tempRecords = new ArrayList>();
        for (HashMap record : records) {
            if (record == null) {
                tempRecords.add(new HashMap());
            } else {
                tempRecords.add(record);
            }
        }

        AddRecordsRequest addRecordsRequest = new AddRecordsRequest(app, tempRecords);
        BulkRequestItem bulkRequestItem = new BulkRequestItem(ConnectionConstants.POST_REQUEST, connection.getPathURI(ConnectionConstants.RECORDS), addRecordsRequest);
        this.bulkRequests.addRequest(bulkRequestItem);
        return this;
    }

    /**
     * Update the specific record by ID.
     *
     * @param app app of the updateRecordByID
     * @param id id of the updateRecordByID
     * @param record record of the updateRecordByID
     * @param revision revision of the updateRecordByID
     * @return this
     */
    public BulkRequest updateRecordByID(Integer app, Integer id, HashMap record, Integer revision) {
        UpdateRecordRequest updateRecordRequest = new UpdateRecordRequest(app, id, null, revision, record);
        BulkRequestItem bulkRequestItem = new BulkRequestItem(ConnectionConstants.PUT_REQUEST, connection.getPathURI(ConnectionConstants.RECORD), updateRecordRequest);
        this.bulkRequests.addRequest(bulkRequestItem);
        return this;
    }

    /**
     * Update the specific record by updateKey.
     *
     * @param app app of the updateRecordByUpdateKey
     * @param updateKey updateKey of the updateRecordByUpdateKey
     * @param record record of the updateRecordByUpdateKey
     * @param revision revision of the updateRecordByUpdateKey
     * @return this 
     */
    public BulkRequest updateRecordByUpdateKey(Integer app, RecordUpdateKey updateKey, HashMap record, Integer revision) {
        UpdateRecordRequest updateRecordRequest = new UpdateRecordRequest(app, null, updateKey, revision, record);
        BulkRequestItem bulkRequestItem = new BulkRequestItem(ConnectionConstants.PUT_REQUEST, connection.getPathURI(ConnectionConstants.RECORD), updateRecordRequest);
        this.bulkRequests.addRequest(bulkRequestItem);
        return this;
    }

    /**
     * Update multi records.
     *
     * @param app app of the updateRecords
     * @param records records of the updateRecords
     * @return this
     */
    public BulkRequest updateRecords(Integer app, ArrayList records) {
        UpdateRecordsRequest updateRecordsRequest = new UpdateRecordsRequest(app, records);
        BulkRequestItem bulkRequestItem = new BulkRequestItem(ConnectionConstants.PUT_REQUEST, connection.getPathURI(ConnectionConstants.RECORDS), updateRecordsRequest);
        this.bulkRequests.addRequest(bulkRequestItem);
        return this;
    }

    /**
     * Delete multi records.
     *
     * @param app app of the deleteRecords
     * @param ids ids of the deleteRecords
     * @return this
     */
    public BulkRequest deleteRecords(Integer app, ArrayList ids) {
        DeleteRecordsRequest deleteRecordsRequest = new DeleteRecordsRequest(app, ids, null);
        BulkRequestItem bulkRequestItem = new BulkRequestItem(ConnectionConstants.DELETE_REQUEST, connection.getPathURI(ConnectionConstants.RECORDS), deleteRecordsRequest);
        this.bulkRequests.addRequest(bulkRequestItem);
        return this;
    }

    /**
     * Delete records at the specific revision.
     *
     * @param app app of the deleteRecordsWithRevision
     * @param idsWithRevision idsWithRevision of the deleteRecordsWithRevision
     * @return this
     */
    public BulkRequest deleteRecordsWithRevision(Integer app, HashMap idsWithRevision) {

        ArrayList ids = new ArrayList();
        ArrayList revisions = new ArrayList();

        for (Entry entry : idsWithRevision.entrySet()) {
            ids.add(entry.getKey());
            revisions.add(entry.getValue());
        }

        DeleteRecordsRequest deleteRecordsRequest = new DeleteRecordsRequest(app, ids, revisions);
        BulkRequestItem bulkRequestItem = new BulkRequestItem(ConnectionConstants.DELETE_REQUEST, connection.getPathURI(ConnectionConstants.RECORDS), deleteRecordsRequest);
        this.bulkRequests.addRequest(bulkRequestItem);
        return this;
    }

    /**
     * Update assignees of the specific record.
     *
     * @param app app of the updateRecordAssignees
     * @param record record of the updateRecordAssignees
     * @param assignees assignees of the updateRecordAssignees
     * @param revision revision of the updateRecordAssignees
     * @return this
     */
    public BulkRequest updateRecordAssignees(Integer app, Integer record, ArrayList assignees, Integer revision) {

        UpdateRecordAssigneesRequest updateRecordAssigneesRequest = new UpdateRecordAssigneesRequest(app, record, assignees, revision);
        BulkRequestItem bulkRequestItem = new BulkRequestItem(ConnectionConstants.PUT_REQUEST, connection.getPathURI(ConnectionConstants.RECORD_ASSIGNEES), updateRecordAssigneesRequest);
        this.bulkRequests.addRequest(bulkRequestItem);
        return this;
    }

    /**
     * Update status of the specific record.
     *
     * @param app app of the updateRecordStatus
     * @param id id of the updateRecordStatus
     * @param action action of the updateRecordStatus
     * @param assignee assignee of the updateRecordStatus
     * @param revision revision of the updateRecordStatus
     * @return this
     */
    public BulkRequest updateRecordStatus(Integer app, Integer id, String action, String assignee, Integer revision) {

        UpdateRecordStatusRequest updateRecordStatusRequest = new UpdateRecordStatusRequest(action, app, assignee, id, revision);
        BulkRequestItem bulkRequestItem = new BulkRequestItem(ConnectionConstants.PUT_REQUEST, connection.getPathURI(ConnectionConstants.RECORD_STATUS), updateRecordStatusRequest);
        this.bulkRequests.addRequest(bulkRequestItem);
        return this;
    }

    /**
     * Update status of the multi records.
     *
     * @param app app of the updateRecordsStatus
     * @param records records of the updateRecordsStatus
     * @return this
     */
    public BulkRequest updateRecordsStatus(Integer app, ArrayList records) {

        UpdateRecordsStatusRequest updateRecordsStatusRequest = new UpdateRecordsStatusRequest(app, records);
        BulkRequestItem bulkRequestItem = new BulkRequestItem(ConnectionConstants.PUT_REQUEST, connection.getPathURI(ConnectionConstants.RECORDS_STATUS), updateRecordsStatusRequest);
        this.bulkRequests.addRequest(bulkRequestItem);
        return this;
    }

    /**
     * Execute the BulkRequest and get data which is returned from kintone.
     *
     * @return BulkRequestResponse
     * @throws KintoneAPIException
     *           the KintoneAPIException to throw
     */
    public BulkRequestResponse execute() throws KintoneAPIException {
        BulkRequestResponse responses = new BulkRequestResponse();
        ArrayList requests = this.bulkRequests.getRequests();

        JsonElement response = connection.request(ConnectionConstants.POST_REQUEST, ConnectionConstants.BULK_REQUEST, parser.parseObject(this.bulkRequests));

        JsonObject object = response.getAsJsonObject();
        JsonArray array = object.getAsJsonArray("results");

        Integer count = 0;
        for(BulkRequestItem request : requests) {
            switch(request.getPayload().getClass().getSimpleName()) {
                case BulkRequestConstants.ADD_RECORD:
                    responses.addResponse(parser.parseJson(array.get(count), AddRecordResponse.class));
                    break;
                case BulkRequestConstants.ADD_RECORDS:
                    responses.addResponse(parser.parseJson(array.get(count), AddRecordsResponse.class));
                    break;
                case BulkRequestConstants.UPDATE_RECORD:
                    responses.addResponse(parser.parseJson(array.get(count), UpdateRecordResponse.class));
                    break;
                case BulkRequestConstants.UPDATE_RECORDS:
                    responses.addResponse(parser.parseJson(array.get(count), UpdateRecordsResponse.class));
                    break;
                case BulkRequestConstants.DELETE_RECORDS:
                    responses.addResponse(parser.parseJson(array.get(count), HashMap.class));
                    break;
                case BulkRequestConstants.UPDATE_STATUS_RECORD:
                    responses.addResponse(parser.parseJson(array.get(count), UpdateRecordResponse.class));
                    break;
                case BulkRequestConstants.UPDATE_STATUS_RECORDS:
                    responses.addResponse(parser.parseJson(array.get(count), UpdateRecordsResponse.class));
                    break;
                case BulkRequestConstants.UPDATE_ASSIGNEE_RECORDS:
                    responses.addResponse(parser.parseJson(array.get(count), UpdateRecordResponse.class));
                    break;
                default:
                    throw new KintoneAPIException("Invalid Request Command");
            }
            count++;
        }
        return responses;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy