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

com.aliyun.openservices.ots.model.BatchWriteRowResult Maven / Gradle / Ivy

package com.aliyun.openservices.ots.model;

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

public class BatchWriteRowResult extends OTSResult {
    /**
     * BatchWriteRow批量操作中单行写的结果。
     * 若isSucceed为true,则代表该行写操作成功。
     * 若isSucceed为false,则代表该行写操作失败,可以通过getError获取失败的错误信息。
     */
    public static class RowStatus {
        private boolean isSucceed = false;
        private Error error;
        private ConsumedCapacity consumedCapacity;
        private String tableName;
        private int index;

        public RowStatus(String tableName, ConsumedCapacity consumedCapacity, int index) {
            this.isSucceed = true;
            this.tableName = tableName;
            this.consumedCapacity = consumedCapacity;
            this.index = index;
        }

        public RowStatus(String tableName, Error error, int index) {
            this.isSucceed = false;
            this.tableName = tableName;
            this.error = error;
            this.index = index;
        }

        public boolean isSucceed() {
            return isSucceed;
        }

        public Error getError() {
            return error;
        }

        public String getTableName() {
            return tableName;
        }

        public ConsumedCapacity getConsumedCapacity() {
            return consumedCapacity;
        }

        public int getIndex() {
            return index;
        }
    }

    private Map> tableToPutRowStatus;
    private Map> tableToUpdateRowStatus;
    private Map> tableToDeleteRowStatus;

    /**
     * internal use
     */
    public BatchWriteRowResult(OTSResult meta) {
        super(meta);
        this.tableToPutRowStatus = new HashMap>();
        this.tableToUpdateRowStatus = new HashMap>();
        this.tableToDeleteRowStatus = new HashMap>();
    }

    /**
     * internal use
     */
    public void addPutRowResult(RowStatus status) {
        addResult(status, tableToPutRowStatus);
    }

    /**
     * internal use
     */
    public void addUpdateRowResult(RowStatus status) {
        addResult(status, tableToUpdateRowStatus);
    }

    /**
     * internal use
     */
    public void addDeleteRowResult(RowStatus status) {
        addResult(status, tableToDeleteRowStatus);
    }

    private void addResult(RowStatus status,
                           Map> tableToRowStatus) {
        String tableName = status.getTableName();

        List statuses = tableToRowStatus.get(tableName);
        if (statuses == null) {
            statuses = new ArrayList();
            tableToRowStatus.put(tableName, statuses);
        }
        statuses.add(status);
    }

    /**
     * 获取某个表上所有PutRow的返回结果。
     *
     * @return PutRow的返回结果,若该表不存在,则返回null。
     */
    public List getPutRowStatus(String tableName) {
        return tableToPutRowStatus.get(tableName);
    }

    /**
     * 获取所有表上PutRow的返回结果。
     *
     * @return 所有表PutRow返回结果。
     */
    public Map> getPutRowStatus() {
        return tableToPutRowStatus;
    }

    /**
     * 获取某个表上所有UpdateRow的返回结果。
     *
     * @return UpdateRow的返回结果,若该表不存在,则返回null。
     */
    public List getUpdateRowStatus(String tableName) {
        return tableToUpdateRowStatus.get(tableName);
    }

    /**
     * 获取所有表上UpdateRow的返回结果。
     *
     * @return 所有表UpdateRow返回结果。
     */
    public Map> getUpdateRowStatus() {
        return tableToUpdateRowStatus;
    }

    /**
     * 获取某个表上所有DeleteRow的返回结果。
     *
     * @return DeleteRow的返回结果,若该表不存在,则返回null。
     */
    public List getDeleteRowStatus(String tableName) {
        return tableToDeleteRowStatus.get(tableName);
    }

    /**
     * 获取所有表上PutRow的返回结果。
     *
     * @return 所有表PutRow返回结果。
     */
    public Map> getDeleteRowStatus() {
        return tableToDeleteRowStatus;
    }

    /**
     * 获取所有PutRow操作执行失败的行。
     *
     * @return 若存在执行失败的行,则返回所有行,否则返回空列表
     */
    public List getFailedRowsOfPut() {
        List result = new ArrayList();
        getResultOfPut(null, result);
        return result;
    }

    /**
     * 获取所有PutRow操作执行成功的行。
     *
     * @return 若存在执行成功的行,则返回所有行,否则返回空列表
     */
    public List getSucceedRowsOfPut() {
        List result = new ArrayList();
        getResultOfPut(result, null);
        return result;
    }

    /**
     * 获取所有PutRow执行成功过的行以及所有执行失败的行。
     *
     * @param succeedRows 所有执行成功的行
     * @param failedRows  所有执行失败的行
     */
    public void getResultOfPut(List succeedRows, List failedRows) {
        for (Map.Entry> entry : tableToPutRowStatus.entrySet()) {
            for (RowStatus rs : entry.getValue()) {
                if (rs.isSucceed) {
                    if (succeedRows != null) {
                        succeedRows.add(rs);
                    }
                } else {
                    if (failedRows != null) {
                        failedRows.add(rs);
                    }
                }
            }
        }
    }

    /**
     * 获取所有UpdateRow操作执行失败的行。
     *
     * @return 若存在执行失败的行,则返回所有行,否则返回空列表
     */
    public List getFailedRowsOfUpdate() {
        List result = new ArrayList();
        getResultOfUpdate(null, result);
        return result;
    }

    /**
     * 获取所有UpdateRow操作执行成功的行。
     *
     * @return 若存在执行成功的行,则返回所有行,否则返回空列表
     */
    public List getSucceedRowsOfUpdate() {
        List result = new ArrayList();
        getResultOfUpdate(result, null);
        return result;
    }

    /**
     * 获取所有UpdateRow执行成功过的行以及所有执行失败的行。
     *
     * @param succeedRows 所有执行成功的行
     * @param failedRows  所有执行失败的行
     */
    public void getResultOfUpdate(List succeedRows, List failedRows) {
        for (Map.Entry> entry : tableToUpdateRowStatus.entrySet()) {
            for (RowStatus rs : entry.getValue()) {
                if (rs.isSucceed) {
                    if (succeedRows != null) {
                        succeedRows.add(rs);
                    }
                } else {
                    if (failedRows != null) {
                        failedRows.add(rs);
                    }
                }
            }
        }
    }

    /**
     * 获取所有DeleteRow操作执行失败的行。
     *
     * @return 若存在执行失败的行,则返回所有行,否则返回空列表
     */
    public List getFailedRowsOfDelete() {
        List result = new ArrayList();
        getResultOfDelete(null, result);
        return result;
    }

    /**
     * 获取所有DeleteRow操作执行成功的行。
     *
     * @return 若存在执行成功的行,则返回所有行,否则返回空列表
     */
    public List getSucceedRowsOfDelete() {
        List result = new ArrayList();
        getResultOfDelete(result, null);
        return result;
    }

    /**
     * 获取所有DeleteRow执行成功过的行以及所有执行失败的行。
     *
     * @param succeedRows 所有执行成功的行
     * @param failedRows  所有执行失败的行
     */
    public void getResultOfDelete(List succeedRows, List failedRows) {
        for (Map.Entry> entry : tableToDeleteRowStatus.entrySet()) {
            for (RowStatus rs : entry.getValue()) {
                if (rs.isSucceed) {
                    if (succeedRows != null) {
                        succeedRows.add(rs);
                    }
                } else {
                    if (failedRows != null) {
                        failedRows.add(rs);
                    }
                }
            }
        }
    }

    /**
     * 是否所有行修改操作都执行成功。
     *
     * @return 若所有行修改操作都执行成功,则返回true,否则返回false
     */
    public boolean isAllSucceed() {
        return getFailedRowsOfPut().isEmpty() && getFailedRowsOfUpdate().isEmpty() && getFailedRowsOfDelete().isEmpty();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy