org.agorava.yammer.impl.MessageServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.agorava.yammer.impl.MessageServiceImpl.java

Source

/*
 * Copyright 2014 Agorava
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.agorava.yammer.impl;

import org.agorava.yammer.MessageService;
import org.agorava.yammer.YammerBaseService;
import org.agorava.yammer.model.MessageInfo;
import org.agorava.yammer.model.YammerPostDetails;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

/**
 * @author Morten Andersen-Gott
 * @author Werner Keil
 *
 */
public class MessageServiceImpl extends YammerBaseService implements MessageService {

    private RestTemplate restTemplate;

    /**
     * @param restTemplate
     */
    public MessageServiceImpl(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public MessageInfo getMessages(long olderThan, long newerThan, String threaded, int limit) {
        MultiValueMap<String, String> params = buildParams(olderThan, newerThan, threaded, limit);
        return restTemplate.getForObject(buildUri("messages.json", params), MessageInfo.class);
    }

    public MessageInfo getMessagesFollowing(long olderThan, long newerThan, String threaded, int limit) {
        MultiValueMap<String, String> params = buildParams(olderThan, newerThan, threaded, limit);
        return restTemplate.getForObject(buildUri("messages/following.json", params), MessageInfo.class);
    }

    public MessageInfo getMessagesSent(long olderThan, long newerThan, String threaded, int limit) {
        MultiValueMap<String, String> params = buildParams(olderThan, newerThan, threaded, limit);
        return restTemplate.getForObject(buildUri("messages/sent.json", params), MessageInfo.class);
    }

    public MessageInfo getMessagesPrivate(long olderThan, long newerThan, String threaded, int limit) {
        MultiValueMap<String, String> params = buildParams(olderThan, newerThan, threaded, limit);
        return restTemplate.getForObject(buildUri("messages/private.json", params), MessageInfo.class);
    }

    public MessageInfo getMessagesAboutTopic(long topicId, long olderThan, long newerThan, String threaded,
            int limit) {
        MultiValueMap<String, String> params = buildParams(olderThan, newerThan, threaded, limit);
        return restTemplate.getForObject(buildUri("messages/about_topic/" + topicId + ".json", params),
                MessageInfo.class);
    }

    public MessageInfo getMessagesInGroup(long groupId, long olderThan, long newerThan, String threaded,
            int limit) {
        MultiValueMap<String, String> params = buildParams(olderThan, newerThan, threaded, limit);
        return restTemplate.getForObject(buildUri("messages/in_group/" + groupId + ".json", params),
                MessageInfo.class);
    }

    public MessageInfo getMessagesInThread(long threadId, long olderThan, long newerThan, int limit) {
        MultiValueMap<String, String> params = buildParams(olderThan, newerThan, null, limit);
        return restTemplate.getForObject(buildUri("messages/in_thread/" + threadId + ".json", params),
                MessageInfo.class);
    }

    public MessageInfo getMessagesFromUser(long userId, long olderThan, long newerThan, String threaded,
            int limit) {
        MultiValueMap<String, String> params = buildParams(olderThan, newerThan, threaded, limit);
        return restTemplate.getForObject(buildUri("messages/from_user/" + userId + ".json", params),
                MessageInfo.class);
    }

    public MessageInfo getMessagesLikedByUser(long userId, long olderThan, long newerThan, String threaded,
            int limit) {
        MultiValueMap<String, String> params = buildParams(olderThan, newerThan, threaded, limit);
        return restTemplate.getForObject(buildUri("messages/liked_by/" + userId + ".json", params),
                MessageInfo.class);
    }

    public MessageInfo getMessagesReceived(long olderThan, long newerThan, String threaded, int limit) {
        MultiValueMap<String, String> params = buildParams(olderThan, newerThan, threaded, limit);
        return restTemplate.getForObject(buildUri("messages/received.json", params), MessageInfo.class);
    }

    public MessageInfo postUpdate(String message) {
        return postUpdate(message, new YammerPostDetails());
    }

    public MessageInfo postUpdate(String message, YammerPostDetails details) {
        LinkedMultiValueMap<String, Object> params = new LinkedMultiValueMap<String, Object>();
        params.set("body", message);
        params.putAll(details.toParameters());
        return restTemplate.postForObject(buildUri("messages.json"), params, MessageInfo.class);
    }

    private MultiValueMap<String, String> buildParams(long olderThan, long newerThan, String threaded, int limit) {
        MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
        if (olderThan != 0) {
            params.set("older_than", String.valueOf(olderThan));
        }
        if (newerThan != 0) {
            params.set("newer_than", String.valueOf(newerThan));
        }
        if (threaded != null) {
            params.set("threaded", String.valueOf(threaded));
        }
        if (limit != 0) {
            params.set("limit", String.valueOf(limit));
        }
        return params;
    }

    public void like(long messageId) {
        restTemplate.postForObject(
                buildUri("messages/liked_by/current.json", "message_id", String.valueOf(messageId)), null,
                String.class);
    }

    public void unlike(long messageId) {
        restTemplate.delete(buildUri("messages/liked_by/current.json", "message_id", String.valueOf(messageId)));
    }

    public void delete(long messageId) {
        restTemplate.delete(buildUri("messages/" + messageId)); //400 in case message does not exist
    }

    @Override
    public MessageInfo postUpdate(String message, YammerPostDetails details) {
        // TODO Auto-generated method stub
        return null;
    }

}