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 2015/04/21 22:41:31 UTC
[12/16] incubator-brooklyn git commit: accept primitive names (e.g.
`int`) when adding sensors
accept primitive names (e.g. `int`) when adding 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/1354d036
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/1354d036
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/1354d036
Branch: refs/heads/master
Commit: 1354d0361d34447d0e439574bd008f42aa5dc105
Parents: 5af2925
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Apr 20 13:31:47 2015 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Apr 20 13:33:01 2015 +0100
----------------------------------------------------------------------
.../java/brooklyn/entity/basic/ConfigKeys.java | 5 +--
.../brooklyn/entity/effector/AddSensor.java | 5 +++
.../java/brooklyn/util/javalang/Boxing.java | 15 ++++++++
.../java/brooklyn/util/javalang/BoxingTest.java | 37 ++++++++++++++++++++
4 files changed, 60 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1354d036/core/src/main/java/brooklyn/entity/basic/ConfigKeys.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/ConfigKeys.java b/core/src/main/java/brooklyn/entity/basic/ConfigKeys.java
index 85b83dc..2b22a90 100644
--- a/core/src/main/java/brooklyn/entity/basic/ConfigKeys.java
+++ b/core/src/main/java/brooklyn/entity/basic/ConfigKeys.java
@@ -235,10 +235,11 @@ public class ConfigKeys {
public static final ConfigKey<Object> DEFAULT_VALUE = ConfigKeys.newConfigKey(Object.class, "defaultValue");
public static ConfigKey<?> newInstance(ConfigBag keyDefs) {
- // TODO dynamic typing - see TYPE key commented out above
String typeName = Strings.toString(keyDefs.getStringKey("type"));
- if (Strings.isNonBlank(typeName))
+ if (Strings.isNonBlank(typeName)) {
+ // TODO dynamic typing - see TYPE key commented out above; also see AddSensor.getType for type lookup
log.warn("Setting 'type' is not currently supported for dynamic config keys; ignoring in definition of "+keyDefs);
+ }
Class<Object> type = Object.class;
String name = keyDefs.get(NAME);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1354d036/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 9e80b45..318d78a 100644
--- a/core/src/main/java/brooklyn/entity/effector/AddSensor.java
+++ b/core/src/main/java/brooklyn/entity/effector/AddSensor.java
@@ -28,6 +28,8 @@ import brooklyn.entity.proxying.EntityInitializer;
import brooklyn.event.AttributeSensor;
import brooklyn.event.basic.Sensors;
import brooklyn.util.config.ConfigBag;
+import brooklyn.util.guava.Maybe;
+import brooklyn.util.javalang.Boxing;
import brooklyn.util.time.Duration;
import com.google.common.annotations.Beta;
@@ -79,6 +81,9 @@ public class AddSensor<T> implements EntityInitializer {
@SuppressWarnings("unchecked")
protected Class<T> getType(String className) {
try {
+ // TODO use OSGi loader (low priority however); also ensure that allows primitives
+ Maybe<Class<?>> primitive = Boxing.getPrimitiveType(className);
+ if (primitive.isPresent()) return (Class<T>) primitive.get();
return (Class<T>) Class.forName(className);
} catch (ClassNotFoundException e) {
if (!className.contains(".")) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1354d036/utils/common/src/main/java/brooklyn/util/javalang/Boxing.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/brooklyn/util/javalang/Boxing.java b/utils/common/src/main/java/brooklyn/util/javalang/Boxing.java
index 296291e..72f5138 100644
--- a/utils/common/src/main/java/brooklyn/util/javalang/Boxing.java
+++ b/utils/common/src/main/java/brooklyn/util/javalang/Boxing.java
@@ -20,6 +20,8 @@ package brooklyn.util.javalang;
import java.lang.reflect.Array;
+import brooklyn.util.guava.Maybe;
+
import com.google.common.collect.ImmutableBiMap;
public class Boxing {
@@ -42,6 +44,19 @@ public class Boxing {
.put(Void.TYPE, Void.class)
.build();
+ /** Returns the unboxed type for the given primitive type name, if available;
+ * e.g. {@link Integer#TYPE} for <code>int</code> (distinct from <code>Integer.class</code>),
+ * or null if not a primitive.
+ * */
+ public static Maybe<Class<?>> getPrimitiveType(String typeName) {
+ if (typeName!=null) {
+ for (Class<?> t: PRIMITIVE_TO_BOXED.keySet()) {
+ if (typeName.equals(t.getName())) return Maybe.<Class<?>>of(t);
+ }
+ }
+ return Maybe.absent("Not a primitive: "+typeName);
+ }
+
public static Class<?> boxedType(Class<?> type) {
if (PRIMITIVE_TO_BOXED.containsKey(type))
return PRIMITIVE_TO_BOXED.get(type);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1354d036/utils/common/src/test/java/brooklyn/util/javalang/BoxingTest.java
----------------------------------------------------------------------
diff --git a/utils/common/src/test/java/brooklyn/util/javalang/BoxingTest.java b/utils/common/src/test/java/brooklyn/util/javalang/BoxingTest.java
new file mode 100644
index 0000000..de1ffcb
--- /dev/null
+++ b/utils/common/src/test/java/brooklyn/util/javalang/BoxingTest.java
@@ -0,0 +1,37 @@
+/*
+ * 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 brooklyn.util.javalang;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class BoxingTest {
+
+ @Test
+ public static void testIntPrimitiveAndBoxed() {
+ Assert.assertEquals(Integer.TYPE.getName(), "int");
+
+ Class<?> t = Boxing.getPrimitiveType("int").get();
+ Assert.assertEquals(t, Integer.TYPE);
+
+ Class<?> bt = Boxing.boxedType(t);
+ Assert.assertEquals(bt, Integer.class);
+ }
+
+}