/**
   * Adds the field values from the service item container to the map.
   *
   * @param service the service.
   * @param container the service item container.
   * @param values the map holding the values.
   * @param locked all locked values for the service.
   */
  private static void addFieldValues(
      CatalogServiceRestRep service,
      Collection<? extends ServiceItemRestRep> items,
      Map<String, String> values,
      Map<String, String> locked) {
    for (ServiceItemRestRep item : items) {
      if (item instanceof ServiceFieldTableRestRep) {
        addColumnValues(service, (ServiceFieldTableRestRep) item, values, locked);
      } else if (item instanceof ServiceFieldGroupRestRep) {
        addFieldValues(service, ((ServiceFieldGroupRestRep) item).getItems(), values, locked);
      } else if (item instanceof ServiceFieldRestRep) {
        ServiceFieldRestRep field = (ServiceFieldRestRep) item;
        String value = getFieldValue(field);
        if (locked.containsKey(field.getName())) {
          value = locked.get(field.getName());
        }
        if (value != null) {
          values.put(field.getName(), value);
        }

        List<String> fieldValues = TextUtils.parseCSV(value);
        if (fieldValues.isEmpty() && field.isRequired()) {
          Validation.required(field.getName(), null);
        }
        for (String fieldValue : fieldValues) {
          ServiceFieldValidator.validateField(service, field, fieldValue);
        }
      }
    }
  }