You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by tb...@apache.org on 2020/01/07 16:18:40 UTC
[brooklyn-server] branch master updated: Add support for use of DSL
when specifying the pattern for $brooklyn:formatString()
This is an automated email from the ASF dual-hosted git repository.
tbouron 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 7d61a9d Add support for use of DSL when specifying the pattern for $brooklyn:formatString()
new f2160cb Merge pull request #1081 from tbouron/fix/dsl-format-string
7d61a9d is described below
commit 7d61a9d7c8e3eb118083bc130c7b7ef62bc5088e
Author: Thomas Bouron <th...@cloudsoftcorp.com>
AuthorDate: Mon Jan 6 17:31:21 2020 +0000
Add support for use of DSL when specifying the pattern for $brooklyn:formatString()
---
.../spi/dsl/methods/BrooklynDslCommon.java | 14 ++++++-------
.../brooklyn/spi/dsl/DslParseComponentsTest.java | 12 +++++++++++
.../core/sensor/DependentConfiguration.java | 24 ++++++++++++++--------
3 files changed, 35 insertions(+), 15 deletions(-)
diff --git a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java
index 518b501..3c398ab 100644
--- a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java
+++ b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java
@@ -368,10 +368,10 @@ public class BrooklynDslCommon {
* are not yet fully resolved.
*/
@DslAccessible
- public static Object formatString(final String pattern, final Object...args) {
- if (resolved(args)) {
+ public static Object formatString(final Object pattern, final Object...args) {
+ if (resolved(Lists.asList(pattern, args))) {
// if all args are resolved, apply the format string now
- return String.format(pattern, args);
+ return String.format(String.valueOf(pattern), args);
} else {
return new DslFormatString(pattern, args);
}
@@ -433,16 +433,16 @@ public class BrooklynDslCommon {
/**
* Deferred execution of String formatting.
*
- * @see DependentConfiguration#formatString(String, Object...)
+ * @see DependentConfiguration#formatString(Object, Object...)
*/
protected static class DslFormatString extends BrooklynDslDeferredSupplier<String> {
private static final long serialVersionUID = -4849297712650560863L;
- private final String pattern;
+ private final Object pattern;
private final Object[] args;
- public DslFormatString(String pattern, Object ...args) {
+ public DslFormatString(Object pattern, Object ...args) {
this.pattern = pattern;
this.args = args;
}
@@ -526,7 +526,7 @@ public class BrooklynDslCommon {
@SuppressWarnings({ "serial", "unused" })
@Deprecated
private static class FormatString extends DslFormatString {
- public FormatString(String pattern, Object[] args) {
+ public FormatString(Object pattern, Object[] args) {
super(pattern, args);
}
}
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/DslParseComponentsTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/DslParseComponentsTest.java
index 1e8ccb8..ddd8a1f 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/DslParseComponentsTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/DslParseComponentsTest.java
@@ -57,6 +57,7 @@ public class DslParseComponentsTest extends AbstractYamlTest {
" brooklyn.config:",
" dest: 1",
" dest2: 1",
+ " pattern: '%s-%s'",
" brooklyn.children:",
" - type: "+BasicEntity.class.getName(),
" id: two",
@@ -133,6 +134,17 @@ public class DslParseComponentsTest extends AbstractYamlTest {
}
@Test
+ public void testFormatStringWithDslPatternEvaluation() throws Exception {
+ app();
+
+ Object y1 = parseDslExpression("$brooklyn:formatString($brooklyn:config(\"pattern\"), $brooklyn:config(\"dest\"), $brooklyn:config(\"dest2\"))");
+ Assert.assertEquals(y1.toString(), "$brooklyn:formatString(config(\"pattern\"), config(\"dest\"), config(\"dest2\"))");
+
+ String y2 = Tasks.resolveValue(y1, String.class, ((EntityInternal) find("one")).getExecutionContext());
+ Assert.assertEquals(y2.toString(), "1-1");
+ }
+
+ @Test
public void testEntityReferenceAndAttributeWhenReady() throws Exception {
app();
find("one").sensors().set(Attributes.ADDRESS, "1");
diff --git a/core/src/main/java/org/apache/brooklyn/core/sensor/DependentConfiguration.java b/core/src/main/java/org/apache/brooklyn/core/sensor/DependentConfiguration.java
index c2a9804..0e1a22a 100644
--- a/core/src/main/java/org/apache/brooklyn/core/sensor/DependentConfiguration.java
+++ b/core/src/main/java/org/apache/brooklyn/core/sensor/DependentConfiguration.java
@@ -510,27 +510,29 @@ public class DependentConfiguration {
* </pre>
*/
@SuppressWarnings("unchecked")
- public static Task<String> formatString(final String spec, final Object ...args) {
+ public static Task<String> formatString(final Object spec, final Object ...args) {
List<TaskAdaptable<Object>> taskArgs = Lists.newArrayList();
- for (Object arg: args) {
+
+ Object[] newArgs = Lists.asList(spec, args).toArray();
+ for (Object arg: newArgs) {
if (arg instanceof TaskAdaptable) taskArgs.add((TaskAdaptable<Object>)arg);
else if (arg instanceof TaskFactory) taskArgs.add( ((TaskFactory<TaskAdaptable<Object>>)arg).newTask() );
}
return transformMultiple(
- MutableMap.<String,String>of("displayName", "formatting '"+spec+"' with "+taskArgs.size()+" task"+(taskArgs.size()!=1?"s":"")),
+ MutableMap.<String,String>of("displayName", "formatting '"+spec.toString()+"' with "+taskArgs.size()+" task"+(taskArgs.size()!=1?"s":"")),
new Function<List<Object>, String>() {
@Override public String apply(List<Object> input) {
Iterator<?> tri = input.iterator();
- Object[] vv = new Object[args.length];
+ Object[] vv = new Object[newArgs.length];
int i=0;
- for (Object arg : args) {
+ for (Object arg : newArgs) {
if (arg instanceof TaskAdaptable || arg instanceof TaskFactory) vv[i] = tri.next();
else if (arg instanceof DeferredSupplier) vv[i] = ((DeferredSupplier<?>) arg).get();
else vv[i] = arg;
i++;
}
- return String.format(spec, vv);
+ return String.format(vv[0].toString(), Arrays.copyOfRange(vv, 1, vv.length));
}},
taskArgs);
}
@@ -538,7 +540,13 @@ public class DependentConfiguration {
/**
* @throws ImmediateSupplier.ImmediateUnsupportedException if cannot evaluate this in a timely manner
*/
- public static Maybe<String> formatStringImmediately(final String spec, final Object ...args) {
+ public static Maybe<String> formatStringImmediately(final Object spec, final Object ...args) {
+ String pattern = "";
+ Maybe<?> resolvedSpec = resolveImmediately(spec);
+ if (resolvedSpec.isPresent()) {
+ pattern = resolvedSpec.get().toString();
+ }
+
List<Object> resolvedArgs = Lists.newArrayList();
for (Object arg : args) {
Maybe<?> argVal = resolveImmediately(arg);
@@ -546,7 +554,7 @@ public class DependentConfiguration {
resolvedArgs.add(argVal.get());
}
- return Maybe.of(String.format(spec, resolvedArgs.toArray()));
+ return Maybe.of(String.format(pattern, resolvedArgs.toArray()));
}
/**