mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-23 13:26:02 +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>birthdate</w>
|
||||||
<w>bool</w>
|
<w>bool</w>
|
||||||
<w>booleans</w>
|
<w>booleans</w>
|
||||||
|
<w>camelcase</w>
|
||||||
<w>checksum</w>
|
<w>checksum</w>
|
||||||
<w>closeable</w>
|
<w>closeable</w>
|
||||||
<w>commitable</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>>() {
|
private static final ThreadLocal<ThreadLocals.CleanableValue<BinaryJsonBuilder>> cache = new ThreadLocal<ThreadLocals.CleanableValue<BinaryJsonBuilder>>() {
|
||||||
@Override protected ThreadLocals.CleanableValue<BinaryJsonBuilder> initialValue() {
|
@Override protected ThreadLocals.CleanableValue<BinaryJsonBuilder> initialValue() {
|
||||||
try {
|
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) {
|
} catch (IOException e) {
|
||||||
throw new ElasticSearchException("Failed to create json generator", 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 final JsonFactory factory;
|
||||||
|
|
||||||
|
private StringBuilder cachedStringBuilder;
|
||||||
|
|
||||||
public BinaryJsonBuilder() throws IOException {
|
public BinaryJsonBuilder() throws IOException {
|
||||||
this(Jackson.defaultJsonFactory());
|
this(Jackson.defaultJsonFactory());
|
||||||
}
|
}
|
||||||
@ -81,6 +85,10 @@ public class BinaryJsonBuilder extends JsonBuilder<BinaryJsonBuilder> {
|
|||||||
this.builder = this;
|
this.builder = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override protected StringBuilder cachedStringBuilder() {
|
||||||
|
return cachedStringBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
@Override public BinaryJsonBuilder raw(byte[] json) throws IOException {
|
@Override public BinaryJsonBuilder raw(byte[] json) throws IOException {
|
||||||
flush();
|
flush();
|
||||||
bos.write(json);
|
bos.write(json);
|
||||||
@ -88,6 +96,7 @@ public class BinaryJsonBuilder extends JsonBuilder<BinaryJsonBuilder> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override public BinaryJsonBuilder reset() throws IOException {
|
@Override public BinaryJsonBuilder reset() throws IOException {
|
||||||
|
fieldCaseConversion = globalFieldCaseConversion;
|
||||||
bos.reset();
|
bos.reset();
|
||||||
generator = factory.createJsonGenerator(bos, JsonEncoding.UTF8);
|
generator = factory.createJsonGenerator(bos, JsonEncoding.UTF8);
|
||||||
return this;
|
return this;
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
package org.elasticsearch.util.json;
|
package org.elasticsearch.util.json;
|
||||||
|
|
||||||
|
import org.elasticsearch.util.Strings;
|
||||||
import org.elasticsearch.util.concurrent.NotThreadSafe;
|
import org.elasticsearch.util.concurrent.NotThreadSafe;
|
||||||
import org.joda.time.DateTimeZone;
|
import org.joda.time.DateTimeZone;
|
||||||
import org.joda.time.ReadableInstant;
|
import org.joda.time.ReadableInstant;
|
||||||
@ -39,12 +40,35 @@ import java.util.Date;
|
|||||||
@NotThreadSafe
|
@NotThreadSafe
|
||||||
public abstract class JsonBuilder<T extends JsonBuilder> {
|
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);
|
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 org.codehaus.jackson.JsonGenerator generator;
|
||||||
|
|
||||||
protected T builder;
|
protected T builder;
|
||||||
|
|
||||||
|
protected FieldCaseConversion fieldCaseConversion = globalFieldCaseConversion;
|
||||||
|
|
||||||
public static StringJsonBuilder stringJsonBuilder() throws IOException {
|
public static StringJsonBuilder stringJsonBuilder() throws IOException {
|
||||||
return StringJsonBuilder.Cached.cached();
|
return StringJsonBuilder.Cached.cached();
|
||||||
}
|
}
|
||||||
@ -57,6 +81,11 @@ public abstract class JsonBuilder<T extends JsonBuilder> {
|
|||||||
return BinaryJsonBuilder.Cached.cached();
|
return BinaryJsonBuilder.Cached.cached();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public T fieldCaseConversion(FieldCaseConversion fieldCaseConversion) {
|
||||||
|
this.fieldCaseConversion = fieldCaseConversion;
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
public T prettyPrint() {
|
public T prettyPrint() {
|
||||||
generator.useDefaultPrettyPrinter();
|
generator.useDefaultPrettyPrinter();
|
||||||
return builder;
|
return builder;
|
||||||
@ -113,6 +142,11 @@ public abstract class JsonBuilder<T extends JsonBuilder> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public T field(String name) throws IOException {
|
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);
|
generator.writeFieldName(name);
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
@ -369,6 +403,10 @@ public abstract class JsonBuilder<T extends JsonBuilder> {
|
|||||||
|
|
||||||
public abstract String string() throws IOException;
|
public abstract String string() throws IOException;
|
||||||
|
|
||||||
|
protected StringBuilder cachedStringBuilder() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public void close() {
|
public void close() {
|
||||||
try {
|
try {
|
||||||
generator.close();
|
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>>() {
|
private static final ThreadLocal<ThreadLocals.CleanableValue<StringJsonBuilder>> cache = new ThreadLocal<ThreadLocals.CleanableValue<StringJsonBuilder>>() {
|
||||||
@Override protected ThreadLocals.CleanableValue<StringJsonBuilder> initialValue() {
|
@Override protected ThreadLocals.CleanableValue<StringJsonBuilder> initialValue() {
|
||||||
try {
|
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) {
|
} catch (IOException e) {
|
||||||
throw new ElasticSearchException("Failed to create json generator", 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();
|
final UnicodeUtil.UTF8Result utf8Result = new UnicodeUtil.UTF8Result();
|
||||||
|
|
||||||
|
private StringBuilder cachedStringBuilder;
|
||||||
|
|
||||||
public StringJsonBuilder() throws IOException {
|
public StringJsonBuilder() throws IOException {
|
||||||
this(Jackson.defaultJsonFactory());
|
this(Jackson.defaultJsonFactory());
|
||||||
}
|
}
|
||||||
@ -85,6 +89,10 @@ public class StringJsonBuilder extends JsonBuilder<StringJsonBuilder> {
|
|||||||
this.builder = this;
|
this.builder = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override protected StringBuilder cachedStringBuilder() {
|
||||||
|
return cachedStringBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
@Override public StringJsonBuilder raw(byte[] json) throws IOException {
|
@Override public StringJsonBuilder raw(byte[] json) throws IOException {
|
||||||
flush();
|
flush();
|
||||||
Unicode.UTF16Result result = Unicode.unsafeFromBytesAsUtf16(json);
|
Unicode.UTF16Result result = Unicode.unsafeFromBytesAsUtf16(json);
|
||||||
@ -93,6 +101,7 @@ public class StringJsonBuilder extends JsonBuilder<StringJsonBuilder> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public StringJsonBuilder reset() throws IOException {
|
public StringJsonBuilder reset() throws IOException {
|
||||||
|
fieldCaseConversion = globalFieldCaseConversion;
|
||||||
writer.reset();
|
writer.reset();
|
||||||
generator = factory.createJsonGenerator(writer);
|
generator = factory.createJsonGenerator(writer);
|
||||||
return this;
|
return this;
|
||||||
|
@ -33,6 +33,7 @@ import java.util.Date;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.elasticsearch.util.json.Jackson.*;
|
import static org.elasticsearch.util.json.Jackson.*;
|
||||||
|
import static org.elasticsearch.util.json.JsonBuilder.FieldCaseConversion.*;
|
||||||
import static org.hamcrest.MatcherAssert.*;
|
import static org.hamcrest.MatcherAssert.*;
|
||||||
import static org.hamcrest.Matchers.*;
|
import static org.hamcrest.Matchers.*;
|
||||||
|
|
||||||
@ -100,4 +101,14 @@ public class JsonBuilderTests {
|
|||||||
.map();
|
.map();
|
||||||
System.out.println("Data: " + defaultObjectMapper().writeValueAsString(data));
|
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