Package com.dongxuexidu.douban4j.service

Source Code of com.dongxuexidu.douban4j.service.DoubanMailService

package com.dongxuexidu.douban4j.service;

import com.dongxuexidu.douban4j.constants.RequestUrls;
import com.dongxuexidu.douban4j.constants.StatusCode;
import com.dongxuexidu.douban4j.model.app.DoubanException;
import com.dongxuexidu.douban4j.model.common.DoubanAttributeObj;
import com.dongxuexidu.douban4j.model.common.DoubanEntityObj;
import com.dongxuexidu.douban4j.model.doumail.DoubanMailEntryObj;
import com.dongxuexidu.douban4j.model.doumail.DoubanMailFeedObj;
import com.dongxuexidu.douban4j.utils.ErrorHandler;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

/**
*
* @author Zhibo Wei <uglytroll@dongxuexidu.com>
*/
public class DoubanMailService extends DoubanService {

  final static Logger logger = Logger.getLogger(DoubanMailService.class.getName());

  public DoubanMailService(String accessToken) {
    super(accessToken);
  }

  public DoubanMailFeedObj getMailsFromInbox() throws DoubanException, IOException {
    return getMailsFromInbox(null, null);
  }

  public DoubanMailFeedObj getMailsFromInbox(Integer startIndex, Integer maxResult) throws DoubanException, IOException {
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    if (startIndex != null) {
      params.add(new BasicNameValuePair("start-index", "" + startIndex));
    }
    if (maxResult != null) {
      params.add(new BasicNameValuePair("max-results", "" + maxResult));
    }
    String url = RequestUrls.DOUBAN_MAIL_PREFIX + "/inbox";
    DoubanMailFeedObj result = this.client.getResponse(url, params, DoubanMailFeedObj.class, true);
    return result;
  }

  public DoubanMailFeedObj getMailsFromOutbox() throws DoubanException, IOException {
    return getMailsFromOutbox(null, null);
  }

  public DoubanMailFeedObj getMailsFromOutbox(Integer startIndex, Integer maxResult) throws DoubanException, IOException {
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    if (startIndex != null) {
      params.add(new BasicNameValuePair("start-index", "" + startIndex));
    }
    if (maxResult != null) {
      params.add(new BasicNameValuePair("max-results", "" + maxResult));
    }
    String url = RequestUrls.DOUBAN_MAIL_PREFIX + "/outbox";
    DoubanMailFeedObj result = this.client.getResponse(url, params, DoubanMailFeedObj.class, true);
    return result;
  }

  public DoubanMailFeedObj getUnreadMails() throws DoubanException, IOException {
    return getUnreadMails(null, null);
  }

  public DoubanMailFeedObj getUnreadMails(Integer startIndex, Integer maxResult) throws DoubanException, IOException {
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    if (startIndex != null) {
      params.add(new BasicNameValuePair("start-index", "" + startIndex));
    }
    if (maxResult != null) {
      params.add(new BasicNameValuePair("max-results", "" + maxResult));
    }
    String url = RequestUrls.DOUBAN_MAIL_PREFIX + "/inbox/unread";
    DoubanMailFeedObj result = this.client.getResponse(url, params, DoubanMailFeedObj.class, true);
    return result;
  }

  public DoubanMailEntryObj getMailById(long mailId, boolean keepUnread) throws DoubanException, IOException {
    String url = RequestUrls.DOUBAN_MAIL_PREFIX + "/" + mailId;
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    if (keepUnread) {
      params.add(new BasicNameValuePair("keep-unread", "true"));
    }
    DoubanMailEntryObj result = this.client.getResponse(url, params, DoubanMailEntryObj.class, true);
    return result;
  }

  /**
   * Didn't do anything with the Captcha
   *
   * @param receiverId
   * @param content
   * @param title
   * @return true if successfully sent (or captcha is needed), false otherwise
   * @throws DoubanException
   * @throws IOException
   */
  public boolean sendMail(String receiverId, String content, String title) throws DoubanException, IOException {
    String url = RequestUrls.DOUBAN_MAIL_PREFIX + "s";
    DoubanMailEntryObj entry = generateDoubanMailEntryObj(receiverId, content, title);
    if (entry == null) {
      throw ErrorHandler.getCustomDoubanException(100, "Illegal mail data provided");
    }
    try {
      int responseCode = this.client.postResponseCodeOnly(url, entry, true);
      if (responseCode != StatusCode.HTTP_STATUS_CREATED) {
        return false;
      }
      return true;
    } catch (DoubanException ex) {
      if (ex.getErrorCode() == ErrorHandler.HTTP_RESPONSE_ERROR_STATUS_CODE) {
        logger.warning(ex.getErrorMsg());
        return false;
      } else {
        throw ex;
      }
    }
  }

  public boolean markMailAsRead(long mailId) throws IOException, DoubanException {
    String url = RequestUrls.DOUBAN_MAIL_PREFIX + "/" + mailId;
    DoubanMailEntryObj requestEntry = generateOnlyAttribute(null, true);
    try {
      int responseCode = this.client.putResponseCodeOnly(url, requestEntry, true);
      if (responseCode != StatusCode.HTTP_STATUS_CREATED) {
        return false;
      }
      return true;
    } catch (DoubanException ex) {
      if (ex.getErrorCode() == ErrorHandler.HTTP_RESPONSE_ERROR_STATUS_CODE) {
        logger.warning(ex.getErrorMsg());
        return false;
      } else {
        throw ex;
      }
    }
  }

  public boolean deleteMail(long mailId) throws IOException, DoubanException {
    String url = RequestUrls.DOUBAN_MAIL_PREFIX + "/" + mailId;
    try {
      int responseCode = this.client.deleteResponse(url, true);
      if (responseCode != StatusCode.HTTP_STATUS_OK) {
        return false;
      }
      return true;
    } catch (DoubanException ex) {
      if (ex.getErrorCode() == ErrorHandler.HTTP_RESPONSE_ERROR_STATUS_CODE) {
        logger.warning(ex.getErrorMsg());
        return false;
      } else {
        throw ex;
      }
    }
  }

  public boolean markMailReadInBatch(List<Long> ids) throws IOException, DoubanException {
    List<DoubanMailEntryObj> entries = new ArrayList<DoubanMailEntryObj>();
    for (long id : ids) {
      DoubanMailEntryObj entry = generateOnlyAttribute("" + id, true);
      entries.add(entry);
    }
    DoubanMailFeedObj feed = new DoubanMailFeedObj();
    feed.setEntries(entries);
    String url = RequestUrls.DOUBAN_MAIL_PREFIX + "/";
    try {
      int responseCode = this.client.putResponseCodeOnly(url, feed, true);
      if (responseCode != StatusCode.HTTP_STATUS_ACCEPTED) {
        return false;
      }
      return true;
    } catch (DoubanException ex) {
      if (ex.getErrorCode() == ErrorHandler.HTTP_RESPONSE_ERROR_STATUS_CODE) {
        logger.warning(ex.getErrorMsg());
        return false;
      } else {
        throw ex;
      }
    }
  }

  public boolean deleteMailsInBatch(List<Long> ids) throws IOException, DoubanException {
    List<DoubanMailEntryObj> entries = new ArrayList<DoubanMailEntryObj>();
    for (long id : ids) {
      DoubanMailEntryObj entry = generateOnlyAttribute("" + id, false);
      entries.add(entry);
    }
    DoubanMailFeedObj feed = new DoubanMailFeedObj();
    feed.setEntries(entries);
    String url = RequestUrls.DOUBAN_MAIL_PREFIX + "/delete";
    try {
      int responseCode = this.client.postResponseCodeOnly(url, feed, true);
      if (responseCode != StatusCode.HTTP_STATUS_OK) {
        return false;
      }
      return true;
    } catch (DoubanException ex) {
      if (ex.getErrorCode() == ErrorHandler.HTTP_RESPONSE_ERROR_STATUS_CODE) {
        logger.warning(ex.getErrorMsg());
        return false;
      } else {
        throw ex;
      }
    }
  }

  private DoubanMailEntryObj generateOnlyAttribute(String id, boolean hasAttr) {
    DoubanMailEntryObj entity = new DoubanMailEntryObj();
    if (hasAttr) {
      DoubanAttributeObj att = new DoubanAttributeObj();
      att.setName("unread");
      att.setValue("false");
      entity.setAttr(att);
    }
    if (id != null) {
      if (!id.startsWith("http://")) {
        id = "http://api.douban.com/doumail/" + id;
      }
      entity.setId(id);
    }
    return entity;
  }

  private DoubanMailEntryObj generateDoubanMailEntryObj(String receiverId, String content, String title) {
    if (content == null || content.isEmpty() || title == null || title.isEmpty() || receiverId == null || receiverId.isEmpty()) {
      return null;
    }
    String fullId = receiverId;
    if (!receiverId.startsWith("http://")) {
      fullId = "http://api.douban.com/people/" + receiverId;
    }
    DoubanEntityObj entity = new DoubanEntityObj();
    entity.setName("receiver");
    entity.setUri(fullId);
    DoubanMailEntryObj obj = new DoubanMailEntryObj();
    obj.setEntity(entity);
    obj.setTitle(title);
    obj.setContent(content);
    return obj;
  }
}
TOP

Related Classes of com.dongxuexidu.douban4j.service.DoubanMailService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.