Search in sources :

Example 16 with FoodEaten

use of com.faltenreich.diaguard.shared.data.database.entity.FoodEaten in project Diaguard by Faltenreich.

the class EntryDao method getAverageDataTable.

/**
 * @return HashMap with non-null but zeroed and default values for given categories and time periods
 */
public LinkedHashMap<Category, CategoryValueListItem[]> getAverageDataTable(DateTime day, Category[] categories, int hoursToSkip) {
    if (day == null) {
        return new LinkedHashMap<>();
    }
    int indices = DateTimeConstants.HOURS_PER_DAY / hoursToSkip;
    // Key: Category, Value: Fixed-size array of values per hour-index
    LinkedHashMap<Category, CategoryValueListItem[]> values = new LinkedHashMap<>();
    for (Category category : categories) {
        values.put(category, new CategoryValueListItem[indices]);
    }
    for (Category category : categories) {
        // Key: Hour-index, Value: Values of hour-index
        LinkedHashMap<Integer, List<CategoryValueListItem>> valuesOfHours = new LinkedHashMap<>();
        for (int index = 0; index < indices; index++) {
            valuesOfHours.put(index, new ArrayList<>());
        }
        List<Measurement> measurements = MeasurementDao.getInstance(category.toClass()).getMeasurements(day);
        for (Measurement measurement : measurements) {
            int index = measurement.getEntry().getDate().hourOfDay().get() / hoursToSkip;
            CategoryValueListItem item = new CategoryValueListItem(category);
            switch(category) {
                case INSULIN:
                    Insulin insulin = (Insulin) measurement;
                    item.setValueOne(insulin.getBolus());
                    item.setValueTwo(insulin.getCorrection());
                    item.setValueThree(insulin.getBasal());
                    break;
                case PRESSURE:
                    Pressure pressure = (Pressure) measurement;
                    item.setValueOne(pressure.getSystolic());
                    item.setValueTwo(pressure.getDiastolic());
                    break;
                default:
                    float value = category.stackValues() ? ArrayUtils.sum(measurement.getValues()) : ArrayUtils.avg(measurement.getValues());
                    if (category == Category.MEAL) {
                        for (FoodEaten foodEaten : ((Meal) measurement).getFoodEaten()) {
                            value += foodEaten.getCarbohydrates();
                        }
                    }
                    item.setValueOne(value);
                    break;
            }
            List<CategoryValueListItem> valuesOfHour = valuesOfHours.get(index);
            if (valuesOfHour == null) {
                valuesOfHours.put(index, new ArrayList<>());
            }
            valuesOfHours.get(index).add(item);
        }
        // Average for old values
        for (int index = 0; index < indices; index++) {
            List<CategoryValueListItem> valuesOfHour = valuesOfHours.get(index);
            CategoryValueListItem value = category.stackValues() ? CategoryListItemUtils.sum(category, valuesOfHour) : CategoryListItemUtils.avg(category, valuesOfHour);
            values.get(category)[index] = value;
        }
    }
    return values;
}
Also used : Measurement(com.faltenreich.diaguard.shared.data.database.entity.Measurement) Category(com.faltenreich.diaguard.shared.data.database.entity.Category) Meal(com.faltenreich.diaguard.shared.data.database.entity.Meal) FoodEaten(com.faltenreich.diaguard.shared.data.database.entity.FoodEaten) CategoryValueListItem(com.faltenreich.diaguard.feature.timeline.table.CategoryValueListItem) Insulin(com.faltenreich.diaguard.shared.data.database.entity.Insulin) Pressure(com.faltenreich.diaguard.shared.data.database.entity.Pressure) LinkedHashMap(java.util.LinkedHashMap) ArrayList(java.util.ArrayList) List(java.util.List)

Example 17 with FoodEaten

use of com.faltenreich.diaguard.shared.data.database.entity.FoodEaten in project Diaguard by Faltenreich.

the class MeasurementDao method createOrUpdate.

private void createOrUpdate(Meal meal) {
    for (FoodEaten foodEatenOld : FoodEatenDao.getInstance().getAll(meal)) {
        int indexInCache = meal.getFoodEatenCache().indexOf(foodEatenOld);
        if (indexInCache != -1) {
            FoodEaten foodEatenNew = meal.getFoodEatenCache().get(indexInCache);
            if (!foodEatenNew.isValid()) {
                FoodEatenDao.getInstance().delete(foodEatenOld);
            }
        } else {
            FoodEatenDao.getInstance().delete(foodEatenOld);
        }
    }
    for (FoodEaten foodEaten : meal.getFoodEatenCache()) {
        if (foodEaten.isValid()) {
            foodEaten.setMeal(meal);
            FoodEatenDao.getInstance().createOrUpdate(foodEaten);
        }
    }
}
Also used : FoodEaten(com.faltenreich.diaguard.shared.data.database.entity.FoodEaten)

Aggregations

FoodEaten (com.faltenreich.diaguard.shared.data.database.entity.FoodEaten)17 Meal (com.faltenreich.diaguard.shared.data.database.entity.Meal)10 ArrayList (java.util.ArrayList)9 Measurement (com.faltenreich.diaguard.shared.data.database.entity.Measurement)8 Entry (com.faltenreich.diaguard.shared.data.database.entity.Entry)7 EntryTag (com.faltenreich.diaguard.shared.data.database.entity.EntryTag)7 Tag (com.faltenreich.diaguard.shared.data.database.entity.Tag)6 Category (com.faltenreich.diaguard.shared.data.database.entity.Category)5 View (android.view.View)4 BloodSugar (com.faltenreich.diaguard.shared.data.database.entity.BloodSugar)4 DateTime (org.joda.time.DateTime)4 ImageView (android.widget.ImageView)3 Food (com.faltenreich.diaguard.shared.data.database.entity.Food)3 Insulin (com.faltenreich.diaguard.shared.data.database.entity.Insulin)3 ChipView (com.faltenreich.diaguard.shared.view.chip.ChipView)3 AutoCompleteTextView (android.widget.AutoCompleteTextView)2 NestedScrollView (androidx.core.widget.NestedScrollView)2 MeasurementView (com.faltenreich.diaguard.feature.entry.edit.measurement.MeasurementView)2 Pressure (com.faltenreich.diaguard.shared.data.database.entity.Pressure)2 EntryAddedEvent (com.faltenreich.diaguard.shared.event.data.EntryAddedEvent)2