protected PropertyDefinition getPropertyDefinition(
      FieldSelection fieldSelection, Property property) {
    List<String> propertyPath = getPropertyPath(property.getContextElement());
    if (propertyPath.isEmpty()) {
      return null;
    }

    ContextElement currentElement = null;
    for (ContextElement contextRoot : fieldSelection.getContextElements()) {
      if (contextRoot.getName().equals(propertyPath.get(0))) {
        currentElement = contextRoot;
      }
    }

    propertyPath.remove(0);
    if (currentElement == null) {
      return null;
    }

    while (propertyPath.size() > 0) {
      String name = propertyPath.get(0);
      propertyPath.remove(0);
      currentElement = findByName(currentElement, name);
    }

    for (PropertyDefinition definition : currentElement.getProperties()) {
      if (definition.getName().equals(property.getName())) {
        return definition;
      }
    }

    return null;
  }
  private boolean isSelected(FieldSelection fieldSelection, Property property, boolean multiple) {
    PropertyDefinition definition = getPropertyDefinition(fieldSelection, property);
    if (definition == null) {
      return false;
    }
    TernaryButton.State value =
        multiple ? definition.getValueMultiple() : definition.getValueSingle();
    switch (value) {
      case TRUE:
        return true;
      case FALSE:
        return false;
      case DEFAULT:
        return multiple
            ? generator.isSelectedMultiple(property)
            : generator.isSelectedSingle(property);
    }

    return false;
  }