package org.skyscreamer.yoga.util;
import org.skyscreamer.yoga.view.json.*;
import java.io.IOException;
import java.io.OutputStream;
/**
* User: nk
* Date: 12/17/13
*/
public class JacksonLibraryUtil {
public static final String SYSTEM_PROPERTY = "yoga.jackson-library";
public static final String JACKSON = "jackson";
public static final String JACKSON2 = "jackson2";
public static final boolean jackson2Present =
classIsPresent("com.fasterxml.jackson.databind.ObjectMapper", JacksonLibraryUtil.class.getClassLoader()) &&
classIsPresent("com.fasterxml.jackson.core.JsonGenerator", JacksonLibraryUtil.class.getClassLoader());
public static final boolean jacksonPresent =
classIsPresent("org.codehaus.jackson.map.ObjectMapper", JacksonLibraryUtil.class.getClassLoader()) &&
classIsPresent("org.codehaus.jackson.JsonGenerator", JacksonLibraryUtil.class.getClassLoader());
private static boolean classIsPresent(String className, ClassLoader classLoader) {
try {
if (classLoader == null) {
Class.forName(className);
} else {
classLoader.loadClass(className);
}
return true;
} catch (Throwable ex) {
return false;
}
}
public static JsonSerializer selectJacksonSerializer() {
String property = System.getProperty( SYSTEM_PROPERTY );
if (jackson2Present && (property == null || property.equals(JACKSON2)))
{
return new Jackson2Serializer();
}
else if (jacksonPresent && (property == null || property.equals(JACKSON)))
{
return new JacksonSerializer();
}
else throw new IllegalStateException( "Jackson library not in classpath" );
}
public static GeneratorAdapter selectGeneratorAdapter(OutputStream os) throws IOException {
String property = System.getProperty( SYSTEM_PROPERTY );
if (jackson2Present && (property == null || property.equals(JACKSON2)))
{
return new Jackson2JsonGeneratorAdapter( os );
}
else if (jacksonPresent && (property == null || property.equals(JACKSON)))
{
return new JacksonJsonGeneratorAdapter( os );
}
else throw new IllegalStateException( "Jackson Library not in classpath" );
}
}