#589 - ElasticSearch - JsonReader given BeanType

This commit is contained in:
Robin Bygrave
2016-03-07 16:27:16 +13:00
parent f082fce1ff
commit 32bcd5e853
3 changed files with 28 additions and 2 deletions
@@ -1,6 +1,7 @@
package com.avaje.ebean.text.json;
import com.avaje.ebean.FetchPath;
import com.avaje.ebean.plugin.BeanType;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
@@ -67,6 +68,16 @@ public interface JsonContext {
*/
<T> JsonBeanReader<T> createBeanReader(Class<T> cls, JsonParser parser, JsonReadOptions options) throws JsonIOException;
/**
* Create and return a new bean reading for the bean type given the JSON options and source.
* <p>
* Note that JsonOption provides an option for setting a persistence context and also enabling
* further lazy loading. Further lazy loading requires a persistence context so if that is set
* on then a persistence context is created if there is not one set.
* </p>
*/
<T> JsonBeanReader<T> createBeanReader(BeanType<T> beanType, JsonParser parser, JsonReadOptions options) throws JsonIOException;
/**
* Convert json string input into a list of beans of a specific type.
*
@@ -5,7 +5,6 @@ import com.avaje.ebean.bean.EntityBean;
import com.avaje.ebean.config.EncryptKey;
import com.avaje.ebean.config.dbplatform.DbEncryptFunction;
import com.avaje.ebean.config.dbplatform.DbType;
import com.avaje.ebeaninternal.server.type.ScalarTypeEnum;
import com.avaje.ebeanservice.docstore.api.mapping.DocMappingBuilder;
import com.avaje.ebeanservice.docstore.api.mapping.DocPropertyMapping;
import com.avaje.ebean.plugin.Property;
@@ -1319,7 +1318,7 @@ public class BeanProperty implements ElPropertyValue, Property {
DocPropertyType type = scalarType.getDocType();
DocPropertyOptions options = docOptions.copy();
if (id || DocPropertyType.ENUM == type) {
if (DocPropertyType.ENUM == type || isStringId(type)) {
options.setCode(true);
}
@@ -1327,4 +1326,11 @@ public class BeanProperty implements ElPropertyValue, Property {
}
}
/**
* Return true if this is a String Id property and should be treated as a code by the document store.
*/
private boolean isStringId(DocPropertyType type) {
return DocPropertyType.STRING == type && id;
}
}
@@ -3,6 +3,7 @@ package com.avaje.ebeaninternal.server.text.json;
import com.avaje.ebean.FetchPath;
import com.avaje.ebean.bean.EntityBean;
import com.avaje.ebean.config.JsonConfig;
import com.avaje.ebean.plugin.BeanType;
import com.avaje.ebean.text.json.EJson;
import com.avaje.ebean.text.json.JsonContext;
import com.avaje.ebean.text.json.JsonIOException;
@@ -125,6 +126,14 @@ public class DJsonContext implements JsonContext {
return new DJsonBeanReader<T>(desc, readJson);
}
@Override
public <T> DJsonBeanReader createBeanReader(BeanType<T> beanType, JsonParser parser, JsonReadOptions options) throws JsonIOException {
BeanDescriptor<T> desc = (BeanDescriptor<T>)beanType;
ReadJson readJson = new ReadJson(desc, parser, options, determineObjectMapper(options));
return new DJsonBeanReader<T>(desc, readJson);
}
public <T> List<T> toList(Class<T> cls, String json) throws JsonIOException {
return toList(cls, new StringReader(json));
}