@Override public boolean conformes(Product data) { String[] argParts = this.argument.split(" "); String mathSymbol = argParts[0]; // in g or ml double polylAmount = -1.0; for (EnergyNutrientsVitamins nutrient : data.getIngredientsAndAllergens().getEnergyNutrientsVitamins()) { if ((nutrient.getNutritionalValueReference() == 100.0) && ((((nutrient.getNutritionalValueReferenceUnit() == ServingSizeUnitOfMeasureCode.GR) || (nutrient.getNutritionalValueReferenceUnit() == ServingSizeUnitOfMeasureCode.ML))))) { for (NutritionalContentItem content : nutrient.getNutrients()) { if (content.getNutritionalContent() == NutritionalContentCode.POLYL) { polylAmount = content.getNutritionalContentQuantityContained(); if (content.getNutritionalContentQuantityContain() == ServingSizeUnitOfMeasureCode.EMPTY || content.getNutritionalContentQuantityContain() == PTN) { return false; } else { break; } } } break; } } if (polylAmount < 0) { // something went wrong, or there are simply no POLYL contained return false; } double amount = -1.0; if (argParts[1].contains("%")) { amount = Double.parseDouble(argParts[1].replace("%", "")); // here we get the percentage of polyl in the product // EDIT: if we use the polyl per 100 gr, then we don't need this // polylAmount = (polylAmount / convertNetWeight(data)) * 100; } else { amount = Double.parseDouble(argParts[1].replace("g", "")); } if (mathSymbol.equals("<")) { return polylAmount < amount; } else if (mathSymbol.equals("=")) { return polylAmount == amount; } else if (mathSymbol.equals(">")) { return polylAmount > amount; } else { Logger.getLogger(Logger.GLOBAL_LOGGER_NAME) .log(Level.WARNING, "Allowed operators: < OR > OR =. Chosen operator: {0}", mathSymbol); return false; } }
/** * To gramm or ml. * * @param data * @return */ private double convertNetWeight(Product data) { double netWeight = -1.0; List<NetWeightEntity> netWeights = data.getStorageAndUsage().getNetWeight(); if (!netWeights.isEmpty() && (netWeights.get(0).getNetWeightUnit() != null)) { NetWeightEntity e = netWeights.get(0); netWeight = e.getNetWeightValue(); switch (e.getNetWeightUnit()) { case KG: // to get to g netWeight *= 1000; break; case LT: // to get to ml netWeight *= 1000; break; default: break; } } return netWeight; }