commit d95325a05afd9f7a9d41bd4646aa40876d699e79 Merge: eb1a53c c7fde7b Author: Anahide Tchertchian Date: Fri Mar 2 23:50:49 2012 +0100 On master: EL field resolution + fixes diff --cc nuxeo-platform-forms-layout-client/src/main/java/org/nuxeo/ecm/platform/forms/layout/facelets/LayoutTagHandler.java index 1fd0acc,1fd0acc..e4d9d23 --- a/nuxeo-platform-forms-layout-client/src/main/java/org/nuxeo/ecm/platform/forms/layout/facelets/LayoutTagHandler.java +++ b/nuxeo-platform-forms-layout-client/src/main/java/org/nuxeo/ecm/platform/forms/layout/facelets/LayoutTagHandler.java @@@ -146,8 -146,8 +146,8 @@@ public class LayoutTagHandler extends T String modeValue = mode.getValue(ctx); String valueName = value.getValue(); -- if (ComponentTagUtils.isValueReference(valueName)) { -- valueName = valueName.substring(2, valueName.length() - 1); ++ if (ComponentTagUtils.isStrictValueReference(valueName)) { ++ valueName = ComponentTagUtils.getBareValueName(valueName); } // expose some layout variables before layout creation so that they diff --cc nuxeo-platform-forms-layout-client/src/main/java/org/nuxeo/ecm/platform/forms/layout/facelets/ValueExpressionHelper.java index cfd6c14,cfd6c14..dc338cd --- a/nuxeo-platform-forms-layout-client/src/main/java/org/nuxeo/ecm/platform/forms/layout/facelets/ValueExpressionHelper.java +++ b/nuxeo-platform-forms-layout-client/src/main/java/org/nuxeo/ecm/platform/forms/layout/facelets/ValueExpressionHelper.java @@@ -24,6 -24,6 +24,7 @@@ import java.util.List import org.nuxeo.common.utils.StringUtils; import org.nuxeo.ecm.platform.forms.layout.api.FieldDefinition; ++import org.nuxeo.ecm.platform.ui.web.util.ComponentTagUtils; /** * Helper for managing value expressions. @@@ -58,7 -58,7 +59,11 @@@ public class ValueExpressionHelper String dmResolverValue; String fieldName = field.getFieldName(); -- if (isFormattedAsELExpression(fieldName)) { ++ if (ComponentTagUtils.isStrictValueReference(fieldName)) { ++ // already an EL expression => ignore schema name, do not resolve ++ // field, ignore previous expression elements ++ dmResolverValue = ComponentTagUtils.getBareValueName(fieldName); ++ } else if (isFormattedAsELExpression(fieldName)) { // already formatted as an EL expression => ignore schema name, do // not resolve field and do not modify expression format expressionElements.add(fieldName); diff --cc nuxeo-platform-forms-layout-client/src/main/java/org/nuxeo/ecm/platform/forms/layout/facelets/WidgetTagHandler.java index 0303023,0303023..da40c71 --- a/nuxeo-platform-forms-layout-client/src/main/java/org/nuxeo/ecm/platform/forms/layout/facelets/WidgetTagHandler.java +++ b/nuxeo-platform-forms-layout-client/src/main/java/org/nuxeo/ecm/platform/forms/layout/facelets/WidgetTagHandler.java @@@ -94,8 -94,8 +94,8 @@@ public class WidgetTagHandler extends M // set value name on widget instance in case it's changed from // first computation String valueName = value.getValue(); -- if (ComponentTagUtils.isValueReference(valueName)) { -- valueName = valueName.substring(2, valueName.length() - 1); ++ if (ComponentTagUtils.isStrictValueReference(valueName)) { ++ valueName = ComponentTagUtils.getBareValueName(valueName); } // add additional properties put on tag List reservedVars = Arrays.asList(reservedVarsArray); diff --cc nuxeo-platform-forms-layout-client/src/main/java/org/nuxeo/ecm/platform/forms/layout/facelets/WidgetTypeTagHandler.java index bd61c79,bd61c79..e2ed65b --- a/nuxeo-platform-forms-layout-client/src/main/java/org/nuxeo/ecm/platform/forms/layout/facelets/WidgetTypeTagHandler.java +++ b/nuxeo-platform-forms-layout-client/src/main/java/org/nuxeo/ecm/platform/forms/layout/facelets/WidgetTypeTagHandler.java @@@ -137,8 -137,8 +137,8 @@@ public class WidgetTypeTagHandler exten String valueName = null; if (value != null) { valueName = value.getValue(); -- if (ComponentTagUtils.isValueReference(valueName)) { -- valueName = valueName.substring(2, valueName.length() - 1); ++ if (ComponentTagUtils.isStrictValueReference(valueName)) { ++ valueName = ComponentTagUtils.getBareValueName(valueName); } } List fieldsValue = new ArrayList(); diff --cc nuxeo-platform-ui-web/src/main/java/org/nuxeo/ecm/platform/ui/web/util/ComponentTagUtils.java index bbfdf47,bbfdf47..547478c --- a/nuxeo-platform-ui-web/src/main/java/org/nuxeo/ecm/platform/ui/web/util/ComponentTagUtils.java +++ b/nuxeo-platform-ui-web/src/main/java/org/nuxeo/ecm/platform/ui/web/util/ComponentTagUtils.java @@@ -47,7 -47,7 +47,7 @@@ public final class ComponentTagUtils * Returns true if the specified value conforms to the syntax requirements * of a value binding expression. * -- * @param value the value to evaluate (not null) ++ * @param value the value to evaluate, returns false if null */ public static boolean isValueReference(String value) { if (value == null) { @@@ -59,6 -59,6 +59,41 @@@ } /** ++ * Returns true if the specified value is a value binding expression, ++ * starting and ending with EL markers. ++ * ++ * @param value the value to evaluate, returns false if null ++ * @since 5.6 ++ */ ++ public static boolean isStrictValueReference(String value) { ++ if (value == null) { ++ return false; ++ } ++ value = value.trim(); ++ return (value.startsWith("#{") ++ && value.indexOf("#{") < value.indexOf('}') && value.endsWith("}")) ++ || (value.startsWith("${") ++ && value.indexOf("${") < value.indexOf('}') && value.endsWith("}")); ++ } ++ ++ /** ++ * Returns a value name for given strict value reference. If reference is ++ * #{foo} or ${foo}, will return "foo". ++ * ++ * @since 5.6 ++ * @throws IllegalArgumentException if reference is null or ++ * {@link #isStrictValueReference(String)} returns false. ++ * @param valueReference ++ */ ++ public static String getBareValueName(String valueReference) { ++ if (!isStrictValueReference(valueReference)) { ++ throw new IllegalArgumentException(String.format( ++ "Invalid value reference '%s'", valueReference)); ++ } ++ return valueReference.substring(2, valueReference.length() - 1); ++ } ++ ++ /** * Returns true if the specified value conforms to the syntax requirements * of a method binding expression. *