You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2022/07/14 10:19:18 UTC
[brooklyn-server] branch master updated: Support arrays in string constraint parser
This is an automated email from the ASF dual-hosted git repository.
heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
The following commit(s) were added to refs/heads/master by this push:
new bc2b8e2f12 Support arrays in string constraint parser
new 98e04b606c Merge remote-tracking branch 'algairim/enhancements/string-constraint-parser'
bc2b8e2f12 is described below
commit bc2b8e2f124ebf0183f0bb13b0d766b9a033dd59
Author: Mykola Mandra <my...@cloudsoft.io>
AuthorDate: Thu Jul 14 11:13:30 2022 +0100
Support arrays in string constraint parser
Signed-off-by: Mykola Mandra <my...@cloudsoft.io>
---
.../core/objs/ConstraintSerialization.java | 55 ++++++++++++----------
.../core/objs/ConstraintSerializationTest.java | 22 ++++++---
2 files changed, 46 insertions(+), 31 deletions(-)
diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/ConstraintSerialization.java b/core/src/main/java/org/apache/brooklyn/core/objs/ConstraintSerialization.java
index 2cb8ea0298..1959fe3ac8 100644
--- a/core/src/main/java/org/apache/brooklyn/core/objs/ConstraintSerialization.java
+++ b/core/src/main/java/org/apache/brooklyn/core/objs/ConstraintSerialization.java
@@ -18,18 +18,12 @@
*/
package org.apache.brooklyn.core.objs;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.function.Function;
-import java.util.function.Supplier;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.config.ConfigConstraints;
import org.apache.brooklyn.util.collections.MutableList;
@@ -42,12 +36,12 @@ import org.apache.brooklyn.util.text.StringEscapes.JavaStringEscapes;
import org.apache.brooklyn.util.text.StringPredicates;
import org.apache.brooklyn.util.text.Strings;
-import com.google.common.annotations.Beta;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
+import java.util.*;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
@Beta
public class ConstraintSerialization {
@@ -163,10 +157,12 @@ public class ConstraintSerialization {
private static String DOUBLE_QUOTED_STRING = "\""+GROUP(ZERO_OR_MORE(OR_GROUP(NOT_CHARSET("\\", "\""), "\\.")))+"\"";
private static String SINGLE_QUOTED_STRING = "\'"+GROUP(ZERO_OR_MORE(OR_GROUP(NOT_CHARSET("\\", "\'"), "\\.")))+"\'";
-
+ private static String SQUARE_BRACKETS = "\\["+GROUP(ZERO_OR_MORE(OR_GROUP(NOT_CHARSET("\\", "["), "\\.")))+"\\]";
+
private static String PREDICATE = "[A-Za-z0-9_\\-\\.]+";
private static Pattern PATTERN_START_WITH_QUOTED_STRING = Pattern.compile("^"+OR_GROUP(DOUBLE_QUOTED_STRING, SINGLE_QUOTED_STRING));
+ private static Pattern PATTERN_START_WITH_ARRAY = Pattern.compile("^"+OR_GROUP(SQUARE_BRACKETS));
private static Pattern PATTERN_START_WITH_PREDICATE = Pattern.compile("^"+GROUP(PREDICATE));
{
@@ -266,11 +262,19 @@ public class ConstraintSerialization {
}
// and allow strings
m = PATTERN_START_WITH_QUOTED_STRING.matcher(remaining);
- if (!m.find()) {
- return false;
+ if (m.find()) {
+ result = JavaStringEscapes.unwrapJavaString(m.group());
+ remaining = remaining.substring(m.end());
+ } else {
+ // and allow arrays
+ m = PATTERN_START_WITH_ARRAY.matcher(remaining);
+ if (m.find()) {
+ result = m.group().substring(1, m.group().length() - 1);
+ remaining = remaining.substring(m.end());
+ } else {
+ return false;
+ }
}
- result = JavaStringEscapes.unwrapJavaString(m.group());
- remaining = remaining.substring(m.end());
} else {
String p1 = m.group(1);
String p2 = serialization.predicateToStringToPreferredName.get(p1);
@@ -333,7 +337,10 @@ public class ConstraintSerialization {
if (key.indexOf("(")>=0) {
// it wasn't json; delegate to the parser again
StringConstraintParser parser = StringConstraintParser.forConstraint(this, key);
- if (!parser.parse()) throw new IllegalStateException("cannot match: "+key);
+ if (!parser.parse()) {
+ Object a = parser.result;
+ throw new IllegalStateException("cannot match: "+key);
+ }
return toPredicateFromJson(parser.result);
}
args = MutableList.of();
diff --git a/core/src/test/java/org/apache/brooklyn/core/objs/ConstraintSerializationTest.java b/core/src/test/java/org/apache/brooklyn/core/objs/ConstraintSerializationTest.java
index 66747ac5b8..c2599fdac5 100644
--- a/core/src/test/java/org/apache/brooklyn/core/objs/ConstraintSerializationTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/objs/ConstraintSerializationTest.java
@@ -18,8 +18,10 @@
*/
package org.apache.brooklyn.core.objs;
-import java.util.List;
-
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableList;
+import com.google.gson.Gson;
import org.apache.brooklyn.core.config.ConfigConstraints;
import org.apache.brooklyn.core.test.BrooklynMgmtUnitTestSupport;
import org.apache.brooklyn.util.collections.MutableList;
@@ -29,10 +31,7 @@ import org.apache.brooklyn.util.text.StringPredicates;
import org.testng.Assert;
import org.testng.annotations.Test;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import com.google.common.collect.ImmutableList;
-import com.google.gson.Gson;
+import java.util.List;
public class ConstraintSerializationTest extends BrooklynMgmtUnitTestSupport {
@@ -145,7 +144,16 @@ public class ConstraintSerializationTest extends BrooklynMgmtUnitTestSupport {
Predicate<String> p = StringPredicates.matchesGlob("???*");
assertSamePredicate(ConstraintSerialization.INSTANCE.toPredicateFromJson("matchesGlob(\"???*\")"), p);
}
-
+
+ @Test
+ public void testAcceptsArray() {
+ Predicate<String> p1 = StringPredicates.matchesGlob("???*");
+ assertSamePredicate(ConstraintSerialization.INSTANCE.toPredicateFromJson("matchesGlob([???*])"), p1);
+
+ Predicate<String> p2 = StringPredicates.matchesGlob("???*, b, 1");
+ assertSamePredicate(ConstraintSerialization.INSTANCE.toPredicateFromJson("matchesGlob([???*, b, 1])"), p2);
+ }
+
@Test
public void testAltPred() {
Predicate<?> p = StringPredicates.isNonBlank();