package io.ebeaninternal.server.text.json;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.text.json.JsonContext;
import io.ebean.text.json.JsonReadBeanVisitor;
import io.ebean.text.json.JsonReadOptions;
import org.tests.model.basic.Address;
import org.tests.model.basic.Contact;
import org.tests.model.basic.Customer;
import org.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);
List<Customer> mList = json.toList(Customer.class, s, options);
StringReader reader = new StringReader(s);
List<Customer> mList2 = json.toList(Customer.class, reader);
assertEquals(mList.size(), mList2.size());
}
private static class CVisitor implements JsonReadBeanVisitor<Customer> {
@Override
public void visit(Customer bean, Map<String, Object> unmapped) {
bean.getId();
}
}
private static class AVisitor implements JsonReadBeanVisitor<Address> {
@Override
public void visit(Address bean, Map<String, Object> unmapped) {
bean.getId();
}
}
private static class ASVisitor implements JsonReadBeanVisitor<Address> {
@Override
public void visit(Address bean, Map<String, Object> unmapped) {
bean.getId();
}
}
private static class ContactVisitor implements JsonReadBeanVisitor<Contact> {
@Override
public void visit(Contact bean, Map<String, Object> unmapped) {
bean.getId();
}
}
}