# Source: ElpParam.js

    /**
     * @content 地球椭球参数功能组件
     * @author  lidafeng
     */
    import { NativeModules } from 'react-native';

    let EP = NativeModules.JSElpParam;

    /**
     * @class ElpParam
     * @description 地球椭球参数
     */
    export default class ElpParam {

        /**
       * 构造一个新的 ElpParam 对象。
       * @memberOf ElpParam
       * @returns {Promise.<ElpParam>}
       */
      async createObj() {
        try {
          let { ElpParamId } = await EP.createObj();
          let elpParam = new ElpParam();
          elpParam._MGElpParamId = ElpParamId;
          return elpParam;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 通过成员变量的名称设置值 <br>
       * 成员变量的名称 --- 注释: <br>
       *   'a' --- 地球椭球长轴，double <br>
       *   'b' --- 地球椭球短轴，double <br>
       *   'af' --- 地球椭球扁率，double <br>
       *   'r' --- 等面积球体半径，double <br>
       *   'name' --- 地球椭球体名称，String <br>
       *
       * @memberOf ElpParam
       * @param {String} key 成员变量的名称
       * @param {String| Number} value 成员变量的值
       * @returns {Promise.<void>}
       * @example
            let eleParam = new ElpParam();
            let eleParamObj = await eleParam.createObj();
            await eleParamObj.set('name', '王五');
            await eleParamObj.set('a', 20.4);

       */
      async set(key, value){
          try {
            let obj = {[key]: value};
            await EP.set(this._MGElpParamId, key, obj);
          } catch (e) {
              console.error(e);
          }
      }

      /**
       * 通过成员变量的名称获取值 <br>
       * 成员变量的名称包括: <br>
       *   'a' --- 地球椭球长轴 <br>
       *   'b' --- 地球椭球短轴 <br>
       *   'af' --- 地球椭球扁率 <br>
       *   'r' --- 等面积球体半径 <br>
       *   'name' --- 地球椭球体名称 <br>
       *
       * @memberOf ElpParam
       * @param {String} key 成员变量的名称
       * @returns {String|Number} 成员变量值
       */
      async get(key){
          try {
              let {value} = await EP.get(this._MGElpParamId, key);
              return value;
          } catch (e) {
              console.error(e);
          }
      }

      /**
       * 设置所有成员变量值，字符串中的键请与示例的键保持一致
       *
       * @memberOf ElpParam
       * @param {String} stringValue 键值对格式字符串
       * @returns {Promise.<Void>}
       * @example
            // 设置全部变量
            let obj = { a: 5.0, b: 7.0, af: 9.0, r: 10.0, name: '张三' }

            // JSON对象设置全部变量
            // let obj = {"a": 2.0, "b": 3.0, "af": 4.0, "r": 6.0, "name": "李四"};

            // 字符串
            let stringValue = JSON.stringify(obj);
            let eleParam = new ElpParam();
            let eleParamObj = await eleParam.createObj();
            await eleParamObj.fromString(stringValue);

       */
        async fromString(stringValue){
            try {
                if(stringValue === undefined || stringValue === null || stringValue.length === 0){
                    return;
                }
                let objValue = JSON.parse(stringValue);
                await EP.fromString(this._MGElpParamId, objValue);
            } catch (e) {
                console.error(e);
            }
        }

        /**
         * 获取所有的成员变量名称和值
         * @memberOf ElpParam
         * @returns {String} json字符串
         */
        async toString(){
            try {
                let stringValue = await EP.toString(this._MGElpParamId);
                return stringValue;
            } catch (e) {
                console.error(e);
            }
        }

    }