/*
* 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.core;
import android.content.Context;
import com.money.manager.ex.R;
import java.util.HashMap;
/**
* Pre-set collection of available date ranges in the app.
*/
public class DefinedDateRanges {
public DefinedDateRanges(Context context) {
this.context = context;
// todo: initialize the collection
this.initialize();
}
private Context context;
HashMap<DefinedDateRangeName, DefinedDateRange> dateRanges;
public DefinedDateRange get(DefinedDateRangeName name) {
return this.dateRanges.get(name);
}
public DefinedDateRange getByMenuId(int menuResourceId) {
for (DefinedDateRange range : this.dateRanges.values()) {
if (range.menuResourceId == menuResourceId) return range;
}
return null;
}
public DefinedDateRange getByNameId(int nameResourceId) {
for (DefinedDateRange range : this.dateRanges.values()) {
if (range.nameResourceId == nameResourceId) return range;
}
return null;
}
public DefinedDateRange getByLocalizedName(String localizedName) {
for (DefinedDateRange range : this.dateRanges.values()) {
if (localizedName.equalsIgnoreCase(range.getLocalizedName(getContext()))) {
return range;
}
}
return null;
}
public DefinedDateRange getByName(String name) {
for (DefinedDateRange range : this.dateRanges.values()) {
if (name.equalsIgnoreCase(range.getName())) {
return range;
}
}
return null;
}
public Context getContext() {
return this.context;
}
public boolean contains(DefinedDateRangeName name) {
return this.dateRanges.containsKey(name);
}
/**
* Return the value.toString() for all the values.
* @return String array of string values.
*/
public String[] getValueNames() {
String[] result = new String[this.dateRanges.size()];
int i = 0;
for (DefinedDateRangeName name : DefinedDateRangeName.values()) {
result[i] = this.dateRanges.get(name).getName();
i++;
}
return result;
}
/**
* Gets period names in app language.
* @return String array of localized names of available periods.
*/
public String[] getLocalizedNames() {
String[] result = new String[this.dateRanges.size()];
int i = 0;
for (DefinedDateRangeName name : DefinedDateRangeName.values()) {
result[i] = this.dateRanges.get(name).getLocalizedName(getContext());
i++;
}
return result;
}
// private
private HashMap<DefinedDateRangeName, DefinedDateRange> initialize() {
this.dateRanges = new HashMap<>();
// TODAY,
DefinedDateRange range = create(DefinedDateRangeName.TODAY, R.string.today, R.id.menu_today);
this.dateRanges.put(range.key, range);
// LAST_7_DAYS
range = create(DefinedDateRangeName.LAST_7_DAYS, R.string.last7days, R.id.menu_last7days);
dateRanges.put(range.key, range);
// LAST_2_WEEKS
range = create(DefinedDateRangeName.LAST_2_WEEKS, R.string.last15days, R.id.menu_last15days);
dateRanges.put(range.key, range);
// CURRENT_MONTH
range = create(DefinedDateRangeName.CURRENT_MONTH, R.string.current_month, R.id.menu_current_month);
dateRanges.put(range.key, range);
// LAST_30_DAYS
range = create(DefinedDateRangeName.LAST_30_DAYS, R.string.last30days, R.id.menu_last30days);
dateRanges.put(range.key, range);
// LAST_3_MONTHS,
range = create(DefinedDateRangeName.LAST_3_MONTHS, R.string.last3months, R.id.menu_last3months);
dateRanges.put(range.key, range);
// LAST_6_MONTHS,
range = create(DefinedDateRangeName.LAST_6_MONTHS, R.string.last6months, R.id.menu_last6months);
dateRanges.put(range.key, range);
// CURRENT_YEAR,
range = create(DefinedDateRangeName.CURRENT_YEAR, R.string.current_year, R.id.menu_current_year);
dateRanges.put(range.key, range);
// FUTURE_TRANSACTIONS,
range = create(DefinedDateRangeName.FUTURE_TRANSACTIONS, R.string.future_transactions,
R.id.menu_future_transactions);
dateRanges.put(range.key, range);
// ALL_TIME
range = create(DefinedDateRangeName.ALL_TIME, R.string.all_time, R.id.menu_all_time);
dateRanges.put(range.key, range);
return dateRanges;
}
private DefinedDateRange create(DefinedDateRangeName key, int nameStringId, int menuResourceId) {
DefinedDateRange range = new DefinedDateRange();
range.key = key;
range.nameResourceId = nameStringId;
range.menuResourceId = menuResourceId;
return range;
}
}