You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by gr...@apache.org on 2014/11/11 19:32:40 UTC
[4/5] incubator-brooklyn git commit: Add type coercion to added SSH
command sensors
Add type coercion to added SSH command sensors
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/7ce82982
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/7ce82982
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/7ce82982
Branch: refs/heads/master
Commit: 7ce829827ad0c14d43d155ff60cc8b6e4fbadebf
Parents: e0b6ed1
Author: Andrew Kennedy <gr...@apache.org>
Authored: Mon Nov 10 14:49:18 2014 +0000
Committer: Andrew Kennedy <gr...@apache.org>
Committed: Mon Nov 10 14:49:18 2014 +0000
----------------------------------------------------------------------
.../java/brooklyn/entity/effector/AddSensor.java | 9 +++++++--
.../entity/software/ssh/SshCommandSensor.java | 18 +++++++++++-------
2 files changed, 18 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7ce82982/core/src/main/java/brooklyn/entity/effector/AddSensor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/effector/AddSensor.java b/core/src/main/java/brooklyn/entity/effector/AddSensor.java
index 040f168..49c191e 100644
--- a/core/src/main/java/brooklyn/entity/effector/AddSensor.java
+++ b/core/src/main/java/brooklyn/entity/effector/AddSensor.java
@@ -72,16 +72,21 @@ public class AddSensor<T> implements EntityInitializer {
private AttributeSensor<T> newSensor() {
String className = getFullClassName(type);
+ Class<T> clazz = getType(className);
+ return Sensors.newSensor(clazz, name);
+ }
+
+ protected Class<T> getType(String className) {
Class<T> clazz = null;
try {
clazz = (Class<T>) Class.forName(className);
} catch (ClassNotFoundException e) {
throw new IllegalArgumentException("Invalid target type for sensor "+name+": " + className);
}
- return Sensors.newSensor(clazz, name);
+ return clazz;
}
- private String getFullClassName(String className) {
+ protected String getFullClassName(String className) {
if (className.equalsIgnoreCase("string")) {
return "java.lang.String";
} else if (className.equalsIgnoreCase("int") || className.equalsIgnoreCase("integer")) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7ce82982/software/base/src/main/java/brooklyn/entity/software/ssh/SshCommandSensor.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/software/ssh/SshCommandSensor.java b/software/base/src/main/java/brooklyn/entity/software/ssh/SshCommandSensor.java
index 2f75780..51e2917 100644
--- a/software/base/src/main/java/brooklyn/entity/software/ssh/SshCommandSensor.java
+++ b/software/base/src/main/java/brooklyn/entity/software/ssh/SshCommandSensor.java
@@ -36,9 +36,11 @@ import brooklyn.event.feed.ssh.SshPollConfig;
import brooklyn.event.feed.ssh.SshValueFunctions;
import brooklyn.util.collections.MutableMap;
import brooklyn.util.config.ConfigBag;
+import brooklyn.util.flags.TypeCoercions;
import brooklyn.util.text.Strings;
import com.google.common.annotations.Beta;
+import com.google.common.base.Function;
import com.google.common.base.Functions;
import com.google.common.base.Preconditions;
import com.google.common.base.Supplier;
@@ -51,10 +53,8 @@ import com.google.common.base.Supplier;
* @see HttpRequestSensor
* @see JmxAttributeSensor
*/
-// generics introduced here because we might support a configurable 'targetType` parameter in future,
-// with automatic casting (e.g. for ints); this way it remains compatible
@Beta
-public final class SshCommandSensor<T extends String> extends AddSensor<String> {
+public final class SshCommandSensor<T> extends AddSensor<T> {
private static final Logger LOG = LoggerFactory.getLogger(SshCommandSensor.class);
@@ -63,7 +63,7 @@ public final class SshCommandSensor<T extends String> extends AddSensor<String>
protected final String command;
public SshCommandSensor(final ConfigBag params) {
- super(params.configure(SENSOR_TYPE, "String"));
+ super(params);
// TODO create a supplier for the command string to support attribute embedding
command = Preconditions.checkNotNull(params.get(SENSOR_COMMAND), "command");
@@ -96,13 +96,17 @@ public final class SshCommandSensor<T extends String> extends AddSensor<String>
}
};
- SshPollConfig<String> pollConfig = new SshPollConfig<String>(sensor)
+ SshPollConfig<T> pollConfig = new SshPollConfig<T>(sensor)
.period(period)
.env(envSupplier)
.command(commandSupplier)
.checkSuccess(SshValueFunctions.exitStatusEquals(0))
- .onFailureOrException(Functions.constant((String) null))
- .onSuccess(SshValueFunctions.stdout());
+ .onFailureOrException(Functions.constant((T) null))
+ .onSuccess(Functions.compose(new Function<String, T>() {
+ @Override
+ public T apply(String input) {
+ return TypeCoercions.coerce(input, getType(type));
+ }}, SshValueFunctions.stdout()));
SshFeed.builder()
.entity(entity)