
com.bluelinelabs.logansquare.LoganSquare Maven / Gradle / Ivy
package com.bluelinelabs.logansquare;
import com.bluelinelabs.logansquare.typeconverters.DefaultCalendarConverter;
import com.bluelinelabs.logansquare.typeconverters.DefaultDateConverter;
import com.bluelinelabs.logansquare.typeconverters.TypeConverter;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringWriter;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** The point of all interaction with this library. */
public class LoganSquare {
private static final Map OBJECT_MAPPERS = new HashMap();
private static final Map TYPE_CONVERTERS = new HashMap<>();
static {
registerTypeConverter(Date.class, new DefaultDateConverter());
registerTypeConverter(Calendar.class, new DefaultCalendarConverter());
}
/** The JsonFactory that should be used throughout the entire app. */
public static final JsonFactory JSON_FACTORY = new JsonFactory();
/**
* Parse an object from an InputStream.
*
* @param is The InputStream, most likely from your networking library.
* @param jsonObjectClass The @JsonObject class to parse the InputStream into
*/
public static E parse(InputStream is, Class jsonObjectClass) throws IOException {
return mapperFor(jsonObjectClass).parse(is);
}
/**
* Parse an object from a String. Note: parsing from an InputStream should be preferred over parsing from a String if possible.
*
* @param jsonString The JSON string being parsed.
* @param jsonObjectClass The @JsonObject class to parse the InputStream into
*/
public static E parse(String jsonString, Class jsonObjectClass) throws IOException {
return mapperFor(jsonObjectClass).parse(jsonString);
}
/**
* Parse a list of objects from an InputStream.
*
* @param is The inputStream, most likely from your networking library.
* @param jsonObjectClass The @JsonObject class to parse the InputStream into
*/
public static List parseList(InputStream is, Class jsonObjectClass) throws IOException {
return mapperFor(jsonObjectClass).parseList(is);
}
/**
* Parse a list of objects from a String. Note: parsing from an InputStream should be preferred over parsing from a String if possible.
*
* @param jsonString The JSON string being parsed.
* @param jsonObjectClass The @JsonObject class to parse the InputStream into
*/
public static List parseList(String jsonString, Class jsonObjectClass) throws IOException {
return mapperFor(jsonObjectClass).parseList(jsonString);
}
/**
* Serialize an object to a JSON String.
*
* @param object The object to serialize.
*/
@SuppressWarnings("unchecked")
public static String serialize(E object) throws IOException {
return mapperFor((Class)object.getClass()).serialize(object);
}
/**
* Serialize an object to an OutputStream.
*
* @param object The object to serialize.
* @param os The OutputStream being written to.
*/
@SuppressWarnings("unchecked")
public static void serialize(E object, OutputStream os) throws IOException {
mapperFor((Class)object.getClass()).serialize(object, os);
}
/**
* Serialize a list of objects to a JSON String.
*
* @param list The list of objects to serialize.
* @param jsonObjectClass The @JsonObject class of the list elements
*/
public static String serialize(List list, Class jsonObjectClass) throws IOException {
return mapperFor(jsonObjectClass).serialize(list);
}
/**
* Serialize a list of objects to an OutputStream.
*
* @param list The list of objects to serialize.
* @param os The OutputStream to which the list should be serialized
* @param jsonObjectClass The @JsonObject class of the list elements
*/
public static void serialize(List list, OutputStream os, Class jsonObjectClass) throws IOException {
mapperFor(jsonObjectClass).serialize(list, os);
}
/**
* Returns a JsonMapper for a given class that has been annotated with @JsonObject.
*
* @param cls The class for which the JsonMapper should be fetched.
*/
@SuppressWarnings("unchecked")
public static JsonMapper mapperFor(Class cls) throws NoSuchMapperException {
JsonMapper mapper = OBJECT_MAPPERS.get(cls);
if (mapper == null) {
try {
Class> mapperClass = Class.forName(cls.getName() + Constants.MAPPER_CLASS_SUFFIX);
mapper = (JsonMapper)mapperClass.newInstance();
OBJECT_MAPPERS.put(cls, mapper);
} catch (Exception e) {
throw new NoSuchMapperException(cls, e);
}
}
return mapper;
}
/**
* Returns a TypeConverter for a given class.
*
* @param cls The class for which the TypeConverter should be fetched.
*/
@SuppressWarnings("unchecked")
public static TypeConverter typeConverterFor(Class cls) throws NoSuchTypeConverterException {
TypeConverter typeConverter = TYPE_CONVERTERS.get(cls);
if (typeConverter == null) {
throw new NoSuchTypeConverterException(cls);
}
return typeConverter;
}
/**
* Register a new TypeConverter for parsing and serialization.
*
* @param cls The class for which the TypeConverter should be used.
* @param converter The TypeConverter
*/
public static void registerTypeConverter(Class cls, TypeConverter converter) {
TYPE_CONVERTERS.put(cls, converter);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy