Package org.openbankdata.bank.americanexpress.service

Source Code of org.openbankdata.bank.americanexpress.service.AmericanExpressAccountService

package org.openbankdata.bank.americanexpress.service;

import org.openbankdata.bank.americanexpress.client.AmericanExpressBankClient;
import org.openbankdata.core.Account;
import org.openbankdata.core.AccountType;
import org.openbankdata.core.client.BankClient;
import org.openbankdata.core.client.BankRequest;
import org.openbankdata.core.client.BankResponse;
import org.openbankdata.core.service.AccountService;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Currency;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* Service class for accessing account data at AmericanExpress.
*/
public class AmericanExpressAccountService implements AccountService {

  public static final String ACCOUNTS_URL =
      "https://global.americanexpress.com/myca/intl/acctsumm/emea/accountSummary.do?request_type=&Face=sv_SE";

  private static final Pattern ACCOUNT_PATTERN = Pattern.compile("sorted_index=([0-9]*)");

  private BankClient mBankClient;

  public AmericanExpressAccountService(AmericanExpressBankClient pBankClient) {
    mBankClient = pBankClient;
  }

  @Override
  public List<Account> getAccounts() {
    List<Account> vAccounts = new ArrayList<Account>();
    BankResponse vAccountsRequest = mBankClient.get(new BankRequest(ACCOUNTS_URL));
    String response = vAccountsRequest.body();
    Document doc = Jsoup.parse(response);
    Element el = doc.getElementById("summaryImageHeaderRow");

    if (el != null) {
      Account account = new Account();
      account.setName(el.getElementById("headerSectionLeft").select("span.cardTitle a").text());
      account.setAccountType(AccountType.LIABILITY);
      Element link = el.select("div.summaryTitles a").first();
      account.setAccountNumber(link.text());
      account.setCurrency(Currency.getInstance("SEK"));
      account.setId(parseAccountId(link));

      String balance = doc.getElementById("colOSBalance").select("div.summaryValues").text();
      balance = balance.replaceAll("[^\\d-,]", "").replace(",", ".");
      account.setBalance(new BigDecimal(balance));
      account.setAvailable(account.getBalance());
      vAccounts.add(account);
    }
    return vAccounts;
  }

  private String parseAccountId(Element elem) {
    Matcher matcher = ACCOUNT_PATTERN.matcher(elem.toString());
    while (matcher.find()) {
      return matcher.group(1);
    }
    return null;
  }

}
TOP

Related Classes of org.openbankdata.bank.americanexpress.service.AmericanExpressAccountService

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.