%line | %branch | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
ca.spaz.cron.database.NutrientTable |
|
|
1 | /* |
|
2 | * Created on Apr 16, 2005 by davidson |
|
3 | */ |
|
4 | package ca.spaz.cron.database; |
|
5 | ||
6 | import java.lang.reflect.Field; |
|
7 | ||
8 | import org.apache.log4j.Logger; |
|
9 | ||
10 | import ca.spaz.cron.datasource.ILocalFoodDatasource; |
|
11 | ||
12 | /** |
|
13 | * A base class for a group of related nutrient values Provides common support |
|
14 | * for loading and updating the database. |
|
15 | * |
|
16 | * The nutrient table is expected to have field names that match the names and |
|
17 | * types of the corresponding database table. This greatly simplifies |
|
18 | * maintaining the database and generating UI forms through reflection. |
|
19 | * |
|
20 | * @author davidson |
|
21 | */ |
|
22 | 0 | public abstract class NutrientTable { |
23 | /** |
|
24 | * Logger for this class |
|
25 | */ |
|
26 | 0 | private static final Logger logger = Logger.getLogger(NutrientTable.class); |
27 | private Food food; |
|
28 | ||
29 | 0 | public NutrientTable() { |
30 | 0 | } |
31 | ||
32 | 0 | public NutrientTable(Food f) { |
33 | 0 | this.food = f; |
34 | 0 | f.getDataSource().getNutrientsFor(f, this); |
35 | 0 | } |
36 | 0 | |
37 | /** |
|
38 | * Get the name of the table corresponding to this class. By default it uses |
|
39 | * the class name. Override this method if it is different. |
|
40 | * |
|
41 | 0 | * @return the name of the database table for this object |
42 | 0 | */ |
43 | public String getTableName() { |
|
44 | 0 | return doGetTableName(); |
45 | 0 | } |
46 | 0 | |
47 | /** |
|
48 | 0 | * Subclasses must implement this in order to supply their table name. |
49 | * |
|
50 | 0 | * @return the table name to perform lookups on. |
51 | 0 | */ |
52 | protected abstract String doGetTableName(); |
|
53 | ||
54 | 0 | /** |
55 | * Add the nutrients in the given table to our total |
|
56 | 0 | * |
57 | * @param toAdd |
|
58 | 0 | * the nutrients ratios to add |
59 | 0 | * @param weight |
60 | 0 | * multiplier for the amount in the added nutrients |
61 | */ |
|
62 | 0 | public void addFood(NutrientTable toAdd, double weight) { |
63 | 0 | assert (toAdd.getClass() == this.getClass()); |
64 | 0 | Field[] fields = this.getClass().getFields(); |
65 | 0 | for (int i = 0; i < fields.length; i++) { |
66 | try { |
|
67 | 0 | double d1 = fields[i].getDouble(this); |
68 | 0 | double d2 = fields[i].getDouble(toAdd); |
69 | 0 | fields[i].setDouble(this, d1 + d2 * weight); |
70 | 0 | } catch (Exception e) { |
71 | 0 | logger.error("addFood(NutrientTable, double)", e); |
72 | 0 | } |
73 | } |
|
74 | 0 | } |
75 | ||
76 | /** |
|
77 | * Get the amount of a nutrient by the tag name |
|
78 | * |
|
79 | * @param tag |
|
80 | * the tag name of the nutrient |
|
81 | * @return the amount of the nutrient, or 0 if none found |
|
82 | */ |
|
83 | public double getAmountByTag(String tag) { |
|
84 | 0 | double val = 0; |
85 | try { |
|
86 | 0 | Field f = this.getClass().getField(tag); |
87 | 0 | val = f.getDouble(this); |
88 | 0 | } catch (Exception e) { |
89 | 0 | logger.error("getAmountByTag(String)", e); |
90 | 0 | } |
91 | 0 | return val; |
92 | } |
|
93 | ||
94 | /** |
|
95 | * Set the amount of a nutrient by the tag name |
|
96 | * |
|
97 | * @param tag the tag name of the nutrient |
|
98 | * @param val the amount of the nutrient, or 0 if none found |
|
99 | */ |
|
100 | public void setAmountByTag(String tag, double val) { |
|
101 | try { |
|
102 | 0 | Field f = this.getClass().getField(tag); |
103 | 0 | f.setDouble(this, val); |
104 | 0 | } catch (Exception e) { |
105 | 0 | logger.error("setAmountByTag(String, double)", e); |
106 | 0 | } |
107 | 0 | } |
108 | ||
109 | /** |
|
110 | * Update the existing food information |
|
111 | */ |
|
112 | public void updateDatabase() { |
|
113 | 0 | ILocalFoodDatasource lds = (ILocalFoodDatasource) food.getDataSource(); |
114 | 0 | lds.saveFood(food); |
115 | 0 | } |
116 | ||
117 | } |
This report is generated by jcoverage, Maven and Maven JCoverage Plugin. |