package org.batfish.datamodel.assertion;
import java.util.concurrent.ConcurrentMap;
import org.batfish.common.BatfishException;
import org.batfish.common.plugin.IBatfish;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.PathNotFoundException;
public class Environment {
private IBatfish _batfish;
private Configuration _configuration;
private final Object _jsonObject;
private ConcurrentMap<String, ArrayNode> _pathCache;
public Environment(IBatfish batfish, Object jsonObject,
ConcurrentMap<String, ArrayNode> pathCache, Configuration c) {
_batfish = batfish;
_pathCache = pathCache;
_jsonObject = jsonObject;
_configuration = c;
}
public ArrayNode computePath(String path) {
ArrayNode pathResult = _pathCache.get(path);
if (pathResult == null) {
JsonPath jsonPath = JsonPath.compile(path);
try {
pathResult = jsonPath.read(_jsonObject, _configuration);
}
catch (PathNotFoundException e) {
pathResult = JsonNodeFactory.instance.arrayNode();
}
catch (Exception e) {
throw new BatfishException("Error reading JSON path: " + path, e);
}
_pathCache.put(path, pathResult);
}
return pathResult;
}
public IBatfish getBatfish() {
return _batfish;
}
public Object getJsonObject() {
return _jsonObject;
}
}