package org.springframework.social.flickr.api.impl;
import java.util.List;
import org.springframework.social.flickr.api.MediaEnum;
import org.springframework.social.flickr.api.Photoset;
import org.springframework.social.flickr.api.PhotosetOperations;
import org.springframework.social.flickr.api.Photosets;
import org.springframework.social.flickr.api.PrivacyFilterEnum;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.util.StringUtils;
import org.springframework.web.client.RestTemplate;
/**
* @author HemantS
*
*/
public class PhotosetTemplate extends AbstractFlickrOperations implements
PhotosetOperations {
private final RestTemplate restTemplate;
public PhotosetTemplate(RestTemplate restTemplate,
boolean isAuthorizedForUser,String consumerKey) {
super(isAuthorizedForUser,consumerKey);
this.restTemplate = restTemplate;
}
@Override
public Photoset create(String title, String description,
String primaryPhotoId) {
requireAuthorization();
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
parameters.set("title", title);
if (description != null) {
parameters.set("description", description);
}
parameters.set("primary_photo_id", primaryPhotoId);
return restTemplate.postForObject(buildUri("flickr.photosets.create"),
parameters, Photoset.class);
}
@Override
public boolean addPhoto(String photosetId, String photoId) {
requireAuthorization();
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
parameters.set("photoset_id", photosetId);
restTemplate.postForObject(buildUri("flickr.photosets.addPhoto"),
parameters, Object.class);
return true;
}
@Override
public boolean editMeta(String photosetId, String title, String description) {
requireAuthorization();
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
parameters.set("photoset_id", photosetId);
parameters.set("title", title);
parameters.set("description", description);
restTemplate.postForObject(buildUri("flickr.photosets.editMeta"),
parameters, Object.class);
return true;
}
@Override
public boolean editPhotos(String photosetId, String primaryPhotoId,
List<String> photoIds) {
requireAuthorization();
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
parameters.set("photoset_id", photosetId);
parameters.set("primary_photo_id ", primaryPhotoId);
parameters.set("photo_ids",
StringUtils.arrayToCommaDelimitedString(photoIds.toArray()));
restTemplate.postForObject(buildUri("flickr.photosets.editPhotos"),
parameters, Object.class);
return true;
}
@Override
public Photoset getInfo(String photosetId) {
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
parameters.set("photoset_id", photosetId);
return restTemplate.postForObject(buildUri("flickr.photosets.getInfo"),
parameters, Photoset.class);
}
@Override
public Photosets getList(String userId, String page, String perPage) {
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
parameters.set("user_id", userId);
if (page != null) {
parameters.set("page", page);
}
if (perPage != null) {
parameters.set("per_page", perPage);
}
return restTemplate.postForObject(buildUri("flickr.photosets.getList"),
parameters, Photosets.class);
}
@Override
public boolean delete(String photosetId) {
requireAuthorization();
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
if (photosetId != null)
parameters.set("photoset_id", photosetId);
restTemplate.postForObject(buildUri("flickr.photosets.delete"),parameters, Object.class);
return true;
}
@Override
public Photoset getPhotos(String photosetId, String[] extras,
PrivacyFilterEnum privacyFilter, String perPage, String page, MediaEnum media) {
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
if (photosetId != null)
parameters.set("photoset_id", photosetId);
if (extras != null)
parameters.set("extras", StringUtils.arrayToCommaDelimitedString(extras));
if (privacyFilter != null)
parameters.set("privacy_filter", privacyFilter.getPrivacy());
if (perPage != null)
parameters.set("per_page", perPage);
if (page != null)
parameters.set("page", page);
if (media != null)
parameters.set("media", media.getMediaEnum());
return restTemplate.getForObject(buildUri("flickr.photosets.getPhotos", parameters),Photoset.class);
}
@Override
public boolean orderSets(String[] photosetIds) {
requireAuthorization();
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
if (photosetIds != null)
parameters.set("photoset_ids",StringUtils.arrayToCommaDelimitedString(photosetIds));
restTemplate.postForObject(buildUri("flickr.photosets.orderSets"),parameters, Object.class);
return true;
}
@Override
public boolean removePhoto(String photosetId, String photoId) {
requireAuthorization();
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
if (photosetId != null)
parameters.set("photoset_id", photosetId);
if (photoId != null)
parameters.set("photo_id", photoId);
restTemplate.postForObject(buildUri("flickr.photosets.removePhoto"),
parameters, Object.class);
return true;
}
@Override
public boolean removePhotos(String photosetId, String photoIds[]) {
requireAuthorization();
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
if (photosetId != null)
parameters.set("photoset_id",photosetId);
if (photoIds != null)
parameters.set("photo_ids", StringUtils.arrayToCommaDelimitedString(photoIds));
restTemplate.postForObject(buildUri("flickr.photosets.removePhotos"),
parameters, Object.class);
return true;
}
@Override
public boolean reorderPhotos(String photosetId, String[] photoIds) {
requireAuthorization();
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
if (photosetId != null)
parameters.set("photoset_id", photosetId);
if (photoIds != null)
parameters.set("photo_ids",StringUtils.arrayToCommaDelimitedString(photoIds));
restTemplate.postForObject(buildUri("flickr.photosets.reorderPhotos"),
parameters, Object.class);
return true;
}
@Override
public boolean setPrimaryPhoto(String photosetId, String photoId) {
requireAuthorization();
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
if (photosetId != null)
parameters.set("photoset_id", photosetId);
if (photoId != null)
parameters.set("photo_id", photoId);
restTemplate.postForObject(
buildUri("flickr.photosets.setPrimaryPhoto"), parameters,
Object.class);
return true;
}
/*
* Need to handle in special way
*
* @Override public PhotoCount getContext(String photoId, String photosetId)
* { MultiValueMap<String, String> parameters = new
* LinkedMultiValueMap<String, String>(); parameters.set("photo_id ",
* photoId); parameters.set("photoset_id", photosetId); return
* restTemplate.postForObject(buildUri("flickr.photosets.getContext"),
* parameters, PhotoCount.class); }
*/
}