package fr.keemto.provider.yammer; import com.google.common.base.Predicate; import com.google.common.collect.Collections2; import fr.keemto.provider.social.ConnectionFetcher; import fr.keemto.provider.social.EventData; import org.springframework.social.yammer.api.MessageInfo; import org.springframework.social.yammer.api.Yammer; import org.springframework.social.yammer.api.YammerMessage; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; public class YammerFetcher extends ConnectionFetcher<Yammer, YammerMessage> { public YammerFetcher(long delay) { super(delay); } public YammerFetcher() { this(60000); } /* * TODO we fetch all messages because yammer REST API cannot filter messages by date, this API allows filtering by id (eg. get messages older than an id) */ @Override protected List<YammerMessage> fetchApi(Yammer api, long lastFetchedEventTime) { MessageInfo messageInfo = api.messageOperations().getMessagesSent(0, 0, null, 0); List<YammerMessage> messages = messageInfo.getMessages(); Collection<YammerMessage> filteredYammerMessages = removeAlreadyFetchedMessages(messages, lastFetchedEventTime); return new ArrayList<YammerMessage>(filteredYammerMessages); } private Collection<YammerMessage> removeAlreadyFetchedMessages(List<YammerMessage> messages, final long lastFetchedEventTime) { return Collections2.filter(messages, new Predicate<YammerMessage>() { @Override public boolean apply(YammerMessage message) { Date messageDate = message.getCreatedAt(); return messageDate.after(new Date(lastFetchedEventTime)); } }); } @Override protected EventData convertDataToEvent(YammerMessage message) { YammerMessage.Body body = message.getBody(); String messageContent = body.getPlain(); long messageCreationTime = message.getCreatedAt().getTime(); return new EventData(messageCreationTime, messageContent, getProviderId()); } @Override public String getProviderId() { return "yammer"; } }