Skip to content
Snippets Groups Projects
Commit 8d7bb774 authored by Blersch Lara's avatar Blersch Lara
Browse files

changed double to BigDecimal in NutritionTable

parent 21495c63
No related branches found
No related tags found
No related merge requests found
...@@ -10,6 +10,7 @@ import java.io.BufferedReader; ...@@ -10,6 +10,7 @@ import java.io.BufferedReader;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.InvalidPropertiesFormatException; import java.util.InvalidPropertiesFormatException;
...@@ -61,7 +62,7 @@ public class CSVParser { ...@@ -61,7 +62,7 @@ public class CSVParser {
final List<String> splitLine = splitLine(line, split); final List<String> splitLine = splitLine(line, split);
final String recipeName = splitLine.get(idx[0]); final String recipeName = splitLine.get(idx[0]);
final List<Double> nutrition = new ArrayList<>(); final List<BigDecimal> nutrition = new ArrayList<>();
for (int i = 1; i < idx.length; i++) { for (int i = 1; i < idx.length; i++) {
//String element = splitLine.get(idx[i]).split(" ")[0]; //String element = splitLine.get(idx[i]).split(" ")[0];
...@@ -70,7 +71,8 @@ public class CSVParser { ...@@ -70,7 +71,8 @@ public class CSVParser {
if (getMeasurementFromString(element).equals("mg")) { if (getMeasurementFromString(element).equals("mg")) {
quantity = quantity /1000; quantity = quantity /1000;
} }
nutrition.add(quantity);
nutrition.add(BigDecimal.valueOf(quantity));
} }
final NutritionTable nutritionTable = new NutritionTable(nutrition); final NutritionTable nutritionTable = new NutritionTable(nutrition);
......
...@@ -4,6 +4,7 @@ import mi.hdm.mealPlan.MealPlan; ...@@ -4,6 +4,7 @@ import mi.hdm.mealPlan.MealPlan;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Map; import java.util.Map;
...@@ -30,7 +31,8 @@ public class NutritionCalculator { ...@@ -30,7 +31,8 @@ public class NutritionCalculator {
totalSalt = 0; totalSalt = 0;
for (RecipeComponent entry : ingredients.keySet()) { for (RecipeComponent entry : ingredients.keySet()) {
final Map<Nutrition, Double> nutritionTable = entry.getNutritionTable().getTable(); //TODO: adjust to change in NutritionTable: double -> BigDecimal
final Map<Nutrition, BigDecimal> nutritionTable = entry.getNutritionTable().getTable();
int divisor; int divisor;
if (entry.getMeasurement() == Measurement.PIECE || entry.getMeasurement() == Measurement.PINCH) { if (entry.getMeasurement() == Measurement.PIECE || entry.getMeasurement() == Measurement.PINCH) {
...@@ -38,12 +40,12 @@ public class NutritionCalculator { ...@@ -38,12 +40,12 @@ public class NutritionCalculator {
} else { } else {
divisor = 100; divisor = 100;
} }
totalCals += nutritionTable.get(Nutrition.CALORIES) * ingredients.get(entry) / divisor; totalCals += nutritionTable.get(Nutrition.CALORIES).doubleValue() * ingredients.get(entry) / divisor;
totalCarbs += nutritionTable.get(Nutrition.CARBS) * ingredients.get(entry) / divisor; totalCarbs += nutritionTable.get(Nutrition.CARBS).doubleValue() * ingredients.get(entry) / divisor;
totalFats += nutritionTable.get(Nutrition.FAT) * ingredients.get(entry) / divisor; totalFats += nutritionTable.get(Nutrition.FAT).doubleValue() * ingredients.get(entry) / divisor;
totalProteins += nutritionTable.get(Nutrition.PROTEINS) * ingredients.get(entry) / divisor; totalProteins += nutritionTable.get(Nutrition.PROTEINS).doubleValue() * ingredients.get(entry) / divisor;
totalFibers += nutritionTable.get(Nutrition.FIBERS) * ingredients.get(entry) / divisor; totalFibers += nutritionTable.get(Nutrition.FIBERS).doubleValue() * ingredients.get(entry) / divisor;
totalSalt += nutritionTable.get(Nutrition.SALT) * ingredients.get(entry) / divisor; totalSalt += nutritionTable.get(Nutrition.SALT).doubleValue() * ingredients.get(entry) / divisor;
} }
log.info("NutritionTable calculated successfully."); log.info("NutritionTable calculated successfully.");
return new NutritionTable(totalCals, totalCarbs, totalFats, totalProteins, totalFibers, totalSalt); return new NutritionTable(totalCals, totalCarbs, totalFats, totalProteins, totalFibers, totalSalt);
...@@ -62,13 +64,13 @@ public class NutritionCalculator { ...@@ -62,13 +64,13 @@ public class NutritionCalculator {
totalSalt = 0; totalSalt = 0;
for (Recipe r : plan.values()) { for (Recipe r : plan.values()) {
final Map<Nutrition, Double> nutritionTable = r.getNutritionTable().getTable(); final Map<Nutrition, BigDecimal> nutritionTable = r.getNutritionTable().getTable();
totalCals += nutritionTable.get(Nutrition.CALORIES); totalCals += nutritionTable.get(Nutrition.CALORIES).doubleValue();
totalCarbs += nutritionTable.get(Nutrition.CARBS); totalCarbs += nutritionTable.get(Nutrition.CARBS).doubleValue();
totalFats += nutritionTable.get(Nutrition.FAT); totalFats += nutritionTable.get(Nutrition.FAT).doubleValue();
totalProteins += nutritionTable.get(Nutrition.PROTEINS); totalProteins += nutritionTable.get(Nutrition.PROTEINS).doubleValue();
totalFibers += nutritionTable.get(Nutrition.FIBERS); totalFibers += nutritionTable.get(Nutrition.FIBERS).doubleValue();
totalSalt += nutritionTable.get(Nutrition.SALT); totalSalt += nutritionTable.get(Nutrition.SALT).doubleValue();
} }
log.info("NutritionTable calculated successfully."); log.info("NutritionTable calculated successfully.");
......
...@@ -2,20 +2,28 @@ package mi.hdm.recipes; ...@@ -2,20 +2,28 @@ package mi.hdm.recipes;
import mi.hdm.exceptions.InvalidNutritionTableException; import mi.hdm.exceptions.InvalidNutritionTableException;
import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
public class NutritionTable { public class NutritionTable {
//TODO: refactor this class to use BigDecimal //TODO: refactor this class to use BigDecimal
private final Map<Nutrition, Double> table; 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. * 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. * All values supplied should be in relation to 100 grams or 1 piece.
*/ */
public NutritionTable(double calories, double carbs, double fats, double proteins, double fibers, double salt) { public NutritionTable(double caloriesDouble, double carbsDouble, double fatsDouble, double proteinsDouble, double fibersDouble, double saltDouble) {
if (calories < 0 || carbs < 0 || fats < 0 || proteins < 0 || fibers < 0 || salt < 0) {
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"); throw new InvalidNutritionTableException("Can't create NutritionTable where any of the arguments is < 0");
} }
this.table = new HashMap<>(); this.table = new HashMap<>();
...@@ -28,7 +36,7 @@ public class NutritionTable { ...@@ -28,7 +36,7 @@ public class NutritionTable {
table.put(Nutrition.SALT, salt); table.put(Nutrition.SALT, salt);
} }
public NutritionTable(List<Double> nutrition) { public NutritionTable(List<BigDecimal> nutrition) {
if (nutrition == null || nutrition.size() != Nutrition.values().length) if (nutrition == null || nutrition.size() != Nutrition.values().length)
throw new InvalidNutritionTableException("You supplied a list that was null or had an invalid size."); throw new InvalidNutritionTableException("You supplied a list that was null or had an invalid size.");
...@@ -42,15 +50,15 @@ public class NutritionTable { ...@@ -42,15 +50,15 @@ public class NutritionTable {
private NutritionTable() { private NutritionTable() {
this.table = new HashMap<>(); this.table = new HashMap<>();
table.put(Nutrition.CALORIES, 0.0); table.put(Nutrition.CALORIES, BigDecimal.valueOf(0.0));
table.put(Nutrition.CARBS, 0.0); table.put(Nutrition.CARBS, BigDecimal.valueOf(0.0));
table.put(Nutrition.FAT, 0.0); table.put(Nutrition.FAT, BigDecimal.valueOf(0.0));
table.put(Nutrition.PROTEINS, 0.0); table.put(Nutrition.PROTEINS, BigDecimal.valueOf(0.0));
table.put(Nutrition.FIBERS, 0.0); table.put(Nutrition.FIBERS, BigDecimal.valueOf(0.0));
table.put(Nutrition.SALT, 0.0); table.put(Nutrition.SALT, BigDecimal.valueOf(0.0));
} }
public Map<Nutrition, Double> getTable() { public Map<Nutrition, BigDecimal> getTable() {
return table; return table;
} }
...@@ -67,14 +75,15 @@ public class NutritionTable { ...@@ -67,14 +75,15 @@ public class NutritionTable {
*/ */
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
//TODO: rewrite method
if (o instanceof NutritionTable n) { if (o instanceof NutritionTable n) {
double delta = 0.001;
return n.getTable().get(Nutrition.CALORIES) - table.get(Nutrition.CALORIES) < delta return n.getTable().get(Nutrition.CALORIES).equals(table.get(Nutrition.CALORIES))
&& n.getTable().get(Nutrition.CARBS) - table.get(Nutrition.CARBS) < delta && n.getTable().get(Nutrition.CARBS).equals(table.get(Nutrition.CARBS))
&& n.getTable().get(Nutrition.FAT) - table.get(Nutrition.FAT) < delta && n.getTable().get(Nutrition.FAT).equals(table.get(Nutrition.FAT))
&& n.getTable().get(Nutrition.PROTEINS) - table.get(Nutrition.PROTEINS) < delta && n.getTable().get(Nutrition.PROTEINS).equals(table.get(Nutrition.PROTEINS))
&& n.getTable().get(Nutrition.FIBERS) - table.get(Nutrition.FIBERS) < delta && n.getTable().get(Nutrition.FIBERS).equals(table.get(Nutrition.FIBERS))
&& n.getTable().get(Nutrition.SALT) - table.get(Nutrition.SALT) < delta; && n.getTable().get(Nutrition.SALT).equals(table.get(Nutrition.SALT));
} }
return false; return false;
} }
......
...@@ -4,6 +4,7 @@ import mi.hdm.exceptions.InvalidNutritionTableException; ...@@ -4,6 +4,7 @@ import mi.hdm.exceptions.InvalidNutritionTableException;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -28,13 +29,13 @@ public class NutritionTableTest { ...@@ -28,13 +29,13 @@ public class NutritionTableTest {
NutritionTable underTest = new NutritionTable(calories, carbs, fats, protein, fibers, salt); NutritionTable underTest = new NutritionTable(calories, carbs, fats, protein, fibers, salt);
//expect //expect
Map<Nutrition, Double> expected = new HashMap<>(); Map<Nutrition, BigDecimal> expected = new HashMap<>();
expected.put(Nutrition.CALORIES, calories); expected.put(Nutrition.CALORIES, BigDecimal.valueOf(calories));
expected.put(Nutrition.CARBS, carbs); expected.put(Nutrition.CARBS, BigDecimal.valueOf(carbs));
expected.put(Nutrition.FAT, fats); expected.put(Nutrition.FAT, BigDecimal.valueOf(fats));
expected.put(Nutrition.PROTEINS, protein); expected.put(Nutrition.PROTEINS, BigDecimal.valueOf(protein));
expected.put(Nutrition.FIBERS, fibers); expected.put(Nutrition.FIBERS, BigDecimal.valueOf(fibers));
expected.put(Nutrition.SALT, salt); expected.put(Nutrition.SALT, BigDecimal.valueOf(salt));
Assertions.assertEquals(expected, underTest.getTable()); Assertions.assertEquals(expected, underTest.getTable());
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment