/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.sync.engine.util;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import com.fasterxml.jackson.databind.ObjectWriter;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
/**
* @author Shinn Lok
*/
public class JSONUtil {
public static JsonNode readTree(InputStream inputStream)
throws IOException {
return _objectMapper.readTree(inputStream);
}
public static JsonNode readTree(String content) throws IOException {
return _objectMapper.readTree(content);
}
public static <T> T readValue(String content, Class<T> clazz)
throws IOException {
ObjectReader objectReader = getObjectReader(clazz);
return objectReader.readValue(content);
}
public static <T> T readValue(
String content, TypeReference<?> typeReference)
throws IOException {
ObjectReader objectReader = getObjectReader(typeReference);
return objectReader.readValue(content);
}
public static void writeValue(File file, Object object) throws IOException {
ObjectWriter objectWriter = getObjectWriter();
objectWriter.writeValue(file, object);
}
public static byte[] writeValueAsBytes(Object object) throws IOException {
ObjectWriter objectWriter = getObjectWriter();
return objectWriter.writeValueAsBytes(object);
}
public static String writeValueAsString(Object object) throws IOException {
ObjectWriter objectWriter = getObjectWriter();
return objectWriter.writeValueAsString(object);
}
protected static ObjectReader getObjectReader(Class<?> clazz) {
ObjectReader objectReader = _classObjectReaderMap.get(clazz);
if (objectReader == null) {
objectReader = _objectMapper.readerFor(clazz);
_classObjectReaderMap.put(clazz, objectReader);
}
return objectReader;
}
protected static ObjectReader getObjectReader(
TypeReference<?> typeReference) {
ObjectReader objectReader = _typeReferenceObjectReaderMap.get(
typeReference);
if (objectReader == null) {
objectReader = _objectMapper.readerFor(typeReference);
_typeReferenceObjectReaderMap.put(typeReference, objectReader);
}
return objectReader;
}
protected static ObjectWriter getObjectWriter() {
if (_objectWriter == null) {
_objectWriter = _objectMapper.writer();
}
return _objectWriter;
}
private static final Map<Class<?>, ObjectReader> _classObjectReaderMap =
new HashMap<>();
private static final ObjectMapper _objectMapper = new ObjectMapper();
private static ObjectWriter _objectWriter;
private static final Map<TypeReference<?>, ObjectReader>
_typeReferenceObjectReaderMap = new HashMap<>();
}