content: /**
   * Alipay.com Inc.
   * Copyright (c) 2004-2020 All Rights Reserved.
   */
  package com.alipay.easysdk.kernel;
  
  import com.alipay.easysdk.kernel.util.Signer;
  import com.aliyun.tea.TeaModel;
  import com.google.common.base.Preconditions;
  import com.google.common.base.Strings;
  
  import java.util.Map;
  
  /**
   * @author zhongyu
   * @version : Context.java, v 0.1 2020年05月24日 10:41 上午 zhongyu Exp $
   */
  public class Context {
      /**
       * 客户端配置参数
       */
      private final Map<String, Object> config;
  
      /**
       * SDK版本号
       */
      private String sdkVersion;
  
      /**
       * 证书模式运行时环境
       */
      private CertEnvironment certEnvironment;
  
      /**
       * SHA256WithRSA签名器
       */
      private Signer signer;
  
      public Context(Config options, String sdkVersion) throws Exception {
          config = TeaModel.buildMap(options);
          this.sdkVersion = sdkVersion;
          Preconditions.checkArgument(AlipayConstants.RSA2.equals(getConfig(AlipayConstants.SIGN_TYPE_CONFIG_KEY)),
                  "Alipay Easy SDK只允许使用RSA2签名方式，RSA签名方式由于安全性相比RSA2弱已不再推荐。");
  
          if (!Strings.isNullOrEmpty(getConfig(AlipayConstants.ALIPAY_CERT_PATH_CONFIG_KEY))) {
              certEnvironment = new CertEnvironment(
                      getConfig(AlipayConstants.MERCHANT_CERT_PATH_CONFIG_KEY),
                      getConfig(AlipayConstants.ALIPAY_CERT_PATH_CONFIG_KEY),
                      getConfig(AlipayConstants.ALIPAY_ROOT_CERT_PATH_CONFIG_KEY));
          }
          signer = new Signer();
      }
  
      public String getConfig(String key) {
          if (String.valueOf(config.get(key)) == "null") {
              return null;
          } else {
              return String.valueOf(config.get(key));
          }
      }
  
      public String getSdkVersion() {
          return sdkVersion;
      }
  
      public void setSdkVersion(String sdkVersion) {
          this.sdkVersion = sdkVersion;
      }
  
      public CertEnvironment getCertEnvironment() {
          return certEnvironment;
      }
  
      public Signer getSigner() {
          return signer;
      }
  
      public void setSigner(Signer signer) {
          this.signer = signer;
      }
  }