package com.jayway.jsonpath.internal.function;

import com.jayway.jsonpath.InvalidPathException;
import com.jayway.jsonpath.internal.function.json.Append;
import com.jayway.jsonpath.internal.function.numeric.Average;
import com.jayway.jsonpath.internal.function.numeric.Max;
import com.jayway.jsonpath.internal.function.numeric.Min;
import com.jayway.jsonpath.internal.function.numeric.StandardDeviation;
import com.jayway.jsonpath.internal.function.numeric.Sum;
import com.jayway.jsonpath.internal.function.text.Concatenate;
import com.jayway.jsonpath.internal.function.text.Length;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

Implements a factory that given a name of the function will return the Function implementation, or null if the value is not obtained. Leverages the function's name in order to determine which function to execute which is maintained internally here via a static map Created by mattg on 6/27/15.
/** * Implements a factory that given a name of the function will return the Function implementation, or null * if the value is not obtained. * * Leverages the function's name in order to determine which function to execute which is maintained internally * here via a static map * * Created by mattg on 6/27/15. */
public class PathFunctionFactory { public static final Map<String, Class> FUNCTIONS; static { // New functions should be added here and ensure the name is not overridden Map<String, Class> map = new HashMap<String, Class>(); // Math Functions map.put("avg", Average.class); map.put("stddev", StandardDeviation.class); map.put("sum", Sum.class); map.put("min", Min.class); map.put("max", Max.class); // Text Functions map.put("concat", Concatenate.class); // JSON Entity Functions map.put("length", Length.class); map.put("size", Length.class); map.put("append", Append.class); FUNCTIONS = Collections.unmodifiableMap(map); }
Returns the function by name or throws InvalidPathException if function not found.
Params:
  • name – The name of the function
Throws:
See Also:
Returns: The implementation of a function
/** * Returns the function by name or throws InvalidPathException if function not found. * * @see #FUNCTIONS * @see PathFunction * * @param name * The name of the function * * @return * The implementation of a function * * @throws InvalidPathException */
public static PathFunction newFunction(String name) throws InvalidPathException { Class functionClazz = FUNCTIONS.get(name); if(functionClazz == null){ throw new InvalidPathException("Function with name: " + name + " does not exist."); } else { try { return (PathFunction)functionClazz.newInstance(); } catch (Exception e) { throw new InvalidPathException("Function of name: " + name + " cannot be created", e); } } } }