DnValueTranscoder.java

package org.bremersee.ldaptive.transcoder;

import static java.util.Objects.isNull;

import java.util.Objects;
import org.ldaptive.dn.DefaultRDnNormalizer;
import org.ldaptive.dn.Dn;
import org.ldaptive.dn.RDnNormalizer;
import org.ldaptive.transcode.AbstractStringValueTranscoder;

/**
 * The distinguished name value transcoder.
 */
public class DnValueTranscoder extends AbstractStringValueTranscoder<Dn> {

  private final RDnNormalizer rdnNormalizer;

  /**
   * Instantiates a new distinguished name value transcoder.
   */
  public DnValueTranscoder() {
    this(new DefaultRDnNormalizer());
  }

  /**
   * Instantiates a new distinguished name value transcoder.
   *
   * @param rdnNormalizer the rdn normalizer
   */
  public DnValueTranscoder(RDnNormalizer rdnNormalizer) {
    this.rdnNormalizer = Objects.requireNonNullElseGet(rdnNormalizer, DefaultRDnNormalizer::new);
  }

  @Override
  public Dn decodeStringValue(String dn) {
    if (isNull(dn) || dn.trim().isEmpty()) {
      return null;
    }
    return new Dn(dn.trim());
  }

  @Override
  public String encodeStringValue(Dn dn) {
    if (isNull(dn) || dn.isEmpty()) {
      return null;
    }
    return dn.format(rdnNormalizer);
  }

  @Override
  public Class<Dn> getType() {
    return Dn.class;
  }
}