/*
* Copyright 2011 the original author or authors.
*
* 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.springframework.social.viadeo.api.impl;
import java.net.URI;
import java.util.List;
import org.springframework.social.viadeo.api.Career;
import org.springframework.social.viadeo.api.ContactCards;
import org.springframework.social.viadeo.api.Experience;
import org.springframework.social.viadeo.api.InboxMessage;
import org.springframework.social.viadeo.api.News;
import org.springframework.social.viadeo.api.UserOperations;
import org.springframework.social.viadeo.api.ViadeoProfile;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
public class UserTemplate extends AbstractViadeoOperations implements UserOperations {
public UserTemplate(ViadeoTemplate viadeoTemplate, boolean isAuthorized) {
super(viadeoTemplate, isAuthorized);
}
@Override
public ViadeoProfile getUserProfile() {
requireAuthorization();
return getUserProfile(ME);
}
@Override
public ViadeoProfile getUserProfile(String userId) {
return get(userId, ViadeoProfile.class);
}
@Override
public List<ViadeoProfile> getContacts(int num) {
return getContacts(ME, num);
}
@Override
public List<ViadeoProfile> getContacts(int page, int num) {
return getContacts(ME, page, num);
}
@Override
public List<ViadeoProfile> getContacts(String userId, int num) {
return getContacts(userId, 1, num);
}
@Override
public List<ViadeoProfile> getContacts(String userId, int page, int num) {
requireAuthorization();
URI uri = buildUri(userId + "/contacts").queryParam(USER_DETAIL, FULL).queryParam(LIMIT, Integer.toString(num)).queryParam(PAGE, Integer.toString(page)).build();
return get(uri, Contacts.class).getContacts();
}
@Override
public List<News> getNewsFeed() {
return getNewsFeed(ME);
}
@Override
public List<News> getNewsFeed(String userId) {
requireAuthorization();
URI uri = buildUri(userId + "/home_newsfeed").queryParam(USER_DETAIL, FULL).queryParam(LIMIT, "50").build();
return get(uri, Feed.class).getNews();
}
@Override
public List<News> getUserFeed() {
return getUserFeed(ME);
}
@Override
public List<News> getUserFeed(String userId) {
requireAuthorization();
URI uri = buildUri(userId + "/newsfeed").queryParam(USER_DETAIL, FULL).queryParam(LIMIT, "50").build();
return get(uri, Feed.class).getNews();
}
@Override
public List<Experience> getExperiences() {
return getExperiences(ME);
}
@Override
public List<Experience> getExperiences(String userId) {
requireAuthorization();
URI uri = buildUri(userId + "/career").queryParam(USER_DETAIL, FULL).build();
return get(uri, Career.class).getExperiences();
}
@Override
public void updateStatus(String status) {
requireAuthorization();
if (status.length() > 140) {
throw new IllegalArgumentException("The message is more than 140 caracters");
}
MultiValueMap<String, String> parts = new LinkedMultiValueMap<String, String>();
parts.set("message", status);
post(buildUri("status").build(), parts, String.class);
}
@Override
public List<ViadeoProfile> search(String keyword) {
requireAuthorization();
URI uri = buildUri("search/users").queryParam(USER_DETAIL, FULL).queryParam("keyword", keyword)
.queryParam(LIMIT, "50").build();
return get(uri, Contacts.class).getContacts();
}
@Override
public List<ContactCards> getContactCards(String userId) {
requireAuthorization();
URI uri = buildUri(userId + "/contact_cards").build();
return get(uri, VisitCards.class).getContactCards();
}
@Override
public List<ContactCards> getContactCards() {
return getContactCards(ME);
}
@Override
public List<InboxMessage> getInboxMessages() {
requireAuthorization();
URI uri = buildUri(ME + "/inbox").queryParam(USER_DETAIL, FULL).queryParam(LIMIT, "50").build();
return get(uri, InboxMessagesResult.class).getInboxMessages();
}
}