Skip to content

Commit 0679987

Browse files
Merge pull request BroadleafCommerce#333 from BroadleafCommerce/qa-1556-modifyrule-regex
Update MVEL replacement regex to use a non-greedy selector in the cases of complex expressions
2 parents 666556d + 9785a30 commit 0679987

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

common/src/main/java/org/broadleafcommerce/common/rule/MvelHelper.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -195,15 +195,19 @@ public static boolean evaluateRule(String rule, Map<String, Object> ruleParamete
195195
* For example, given an expression like getProductAttributes()['somekey'] == 'someval', getProductAttributes()['somekey']
196196
* actually returns a ProductAttribute object, not a String, so the comparison is wrong. Instead, we actually want
197197
* to do this: getProductAttributes().?get('somekey').?value == 'someval'. This function performs that replacement
198-
*
198+
*
199+
* <p>
200+
* The modification regex will support both simple and complex expressions like:
201+
* "(MvelHelper.convertField("INTEGER",orderItem.?product.?getProductAttributes()["myinteger"])>0&&MvelHelper.convertField("INTEGER",orderItem.?product.?getProductAttributes()["myinteger"])<10)"
202+
*
199203
* @param rule the rule to replace
200204
* @return a modified version of <b>rule</b>
201205
* @see {@link #getRuleAttributeMaps()}
202206
*/
203207
protected static String modifyExpression(String rule, Map<String, Object> ruleParameters, ParserContext context) {
204208
String modifiedExpression = rule;
205209
for (String attributeMap : getRuleAttributeMaps()) {
206-
modifiedExpression = modifiedExpression.replaceAll(attributeMap + "\\(\\)\\[(.*)\\](?!\\.\\?value)", attributeMap + "().?get($1).?value");
210+
modifiedExpression = modifiedExpression.replaceAll(attributeMap + "\\(\\)\\[(.*?)\\](?!\\.\\?value)", attributeMap + "().?get($1).?value");
207211
}
208212
return modifiedExpression;
209213
}

0 commit comments

Comments
 (0)