All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.groupbyinc.common.jackson.jq.internal.operators.DivideOperator Maven / Gradle / Ivy

There is a newer version: 198
Show newest version
package net.thisptr.jackson.jq.internal.operators;

import java.util.regex.Pattern;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.TextNode;

import net.thisptr.jackson.jq.exception.JsonQueryException;
import net.thisptr.jackson.jq.exception.JsonQueryTypeException;
import net.thisptr.jackson.jq.internal.misc.JsonNodeUtils;

public class DivideOperator implements BinaryOperator {

	@Override
	public JsonNode apply(ObjectMapper mapper, JsonNode lhs, JsonNode rhs) throws JsonQueryException {
		if (lhs.isNumber() && rhs.isNumber()) {
			final double divisor = rhs.asDouble();
			final double dividend = lhs.asDouble();
			if (divisor == 0.0)
				throw JsonQueryException.format("number (%s) and number (%s) cannot be divided because the divisor is zero", dividend, divisor);
			return JsonNodeUtils.asNumericNode(dividend / divisor);
		} else if (lhs.isTextual() && rhs.isTextual()) {
			final ArrayNode result = mapper.createArrayNode();
			for (final String token : lhs.asText().split(Pattern.quote(rhs.asText())))
				result.add(new TextNode(token));
			return result;
		} else {
			throw new JsonQueryTypeException(lhs, rhs, "cannot be divided");
		}
	}

	@Override
	public String image() {
		return "/";
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy