public JsonNode valueToJson(Object value, ValueType valueType, WriteOptions options, Namespaces namespaces,
LRepository repository) throws RepositoryException, InterruptedException {
String name = valueType.getBaseName();
JsonNodeFactory factory = JsonNodeFactory.instance;
JsonNode result;
if (name.equals("LIST")) {
result = listToJson(value, valueType.getNestedValueType(), options, namespaces, repository);
} else if (name.equals("PATH")) {
result = pathToJson(value, valueType.getNestedValueType(), options, namespaces, repository);
} else if (name.equals("STRING")) {
result = factory.textNode((String)value);
} else if (name.equals("LONG")) {
result = factory.numberNode((Long)value);
} else if (name.equals("DOUBLE")) {
result = factory.numberNode((Double)value);
} else if (name.equals("BOOLEAN")) {
result = factory.booleanNode((Boolean)value);
} else if (name.equals("INTEGER")) {
result = factory.numberNode((Integer)value);
} else if (name.equals("URI") || name.equals("DATETIME") || name.equals("DATE") || name.equals("LINK")) {
result = factory.textNode(value.toString());
} else if (name.equals("DECIMAL")) {
result = factory.numberNode((BigDecimal)value);
} else if (name.equals("BLOB")) {
Blob blob = (Blob)value;
result = BlobConverter.toJson(blob);
} else if (name.equals("RECORD")){
result = toJson((Record)value, options, namespaces, repository);
} else if (name.equals("BYTEARRAY")) {
result = factory.binaryNode(((ByteArray) value).getBytes());
} else {
throw new RuntimeException("Unsupported value type: " + name);
}
return result;