/* * Copyright (C) 2012-2016 The Android Money Manager Ex Project Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.money.manager.ex.investment; import android.content.Context; import android.text.TextUtils; import com.money.manager.ex.core.NumericHelper; import com.money.manager.ex.investment.events.PriceDownloadedEvent; import com.money.manager.ex.utils.MmxDate; import com.opencsv.CSVParser; import java.io.IOException; import java.util.Date; import info.javaperformance.money.Money; import info.javaperformance.money.MoneyFactory; import timber.log.Timber; /** * Parses CSV response into price information. */ public class PriceCsvParser { private Context mContext; public PriceCsvParser(Context context) { mContext = context; //MoneyManagerApplication.getApp().iocComponent.inject(this); } public Context getContext() { return mContext; } /** * Parses CSV content and fires an PriceDownloadedEvent. * @param content CSV content to parse into price information. */ public PriceDownloadedEvent parse(String content) { // cleanup content = content.trim(); // validation if (TextUtils.isEmpty(content)) { throw new IllegalArgumentException("Downloaded CSV contents are empty"); } // parse CSV contents to get proper fields that can be saved to the database. CSVParser csvParser = new CSVParser(); String[] values; try { values = csvParser.parseLineMulti(content); } catch (IOException e) { Timber.e(e, "parsing downloaded CSV contents"); return null; } // convert csv values to their original type. String symbol = values[0]; // price String priceString = values[1]; if (!NumericHelper.isNumeric(priceString)) return null; Money price = MoneyFactory.fromString(priceString); // LSE stocks are expressed in GBp (pence), not Pounds. // From stockspanel.cpp, line 785: if (StockQuoteCurrency == "GBp") dPrice = dPrice / 100; String currency = values[3]; if (currency.equals("GBp")) { price = price.divide(100, MoneyFactory.MAX_ALLOWED_PRECISION); } // date // DateTimeFormatter format = DateTimeFormat.forPattern("MM/dd/yyyy"); // DateTime date = format.parseDateTime(values[2]); Date date = new MmxDate(values[2], "MM/dd/yyyy").toDate(); // Note: For currencies, the symbol is i.e. AUDEUR=X return new PriceDownloadedEvent(symbol, price, date); } }