Skip to content
This repository was archived by the owner on Jun 27, 2020. It is now read-only.

Commit 5de959c

Browse files
author
Evgenii Kanivets
committed
#23[1h]. Add IReport, IExchangeRepoProvider interfaces. Add base implementations.
1 parent ca90f59 commit 5de959c

File tree

6 files changed

+215
-20
lines changed

6 files changed

+215
-20
lines changed

app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Report.java

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
import com.blogspot.e_kanivets.moneytracker.R;
66
import com.blogspot.e_kanivets.moneytracker.MtApp;
77
import com.blogspot.e_kanivets.moneytracker.controller.ExchangeRateController;
8+
import com.blogspot.e_kanivets.moneytracker.report.ExchangeRateProvider;
9+
import com.blogspot.e_kanivets.moneytracker.report.base.IExchangeRateProvider;
810

911
import java.util.ArrayList;
1012
import java.util.HashMap;
1113
import java.util.List;
12-
import java.util.Map;
13-
import java.util.TreeMap;
1414

1515
/**
1616
* Created on 11/09/14.
@@ -20,18 +20,17 @@
2020
public class Report {
2121
private List<Record> records;
2222
private String currency;
23-
private ExchangeRateController exchangeRateController;
2423
private List<Record> summaryRecordList;
2524
private List<Pair<String, Integer>> reportList;
2625
private List<Pair<String, Integer>> summaryReportList;
27-
private Map<String, ExchangeRate> rateMap;
26+
27+
private IExchangeRateProvider rateProvider;
2828

2929
public Report(List<Record> records, String currency, ExchangeRateController exchangeRateController) {
3030
this.records = records;
3131
this.currency = currency;
32-
this.exchangeRateController = exchangeRateController;
32+
rateProvider = new ExchangeRateProvider(currency, exchangeRateController);
3333

34-
rateMap = initRateMap();
3534
makeReport();
3635
}
3736

@@ -63,7 +62,7 @@ private void makeReport() {
6362

6463
int convertedPrice = record.getPrice();
6564
if (!currency.equals(record.getCurrency())) {
66-
ExchangeRate rate = rateMap.get(record.getCurrency());
65+
ExchangeRate rate = rateProvider.getRate(record);
6766
if (rate != null) convertedPrice *= rate.getAmount();
6867
}
6968

@@ -180,17 +179,4 @@ private void sortRecordList(List<Record> list) {
180179
}
181180
}
182181
}
183-
184-
private Map<String, ExchangeRate> initRateMap() {
185-
Map<String, ExchangeRate> rateMap = new TreeMap<>();
186-
187-
for (ExchangeRate rate : exchangeRateController.readAll()) {
188-
if (!currency.equals(rate.getToCurrency())) continue;
189-
if (rateMap.containsKey(rate.getFromCurrency())) continue;
190-
191-
rateMap.put(rate.getFromCurrency(), rate);
192-
}
193-
194-
return rateMap;
195-
}
196182
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.blogspot.e_kanivets.moneytracker.report;
2+
3+
import android.support.annotation.NonNull;
4+
import android.support.annotation.Nullable;
5+
6+
import com.blogspot.e_kanivets.moneytracker.controller.ExchangeRateController;
7+
import com.blogspot.e_kanivets.moneytracker.model.ExchangeRate;
8+
import com.blogspot.e_kanivets.moneytracker.model.Record;
9+
import com.blogspot.e_kanivets.moneytracker.report.base.IExchangeRateProvider;
10+
11+
import java.util.Map;
12+
import java.util.TreeMap;
13+
14+
/**
15+
* First {@link IExchangeRateProvider} implementation.
16+
* Created on 2/25/16.
17+
*
18+
* @author Evgenii Kanivets
19+
*/
20+
public class ExchangeRateProvider implements IExchangeRateProvider {
21+
@SuppressWarnings("unused")
22+
private static final String TAG = "ExchangeRateProvider";
23+
24+
private String toCurrency;
25+
private final ExchangeRateController controller;
26+
private final Map<String, ExchangeRate> rateMap;
27+
28+
/**
29+
* @param toCurrency code of toCurrency to convert to
30+
* @param controller dependency to get needed rates
31+
*/
32+
public ExchangeRateProvider(String toCurrency, ExchangeRateController controller) {
33+
this.toCurrency = toCurrency;
34+
this.controller = controller;
35+
36+
rateMap = getRateMap();
37+
}
38+
39+
@Nullable
40+
@Override
41+
public ExchangeRate getRate(@Nullable Record record) {
42+
if (record == null) return null;
43+
44+
String fromCurrency = record.getCurrency();
45+
46+
return rateMap.get(fromCurrency);
47+
}
48+
49+
@NonNull
50+
private Map<String, ExchangeRate> getRateMap() {
51+
Map<String, ExchangeRate> rateMap = new TreeMap<>();
52+
53+
for (ExchangeRate rate : controller.readAll()) {
54+
if (!toCurrency.equals(rate.getToCurrency())) continue;
55+
if (rateMap.containsKey(rate.getFromCurrency())) continue;
56+
57+
rateMap.put(rate.getFromCurrency(), rate);
58+
}
59+
60+
return rateMap;
61+
}
62+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.blogspot.e_kanivets.moneytracker.report;
2+
3+
import android.support.annotation.NonNull;
4+
5+
import com.blogspot.e_kanivets.moneytracker.model.Period;
6+
import com.blogspot.e_kanivets.moneytracker.model.Record;
7+
import com.blogspot.e_kanivets.moneytracker.report.base.IExchangeRateProvider;
8+
import com.blogspot.e_kanivets.moneytracker.report.base.IReport;
9+
import com.blogspot.e_kanivets.moneytracker.report.model.CategoryRecord;
10+
11+
import java.util.ArrayList;
12+
import java.util.List;
13+
14+
/**
15+
* First {@link IReport} implementation.
16+
* Created on 2/25/16.
17+
*
18+
* @author Evgenii Kanivets
19+
*/
20+
public class Report implements IReport {
21+
@SuppressWarnings("unused")
22+
private static final String TAG = "Report";
23+
24+
private String currency;
25+
private Period period;
26+
private List<Record> recordList;
27+
private IExchangeRateProvider rateProvider;
28+
29+
public Report(String currency, Period period, List<Record> recordList, IExchangeRateProvider rateProvider) {
30+
if (currency == null || period == null || recordList == null || rateProvider == null)
31+
throw new NullPointerException("Params can't be null");
32+
33+
this.currency = currency;
34+
this.period = period;
35+
this.recordList = recordList;
36+
this.rateProvider = rateProvider;
37+
}
38+
39+
@NonNull
40+
@Override
41+
public String getCurrency() {
42+
return currency;
43+
}
44+
45+
@NonNull
46+
@Override
47+
public Period getPeriod() {
48+
return period;
49+
}
50+
51+
@Override
52+
public double getTotal() {
53+
return 0;
54+
}
55+
56+
@Override
57+
public double getTotalIncome() {
58+
return 0;
59+
}
60+
61+
@Override
62+
public double getTotalExpense() {
63+
return 0;
64+
}
65+
66+
@NonNull
67+
@Override
68+
public List<CategoryRecord> getSummary() {
69+
return new ArrayList<>();
70+
}
71+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.blogspot.e_kanivets.moneytracker.report.base;
2+
3+
import android.support.annotation.Nullable;
4+
5+
import com.blogspot.e_kanivets.moneytracker.model.ExchangeRate;
6+
import com.blogspot.e_kanivets.moneytracker.model.Record;
7+
8+
/**
9+
* Interface that represents a contract of access to currency exchange rate.
10+
* Created on 2/25/16.
11+
*
12+
* @author Evgenii Kanivets
13+
*/
14+
public interface IExchangeRateProvider {
15+
/**
16+
* Gives an exchange rate for given record.
17+
*
18+
* @param record to request an exchange rate for
19+
* @return exchange rate
20+
*/
21+
@Nullable
22+
ExchangeRate getRate(@Nullable Record record);
23+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.blogspot.e_kanivets.moneytracker.report.base;
2+
3+
import android.support.annotation.NonNull;
4+
5+
import com.blogspot.e_kanivets.moneytracker.model.Period;
6+
import com.blogspot.e_kanivets.moneytracker.report.model.CategoryRecord;
7+
8+
import java.util.List;
9+
10+
/**
11+
* Interface that represents a contract of access to report data.
12+
* Created on 2/25/16.
13+
*
14+
* @author Evgenii Kanivets
15+
*/
16+
public interface IReport {
17+
/**
18+
* @return code of report currency
19+
*/
20+
@NonNull String getCurrency();
21+
22+
/**
23+
* @return period of report
24+
*/
25+
@NonNull Period getPeriod();
26+
27+
/**
28+
* @return total sum in given currency for given period
29+
*/
30+
double getTotal();
31+
32+
/**
33+
* @return total of all incomes for given period
34+
*/
35+
double getTotalIncome();
36+
37+
/**
38+
* @return total of all expenses for given period
39+
*/
40+
double getTotalExpense();
41+
42+
/**
43+
* @return summary list
44+
*/
45+
@NonNull List<CategoryRecord> getSummary();
46+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.blogspot.e_kanivets.moneytracker.report.model;
2+
3+
/**
4+
* Created by evgenii_kanivets on 2/25/16.
5+
*/
6+
public class CategoryRecord {
7+
}

0 commit comments

Comments
 (0)