You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2015/10/09 10:37:17 UTC
[6/8] incubator-brooklyn git commit: use single Reducer class
use single Reducer class
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/0f59c13f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/0f59c13f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/0f59c13f
Branch: refs/heads/master
Commit: 0f59c13f697fe20953ef781117385baf3c453f45
Parents: 401ab13
Author: Robert Moss <ro...@gmail.com>
Authored: Thu Oct 8 21:47:39 2015 +0100
Committer: Robert Moss <ro...@gmail.com>
Committed: Thu Oct 8 21:47:39 2015 +0100
----------------------------------------------------------------------
.../brooklyn/enricher/stock/Enrichers.java | 22 ++--
.../brooklyn/enricher/stock/Propagator.java | 2 +-
.../stock/reducer/GenericStringReducer.java | 40 -------
.../stock/reducer/ObjectStringReducer.java | 37 -------
.../enricher/stock/reducer/Reducer.java | 109 +++++--------------
.../stock/reducer/StringStringReducer.java | 42 -------
.../util/core/sensor/SensorPredicates.java | 8 +-
.../enricher/stock/reducer/ReducerTest.java | 57 ++++------
.../util/core/sensor/SensorPredicatesTest.java | 4 +-
.../brooklyn/util/text/StringFunctions.java | 16 +++
10 files changed, 86 insertions(+), 251 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0f59c13f/core/src/main/java/org/apache/brooklyn/enricher/stock/Enrichers.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/Enrichers.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/Enrichers.java
index 18bae9c..64da60b 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/Enrichers.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/Enrichers.java
@@ -173,8 +173,8 @@ public class Enrichers {
public JoinerBuilder joining(AttributeSensor<?> source) {
return new JoinerBuilder(source);
}
- public <S, T> ReducerBuilder<S, T> reducing(Class<? extends Reducer<S, T>> clazz, List<AttributeSensor<S>> sourceSensors) {
- return new ReducerBuilder<S, T>(clazz, sourceSensors);
+ public ReducerBuilder reducing(Class<? extends Reducer> clazz, List<AttributeSensor<?>> sourceSensors) {
+ return new ReducerBuilder(clazz, sourceSensors);
}
}
@@ -682,20 +682,20 @@ public class Enrichers {
}
}
- protected abstract static class AbstractReducerBuilder<S, T, B extends AbstractReducerBuilder<S, T, B>> extends AbstractEnricherBuilder<B> {
- protected AttributeSensor<T> publishing;
+ protected abstract static class AbstractReducerBuilder<B extends AbstractReducerBuilder<B>> extends AbstractEnricherBuilder<B> {
+ protected AttributeSensor<?> publishing;
protected Entity fromEntity;
- protected List<AttributeSensor<S>> reducing;
- protected Function<List<S>, T> computing;
+ protected List<AttributeSensor<?>> reducing;
+ protected Function<? extends Iterable<?>, ?> computing;
protected String functionName;
private Map<String, Object> parameters;
- public AbstractReducerBuilder(Class<? extends Reducer<S, T>> clazz, List<AttributeSensor<S>> val) {
+ public AbstractReducerBuilder(Class<? extends Reducer> clazz, List<AttributeSensor<?>> val) {
super(checkNotNull(clazz));
this.reducing = checkNotNull(val);
}
- public B publishing(AttributeSensor<T> val) {
+ public B publishing(AttributeSensor<?> val) {
this.publishing = checkNotNull(val);
return self();
}
@@ -705,7 +705,7 @@ public class Enrichers {
return self();
}
- public B computing(Function<List<S>, T> val) {
+ public B computing(Function<? extends Iterable<?>, ?> val) {
this.computing = checkNotNull(val);
return self();
}
@@ -790,8 +790,8 @@ public class Enrichers {
}
}
- public static class ReducerBuilder<S, T> extends AbstractReducerBuilder<S, T, ReducerBuilder<S, T>> {
- public ReducerBuilder(Class<? extends Reducer<S, T>> clazz, List<AttributeSensor<S>> val) {
+ public static class ReducerBuilder extends AbstractReducerBuilder<ReducerBuilder> {
+ public ReducerBuilder(Class<? extends Reducer> clazz, List<AttributeSensor<?>> val) {
super(clazz, val);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0f59c13f/core/src/main/java/org/apache/brooklyn/enricher/stock/Propagator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/Propagator.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/Propagator.java
index 711635e..e13a835 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/Propagator.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/Propagator.java
@@ -200,7 +200,7 @@ public class Propagator extends AbstractEnricher implements SensorEventListener<
private Sensor<?> getDestinationSensor(final Sensor<?> sourceSensor) {
// sensor equality includes the type; we want just name-equality so will use predicate.
Optional<? extends Sensor<?>> mappingSensor = Iterables.tryFind(sensorMapping.keySet(),
- SensorPredicates.sensorNameEqualTo(sourceSensor.getName()));
+ SensorPredicates.nameEqualTo(sourceSensor.getName()));
return mappingSensor.isPresent() ? sensorMapping.get(mappingSensor.get()) : sourceSensor;
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0f59c13f/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/GenericStringReducer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/GenericStringReducer.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/GenericStringReducer.java
deleted file mode 100644
index 3dacb60..0000000
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/GenericStringReducer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.enricher.stock.reducer;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-
-import com.google.common.base.Function;
-import com.google.common.base.Preconditions;
-
-public abstract class GenericStringReducer<T> extends Reducer<T, String>{
-
- @Override
- protected Function<List<T>, String> createReducerFunction(
- String reducerName, Map<String, ?> parameters) {
- if (Objects.equals(reducerName, "formatString")){
- String format = Preconditions.checkNotNull((String)parameters.get("format"), "format");
- return new FormatStringReducerFunction<T>(format);
- }
- return null;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0f59c13f/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/ObjectStringReducer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/ObjectStringReducer.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/ObjectStringReducer.java
deleted file mode 100644
index c09f282..0000000
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/ObjectStringReducer.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.enricher.stock.reducer;
-
-import java.util.List;
-import java.util.Map;
-
-import com.google.common.base.Function;
-
-public class ObjectStringReducer extends GenericStringReducer<Object> {
-
- @Override
- protected Function<List<Object>, String> createReducerFunction(
- String reducerName, Map<String, ?> parameters) {
-
- Function<List<Object>, String> function = super.createReducerFunction(reducerName, parameters);
- if(function != null) return function;
-
- throw new IllegalStateException("unknown function: " + reducerName);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0f59c13f/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/Reducer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/Reducer.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/Reducer.java
index 2c1c4c7..db3a72d 100644
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/Reducer.java
+++ b/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/Reducer.java
@@ -18,9 +18,9 @@
*/
package org.apache.brooklyn.enricher.stock.reducer;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntityLocal;
@@ -35,6 +35,7 @@ import org.apache.brooklyn.util.core.flags.SetFromFlag;
import org.apache.brooklyn.util.core.sensor.SensorPredicates;
import org.apache.brooklyn.util.core.task.Tasks;
import org.apache.brooklyn.util.core.task.ValueResolver;
+import org.apache.brooklyn.util.text.StringFunctions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -47,7 +48,7 @@ import com.google.common.collect.Iterables;
import com.google.common.reflect.TypeToken;
@SuppressWarnings("serial")
-public abstract class Reducer<S, T> extends AbstractEnricher implements SensorEventListener<Object> {
+public class Reducer extends AbstractEnricher implements SensorEventListener<Object> {
private static final Logger LOG = LoggerFactory.getLogger(Reducer.class);
@@ -63,9 +64,9 @@ public abstract class Reducer<S, T> extends AbstractEnricher implements SensorEv
"A map of parameters to pass into the reducer function");
protected Entity producer;
- protected List<AttributeSensor<S>> subscribedSensors;
- protected Sensor<T> targetSensor;
- protected Function<List<S>, T> reducerFunction;
+ protected List<AttributeSensor<?>> subscribedSensors;
+ protected Sensor<?> targetSensor;
+ protected Function<Iterable<?>, ?> reducerFunction;
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
@@ -74,12 +75,12 @@ public abstract class Reducer<S, T> extends AbstractEnricher implements SensorEv
Preconditions.checkNotNull(getConfig(SOURCE_SENSORS), "source sensors");
this.producer = getConfig(PRODUCER) == null ? entity : getConfig(PRODUCER);
- List<AttributeSensor<S>> sensorListTemp = Lists.newArrayList();
+ List<AttributeSensor<?>> sensorListTemp = Lists.newArrayList();
for (Object sensorO : getConfig(SOURCE_SENSORS)) {
- AttributeSensor<S> sensor = Tasks.resolving(sensorO).as(AttributeSensor.class).timeout(ValueResolver.REAL_QUICK_WAIT).context(producer).get();
+ AttributeSensor<?> sensor = Tasks.resolving(sensorO).as(AttributeSensor.class).timeout(ValueResolver.REAL_QUICK_WAIT).context(producer).get();
Optional<? extends Sensor<?>> foundSensor = Iterables.tryFind(sensorListTemp,
- SensorPredicates.sensorNameEqualTo(sensor.getName()));
+ SensorPredicates.nameEqualTo(sensor.getName()));
if(!foundSensor.isPresent()) {
sensorListTemp.add(sensor);
@@ -87,7 +88,7 @@ public abstract class Reducer<S, T> extends AbstractEnricher implements SensorEv
}
String reducerName = config().get(REDUCER_FUNCTION_TRANSFORMATION);
- Function<List<S>, T> reducerFunction = (Function) config().get(REDUCER_FUNCTION);
+ Function<Iterable<?>, ?> reducerFunction = (Function) config().get(REDUCER_FUNCTION);
if(reducerFunction == null){
Map<String, ?> parameters = config().get(PARAMETERS);
reducerFunction = createReducerFunction(reducerName, parameters);
@@ -96,92 +97,42 @@ public abstract class Reducer<S, T> extends AbstractEnricher implements SensorEv
this.reducerFunction = reducerFunction;
Preconditions.checkState(sensorListTemp.size() > 0, "Nothing to reduce");
- for (Sensor<S> sensor : sensorListTemp) {
+ for (Sensor<?> sensor : sensorListTemp) {
subscribe(producer, sensor, this);
}
subscribedSensors = ImmutableList.copyOf(sensorListTemp);
}
-
- protected abstract Function<List<S>, T> createReducerFunction(String reducerName, Map<String, ?> parameters);
- @SuppressWarnings("unchecked")
+ // Default implementation, subclasses should override
+ protected Function<Iterable<?>, ?> createReducerFunction(String reducerName, Map<String, ?> parameters){
+ if(Objects.equals(reducerName, "joiner")){
+ String separator = (String) parameters.get("separator");
+ return StringFunctions.joiner(separator == null ? ", " : separator);
+ }
+
+ if (Objects.equals(reducerName, "formatString")){
+ String format = Preconditions.checkNotNull((String)parameters.get("format"), "format");
+ return StringFunctions.formatterForIterable(format);
+ }
+ throw new IllegalStateException("unknown function: " + reducerName);
+ }
+
@Override
public void onEvent(SensorEvent<Object> event) {
- Sensor<T> destinationSensor = (Sensor<T>) getConfig(TARGET_SENSOR);
-
- List<S> values = Lists.newArrayList();
+ Sensor<?> destinationSensor = getConfig(TARGET_SENSOR);
- for (AttributeSensor<S> sourceSensor : subscribedSensors) {
- S resolvedSensorValue = entity.sensors().get(sourceSensor);
- if (resolvedSensorValue == null) {
- // only apply function if all values are resolved
- return;
- }
+ List<Object> values = Lists.newArrayList();
+ for (AttributeSensor<?> sourceSensor : subscribedSensors) {
+ Object resolvedSensorValue = entity.sensors().get(sourceSensor);
values.add(resolvedSensorValue);
}
-
Object result = reducerFunction.apply(values);
if (LOG.isTraceEnabled()) LOG.trace("enricher {} got {}, propagating via {} as {}",
new Object[] {this, event, entity, reducerFunction, destinationSensor});
- emit((Sensor<T>)destinationSensor, result);
- }
-
- public static class JoinerReducerFunction<A> implements Function<List<A>, String> {
-
- private Object separator;
-
- public JoinerReducerFunction(Object separator) {
- this.separator = (separator == null) ? ", " : separator;
- }
-
- @Override
- public String apply(List<A> input) {
-
- StringBuilder sb = new StringBuilder();
- Iterator<A> it = input.iterator();
- while(it.hasNext()) {
- sb.append(it.next().toString());
- if(it.hasNext()){
- sb.append(separator);
- }
- }
- return sb.toString();
- }
-
- }
-
- public static class JoinerFunction extends JoinerReducerFunction<String>{
-
- public JoinerFunction(Object separator) {
- super(separator);
- }
- }
-
- public static class ToStringReducerFunction<A> implements Function<List<A>, String> {
-
- @Override
- public String apply(List<A> input) {
- return input.toString();
- }
-
- }
-
- public static class FormatStringReducerFunction<T> implements Function<List<T>, String> {
-
- private String format;
-
- public FormatStringReducerFunction(String format) {
- this.format = Preconditions.checkNotNull(format, "format");
- }
-
- @Override
- public String apply(List<T> input) {
- return String.format(format, input.toArray());
- }
-
+ emit(destinationSensor, result);
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0f59c13f/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/StringStringReducer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/StringStringReducer.java b/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/StringStringReducer.java
deleted file mode 100644
index 3180240..0000000
--- a/core/src/main/java/org/apache/brooklyn/enricher/stock/reducer/StringStringReducer.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.enricher.stock.reducer;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-
-import com.google.common.base.Function;
-
-public class StringStringReducer extends GenericStringReducer<String> {
-
- public StringStringReducer() {}
-
- @Override
- protected Function<List<String>, String> createReducerFunction(
- String reducerName, Map<String, ?> parameters) {
- Function<List<String>, String> function = super.createReducerFunction(reducerName, parameters);
- if(function != null) return function;
-
- if(Objects.equals(reducerName, "joiner")){
- return new JoinerFunction(parameters.get("separator"));
- }
- throw new IllegalStateException("unknown function: " + reducerName);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0f59c13f/core/src/main/java/org/apache/brooklyn/util/core/sensor/SensorPredicates.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/sensor/SensorPredicates.java b/core/src/main/java/org/apache/brooklyn/util/core/sensor/SensorPredicates.java
index 5106557..f96eca9 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/sensor/SensorPredicates.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/sensor/SensorPredicates.java
@@ -18,6 +18,8 @@
*/
package org.apache.brooklyn.util.core.sensor;
+import static com.google.common.base.Preconditions.checkNotNull;
+
import org.apache.brooklyn.api.sensor.Sensor;
import com.google.common.base.Predicate;
@@ -28,13 +30,13 @@ public class SensorPredicates {
// not instantiable
}
- public static Predicate<Sensor<?>> sensorNameEqualTo(String sensorName) {
- return new SensorNameEquals(sensorName);
+ public static Predicate<Sensor<?>> nameEqualTo(String sensorName) {
+ return new SensorNameEquals(checkNotNull(sensorName, "sensorName"));
}
private static class SensorNameEquals implements Predicate<Sensor<?>> {
- private String sensor;
+ private final String sensor;
public SensorNameEquals(String sensor) {
this.sensor = sensor;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0f59c13f/core/src/test/java/org/apache/brooklyn/enricher/stock/reducer/ReducerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/enricher/stock/reducer/ReducerTest.java b/core/src/test/java/org/apache/brooklyn/enricher/stock/reducer/ReducerTest.java
index a951d40..d14f78c 100644
--- a/core/src/test/java/org/apache/brooklyn/enricher/stock/reducer/ReducerTest.java
+++ b/core/src/test/java/org/apache/brooklyn/enricher/stock/reducer/ReducerTest.java
@@ -19,7 +19,6 @@
package org.apache.brooklyn.enricher.stock.reducer;
import java.util.List;
-import java.util.Map;
import javax.annotation.Nullable;
@@ -30,8 +29,6 @@ import org.apache.brooklyn.core.sensor.Sensors;
import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
import org.apache.brooklyn.core.test.entity.TestEntity;
import org.apache.brooklyn.enricher.stock.Enrichers;
-import org.apache.brooklyn.enricher.stock.reducer.Reducer;
-import org.apache.brooklyn.enricher.stock.reducer.StringStringReducer;
import org.apache.brooklyn.test.Asserts;
import org.apache.brooklyn.test.EntityTestUtils;
import org.apache.brooklyn.util.collections.MutableMap;
@@ -62,7 +59,7 @@ public class ReducerTest extends BrooklynAppUnitTestSupport {
@Test
public void testBasicReducer(){
- entity.addEnricher(EnricherSpec.create(StringStringReducer.class).configure(
+ entity.enrichers().add(EnricherSpec.create(Reducer.class).configure(
MutableMap.of(
Reducer.SOURCE_SENSORS, ImmutableList.of(STR1, STR2),
Reducer.PRODUCER, entity,
@@ -82,8 +79,8 @@ public class ReducerTest extends BrooklynAppUnitTestSupport {
@Test
public void testReducingBuilderWithConcatenator() {
- entity.addEnricher(Enrichers.builder()
- .reducing(StringStringReducer.class, ImmutableList.of(STR1, STR2))
+ entity.enrichers().add(Enrichers.builder()
+ .reducing(Reducer.class, ImmutableList.<AttributeSensor<?>>of(STR1, STR2))
.from(entity)
.computing(new Concatenator())
.publishing(STR3)
@@ -101,8 +98,8 @@ public class ReducerTest extends BrooklynAppUnitTestSupport {
@Test
public void testReducingBuilderWithLengthCalculator() {
- entity.addEnricher(Enrichers.builder()
- .reducing(StringIntegerReducer.class, ImmutableList.of(STR1, STR2))
+ entity.enrichers().add(Enrichers.builder()
+ .reducing(Reducer.class, ImmutableList.<AttributeSensor<?>>of(STR1, STR2))
.from(entity)
.computing(new LengthCalculator())
.publishing(INT1)
@@ -112,7 +109,7 @@ public class ReducerTest extends BrooklynAppUnitTestSupport {
EntityTestUtils.assertAttributeEquals(entity, INT1, null);
entity.sensors().set(STR1, "foo");
- EntityTestUtils.assertAttributeEqualsContinually(entity, INT1, null);
+ EntityTestUtils.assertAttributeEqualsEventually(entity, INT1, 3);
entity.sensors().set(STR2, "bar");
EntityTestUtils.assertAttributeEqualsEventually(entity, INT1, 6);
@@ -120,8 +117,8 @@ public class ReducerTest extends BrooklynAppUnitTestSupport {
@Test
public void testReducingBuilderWithJoinerFunction() {
- entity.addEnricher(Enrichers.builder()
- .reducing(StringStringReducer.class, ImmutableList.of(STR1, STR2))
+ entity.enrichers().add(Enrichers.builder()
+ .reducing(Reducer.class, ImmutableList.<AttributeSensor<?>>of(STR1, STR2))
.from(entity)
.computing("joiner", ImmutableMap.<String, Object>of("separator", "-"))
.publishing(STR3)
@@ -131,7 +128,7 @@ public class ReducerTest extends BrooklynAppUnitTestSupport {
EntityTestUtils.assertAttributeEquals(entity, STR3, null);
entity.sensors().set(STR1, "foo");
- EntityTestUtils.assertAttributeEqualsContinually(entity, STR3, null);
+ EntityTestUtils.assertAttributeEqualsEventually(entity, STR3, "foo-null");
entity.sensors().set(STR2, "bar");
EntityTestUtils.assertAttributeEqualsEventually(entity, STR3, "foo-bar");
@@ -139,8 +136,8 @@ public class ReducerTest extends BrooklynAppUnitTestSupport {
@Test
public void testReducingBuilderWithJoinerFunctionWithDefaultParameter() {
- entity.addEnricher(Enrichers.builder()
- .reducing(StringStringReducer.class, ImmutableList.of(STR1, STR2))
+ entity.enrichers().add(Enrichers.builder()
+ .reducing(Reducer.class, ImmutableList.<AttributeSensor<?>>of(STR1, STR2))
.from(entity)
.computing("joiner")
.publishing(STR3)
@@ -149,7 +146,7 @@ public class ReducerTest extends BrooklynAppUnitTestSupport {
EntityTestUtils.assertAttributeEquals(entity, STR3, null);
entity.sensors().set(STR1, "foo");
- EntityTestUtils.assertAttributeEqualsContinually(entity, STR3, null);
+ EntityTestUtils.assertAttributeEqualsEventually(entity, STR3, "foo, null");
entity.sensors().set(STR2, "bar");
EntityTestUtils.assertAttributeEqualsEventually(entity, STR3, "foo, bar");
@@ -158,8 +155,8 @@ public class ReducerTest extends BrooklynAppUnitTestSupport {
@Test
public void testReducingBuilderWithJoinerFunctionAndUnusedParameter() {
- entity.addEnricher(Enrichers.builder()
- .reducing(StringStringReducer.class, ImmutableList.of(STR1, STR2))
+ entity.enrichers().add(Enrichers.builder()
+ .reducing(Reducer.class, ImmutableList.<AttributeSensor<?>>of(STR1, STR2))
.from(entity)
.computing("joiner", ImmutableMap.<String, Object>of("non.existent.parameter", "-"))
.publishing(STR3)
@@ -168,7 +165,7 @@ public class ReducerTest extends BrooklynAppUnitTestSupport {
EntityTestUtils.assertAttributeEquals(entity, STR3, null);
entity.sensors().set(STR1, "foo");
- EntityTestUtils.assertAttributeEqualsContinually(entity, STR3, null);
+ EntityTestUtils.assertAttributeEqualsEventually(entity, STR3, "foo, null");
entity.sensors().set(STR2, "bar");
EntityTestUtils.assertAttributeEqualsEventually(entity, STR3, "foo, bar");
@@ -176,18 +173,18 @@ public class ReducerTest extends BrooklynAppUnitTestSupport {
@Test
public void testReducingBuilderWithFormatStringFunction() {
-
- entity.addEnricher(Enrichers.builder()
- .reducing(StringStringReducer.class, ImmutableList.of(STR1, STR2))
+ entity.enrichers().add(Enrichers.builder()
+ .reducing(Reducer.class, ImmutableList.<AttributeSensor<?>>of(STR1, STR2))
.from(entity)
.computing("formatString", ImmutableMap.<String, Object>of("format", "hello, %s and %s"))
.publishing(STR3)
.build()
);
+
EntityTestUtils.assertAttributeEquals(entity, STR3, null);
entity.sensors().set(STR1, "foo");
- EntityTestUtils.assertAttributeEqualsContinually(entity, STR3, null);
+ EntityTestUtils.assertAttributeEqualsEventually(entity, STR3, "hello, foo and null");
entity.sensors().set(STR2, "bar");
EntityTestUtils.assertAttributeEqualsEventually(entity, STR3, "hello, foo and bar");
@@ -196,8 +193,8 @@ public class ReducerTest extends BrooklynAppUnitTestSupport {
@Test
public void testReducingBuilderWithNamedNonExistentFunction() {
try {
- entity.addEnricher(Enrichers.builder()
- .reducing(StringStringReducer.class, ImmutableList.of(STR1, STR2))
+ entity.enrichers().add(Enrichers.builder()
+ .reducing(Reducer.class, ImmutableList.<AttributeSensor<?>>of(STR1, STR2))
.from(entity)
.computing("unknown function name", ImmutableMap.<String, Object>of("separator", "-"))
.publishing(STR3)
@@ -226,18 +223,6 @@ public class ReducerTest extends BrooklynAppUnitTestSupport {
}
}
- public static class StringIntegerReducer extends Reducer<String, Integer> {
-
- public StringIntegerReducer() {}
-
- @Override
- protected Function<List<String>, Integer> createReducerFunction(
- String reducerName, Map<String, ?> parameters) {
- throw new IllegalStateException("unknown function: " + reducerName);
- }
-
- }
-
private static class LengthCalculator implements Function<List<String>, Integer>{
@Override
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0f59c13f/core/src/test/java/org/apache/brooklyn/util/core/sensor/SensorPredicatesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/sensor/SensorPredicatesTest.java b/core/src/test/java/org/apache/brooklyn/util/core/sensor/SensorPredicatesTest.java
index d9cd186..4e3c0f2 100644
--- a/core/src/test/java/org/apache/brooklyn/util/core/sensor/SensorPredicatesTest.java
+++ b/core/src/test/java/org/apache/brooklyn/util/core/sensor/SensorPredicatesTest.java
@@ -31,8 +31,8 @@ public class SensorPredicatesTest extends BrooklynAppUnitTestSupport {
@Test
public void testDisplayNameEqualTo() throws Exception {
Sensor<Object> task = Sensors.newSensor(Object.class, "myname");
- assertTrue(SensorPredicates.sensorNameEqualTo("myname").apply(task));
- assertFalse(SensorPredicates.sensorNameEqualTo("wrong").apply(task));
+ assertTrue(SensorPredicates.nameEqualTo("myname").apply(task));
+ assertFalse(SensorPredicates.nameEqualTo("wrong").apply(task));
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0f59c13f/utils/common/src/main/java/org/apache/brooklyn/util/text/StringFunctions.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/text/StringFunctions.java b/utils/common/src/main/java/org/apache/brooklyn/util/text/StringFunctions.java
index 3eec640..d9f8fce 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/text/StringFunctions.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/text/StringFunctions.java
@@ -18,6 +18,8 @@
*/
package org.apache.brooklyn.util.text;
+import java.util.List;
+
import javax.annotation.Nullable;
import com.google.common.base.CaseFormat;
@@ -25,6 +27,7 @@ import com.google.common.base.CharMatcher;
import com.google.common.base.Function;
import com.google.common.base.Functions;
import com.google.common.base.Preconditions;
+import com.google.common.collect.Iterables;
public class StringFunctions {
@@ -67,6 +70,15 @@ public class StringFunctions {
}
};
}
+
+ /** given e.g. "hello %s %s" returns a function which will insert an Iterable of two strings into that pattern */
+ public static Function<Iterable<?>, String> formatterForIterable(final String pattern) {
+ return new Function<Iterable<?>, String>() {
+ public String apply(@Nullable Iterable<?> input) {
+ return String.format(pattern, Iterables.toArray(input, Object.class));
+ }
+ };
+ }
/** joins the given objects in a collection as a toString with the given separator */
public static Function<Iterable<?>, String> joiner(final String separator) {
@@ -154,4 +166,8 @@ public class StringFunctions {
};
}
+
+
+
+
}