package edu.lmu.cs.headmaster.ws.resource;
import java.util.Arrays;
import java.util.List;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import javax.xml.bind.JAXBContext;
import com.sun.jersey.api.json.JSONConfiguration;
import com.sun.jersey.api.json.JSONJAXBContext;
import edu.lmu.cs.headmaster.ws.domain.Event;
import edu.lmu.cs.headmaster.ws.domain.GPA;
import edu.lmu.cs.headmaster.ws.domain.Grant;
import edu.lmu.cs.headmaster.ws.domain.Major;
import edu.lmu.cs.headmaster.ws.domain.Student;
import edu.lmu.cs.headmaster.ws.domain.StudentRecord;
import edu.lmu.cs.headmaster.ws.domain.User;
import edu.lmu.cs.headmaster.ws.domain.UserRole;
import edu.lmu.cs.headmaster.ws.types.Role;
import edu.lmu.cs.headmaster.ws.types.Term;
/**
* A provider which ensures that JSON content is generated using the <em>natural</em> style,
* rather than the default <em>mapped</em> style.
*/
@Provider
public class NaturalJsonContextResolver implements ContextResolver<JAXBContext> {
private final JAXBContext context;
private final Class<?>[] types = {
// Domain classes requiring JSON serialization.
Event.class,
GPA.class,
Grant.class,
Major.class,
Role.class,
Student.class,
StudentRecord.class,
Term.class,
User.class,
UserRole.class
};
private final List<Class<?>> typeList = Arrays.asList(types);
/**
* Creates the context to use the natural JSON style.
*/
public NaturalJsonContextResolver() throws Exception {
context = new JSONJAXBContext(JSONConfiguration.natural().build(), types);
}
@Override
public JAXBContext getContext(Class<?> objectType) {
return (typeList.contains(objectType)) ? context : null;
}
}