mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-22 12:56:53 +00:00
add field case casing support for JsonBuilder
This commit is contained in:
parent
152aa3553e
commit
aa046cc18d
1
.idea/dictionaries/kimchy.xml
generated
1
.idea/dictionaries/kimchy.xml
generated
@ -8,6 +8,7 @@
|
||||
<w>birthdate</w>
|
||||
<w>bool</w>
|
||||
<w>booleans</w>
|
||||
<w>camelcase</w>
|
||||
<w>checksum</w>
|
||||
<w>closeable</w>
|
||||
<w>commitable</w>
|
||||
|
@ -42,7 +42,9 @@ public class BinaryJsonBuilder extends JsonBuilder<BinaryJsonBuilder> {
|
||||
private static final ThreadLocal<ThreadLocals.CleanableValue<BinaryJsonBuilder>> cache = new ThreadLocal<ThreadLocals.CleanableValue<BinaryJsonBuilder>>() {
|
||||
@Override protected ThreadLocals.CleanableValue<BinaryJsonBuilder> initialValue() {
|
||||
try {
|
||||
return new ThreadLocals.CleanableValue<BinaryJsonBuilder>(new BinaryJsonBuilder());
|
||||
BinaryJsonBuilder builder = new BinaryJsonBuilder();
|
||||
builder.cachedStringBuilder = new StringBuilder();
|
||||
return new ThreadLocals.CleanableValue<BinaryJsonBuilder>(builder);
|
||||
} catch (IOException e) {
|
||||
throw new ElasticSearchException("Failed to create json generator", e);
|
||||
}
|
||||
@ -63,6 +65,8 @@ public class BinaryJsonBuilder extends JsonBuilder<BinaryJsonBuilder> {
|
||||
|
||||
private final JsonFactory factory;
|
||||
|
||||
private StringBuilder cachedStringBuilder;
|
||||
|
||||
public BinaryJsonBuilder() throws IOException {
|
||||
this(Jackson.defaultJsonFactory());
|
||||
}
|
||||
@ -81,6 +85,10 @@ public class BinaryJsonBuilder extends JsonBuilder<BinaryJsonBuilder> {
|
||||
this.builder = this;
|
||||
}
|
||||
|
||||
@Override protected StringBuilder cachedStringBuilder() {
|
||||
return cachedStringBuilder;
|
||||
}
|
||||
|
||||
@Override public BinaryJsonBuilder raw(byte[] json) throws IOException {
|
||||
flush();
|
||||
bos.write(json);
|
||||
@ -88,6 +96,7 @@ public class BinaryJsonBuilder extends JsonBuilder<BinaryJsonBuilder> {
|
||||
}
|
||||
|
||||
@Override public BinaryJsonBuilder reset() throws IOException {
|
||||
fieldCaseConversion = globalFieldCaseConversion;
|
||||
bos.reset();
|
||||
generator = factory.createJsonGenerator(bos, JsonEncoding.UTF8);
|
||||
return this;
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
package org.elasticsearch.util.json;
|
||||
|
||||
import org.elasticsearch.util.Strings;
|
||||
import org.elasticsearch.util.concurrent.NotThreadSafe;
|
||||
import org.joda.time.DateTimeZone;
|
||||
import org.joda.time.ReadableInstant;
|
||||
@ -39,12 +40,35 @@ import java.util.Date;
|
||||
@NotThreadSafe
|
||||
public abstract class JsonBuilder<T extends JsonBuilder> {
|
||||
|
||||
public static enum FieldCaseConversion {
|
||||
/**
|
||||
* No came conversion will occur.
|
||||
*/
|
||||
NONE,
|
||||
/**
|
||||
* Camel Case will be converted to Underscore casing.
|
||||
*/
|
||||
UNDERSCORE,
|
||||
/**
|
||||
* Underscore will be converted to Camel case conversion.
|
||||
*/
|
||||
CAMELCASE
|
||||
}
|
||||
|
||||
private final static DateTimeFormatter defaultDatePrinter = ISODateTimeFormat.dateTime().withZone(DateTimeZone.UTC);
|
||||
|
||||
protected static FieldCaseConversion globalFieldCaseConversion = FieldCaseConversion.CAMELCASE;
|
||||
|
||||
public static void globalFieldCaseConversion(FieldCaseConversion globalFieldCaseConversion) {
|
||||
JsonBuilder.globalFieldCaseConversion = globalFieldCaseConversion;
|
||||
}
|
||||
|
||||
protected org.codehaus.jackson.JsonGenerator generator;
|
||||
|
||||
protected T builder;
|
||||
|
||||
protected FieldCaseConversion fieldCaseConversion = globalFieldCaseConversion;
|
||||
|
||||
public static StringJsonBuilder stringJsonBuilder() throws IOException {
|
||||
return StringJsonBuilder.Cached.cached();
|
||||
}
|
||||
@ -57,6 +81,11 @@ public abstract class JsonBuilder<T extends JsonBuilder> {
|
||||
return BinaryJsonBuilder.Cached.cached();
|
||||
}
|
||||
|
||||
public T fieldCaseConversion(FieldCaseConversion fieldCaseConversion) {
|
||||
this.fieldCaseConversion = fieldCaseConversion;
|
||||
return builder;
|
||||
}
|
||||
|
||||
public T prettyPrint() {
|
||||
generator.useDefaultPrettyPrinter();
|
||||
return builder;
|
||||
@ -113,6 +142,11 @@ public abstract class JsonBuilder<T extends JsonBuilder> {
|
||||
}
|
||||
|
||||
public T field(String name) throws IOException {
|
||||
if (fieldCaseConversion == FieldCaseConversion.UNDERSCORE) {
|
||||
name = Strings.toUnderscoreCase(name);
|
||||
} else if (fieldCaseConversion == FieldCaseConversion.CAMELCASE) {
|
||||
name = Strings.toCamelCase(name);
|
||||
}
|
||||
generator.writeFieldName(name);
|
||||
return builder;
|
||||
}
|
||||
@ -369,6 +403,10 @@ public abstract class JsonBuilder<T extends JsonBuilder> {
|
||||
|
||||
public abstract String string() throws IOException;
|
||||
|
||||
protected StringBuilder cachedStringBuilder() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void close() {
|
||||
try {
|
||||
generator.close();
|
||||
|
@ -44,7 +44,9 @@ public class StringJsonBuilder extends JsonBuilder<StringJsonBuilder> {
|
||||
private static final ThreadLocal<ThreadLocals.CleanableValue<StringJsonBuilder>> cache = new ThreadLocal<ThreadLocals.CleanableValue<StringJsonBuilder>>() {
|
||||
@Override protected ThreadLocals.CleanableValue<StringJsonBuilder> initialValue() {
|
||||
try {
|
||||
return new ThreadLocals.CleanableValue<StringJsonBuilder>(new StringJsonBuilder());
|
||||
StringJsonBuilder builder = new StringJsonBuilder();
|
||||
builder.cachedStringBuilder = new StringBuilder();
|
||||
return new ThreadLocals.CleanableValue<StringJsonBuilder>(builder);
|
||||
} catch (IOException e) {
|
||||
throw new ElasticSearchException("Failed to create json generator", e);
|
||||
}
|
||||
@ -67,6 +69,8 @@ public class StringJsonBuilder extends JsonBuilder<StringJsonBuilder> {
|
||||
|
||||
final UnicodeUtil.UTF8Result utf8Result = new UnicodeUtil.UTF8Result();
|
||||
|
||||
private StringBuilder cachedStringBuilder;
|
||||
|
||||
public StringJsonBuilder() throws IOException {
|
||||
this(Jackson.defaultJsonFactory());
|
||||
}
|
||||
@ -85,6 +89,10 @@ public class StringJsonBuilder extends JsonBuilder<StringJsonBuilder> {
|
||||
this.builder = this;
|
||||
}
|
||||
|
||||
@Override protected StringBuilder cachedStringBuilder() {
|
||||
return cachedStringBuilder;
|
||||
}
|
||||
|
||||
@Override public StringJsonBuilder raw(byte[] json) throws IOException {
|
||||
flush();
|
||||
Unicode.UTF16Result result = Unicode.unsafeFromBytesAsUtf16(json);
|
||||
@ -93,6 +101,7 @@ public class StringJsonBuilder extends JsonBuilder<StringJsonBuilder> {
|
||||
}
|
||||
|
||||
public StringJsonBuilder reset() throws IOException {
|
||||
fieldCaseConversion = globalFieldCaseConversion;
|
||||
writer.reset();
|
||||
generator = factory.createJsonGenerator(writer);
|
||||
return this;
|
||||
|
@ -33,6 +33,7 @@ import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.elasticsearch.util.json.Jackson.*;
|
||||
import static org.elasticsearch.util.json.JsonBuilder.FieldCaseConversion.*;
|
||||
import static org.hamcrest.MatcherAssert.*;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
|
||||
@ -100,4 +101,14 @@ public class JsonBuilderTests {
|
||||
.map();
|
||||
System.out.println("Data: " + defaultObjectMapper().writeValueAsString(data));
|
||||
}
|
||||
|
||||
@Test public void testFieldCaseConversion() throws Exception {
|
||||
StringJsonBuilder builder = JsonBuilder.stringJsonBuilder().fieldCaseConversion(CAMELCASE);
|
||||
builder.startObject().field("test_name", "value").endObject();
|
||||
assertThat(builder.string(), equalTo("{\"testName\":\"value\"}"));
|
||||
|
||||
builder = JsonBuilder.stringJsonBuilder().fieldCaseConversion(UNDERSCORE);
|
||||
builder.startObject().field("testName", "value").endObject();
|
||||
assertThat(builder.string(), equalTo("{\"test_name\":\"value\"}"));
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user