/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java
https://gitlab.com/sugesk/flickr4java · Java · 238 lines · 153 code · 36 blank · 49 comment · 12 complexity · b688d742eae38417998aba05711e590c MD5 · raw file
- package com.flickr4java.flickr.groups.discuss;
-
- import com.flickr4java.flickr.FlickrException;
- import com.flickr4java.flickr.Response;
- import com.flickr4java.flickr.Transport;
- import com.flickr4java.flickr.util.XMLUtilities;
-
- import org.w3c.dom.Element;
- import org.w3c.dom.NodeList;
-
- import java.util.HashMap;
- import java.util.Map;
-
- public class GroupDiscussInterface {
-
- /**
- * Group.Discuss Interface.
- *
- * @author Jonathan Willis
- */
- public static final String METHOD_TOPICS_GET_LIST = "flickr.groups.discuss.topics.getList";
-
- public static final String METHOD_TOPICS_GET_INFO = "flickr.groups.discuss.topics.getInfo";
-
- public static final String METHOD_REPLIES_GET_LIST = "flickr.groups.discuss.replies.getList";
-
- public static final String METHOD_REPLIES_GET_INFO = "flickr.groups.discuss.replies.getInfo";
-
- private final String apiKey;
-
- private final String sharedSecret;
-
- private final Transport transportAPI;
-
- public GroupDiscussInterface(String apiKey, String sharedSecret, Transport transportAPI) {
- this.apiKey = apiKey;
- this.sharedSecret = sharedSecret;
- this.transportAPI = transportAPI;
- }
-
- /**
- * Get a list of topics from a group.
- *
- * @param groupId
- * Unique identifier of a group returns a list of topics for a given group {@link Group}.
- * @param perPage
- * Number of records per page.
- * @param page
- * Result-section.
- * @return A group topic list
- * @throws FlickrException
- * @see <a href="http://www.flickr.com/services/api/flickr.groups.discuss.topics.getList.html">API Documentation</a>
- */
- public TopicList<Topic> getTopicsList(String groupId, int perPage, int page) throws FlickrException {
- TopicList<Topic> topicList = new TopicList<Topic>();
- Map<String, Object> parameters = new HashMap<String, Object>();
- parameters.put("method", METHOD_TOPICS_GET_LIST);
-
- parameters.put("group_id", groupId);
-
- if (perPage > 0) {
- parameters.put("per_page", "" + perPage);
- }
- if (page > 0) {
- parameters.put("page", "" + page);
- }
-
- Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret);
- if (response.isError()) {
- throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
- }
-
- Element topicElements = response.getPayload();
- topicList.setPage(topicElements.getAttribute("page"));
- topicList.setPages(topicElements.getAttribute("pages"));
- topicList.setPerPage(topicElements.getAttribute("perpage"));
- topicList.setTotal(topicElements.getAttribute("total"));
- topicList.setGroupId(topicElements.getAttribute("group_id"));
- topicList.setIconServer(Integer.parseInt(topicElements.getAttribute("iconserver")));
- topicList.setIconFarm(Integer.parseInt(topicElements.getAttribute("iconfarm")));
- topicList.setName(topicElements.getAttribute("name"));
- topicList.setMembers(Integer.parseInt(topicElements.getAttribute("members")));
- topicList.setPrivacy(Integer.parseInt(topicElements.getAttribute("privacy")));
- topicList.setLanguage(topicElements.getAttribute("lang"));
- topicList.setIsPoolModerated("1".equals(topicElements.getAttribute("ispoolmoderated")));
-
- NodeList topicNodes = topicElements.getElementsByTagName("topic");
- for (int i = 0; i < topicNodes.getLength(); i++) {
- Element element = (Element) topicNodes.item(i);
- topicList.add(parseTopic(element));
- }
- return topicList;
- }
-
- /**
- * Get info for a given topic
- *
- * @param topicId
- * Unique identifier of a topic for a given group {@link Topic}.
- * @return A group topic
- * @throws FlickrException
- * @see <a href="http://www.flickr.com/services/api/flickr.groups.discuss.topics.getInfo.html">API Documentation</a>
- */
- public Topic getTopicInfo(String topicId) throws FlickrException {
- Map<String, Object> parameters = new HashMap<String, Object>();
- parameters.put("method", METHOD_TOPICS_GET_INFO);
- parameters.put("topic_id", topicId);
-
- Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret);
- if (response.isError()) {
- throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
- }
-
- Element topicElement = response.getPayload();
-
- return parseTopic(topicElement);
- }
-
- /**
- * Get list of replies
- *
- * @param topicId
- * Unique identifier of a topic for a given group {@link Topic}.
- * @return A reply object
- * @throws FlickrException
- * @see <a href="http://www.flickr.com/services/api/flickr.groups.discuss.replies.getList.html">API Documentation</a>
- */
- public ReplyObject getReplyList(String topicId, int perPage, int page) throws FlickrException {
- ReplyList<Reply> reply = new ReplyList<Reply>();
- TopicList<Topic> topic = new TopicList<Topic>();
- Map<String, Object> parameters = new HashMap<String, Object>();
- parameters.put("method", METHOD_REPLIES_GET_LIST);
-
- parameters.put("topic_id", topicId);
-
- if (perPage > 0) {
- parameters.put("per_page", "" + perPage);
- }
- if (page > 0) {
- parameters.put("page", "" + page);
- }
-
- Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret);
- if (response.isError()) {
- throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
- }
-
- Element replyElements = response.getPayload();
- ReplyObject ro = new ReplyObject();
- NodeList replyNodes = replyElements.getElementsByTagName("reply");
- for (int i = 0; i < replyNodes.getLength(); i++) {
- Element replyNodeElement = (Element) replyNodes.item(i);
- // Element replyElement = XMLUtilities.getChild(replyNodeElement, "reply");
- reply.add(parseReply(replyNodeElement));
- ro.setReplyList(reply);
-
- }
- NodeList topicNodes = replyElements.getElementsByTagName("topic");
- for (int i = 0; i < topicNodes.getLength(); i++) {
- Element replyNodeElement = (Element) replyNodes.item(i);
- // Element topicElement = XMLUtilities.getChild(replyNodeElement, "topic");
- topic.add(parseTopic(replyNodeElement));
- ro.setTopicList(topic);
- }
-
- return ro;
- }
-
- /**
- * Get info for a given topic reply
- *
- * @param topicId
- * Unique identifier of a topic for a given group {@link Topic}.
- * @param replyId
- * Unique identifier of a reply for a given topic {@link Reply}.
- * @return A group topic
- * @throws FlickrException
- * @see <a href="http://www.flickr.com/services/api/flickr.groups.discuss.replies.getInfo.html">API Documentation</a>
- */
- public Reply getReplyInfo(String topicId, String replyId) throws FlickrException {
- Map<String, Object> parameters = new HashMap<String, Object>();
- parameters.put("method", METHOD_REPLIES_GET_INFO);
- parameters.put("topic_id", topicId);
- parameters.put("reply_id", replyId);
-
- Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret);
- if (response.isError()) {
- throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
- }
-
- Element replyElement = response.getPayload();
-
- return parseReply(replyElement);
- }
-
- private Topic parseTopic(Element tElement) {
- Topic topic = new Topic();
- topic.setAuthorId(tElement.getAttribute("author"));
- topic.setAuthorname(tElement.getAttribute("authorname"));
- topic.setIsCanDelete("1".equals(tElement.getAttribute("can_delete")));
- topic.setIsCanEdit("1".equals(tElement.getAttribute("can_edit")));
- topic.setIsCanReply("1".equals(tElement.getAttribute("can_reply")));
- if (!tElement.getAttribute("count_replies").equals("")) {
- topic.setCountReplies(Integer.parseInt(tElement.getAttribute("count_replies")));
- }
- topic.setDatecreate(tElement.getAttribute("datecreate"));
- topic.setDatelastpost(tElement.getAttribute("datelastpost"));
- topic.setIconfarm(Integer.parseInt(tElement.getAttribute("iconfarm")));
- topic.setIconserver(Integer.parseInt(tElement.getAttribute("iconserver")));
- topic.setIsLocked("1".equals(tElement.getAttribute("is_locked")));
- topic.setMessage(XMLUtilities.getChildValue(tElement, "message"));
- topic.setRole(tElement.getAttribute("role"));
- topic.setIsSticky("1".equals(tElement.getAttribute("is_sticky")));
- topic.setSubject(tElement.getAttribute("subject"));
- topic.setTopicId(tElement.getAttribute("id"));
- topic.setIsPro("1".equals(tElement.getAttribute("is_pro")));
- topic.setLastReply(tElement.getAttribute("last_reply"));
- return topic;
- }
-
- private Reply parseReply(Element rElement) {
- Reply reply = new Reply();
- reply.setAuthorId(rElement.getAttribute("author"));
- reply.setAuthorname(rElement.getAttribute("authorname"));
- reply.setIsCanDelete("1".equals(rElement.getAttribute("can_delete")));
- reply.setIsCanEdit("1".equals(rElement.getAttribute("can_edit")));
- reply.setDatecreate(rElement.getAttribute("datecreate"));
- reply.setLastEdit(rElement.getAttribute("lastedit"));
- reply.setIconfarm(Integer.parseInt(rElement.getAttribute("iconfarm")));
- reply.setIconserver(Integer.parseInt(rElement.getAttribute("iconserver")));
- reply.setMessage(XMLUtilities.getChildValue(rElement, "message"));
- reply.setRole(rElement.getAttribute("role"));
- reply.setReplyId(rElement.getAttribute("id"));
- reply.setIsPro("1".equals(rElement.getAttribute("is_pro")));
- return reply;
- }
-
- }