toASN1 method

ASN1Object toASN1()

Convert a Filter expression to an ASN1 Object This may be called recursively

Implementation

ASN1Object toASN1() {
  switch (filterType) {
    case Filter.TYPE_EQUALITY:
    case Filter.TYPE_GREATER_OR_EQUAL:
    case Filter.TYPE_LESS_OR_EQUAL:
    case Filter.TYPE_APPROXIMATE_MATCH:
      var seq = ASN1Sequence(tag: filterType);
      seq.add(ASN1OctetString(attributeName));
      seq.add(ASN1OctetString(LdapUtil.escapeString(assertionValue!)));
      return seq;

    case Filter.TYPE_AND:
    case Filter.TYPE_OR:
      assert(subFilters.isNotEmpty);
      var aset = ASN1Set(tag: filterType);
      for (var subf in subFilters) {
        aset.add(subf.toASN1());
      }
      return aset;

    case Filter.TYPE_PRESENCE:
      return ASN1OctetString(attributeName, tag: filterType);

    case Filter.TYPE_NOT:
      // like AND/OR but with only one subFilter.
      assert(subFilters.isNotEmpty);
      var notObj = ASN1Set(tag: filterType);
      notObj.add(subFilters[0].toASN1());
      return notObj;

    case Filter.TYPE_EXTENSIBLE_MATCH:
      throw 'Not Done yet. Fix me!!';

    default:
      throw LdapUsageException(
          'Unexpected filter type = $filterType. This should never happen');
  }
}