JSON refactor - tidy up

This commit is contained in:
Rob Bygrave
2014-11-12 22:10:28 +13:00
parent 221272328c
commit eaee3a9c02
31 changed files with 935 additions and 1033 deletions
@@ -6,6 +6,8 @@ import org.junit.Test;
import com.avaje.ebean.text.PathProperties;
import com.avaje.ebean.text.json.JsonWriteOptions;
import java.util.Set;
public class JsonWriteOptionsTests {
@Test
@@ -19,6 +21,41 @@ public class JsonWriteOptionsTests {
Assert.assertTrue(pathProps.get(null).contains("name"));
Assert.assertTrue(pathProps.get(null).contains("status"));
Assert.assertFalse(pathProps.get(null).contains("foo"));
}
@Test
public void test_with_depth() {
JsonWriteOptions options = JsonWriteOptions.parsePath("id,status,name,customer(id,name,address(street,city)),orders(qty,product(sku,prodName))");
PathProperties pathProps = options.getPathProperties();
Assert.assertEquals(5, 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.assertTrue(pathProps.get(null).contains("customer"));
Assert.assertTrue(pathProps.get(null).contains("orders"));
Assert.assertFalse(pathProps.get(null).contains("foo"));
Set<String> customer = pathProps.get("customer");
Assert.assertTrue(customer.contains("id"));
Assert.assertTrue(customer.contains("name"));
Assert.assertTrue(customer.contains("address"));
Set<String> address = pathProps.get("customer.address");
Assert.assertTrue(address.contains("street"));
Assert.assertTrue(address.contains("city"));
Set<String> orders = pathProps.get("orders");
Assert.assertTrue(orders.contains("qty"));
Assert.assertTrue(orders.contains("product"));
Set<String> product = pathProps.get("orders.product");
Assert.assertTrue(product.contains("sku"));
Assert.assertTrue(product.contains("prodName"));
}
}
@@ -0,0 +1,57 @@
package com.avaje.ebeaninternal.server.text.json;
import com.avaje.ebean.text.PathProperties;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import org.junit.Test;
import java.io.IOException;
import java.io.StringWriter;
import static org.junit.Assert.*;
public class WriteJsonTest {
@Test
public void test_push() throws IOException {
JsonFactory jsonFactory = new JsonFactory();
JsonGenerator generator = jsonFactory.createGenerator(new StringWriter());
PathProperties pathProperties = PathProperties.parse("id,status,name,customer(id,name,address(street,city)),orders(qty,product(sku,prodName))");
WriteJson writeJson = new WriteJson(null, generator, pathProperties);
WriteJson.WriteBean rootLevel = writeJson.createWriteBean(null, null);
assertTrue(rootLevel.currentIncludeProps.contains("id"));
assertTrue(rootLevel.currentIncludeProps.contains("status"));
assertTrue(rootLevel.currentIncludeProps.contains("name"));
assertTrue(rootLevel.currentIncludeProps.contains("customer"));
writeJson.beginAssocOne("customer", null);
WriteJson.WriteBean customerLevel = writeJson.createWriteBean(null, null);
assertTrue(customerLevel.currentIncludeProps.contains("id"));
assertTrue(customerLevel.currentIncludeProps.contains("name"));
assertTrue(customerLevel.currentIncludeProps.contains("address"));
writeJson.beginAssocOne("address", null);
WriteJson.WriteBean addressLevel = writeJson.createWriteBean(null, null);
assertTrue(addressLevel.currentIncludeProps.contains("street"));
assertTrue(addressLevel.currentIncludeProps.contains("city"));
writeJson.endAssocOne();
writeJson.endAssocOne();
writeJson.beginAssocMany("orders");
WriteJson.WriteBean orderLevel = writeJson.createWriteBean(null, null);
assertTrue(orderLevel.currentIncludeProps.contains("qty"));
assertTrue(orderLevel.currentIncludeProps.contains("product"));
writeJson.beginAssocOne("product", null);
WriteJson.WriteBean productLevel = writeJson.createWriteBean(null, null);
assertTrue(productLevel.currentIncludeProps.contains("sku"));
assertTrue(productLevel.currentIncludeProps.contains("prodName"));
writeJson.endAssocOne();
writeJson.endAssocMany();
}
}
@@ -40,8 +40,8 @@ public class TestDPersonEl extends TestCase {
// ElPropertyValue elCmoneyAmt = descriptor.getElGetValue("cmoney.amount");
// ElPropertyValue elCmoneyCur = descriptor.getElGetValue("cmoney.currency");
JsonContext jsonContext = server.createJsonContext();
String json = jsonContext.toJsonString(p);
JsonContext jsonContext = server.json();
String json = jsonContext.toJson(p);
DPerson bean = jsonContext.toBean(DPerson.class, json);
Assert.assertEquals("first", bean.getFirstName());
@@ -47,7 +47,7 @@ public class TestTextJsonSelfRef extends BaseTestCase {
}
// JsonWriteOptions options = JsonWriteOptions.parsePath("(id,name,referredBy(id))");
// String customerContent = Ebean.createJsonContext().toJsonString(customers);//, false, options);
// String customerContent = Ebean.createJsonContext().toJson(customers);//, false, options);
// System.out.println("Customers: " + customerContent);
//
// Assert
@@ -31,8 +31,8 @@ public class TestJsonBeanWithTimeZone extends BaseTestCase {
bean.setName("foo");
bean.setTimezone(TimeZone.getDefault());
JsonContext jsonContext = Ebean.createJsonContext();
String jsonContent = jsonContext.toJsonString(bean);
JsonContext jsonContext = Ebean.json();
String jsonContent = jsonContext.toJson(bean);
BeanWithTimeZone bean2 = jsonContext.toBean(BeanWithTimeZone.class, jsonContent);
@@ -24,8 +24,8 @@ public class TestJsonInheritanceDiscriminator extends BaseTestCase {
Ebean.save(cat);
JsonContext json = Ebean.createJsonContext();
String jsonContent = json.toJsonString(cat);
JsonContext json = Ebean.json();
String jsonContent = json.toJson(cat);
Cat cat2 = json.toBean(Cat.class, jsonContent);
@@ -37,9 +37,9 @@ public class TestJsonInheritanceDiscriminator extends BaseTestCase {
Cat cat3 = json.toBean(Cat.class, noDiscriminator);
Assert.assertEquals(cat.getId(), cat3.getId());
Assert.assertEquals(cat.getName(), cat3.getName());
Assert.assertEquals(cat.getVersion(), cat3.getVersion());
Assert.assertEquals(1L, cat3.getId().longValue());
Assert.assertEquals("Gemma", cat3.getName());
Assert.assertEquals(1L, cat3.getVersion().longValue());
Dog dog = new Dog();
dog.setRegistrationNumber("ABC123");
@@ -49,7 +49,7 @@ public class TestJsonInheritanceDiscriminator extends BaseTestCase {
List<Animal> animals = Ebean.find(Animal.class).findList();
String listJson = json.toJsonString(animals);
String listJson = json.toJson(animals);
List<Animal> animals2 = json.toList(Animal.class, listJson);
Assert.assertEquals(animals.size(), animals2.size());
@@ -1,8 +1,11 @@
package com.avaje.tests.text.json;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import com.avaje.ebean.Query;
import com.avaje.ebean.text.PathProperties;
import org.junit.Test;
import com.avaje.ebean.BaseTestCase;
@@ -12,8 +15,29 @@ import com.avaje.ebean.text.json.JsonWriteOptions;
import com.avaje.tests.model.basic.Customer;
import com.avaje.tests.model.basic.ResetBasicData;
import static org.junit.Assert.assertTrue;
public class TestJsonMap extends BaseTestCase {
@Test
public void test_basic() throws IOException {
ResetBasicData.reset();
List<Customer> customers = Ebean.find(Customer.class).findList();
JsonContext jsonContext = Ebean.json();
JsonWriteOptions jsonWriteOptions = JsonWriteOptions.parsePath("(id,status,name)");
String jsonString = jsonContext.toJson(customers, jsonWriteOptions);
assertTrue(jsonString.contains("{\"id\":1,\"status\":\"NEW\",\"name\":\"Rob\"}"));
jsonWriteOptions = JsonWriteOptions.parsePath("status,name");
jsonString = jsonContext.toJson(customers, jsonWriteOptions);
assertTrue(jsonString.contains("{\"status\":\"NEW\",\"name\":\"Rob\"}"));
}
@Test
public void test() throws IOException {
@@ -21,19 +45,15 @@ public class TestJsonMap extends BaseTestCase {
Map<String, Customer> map = Ebean.find(Customer.class).findMap("id", String.class);
JsonContext jsonContext = Ebean.createJsonContext();
JsonWriteOptions jsonWriteOptions = JsonWriteOptions.parsePath("(id,status,name)");
JsonContext jsonContext = Ebean.json();
JsonWriteOptions options = JsonWriteOptions.parsePath("(id,status,name)");
String jsonString = jsonContext.toJsonString(map, jsonWriteOptions);
String jsonString = jsonContext.toJson(map, options);
System.out.println(jsonString);
jsonContext = Ebean.createJsonContext();
jsonWriteOptions = JsonWriteOptions
.parsePath("(id,status,name,shippingAddress(id,line1,city),billingAddress(*),contacts(*))");
// jsonWriteOptions =
// JsonWriteOptions.parsePath("(id,status,billingAddress(*))");
options = JsonWriteOptions.parsePath("(id,status,name,shippingAddress(id,line1,city),billingAddress(*),contacts(*))");
jsonString = jsonContext.toJsonString(map, jsonWriteOptions);
jsonString = jsonContext.toJson(map, options);
System.out.println(jsonString);
// Assert.assertTrue(jsonString.indexOf("{\"1\":") > -1);
@@ -41,4 +61,26 @@ public class TestJsonMap extends BaseTestCase {
// > -1);
}
@Test
public void test_applyPathToQuery() throws IOException {
ResetBasicData.reset();
PathProperties pathProperties = PathProperties.parse("(id,status,name,shippingAddress(id,line1,city),billingAddress(*),contacts(*))");
Query<Customer> customerQuery = Ebean.find(Customer.class);
pathProperties.apply(customerQuery);
List<Customer> customers = customerQuery.findList();
JsonWriteOptions options = JsonWriteOptions.parsePath("(id,status,name)");
String jsonString = Ebean.json().toJson(customers, options);
System.out.println(jsonString);
// Assert.assertTrue(jsonString.indexOf("{\"1\":") > -1);
// Assert.assertTrue(jsonString.indexOf("{\"id\":1,\"status\":\"NEW\",\"name\":\"Rob\"},")
// > -1);
}
}
@@ -49,8 +49,8 @@ public class TestJsonSimple extends BaseTestCase {
m.put("hello", "rob");
m.put("test", "me");
JsonContext jsonContext = Ebean.createJsonContext();
String jsonString = jsonContext.toJsonString(m);
JsonContext jsonContext = Ebean.json();
String jsonString = jsonContext.toJson(m);
System.out.println(jsonString);
String s = "{\"parishId\":\"18\",\"contentId\":null,\"contentStatus\":null,\"contentType\":\"pg-hello\",\"content\":\"asd\"}";
@@ -21,8 +21,8 @@ public class TestJsonSomeEnumWithToString extends BaseTestCase {
bean.setName("Some name");
bean.setSomeEnum(SomeEnum.ALPHA);
JsonContext json = Ebean.createJsonContext();
String jsonContent = json.toJsonString(bean);
JsonContext json = Ebean.json();
String jsonContent = json.toJson(bean);
SomeEnumBean bean2 = json.toBean(SomeEnumBean.class, jsonContent);
@@ -27,10 +27,10 @@ public class TestTextJsonBeanReadVisitor extends BaseTestCase {
.fetch("contacts", "firstName,email")
.order().desc("id").findList();
JsonContext json = Ebean.createJsonContext();
JsonContext json = Ebean.json();
String s = json.toJsonString(list);
String s = json.toJson(list);
System.out.println(s);
List<Customer> mList = json.toList(Customer.class, s);
@@ -31,7 +31,7 @@ public class TestTextJsonCompoundType extends BaseTestCase {
//
// JsonContext jsonContext = Ebean.createJsonContext();
//
// String jsonString = jsonContext.toJsonString(p, true);
// String jsonString = jsonContext.toJson(p, true);
// System.out.println(jsonString);
//
// CMoney cm = new CMoney(new Money("12"), NZD);
@@ -43,7 +43,7 @@ public class TestTextJsonCompoundType extends BaseTestCase {
// ep.setOid(new Oid<DExhEntity>(112));
// ep.setExhange(exh);
//
// String jsonString0 = jsonContext.toJsonString(ep, true);
// String jsonString0 = jsonContext.toJson(ep, true);
// System.out.println(jsonString0);
//
// DExhEntity bean0 = jsonContext.toBean(DExhEntity.class, jsonString0);
@@ -26,8 +26,8 @@ public class TestTextJsonInheritance extends BaseTestCase {
Assert.assertEquals(2, list.size());
JsonContext jsonContext = Ebean.createJsonContext();
String jsonString = jsonContext.toJsonString(list);
JsonContext jsonContext = Ebean.json();
String jsonString = jsonContext.toJson(list);
System.out.println(jsonString);
List<Vehicle> rebuiltList = jsonContext.toList(Vehicle.class, jsonString);
@@ -20,14 +20,14 @@ public class TestTextJsonInsertUpdate extends BaseTestCase {
String json0 = "{\"name\":\"InsJson\",\"status\":\"NEW\"}";
JsonContext jsonContext = Ebean.createJsonContext();
JsonContext jsonContext = Ebean.json();
// insert
Customer c0 = jsonContext.toBean(Customer.class, json0);
Ebean.save(c0);
// update with optimistic concurrency checking
String j0 = jsonContext.toJsonString(c0);
String j0 = jsonContext.toJson(c0);
String j1 = StringHelper.replaceString(j0, "InsJson", "Mod1");
Customer c1 = jsonContext.toBean(Customer.class, j1);
Ebean.update(c1);
@@ -21,11 +21,10 @@ public class TestTextJsonInvokeLazy extends BaseTestCase {
List<Customer> list = Ebean.find(Customer.class).select("name").findList();
JsonWriteOptions opt = new JsonWriteOptions();
opt.setRootPathProperties("name, status");
JsonWriteOptions opt = JsonWriteOptions.parsePath("name, status");
JsonContext jsonContext = Ebean.createJsonContext();
String jsonString = jsonContext.toJsonString(list, opt);
JsonContext jsonContext = Ebean.json();
String jsonString = jsonContext.toJson(list, opt);
System.out.println(jsonString);
@@ -24,7 +24,7 @@ public class TestTextJsonReadManyLazyLoad extends BaseTestCase {
List<Customer> list = Ebean.find(Customer.class).select("id, status, shippingAddress").order()
.desc("id").findList();
JsonContext json = Ebean.createJsonContext();
JsonContext json = Ebean.json();
// test that lazy loading on
PathProperties pp = PathProperties.parse("(id,name,contacts(firstName))");
@@ -32,7 +32,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, o);
String s = json.toJson(list, o);
System.out.println(s);
Assert.assertTrue(s.contains("\"contacts\""));
Assert.assertTrue(s.contains("\"name\""));
@@ -47,7 +47,7 @@ public class TestTextJsonReadManyLazyLoad extends BaseTestCase {
List<Customer> list = Ebean.find(Customer.class).select("id, status, shippingAddress")
.fetch("contacts").order().desc("id").findList();
JsonContext json = Ebean.createJsonContext();
JsonContext json = Ebean.json();
// test that lazy loading on
PathProperties pp = PathProperties.parse("(id,name,contacts(firstName))");
@@ -55,7 +55,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, o);
String s = json.toJson(list, o);
System.out.println(s);
Assert.assertTrue(s.contains("\"contacts\""));
Assert.assertTrue(s.contains("\"name\""));
@@ -71,7 +71,7 @@ public class TestTextJsonReadManyLazyLoad extends BaseTestCase {
// .fetch("contacts")
.order().desc("id").findList();
JsonContext json = Ebean.createJsonContext();
JsonContext json = Ebean.json();
// test that lazy loading on
PathProperties pp = PathProperties.parse("(id,name,contacts(firstName))");
@@ -79,7 +79,7 @@ public class TestTextJsonReadManyLazyLoad extends BaseTestCase {
o.setPathProperties(pp);
System.out.println("expecting lazy load of Customer contacts ");
String s = json.toJsonString(list, o);
String s = json.toJson(list, o);
System.out.println(s);
Assert.assertTrue(s.contains("\"contacts\""));
Assert.assertTrue(s.contains("\"name\""));
@@ -28,7 +28,7 @@ public class TestTextJsonReferenceBean extends BaseTestCase {
SpiEbeanServer server = (SpiEbeanServer)Ebean.getServer(null);
JsonContext jsonContext = Ebean.createJsonContext();
JsonContext jsonContext = Ebean.json();
Product product = Ebean.getReference(Product.class, 1);
@@ -38,7 +38,7 @@ public class TestTextJsonReferenceBean extends BaseTestCase {
} else {
String jsonString = jsonContext.toJsonString(product);
String jsonString = jsonContext.toJson(product);
System.out.println(jsonString);
Product refProd = jsonContext.toBean(Product.class, jsonString);
@@ -68,10 +68,9 @@ public class TestTextJsonReferenceBean extends BaseTestCase {
Order order = orders.get(0);
JsonWriteOptions options = new JsonWriteOptions();
options.setPathProperties("details.product", "id");
JsonWriteOptions options = JsonWriteOptions.parsePath("*,details(id,orderQty,product(id))");
String jsonOrder = jsonContext.toJsonString(order, options);
String jsonOrder = jsonContext.toJson(order, options);
System.out.println(jsonOrder);
Order o2 = jsonContext.toBean(Order.class, jsonOrder);
@@ -1,17 +1,16 @@
package com.avaje.tests.text.json;
import java.io.IOException;
import java.util.List;
import org.junit.Test;
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.JsonWriteOptions;
import com.avaje.tests.model.basic.Customer;
import com.avaje.tests.model.basic.ResetBasicData;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class TestTextJsonSimple extends BaseTestCase {
@@ -27,16 +26,13 @@ public class TestTextJsonSimple extends BaseTestCase {
EbeanServer server = Ebean.getServer(null);
JsonContext json = server.createJsonContext();
JsonContext json = server.json();
JsonWriteOptions options = new JsonWriteOptions();
options.setRootPathProperties("name, id");
String s = json.toJsonString(list);
System.out.println(s);
String jsonOutput = json.toJson(list);
System.out.println(jsonOutput);
List<Customer> mList = json.toList(Customer.class, s);
System.out.println(mList);
List<Customer> mList = json.toList(Customer.class, jsonOutput);
Assert.assertEquals(list.size(), mList.size());
}
}
@@ -25,12 +25,12 @@ public class TestTextJsonSuperSimple extends BaseTestCase {
EbeanServer server = Ebean.getServer(null);
JsonContext json = server.createJsonContext();
JsonContext json = server.json();
if (list.size() > 1) {
Customer customer = list.get(0);
String s = json.toJsonString(customer);
String s = json.toJson(customer);
System.out.println(s);
int statusPos = s.indexOf("status");
Assert.assertEquals(-1, statusPos);
@@ -57,8 +57,8 @@ public class TestTextJsonUpdateCascade extends BaseTestCase {
EbeanServer server = Ebean.getServer(null);
JsonContext jsonContext = server.createJsonContext();
String jsonString = jsonContext.toJsonString(order);
JsonContext jsonContext = server.json();
String jsonString = jsonContext.toJson(order);
System.out.println(jsonString);
Order updOrder = jsonContext.toBean(Order.class, jsonString);
@@ -85,7 +85,7 @@ public class TestTextJsonUpdateCascade extends BaseTestCase {
Ebean.save(u0);
String jsonUser = jsonContext.toJsonString(u0);
String jsonUser = jsonContext.toJson(u0);
System.out.println(jsonUser);
@@ -30,10 +30,10 @@ public class TestJsonStatelessUpdate extends BaseTestCase {
UUTwo twoX = Ebean.find(UUTwo.class, two.getId());
JsonContext jsonContext = Ebean.createJsonContext();
JsonContext jsonContext = Ebean.json();
JsonWriteOptions writeOptions = JsonWriteOptions.parsePath("(id,name,master(*))");
String jsonString = jsonContext.toJsonString(twoX, writeOptions);
String jsonString = jsonContext.toJson(twoX, writeOptions);
System.out.println(jsonString);
jsonString = jsonString.replace("twoName", "twoNameModified");