예제 #1
0
  /**
   * Turn a flattened 2D (string, double) string sequence into its corresponding map
   *
   * @param str2DMap Flattened 2D array input
   * @param strKVDelimiter Key-Value delimiter string
   * @param strRecordDelimiter Record delimiter string
   * @param bSkipNullValue Indicates whether NULL Values are to be skipped
   * @param strNULLString NULL string
   * @return [String, double] map
   */
  public static final org.drip.analytics.support.CaseInsensitiveTreeMap<java.lang.Double>
      FlatStringTo2DSDMap(
          final java.lang.String str2DMap,
          final java.lang.String strKVDelimiter,
          final java.lang.String strRecordDelimiter,
          final boolean bSkipNullValue,
          final java.lang.String strNULLString) {
    if (null == str2DMap
        || str2DMap.isEmpty()
        || null == strNULLString
        || strNULLString.isEmpty()
        || strNULLString.equalsIgnoreCase(str2DMap)
        || null == strKVDelimiter
        || strKVDelimiter.isEmpty()
        || null == strRecordDelimiter
        || strRecordDelimiter.isEmpty()) return null;

    java.lang.String[] astrRecord =
        org.drip.math.common.StringUtil.Split(str2DMap, strRecordDelimiter);

    if (null == astrRecord || 0 == astrRecord.length) return null;

    org.drip.analytics.support.CaseInsensitiveTreeMap<java.lang.Double> map2D =
        new org.drip.analytics.support.CaseInsensitiveTreeMap<java.lang.Double>();

    for (int i = 0; i < astrRecord.length; ++i) {
      if (null == astrRecord[i]
          || astrRecord[i].isEmpty()
          || strNULLString.equalsIgnoreCase(astrRecord[i])) continue;

      java.lang.String[] astrKVPair =
          org.drip.math.common.StringUtil.Split(astrRecord[i], strKVDelimiter);

      if (null == astrKVPair
          || 2 != astrKVPair.length
          || null == astrKVPair[0]
          || astrKVPair[0].isEmpty()
          || strNULLString.equalsIgnoreCase(astrKVPair[0])
          || (bSkipNullValue
              && (null == astrKVPair[1]
                  || astrKVPair[1].isEmpty()
                  || strNULLString.equalsIgnoreCase(astrKVPair[1])))) continue;

      map2D.put(astrKVPair[0], new java.lang.Double(astrKVPair[1]));
    }

    if (0 == map2D.size()) return null;

    return map2D;
  }
예제 #2
0
  /**
   * RatesSetting de-serialization from input byte array
   *
   * @param ab Byte Array
   * @throws java.lang.Exception Thrown if RatesSetting cannot be properly de-serialized
   */
  public RatesSetting(final byte[] ab) throws java.lang.Exception {
    if (null == ab || 0 == ab.length)
      throw new java.lang.Exception("RatesSetting de-serializer: Invalid input Byte array");

    java.lang.String strRawString = new java.lang.String(ab);

    if (null == strRawString || strRawString.isEmpty())
      throw new java.lang.Exception("RatesSetting de-serializer: Empty state");

    java.lang.String strSerializedRatesSetting =
        strRawString.substring(0, strRawString.indexOf(getObjectTrailer()));

    if (null == strSerializedRatesSetting || strSerializedRatesSetting.isEmpty())
      throw new java.lang.Exception("RatesSetting de-serializer: Cannot locate state");

    java.lang.String[] astrField =
        org.drip.math.common.StringUtil.Split(strSerializedRatesSetting, getFieldDelimiter());

    if (null == astrField || 5 > astrField.length)
      throw new java.lang.Exception("RatesSetting de-serializer: Invalid reqd field set");

    // double dblVersion = new java.lang.Double (astrField[0]);

    if (null == astrField[1]
        || astrField[1].isEmpty()
        || org.drip.service.stream.Serializer.NULL_SER_STRING.equalsIgnoreCase(astrField[1]))
      throw new java.lang.Exception("RatesSetting de-serializer: Cannot locate Trade Currency");

    _strTradeDiscountCurve = astrField[1];

    if (null == astrField[2]
        || astrField[2].isEmpty()
        || org.drip.service.stream.Serializer.NULL_SER_STRING.equalsIgnoreCase(astrField[2]))
      throw new java.lang.Exception("RatesSetting de-serializer: Cannot locate Coupon Currency");

    _strCouponDiscountCurve = astrField[2];

    if (null == astrField[3]
        || astrField[3].isEmpty()
        || org.drip.service.stream.Serializer.NULL_SER_STRING.equalsIgnoreCase(astrField[3]))
      throw new java.lang.Exception("RatesSetting de-serializer: Cannot locate Principal Currency");

    _strPrincipalDiscountCurve = astrField[3];

    if (null == astrField[4]
        || astrField[4].isEmpty()
        || org.drip.service.stream.Serializer.NULL_SER_STRING.equalsIgnoreCase(astrField[4]))
      throw new java.lang.Exception(
          "RatesSetting de-serializer: Cannot locate Redemption Currency");

    _strRedemptionDiscountCurve = astrField[4];

    if (!validate()) throw new java.lang.Exception("RatesSetting de-serializer: Cannot validate!");
  }
예제 #3
0
  /**
   * Turn a flattened 4D (string, string, string, double) string sequence into its corresponding map
   *
   * @param str4DMap Flattened 4D array input
   * @param strMultiLevelKeyDelimiter Multi-level key delimiter string
   * @param strKVDelimiter Key-Value delimiter string
   * @param strRecordDelimiter Record delimiter string
   * @param bSkipNullValue Indicates whether NULL Values are to be skipped
   * @param strNULLString NULL string
   * @return [String, [String, [String, double]]] map
   */
  public static final org.drip.analytics.support.CaseInsensitiveTreeMap<
          org.drip.analytics.support.CaseInsensitiveTreeMap<
              org.drip.analytics.support.CaseInsensitiveTreeMap<java.lang.Double>>>
      FlatStringTo4DSDMap(
          final java.lang.String str4DMap,
          final java.lang.String strMultiLevelKeyDelimiter,
          final java.lang.String strKVDelimiter,
          final java.lang.String strRecordDelimiter,
          final boolean bSkipNullValue,
          final java.lang.String strNULLString) {
    if (null == str4DMap
        || str4DMap.isEmpty()
        || null == strNULLString
        || strNULLString.isEmpty()
        || strNULLString.equalsIgnoreCase(str4DMap)
        || null == strKVDelimiter
        || strKVDelimiter.isEmpty()
        || null == strRecordDelimiter
        || strRecordDelimiter.isEmpty()) return null;

    java.lang.String[] astrRecord =
        org.drip.math.common.StringUtil.Split(str4DMap, strRecordDelimiter);

    if (null == astrRecord || 0 == astrRecord.length) return null;

    org.drip.analytics.support.CaseInsensitiveTreeMap<
            org.drip.analytics.support.CaseInsensitiveTreeMap<
                org.drip.analytics.support.CaseInsensitiveTreeMap<java.lang.Double>>>
        map4D =
            new org.drip.analytics.support.CaseInsensitiveTreeMap<
                org.drip.analytics.support.CaseInsensitiveTreeMap<
                    org.drip.analytics.support.CaseInsensitiveTreeMap<java.lang.Double>>>();

    for (int i = 0; i < astrRecord.length; ++i) {
      if (null == astrRecord[i]
          || astrRecord[i].isEmpty()
          || strNULLString.equalsIgnoreCase(astrRecord[i])) continue;

      java.lang.String[] astrKVPairOut =
          org.drip.math.common.StringUtil.Split(astrRecord[i], strKVDelimiter);

      if (null == astrKVPairOut
          || 2 != astrKVPairOut.length
          || null == astrKVPairOut[0]
          || astrKVPairOut[0].isEmpty()
          || strNULLString.equalsIgnoreCase(astrKVPairOut[0])
          || (bSkipNullValue
              && (null == astrKVPairOut[1]
                  || astrKVPairOut[1].isEmpty()
                  || strNULLString.equalsIgnoreCase(astrKVPairOut[1])))) continue;

      java.lang.String[] astrKeySet =
          org.drip.math.common.StringUtil.Split(astrKVPairOut[0], strMultiLevelKeyDelimiter);

      if (null == astrKeySet
          || 3 != astrKeySet.length
          || null == astrKeySet[0]
          || astrKeySet[0].isEmpty()
          || strNULLString.equalsIgnoreCase(astrKeySet[0])
          || null == astrKeySet[1]
          || astrKeySet[1].isEmpty()
          || strNULLString.equalsIgnoreCase(astrKeySet[1])
          || null == astrKeySet[2]
          || astrKeySet[2].isEmpty()
          || strNULLString.equalsIgnoreCase(astrKeySet[2])) continue;

      org.drip.analytics.support.CaseInsensitiveTreeMap<
              org.drip.analytics.support.CaseInsensitiveTreeMap<java.lang.Double>>
          map3D = map4D.get(astrKeySet[0]);

      if (null == map3D)
        map3D =
            new org.drip.analytics.support.CaseInsensitiveTreeMap<
                org.drip.analytics.support.CaseInsensitiveTreeMap<java.lang.Double>>();

      org.drip.analytics.support.CaseInsensitiveTreeMap<java.lang.Double> map2D =
          map3D.get(astrKeySet[1]);

      if (null == map2D)
        map2D = new org.drip.analytics.support.CaseInsensitiveTreeMap<java.lang.Double>();

      map2D.put(astrKeySet[2], new java.lang.Double(astrKVPairOut[1]));

      map3D.put(astrKeySet[1], map2D);

      map4D.put(astrKeySet[0], map3D);
    }

    if (0 == map4D.size()) return null;

    return map4D;
  }
  /**
   * EmbeddedOptionSchedule de-serialization from input byte array
   *
   * @param ab Byte Array
   * @throws java.lang.Exception Thrown if EmbeddedOptionSchedule cannot be properly de-serialized
   */
  public EmbeddedOptionSchedule(final byte[] ab) throws java.lang.Exception {
    if (null == ab || 0 == ab.length)
      throw new java.lang.Exception(
          "EmbeddedOptionSchedule de-serializer: Invalid input Byte array");

    java.lang.String strRawString = new java.lang.String(ab);

    if (null == strRawString || strRawString.isEmpty())
      throw new java.lang.Exception("EmbeddedOptionSchedule de-serializer: Empty state");

    java.lang.String strSerializedEmbeddedOptionSchedule =
        strRawString.substring(0, strRawString.indexOf(getObjectTrailer()));

    if (null == strSerializedEmbeddedOptionSchedule
        || strSerializedEmbeddedOptionSchedule.isEmpty())
      throw new java.lang.Exception("EmbeddedOptionSchedule de-serializer: Cannot locate state");

    java.lang.String[] astrField =
        org.drip.math.common.StringUtil.Split(
            strSerializedEmbeddedOptionSchedule, getFieldDelimiter());

    if (null == astrField || 8 > astrField.length)
      throw new java.lang.Exception("EmbeddedOptionSchedule de-serializer: Invalid reqd field set");

    // double dblVersion = new java.lang.Double (astrField[0]);

    if (null == astrField[1]
        || astrField[1].isEmpty()
        || org.drip.service.stream.Serializer.NULL_SER_STRING.equalsIgnoreCase(astrField[1]))
      throw new java.lang.Exception(
          "EmbeddedOptionSchedule de-serializer: Cannot locate notice period");

    _iNoticePeriod = new java.lang.Integer(astrField[1]);

    if (null == astrField[2]
        || astrField[2].isEmpty()
        || org.drip.service.stream.Serializer.NULL_SER_STRING.equalsIgnoreCase(astrField[2]))
      throw new java.lang.Exception("EmbeddedOptionSchedule de-serializer: Cannot locate Put flag");

    _bIsPut = new java.lang.Boolean(astrField[2]);

    if (null == astrField[3]
        || astrField[3].isEmpty()
        || org.drip.service.stream.Serializer.NULL_SER_STRING.equalsIgnoreCase(astrField[3]))
      throw new java.lang.Exception(
          "EmbeddedOptionSchedule de-serializer: Cannot locate fix-to-float-on-exercise flag");

    _bFixToFloatOnExercise = new java.lang.Boolean(astrField[3]);

    if (null == astrField[4]
        || astrField[4].isEmpty()
        || org.drip.service.stream.Serializer.NULL_SER_STRING.equalsIgnoreCase(astrField[4]))
      throw new java.lang.Exception(
          "EmbeddedOptionSchedule de-serializer: Cannot locate fix-to-float-on-exercise flag");

    _dblFixToFloatSpread = new java.lang.Double(astrField[4]);

    if (null == astrField[5]
        || astrField[5].isEmpty()
        || org.drip.service.stream.Serializer.NULL_SER_STRING.equalsIgnoreCase(astrField[5]))
      throw new java.lang.Exception(
          "EmbeddedOptionSchedule de-serializer: Cannot locate fix-to-float exercise date");

    _dblFixToFloatExerciseDate = new java.lang.Double(astrField[5]).doubleValue();

    if (null == astrField[6] || astrField[6].isEmpty())
      throw new java.lang.Exception(
          "EmbeddedOptionSchedule de-serializer: Cannot locate float index");

    if (org.drip.service.stream.Serializer.NULL_SER_STRING.equalsIgnoreCase(astrField[6]))
      _strFloatIndex = "";
    else _strFloatIndex = astrField[6];

    if (null == astrField[7]
        || astrField[7].isEmpty()
        || org.drip.service.stream.Serializer.NULL_SER_STRING.equalsIgnoreCase(astrField[7]))
      throw new java.lang.Exception("EmbeddedOptionSchedule de-serializer: Cannot decode state");

    java.util.List<java.lang.Double> lsdblDate = new java.util.ArrayList<java.lang.Double>();

    java.util.List<java.lang.Double> lsdblFactor = new java.util.ArrayList<java.lang.Double>();

    if (!org.drip.math.common.StringUtil.KeyValueListFromStringArray(
        lsdblDate,
        lsdblFactor,
        astrField[7],
        getCollectionRecordDelimiter(),
        getCollectionKeyValueDelimiter()))
      throw new java.lang.Exception(
          "EmbeddedOptionSchedule de-serializer: Cannot decode hazard state");

    if (0 == lsdblDate.size() || 0 == lsdblFactor.size() || lsdblDate.size() != lsdblFactor.size())
      throw new java.lang.Exception(
          "EmbeddedOptionSchedule de-serializer: Cannot decode hazard state");

    _adblDate = new double[lsdblDate.size()];

    _adblFactor = new double[lsdblFactor.size()];

    for (int i = 0; i < _adblFactor.length; ++i) {
      _adblDate[i] = lsdblDate.get(i);

      _adblFactor[i] = lsdblFactor.get(i);
    }
  }