#919 - io.ebean package initial

This commit is contained in:
Rob Bygrave
2016-12-11 23:23:22 +13:00
parent 5821dc96b9
commit 971e2dc91b
2134 changed files with 10721 additions and 8652 deletions
@@ -0,0 +1,48 @@
package org.tests.text.csv;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.text.csv.CsvReader;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
import org.junit.Test;
import java.io.File;
import java.io.FileReader;
import java.net.URL;
import java.util.Locale;
public class TestCsvReader extends BaseTestCase {
@Test
public void test() {
ResetBasicData.reset();
try {
URL resource = TestCsvReaderWithCallback.class.getResource("/test1.csv");
File f = new File(resource.getFile());
FileReader reader = new FileReader(f);
CsvReader<Customer> csvReader = Ebean.createCsvReader(Customer.class);
csvReader.setPersistBatchSize(2);
csvReader.addIgnore();
// csvReader.addProperty("id");
csvReader.addProperty("status");
csvReader.addProperty("name");
csvReader.addDateTime("anniversary", "dd-MMM-yyyy", Locale.GERMAN);
csvReader.addProperty("billingAddress.line1");
csvReader.addProperty("billingAddress.city");
csvReader.addProperty("billingAddress.country.code");
csvReader.process(reader);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
@@ -0,0 +1,59 @@
package org.tests.text.csv;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.EbeanServer;
import io.ebean.text.csv.CsvReader;
import io.ebean.text.csv.DefaultCsvCallback;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
import org.junit.Test;
import java.io.File;
import java.io.FileReader;
import java.net.URL;
import java.util.Locale;
public class TestCsvReaderWithCallback extends BaseTestCase {
@Test
public void test() throws Throwable {
ResetBasicData.reset();
URL resource = TestCsvReaderWithCallback.class.getResource("/test1.csv");
File f = new File(resource.getFile());
FileReader reader = new FileReader(f);
final EbeanServer server = Ebean.getServer(null);
CsvReader<Customer> csvReader = server.createCsvReader(Customer.class);
csvReader.setPersistBatchSize(2);
csvReader.setLogInfoFrequency(3);
csvReader.addIgnore();
// csvReader.addProperty("id");
csvReader.addProperty("status");
csvReader.addProperty("name");
csvReader.addDateTime("anniversary", "dd-MMM-yyyy", Locale.GERMAN);
csvReader.addProperty("billingAddress.line1");
csvReader.addProperty("billingAddress.city");
// processor.addReference("billingAddress.country.code");
csvReader.addProperty("billingAddress.country.code");
csvReader.process(reader, new DefaultCsvCallback<Customer>() {
@Override
public void processBean(int row, String[] lineContent, Customer cust) {
server.save(cust.getBillingAddress(), transaction);
server.save(cust, transaction);
}
});
}
}
@@ -0,0 +1,37 @@
package org.tests.text.csv;
import io.ebean.BaseTestCase;
import io.ebean.text.TimeStringParser;
import org.junit.Assert;
import org.junit.Test;
import java.sql.Time;
public class TestTimeStringParser extends BaseTestCase {
@Test
public void testSimple() {
Time t = (Time) TimeStringParser.get().parse("12:00");
Assert.assertNotNull(t);
t = (Time) TimeStringParser.get().parse("12:00:12");
Assert.assertNotNull(t);
expectError("12");
expectError("12:");
expectError("12:00:");
expectError("12:00::");
expectError("12:00:00:");
}
private void expectError(String value) {
try {
TimeStringParser.get().parse(value);
Assert.assertTrue(false);
} catch (IllegalArgumentException e) {
Assert.assertTrue(true);
}
}
}
@@ -0,0 +1,47 @@
package org.tests.text.json;
import io.ebean.BaseTestCase;
import io.ebean.BeanState;
import io.ebean.Ebean;
import io.ebeaninternal.api.SpiEbeanServer;
import io.ebeaninternal.server.deploy.BeanDescriptor;
import io.ebeaninternal.server.text.json.ReadJson;
import org.tests.model.basic.Customer;
import com.fasterxml.jackson.core.JsonParser;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
import java.io.StringReader;
import java.util.Set;
public class TestJsonBeanDescriptorParse extends BaseTestCase {
@Test
public void test() throws IOException {
SpiEbeanServer server = (SpiEbeanServer) Ebean.getServer(null);
BeanDescriptor<Customer> descriptor = server.getBeanDescriptor(Customer.class);
StringReader reader = new StringReader("{\"id\":123,\"name\":\"Hello rob\"}");
JsonParser parser = server.json().createParser(reader);
ReadJson readJson = new ReadJson(descriptor, parser, null, null);
Customer customer = descriptor.jsonRead(readJson, 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"));
}
}
@@ -0,0 +1,44 @@
package org.tests.text.json;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.text.json.JsonContext;
import org.tests.model.basic.BeanWithTimeZone;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
import java.util.TimeZone;
public class TestJsonBeanWithTimeZone extends BaseTestCase {
@Test
public void testSimple() throws IOException {
TimeZone defaultTimeZone = TimeZone.getDefault();
TimeZone.getAvailableIDs(defaultTimeZone.getRawOffset());
String id = defaultTimeZone.getID();
TimeZone timeZone = TimeZone.getTimeZone(id);
Assert.assertEquals(defaultTimeZone, timeZone);
BeanWithTimeZone bean = new BeanWithTimeZone();
bean.setName("foo");
bean.setTimezone(TimeZone.getDefault());
JsonContext jsonContext = Ebean.json();
String jsonContent = jsonContext.toJson(bean);
BeanWithTimeZone bean2 = jsonContext.toBean(BeanWithTimeZone.class, jsonContent);
Assert.assertEquals(bean.getTimezone(), bean2.getTimezone());
Ebean.save(bean);
BeanWithTimeZone bean3 = Ebean.find(BeanWithTimeZone.class, bean.getId());
Assert.assertEquals(bean.getTimezone(), bean3.getTimezone());
}
}
@@ -0,0 +1,62 @@
package org.tests.text.json;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.text.json.JsonContext;
import org.tests.model.basic.Animal;
import org.tests.model.basic.Cat;
import org.tests.model.basic.Dog;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
import java.sql.Date;
import java.util.List;
public class TestJsonInheritanceDiscriminator extends BaseTestCase {
@Test
public void testNoDiscriminator() throws IOException {
Cat cat = new Cat();
cat.setName("Gemma");
Ebean.save(cat);
JsonContext json = Ebean.json();
String jsonContent = json.toJson(cat);
Cat cat2 = json.toBean(Cat.class, jsonContent);
Assert.assertEquals(cat.getId(), cat2.getId());
Assert.assertEquals(cat.getName(), cat2.getName());
Assert.assertEquals(cat.getVersion(), cat2.getVersion());
String noDiscriminator = "{\"id\":1,\"name\":\"Gemma\",\"version\":1}";
Cat cat3 = json.toBean(Cat.class, noDiscriminator);
Assert.assertEquals(1L, cat3.getId().longValue());
Assert.assertEquals("Gemma", cat3.getName());
Assert.assertEquals(1L, cat3.getVersion().longValue());
Dog dog = new Dog();
dog.setRegistrationNumber("ABC123");
dog.setDateOfBirth(new Date(System.currentTimeMillis()));
Ebean.save(dog);
List<Animal> animals = Ebean.find(Animal.class).findList();
String listJson = json.toJson(animals);
List<Animal> animals2 = json.toList(Animal.class, listJson);
Assert.assertEquals(animals.size(), animals2.size());
String noDiscList = "[{\"id\":1,\"name\":\"Gemma\",\"version\":1},{\"name\":\"PussCat\",\"version\":1},{\"species\":\"CAT\",\"name\":\"PussCat\",\"version\":1}]";
List<Cat> cats = json.toList(Cat.class, noDiscList);
Assert.assertEquals(cats.size(), 3);
}
}
@@ -0,0 +1,79 @@
package org.tests.text.json;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.text.PathProperties;
import io.ebean.text.json.JsonContext;
import io.ebean.text.json.JsonWriteOptions;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
import java.util.Map;
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 {
ResetBasicData.reset();
Map<String, Customer> map = Ebean.find(Customer.class).findMap();
JsonContext jsonContext = Ebean.json();
JsonWriteOptions options = JsonWriteOptions.parsePath("(id,status,name)");
jsonContext.toJson(map, options);
options = JsonWriteOptions.parsePath("(id,status,name,shippingAddress(id,line1,city),billingAddress(*),contacts(*))");
jsonContext.toJson(map, options);
// Assert.assertTrue(jsonString.indexOf("{\"1\":") > -1);
// Assert.assertTrue(jsonString.indexOf("{\"id\":1,\"status\":\"NEW\",\"name\":\"Rob\"},")
// > -1);
}
@Test
public void test_applyPathToQuery() throws IOException {
ResetBasicData.reset();
PathProperties pathProperties =
PathProperties.parse("(id,status,name,shippingAddress(id,line1,city),billingAddress(*),contacts(*))");
List<Customer> customers = Ebean.find(Customer.class)
.apply(pathProperties)
.findList();
Ebean.json().toJson(customers, pathProperties);
// Assert.assertTrue(jsonString.indexOf("{\"1\":") > -1);
// Assert.assertTrue(jsonString.indexOf("{\"id\":1,\"status\":\"NEW\",\"name\":\"Rob\"},")
// > -1);
}
}
@@ -0,0 +1,64 @@
package org.tests.text.json;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.text.json.EJson;
import io.ebean.text.json.JsonContext;
import org.junit.Assert;
import org.junit.Test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.Reader;
import java.util.LinkedHashMap;
import java.util.Map;
public class TestJsonSimple extends BaseTestCase {
@SuppressWarnings("unchecked")
@Test
public void test() throws IOException {
InputStream is = this.getClass().getResourceAsStream("/example1.json");
final Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
LineNumberReader lineReader = new LineNumberReader(reader);
String readLine;
StringBuilder sb = new StringBuilder();
while ((readLine = lineReader.readLine()) != null) {
sb.append(readLine);
}
String jsonText = sb.toString();
Object el = EJson.parse(jsonText);
Map<String, Object> e2 = EJson.parseObject("{\"a\":12, \"name\":{\"first\":\"rob\", \"last\":\"byg\"}}");
Assert.assertEquals(12L, e2.get("a"));
Assert.assertEquals("rob", ((Map<String, Object>) e2.get("name")).get("first"));
Map<String, String> m = new LinkedHashMap<>();
m.put("hello", "rob");
m.put("test", "me");
JsonContext jsonContext = Ebean.json();
jsonContext.toJson(m);
String s = "{\"parishId\":\"18\",\"contentId\":null,\"contentStatus\":null,\"contentType\":\"pg-hello\",\"content\":\"asd\"}";
Object jsonElement = EJson.parse(s);
Assert.assertNotNull(jsonElement);
Map<String, Object> e3 = EJson.parseObject("{\"name\":\"\\u60a8\\u597d\"}");
Assert.assertTrue(((String) e3.get("name")).length() == 2);
}
}
@@ -0,0 +1,34 @@
package org.tests.text.json;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.text.json.JsonContext;
import org.tests.model.basic.SomeEnum;
import org.tests.model.basic.SomeEnumBean;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
public class TestJsonSomeEnumWithToString extends BaseTestCase {
@Test
public void testJsonConversion() throws IOException {
SomeEnumBean bean = new SomeEnumBean();
bean.setId(100l);
bean.setName("Some name");
bean.setSomeEnum(SomeEnum.ALPHA);
JsonContext json = Ebean.json();
String jsonContent = json.toJson(bean);
SomeEnumBean bean2 = json.toBean(SomeEnumBean.class, jsonContent);
Assert.assertEquals(bean.getSomeEnum(), bean2.getSomeEnum());
Assert.assertEquals(bean.getName(), bean2.getName());
Assert.assertEquals(bean.getId(), bean2.getId());
}
}
@@ -0,0 +1,43 @@
package org.tests.text.json;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.text.json.JsonContext;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
import java.io.StringReader;
import java.util.List;
public class TestTextJsonBeanReadVisitor extends BaseTestCase {
@Test
public void test() throws IOException {
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();
String s = json.toJson(list);
List<Customer> mList = json.toList(Customer.class, s);
StringReader reader = new StringReader(s);
List<Customer> mList2 = json.toList(Customer.class, reader);
Assert.assertEquals(mList.size(), mList2.size());
}
}
@@ -0,0 +1,55 @@
package org.tests.text.json;
//import java.util.Currency;
//
//import org.junit.Assert;
import io.ebean.BaseTestCase;
import org.junit.Test;
//
//import com.avaje.ebean.Ebean;
//import com.avaje.ebean.text.json.JsonContext;
//import com.avaje.tests.model.ddd.DExhEntity;
//import com.avaje.tests.model.ddd.DPerson;
//import com.avaje.tests.model.ivo.CMoney;
//import com.avaje.tests.model.ivo.ExhangeCMoneyRate;
//import com.avaje.tests.model.ivo.Money;
//import com.avaje.tests.model.ivo.Oid;
//import com.avaje.tests.model.ivo.Rate;
public class TestTextJsonCompoundType extends BaseTestCase {
@Test
public void test() {
// 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));
//
// JsonContext jsonContext = Ebean.createJsonContext();
//
// String jsonString = jsonContext.toJson(p, true);
// System.out.println(jsonString);
//
// CMoney cm = new CMoney(new Money("12"), NZD);
//
// Rate rate = new Rate(0.1);
// ExhangeCMoneyRate exh = new ExhangeCMoneyRate(rate, cm);
//
// DExhEntity ep = new DExhEntity();
// ep.setOid(new Oid<DExhEntity>(112));
// ep.setExhange(exh);
//
// String jsonString0 = jsonContext.toJson(ep, true);
// System.out.println(jsonString0);
//
// DExhEntity bean0 = jsonContext.toBean(DExhEntity.class, jsonString0);
// Assert.assertNotNull(bean0);
}
}
@@ -0,0 +1,58 @@
package org.tests.text.json;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.text.json.JsonContext;
import org.tests.model.basic.Car;
import org.tests.model.basic.CarAccessory;
import org.tests.model.basic.CarFuse;
import org.tests.model.basic.Trip;
import org.tests.model.basic.Truck;
import org.tests.model.basic.Vehicle;
import org.tests.model.basic.VehicleDriver;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class TestTextJsonInheritance extends BaseTestCase {
@Test
public void test() throws IOException {
setupData();
List<Vehicle> list = Ebean.find(Vehicle.class).setAutoTune(false).findList();
Assert.assertEquals(2, list.size());
JsonContext jsonContext = Ebean.json();
String jsonString = jsonContext.toJson(list);
List<Vehicle> rebuiltList = jsonContext.toList(Vehicle.class, jsonString);
Assert.assertEquals(2, rebuiltList.size());
}
private void setupData() {
Ebean.createUpdate(CarAccessory.class, "delete from CarAccessory").execute();
Ebean.createUpdate(CarFuse.class, "delete from CarFuse").execute();
Ebean.createUpdate(Trip.class, "delete from trip").execute();
Ebean.createUpdate(VehicleDriver.class, "delete from vehicleDriver").execute();
Ebean.createUpdate(Vehicle.class, "delete from vehicle").execute();
Car c = new Car();
c.setLicenseNumber("C6788");
c.setDriver("CarDriver");
Ebean.save(c);
Truck t = new Truck();
t.setLicenseNumber("T1098");
t.setCapacity(20D);
Ebean.save(t);
}
}
@@ -0,0 +1,40 @@
package org.tests.text.json;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.text.json.JsonContext;
import io.ebeaninternal.server.lib.util.StringHelper;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
import org.junit.Test;
import java.io.IOException;
public class TestTextJsonInsertUpdate extends BaseTestCase {
@Test
public void test() throws IOException {
ResetBasicData.reset();
String json0 = "{\"name\":\"InsJson\",\"status\":\"NEW\"}";
JsonContext jsonContext = Ebean.json();
// insert
Customer c0 = jsonContext.toBean(Customer.class, json0);
Ebean.save(c0);
// update with optimistic concurrency checking
String j0 = jsonContext.toJson(c0);
String j1 = StringHelper.replaceString(j0, "InsJson", "Mod1");
Customer c1 = jsonContext.toBean(Customer.class, j1);
Ebean.update(c1);
// update with no optimistic concurrency checking
String j2 = "{\"id\":" + c0.getId() + ",\"name\":\"ModIns\",\"status\":\"ACTIVE\"}";
Customer c2 = jsonContext.toBean(Customer.class, j2);
Ebean.update(c2);
}
}
@@ -0,0 +1,28 @@
package org.tests.text.json;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.text.json.JsonContext;
import io.ebean.text.json.JsonWriteOptions;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class TestTextJsonInvokeLazy extends BaseTestCase {
@Test
public void test() throws IOException {
ResetBasicData.reset();
List<Customer> list = Ebean.find(Customer.class).select("name").findList();
JsonWriteOptions opt = JsonWriteOptions.parsePath("name, status");
JsonContext jsonContext = Ebean.json();
jsonContext.toJson(list, opt);
}
}
@@ -0,0 +1,82 @@
package org.tests.text.json;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.text.PathProperties;
import io.ebean.text.json.JsonContext;
import io.ebean.text.json.JsonWriteOptions;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class TestTextJsonReadManyLazyLoad extends BaseTestCase {
@Test
public void test_lazyLoadBoth() throws IOException {
ResetBasicData.reset();
List<Customer> list = Ebean.find(Customer.class).select("id, status, shippingAddress").order()
.desc("id").findList();
JsonContext json = Ebean.json();
// test that lazy loading on
PathProperties pp = PathProperties.parse("(id,name,contacts(firstName))");
JsonWriteOptions o = new JsonWriteOptions();
o.setPathProperties(pp);
String s = json.toJson(list, o);
Assert.assertTrue(s.contains("\"contacts\""));
Assert.assertTrue(s.contains("\"name\""));
}
@Test
public void test_lazyLoadCust() throws IOException {
ResetBasicData.reset();
List<Customer> list = Ebean.find(Customer.class).select("id, status, shippingAddress")
.fetch("contacts").order().desc("id").findList();
JsonContext json = Ebean.json();
// test that lazy loading on
PathProperties pp = PathProperties.parse("(id,name,contacts(firstName))");
JsonWriteOptions o = new JsonWriteOptions();
o.setPathProperties(pp);
String s = json.toJson(list, o);
Assert.assertTrue(s.contains("\"contacts\""));
Assert.assertTrue(s.contains("\"name\""));
}
@Test
public void test_lazyLoadContacts() throws IOException {
ResetBasicData.reset();
List<Customer> list = Ebean.find(Customer.class).select("id, name, status, shippingAddress")
// .fetch("contacts")
.order().desc("id").findList();
JsonContext json = Ebean.json();
// test that lazy loading on
PathProperties pp = PathProperties.parse("(id,name,contacts(firstName))");
JsonWriteOptions o = new JsonWriteOptions();
o.setPathProperties(pp);
String s = json.toJson(list, o);
Assert.assertTrue(s.contains("\"contacts\""));
Assert.assertTrue(s.contains("\"name\""));
}
}
@@ -0,0 +1,83 @@
package org.tests.text.json;
import io.ebean.BaseTestCase;
import io.ebean.BeanState;
import io.ebean.Ebean;
import io.ebean.bean.EntityBean;
import io.ebean.text.json.JsonContext;
import io.ebean.text.json.JsonWriteOptions;
import io.ebeaninternal.api.SpiEbeanServer;
import io.ebeaninternal.server.deploy.BeanDescriptor;
import org.tests.model.basic.Customer;
import org.tests.model.basic.Order;
import org.tests.model.basic.Product;
import org.tests.model.basic.ResetBasicData;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class TestTextJsonReferenceBean extends BaseTestCase {
@Test
public void test() throws IOException {
ResetBasicData.reset();
SpiEbeanServer server = (SpiEbeanServer) Ebean.getServer(null);
JsonContext jsonContext = Ebean.json();
Product product = Ebean.getReference(Product.class, 1);
BeanState beanState0 = Ebean.getBeanState(product);
if (!beanState0.isReference()) {
// got a cached value from beanCache
} else {
String jsonString = jsonContext.toJson(product);
Product refProd = jsonContext.toBean(Product.class, jsonString);
BeanDescriptor<Product> prodDesc = server.getBeanDescriptor(Product.class);
EntityBean eb = (EntityBean) refProd;
prodDesc.isReference(eb._ebean_getIntercept());
BeanState beanState = Ebean.getBeanState(refProd);
Assert.assertTrue(beanState.isNew());
String name = refProd.getName();
Assert.assertNull(name);
// Set to be 'loaded' to invoke lazy loading
beanState.setLoaded();
String name2 = refProd.getName();
Assert.assertNotNull(name2);
}
List<Order> orders = Ebean.find(Order.class)
// .setUseCache(false)
.select("status, orderDate, shipDate, customer").fetch("details", "*")
// .fetch("details.product","id")
.order().asc("id").findList();
Order order = orders.get(0);
JsonWriteOptions options = JsonWriteOptions.parsePath("*,details(id,orderQty,product(id))");
String jsonOrder = jsonContext.toJson(order, options);
Order o2 = jsonContext.toBean(Order.class, jsonOrder);
Customer customer = o2.getCustomer();
BeanDescriptor<Customer> custDesc = server.getBeanDescriptor(Customer.class);
Assert.assertTrue(custDesc.isReference(((EntityBean) customer)._ebean_getIntercept()));
}
}
@@ -0,0 +1,148 @@
package org.tests.text.json;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.EbeanServer;
import io.ebean.text.PathProperties;
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.Assert;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import static org.junit.Assert.assertEquals;
public class TestTextJsonSimple extends BaseTestCase {
class CustJsonRead implements JsonReadBeanVisitor<Customer> {
Customer bean;
Map<String, Object> unmapped;
@Override
public void visit(Customer bean, Map<String, Object> unmapped) {
this.bean = bean;
this.unmapped = unmapped;
}
}
class ContactJsonRead implements JsonReadBeanVisitor<Contact> {
Contact bean;
Map<String, Object> unmapped;
@Override
public void visit(Contact bean, Map<String, Object> unmapped) {
this.bean = bean;
this.unmapped = unmapped;
}
}
class AddressJsonRead implements JsonReadBeanVisitor<Address> {
Address bean;
Map<String, Object> unmapped;
@Override
public void visit(Address bean, Map<String, Object> unmapped) {
this.bean = bean;
this.unmapped = unmapped;
}
}
@Test
public void test() throws IOException {
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();
EbeanServer server = Ebean.getServer(null);
JsonContext json = server.json();
String jsonOutput = json.toJson(list);
// check that transient fields are included by default in the JSON output
Assert.assertTrue(jsonOutput.contains("\"selected\":"));
List<Customer> mList = json.toList(Customer.class, jsonOutput);
assertEquals(list.size(), mList.size());
CustJsonRead custJsonRead = new CustJsonRead();
ContactJsonRead contactJsonRead = new ContactJsonRead();
AddressJsonRead addressJsonRead = new AddressJsonRead();
JsonReadOptions options = new JsonReadOptions();
options.addRootVisitor(custJsonRead);
options.addVisitor("contacts", contactJsonRead);
options.addVisitor("billingAddress", addressJsonRead);
List<Customer> customers = json.toList(Customer.class, jsonOutput, options);
assertEquals(list.size(), customers.size());
}
@Test
public void testTransientIncludedByDefault() {
ResetBasicData.reset();
List<Customer> list = Ebean.find(Customer.class)
.select("id, name")
.order().desc("id").findList();
EbeanServer server = Ebean.getServer(null);
JsonContext json = server.json();
// not using pathProperties - includes transient fields by default
String jsonOutput = json.toJson(list);
// check that transient fields are included by default in the JSON output
Assert.assertTrue(jsonOutput.contains("\"selected\":"));
List<Customer> mList = json.toList(Customer.class, jsonOutput);
assertEquals(list.size(), mList.size());
}
@Test
public void testTransientIncludedExplicitly() {
ResetBasicData.reset();
List<Customer> list = Ebean.find(Customer.class)
.select("id, name")
.order().desc("id").findList();
EbeanServer server = Ebean.getServer(null);
JsonContext json = server.json();
PathProperties pathProperties = PathProperties.parse("(id,name,selected)");
String jsonOutput = json.toJson(list, pathProperties);
// check that transient fields are included by explicit pathProperties
Assert.assertTrue(jsonOutput.contains("\"selected\":"));
pathProperties = PathProperties.parse("(id,name)");
jsonOutput = json.toJson(list, pathProperties);
// check that transient fields are NOT included when explicitly excluded by pathProperties
Assert.assertFalse(jsonOutput.contains("\"selected\":"));
}
}
@@ -0,0 +1,38 @@
package org.tests.text.json;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.EbeanServer;
import io.ebean.text.json.JsonContext;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class TestTextJsonSuperSimple extends BaseTestCase {
@Test
public void test() throws IOException {
ResetBasicData.reset();
List<Customer> list = Ebean.find(Customer.class).select("id, name").order().desc("id")
.findList();
EbeanServer server = Ebean.getServer(null);
JsonContext json = server.json();
if (list.size() > 1) {
Customer customer = list.get(0);
String s = json.toJson(customer);
int statusPos = s.indexOf("status");
Assert.assertEquals(-1, statusPos);
}
}
}
@@ -0,0 +1,99 @@
package org.tests.text.json;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.EbeanServer;
import io.ebean.text.json.JsonContext;
import org.tests.model.basic.Customer;
import org.tests.model.basic.MRole;
import org.tests.model.basic.MUser;
import org.tests.model.basic.Order;
import org.tests.model.basic.Order.Status;
import org.tests.model.basic.OrderDetail;
import org.tests.model.basic.Product;
import org.tests.model.basic.ResetBasicData;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class TestTextJsonUpdateCascade extends BaseTestCase {
@Test
public void test() throws IOException {
ResetBasicData.reset();
Customer c0 = ResetBasicData.createCustAndOrder("Test Json");
Customer c2 = Ebean.getReference(Customer.class, c0.getId());
List<Order> orders = c2.getOrders();
Assert.assertEquals(1, orders.size());
Order order = orders.get(0);
int size = order.getDetails().size();
Assert.assertTrue(size >= 3);
Customer cref = Ebean.getReference(Customer.class, c0.getId());
order.setCustomer(cref);
order.setStatus(Status.SHIPPED);
OrderDetail orderDetail0 = order.getDetails().get(0);
orderDetail0.setShipQty(300);
orderDetail0.setUnitPrice(56.98d);
// remove one of the details...
OrderDetail removedDetail = order.getDetails().remove(2);
Assert.assertNotNull(removedDetail);
Product p = Ebean.getReference(Product.class, 1);
OrderDetail newDetail = new OrderDetail(p, 899, 12.12d);
// newDetail.setOrder(order);
order.addDetail(newDetail);
EbeanServer server = Ebean.getServer(null);
JsonContext jsonContext = server.json();
String jsonString = jsonContext.toJson(order);
Order updOrder = jsonContext.toBean(Order.class, jsonString);
server.update(updOrder);
MRole r1 = new MRole();
r1.setRoleName("rolej1");
Ebean.save(r1);
MRole r2 = new MRole();
r2.setRoleName("rolej2");
Ebean.save(r2);
MRole r3 = new MRole();
r3.setRoleName("rolej3");
Ebean.save(r3);
MUser u0 = new MUser();
u0.setUserName("userj1");
u0.addRole(r1);
u0.addRole(r2);
u0.addRole(r3);
Ebean.save(u0);
jsonContext.toJson(u0);
String s = "{\"userid\":" + u0.getUserid()
+ ",\"userName\":\"userj1\", \"roles\":[{\"roleid\":" + r2.getRoleid() + "},{\"roleid\":"
+ r3.getRoleid() + "}]} ";
MUser updMUser = jsonContext.toBean(MUser.class, s);
server.update(updMUser);
// checked transaction log to confirm correct behaviour
}
}