package com.flickr4java.flickr.photosets.comments;
import com.flickr4java.flickr.FlickrException;
import com.flickr4java.flickr.Response;
import com.flickr4java.flickr.Transport;
import com.flickr4java.flickr.photos.comments.Comment;
import com.flickr4java.flickr.util.XMLUtilities;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Access to the <b>flickr.photosets.comments</b> methods.
*
* @author till (Till Krech) flickr:extranoise
* @version $Id: PhotosetsCommentsInterface.java,v 1.3 2009/07/11 20:30:27 x-mago Exp $
*/
public class PhotosetsCommentsInterface {
public static final String METHOD_ADD_COMMENT = "flickr.photosets.comments.addComment";
public static final String METHOD_DELETE_COMMENT = "flickr.photosets.comments.deleteComment";
public static final String METHOD_EDIT_COMMENT = "flickr.photosets.comments.editComment";
public static final String METHOD_GET_LIST = "flickr.photosets.comments.getList";
private String apiKey;
private String sharedSecret;
private Transport transportAPI;
public PhotosetsCommentsInterface(String apiKey, String sharedSecret, Transport transport) {
this.apiKey = apiKey;
this.sharedSecret = sharedSecret;
this.transportAPI = transport;
}
/**
* Add a comment to a photoset. This method requires authentication with 'write' permission.
*
* @param photosetId
* The id of the photoset to add a comment to.
* @param commentText
* Text of the comment
* @return the comment id
* @throws FlickrException
*/
public String addComment(String photosetId, String commentText) throws FlickrException {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_ADD_COMMENT);
parameters.put("photoset_id", photosetId);
parameters.put("comment_text", commentText);
// Note: This method requires an HTTP POST request.
Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
// response:
// <comment id="97777-12492-72057594037942601" />
Element commentElement = response.getPayload();
return commentElement.getAttribute("id");
}
/**
* Delete a photoset comment as the currently authenticated user.
*
* @param commentId
* The id of the comment to delete from a photoset.
* @throws FlickrException
*/
public void deleteComment(String commentId) throws FlickrException {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_DELETE_COMMENT);
parameters.put("comment_id", commentId);
// Note: This method requires an HTTP POST request.
Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
// This method has no specific response - It returns an empty sucess response if it completes without error.
}
/**
* Edit the text of a comment as the currently authenticated user. This method requires authentication with 'write' permission.
*
* @param commentId
* The id of the comment to edit.
* @param commentText
* Update the comment to this text.
* @throws FlickrException
*/
public void editComment(String commentId, String commentText) throws FlickrException {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_EDIT_COMMENT);
parameters.put("comment_id", commentId);
parameters.put("comment_text", commentText);
// Note: This method requires an HTTP POST request.
Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
// This method has no specific response - It returns an empty sucess response if it completes without error.
}
/**
* Returns the comments for a photoset.
*
* This method does not require authentication.
*
* @param photosetId
* The id of the photoset to fetch comments for.
* @return a list of {@link Comment} objects
* @throws FlickrException
*/
public List<Comment> getList(String photosetId) throws FlickrException {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_GET_LIST);
parameters.put("photoset_id", photosetId);
Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
// response:
// <comments photoset_id="72157594152539675">
// <comment
// id="2534725-72157594152539675-72157594172966066"
// author="99589152@N00"
// authorname="ortrun"
// datecreate="1150905040"
// permalink="http://www.flickr.com/photos/extranoise/sets/72157594152539675/comments#comment72157594172966066">
// really unreal!
// </comment>
// <comment
// id="2534725-72157594152539675-72157594176993150"
// author="47093120@N00"
// authorname="nis.jensen"
// datecreate="1151259227"
// permalink="http://www.flickr.com/photos/extranoise/sets/72157594152539675/comments#comment72157594176993150">
// Wow - you're better than most - this was a great view - i'll just take it again!
// </comment>
// <comment
// id="2534725-72157594152539675-72157594176996639"
// author="47093120@N00"
// authorname="nis.jensen"
// datecreate="1151259453"
// permalink="http://www.flickr.com/photos/extranoise/sets/72157594152539675/comments#comment72157594176996639">
// Second it's even better!!!!
// </comment>
// </comments>
List<Comment> comments = new ArrayList<Comment>();
Element commentsElement = response.getPayload();
NodeList commentNodes = commentsElement.getElementsByTagName("comment");
int n = commentNodes.getLength();
for (int i = 0; i < n; i++) {
Comment comment = new Comment();
Element commentElement = (Element) commentNodes.item(i);
comment.setId(commentElement.getAttribute("id"));
comment.setAuthor(commentElement.getAttribute("author"));
comment.setAuthorName(commentElement.getAttribute("authorname"));
comment.setPermaLink(commentElement.getAttribute("permalink"));
long unixTime = 0;
try {
unixTime = Long.parseLong(commentElement.getAttribute("datecreate"));
} catch (NumberFormatException e) {
// what shall we do?
e.printStackTrace();
}
comment.setDateCreate(new Date(unixTime * 1000L));
comment.setText(XMLUtilities.getValue(commentElement));
comments.add(comment);
}
return comments;
}
}