JsonNodeComparator.java

package io.github.pojotools.flat2pojo.core.engine;

import com.fasterxml.jackson.databind.JsonNode;
import java.util.Comparator;

/**
 * Comparator for JsonNode values with numeric and text fallback. Single Responsibility: JsonNode
 * comparison logic.
 */
final class JsonNodeComparator implements Comparator<JsonNode> {

  @Override
  public int compare(final JsonNode a, final JsonNode b) {
    if (bothAreNumeric(a, b)) {
      return compareAsNumbers(a, b);
    }
    return compareAsText(a, b);
  }

  private boolean bothAreNumeric(final JsonNode a, final JsonNode b) {
    return a.isNumber() && b.isNumber();
  }

  private int compareAsNumbers(final JsonNode a, final JsonNode b) {
    return Double.compare(a.doubleValue(), b.doubleValue());
  }

  private int compareAsText(final JsonNode a, final JsonNode b) {
    return a.asText().compareTo(b.asText());
  }
}