package uk.ac.cam.echo.client; import org.codehaus.jackson.Version; import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.module.SimpleModule; import org.glassfish.jersey.media.sse.SseFeature; import uk.ac.cam.echo.client.data.*; import uk.ac.cam.echo.data.*; import uk.ac.cam.echo.data.resources.ConferenceResource; import uk.ac.cam.echo.data.resources.ConversationResource; import uk.ac.cam.echo.data.resources.UserResource; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; public class ClientApi { private static JacksonJaxbJsonProvider getJacksonProvider() { ObjectMapper mapper = new ObjectMapper(); SimpleModule testModule = new SimpleModule("testModule", new Version(1,0,0,null)) .addAbstractTypeMapping(Conference.class, ConferenceData.class) .addAbstractTypeMapping(Conversation.class, ConversationData.class) .addAbstractTypeMapping(Message.class, MessageData.class) .addAbstractTypeMapping(User.class, UserData.class) .addAbstractTypeMapping(Interest.class, InterestData.class) .addAbstractTypeMapping(Tag.class, TagData.class); mapper.registerModule(testModule); JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider(); provider.setMapper(mapper); return provider; } public UserResource userResource; public ConferenceResource conferenceResource; public ConversationResource conversationResource; private Client client; private WebTarget server; public ClientApi(String address) { client = ClientBuilder.newClient(); client.register(getJacksonProvider()); client.register(SseFeature.class); // client.register(LoggingFilter.class); server = client.target(address); userResource = (UserResource) ResourceFactory.newResource(UserResource.class, this); conferenceResource = (ConferenceResource) ResourceFactory.newResource(ConferenceResource.class, this); conversationResource = (ConversationResource) ResourceFactory.newResource(ConversationResource.class, this); } public Message newMessage(Conversation conversation) { MessageData res = new MessageData(); res.setConversation(conversation); res.setApi(this); return res; } public Conversation newConversation() { ConversationData res = new ConversationData(); res.setApi(this); return res; } public Conference newConference() { ConferenceData res = new ConferenceData(); res.setApi(this); return res; } public Tag newTag(Conversation conversation) { TagData tag = new TagData(); tag.setApi(this); tag.configureResource(conversation.getId()); return tag; } public Interest newInterest(User user) { InterestData interest = new InterestData(); interest.setApi(this); interest.configureResource(user.getId()); return interest; } public User newUser() { UserData res = new UserData(); res.setApi(this); return res; } public Client getClient() { return client; } public WebTarget getServer() { return server; } }