/**
* @author acaplan
*/
package com.flickr4java.flickr.photos.people;
import com.flickr4java.flickr.FlickrException;
import com.flickr4java.flickr.Response;
import com.flickr4java.flickr.Transport;
import com.flickr4java.flickr.people.PersonTag;
import com.flickr4java.flickr.people.PersonTagList;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.awt.Rectangle;
import java.util.HashMap;
import java.util.Map;
/**
* @author acaplan
*
*/
public class PeopleInterface {
private String apiKey;
private String sharedSecret;
private Transport transportAPI;
public PeopleInterface(String apiKey, String sharedSecret, Transport transportAPI) {
this.apiKey = apiKey;
this.sharedSecret = sharedSecret;
this.transportAPI = transportAPI;
}
public static final String METHOD_ADD = "flickr.photos.people.add";
public static final String METHOD_DELETE = "flickr.photos.people.delete";
public static final String METHOD_DELETE_COORDS = "flickr.photos.people.deleteCoords";
public static final String METHOD_EDIT_COORDS = "flickr.photos.people.editCoords";
public static final String METHOD_GET_LIST = "flickr.photos.people.getList";
/**
* Add the given person to the photo. Optionally, send in co-ordinates
*
* @param photoId
* @param userId
* @param bounds
* @throws FlickrException
*/
public void add(String photoId, String userId, Rectangle bounds) throws FlickrException {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_ADD);
parameters.put("photo_id", photoId);
parameters.put("user_id", userId);
if (bounds != null) {
parameters.put("person_x", bounds.x);
parameters.put("person_y", bounds.y);
parameters.put("person_w", bounds.width);
parameters.put("person_h", bounds.height);
}
Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
}
/**
* Delete the person from the photo
*
* @param photoId
* @param userId
* @throws FlickrException
*/
public void delete(String photoId, String userId) throws FlickrException {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_DELETE);
parameters.put("photo_id", photoId);
parameters.put("user_id", userId);
Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
}
/**
* Delete the co-ordinates that the user is shown in
*
* @param photoId
* @param userId
* @throws FlickrException
*/
public void deleteCoords(String photoId, String userId) throws FlickrException {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_DELETE_COORDS);
parameters.put("photo_id", photoId);
parameters.put("user_id", userId);
Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
}
/**
* Edit the co-ordinates that the user shows in
*
* @param photoId
* @param userId
* @param bounds
* @throws FlickrException
*/
public void editCoords(String photoId, String userId, Rectangle bounds) throws FlickrException {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_EDIT_COORDS);
parameters.put("photo_id", photoId);
parameters.put("user_id", userId);
parameters.put("person_x", bounds.x);
parameters.put("person_y", bounds.y);
parameters.put("person_w", bounds.width);
parameters.put("person_h", bounds.height);
Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
}
public PersonTagList<PersonTag> getList(String photoId) throws FlickrException{
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_GET_LIST);
parameters.put("photo_id", photoId);
Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
// @TODO this isn't a complete list ...
Element usersElement = response.getPayload();
PersonTagList<PersonTag> pt = new PersonTagList<PersonTag>();
pt.setTotal(Integer.parseInt(usersElement.getAttribute("total")));
pt.setHeight(Integer.parseInt(usersElement.getAttribute("photo_height")));
pt.setWidth(Integer.parseInt(usersElement.getAttribute("photo_width")));
NodeList usernodes = usersElement.getElementsByTagName("person");
for (int i = 0; i < usernodes.getLength(); i++) {
Element userElement = (Element) usernodes.item(i);
PersonTag user = new PersonTag();
user.setId(userElement.getAttribute("nsid"));
user.setUsername(userElement.getAttribute("username"));
user.setIconFarm(Integer.parseInt(userElement.getAttribute("iconfarm")));
user.setIconServer(Integer.parseInt(userElement.getAttribute("iconserver")));
user.setRealName(userElement.getAttribute("realname"));
user.setAddedById(userElement.getAttribute("added_by"));
user.setPathAlias(userElement.getAttribute("path_alias"));
if(!userElement.getAttribute("x").equals("")){
user.setX(Integer.parseInt(userElement.getAttribute("x")));
user.setY(Integer.parseInt(userElement.getAttribute("y")));
user.setW(Integer.parseInt(userElement.getAttribute("w")));
user.setH(Integer.parseInt(userElement.getAttribute("h")));
}
}
return pt;
}
}