Skip to content
Snippets Groups Projects
NutritionTable.java 3.35 KiB
Newer Older
package mi.hdm.recipes;

import mi.hdm.exceptions.InvalidNutritionTableException;

import java.math.BigDecimal;
import java.util.HashMap;

public class NutritionTable {
    private final Map<Nutrition, BigDecimal> table;
     * Creates a new nutrition table that can be used in an ingredient. Expects values for all the nutrition values in order: Calories, Carbs, Fats, Proteins, Fibers, Salt.
     * All values supplied should be in relation to 100 grams or 1 piece.
    public NutritionTable(double caloriesDouble, double carbsDouble, double fatsDouble, double proteinsDouble, double fibersDouble, double saltDouble) {

        BigDecimal calories = BigDecimal.valueOf(caloriesDouble),
                carbs = BigDecimal.valueOf(carbsDouble),
                fats = BigDecimal.valueOf(fatsDouble),
                proteins = BigDecimal.valueOf(proteinsDouble),
                fibers = BigDecimal.valueOf(fibersDouble),
                salt = BigDecimal.valueOf(saltDouble);
        if (calories.compareTo(BigDecimal.ZERO) < 0 || carbs.compareTo(BigDecimal.ZERO) < 0 || fats.compareTo(BigDecimal.ZERO) < 0 || proteins.compareTo(BigDecimal.ZERO) < 0 || fibers.compareTo(BigDecimal.ZERO) < 0 || salt.compareTo(BigDecimal.ZERO) < 0) {
            throw new InvalidNutritionTableException("Can't create NutritionTable where any of the arguments is < 0");

        table.put(Nutrition.CALORIES, calories);
        table.put(Nutrition.CARBS, carbs);
        table.put(Nutrition.FAT, fats);
        table.put(Nutrition.PROTEINS, proteins);
        table.put(Nutrition.FIBERS, fibers);
        table.put(Nutrition.SALT, salt);
    }
    public NutritionTable(List<BigDecimal> nutrition) {
        if (nutrition == null || nutrition.size() != Nutrition.values().length)
            throw new InvalidNutritionTableException("You supplied a list that was null or had an invalid size.");

        this.table = new HashMap<>();

        for (int i = 0; i < nutrition.size(); i++) {
            table.put(Nutrition.values()[i], nutrition.get(i));
        }
    }

Karsch Lukas's avatar
Karsch Lukas committed
    private NutritionTable() {
        this.table = new HashMap<>();

        table.put(Nutrition.CALORIES, BigDecimal.valueOf(0.0));
        table.put(Nutrition.CARBS, BigDecimal.valueOf(0.0));
        table.put(Nutrition.FAT, BigDecimal.valueOf(0.0));
        table.put(Nutrition.PROTEINS, BigDecimal.valueOf(0.0));
        table.put(Nutrition.FIBERS, BigDecimal.valueOf(0.0));
        table.put(Nutrition.SALT, BigDecimal.valueOf(0.0));
    public Map<Nutrition, BigDecimal> getTable() {
Karsch Lukas's avatar
Karsch Lukas committed
    }
Karsch Lukas's avatar
Karsch Lukas committed
        return this;
Karsch Lukas's avatar
Karsch Lukas committed

    /**
     * Overridden equals method to account for rounding errors when calculating nutrition scores.
     *
     * @param o Object that is being compared
     * @return true if the given object is a NutritionTable and their internal maps are identical
Karsch Lukas's avatar
Karsch Lukas committed
     */
    @Override
    public boolean equals(Object o) {
Karsch Lukas's avatar
Karsch Lukas committed
        if (o instanceof NutritionTable n) {
    @Override
    public String toString() {
        return "NutritionTable{" +
                "table=" + table +
                '}';
    }

Karsch Lukas's avatar
Karsch Lukas committed
    public static NutritionTable empty() {
        return new NutritionTable();
    }