Merge from JSON refactoring branch

This commit is contained in:
Rob Bygrave
2014-11-06 23:32:27 +13:00
115 changed files with 4180 additions and 3334 deletions
@@ -0,0 +1,152 @@
package com.avaje.ebean.json;
import java.io.StringReader;
import java.util.List;
import java.util.Map;
import javax.json.Json;
import javax.json.stream.JsonParser;
import org.junit.Assert;
import org.junit.Test;
public class EJsonTests {
@Test
public void test_map_simple() {
String jsonInput = "{\"name\":\"rob\",\"age\":12}";
Object result = EJson.parse(jsonInput);
Assert.assertTrue(result instanceof Map);
Map<?,?> map = (Map<?,?>)result;
Assert.assertEquals("rob", map.get("name"));
Assert.assertEquals(12L, map.get("age"));
String jsonOutput = EJson.write(result);
Assert.assertEquals(jsonInput, jsonOutput);
}
@Test
public void test_map_nested() {
String jsonInput = "{\"name\":\"rob\",\"age\":12,\"org\":{\"name\":\"superorg\",\"rating\":4},\"nums\":[1,2,3]}";
Object result = EJson.parse(jsonInput);
Assert.assertTrue(result instanceof Map);
Map<?,?> map = (Map<?,?>)result;
Assert.assertEquals(4, map.size());
Assert.assertEquals("rob", map.get("name"));
Assert.assertEquals(12L, map.get("age"));
Map<?,?> org = (Map<?,?>)map.get("org");
Assert.assertEquals("superorg", org.get("name"));
Assert.assertEquals(4L, org.get("rating"));
List<?> nums = (List<?>)map.get("nums");
Assert.assertEquals(3, nums.size());
Assert.assertEquals(1L, nums.get(0));
Assert.assertEquals(2L, nums.get(1));
Assert.assertEquals(3L, nums.get(2));
String jsonOutput = EJson.write(result);
Assert.assertEquals(jsonInput, jsonOutput);
}
@Test
public void test_map_withNull() {
String jsonInput = "{\"name\":\"rob\",\"age\":null}";
Object result = EJson.parse(jsonInput);
Assert.assertTrue(result instanceof Map);
Map<?,?> map = (Map<?,?>)result;
Assert.assertEquals("rob", map.get("name"));
Assert.assertNull(map.get("age"));
String jsonOutput = EJson.write(result);
Assert.assertEquals(jsonInput, jsonOutput);
}
@Test
public void test_list_simple() {
String jsonInput = "[\"name\",\"rob\",12,13]";
Object result = EJson.parse(jsonInput);
Assert.assertTrue(result instanceof List);
List<?> list = (List<?>)result;
Assert.assertEquals(4, list.size());
Assert.assertEquals("name", list.get(0));
Assert.assertEquals("rob", list.get(1));
Assert.assertEquals(12L, list.get(2));
Assert.assertEquals(13L, list.get(3));
String jsonOutput = EJson.write(result);
Assert.assertEquals(jsonInput, jsonOutput);
}
@SuppressWarnings("unchecked")
@Test
public void test_list_ofMaps() {
String jsonInput = "[{\"name\":\"rob\",\"age\":12},{\"name\":\"mike\",\"age\":13}]";
Object result = EJson.parse(jsonInput);
Assert.assertTrue(result instanceof List);
List<Map<?,?>> list = (List<Map<?,?>>)result;
Assert.assertEquals(2, list.size());
Assert.assertEquals("rob", list.get(0).get("name"));
Assert.assertEquals(12L, list.get(0).get("age"));
Assert.assertEquals("mike", list.get(1).get("name"));
Assert.assertEquals(13L, list.get(1).get("age"));
String jsonOutput = EJson.write(result);
Assert.assertEquals(jsonInput, jsonOutput);
}
@Test
public void test_partial_read() {
String jsonInput = "{\"name\":\"rob\",\"age\":null,\"friend\":{\"name\":\"mike\",\"age\":13}},some more json would follow...";
StringReader reader = new StringReader(jsonInput);
JsonParser parser = Json.createParser(reader);
Object result = EJson.parsePartial(parser);
Assert.assertTrue(result instanceof Map);
Map<?,?> map = (Map<?,?>)result;
Assert.assertEquals("rob", map.get("name"));
Assert.assertNull(map.get("age"));
Map<?,?> friend = (Map<?,?>)map.get("friend");
Assert.assertEquals("mike", friend.get("name"));
Assert.assertEquals(13L, friend.get("age"));
}
// @Test
// public void test_partial_read_primitives() {
//
// Object result = null;
// JsonParser parser = Json.createParser(new StringReader(","));
//
//// Object result = EJson.parsePartial(parser);
//// Assert.assertNull(result);
//
// parser = Json.createParser(new StringReader("12L"));
// result = EJson.parsePartial(parser);
// Assert.assertEquals(12L, result);
//
// parser = Json.createParser(new StringReader("true"));
// result = EJson.parsePartial(parser);
// Assert.assertEquals(Boolean.TRUE, result);
//
// parser = Json.createParser(new StringReader("\"foo\""));
// result = EJson.parsePartial(parser);
// Assert.assertEquals("foo", result);
//
// }
}
@@ -0,0 +1,81 @@
package com.avaje.ebean.text;
import org.junit.Assert;
import org.junit.Test;
public class PathPropertiesTests {
@Test
public void test_noParentheses() {
PathProperties s0 = PathProperties.parse("id,name");
Assert.assertEquals(1, s0.getPaths().size());
Assert.assertTrue(s0.get(null).contains("id"));
Assert.assertTrue(s0.get(null).contains("name"));
Assert.assertFalse(s0.get(null).contains("status"));
}
@Test
public void test_noParentheses_needTrim() {
PathProperties s0 = PathProperties.parse(" id, name ");
Assert.assertEquals(1, s0.getPaths().size());
Assert.assertTrue(s0.get(null).contains("id"));
Assert.assertTrue(s0.get(null).contains("name"));
Assert.assertFalse(s0.get(null).contains("status"));
}
@Test
public void test_withParentheses() {
PathProperties s0 = PathProperties.parse("(id,name)");
Assert.assertEquals(1, s0.getPaths().size());
Assert.assertTrue(s0.get(null).contains("id"));
Assert.assertTrue(s0.get(null).contains("name"));
Assert.assertFalse(s0.get(null).contains("status"));
}
@Test
public void test_withColon() {
PathProperties s0 = PathProperties.parse(":(id,name)");
Assert.assertEquals(1, s0.getPaths().size());
Assert.assertTrue(s0.get(null).contains("id"));
Assert.assertTrue(s0.get(null).contains("name"));
Assert.assertFalse(s0.get(null).contains("status"));
}
@Test
public void test_nested() {
PathProperties s1 = PathProperties.parse("id,name,shipAddr(*)");
Assert.assertEquals(2, s1.getPaths().size());
Assert.assertEquals(3, s1.get(null).size());
Assert.assertTrue(s1.get(null).contains("id"));
Assert.assertTrue(s1.get(null).contains("name"));
Assert.assertTrue(s1.get(null).contains("shipAddr"));
Assert.assertTrue(s1.get("shipAddr").contains("*"));
Assert.assertEquals(1, s1.get("shipAddr").size());
}
@Test
public void test_withParenthesesColonNested() {
PathProperties s1 = PathProperties.parse(":(id,name,shipAddr(*))");
Assert.assertEquals(2, s1.getPaths().size());
Assert.assertEquals(3, s1.get(null).size());
Assert.assertTrue(s1.get(null).contains("id"));
Assert.assertTrue(s1.get(null).contains("name"));
Assert.assertTrue(s1.get(null).contains("shipAddr"));
Assert.assertTrue(s1.get("shipAddr").contains("*"));
Assert.assertEquals(1, s1.get("shipAddr").size());
}
}
@@ -1,31 +0,0 @@
package com.avaje.ebean.text;
import org.junit.Assert;
import org.junit.Test;
import com.avaje.ebean.BaseTestCase;
public class TestPathPropertiesParse extends BaseTestCase {
@Test
public void test() {
PathProperties s0 = PathProperties.parse("(id,name)");
Assert.assertEquals(1, s0.getPaths().size());
Assert.assertTrue(s0.get(null).contains("id"));
Assert.assertTrue(s0.get(null).contains("name"));
Assert.assertFalse(s0.get(null).contains("status"));
PathProperties s1 = PathProperties.parse(":(id,name,shipAddr(*))");
Assert.assertEquals(2, s1.getPaths().size());
Assert.assertEquals(3, s1.get(null).size());
Assert.assertTrue(s1.get(null).contains("id"));
Assert.assertTrue(s1.get(null).contains("name"));
Assert.assertTrue(s1.get(null).contains("shipAddr"));
Assert.assertTrue(s1.get("shipAddr").contains("*"));
Assert.assertEquals(1, s1.get("shipAddr").size());
}
}
@@ -0,0 +1,24 @@
package com.avaje.ebean.text.json;
import org.junit.Assert;
import org.junit.Test;
import com.avaje.ebean.text.PathProperties;
import com.avaje.ebean.text.json.JsonWriteOptions;
public class JsonWriteOptionsTests {
@Test
public void test_parse() {
JsonWriteOptions options = JsonWriteOptions.parsePath("id,status,name");
PathProperties pathProps = options.getPathProperties();
Assert.assertEquals(1, pathProps.getPaths().size());
Assert.assertTrue(pathProps.get(null).contains("id"));
Assert.assertTrue(pathProps.get(null).contains("name"));
Assert.assertTrue(pathProps.get(null).contains("status"));
Assert.assertFalse(pathProps.get(null).contains("foo"));
}
}
@@ -1,9 +1,19 @@
package com.avaje.tests.ddd.iud;
import java.util.Currency;
import junit.framework.TestCase;
import org.junit.Assert;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.bean.EntityBean;
import com.avaje.ebean.config.GlobalProperties;
import com.avaje.ebean.text.json.JsonContext;
import com.avaje.ebeaninternal.api.SpiEbeanServer;
import com.avaje.ebeaninternal.server.deploy.BeanDescriptor;
import com.avaje.ebeaninternal.server.el.ElPropertyValue;
import com.avaje.tests.model.ddd.DPerson;
import com.avaje.tests.model.ivo.CMoney;
import com.avaje.tests.model.ivo.Money;
public class TestDPersonEl extends TestCase {
@@ -11,46 +21,44 @@ public class TestDPersonEl extends TestCase {
GlobalProperties.put("classes", DPerson.class.toString());
// Currency NZD = Currency.getInstance("NZD");
//
// DPerson p = new DPerson();
// p.setFirstName("first");
// p.setLastName("last");
// p.setSalary(new Money("12200"));
// p.setCmoney(new CMoney(new Money("12"), NZD));
//
// SpiEbeanServer server = (SpiEbeanServer)Ebean.getServer(null);
//
// BeanDescriptor<DPerson> descriptor = server.getBeanDescriptor(DPerson.class);
//
// ElPropertyValue elCmoney = descriptor.getElGetValue("cmoney");
Currency NZD = Currency.getInstance("NZD");
DPerson p = new DPerson();
p.setFirstName("first");
p.setLastName("last");
p.setSalary(new Money("12200"));
p.setCmoney(new CMoney(new Money("12"), NZD));
SpiEbeanServer server = (SpiEbeanServer)Ebean.getServer(null);
BeanDescriptor<DPerson> descriptor = server.getBeanDescriptor(DPerson.class);
ElPropertyValue elCmoney = descriptor.getElGetValue("cmoney");
// ElPropertyValue elCmoneyAmt = descriptor.getElGetValue("cmoney.amount");
// ElPropertyValue elCmoneyCur = descriptor.getElGetValue("cmoney.currency");
//
// EntityBean entityBean = (EntityBean)p;
//
// Object cmoney = elCmoney.elGetValue(entityBean);
JsonContext jsonContext = server.createJsonContext();
String json = jsonContext.toJsonString(p);
DPerson bean = jsonContext.toBean(DPerson.class, json);
Assert.assertEquals("first", bean.getFirstName());
Assert.assertEquals(new Money("12200"), bean.getSalary());
Assert.assertEquals(new Money("12"), bean.getCmoney().getAmount());
Assert.assertEquals(NZD, bean.getCmoney().getCurrency());
EntityBean entityBean = (EntityBean)p;
Object cmoney = elCmoney.elGetValue(entityBean);
// Object amt = elCmoneyAmt.elGetValue(entityBean);
// Object cur = elCmoneyCur.elGetValue(entityBean);
//
// Assert.assertNotNull(cmoney);
Assert.assertNotNull(cmoney);
// Assert.assertEquals(new Money("12"), amt);
// Assert.assertEquals(NZD, cur);
//
// p.setCmoney(null);
// Assert.assertNull(p.getCmoney());
//
// // won't trigger CMoney build as not all properties
// // have been set yet...
// elCmoneyAmt.elSetValue(entityBean, new Money("13"), true, false);
// Assert.assertNull(p.getCmoney());
//
// // will trigger the build and setting of CMoney
// elCmoneyCur.elSetValue(entityBean, NZD, true, false);
//
// // this time not null as all required properties for
// // the compound object have been collected
// Assert.assertNotNull(p.getCmoney());
p.setCmoney(null);
Assert.assertNull(p.getCmoney());
}
@@ -0,0 +1,70 @@
package com.avaje.tests.ddd.iud;
<<<<<<< HEAD
import junit.framework.TestCase;
import com.avaje.ebean.config.GlobalProperties;
=======
import java.util.Currency;
import junit.framework.TestCase;
import org.junit.Assert;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.bean.EntityBean;
import com.avaje.ebean.config.GlobalProperties;
import com.avaje.ebean.text.json.JsonContext;
import com.avaje.ebeaninternal.api.SpiEbeanServer;
import com.avaje.ebeaninternal.server.deploy.BeanDescriptor;
import com.avaje.ebeaninternal.server.el.ElPropertyValue;
>>>>>>> json-refactor
import com.avaje.tests.model.ddd.DPerson;
public class TestDPersonEl extends TestCase {
public void test() {
GlobalProperties.put("classes", DPerson.class.toString());
Currency NZD = Currency.getInstance("NZD");
DPerson p = new DPerson();
p.setFirstName("first");
p.setLastName("last");
p.setSalary(new Money("12200"));
p.setCmoney(new CMoney(new Money("12"), NZD));
SpiEbeanServer server = (SpiEbeanServer)Ebean.getServer(null);
BeanDescriptor<DPerson> descriptor = server.getBeanDescriptor(DPerson.class);
ElPropertyValue elCmoney = descriptor.getElGetValue("cmoney");
// ElPropertyValue elCmoneyAmt = descriptor.getElGetValue("cmoney.amount");
// ElPropertyValue elCmoneyCur = descriptor.getElGetValue("cmoney.currency");
JsonContext jsonContext = server.createJsonContext();
String json = jsonContext.toJsonString(p);
DPerson bean = jsonContext.toBean(DPerson.class, json);
Assert.assertEquals("first", bean.getFirstName());
Assert.assertEquals(new Money("12200"), bean.getSalary());
Assert.assertEquals(new Money("12"), bean.getCmoney().getAmount());
Assert.assertEquals(NZD, bean.getCmoney().getCurrency());
EntityBean entityBean = (EntityBean)p;
Object cmoney = elCmoney.elGetValue(entityBean);
// Object amt = elCmoneyAmt.elGetValue(entityBean);
// Object cur = elCmoneyCur.elGetValue(entityBean);
Assert.assertNotNull(cmoney);
// Assert.assertEquals(new Money("12"), amt);
// Assert.assertEquals(NZD, cur);
p.setCmoney(null);
Assert.assertNull(p.getCmoney());
}
}
@@ -0,0 +1,45 @@
package com.avaje.tests.text.json;
import java.io.StringReader;
import java.util.Set;
import javax.json.Json;
import javax.json.stream.JsonParser;
import org.junit.Assert;
import org.junit.Test;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.BeanState;
import com.avaje.ebean.Ebean;
import com.avaje.ebeaninternal.api.SpiEbeanServer;
import com.avaje.ebeaninternal.server.deploy.BeanDescriptor;
import com.avaje.tests.model.basic.Customer;
public class TestJsonBeanDescriptorParse extends BaseTestCase {
@Test
public void test() {
SpiEbeanServer server = (SpiEbeanServer)Ebean.getServer(null);
BeanDescriptor<Customer> descriptor = server.getBeanDescriptor(Customer.class);
StringReader reader = new StringReader("{\"id\":123,\"name\":\"Hello rob\"}");
JsonParser parser = Json.createParser(reader);
Customer customer = (Customer)descriptor.jsonRead(parser, null);
Assert.assertEquals(Integer.valueOf(123), customer.getId());
Assert.assertEquals("Hello rob", customer.getName());
BeanState beanState = Ebean.getBeanState(customer);
Set<String> loadedProps = beanState.getLoadedProps();
Assert.assertEquals(2, loadedProps.size());
Assert.assertTrue(loadedProps.contains("id"));
Assert.assertTrue(loadedProps.contains("name"));
}
}
@@ -48,7 +48,7 @@ public class TestJsonInheritanceDiscriminator extends BaseTestCase {
List<Animal> animals = Ebean.find(Animal.class).findList();
String listJson = json.toJsonString(animals, false);
String listJson = json.toJsonString(animals);
List<Animal> animals2 = json.toList(Animal.class, listJson);
Assert.assertEquals(animals.size(), animals2.size());
@@ -24,7 +24,7 @@ public class TestJsonMap extends BaseTestCase {
JsonContext jsonContext = Ebean.createJsonContext();
JsonWriteOptions jsonWriteOptions = JsonWriteOptions.parsePath("(id,status,name)");
String jsonString = jsonContext.toJsonString(map, true, jsonWriteOptions);
String jsonString = jsonContext.toJsonString(map, jsonWriteOptions);
System.out.println(jsonString);
jsonContext = Ebean.createJsonContext();
@@ -33,7 +33,7 @@ public class TestJsonMap extends BaseTestCase {
// jsonWriteOptions =
// JsonWriteOptions.parsePath("(id,status,billingAddress(*))");
jsonString = jsonContext.toJsonString(map, true, jsonWriteOptions);
jsonString = jsonContext.toJsonString(map, jsonWriteOptions);
System.out.println(jsonString);
// Assert.assertTrue(jsonString.indexOf("{\"1\":") > -1);
@@ -14,19 +14,15 @@ import org.junit.Test;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.json.EJson;
import com.avaje.ebean.text.json.JsonContext;
import com.avaje.ebean.text.json.JsonElement;
import com.avaje.ebean.text.json.JsonElementObject;
import com.avaje.ebeaninternal.server.text.json.InternalJsonParser;
public class TestJsonSimple extends BaseTestCase {
@SuppressWarnings("unchecked")
@Test
public void test() throws IOException {
boolean b = JsonElement.class.isAssignableFrom(JsonElementObject.class);
Assert.assertTrue(b);
InputStream is = this.getClass().getResourceAsStream("/example1.json");
final Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
@@ -41,35 +37,30 @@ public class TestJsonSimple extends BaseTestCase {
String jsonText = sb.toString();
JsonElement el = InternalJsonParser.parse(jsonText);
Object el = EJson.parse(jsonText);
System.out.println("Got " + el);
JsonElement e2 = InternalJsonParser
.parse("{\"a\":12, \"name\":{\"first\":\"rob\", \"last\":\"byg\"}}");
Map<String,Object> e2 = EJson.parseObject("{\"a\":12, \"name\":{\"first\":\"rob\", \"last\":\"byg\"}}");
Assert.assertEquals(Double.valueOf(12), e2.eval("a"));
Assert.assertEquals(12, e2.evalInt("a"));
Assert.assertEquals("rob", e2.evalString("name.first"));
Assert.assertEquals("byg", e2.evalString("name.last"));
Assert.assertEquals(12L, e2.get("a"));
Assert.assertEquals("rob", ((Map<String,Object>)e2.get("name")).get("first"));
Map<String, String> m = new LinkedHashMap<String, String>();
m.put("hello", "rob");
m.put("test", "me");
JsonContext jsonContext = Ebean.createJsonContext();
String jsonString = jsonContext.toJsonString(m, true);
String jsonString = jsonContext.toJsonString(m);
System.out.println(jsonString);
String s = "{\"parishId\":\"18\",\"contentId\":null,\"contentStatus\":null,\"contentType\":\"pg-hello\",\"content\":\"<p>\n\tSomeThing</p>\n\"}";
String s = "{\"parishId\":\"18\",\"contentId\":null,\"contentStatus\":null,\"contentType\":\"pg-hello\",\"content\":\"asd\"}";
JsonElement jsonElement = InternalJsonParser.parse(s);
Object jsonElement = EJson.parse(s);
Assert.assertNotNull(jsonElement);
JsonElement e3 = InternalJsonParser.parse("{\"name\":\"\\u60a8\\u597d\"}");
Map<String,Object> e3 = EJson.parseObject("{\"name\":\"\\u60a8\\u597d\"}");
Assert.assertTrue(e3.evalString("name").length()==2);
Assert.assertTrue(((String)e3.get("name")).length()==2);
}
@@ -2,7 +2,6 @@ package com.avaje.tests.text.json;
import java.io.StringReader;
import java.util.List;
import java.util.Map;
import org.junit.Assert;
import org.junit.Test;
@@ -10,11 +9,6 @@ import org.junit.Test;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.text.json.JsonContext;
import com.avaje.ebean.text.json.JsonElement;
import com.avaje.ebean.text.json.JsonReadBeanVisitor;
import com.avaje.ebean.text.json.JsonReadOptions;
import com.avaje.tests.model.basic.Address;
import com.avaje.tests.model.basic.Contact;
import com.avaje.tests.model.basic.Customer;
import com.avaje.tests.model.basic.ResetBasicData;
@@ -25,22 +19,20 @@ public class TestTextJsonBeanReadVisitor extends BaseTestCase {
ResetBasicData.reset();
List<Customer> list = Ebean.find(Customer.class).select("id, name, status, shippingAddress")
.fetch("billingAddress", "line1, city").fetch("billingAddress.country", "*")
.fetch("contacts", "firstName,email").order().desc("id").findList();
List<Customer> list = Ebean.find(Customer.class)
.select("id, name, status, shippingAddress")
.fetch("billingAddress", "line1, city")
.fetch("billingAddress.country", "*")
.fetch("contacts", "firstName,email")
.order().desc("id").findList();
JsonContext json = Ebean.createJsonContext();
JsonReadOptions options = new JsonReadOptions();
options.addRootVisitor(new CVisitor());
options.addVisitor("contacts", new ContactVisitor());
options.addVisitor("billingAddress", new AVisitor());
options.addVisitor("shippingAddress", new ASVisitor());
String s = json.toJsonString(list, true);
String s = json.toJsonString(list);
System.out.println(s);
List<Customer> mList = json.toList(Customer.class, s, options);
List<Customer> mList = json.toList(Customer.class, s);
System.out.println("VIA STRING: " + mList);
StringReader reader = new StringReader(s);
@@ -50,32 +42,5 @@ public class TestTextJsonBeanReadVisitor extends BaseTestCase {
Assert.assertEquals(mList.size(), mList2.size());
}
private static class CVisitor implements JsonReadBeanVisitor<Customer> {
public void visit(Customer bean, Map<String, JsonElement> unmapped) {
System.out.println("visit customer: " + bean);
}
}
private static class AVisitor implements JsonReadBeanVisitor<Address> {
public void visit(Address bean, Map<String, JsonElement> unmapped) {
System.out.println("visit billing address: " + bean);
}
}
private static class ASVisitor implements JsonReadBeanVisitor<Address> {
public void visit(Address bean, Map<String, JsonElement> unmapped) {
System.out.println("visit shipping address: " + bean);
}
}
private static class ContactVisitor implements JsonReadBeanVisitor<Contact> {
public void visit(Contact bean, Map<String, JsonElement> unmapped) {
System.out.println("visit contact: " + bean);
}
}
}
@@ -0,0 +1,50 @@
package com.avaje.tests.text.json;
import java.io.StringReader;
import java.util.List;
<<<<<<< HEAD
import java.util.Map;
=======
>>>>>>> json-refactor
import org.junit.Assert;
import org.junit.Test;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.text.json.JsonContext;
import com.avaje.tests.model.basic.Customer;
import com.avaje.tests.model.basic.ResetBasicData;
public class TestTextJsonBeanReadVisitor extends BaseTestCase {
@Test
public void test() {
ResetBasicData.reset();
List<Customer> list = Ebean.find(Customer.class)
.select("id, name, status, shippingAddress")
.fetch("billingAddress", "line1, city")
.fetch("billingAddress.country", "*")
.fetch("contacts", "firstName,email")
.order().desc("id").findList();
JsonContext json = Ebean.createJsonContext();
String s = json.toJsonString(list);
System.out.println(s);
List<Customer> mList = json.toList(Customer.class, s);
System.out.println("VIA STRING: " + mList);
StringReader reader = new StringReader(s);
List<Customer> mList2 = json.toList(Customer.class, reader);
System.out.println("VIA READER: " + mList2);
Assert.assertEquals(mList.size(), mList2.size());
}
}
@@ -1,104 +0,0 @@
package com.avaje.tests.text.json;
import java.io.StringReader;
import java.util.List;
import java.util.Map;
import org.junit.Assert;
import org.junit.Test;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.BeanState;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.text.json.JsonContext;
import com.avaje.ebean.text.json.JsonElement;
import com.avaje.ebean.text.json.JsonElementNumber;
import com.avaje.ebean.text.json.JsonReadBeanVisitor;
import com.avaje.ebean.text.json.JsonReadOptions;
import com.avaje.ebean.text.json.JsonWriteBeanVisitor;
import com.avaje.ebean.text.json.JsonWriteOptions;
import com.avaje.ebean.text.json.JsonWriter;
import com.avaje.tests.model.basic.Contact;
import com.avaje.tests.model.basic.Customer;
import com.avaje.tests.model.basic.ResetBasicData;
public class TestTextJsonBeanReadVisitorWithCustomJson extends BaseTestCase {
@Test
public void test() {
ResetBasicData.reset();
List<Customer> list = Ebean.find(Customer.class).select("id, name, status, shippingAddress")
.fetch("billingAddress", "line1, city").fetch("billingAddress.country", "*")
.fetch("contacts", "firstName,email").order().desc("id").findList();
JsonContext json = Ebean.createJsonContext();
JsonWriteOptions writeOptions = new JsonWriteOptions();
writeOptions.setRootPathVisitor(new JsonWriteBeanVisitor<Customer>() {
public void visit(Customer bean, JsonWriter ctx) {
System.out.println("write visit customer: " + bean);
ctx.appendRawValue("dummyCust", "34");
ctx.appendRawValue("smallCustObject", "{\"a\":34,\"b\":\"asdasdasd\"}");
}
});
writeOptions.setPathProperties("contacts", "firstName,id");
writeOptions.setPathVisitor("contacts", new JsonWriteBeanVisitor<Contact>() {
public void visit(Contact bean, JsonWriter ctx) {
System.out.println("write additional custom json on customer: " + bean);
ctx.appendRawValue("dummy", " 3400" + bean.getId() + "");
ctx.appendRawValue("smallObject", "{\"contactA\":34,\"contactB\":\"banana\"}");
}
});
String s = json.toJsonString(list, true, writeOptions);
System.out.println(s);
JsonReadOptions readOptions = new JsonReadOptions();
readOptions.addRootVisitor(new CVisitor());
readOptions.addVisitor("contacts", new ContactVisitor());
StringReader reader = new StringReader(s);
List<Customer> mList2 = json.toList(Customer.class, reader, readOptions);
System.out.println("VIA READER: " + mList2);
for (Customer customer : mList2) {
BeanState beanState = Ebean.getBeanState(customer);
Assert.assertNotNull(beanState.getLoadedProps());
Assert.assertTrue(beanState.getLoadedProps().contains("status"));
Assert.assertTrue(beanState.getLoadedProps().contains("smallnote"));
Assert.assertFalse(beanState.getLoadedProps().contains("anniversary"));
String note = customer.getSmallnote();
Assert.assertEquals("Set in Json Visitor", note);
}
}
private static class CVisitor implements JsonReadBeanVisitor<Customer> {
public void visit(Customer bean, Map<String, JsonElement> unmapped) {
System.out.println("visit customer: " + bean);
bean.setSmallnote("Set in Json Visitor");
}
}
private static class ContactVisitor implements JsonReadBeanVisitor<Contact> {
public void visit(Contact bean, Map<String, JsonElement> unmapped) {
System.out.println("visit contact: " + bean);
Assert.assertNotNull(unmapped);
JsonElement dummyEl = unmapped.get("dummy");
JsonElement smallObjEl = unmapped.get("smallObject");
JsonElementNumber dummyNum = (JsonElementNumber) dummyEl;
Assert.assertTrue(dummyNum.getValue().startsWith("3400"));
Assert.assertNotNull(smallObjEl);
}
}
}
@@ -26,7 +26,7 @@ public class TestTextJsonInheritance extends BaseTestCase {
Assert.assertEquals(2, list.size());
JsonContext jsonContext = Ebean.createJsonContext();
String jsonString = jsonContext.toJsonString(list, true);
String jsonString = jsonContext.toJsonString(list);
System.out.println(jsonString);
List<Vehicle> rebuiltList = jsonContext.toList(Vehicle.class, jsonString);
@@ -24,7 +24,7 @@ public class TestTextJsonInvokeLazy extends BaseTestCase {
opt.setRootPathProperties("name, status");
JsonContext jsonContext = Ebean.createJsonContext();
String jsonString = jsonContext.toJsonString(list, true, opt);
String jsonString = jsonContext.toJsonString(list, opt);
System.out.println(jsonString);
@@ -31,7 +31,7 @@ public class TestTextJsonReadManyLazyLoad extends BaseTestCase {
o.setPathProperties(pp);
System.out.println("Expect lazy loading of Customer beans and customer contacts");
String s = json.toJsonString(list, true, o);
String s = json.toJsonString(list, o);
System.out.println(s);
Assert.assertTrue(s.contains("\"contacts\""));
Assert.assertTrue(s.contains("\"name\""));
@@ -54,7 +54,7 @@ public class TestTextJsonReadManyLazyLoad extends BaseTestCase {
o.setPathProperties(pp);
System.out.println("expecting lazy load of Customer beans to fetch customer name");
String s = json.toJsonString(list, true, o);
String s = json.toJsonString(list, o);
System.out.println(s);
Assert.assertTrue(s.contains("\"contacts\""));
Assert.assertTrue(s.contains("\"name\""));
@@ -78,7 +78,7 @@ public class TestTextJsonReadManyLazyLoad extends BaseTestCase {
o.setPathProperties(pp);
System.out.println("expecting lazy load of Customer contacts ");
String s = json.toJsonString(list, true, o);
String s = json.toJsonString(list, o);
System.out.println(s);
Assert.assertTrue(s.contains("\"contacts\""));
Assert.assertTrue(s.contains("\"name\""));
@@ -70,7 +70,7 @@ public class TestTextJsonReferenceBean extends BaseTestCase {
JsonWriteOptions options = new JsonWriteOptions();
options.setPathProperties("details.product", "id");
String jsonOrder = jsonContext.toJsonString(order, true, options);
String jsonOrder = jsonContext.toJsonString(order, options);
System.out.println(jsonOrder);
Order o2 = jsonContext.toBean(Order.class, jsonOrder);
@@ -8,9 +8,7 @@ import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.EbeanServer;
import com.avaje.ebean.text.json.JsonContext;
import com.avaje.ebean.text.json.JsonWriteBeanVisitor;
import com.avaje.ebean.text.json.JsonWriteOptions;
import com.avaje.ebean.text.json.JsonWriter;
import com.avaje.tests.model.basic.Customer;
import com.avaje.tests.model.basic.ResetBasicData;
@@ -23,10 +21,7 @@ public class TestTextJsonSimple extends BaseTestCase {
List<Customer> list = Ebean.find(Customer.class).select("id, name, status, shippingAddress")
.fetch("billingAddress", "line1, city").fetch("billingAddress.country", "*")
.fetch("contacts", "firstName,email")// , new
// FetchConfig().queryFirst(2))
// .filterMany("contacts").ilike("firstName", "J%").query()
// .where().lt("id", 3)
.fetch("contacts", "firstName,email")
.order().desc("id").findList();
EbeanServer server = Ebean.getServer(null);
@@ -35,18 +30,8 @@ public class TestTextJsonSimple extends BaseTestCase {
JsonWriteOptions options = new JsonWriteOptions();
options.setRootPathProperties("name, id");
options.setRootPathVisitor(new JsonWriteBeanVisitor<Customer>() {
public void visit(Customer bean, JsonWriter ctx) {
System.out.println("visiting " + bean);
ctx.appendRawValue("dummy", "34");
}
});
// String s = json.toJsonString(list, true);
String s = json.toJsonString(list, true, options);
String s = json.toJsonString(list);
System.out.println(s);
List<Customer> mList = json.toList(Customer.class, s);
@@ -29,7 +29,7 @@ public class TestTextJsonSuperSimple extends BaseTestCase {
if (list.size() > 1) {
Customer customer = list.get(0);
String s = json.toJsonString(customer, true);
String s = json.toJsonString(customer);
System.out.println(s);
int statusPos = s.indexOf("status");
Assert.assertEquals(-1, statusPos);
@@ -57,8 +57,7 @@ public class TestTextJsonUpdateCascade extends BaseTestCase {
EbeanServer server = Ebean.getServer(null);
JsonContext jsonContext = server.createJsonContext();
String jsonString = jsonContext.toJsonString(order, true);
String jsonString = jsonContext.toJsonString(order);
System.out.println(jsonString);
Order updOrder = jsonContext.toBean(Order.class, jsonString);
@@ -85,7 +84,7 @@ public class TestTextJsonUpdateCascade extends BaseTestCase {
Ebean.save(u0);
String jsonUser = jsonContext.toJsonString(u0, true);
String jsonUser = jsonContext.toJsonString(u0);
System.out.println(jsonUser);
@@ -1,67 +0,0 @@
package com.avaje.tests.text.json;
import java.sql.Date;
import java.sql.Timestamp;
import org.junit.Assert;
import org.junit.Test;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.config.GlobalProperties;
import com.avaje.ebean.text.json.JsonContext;
import com.avaje.ebean.text.json.JsonValueAdapter;
import com.avaje.ebean.text.json.JsonWriteOptions;
import com.avaje.ebeaninternal.server.text.json.DefaultJsonValueAdapter;
import com.avaje.tests.model.basic.Car;
import com.avaje.tests.model.basic.Vehicle;
public class TestTextJsonUtilDateFormat extends BaseTestCase {
@Test
public void test() {
GlobalProperties.put("ebean.ddl.generate", "false");
GlobalProperties.put("ebean.ddl.run", "false");
Vehicle v = new Car();
v.setId(100);
v.setRegistrationDate(new java.util.Date());
v.setUpdtime(new Timestamp(System.currentTimeMillis()));
JsonContext context = Ebean.createJsonContext();
JsonWriteOptions o = new JsonWriteOptions();
o.setValueAdapter(new CustomDateFormatAdapter());
String jsonString = context.toJsonString(v, true, o);
System.out.println(jsonString);
Assert.assertTrue(jsonString.contains("\"registrationDate\":'"));
}
class CustomDateFormatAdapter implements JsonValueAdapter {
DefaultJsonValueAdapter defaultImplementation = new DefaultJsonValueAdapter();
public String jsonFromDate(Date date) {
// TODO
return null;
}
public String jsonFromTimestamp(Timestamp date) {
// add some single quotes around the timestamp value
return "'" + defaultImplementation.jsonFromTimestamp(date) + "'";
}
public Date jsonToDate(String jsonDate) {
// TODO
return null;
}
public Timestamp jsonToTimestamp(String jsonDateTime) {
// TODO
return null;
}
}
}
@@ -31,7 +31,7 @@ public class TestJsonStatelessUpdate extends BaseTestCase {
JsonContext jsonContext = Ebean.createJsonContext();
JsonWriteOptions writeOptions = JsonWriteOptions.parsePath("(id,name,master(*))");
String jsonString = jsonContext.toJsonString(twoX, true, writeOptions);
String jsonString = jsonContext.toJsonString(twoX, writeOptions);
System.out.println(jsonString);
jsonString = jsonString.replace("twoName", "twoNameModified");