Newer
Older
import mi.hdm.exceptions.InvalidNutritionTableException;
import java.math.BigDecimal;

Karsch Lukas
committed
import java.util.List;
import java.util.Map;
private final Map<Nutrition, BigDecimal> table;
/**

Karsch Lukas
committed
* 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) {

Karsch Lukas
committed
throw new InvalidNutritionTableException("Can't create NutritionTable where any of the arguments is < 0");

Karsch Lukas
committed
this.table = new HashMap<>();
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) {

Karsch Lukas
committed
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));
}
}
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() {
return table;
public NutritionTable get() {

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
committed
@Override
public boolean equals(Object o) {
return n.getTable().equals(table);

Karsch Lukas
committed
}
return false;
}

Karsch Lukas
committed
@Override
public String toString() {
return "NutritionTable{" +
"table=" + table +
'}';
}
public static NutritionTable empty() {
return new NutritionTable();
}