package com.github.pgelinas.jackson.javax.json;
import java.util.*;
import java.util.Map.Entry;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
public final class ConfigurationUtils {
private ConfigurationUtils() {}
private static JsonFactory.Feature findFactoryFeature(String name) {
return findEnum(name, Arrays.asList(JsonFactory.Feature.values()));
}
private static JsonParser.Feature findParserFeature(String name) {
return findEnum(name, Arrays.asList(JsonParser.Feature.values()));
}
private static JsonGenerator.Feature findGeneratorFeature(String name) {
return findEnum(name, Arrays.asList(JsonGenerator.Feature.values()));
}
private static MapperFeature findMapperFeature(String name) {
return findEnum(name, Arrays.asList(MapperFeature.values()));
}
private static DeserializationFeature findDeserializationFeature(String name) {
return findEnum(name, Arrays.asList(DeserializationFeature.values()));
}
private static SerializationFeature findSerializationFeature(String name) {
return findEnum(name, Arrays.asList(SerializationFeature.values()));
}
private static <T extends Enum<T>> T findEnum(String name, List<T> values) {
for (T val : values) {
if (val.name().equals(name)) return val;
}
return null;
}
public static Map<String, Boolean> mapperConfiguration() {
Map<String, Boolean> config = new HashMap<String, Boolean>();
MapperFeature[] mapperFeatures = MapperFeature.values();
DeserializationFeature[] deserializationFeatures = DeserializationFeature.values();
SerializationFeature[] serializationFeatures = SerializationFeature.values();
for (SerializationFeature feature : serializationFeatures) {
config.put(feature.name(), feature.enabledByDefault());
}
for (DeserializationFeature feature : deserializationFeatures) {
config.put(feature.name(), feature.enabledByDefault());
}
for (MapperFeature feature : mapperFeatures) {
config.put(feature.name(), feature.enabledByDefault());
}
config.putAll(factoryConfiguration());
return config;
}
public static Map<String, Boolean> factoryConfiguration() {
JsonParser.Feature[] parserFeatures = JsonParser.Feature.values();
JsonFactory.Feature[] factoryFeatures = JsonFactory.Feature.values();
JsonGenerator.Feature[] generatorFeatures = JsonGenerator.Feature.values();
Map<String, Boolean> config = new HashMap<String, Boolean>();
for (JsonFactory.Feature feature : factoryFeatures) {
config.put(feature.name(), feature.enabledByDefault());
}
for (JsonParser.Feature feature : parserFeatures) {
config.put(feature.name(), feature.enabledByDefault());
}
for (JsonGenerator.Feature feature : generatorFeatures) {
config.put(feature.name(), feature.enabledByDefault());
}
return config;
}
public static Map<String, Object> configure(JsonFactory factory, Map<String, ?> config) {
if (config == null) return Collections.emptyMap();
Map<String, Object> inUse = new HashMap<String, Object>();
for (Entry<String, ?> entry : config.entrySet()) {
String featureName = entry.getKey();
Object value = entry.getValue();
if (!(value instanceof Boolean)) continue;
Boolean state = (Boolean) value;
if (configure(factory, featureName, state)) {
inUse.put(featureName, state);
}
}
return inUse;
}
public static Map<String, Object> configure(ObjectMapper mapper, Map<String, ?> config) {
if (config == null) return Collections.emptyMap();
Map<String, Object> inUse = new HashMap<String, Object>();
for (Entry<String, ?> entry : config.entrySet()) {
String featureName = entry.getKey();
Object value = entry.getValue();
if (!(value instanceof Boolean)) continue;
Boolean state = (Boolean) value;
if (configure(mapper, featureName, state) || configure(mapper.getFactory(), featureName, state)) {
inUse.put(featureName, state);
}
}
return inUse;
}
private static boolean configure(ObjectMapper mapper, String featureName, Boolean state) {
MapperFeature mapperFeature = findMapperFeature(featureName);
if (mapperFeature != null) {
mapper.configure(mapperFeature, state);
return true;
}
DeserializationFeature deserializationFeature = findDeserializationFeature(featureName);
if (deserializationFeature != null) {
mapper.configure(deserializationFeature, state);
return true;
}
SerializationFeature serializationFeature = findSerializationFeature(featureName);
if (serializationFeature != null) {
mapper.configure(serializationFeature, state);
return true;
}
return false;
}
private static boolean configure(JsonFactory factory, String featureName, boolean state) {
JsonFactory.Feature factoryFeature = findFactoryFeature(featureName);
if (factoryFeature != null) {
factory.configure(factoryFeature, state);
return true;
}
JsonParser.Feature parserFeature = findParserFeature(featureName);
if (parserFeature != null) {
factory.configure(parserFeature, state);
return true;
}
JsonGenerator.Feature generatorFeature = findGeneratorFeature(featureName);
if (generatorFeature != null) {
factory.configure(generatorFeature, state);
return true;
}
return false;
}
}