package kornell.api.client;
import java.util.HashMap;
import java.util.Map;
import kornell.core.entity.ActomEntries;
import kornell.core.entity.ChatThread;
import kornell.core.entity.ContentRepository;
import kornell.core.entity.Course;
import kornell.core.entity.CourseClass;
import kornell.core.entity.CourseVersion;
import kornell.core.entity.Enrollment;
import kornell.core.entity.EnrollmentEntries;
import kornell.core.entity.EnrollmentsEntries;
import kornell.core.entity.Institution;
import kornell.core.entity.People;
import kornell.core.entity.Person;
import kornell.core.entity.Roles;
import kornell.core.error.KornellErrorTO;
import kornell.core.lom.Contents;
import kornell.core.to.ChatThreadMessagesTO;
import kornell.core.to.CourseClassTO;
import kornell.core.to.CourseClassesTO;
import kornell.core.to.CourseVersionTO;
import kornell.core.to.CourseVersionsTO;
import kornell.core.to.CoursesTO;
import kornell.core.to.DashboardLeaderboardTO;
import kornell.core.to.EnrollmentLaunchTO;
import kornell.core.to.EnrollmentsTO;
import kornell.core.to.EntityChangedEventsTO;
import kornell.core.to.InstitutionEmailWhitelistTO;
import kornell.core.to.InstitutionHostNamesTO;
import kornell.core.to.InstitutionRegistrationPrefixesTO;
import kornell.core.to.LibraryFilesTO;
import kornell.core.to.PeopleTO;
import kornell.core.to.PersonTO;
import kornell.core.to.RolesTO;
import kornell.core.to.SimplePeopleTO;
import kornell.core.to.SimplePersonTO;
import kornell.core.to.TokenTO;
import kornell.core.to.UnreadChatThreadsTO;
import kornell.core.to.UserHelloTO;
import kornell.core.to.UserInfoTO;
public class MediaTypes {
static final MediaTypes instance = new MediaTypes();
Map<String, Class<?>> type2class = new HashMap<String, Class<?>>();
Map<Class<?>, String> class2type = new HashMap<Class<?>, String>();
public MediaTypes() {
//TODO: Consider using a GWT Generator instead of manual declaration
registerEntities();
registerTOs();
}
private void registerEntities() {
register(Course.TYPE, Course.class);
register(People.TYPE, People.class);
register(Person.TYPE, Person.class);
register(CourseClass.TYPE, CourseClass.class);
register(CourseVersion.TYPE, CourseVersion.class);
register(Roles.TYPE, Roles.class);
register(Institution.TYPE, Institution.class);
register(Contents.TYPE, Contents.class);
register(Enrollment.TYPE, Enrollment.class);
register(ActomEntries.TYPE, ActomEntries.class);
register(ChatThread.TYPE, ChatThread.class);
register(EnrollmentsEntries.TYPE, EnrollmentsEntries.class);
register(EnrollmentEntries.TYPE, EnrollmentEntries.class);
register(ContentRepository.TYPE, ContentRepository.class);
}
private void registerTOs() {
register(PeopleTO.TYPE, PeopleTO.class);
register(PersonTO.TYPE, PersonTO.class);
register(CoursesTO.TYPE, CoursesTO.class);
register(CourseClassesTO.TYPE, CourseClassesTO.class);
register(CourseClassTO.TYPE, CourseClassTO.class);
register(CourseVersionsTO.TYPE, CourseVersionsTO.class);
register(CourseVersionTO.TYPE, CourseVersionTO.class);
register(UserInfoTO.TYPE, UserInfoTO.class);
register(UserHelloTO.TYPE, UserHelloTO.class);
register(RolesTO.TYPE, RolesTO.class);
register(EnrollmentsTO.TYPE, EnrollmentsTO.class);
register(LibraryFilesTO.TYPE, LibraryFilesTO.class);
register(UnreadChatThreadsTO.TYPE, UnreadChatThreadsTO.class);
register(ChatThreadMessagesTO.TYPE, ChatThreadMessagesTO.class);
register(InstitutionRegistrationPrefixesTO.TYPE,
InstitutionRegistrationPrefixesTO.class);
register(InstitutionHostNamesTO.TYPE, InstitutionHostNamesTO.class);
register(KornellErrorTO.TYPE, KornellErrorTO.class);
register(EnrollmentLaunchTO.TYPE, EnrollmentLaunchTO.class);
// When auth filter sends 401, it adds the charset and we can't do
// anything about it
register(KornellErrorTO.TYPE + ";charset=utf-8", KornellErrorTO.class);
register(TokenTO.TYPE, TokenTO.class);
register(SimplePeopleTO.TYPE, SimplePeopleTO.class);
register(SimplePersonTO.TYPE, SimplePersonTO.class);
register(InstitutionEmailWhitelistTO.TYPE, InstitutionEmailWhitelistTO.class);
register(EntityChangedEventsTO.TYPE, EntityChangedEventsTO.class);
register(DashboardLeaderboardTO.TYPE, DashboardLeaderboardTO.class);
}
private void register(String type, Class<?> clazz) {
type2class.put(type.toLowerCase(), clazz);
class2type.put(clazz, type.toLowerCase());
}
public static MediaTypes get() {
return instance;
}
public Class<?> classOf(String type) {
return type2class.get(type);
}
public String typeOf(Class<?> clazz) {
return class2type.get(clazz);
}
public boolean containsType(String type) {
return type2class.containsKey(type);
}
public boolean containsClass(Class<?> clazz) {
return class2type.containsKey(clazz);
}
}