Package org.openbankdata.bank.americanexpress.client

Source Code of org.openbankdata.bank.americanexpress.client.AmericanExpressTransactionPaginationStrategy

package org.openbankdata.bank.americanexpress.client;

import org.openbankdata.core.client.BankResponse;
import org.openbankdata.core.client.Pagination;
import org.openbankdata.core.client.PaginationStrategy;

import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

import java.util.Locale;

/**
* PaginationStrategy for AmericanExpress transactions.
*/
public class AmericanExpressTransactionPaginationStrategy implements PaginationStrategy {

  private LocalDate mFromDateTime;
  private LocalDate mToDateTime;


  private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormat.forPattern("MMM d, yyyy").withLocale(
      new Locale("sv-SE"));

  public AmericanExpressTransactionPaginationStrategy(LocalDate pFromDateTime, LocalDate pToDateTime) {
    mFromDateTime = pFromDateTime;
    mToDateTime = pToDateTime;
  }

  public AmericanExpressTransactionPaginationStrategy() {}

  @Override
  public Pagination parsePagination(BankResponse pBankResponse) {
    Pagination pagination = new Pagination();

    Document doc = Jsoup.parse(pBankResponse.body());
    Element element = doc.select("#viewPeriod option[selected]").first();

    Element previous = element.previousElementSibling();
    if (previous != null) {
      pagination.setPrev(Integer.parseInt(previous.val()));
    }

    Element next = element.nextElementSibling();
    if (next != null && isDateWithinRange(next)) {
      pagination.setNext(Integer.parseInt(next.val()));
    } else {
      pagination.setNext(-1);
    }
    pagination.setFirst(0);
    pagination.setLast(Integer.parseInt(element.lastElementSibling().val()));
    return pagination;
  }

  private boolean isDateWithinRange(Element elem) {
    String fromDateString = elem.text().substring(0, elem.text().indexOf("till")).trim();
    LocalDate toDate = LocalDate.now();
    if (!"0".equals(elem.val())) {
      String toDateString = elem.text().substring(fromDateString.length() + 5).trim();
      toDate = DATE_FORMATTER.parseLocalDate(toDateString);
    }
    return mToDateTime == null ? true : mFromDateTime.isBefore(toDate);
  }

  @Override
  public String getPaginationParameter() {
    return "BPIndex";
  }

}
TOP

Related Classes of org.openbankdata.bank.americanexpress.client.AmericanExpressTransactionPaginationStrategy

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.