package it.demo.twitterlike.rest.api.impl;
import it.demo.twitterlike.rest.api.Message;
import it.demo.twitterlike.rest.api.MessageOperations;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.hateoas.Link;
import org.springframework.hateoas.PagedResources;
import org.springframework.hateoas.Resource;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.web.client.RestTemplate;
public class MessageTemplate extends AbstractTemplate implements
MessageOperations {
private final ParameterizedTypeReference<Resource<Message>> singleTypeParameter = new ParameterizedTypeReference<Resource<Message>>() {
};
private final ParameterizedTypeReference<PagedResources<Resource<Message>>> pagedTypeParameter = new ParameterizedTypeReference<PagedResources<Resource<Message>>>() {
};
public MessageTemplate(String baseUrl, RestTemplate restTemplate) {
super(baseUrl, restTemplate);
}
@Override
protected String getBaseContext() {
return "messages";
}
public PagedResources<Resource<Message>> findDashboardMessages(
Integer page, Integer size, Link link) {
return doFind(pagedTypeParameter, page, size, null,
link == null ? buildUrl(getBaseContext())
: link.getHref());
}
/*public PagedResources<Resource<Message>> findAll(Integer page,
Integer size, String sort, Link link) {
return doFind(pagedTypeParameter, page, size, sort,
link == null ? buildUrl(getBaseContext()) : link.getHref());
}*/
public Resource<Message> getByLink(Link link) {
return getByLink(singleTypeParameter, link);
}
public Resource<Message> getById(Long id) {
return getById(singleTypeParameter, id);
}
public Resource<Message> create(String message) {
Resource<Message> savedItem = restTemplate.exchange(
buildUrl(getBaseContext()), HttpMethod.POST,
new HttpEntity<String>(message), singleTypeParameter).getBody();
return savedItem;
}
public Resource<Message> update(Long id, String message) {
Resource<Message> result = restTemplate.exchange(
buildUrl(getBaseContext() + "/{id}"), HttpMethod.PUT,
new HttpEntity<String>(message), singleTypeParameter, id)
.getBody();
return result;
}
public void delete(Long id) {
restTemplate.delete(buildUrl(getBaseContext() + "/{id}"), id);
}
}