package openfoodfacts.github.scrachx.openfood.models; import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.annotation.JsonInclude; import java.io.Serializable; import java.util.HashMap; import java.util.Map; import openfoodfacts.github.scrachx.openfood.R; import static android.text.TextUtils.isEmpty; /** * JSON representation of the product nutriments entry * * @see <a href="http://en.wiki.openfoodfacts.org/API#JSON_interface">JSON Structure</a> */ @JsonInclude(JsonInclude.Include.NON_NULL) public class Nutriments implements Serializable { private static final String DEFAULT_UNIT = "g"; public final static String ENERGY ="energy"; public static final String ENERGY_FROM_FAT = "energy-from-fat"; public static final String FAT = "fat"; public static final String SATURATED_FAT = "saturated-fat"; public static final String BUTYRIC_ACID = "butyric-acid"; public static final String CAPROIC_ACID = "caproic-acid"; public static final String CAPRYLIC_ACID = "caprylic-acid"; public static final String CAPRIC_ACID = "capric-acid"; public static final String LAURIC_ACID = "lauric-acid"; public static final String MYRISTIC_ACID = "myristic-acid"; public static final String PALMITIC_ACID = "palmitic-acid"; public static final String STEARIC_ACID = "stearic-acid"; public static final String ARACHIDIC_ACID = "arachidic-acid"; public static final String BEHENIC_ACID = "behenic-acid"; public static final String LIGNOCERIC_ACID = "lignoceric-acid"; public static final String CEROTIC_ACID = "cerotic-acid"; public static final String MONTANIC_ACID = "montanic-acid"; public static final String MELISSIC_ACID = "melissic-acid"; public static final String MONOUNSATURATED_FAT = "monounsaturated-fat"; public static final String POLYUNSATURATED_FAT = "polyunsaturated-fat"; public static final String OMEGA_3_FAT = "omega-3-fat"; public static final String ALPHA_LINOLENIC_ACID = "alpha-linolenic-acid"; public static final String EICOSAPENTAENOIC_ACID = "eicosapentaenoic-acid"; public static final String DOCOSAHEXAENOIC_ACID = "docosahexaenoic-acid"; public static final String OMEGA_6_FAT = "omega-6-fat"; public static final String LINOLEIC_ACID = "linoleic-acid"; public static final String ARACHIDONIC_ACID = "arachidonic-acid"; public static final String GAMMA_LINOLENIC_ACID = "gamma-linolenic-acid"; public static final String DIHOMO_GAMMA_LINOLENIC_ACID = "dihomo-gamma-linolenic-acid"; public static final String OMEGA_9_FAT = "omega-9-fat"; public static final String OLEIC_ACID = "oleic-acid"; public static final String ELAIDIC_ACID = "elaidic-acid"; public static final String GONDOIC_ACID = "gondoic-acid"; public static final String MEAD_ACID = "mead-acid"; public static final String ERUCIC_ACID = "erucic-acid"; public static final String NERVONIC_ACID = "nervonic-acid"; public static final String TRANS_FAT = "trans-fat"; public static final String CHOLESTEROL = "cholesterol"; public static final String CARBOHYDRATES = "carbohydrates"; public static final String SUGARS = "sugars"; public static final String SUCROSE = "sucrose"; public static final String GLUCOSE = "glucose"; public static final String FRUCTOSE = "fructose"; public static final String LACTOSE = "lactose"; public static final String MALTOSE = "maltose"; public static final String MALTODEXTRINS = "maltodextrins"; public static final String STARCH = "starch"; public static final String POLYOLS = "polyols"; public static final String FIBER = "fiber"; public static final String PROTEINS = "proteins"; public static final String CASEIN = "casein"; public static final String SERUM_PROTEINS = "serum-proteins"; public static final String NUCLEOTIDES = "nucleotides"; public static final String SALT = "salt"; public static final String SODIUM = "sodium"; public static final String ALCOHOL = "alcohol"; public static final String VITAMIN_A = "vitamin-a"; public static final String BETA_CAROTENE = "beta-carotene"; public static final String VITAMIN_D = "vitamin-d"; public static final String VITAMIN_E = "vitamin-e"; public static final String VITAMIN_K = "vitamin-k"; public static final String VITAMIN_C = "vitamin-c"; public static final String VITAMIN_B1 = "vitamin-b1"; public static final String VITAMIN_B2 = "vitamin-b2"; public static final String VITAMIN_PP = "vitamin-pp"; public static final String VITAMIN_B6 = "vitamin-b6"; public static final String VITAMIN_B9 = "vitamin-b9"; public static final String WATER_HARDNESS = "water-hardness"; public static final String GLYCEMIC_INDEX = "glycemic-index"; public static final String NUTRITION_SCORE_UK = "nutrition-score-uk"; public static final String NUTRITION_SCORE_FR = "nutrition-score-fr"; public static final String CARBON_FOOTPRINT = "carbon-footprint"; public static final String CHLOROPHYL = "chlorophyl"; public static final String COCOA = "cocoa"; public static final String COLLAGEN_MEAT_PROTEIN_RATIO = "collagen-meat-protein-ratio"; public static final String FRUITS_VEGETABLES_NUTS = "fruits-vegetables-nuts"; public static final String PH = "ph"; public static final String TAURINE = "taurine"; public static final String CAFFEINE = "caffeine"; public static final String IODINE = "iodine"; public static final String MOLYBDENUM = "molybdenum"; public static final String CHROMIUM = "chromium"; public static final String SELENIUM = "selenium"; public static final String FLUORIDE = "fluoride"; public static final String MANGANESE = "manganese"; public static final String COPPER = "copper"; public static final String ZINC = "zinc"; public static final String VITAMIN_B12 = "vitamin-b12"; public static final String BIOTIN = "biotin"; public static final String PANTOTHENIC_ACID = "pantothenic-acid"; public static final String SILICA = "silica"; public static final String BICARBONATE = "bicarbonate"; public static final String POTASSIUM = "potassium"; public static final String CHLORIDE = "chloride"; public static final String CALCIUM = "calcium"; public static final String PHOSPHORUS = "phosphorus"; public static final String IRON = "iron"; public static final String MAGNESIUM = "magnesium"; public static final Map<String, Integer> MINERALS_MAP = new HashMap<String, Integer>() {{ put(Nutriments.SILICA, R.string.silica); put(Nutriments.BICARBONATE, R.string.bicarbonate); put(Nutriments.POTASSIUM, R.string.potassium); put(Nutriments.CHLORIDE, R.string.chloride); put(Nutriments.CALCIUM, R.string.calcium); put(Nutriments.PHOSPHORUS, R.string.phosphorus); put(Nutriments.IRON, R.string.iron); put(Nutriments.MAGNESIUM, R.string.magnesium); put(Nutriments.ZINC, R.string.zinc); put(Nutriments.COPPER, R.string.copper); put(Nutriments.MANGANESE, R.string.manganese); put(Nutriments.FLUORIDE, R.string.fluoride); put(Nutriments.SELENIUM, R.string.selenium); put(Nutriments.CHROMIUM, R.string.chromium); put(Nutriments.MOLYBDENUM, R.string.molybdenum); put(Nutriments.IODINE, R.string.iodine); put(Nutriments.CAFFEINE, R.string.caffeine); put(Nutriments.TAURINE, R.string.taurine); put(Nutriments.PH, R.string.ph); put(Nutriments.FRUITS_VEGETABLES_NUTS, R.string.fruits_vegetables_nuts); put(Nutriments.COLLAGEN_MEAT_PROTEIN_RATIO, R.string.collagen_meat_protein_ratio); put(Nutriments.COCOA, R.string.cocoa); put(Nutriments.CHLOROPHYL, R.string.chlorophyl); }}; public static final Map<String, Integer> FAT_MAP = new HashMap<String, Integer>(){{ put(Nutriments.SATURATED_FAT, R.string.nutrition_satured_fat); put(Nutriments.MONOUNSATURATED_FAT, R.string.nutrition_monounsaturatedFat); put(Nutriments.POLYUNSATURATED_FAT, R.string.nutrition_polyunsaturatedFat); put(Nutriments.OMEGA_3_FAT, R.string.nutrition_omega3); put(Nutriments.OMEGA_6_FAT, R.string.nutrition_omega6); put(Nutriments.OMEGA_9_FAT, R.string.nutrition_omega9); put(Nutriments.TRANS_FAT, R.string.nutrition_trans_fat); put(Nutriments.CHOLESTEROL, R.string.nutrition_cholesterol); }}; public static final Map<String, Integer> CARBO_MAP = new HashMap<String, Integer>(){{ put(Nutriments.SUGARS, R.string.nutrition_sugars); put(Nutriments.SUCROSE, R.string.nutrition_sucrose); put(Nutriments.GLUCOSE, R.string.nutrition_glucose); put(Nutriments.FRUCTOSE, R.string.nutrition_fructose); put(Nutriments.LACTOSE, R.string.nutrition_lactose); put(Nutriments.MALTOSE, R.string.nutrition_maltose); put(Nutriments.MALTODEXTRINS, R.string.nutrition_maltodextrins); }}; public static final Map<String, Integer> PROT_MAP = new HashMap<String, Integer>(){{ put(Nutriments.CASEIN, R.string.nutrition_casein); put(Nutriments.SERUM_PROTEINS, R.string.nutrition_serum_proteins); put(Nutriments.NUCLEOTIDES, R.string.nutrition_nucleotides); }}; public static final Map<String, Integer> VITAMINS_MAP = new HashMap<String, Integer>(){{ put(Nutriments.VITAMIN_A, R.string.vitamin_a); put(Nutriments.BETA_CAROTENE, R.string.vitamin_a); put(Nutriments.VITAMIN_D, R.string.vitamin_d); put(Nutriments.VITAMIN_E, R.string.vitamin_e); put(Nutriments.VITAMIN_K, R.string.vitamin_k); put(Nutriments.VITAMIN_C, R.string.vitamin_c); put(Nutriments.VITAMIN_B1, R.string.vitamin_b1); put(Nutriments.VITAMIN_B2, R.string.vitamin_b2); put(Nutriments.VITAMIN_PP, R.string.vitamin_pp); put(Nutriments.VITAMIN_B6, R.string.vitamin_b6); put(Nutriments.VITAMIN_B9, R.string.vitamin_b9); put(Nutriments.VITAMIN_B12, R.string.vitamin_b12); put(Nutriments.BIOTIN, R.string.biotin); put(Nutriments.PANTOTHENIC_ACID, R.string.pantothenic_acid); }}; private Map<String, Object> additionalProperties = new HashMap<>(); private boolean containsVitamins; private boolean containsMinerals; public Nutriment get(String nutrimentName){ if (!additionalProperties.containsKey(nutrimentName)) { return null; } return new Nutriment(additionalProperties.get(nutrimentName).toString(), get100g(nutrimentName), getServing(nutrimentName), getUnit(nutrimentName)); } public String getUnit(String nutrimentName){ String unit = ((String) additionalProperties.get(nutrimentName + "_unit")); return isEmpty(unit) ? DEFAULT_UNIT : unit; } public String getServing(String nutrimentName){ return additionalProperties.get(nutrimentName + "_serving").toString(); } public String get100g(String nutrimentName){ return additionalProperties.get(nutrimentName + "_100g").toString(); } public Double getValue(String nutrimentName){ return ((Double) additionalProperties.get(nutrimentName + "_value")); } public boolean contains(String nutrimentName){ return additionalProperties.containsKey(nutrimentName); } public boolean hasVitamins() { return containsVitamins; } public boolean hasMinerals() { return containsMinerals; } @JsonAnyGetter public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; } @JsonAnySetter public void setAdditionalProperty(String name, Object value) { this.additionalProperties.put(name, value); if (VITAMINS_MAP.containsKey(name)) { containsVitamins = true; } else if (MINERALS_MAP.containsKey(name)) { containsMinerals = true; } } public static class Nutriment { private final String value; private final String for100g; private final String forServing; private final String unit; Nutriment(String name, String for100g, String forServing, String unit) { this.value = name; this.for100g = for100g; this.forServing = forServing; this.unit = unit; } public String getValue() { return value; } public String getFor100g() { return for100g; } public String getForServing() { return forServing; } public String getUnit() { return unit; } } }