LdaptiveObjectMapperModule.java

package org.bremersee.ldaptive;

import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.databind.module.SimpleModule;
import java.io.Serial;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import org.bremersee.ldaptive.converter.JacksonDnDeserializer;
import org.bremersee.ldaptive.converter.JacksonDnSerializer;
import org.bremersee.ldaptive.converter.JacksonLdapEntryDeserializer;
import org.bremersee.ldaptive.converter.JacksonLdapEntrySerializer;
import org.ldaptive.LdapEntry;
import org.ldaptive.dn.Dn;

/**
 * The ldaptive object mapper module.
 */
public class LdaptiveObjectMapperModule extends SimpleModule {

  @Serial
  private static final long serialVersionUID = 1L;

  /**
   * The constant TYPE_ID.
   */
  public static final String TYPE_ID = LdaptiveObjectMapperModule.class.getName();

  /**
   * Instantiates a new ldaptive object mapper module.
   */
  public LdaptiveObjectMapperModule() {
    super(
        TYPE_ID,
        getVersion(),
        Map.of(
            Dn.class, new JacksonDnDeserializer(),
            LdapEntry.class, new JacksonLdapEntryDeserializer()),
        List.of(new JacksonDnSerializer(), new JacksonLdapEntrySerializer()));
  }

  private static Version getVersion() {

    int defaultMajor = 5;
    int defaultMinor = 0;
    int defaultPatchLevel = 0;
    String defaultSnapshotInfo = "SNAPSHOT";

    int major = defaultMajor;
    int minor = defaultMinor;
    int patchLevel = defaultPatchLevel;
    String snapshotInfo = defaultSnapshotInfo;

    String version = LdaptiveObjectMapperModule.class.getPackage().getImplementationVersion();
    if (version != null) {
      try {
        int i = version.indexOf('-');
        if (i < 0) {
          snapshotInfo = null;
        } else {
          snapshotInfo = version.substring(i + 1);
          String[] a = version.substring(0, i).split(Pattern.quote("."));
          major = Integer.parseInt(a[0]);
          minor = Integer.parseInt(a[1]);
          patchLevel = Integer.parseInt(a[2]);
        }

      } catch (RuntimeException e) {
        major = defaultMajor;
        minor = defaultMinor;
        snapshotInfo = defaultSnapshotInfo;
      }
    }

    return new Version(major, minor, patchLevel, snapshotInfo, "org.bremersee",
        "spring-integration-ldaptive");
  }

}