private List<String> getStringFieldIngredientsAndAllergens(String fieldName) {
    List<String> list = new ArrayList<String>();
    String specifier = "";
    if (fieldName.contains("[")) {
      String[] parts = fieldName.split("\\[");
      assertTrue(parts.length <= 2);
      fieldName = parts[0].trim();
      specifier = parts[1].replace("]", "").trim();
    }

    switch (fieldName) {
      case "Zutatenliste":
        return Arrays.asList(this.ingredientsAndAllergens.getIngredients());
      case "Gentechnisch verändertes Protein oder DNA: Grad des Vorkommens":
        return Arrays.asList(this.ingredientsAndAllergens.getGeneticallyModifiedDeclarationCode());
      case "Allergenangaben":
        for (AllergyItem item : this.ingredientsAndAllergens.getAllergens()) {
          String result = (item.getAllergen() + ": " + item.getAmount().name());
          list.add(result);
        }
        return list;
      case "Allergenhinweise":
        return Arrays.asList(this.ingredientsAndAllergens.getAllergenStatement());
      case "Zubereitungsgrad":
        for (EnergyNutrientsVitamins item :
            this.ingredientsAndAllergens.getEnergyNutrientsVitamins()) {
          list.add(item.getPreparationState().name());
        }
        return list;
      case "Nährwertkennzeichnung: Bezugsgröße":
        for (EnergyNutrientsVitamins item :
            this.ingredientsAndAllergens.getEnergyNutrientsVitamins()) {
          list.add("" + item.getNutritionalValueReference());
        }
        return list;
      case "Nährwertkennzeichnung: Bezugsgröße: Maßeinheit":
        for (EnergyNutrientsVitamins item :
            this.ingredientsAndAllergens.getEnergyNutrientsVitamins()) {
          list.add(item.getNutritionalValueReferenceUnit().name());
        }
        return list;
      case "Tagesdosis Referenzwert":
        for (EnergyNutrientsVitamins item :
            this.ingredientsAndAllergens.getEnergyNutrientsVitamins()) {
          list.add(item.getDailyValueIntakeReference());
        }
        return list;
      case "Haushaltsportion":
        for (EnergyNutrientsVitamins item :
            this.ingredientsAndAllergens.getEnergyNutrientsVitamins()) {
          list.add(item.getHouseholdServingSize());
        }
        return list;
      case "Energie":
        switch (specifier) {
          case "kJ":
            for (EnergyNutrientsVitamins item :
                this.ingredientsAndAllergens.getEnergyNutrientsVitamins()) {
              list.add("" + item.getCalorificValueKj());
            }
          case "kcal":
            for (EnergyNutrientsVitamins item :
                this.ingredientsAndAllergens.getEnergyNutrientsVitamins()) {
              list.add("" + item.getCalorificValueKcal());
            }
        }
        return list;
      case "Energie: Messgenauigkeit":
        for (EnergyNutrientsVitamins item :
            this.ingredientsAndAllergens.getEnergyNutrientsVitamins()) {
          list.add(item.getCalorificValueMeasurementPrecision().name());
        }
        return list;
      case "Energieangaben: % der Referenzmenge":
        for (EnergyNutrientsVitamins item :
            this.ingredientsAndAllergens.getEnergyNutrientsVitamins()) {
          list.add("" + item.getCalorificPercentageOfDailyValueIntake());
        }
        return list;
      case "Nährwertangaben: Bestandteil":
        return getNutritionalContentAsString(list, specifier);
      case "Nährwertangaben: Wert":
        return getNutritionalContentQuantityContainedAsString(list, specifier);
      case "Nährwertangaben: Maßeinheit":
        return getNutritionalContentMeasurementUnitAsString(list, specifier);
      case "Nährwertangaben: Messgenauigkeit":
        return getNutritionalContentMeasurementPrecisionAsString(list, specifier);
      case "Nährwertangaben: % der Referenzmenge":
        return getNutritionalContentPercentageOfDailyIntakeAsString(list, specifier);
      case "Vitamine / Mineralien: Code":
        return getVitaminMineralAsString(list, specifier);
      case "Vitamine / Mineralien: Wert":
        return getVitaminMineralQuantityContainedAsString(list, specifier);
      case "Vitamine / Mineralien: Maßeinheit":
        return getVitaminMineralMeasurementUnitAsString(list, specifier);
      case "Vitamine / Mineralien: Messgenauigkeit":
        return getVitaminMineralMeasurementPrecisionAsString(list, specifier);
      case "Vitamin-/Mineralienangaben: % der Nährstoffbezugswerte":
        return getVitaminMineralPercentageOfDailyIntakeAsString(list, specifier);
      case "Sonstige Nährwertangaben: Bestandteil":
        return getOtherNutrientAsString(list, specifier);
      case "Sonstige Nährwertangaben: Wert":
        return getOtherNutrientQuantityContainedAsString(list, specifier);
      case "Sonstige Nährwertangaben: Maßeinheit":
        return getOtherNutrientMeasurementUnitAsString(list, specifier);
      case "Sonstige Nährwertangaben: Messgenauigkeit":
        return getOtherNutrientMeasurementPrecisionAsString(list, specifier);
      case "Sonstige Nährwertangaben: % der Referenzmenge":
        return getOtherNutrientPercentageOfDailyIntakeAsString(list, specifier);
      case "Portionsgröße: Wert":
        return Arrays.asList("" + this.ingredientsAndAllergens.getProductServingSize());
      case "Portionsgröße: Maßeinheit":
        return Arrays.asList(this.ingredientsAndAllergens.getProductServingSizeUnit().name());
      case "Anzahl der Portionen pro Packung":
        return Arrays.asList("" + this.ingredientsAndAllergens.getNumberOfServingsPerPackage());
      case "Nährwertanspruch: Code":
        for (NutritionalClaimCode code : this.ingredientsAndAllergens.getNutritionalClaimCode()) {
          list.add(code.name());
        }
        return list;
      case "Nährwertanspruch":
        return this.ingredientsAndAllergens.getNutritionalClaims();
      case "Ursprungsland":
        for (CountryCodes c : this.ingredientsAndAllergens.getTradeItemCountryOfOrigin()) {
          if (c == null) {
            System.out.println("here");
          }
          list.add(c.name().replace("c", ""));
        }
        return list;
      case "Herkunftsort":
        return this.ingredientsAndAllergens.getPlaceOfProvenance();
      case "Health claim":
        for (String term : this.ingredientsAndAllergens.getHealthClaim()) {
          list.add(term);
        }
        return list;
      case "Allgemeine Haftungsklausel":
        return this.ingredientsAndAllergens.getConsumerPackageDisclaimer();
    }
    return null;
  }