package com.flickr4java.flickr.groups.members;
import com.flickr4java.flickr.FlickrException;
import com.flickr4java.flickr.Response;
import com.flickr4java.flickr.Transport;
import com.flickr4java.flickr.util.StringUtilities;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* Members Interface.
*
* @author mago
* @version $Id: MembersInterface.java,v 1.1 2009/06/21 19:55:15 x-mago Exp $
*/
public class MembersInterface {
public static final String METHOD_GET_LIST = "flickr.groups.members.getList";
private String apiKey;
private String sharedSecret;
private Transport transportAPI;
public MembersInterface(String apiKey, String sharedSecret, Transport transportAPI) {
this.apiKey = apiKey;
this.sharedSecret = sharedSecret;
this.transportAPI = transportAPI;
}
/**
* Get a list of the members of a group. The call must be signed on behalf of a Flickr member, and the ability to see the group membership will be
* determined by the Flickr member's group privileges.
*
* @param groupId
* Return a list of members for this group. The group must be viewable by the Flickr member on whose behalf the API call is made.
* @param memberTypes
* A set of Membertypes as available as constants in {@link Member}.
* @param perPage
* Number of records per page.
* @param page
* Result-section.
* @return A members-list
* @throws FlickrException
* @see <a href="http://www.flickr.com/services/api/flickr.groups.members.getList.html">API Documentation</a>
*/
public MembersList<Member> getList(String groupId, Set<String> memberTypes, int perPage, int page) throws FlickrException {
MembersList<Member> members = new MembersList<Member>();
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_GET_LIST);
parameters.put("group_id", groupId);
if (perPage > 0) {
parameters.put("per_page", "" + perPage);
}
if (page > 0) {
parameters.put("page", "" + page);
}
if (memberTypes != null) {
parameters.put("membertypes", StringUtilities.join(memberTypes, ","));
}
Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
Element mElement = response.getPayload();
members.setPage(mElement.getAttribute("page"));
members.setPages(mElement.getAttribute("pages"));
members.setPerPage(mElement.getAttribute("perpage"));
members.setTotal(mElement.getAttribute("total"));
NodeList mNodes = mElement.getElementsByTagName("member");
for (int i = 0; i < mNodes.getLength(); i++) {
Element element = (Element) mNodes.item(i);
members.add(parseMember(element));
}
return members;
}
private Member parseMember(Element mElement) {
Member member = new Member();
member.setId(mElement.getAttribute("nsid"));
member.setUserName(mElement.getAttribute("username"));
member.setIconServer(mElement.getAttribute("iconserver"));
member.setIconFarm(mElement.getAttribute("iconfarm"));
member.setMemberType(mElement.getAttribute("membertype"));
return member;
}
}