#377 - Add back support for JsonWriteBeanVisitor

This commit is contained in:
Robin Bygrave
2015-08-21 08:20:47 +12:00
parent 2caeb4fff1
commit 7c705e2baa
44 changed files with 997 additions and 204 deletions
@@ -0,0 +1,110 @@
package com.avaje.ebeaninternal.server.text.json;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
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.Address;
import com.avaje.tests.model.basic.Contact;
import com.avaje.tests.model.basic.Country;
import com.avaje.tests.model.basic.Customer;
import com.avaje.tests.model.basic.ResetBasicData;
import org.junit.Test;
import java.math.BigDecimal;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
public class TestJsonWriteVisitor extends BaseTestCase {
@Test
public void test() {
ResetBasicData.reset();
List<Customer> list = Ebean.find(Customer.class)
.select("id, name, status")
.fetch("billingAddress", "line1, city")
.fetch("billingAddress.country", "*")
.fetch("contacts", "firstName,email")
.order().desc("id")
.findList();
JsonContext json = Ebean.json();
JsonWriteOptions options = new JsonWriteOptions();
options.setRootPathVisitor(new CustomerVisitor());
options.setPathVisitor("billingAddress", new BillingVisitor());
options.setPathVisitor("billingAddress.country", new CountryVisitor());
options.setPathVisitor("contacts", new ContactVisitor());
String jsonContent = json.toJson(list, options);
System.out.println(jsonContent);
assertThat(jsonContent).contains("customerExtra");
assertThat(jsonContent).contains("contactExtra");
assertThat(jsonContent).contains("billingExtra");
assertThat(jsonContent).contains("countryExtra");
}
class CustomerVisitor implements JsonWriteBeanVisitor<Customer> {
@Override
public void visit(Customer bean, JsonWriter jsonWriter) {
jsonWriter.writeStringField("customerExtra", "extra4");
jsonWriter.writeStartObject("startObj");
jsonWriter.writeBooleanField("yesno", true);
jsonWriter.writeEndObject();
jsonWriter.writeFieldName("secObj");
jsonWriter.writeStartObject();
jsonWriter.writeBooleanField("yesno", false);
jsonWriter.writeEndObject();
jsonWriter.writeStartArray("startList");
jsonWriter.writeBoolean(true);
jsonWriter.writeString("one");
jsonWriter.writeNumber(1);
jsonWriter.writeNumber(2L);
jsonWriter.writeNumber(new BigDecimal("34.45"));
jsonWriter.writeNull();
jsonWriter.writeEndArray();
jsonWriter.writeFieldName("secondList");
jsonWriter.writeStartArray();
jsonWriter.writeNumber(3L);
jsonWriter.writeRawValue("\"rawVal\"");
jsonWriter.writeEndArray();
jsonWriter.writeRaw(",\"rawField\":{\"ra\":42}");
}
}
class ContactVisitor implements JsonWriteBeanVisitor<Contact> {
@Override
public void visit(Contact bean, JsonWriter jsonWriter) {
jsonWriter.writeStringField("contactExtra", "extra3");
}
}
class BillingVisitor implements JsonWriteBeanVisitor<Address> {
@Override
public void visit(Address bean, JsonWriter jsonWriter) {
jsonWriter.writeStringField("billingExtra", "extra1");
}
}
class CountryVisitor implements JsonWriteBeanVisitor<Country> {
@Override
public void visit(Country bean, JsonWriter jsonWriter) {
jsonWriter.writeStringField("countryExtra", "extra2");
}
}
}
@@ -0,0 +1,85 @@
package com.avaje.ebeaninternal.server.text.json;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.text.json.JsonContext;
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;
import org.junit.Test;
import java.io.StringReader;
import java.util.List;
import java.util.Map;
import static org.junit.Assert.assertEquals;
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.json();
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.toJson(list);
System.out.println(s);
List<Customer> mList = json.toList(Customer.class, s, options);
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);
assertEquals(mList.size(), mList2.size());
}
private static class CVisitor implements JsonReadBeanVisitor<Customer> {
@Override
public void visit(Customer bean, Map<String, Object> unmapped) {
System.out.println("visit customer: " + bean);
}
}
private static class AVisitor implements JsonReadBeanVisitor<Address> {
public void visit(Address bean, Map<String, Object> unmapped) {
System.out.println("visit billing address: " + bean);
}
}
private static class ASVisitor implements JsonReadBeanVisitor<Address> {
public void visit(Address bean, Map<String, Object> unmapped) {
System.out.println("visit shipping address: " + bean);
}
}
private static class ContactVisitor implements JsonReadBeanVisitor<Contact> {
public void visit(Contact bean, Map<String, Object> unmapped) {
System.out.println("visit contact: " + bean);
}
}
}
@@ -20,7 +20,7 @@ public class WriteJsonTest {
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, null, JsonConfig.Include.ALL);
WriteJson writeJson = new WriteJson(null, generator, pathProperties, null, null, JsonConfig.Include.ALL);
WriteJson.WriteBean rootLevel = writeJson.createWriteBean(null, null);
assertTrue(rootLevel.currentIncludeProps.contains("id"));