package org.handwerkszeug.riak.util;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.ArrayNode;
import org.handwerkszeug.riak.util.Streams.IORuntimeException;
/**
* @author taichi
*/
public class JsonUtil {
public static JsonNode read(InputStream in) {
try {
ObjectMapper om = new ObjectMapper();
return om.readTree(new BufferedInputStream(in));
} catch (IOException e) {
throw new IORuntimeException(e);
}
}
public static String getJsonPath(Class<?> clazz, String name) {
StringBuilder stb = new StringBuilder();
stb.append(clazz.getName().replace('.', '/'));
stb.append("_");
stb.append(name);
stb.append(".json");
return stb.toString();
}
public static JsonNode read(final Class<?> clazz, final String name) {
final JsonNode[] result = new JsonNode[1];
new Streams.using<InputStream, IOException>() {
@Override
public InputStream open() throws IOException {
ClassLoader cl = clazz.getClassLoader();
return cl.getResourceAsStream(getJsonPath(clazz, name));
}
@Override
public void handle(InputStream stream) throws IOException {
result[0] = read(stream);
}
@Override
public void happen(IOException exception) {
throw new IORuntimeException(exception);
}
};
return result[0];
}
public static List<String> to(JsonNode node) {
if (node != null && node.isArray()) {
ArrayNode an = (ArrayNode) node;
List<String> list = new ArrayList<String>(an.size());
for (Iterator<JsonNode> i = an.getElements(); i.hasNext();) {
String key = i.next().getValueAsText();
list.add(key);
}
return list;
}
return Collections.emptyList();
}
}