Source: FeatureEdit.js

/**
 * @content 要素编辑功能组件
 * @author  2019-09-25
 */
import { NativeModules } from 'react-native';

let FE = NativeModules.JSFeatureEdit;

/**
 * @class FeatureEdit
 * @description 要素编辑
 */
export default class FeatureEdit {
  /**
   * 构造一个新的 FeatureEdit 对象。
   * @memberOf FeatureEdit
   * @param {VectorLayer} vectorLayer 矢量图层
   * @returns {Promise.<FeatureEdit>} eatureEdit 对象。
   */
  async createObjByVectorLayer(vectorLayer) {
    try {
      var { FeatureEditId } = await FE.createObjByVectorLayer(vectorLayer._MGVectorLayerId);
      var featureEdit = new FeatureEdit();
      featureEdit._MGFeatureEditId = FeatureEditId;
      return featureEdit;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 构造一个新的 FeatureEdit 对象。
   * @memberOf FeatureEdit
   * @param {IVectorCls} cls 矢量类对象基类
   * @returns {Promise.<FeatureEdit>} eatureEdit 对象。
   */
  async createObjByVectorCls(cls) {
    try {
      var { FeatureEditId } = await FE.createObjByVectorCls(cls._MGVectorClsId);
      var featureEdit = new FeatureEdit();
      featureEdit._MGFeatureEditId = FeatureEditId;
      return featureEdit;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 构造一个新的 FeatureEdit 对象。
   * @memberOf FeatureEdit
   * @param {String} strIGServerBaseURL 基地址
   * @param {String} strDocName 地图文档名
   * @param {int} mapID 地图ID
   * @param {int} layerID 图层 ID
   * @returns {Promise.<FeatureEdit>} eatureEdit 对象。
   */
  async createObjByIGSDoc(strIGServerBaseURL, strDocName, mapID, layerID) {
    try {
      var { FeatureEditId } = await FE.createObjByIGSDoc(
        strIGServerBaseURL,
        strDocName,
        mapID,
        layerID
      );
      var featureEdit = new FeatureEdit();
      featureEdit._MGFeatureEditId = FeatureEditId;
      return featureEdit;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 构造一个新的 FeatureEdit 对象。
   * @memberOf FeatureEdit
   * @param {String} strIGServerBaseURL 服务基地址
   * @param {String} strDataURL 数据地址
   * @returns {Promise.<FeatureEdit>} eatureEdit 对象。
   */
  async createObjByIGSData(strIGServerBaseURL, strDataURL) {
    try {
      var { FeatureEditId } = await FE.createObjByIGSData(
        strIGServerBaseURL,
        strDataURL
      );
      var featureEdit = new FeatureEdit();
      featureEdit._MGFeatureEditId = FeatureEditId;
      return featureEdit;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 添加要素
   * @memberOf FeatureEdit
   * @param {Feature} feature 简单要素对象
   * @return {Promise.<int>}添加成功后返回 要素ID
   */
  async append(feature) {
    try {
      return await FE.append(this._MGFeatureEditId, feature._MGFeatureId);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 添加要素
   * @memberOf FeatureEdit
   * @param {List<Feature>} featureArray 简单要素对象
   * @return {Promise.<int>} 成功:>0;失败:<=0
   */
  async appendFeatures(featureArray) {
    try {
      return await FE.appendFeatures(this._MGFeatureEditId, featureArray);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 删除要素
   * @memberOf FeatureEdit
   * @param {int} objID 要素ID
   * @return {Promise.<int>} 成功:>0;失败:<=0
   */
  async delete(objID) {
    try {
      return await FE.delete(this._MGFeatureEditId, objID);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 删除一组简单要素
   * @memberOf FeatureEdit
   * @param {long[]} objIDArray 简单要素ID数组
   * @return {Promise.<int>} 成功:>0;失败:<=0
   */
  async deleteobjIDs(objIDArray) {
    try {
      return await FE.deleteObjIDs(this._MGFeatureEditId, objIDArray);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 更新要素
   * @memberOf FeatureEdit
   * @param {int} objID 要素ID
   * @param {Feature} feature 要素对象
   * @return {Promise.<int>} 成功:>0;失败:<=0
   */
  async update(objID, feature) {
    try {
      return await FE.update(
        this._MGFeatureEditId,
        objID,
        feature._MGFeatureId
      );
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 更新要素
   * @memberOf FeatureEdit
   * @param {List<Feature>} features 要素数据集
   * @return {Promise.<int>} 成功:>0;失败:<=0
   */
  async updateFeatures(featureArray) {
    try {
      return await FE.updateFeatures(this._MGFeatureEditId, featureArray);
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 创建地理数据类
   * @memberOf FeatureEdit
   * @param {XClsType} clsType 地理类型
   * @param {String} name 名称
   * @param {GeomType} geomType 几何类型
   * @param {String} srefName 空间参考系名称
   * @param {String} dsName 数据集名称
   * @param {Fields} flds 字段属性
   * @return {Promise.<String>} 成功:返回参数返回创建的要素类的GDBP地址;失败:String等于null
   */
  async createClsBySRef(clsType, name, geomType, srefName, dsName, flds) {
    try {
      return await FE.createClsBySRef(
        this._MGFeatureEditId,
        clsType,
        name,
        geomType,
        srefName,
        dsName,
        flds._MGFieldsId
      );
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 创建地理数据类
   * @memberOf FeatureEdit
   * @param {XClsType} clsType 地理类型
   * @param {String} name 名称
   * @param {GeomType} geomType 几何类型
   * @param {Fields} flds 字段属性
   * @return {Promise.<String>} 成功:返回参数返回创建的要素类的GDBP地址;失败:String等于null
   */
  async createCls(clsType, name, geomType, flds) {
    try {
      return await FE.createCls(
        this._MGFeatureEditId,
        clsType,
        name,
        geomType,
        flds._MGFieldsId
      );
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 删除地理数据类
   * @memberOf FeatureEdit
   * @param {XClsType} clsType 地理类型
   * @param {String} name 名称
   * @return {Promise.<int>} 成功:>0;失败:<=0
   */
  async deleteCls(clsType, name) {
    try {
      return await FE.deleteCls(this._MGFeatureEditId, clsType, name);
    } catch (e) {
      console.error(e);
    }
  }
}