[1/2] brooklyn-library git commit: Update Docker image to use Maven 3.5.4

2018-09-24 Thread aledsage
Repository: brooklyn-library
Updated Branches:
  refs/heads/master 8ac59f977 -> 0c0f1a81d


Update Docker image to use Maven 3.5.4



Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/0fd00cc8
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/0fd00cc8
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/0fd00cc8

Branch: refs/heads/master
Commit: 0fd00cc8a210af991c92b1bd7b89335eb4c1e78e
Parents: a94f7d8
Author: Sylwester Lachiewicz 
Authored: Sat Sep 8 14:44:57 2018 +0200
Committer: Sylwester Lachiewicz 
Committed: Sat Sep 8 14:44:57 2018 +0200

--
 Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/0fd00cc8/Dockerfile
--
diff --git a/Dockerfile b/Dockerfile
index 0c5b9f5..662762f 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-FROM maven:3.5.2-jdk-8-alpine
+FROM maven:3.5.4-jdk-8-alpine
 
 # Install necessary binaries to build brooklyn-library
 RUN apk add --no-cache git procps



[2/2] brooklyn-library git commit: This closes #158

2018-09-24 Thread aledsage
This closes #158


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/0c0f1a81
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/0c0f1a81
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/0c0f1a81

Branch: refs/heads/master
Commit: 0c0f1a81d8c39124e47662ee9677381fa2c790ff
Parents: 8ac59f9 0fd00cc
Author: Aled Sage 
Authored: Mon Sep 24 17:07:52 2018 +0100
Committer: Aled Sage 
Committed: Mon Sep 24 17:07:52 2018 +0100

--
 Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
--




[2/2] brooklyn-library git commit: This closes #159

2018-09-24 Thread tbouron
This closes #159


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/8ac59f97
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/8ac59f97
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/8ac59f97

Branch: refs/heads/master
Commit: 8ac59f977fff73d2fea559c47502b885887241e5
Parents: a94f7d8 5a9fc95
Author: Thomas Bouron 
Authored: Mon Sep 24 14:34:10 2018 +0100
Committer: Thomas Bouron 
Committed: Mon Sep 24 14:34:10 2018 +0100

--
 Jenkinsfile | 10 +-
 README.md   |  7 +--
 2 files changed, 10 insertions(+), 7 deletions(-)
--




[1/2] brooklyn-library git commit: Jenkins docker: use non-root user

2018-09-24 Thread tbouron
Repository: brooklyn-library
Updated Branches:
  refs/heads/master a94f7d84e -> 8ac59f977


Jenkins docker: use non-root user


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/5a9fc95a
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/5a9fc95a
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/5a9fc95a

Branch: refs/heads/master
Commit: 5a9fc95a99cd7b21fe2de9707e4a3286a358635f
Parents: a94f7d8
Author: Aled Sage 
Authored: Mon Sep 24 13:32:07 2018 +0100
Committer: Aled Sage 
Committed: Mon Sep 24 14:03:56 2018 +0100

--
 Jenkinsfile | 10 +-
 README.md   |  7 +--
 2 files changed, 10 insertions(+), 7 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/5a9fc95a/Jenkinsfile
--
diff --git a/Jenkinsfile b/Jenkinsfile
index 42af8b3..76a41e3 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -36,16 +36,16 @@ node(label: 'ubuntu') {
 }
 
 stage('Run tests') {
-environmentDockerImage.inside('-i --name 
brooklyn-${DOCKER_TAG} -v ${WORKSPACE}/.m2:/root/.m2 -v ${WORKSPACE}:/usr/build 
-w /usr/build') {
-sh 'mvn clean install'
+environmentDockerImage.inside('-i --name 
brooklyn-${DOCKER_TAG} -u 910:910 -v ${WORKSPACE}/.m2:/var/maven/.m2 -v 
${WORKSPACE}:/usr/build -w /usr/build -e MAVEN_CONFIG=/var/maven/.m2') {
+sh 'mvn clean install -Duser.name=$(id -un 910)'
 }
 }
 
 // Conditional stage to deploy artifacts, when not building a PR
 if (env.CHANGE_ID == null) {
 stage('Deploy artifacts') {
-environmentDockerImage.inside('-i --name 
brooklyn-${DOCKER_TAG} -v ${WORKSPACE}/.m2:/root/.m2 -v ${WORKSPACE}:/usr/build 
-w /usr/build') {
-sh 'mvn deploy -DskipTests'
+environmentDockerImage.inside('-i --name 
brooklyn-${DOCKER_TAG} -u 910:910 -v ${WORKSPACE}/.m2:/var/maven/.m2 -v 
${WORKSPACE}:/usr/build -w /usr/build -e MAVEN_CONFIG=/var/maven/.m2') {
+sh 'mvn deploy -DskipTests -Duser.name=$(id -un 910)'
 }
 }
 
@@ -79,4 +79,4 @@ node(label: 'ubuntu') {
 ])
 }
 }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/5a9fc95a/README.md
--
diff --git a/README.md b/README.md
index c046066..147295e 100644
--- a/README.md
+++ b/README.md
@@ -23,7 +23,10 @@ docker build -t brooklyn:library .
 Then run the build:
 
 ```bash
-docker run -i --rm --name brooklyn-library -v ${HOME}/.m2:/root/.m2 -v 
${PWD}:/usr/build -w /usr/build brooklyn:library mvn clean install
+docker run -i --rm --name brooklyn-library -u $(id -u $(whoami)):$(id -g 
$(whoami)) \
+-e MAVEN_CONFIG=/var/maven/.m2 \
+-v ${HOME}/.m2:/var/maven/.m2 -v ${PWD}:/usr/build -w /usr/build \
+brooklyn:library mvn clean install -Duser.home=/var/maven 
-Duser.name=$(whoami)
 ```
 
 ### Using maven
@@ -32,4 +35,4 @@ Simply run:
 
 ```bash
 mvn clean install
-```
\ No newline at end of file
+```



[1/2] brooklyn-docs git commit: document add'l constraints

2018-09-24 Thread aledsage
Repository: brooklyn-docs
Updated Branches:
  refs/heads/master 2b06e9605 -> 1730d7262


document add'l constraints


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-docs/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-docs/commit/43ae2e94
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-docs/tree/43ae2e94
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-docs/diff/43ae2e94

Branch: refs/heads/master
Commit: 43ae2e947bff5bb659b66714fb361895e91f6b73
Parents: 97515cb
Author: Alex Heneveld 
Authored: Mon Sep 24 10:49:12 2018 +0100
Committer: Alex Heneveld 
Committed: Mon Sep 24 10:49:12 2018 +0100

--
 guide/blueprints/entity-configuration.md | 14 ++
 1 file changed, 10 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-docs/blob/43ae2e94/guide/blueprints/entity-configuration.md
--
diff --git a/guide/blueprints/entity-configuration.md 
b/guide/blueprints/entity-configuration.md
index 1bd1db1..e3b4434 100644
--- a/guide/blueprints/entity-configuration.md
+++ b/guide/blueprints/entity-configuration.md
@@ -55,13 +55,19 @@ and for a complete reference on the syntax of 
`brooklyn.parameters` see that sec
 
  Config Key Constraints
 
-The config keys in the `brooklyn.parameters` can also have constraints 
defined, for what values
+The config keys in the `brooklyn.parameters` can also have a list of 
constraints defined, for what values
 are valid. If more than one constraint is defined, then they must all be 
satisfied. The constraints 
 can be any of:
 
-* `required`: deployment will fail if no value is supplied for this config key.
-* `regex: ...`: the value will be compared against the given regular 
expression.
-* A predicate, declared using the DSL `$brooklyn:object`.  
+* `required`: deployment will fail if no value is supplied for this config key
+* `regex: `: the value must match the regular expression ``
+* `glob: `: the value must match the bash-style wildcard glob 
``
+* `urlExists: `: the server must be able to resolve and access the URL 
``
+* `forbiddenIf: `: setting a value is disallowed if the config key 
`` has a value set
+* `forbiddenUnless: `: setting a value is disallowed if the config key 
`` does not have a value set
+* `requiredIf: `: a value is required if the config key `` has a 
value set
+* `requiredUnless: `: a value is required if the config key `` does 
not have a value set
+* Any java `Predicate`, declared using the DSL `$brooklyn:object`.  
 
 This is illustrated in the example below:
 



[2/2] brooklyn-docs git commit: This closes #268

2018-09-24 Thread aledsage
This closes #268


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-docs/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-docs/commit/1730d726
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-docs/tree/1730d726
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-docs/diff/1730d726

Branch: refs/heads/master
Commit: 1730d726211ec7dcb63b89aa786f6b49aa668b2c
Parents: 2b06e96 43ae2e9
Author: Aled Sage 
Authored: Mon Sep 24 14:22:11 2018 +0100
Committer: Aled Sage 
Committed: Mon Sep 24 14:22:11 2018 +0100

--
 guide/blueprints/entity-configuration.md | 14 ++
 1 file changed, 10 insertions(+), 4 deletions(-)
--




[7/7] brooklyn-server git commit: This closes #999

2018-09-24 Thread aledsage
This closes #999


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/a3d0ea06
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/a3d0ea06
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/a3d0ea06

Branch: refs/heads/master
Commit: a3d0ea06edcd15362688107f0afd9b153048c7e6
Parents: e27cc7b 3d214b8
Author: Aled Sage 
Authored: Mon Sep 24 12:30:11 2018 +0100
Committer: Aled Sage 
Committed: Mon Sep 24 12:30:11 2018 +0100

--
 .../brooklyn/core/config/ConfigConstraints.java | 103 +
 .../brooklyn/core/objs/BasicSpecParameter.java  |  51 +--
 .../core/objs/ConstraintSerialization.java  | 375 +++
 .../brooklyn/util/core/ResourcePredicates.java  |   6 +-
 .../core/config/ConfigKeyConstraintTest.java| 133 +--
 .../objs/BasicSpecParameterFromListTest.java|   5 +-
 .../core/objs/ConstraintSerializationTest.java  | 121 ++
 .../brooklyn/rest/domain/ConfigSummary.java |  17 +-
 .../java/org/apache/brooklyn/test/Asserts.java  |  16 +-
 .../brooklyn/util/text/StringPredicates.java|  11 +-
 .../org/apache/brooklyn/util/text/Strings.java  |  22 +-
 .../org/apache/brooklyn/test/AssertsTest.java   |   2 +-
 12 files changed, 752 insertions(+), 110 deletions(-)
--




[4/7] brooklyn-server git commit: forgot to use deserialization routines when parsing catalog input

2018-09-24 Thread aledsage
forgot to use deserialization routines when parsing catalog input

also test and fix for some edge-cases in serializing


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/fdb2784a
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/fdb2784a
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/fdb2784a

Branch: refs/heads/master
Commit: fdb2784a8bdc7a3bc53508a381b258539f7aafc0
Parents: 5fec275
Author: Alex Heneveld 
Authored: Sat Sep 22 01:24:09 2018 +0100
Committer: Alex Heneveld 
Committed: Sat Sep 22 01:24:09 2018 +0100

--
 .../brooklyn/core/config/ConfigConstraints.java |  9 
 .../brooklyn/core/objs/BasicSpecParameter.java  | 51 +---
 .../core/objs/ConstraintSerialization.java  |  9 ++--
 .../brooklyn/util/core/ResourcePredicates.java  |  2 +-
 .../core/objs/ConstraintSerializationTest.java  | 45 +
 5 files changed, 52 insertions(+), 64 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/fdb2784a/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java
--
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java 
b/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java
index 4ee584d..c234aae 100644
--- a/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java
+++ b/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java
@@ -22,6 +22,7 @@ package org.apache.brooklyn.core.config;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.location.Location;
@@ -244,6 +245,14 @@ public abstract class ConfigConstraints {
 public String toString() {
 return "required()";
 }
+@Override
+public boolean equals(Object obj) {
+return (obj instanceof RequiredPredicate) && 
obj.getClass().equals(getClass());
+}
+@Override
+public int hashCode() {
+return Objects.hash(toString());
+}
 }
 
 private static abstract class OtherKeyPredicate implements 
BrooklynObjectPredicate {

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/fdb2784a/core/src/main/java/org/apache/brooklyn/core/objs/BasicSpecParameter.java
--
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/objs/BasicSpecParameter.java 
b/core/src/main/java/org/apache/brooklyn/core/objs/BasicSpecParameter.java
index 7c1bde0..7c777f8 100644
--- a/core/src/main/java/org/apache/brooklyn/core/objs/BasicSpecParameter.java
+++ b/core/src/main/java/org/apache/brooklyn/core/objs/BasicSpecParameter.java
@@ -18,8 +18,6 @@
  */
 package org.apache.brooklyn.core.objs;
 
-import static com.google.common.base.Preconditions.checkArgument;
-
 import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -55,7 +53,6 @@ import org.apache.brooklyn.util.collections.MutableList;
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.collections.MutableSet;
 import org.apache.brooklyn.util.guava.Maybe;
-import org.apache.brooklyn.util.text.StringPredicates;
 import org.apache.brooklyn.util.time.Duration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -70,7 +67,6 @@ import com.google.common.base.Predicates;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterables;
 import com.google.common.reflect.TypeToken;
 
 public class BasicSpecParameter implements SpecParameter{
@@ -221,18 +217,6 @@ public class BasicSpecParameter implements 
SpecParameter{
 .put("port", PortRange.class)
 .build();
 
-private static final Map> BUILT_IN_CONSTRAINTS = 
ImmutableMap.>of(
-"required", StringPredicates.isNonBlank());
-
-private static final Map>> 
BUILT_IN_CONSTRAINT_FACTORIES = ImmutableMap.>>of(
-"regex", new Function>() {
-@Override public Predicate apply(Object input) {
-// TODO Could try to handle deferred supplier as well?
-checkArgument(input instanceof String, "Constraint 
regex value must be a string, but got %s (%s)",
-(input == null ? "null" : 
input.getClass().getName()), input);
-return StringPredicates.matchesRegex((String)input);
-}});
-
  

[1/7] brooklyn-server git commit: proper serialization and deserialization for constraints

2018-09-24 Thread aledsage
Repository: brooklyn-server
Updated Branches:
  refs/heads/master e27cc7b6d -> a3d0ea06e


proper serialization and deserialization for constraints


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/bd34655c
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/bd34655c
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/bd34655c

Branch: refs/heads/master
Commit: bd34655c81400f8228c329ecec31ce6e378f78b0
Parents: e27cc7b
Author: Alex Heneveld 
Authored: Thu Sep 20 22:34:25 2018 +0100
Committer: Alex Heneveld 
Committed: Thu Sep 20 22:34:25 2018 +0100

--
 .../brooklyn/core/config/ConfigConstraints.java |  25 ++
 .../core/objs/ConstraintSerialization.java  | 354 +++
 .../core/objs/ConstraintSerializationTest.java  |  84 +
 .../brooklyn/rest/domain/ConfigSummary.java |  17 +-
 .../brooklyn/util/text/StringPredicates.java|  11 +-
 .../org/apache/brooklyn/util/text/Strings.java  |  22 +-
 .../org/apache/brooklyn/test/AssertsTest.java   |   2 +-
 7 files changed, 497 insertions(+), 18 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/bd34655c/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java
--
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java 
b/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java
index 17b7c9d..35f672e 100644
--- a/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java
+++ b/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java
@@ -33,6 +33,7 @@ import org.apache.brooklyn.core.entity.EntityInternal;
 import org.apache.brooklyn.core.objs.AbstractEntityAdjunct;
 import org.apache.brooklyn.core.objs.BrooklynObjectInternal;
 import org.apache.brooklyn.core.objs.BrooklynObjectPredicate;
+import org.apache.brooklyn.core.objs.ConstraintSerialization;
 import org.apache.brooklyn.util.core.task.Tasks;
 import org.apache.brooklyn.util.exceptions.ReferenceWithError;
 import org.apache.brooklyn.util.guava.Maybe;
@@ -185,6 +186,13 @@ public abstract class ConfigConstraints {
 return brooklynObject;
 }
 
+/**
+ * Convenience method to get the serialization routines.
+ */
+public static ConstraintSerialization serialization() {
+return ConstraintSerialization.INSTANCE;
+}
+
 private static class EntityConfigConstraints extends 
ConfigConstraints {
 public EntityConfigConstraints(Entity brooklynObject) {
 super(brooklynObject);
@@ -218,4 +226,21 @@ public abstract class ConfigConstraints {
 }
 }
 
+public static  Predicate required() {
+return new RequiredPredicate();
+}
+
+/** Predicate indicating a field is required:  it must not be null and if 
a string it must not be empty */
+public static class RequiredPredicate implements Predicate {
+@Override
+public boolean apply(T input) {
+if (input==null) return false;
+if (input instanceof CharSequence && 
((CharSequence)input).length()==0) return false;
+return true;
+}
+@Override
+public String toString() {
+return "required()";
+}
+}
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/bd34655c/core/src/main/java/org/apache/brooklyn/core/objs/ConstraintSerialization.java
--
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
new file mode 100644
index 000..a6b7039
--- /dev/null
+++ 
b/core/src/main/java/org/apache/brooklyn/core/objs/ConstraintSerialization.java
@@ -0,0 +1,354 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.objs;
+
+import java.util.Collection;

[5/7] brooklyn-server git commit: address further PR comments

2018-09-24 Thread aledsage
address further PR comments


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/fc1c5883
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/fc1c5883
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/fc1c5883

Branch: refs/heads/master
Commit: fc1c588381029a3623c155d88a76185d7e01f696
Parents: fdb2784
Author: Alex Heneveld 
Authored: Sat Sep 22 01:45:00 2018 +0100
Committer: Alex Heneveld 
Committed: Sat Sep 22 01:45:00 2018 +0100

--
 .../apache/brooklyn/core/config/ConfigConstraints.java| 10 +-
 .../brooklyn/core/objs/ConstraintSerialization.java   |  4 +++-
 .../org/apache/brooklyn/util/core/ResourcePredicates.java |  2 +-
 3 files changed, 9 insertions(+), 7 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/fc1c5883/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java
--
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java 
b/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java
index c234aae..67d8aef 100644
--- a/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java
+++ b/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java
@@ -256,7 +256,7 @@ public abstract class ConfigConstraints {
 }
 
 private static abstract class OtherKeyPredicate implements 
BrooklynObjectPredicate {
-private String otherKeyName;
+private final String otherKeyName;
 
 public OtherKeyPredicate(String otherKeyName) {
 this.otherKeyName = otherKeyName;
@@ -286,7 +286,7 @@ public abstract class ConfigConstraints {
 }
 
 public static Predicate forbiddenIf(String otherKeyName) { return 
new ForbiddenIfPredicate(otherKeyName); }
-public static class ForbiddenIfPredicate extends OtherKeyPredicate {
+protected static class ForbiddenIfPredicate extends OtherKeyPredicate {
 public ForbiddenIfPredicate(String otherKeyName) { 
super(otherKeyName); }
 @Override public String predicateName() { return "forbiddenIf"; }
 @Override public boolean test(Object thisValue, Object otherValue) { 
@@ -295,7 +295,7 @@ public abstract class ConfigConstraints {
 }
 
 public static Predicate forbiddenUnless(String otherKeyName) { 
return new ForbiddenUnlessPredicate(otherKeyName); }
-public static class ForbiddenUnlessPredicate extends OtherKeyPredicate {
+protected static class ForbiddenUnlessPredicate extends OtherKeyPredicate {
 public ForbiddenUnlessPredicate(String otherKeyName) { 
super(otherKeyName); }
 @Override public String predicateName() { return "forbiddenUnless"; }
 @Override public boolean test(Object thisValue, Object otherValue) { 
@@ -304,7 +304,7 @@ public abstract class ConfigConstraints {
 }
 
 public static Predicate requiredIf(String otherKeyName) { return 
new RequiredIfPredicate(otherKeyName); }
-public static class RequiredIfPredicate extends OtherKeyPredicate {
+protected static class RequiredIfPredicate extends OtherKeyPredicate {
 public RequiredIfPredicate(String otherKeyName) { super(otherKeyName); 
}
 @Override public String predicateName() { return "requiredIf"; }
 @Override public boolean test(Object thisValue, Object otherValue) { 
@@ -313,7 +313,7 @@ public abstract class ConfigConstraints {
 }
 
 public static Predicate requiredUnless(String otherKeyName) { 
return new RequiredUnlessPredicate(otherKeyName); }
-public static class RequiredUnlessPredicate extends OtherKeyPredicate {
+protected static class RequiredUnlessPredicate extends OtherKeyPredicate {
 public RequiredUnlessPredicate(String otherKeyName) { 
super(otherKeyName); }
 @Override public String predicateName() { return "requiredUnless"; }
 @Override public boolean test(Object thisValue, Object otherValue) { 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/fc1c5883/core/src/main/java/org/apache/brooklyn/core/objs/ConstraintSerialization.java
--
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 2fef0e8..984e2e7 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
@@ -40,12 +40,14 @@ import 
org.apache.brooklyn.util.text.StringEscapes.JavaStringEscapes;
 import org.apache.brooklyn.util.text.StringPredicates;
 import 

[6/7] brooklyn-server git commit: split out notNull as different to required=nonBlank, fix tests

2018-09-24 Thread aledsage
split out notNull as different to required=nonBlank, fix tests


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/3d214b89
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/3d214b89
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/3d214b89

Branch: refs/heads/master
Commit: 3d214b89fc5308451e5078ee4651f878eab6d081
Parents: fc1c588
Author: Alex Heneveld 
Authored: Sat Sep 22 02:19:42 2018 +0100
Committer: Alex Heneveld 
Committed: Sat Sep 22 02:48:58 2018 +0100

--
 .../org/apache/brooklyn/core/objs/ConstraintSerialization.java  | 3 ++-
 .../brooklyn/core/objs/BasicSpecParameterFromListTest.java  | 5 +++--
 .../apache/brooklyn/core/objs/ConstraintSerializationTest.java  | 2 +-
 3 files changed, 6 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/3d214b89/core/src/main/java/org/apache/brooklyn/core/objs/ConstraintSerialization.java
--
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 984e2e7..32b71f0 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
@@ -167,12 +167,13 @@ public class ConstraintSerialization {
 @SuppressWarnings({ "unchecked", "rawtypes" })
 private void init() {
 PredicateSerializationRuleAdder.predicateListConstructor((o) -> 
ConfigConstraints.required()).
-equivalentPredicates(Predicates.notNull(), 
StringPredicates.isNonBlank()).add(this);
+equivalentPredicates(StringPredicates.isNonBlank()).add(this);
 
 PredicateSerializationRuleAdder.predicateListConstructor((o) -> 
Predicates.or((Iterable)o)).preferredName("any").equivalentNames("or").add(this);
 PredicateSerializationRuleAdder.predicateListConstructor((o) -> /* and 
predicate is default when given list */ 
toPredicateFromJson(o)).preferredName("all").sample(Predicates.and(Collections.emptyList())).equivalentNames("and").add(this);
 
PredicateSerializationRuleAdder.noArgConstructor(Predicates::alwaysFalse).add(this);
 
PredicateSerializationRuleAdder.noArgConstructor(Predicates::alwaysTrue).add(this);
+
PredicateSerializationRuleAdder.noArgConstructor(Predicates::notNull).add(this);
 
 
PredicateSerializationRuleAdder.noArgConstructor(ResourcePredicates::urlExists).preferredName("urlExists").add(this);
 
PredicateSerializationRuleAdder.noArgConstructor(StringPredicates::isBlank).add(this);

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/3d214b89/core/src/test/java/org/apache/brooklyn/core/objs/BasicSpecParameterFromListTest.java
--
diff --git 
a/core/src/test/java/org/apache/brooklyn/core/objs/BasicSpecParameterFromListTest.java
 
b/core/src/test/java/org/apache/brooklyn/core/objs/BasicSpecParameterFromListTest.java
index 887e054..3ce8d9c 100644
--- 
a/core/src/test/java/org/apache/brooklyn/core/objs/BasicSpecParameterFromListTest.java
+++ 
b/core/src/test/java/org/apache/brooklyn/core/objs/BasicSpecParameterFromListTest.java
@@ -28,6 +28,7 @@ import java.util.List;
 import org.apache.brooklyn.api.mgmt.classloading.BrooklynClassLoadingContext;
 import org.apache.brooklyn.api.objs.SpecParameter;
 import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.ConfigConstraints;
 import 
org.apache.brooklyn.core.mgmt.classloading.JavaBrooklynClassLoadingContext;
 import org.apache.brooklyn.core.test.BrooklynMgmtUnitTestSupport;
 import org.apache.brooklyn.util.text.StringPredicates;
@@ -99,7 +100,7 @@ public class BasicSpecParameterFromListTest extends 
BrooklynMgmtUnitTestSupport
 assertEquals(type.getDefaultValue(), defaultValue);
 assertEquals(type.getDescription(), description);
 assertTrue(type.getInheritanceByContext().values().isEmpty(), 
"Unexpected inheritance: "+type.getInheritanceByContext());
-assertConstraint(type.getConstraint(), StringPredicates.isNonBlank());
+assertConstraint(type.getConstraint(), ConfigConstraints.required());
 }
 
 @Test
@@ -132,7 +133,7 @@ public class BasicSpecParameterFromListTest extends 
BrooklynMgmtUnitTestSupport
 "name", name,
 "constraints", ImmutableList.of(constraint)));
 ConfigKey type = input.getConfigKey();
-assertConstraint(type.getConstraint(), StringPredicates.isNonBlank());
+assertConstraint(type.getConstraint(), ConfigConstraints.required());
 }
 
 

[3/7] brooklyn-server git commit: accept toStrings in/as json

2018-09-24 Thread aledsage
accept toStrings in/as json


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/5fec2756
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/5fec2756
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/5fec2756

Branch: refs/heads/master
Commit: 5fec2756f61b6bba1f37d96a04c07ef9229ec4de
Parents: 0d6f572
Author: Alex Heneveld 
Authored: Fri Sep 21 12:32:55 2018 +0100
Committer: Alex Heneveld 
Committed: Fri Sep 21 12:32:55 2018 +0100

--
 .../brooklyn/core/objs/ConstraintSerialization.java |  6 ++
 .../brooklyn/core/objs/ConstraintSerializationTest.java | 12 
 2 files changed, 18 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5fec2756/core/src/main/java/org/apache/brooklyn/core/objs/ConstraintSerialization.java
--
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 57258bc..6844a72 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
@@ -314,6 +314,12 @@ public class ConstraintSerialization {
 List args;
 if (o instanceof String) {
 key = (String)o;
+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);
+return toPredicateFromJson(parser.result);
+}
 args = MutableList.of();
 } else if (o instanceof Map) {
 if (((Map)o).size()!=1) {

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5fec2756/core/src/test/java/org/apache/brooklyn/core/objs/ConstraintSerializationTest.java
--
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 2065044..539fc87 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
@@ -67,6 +67,18 @@ public class ConstraintSerializationTest extends 
BrooklynMgmtUnitTestSupport {
 }
 
 @Test
+public void testAcceptsMap() {
+Predicate p = StringPredicates.matchesGlob("???*");
+
Assert.assertEquals(ConstraintSerialization.INSTANCE.toPredicateFromJson(MutableMap.of("matchesGlob",
 "???*")).toString(), p.toString());
+}
+
+@Test
+public void testAcceptsString() {
+Predicate p = StringPredicates.matchesGlob("???*");
+
Assert.assertEquals(ConstraintSerialization.INSTANCE.toPredicateFromJson("matchesGlob(\"???*\")").toString(),
 p.toString());
+}
+
+@Test
 public void testAltPred() {
 Predicate p = Predicates.notNull();
 Assert.assertEquals(ConstraintSerialization.INSTANCE.toJsonList(p),



[2/7] brooklyn-server git commit: add {forbidden, required}{If, Unless} constraints

2018-09-24 Thread aledsage
add {forbidden,required}{If,Unless} constraints


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/0d6f5721
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/0d6f5721
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/0d6f5721

Branch: refs/heads/master
Commit: 0d6f57219bd7ce36c912fddd26f37a46c6f8dbc2
Parents: bd34655
Author: Alex Heneveld 
Authored: Fri Sep 21 11:49:47 2018 +0100
Committer: Alex Heneveld 
Committed: Fri Sep 21 11:49:47 2018 +0100

--
 .../brooklyn/core/config/ConfigConstraints.java |  69 ++
 .../core/objs/ConstraintSerialization.java  |  13 +-
 .../brooklyn/util/core/ResourcePredicates.java  |   6 +-
 .../core/config/ConfigKeyConstraintTest.java| 133 ++-
 .../java/org/apache/brooklyn/test/Asserts.java  |  16 ++-
 5 files changed, 195 insertions(+), 42 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d6f5721/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java
--
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java 
b/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java
index 35f672e..4ee584d 100644
--- a/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java
+++ b/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java
@@ -30,6 +30,7 @@ import org.apache.brooklyn.api.objs.BrooklynObject;
 import org.apache.brooklyn.api.objs.EntityAdjunct;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.entity.EntityInternal;
+import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
 import org.apache.brooklyn.core.objs.AbstractEntityAdjunct;
 import org.apache.brooklyn.core.objs.BrooklynObjectInternal;
 import org.apache.brooklyn.core.objs.BrooklynObjectPredicate;
@@ -37,6 +38,7 @@ import org.apache.brooklyn.core.objs.ConstraintSerialization;
 import org.apache.brooklyn.util.core.task.Tasks;
 import org.apache.brooklyn.util.exceptions.ReferenceWithError;
 import org.apache.brooklyn.util.guava.Maybe;
+import org.apache.brooklyn.util.text.StringEscapes.JavaStringEscapes;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -243,4 +245,71 @@ public abstract class ConfigConstraints {
 return "required()";
 }
 }
+
+private static abstract class OtherKeyPredicate implements 
BrooklynObjectPredicate {
+private String otherKeyName;
+
+public OtherKeyPredicate(String otherKeyName) {
+this.otherKeyName = otherKeyName;
+}
+
+public abstract String predicateName();
+
+@Override
+public String toString() {
+return 
predicateName()+"("+JavaStringEscapes.wrapJavaString(otherKeyName)+")";
+}
+
+@Override
+public boolean apply(Object input) {
+return apply(input, 
BrooklynTaskTags.getContextEntity(Tasks.current()));
+}
+
+@Override
+public boolean apply(Object input, BrooklynObject context) {
+if (context==null) return true;
+// would be nice to offer an explanation, but that will need a 
richer API or a thread local
+return test(input, 
context.config().get(ConfigKeys.newConfigKey(Object.class, otherKeyName)));
+}
+
+public abstract boolean test(Object thisValue, Object otherValue);
+
+}
+
+public static Predicate forbiddenIf(String otherKeyName) { return 
new ForbiddenIfPredicate(otherKeyName); }
+public static class ForbiddenIfPredicate extends OtherKeyPredicate {
+public ForbiddenIfPredicate(String otherKeyName) { 
super(otherKeyName); }
+@Override public String predicateName() { return "forbiddenIf"; }
+@Override public boolean test(Object thisValue, Object otherValue) { 
+return (thisValue==null) || (otherValue==null);
+} 
+}
+
+public static Predicate forbiddenUnless(String otherKeyName) { 
return new ForbiddenUnlessPredicate(otherKeyName); }
+public static class ForbiddenUnlessPredicate extends OtherKeyPredicate {
+public ForbiddenUnlessPredicate(String otherKeyName) { 
super(otherKeyName); }
+@Override public String predicateName() { return "forbiddenUnless"; }
+@Override public boolean test(Object thisValue, Object otherValue) { 
+return (thisValue==null) || (otherValue!=null);
+} 
+}
+
+public static Predicate requiredIf(String otherKeyName) { return 
new RequiredIfPredicate(otherKeyName); }
+public static class RequiredIfPredicate extends OtherKeyPredicate {
+public RequiredIfPredicate(String