From 7956d1490331da08fa3978d00a82f12b25918c1b Mon Sep 17 00:00:00 2001 From: Shay Banon Date: Thu, 6 Sep 2012 20:47:13 +0200 Subject: [PATCH] add field with text/bytes and builder string --- .../common/xcontent/XContentBuilder.java | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/elasticsearch/common/xcontent/XContentBuilder.java b/src/main/java/org/elasticsearch/common/xcontent/XContentBuilder.java index f634e1f35687c..b84f347ed904d 100644 --- a/src/main/java/org/elasticsearch/common/xcontent/XContentBuilder.java +++ b/src/main/java/org/elasticsearch/common/xcontent/XContentBuilder.java @@ -443,7 +443,7 @@ public XContentBuilder field(String name, Double value) throws IOException { if (value == null) { generator.writeNull(); } else { - generator.writeNumber(value.doubleValue()); + generator.writeNumber(value); } return this; } @@ -453,7 +453,7 @@ public XContentBuilder field(XContentBuilderString name, Double value) throws IO if (value == null) { generator.writeNull(); } else { - generator.writeNumber(value.doubleValue()); + generator.writeNumber(value); } return this; } @@ -479,6 +479,15 @@ public XContentBuilder field(String name, BytesReference value) throws IOExcepti return this; } + public XContentBuilder field(XContentBuilderString name, BytesReference value) throws IOException { + field(name); + if (!value.hasArray()) { + value = value.toBytesArray(); + } + generator.writeBinary(value.array(), value.arrayOffset(), value.length()); + return this; + } + public XContentBuilder field(String name, Text value) throws IOException { field(name); if (value.hasBytes() && value.bytes().hasArray()) { @@ -495,6 +504,21 @@ public XContentBuilder field(String name, Text value) throws IOException { return this; } + public XContentBuilder field(XContentBuilderString name, Text value) throws IOException { + field(name); + if (value.hasBytes() && value.bytes().hasArray()) { + generator.writeUTF8String(value.bytes().array(), value.bytes().arrayOffset(), value.bytes().length()); + return this; + } + if (value.hasString()) { + generator.writeString(value.string()); + return this; + } + // TODO: TextBytesOptimization we can use a buffer here to convert it? maybe add a request to jackson to support InputStream as well? + BytesArray bytesArray = value.bytes().toBytesArray(); + generator.writeUTF8String(bytesArray.array(), bytesArray.arrayOffset(), bytesArray.length()); + return this; + } public XContentBuilder field(String name, byte[] value, int offset, int length) throws IOException { field(name); @@ -684,6 +708,10 @@ public XContentBuilder field(String name, Object value) throws IOException { field(name, (float[]) value); } else if (value instanceof double[]) { field(name, (double[]) value); + } else if (value instanceof BytesReference) { + field(name, (BytesReference) value); + } else if (value instanceof Text) { + field(name, (Text) value); } else if (value instanceof ToXContent) { field(name, (ToXContent) value); } else {