protected boolean isListOfExpressionsDynamic(
     final List<FormFieldAvailableValue> availableValues) {
   if (availableValues != null && availableValues.size() > 0) {
     for (final FormFieldAvailableValue formFieldAvailableValue : availableValues) {
       if (isExpressionDynamic(formFieldAvailableValue.getLabelExpression())
           || isExpressionDynamic(formFieldAvailableValue.getValueExpression())) {
         return true;
       }
     }
   }
   return false;
 }
 /**
  * @param formWidget
  * @param evaluatedExpressions
  */
 protected void setAvailableValuesListsAndArrays(
     final FormWidget formWidget, final Map<String, Serializable> evaluatedExpressions) {
   final String widgetId = formWidget.getId();
   if (WidgetType.TABLE.equals(formWidget.getType())) {
     if (evaluatedExpressions.containsKey(
         widgetId
             + EXPRESSION_KEY_SEPARATOR
             + WIDGET_AVAILABLE_VALUE_VALUE
             + 0
             + INDEX_SEPARATOR
             + 0)) {
       int availableValueRowIndex = 0;
       do {
         int availableValueColumnIndex = 0;
         do {
           final Object availableValuelabel =
               evaluatedExpressions.get(
                   widgetId
                       + EXPRESSION_KEY_SEPARATOR
                       + WIDGET_AVAILABLE_VALUE_LABEL
                       + availableValueRowIndex
                       + INDEX_SEPARATOR
                       + availableValueColumnIndex);
           final Object availableValueValue =
               evaluatedExpressions.get(
                   widgetId
                       + EXPRESSION_KEY_SEPARATOR
                       + WIDGET_AVAILABLE_VALUE_VALUE
                       + availableValueRowIndex
                       + INDEX_SEPARATOR
                       + availableValueColumnIndex);
           final FormFieldAvailableValue availableValue =
               formWidget
                   .getTableAvailableValues()
                   .get(availableValueRowIndex)
                   .get(availableValueColumnIndex);
           availableValue.setLabel(getStringValue(availableValuelabel));
           availableValue.setValue(getStringValue(availableValueValue));
           availableValueColumnIndex++;
         } while (evaluatedExpressions.containsKey(
             widgetId
                 + EXPRESSION_KEY_SEPARATOR
                 + WIDGET_AVAILABLE_VALUE_VALUE
                 + availableValueRowIndex
                 + INDEX_SEPARATOR
                 + availableValueColumnIndex));
         availableValueRowIndex++;
       } while (evaluatedExpressions.containsKey(
           widgetId
               + EXPRESSION_KEY_SEPARATOR
               + WIDGET_AVAILABLE_VALUE_VALUE
               + availableValueRowIndex
               + INDEX_SEPARATOR
               + 0));
     }
   } else {
     if (evaluatedExpressions.containsKey(
         widgetId + EXPRESSION_KEY_SEPARATOR + WIDGET_AVAILABLE_VALUE_VALUE + 0)) {
       int availableValueIndex = 0;
       do {
         final Object availableValuelabel =
             evaluatedExpressions.get(
                 widgetId
                     + EXPRESSION_KEY_SEPARATOR
                     + WIDGET_AVAILABLE_VALUE_LABEL
                     + availableValueIndex);
         final Object availableValueValue =
             evaluatedExpressions.get(
                 widgetId
                     + EXPRESSION_KEY_SEPARATOR
                     + WIDGET_AVAILABLE_VALUE_VALUE
                     + availableValueIndex);
         final FormFieldAvailableValue availableValue =
             formWidget.getAvailableValues().get(availableValueIndex);
         availableValue.setLabel(getStringValue(availableValuelabel));
         availableValue.setValue(getStringValue(availableValueValue));
         availableValueIndex++;
       } while (evaluatedExpressions.containsKey(
           widgetId
               + EXPRESSION_KEY_SEPARATOR
               + WIDGET_AVAILABLE_VALUE_VALUE
               + availableValueIndex));
     }
   }
 }
 /** @param formWidget */
 protected void addFormWidgetAvailableValuesExpressions(
     final FormWidget formWidget, final List<Expression> expressionsToEvaluate) {
   final String widgetId = formWidget.getId();
   if (formWidget.getAvailableValuesExpression() != null
       && !WidgetType.SUGGESTBOX_ASYNC.equals(formWidget.getType())) {
     final Expression availableValuesExpression = formWidget.getAvailableValuesExpression();
     availableValuesExpression.setName(
         widgetId + EXPRESSION_KEY_SEPARATOR + WIDGET_AVAILABLE_VALUES);
     expressionsToEvaluate.add(availableValuesExpression);
   } else {
     if (WidgetType.TABLE.equals(formWidget.getType())) {
       final List<List<FormFieldAvailableValue>> tableAvailableValues =
           formWidget.getTableAvailableValues();
       if (tableAvailableValues != null && !tableAvailableValues.isEmpty()) {
         int availableValueRowIndex = 0;
         for (final List<FormFieldAvailableValue> formFieldAvailableValuesRow :
             tableAvailableValues) {
           int availableValueIndex = 0;
           for (final FormFieldAvailableValue formFieldAvailableValue :
               formFieldAvailableValuesRow) {
             final Expression availableValueLabelExpression =
                 formFieldAvailableValue.getLabelExpression();
             availableValueLabelExpression.setName(
                 widgetId
                     + EXPRESSION_KEY_SEPARATOR
                     + WIDGET_AVAILABLE_VALUE_LABEL
                     + availableValueRowIndex
                     + INDEX_SEPARATOR
                     + availableValueIndex);
             expressionsToEvaluate.add(availableValueLabelExpression);
             final Expression availableValueValueExpression =
                 formFieldAvailableValue.getValueExpression();
             availableValueValueExpression.setName(
                 widgetId
                     + EXPRESSION_KEY_SEPARATOR
                     + WIDGET_AVAILABLE_VALUE_VALUE
                     + availableValueRowIndex
                     + INDEX_SEPARATOR
                     + availableValueIndex);
             expressionsToEvaluate.add(availableValueValueExpression);
             availableValueIndex++;
           }
           availableValueRowIndex++;
         }
       }
     } else {
       final List<FormFieldAvailableValue> availableValues = formWidget.getAvailableValues();
       if (availableValues != null && !availableValues.isEmpty()) {
         int availableValueIndex = 0;
         for (final FormFieldAvailableValue formFieldAvailableValue : availableValues) {
           final Expression availableValueLabelExpression =
               formFieldAvailableValue.getLabelExpression();
           availableValueLabelExpression.setName(
               widgetId
                   + EXPRESSION_KEY_SEPARATOR
                   + WIDGET_AVAILABLE_VALUE_LABEL
                   + availableValueIndex);
           expressionsToEvaluate.add(availableValueLabelExpression);
           final Expression availableValueValueExpression =
               formFieldAvailableValue.getValueExpression();
           availableValueValueExpression.setName(
               widgetId
                   + EXPRESSION_KEY_SEPARATOR
                   + WIDGET_AVAILABLE_VALUE_VALUE
                   + availableValueIndex);
           expressionsToEvaluate.add(availableValueValueExpression);
           availableValueIndex++;
         }
       }
     }
   }
 }