1.1 --- a/json/src/main/java/org/netbeans/html/json/impl/JSON.java Wed Feb 18 19:14:14 2015 +0100
1.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/JSON.java Tue Mar 10 15:14:30 2015 +0100
1.3 @@ -126,10 +126,13 @@
1.4
1.5 public static String toString(BrwsrCtx c, Object obj, String prop) {
1.6 obj = getProperty(c, obj, prop);
1.7 - return obj instanceof String ? (String)obj : null;
1.8 + return obj == null ? null : obj.toString();
1.9 }
1.10 public static Number toNumber(BrwsrCtx c, Object obj, String prop) {
1.11 obj = getProperty(c, obj, prop);
1.12 + if (obj instanceof Character) {
1.13 + obj = (int)(Character)obj;
1.14 + }
1.15 if (!(obj instanceof Number)) {
1.16 obj = Double.NaN;
1.17 }
2.1 --- a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java Wed Feb 18 19:14:14 2015 +0100
2.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java Tue Mar 10 15:14:30 2015 +0100
2.3 @@ -1386,10 +1386,34 @@
2.4 toCall = classRef + ".proto.toNumber(";
2.5 toFinish = ".doubleValue()";
2.6 }
2.7 + if (ve.asType().getKind() == TypeKind.FLOAT) {
2.8 + toCall = classRef + ".proto.toNumber(";
2.9 + toFinish = ".floatValue()";
2.10 + }
2.11 if (ve.asType().getKind() == TypeKind.INT) {
2.12 toCall = classRef + ".proto.toNumber(";
2.13 toFinish = ".intValue()";
2.14 }
2.15 + if (ve.asType().getKind() == TypeKind.BYTE) {
2.16 + toCall = classRef + ".proto.toNumber(";
2.17 + toFinish = ".byteValue()";
2.18 + }
2.19 + if (ve.asType().getKind() == TypeKind.SHORT) {
2.20 + toCall = classRef + ".proto.toNumber(";
2.21 + toFinish = ".shortValue()";
2.22 + }
2.23 + if (ve.asType().getKind() == TypeKind.LONG) {
2.24 + toCall = classRef + ".proto.toNumber(";
2.25 + toFinish = ".longValue()";
2.26 + }
2.27 + if (ve.asType().getKind() == TypeKind.BOOLEAN) {
2.28 + toCall = "\"true\".equals(" + classRef + ".proto.toString(";
2.29 + toFinish = ")";
2.30 + }
2.31 + if (ve.asType().getKind() == TypeKind.CHAR) {
2.32 + toCall = "(char)" + classRef + ".proto.toNumber(";
2.33 + toFinish = ".intValue()";
2.34 + }
2.35 if (dataName != null && ve.getSimpleName().contentEquals(dataName) && isModel(ve.asType())) {
2.36 toCall = classRef + ".proto.toModel(" + ve.asType() + ".class, ";
2.37 addNull = false;
2.38 @@ -1431,10 +1455,17 @@
2.39 params.append(classRef);
2.40 continue;
2.41 }
2.42 - error(
2.43 - "The annotated method can only accept " + className + " argument or argument named 'data'",
2.44 - ee
2.45 - );
2.46 + StringBuilder err = new StringBuilder();
2.47 + err.append("Argument ").
2.48 + append(ve.getSimpleName()).
2.49 + append(" is not valid. The annotated method can only accept ").
2.50 + append(className).
2.51 + append(" argument");
2.52 + if (dataName != null) {
2.53 + err.append(" or argument named '").append(dataName).append("'");
2.54 + }
2.55 + err.append(".");
2.56 + error(err.toString(), ee);
2.57 }
2.58 return params;
2.59 }
3.1 --- a/json/src/test/java/net/java/html/json/TypesTest.java Wed Feb 18 19:14:14 2015 +0100
3.2 +++ b/json/src/test/java/net/java/html/json/TypesTest.java Tue Mar 10 15:14:30 2015 +0100
3.3 @@ -48,7 +48,6 @@
3.4 import org.netbeans.html.context.spi.Contexts;
3.5 import org.netbeans.html.json.spi.Technology;
3.6 import org.netbeans.html.json.spi.Transfer;
3.7 -import org.netbeans.html.json.impl.JSON;
3.8 import org.testng.annotations.BeforeMethod;
3.9 import org.testng.annotations.Test;
3.10 import static org.testng.Assert.*;
3.11 @@ -66,6 +65,7 @@
3.12 @Property(name = "doubleX", type = double.class),
3.13 @Property(name = "charX", type = char.class),
3.14 @Property(name = "StringX", type = String.class),
3.15 + @Property(name = "boolX", type = boolean.class),
3.16 })
3.17 public class TypesTest {
3.18 private MapModelTest.MapTechnology t;
3.19 @@ -77,11 +77,10 @@
3.20 register(Transfer.class, t, 1).build();
3.21 }
3.22 @Function static void readFromEvent(int intX,
3.23 - /*
3.24 byte byteX,
3.25 short shortX, long longX, float floatX,
3.26 - char charX
3.27 - */
3.28 + boolean boolX,
3.29 + char charX,
3.30 double doubleX,
3.31 String StringX, Types myModel) {
3.32
3.33 @@ -89,12 +88,12 @@
3.34 myModel.setDoubleX(doubleX);
3.35 myModel.setStringX(StringX);
3.36
3.37 - /*
3.38 - myModel.setByte(byteX);
3.39 - myModel.setShort(shortX);
3.40 - myModel.setLong(longX);
3.41 - myModel.setFloat(floatX);
3.42 - */
3.43 + myModel.setByteX(byteX);
3.44 + myModel.setShortX(shortX);
3.45 + myModel.setLongX(longX);
3.46 + myModel.setFloatX(floatX);
3.47 + myModel.setBoolX(boolX);
3.48 + myModel.setCharX(charX);
3.49 }
3.50
3.51 @Test public void canParseEventAttributes() {
3.52 @@ -102,14 +101,12 @@
3.53 t.setIntX(33);
3.54 t.setDoubleX(180.5);
3.55 t.setStringX("Ahoj");
3.56 -
3.57 - /*
3.58 t.setCharX('A');
3.59 t.setByteX((byte)3);
3.60 t.setShortX((short)10);
3.61 t.setLongX(66);
3.62 t.setFloatX(99f);
3.63 - */
3.64 + t.setBoolX(true);
3.65
3.66 Object json = Models.toRaw(t);
3.67
3.68 @@ -121,6 +118,11 @@
3.69 assertEquals(copy.getIntX(), 33);
3.70 assertEquals(copy.getDoubleX(), 180.5);
3.71 assertEquals(copy.getStringX(), "Ahoj");
3.72 -// assertEquals(copy.getCharX(), 'A');
3.73 + assertEquals(copy.getByteX(), (byte)3);
3.74 + assertEquals(copy.getShortX(), (short)10);
3.75 + assertEquals(copy.getLongX(), 66L);
3.76 + assertEquals(copy.getFloatX(), 99f);
3.77 + assertTrue(copy.isBoolX());
3.78 + assertEquals(copy.getCharX(), 'A');
3.79 }
3.80 }