Source: MultiClassTheme.js

/*
 * @Description: In User Settings Edit
 * @Author: xiaoying
 * @Date: 2019-09-03 12:00:02
 * @LastEditTime: 2019-09-09 16:05:00
 * @LastEditors: mayuanye
 */
import { NativeModules } from 'react-native';
import ClassItemValue from './ClassItemValue.js';
import MultiClassThemeInfo from './MultiClassThemeInfo.js';
import ThemeInfo from './ThemeInfo.js';
import VectorTheme from './VectorTheme.js';
let MCT = NativeModules.JSMultiClassTheme;

/**
 * @class MultiClassTheme
 * @description 多表达式分段专题图
 */
export default class MultiClassTheme extends VectorTheme {
  constructor() {
    super();
    Object.defineProperty(this, '_MGMultiClassThemeId', {
      get: function() {
        return this._MGVectorThemeId;
      },
      set: function(_MGMultiClassThemeId) {
        this._MGVectorThemeId = _MGMultiClassThemeId;
      },
    });
  }

  /**
   * 构造一个新的MultiClassTheme对象
   *
   * @memberof MultiClassTheme
   * @returns {Promise<MultiClassTheme>}
   */
  async createObj() {
    try {
      var { MultiClassThemeId } = await MCT.createObj();
      var multiClassTheme = new MultiClassTheme();
      multiClassTheme._MGMultiClassThemeId = MultiClassThemeId;
      return multiClassTheme;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获取缺省专题绘制信息
   *
   * @memberof MultiClassTheme
   * @returns {Promise<ThemeInfo>}
   */
  async getDefaultInfo() {
    try {
      var { ThemeInfoId } = await MCT.getDefaultInfo(this._MGMultiClassThemeId);
      var themeInfo = new ThemeInfo();
      themeInfo._MGThemeInfoId = ThemeInfoId;
      return themeInfo;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 设置缺省专题绘制信息
   *
   * @memberof MultiClassTheme
   * @param {Object} themeInfo 缺省专题绘制信息
   * @returns {Promise<Void>}
   */
  async setDefaultInfo(themeInfo) {
    try {
      await MCT.setDefaultInfo(
        this._MGMultiClassThemeId,
        themeInfo._MGThemeInfoId
      );
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获得分级字段表达式的数目
   *
   * @memberof MultiClassTheme
   * @returns {int} 分级字段表达式的数目
   */
  async getExpCount() {
    try {
      let expCount = await MCT.getExpCount(this._MGMultiClassThemeId);
      return expCount;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获得项(做完笛卡尔积之后)的个数
   *
   * @memberof MultiClassTheme
   * @returns {int} 项(做完笛卡尔积之后)的个数
   */
  async getItemCount() {
    try {
      let itemCount = await MCT.getItemCount(this._MGMultiClassThemeId);
      return itemCount;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获得专题图类型
   *
   * @memberof MultiClassTheme
   * @returns {int} 专题图类型,例:AllOtherDataItemInfoSource.DefaultThemeInfo
   */
  async getAllOtherDataItemInfoSource() {
    try {
      let itemCount = await MCT.getAllOtherDataItemInfoSource(
        this._MGMultiClassThemeId
      );
      return itemCount;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 设置专题图类型
   *
   * @memberof MultiClassTheme
   * @param {int} allOtherDataItemInfoSource 专题图类型,例:AllOtherDataItemInfoSource.DefaultThemeInfo
   * @returns {Promise<Void>}
   *
   */
  async setAllOtherDataItemInfoSource(allOtherDataItemInfoSource) {
    try {
      await MCT.setAllOtherDataItemInfoSource(
        this._MGMultiClassThemeId,
        allOtherDataItemInfoSource
      );
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 添加分级字段表达式
   *
   * @memberof MultiClassTheme
   * @param {String} exp 字段表达式
   * @param {int} classItemType 统计分段类型
   * @returns {int} 成功返回索引
   */
  async appendExpression(exp, classItemType) {
    try {
      let index = await MCT.appendExpression(
        this._MGMultiClassThemeId,
        exp,
        classItemType
      );
      return index;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 移除分级字段表达式
   *
   * @memberof MultiClassTheme
   * @param {String} exp 字段表达式
   * @returns {boolean} true-成功 :false-失败
   */
  async removeExpression(exp) {
    try {
      let result = await MCT.removeExpression(this._MGMultiClassThemeId, exp);
      return result;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获得分级字段表达式的索引
   *
   * @memberof MultiClassTheme
   * @param {String} exp
   * @returns {int} 成功返回字段表达式的索引
   */
  async indexOfExpression(exp) {
    try {
      let index = await MCT.indexOfExpression(this._MGMultiClassThemeId, exp);
      return index;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获得分级字段表达式
   *
   * @memberof MultiClassTheme
   * @param {int} index 字段表达式索引
   * @returns {String} 成功返回分级字段表达式
   */
  async getExpression(index) {
    try {
      let exp = await MCT.getExpression(this._MGMultiClassThemeId, index);
      return exp;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 交换两个分级字段表达式
   *
   * @memberof MultiClassTheme
   * @param {int} index1 字段表达式的索引
   * @param {int} index2 字段表达式的索引
   * @returns {boolean} true-成功 : false-失败
   */
  async exchangeExpressions(index1, index2) {
    try {
      let result = await MCT.exchangeExpressions(
        this._MGMultiClassThemeId,
        index1,
        index2
      );
      return result;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获得分级字段表达式的类型
   *
   * @memberof MultiClassTheme
   * @param {String} exp 字段表达式
   * @returns {int} 成功返回字段表达式的统计分段类型,例:ClassItemType.UniqueType
   */
  async getExpressionClassItemType(exp) {
    try {
      let type = await MCT.getExpressionClassItemType(
        this._MGMultiClassThemeId,
        exp
      );
      return type;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 添加和字段表达式对应的分段值
   *
   * @memberof MultiClassTheme
   * @param {String} exp 字段表达式
   * @param {Object} classItemValue 和字段表达式对应的分段值
   * @returns {int} 成功返回字段表达式索引
   */
  async appendSubItem(exp, classItemValue) {
    try {
      let index = await MCT.appendSubItem(
        this._MGMultiClassThemeId,
        exp,
        classItemValue._MGClassItemValueId
      );
      return index;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 删除和字段表达式对应的分段值
   *
   * @memberof MultiClassTheme
   * @param {String} exp 字段表达式
   * @param {int} index 和字段表达式对应的分段值的索引
   * @returns {boolean} true-成功 ;false-失败
   */
  async removeSubItem(exp, index) {
    try {
      let result = await MCT.removeSubItem(
        this._MGMultiClassThemeId,
        exp,
        index
      );
      return result;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 合并和字段表达式对应的分段值(只对表达式值为RangeTheme类型的管用)
   *
   * @memberof MultiClassTheme
   * @param {String} exp 字段表达式
   * @param {int} index 待合并的分段值的索引
   * @param {int} count 待合并的分段值的数目
   * @returns {boolean} true-成功 ;false-失败
   */
  async mergeSubItem(exp, index, count) {
    try {
      let result = await MCT.mergeSubItem(
        this._MGMultiClassThemeId,
        exp,
        index,
        count
      );
      return result;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 分裂给定字段表达式对应的分段值(只对表达式值为RangeTheme类型的管用)
   *
   * @memberof MultiClassTheme
   * @param {String} exp 字段表达式
   * @param {int} index 待分裂的分段值的索引
   * @param {double} splitValue 拆分值
   * @returns {boolean} true-成功 ;false-失败
   */
  async splitSubItem(exp, index, splitValue) {
    try {
      let result = await MCT.splitSubItem(
        this._MGMultiClassThemeId,
        exp,
        index,
        splitValue
      );
      return result;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获得给定的值在分段中的索引
   *
   * @memberof MultiClassTheme
   * @param {String} exp 字段表达式
   * @param {String} itemValue  字段值
   * @returns {int} 成功返回给定的值在分段中的索引
   */
  async indexOfSubItem(exp, itemValue) {
    try {
      let index = await MCT.indexOfSubItem(
        this._MGMultiClassThemeId,
        exp,
        itemValue
      );
      return index;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 清除给定字段表达式的所有分段
   *
   * @memberof MultiClassTheme
   * @param {String} exp 字段表达式
   * @returns {boolean} true-成功 ;false-失败
   */
  async clearSubItems(exp) {
    try {
      let result = await MCT.clearSubItems(this._MGMultiClassThemeId, exp);
      return result;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获得给定字段表达式的分段数目
   *
   * @memberof MultiClassTheme
   * @param {String} exp 字段表达式
   * @returns {int} 成功返回给定字段表达式的分段数目
   */
  async getSubItemCount(exp) {
    try {
      let count = await MCT.getSubItemCount(this._MGMultiClassThemeId, exp);
      return count;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 修改给定字段表达式中指定索引处的值
   *
   * @memberof MultiClassTheme
   * @param {String} exp 字段表达式
   * @param {int} index 分段索引
   * @param {Object} classItemValue 分段值
   * @returns {boolean} true-成功 ;false-失败
   */
  async setSubItemValue(exp, index, classItemValue) {
    try {
      let result = await MCT.setSubItemValue(
        this._MGMultiClassThemeId,
        exp,
        index,
        classItemValue._MGClassItemValueId
      );
      return result;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获取给定字段表达式中指定索引处的值
   *
   * @memberof MultiClassTheme
   * @param {String} exp 字段表达式
   * @param {int} index 分段索引
   * @returns {Promise<ClassItemValue>} 成功返回给定字段表达式中指定索引处的值
   */
  async getSubItemValue(exp, index) {
    try {
      var { ClassItemValueId } = await MCT.getSubItemValue(
        this._MGMultiClassThemeId,
        exp,
        index
      );
      var classItemValue = new ClassItemValue();
      classItemValue._MGClassItemValueId = ClassItemValueId;
      return classItemValue;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 生成所有的分段信息(该函数在调整了expression或者expression内部的分段信息后都需要调用)
   *
   * @memberof MultiClassTheme
   * @param {boolean} maintainExistentStyle 指示之前存在的分段的样式是否保持不变
   * @returns {boolean} true-成功 ;false-失败
   */
  async make(maintainExistentStyle) {
    try {
      let result = await MCT.make(
        this._MGMultiClassThemeId,
        maintainExistentStyle
      );
      return result;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 返回指定项(做完笛卡尔积之后)的信息
   *
   * @memberof MultiClassTheme
   * @param {int} index 项索引
   * @returns {Promise<MultiClassThemeInfo>} 成功返回指定项的信息
   */
  async getItem(index) {
    try {
      var { MultiClassThemeInfoId } = await MCT.getItem(
        this._MGMultiClassThemeId,
        index
      );
      var multiClassThemeInfo = new MultiClassThemeInfo();
      multiClassThemeInfo._MGMultiClassThemeInfoId = MultiClassThemeInfoId;
      return multiClassThemeInfo;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 设置每个项(做完笛卡尔积之后)的信息
   *
   * @memberof MultiClassTheme
   * @param {int} index 项索引
   * @param {Object} multiClassThemeInfo 项信息
   * @returns {boolean} true-成功 ;false-失败
   */
  async setItem(index, multiClassThemeInfo) {
    try {
      let result = await MCT.setItem(
        this._MGMultiClassThemeId,
        index,
        multiClassThemeInfo._MGMultiClassThemeInfoId
      );
      return result;
    } catch (e) {
      console.error(e);
    }
  }
}