package com.github.pgelinas.jackson.javax.json.stream;
import java.io.*;
import java.nio.charset.*;
import java.util.*;
import javax.json.*;
import javax.json.stream.*;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.JsonNode;
import com.github.pgelinas.jackson.javax.json.*;
public class JacksonParserFactory implements JsonParserFactory {
private final JsonFactory _factory;
private Map<String, Object> _configInUse;
private final NodeFactory _nodeFactory;
public JacksonParserFactory(JsonFactory factory, NodeFactory nodeFactory) {
_factory = factory;
_nodeFactory = nodeFactory;
}
public JacksonParserFactory(Map<String, ?> config, NodeFactory nodeFactory) {
this(new JsonFactory(), nodeFactory);
_configInUse = ConfigurationUtils.configure(_factory, config);
}
@Override
public javax.json.stream.JsonParser createParser(Reader reader) {
try {
return new JacksonParser(_factory.createParser(reader));
} catch (IOException e) {
throw new JsonException("", e);
}
}
@Override
public javax.json.stream.JsonParser createParser(InputStream in) {
try {
return new JacksonParser(_factory.createParser(in));
} catch (IOException e) {
throw new JsonException("", e);
}
}
@Override
public javax.json.stream.JsonParser createParser(InputStream in, Charset charset) {
try {
return new JacksonParser(_factory.createParser(new InputStreamReader(in, charset)));
} catch (IOException e) {
throw new JsonException("", e);
}
}
@Override
public javax.json.stream.JsonParser createParser(JsonObject obj) {
return parseTree(obj);
}
@Override
public javax.json.stream.JsonParser createParser(JsonArray array) {
return parseTree(array);
}
private javax.json.stream.JsonParser parseTree(JsonValue value) {
JsonNode node;
if (value instanceof JacksonValue) {
node = ((JacksonValue<?>) value).delegate();
} else {
node = _nodeFactory.from(value);
}
return new JacksonParser(node.traverse());
}
@Override
public Map<String, ?> getConfigInUse() {
return _configInUse;
}
}