Skip to content

Commit 8f1023c

Browse files
committed
Add support to output date types with JsonBuilder
1 parent 9e8b5e5 commit 8f1023c

File tree

13 files changed

+69
-20
lines changed

13 files changed

+69
-20
lines changed

modules/elasticsearch/src/main/java/org/elasticsearch/http/JsonThrowableHttpResponse.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import java.io.IOException;
2727
import java.io.PrintWriter;
2828

29-
import static org.elasticsearch.util.json.JsonBuilder.Cached.*;
29+
import static org.elasticsearch.util.json.JsonBuilder.*;
3030

3131
/**
3232
* @author kimchy (Shay Banon)
@@ -59,7 +59,7 @@ private static JsonBuilder convert(Throwable t) throws IOException {
5959
Holder holder = cache.get();
6060
holder.writer.reset();
6161
t.printStackTrace(holder.printWriter);
62-
JsonBuilder builder = cached().prettyPrint()
62+
JsonBuilder builder = jsonBuilder().prettyPrint()
6363
.startObject().field("error", ExceptionsHelper.detailedMessage(t, false, 0));
6464
builder.startObject("debug");
6565
boolean first = true;

modules/elasticsearch/src/main/java/org/elasticsearch/http/action/admin/indices/create/HttpCreateIndexAction.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public class HttpCreateIndexAction extends BaseHttpServerHandler {
8585
try {
8686
Throwable t = unwrapCause(e);
8787
if (t instanceof IndexAlreadyExistsException || t instanceof InvalidIndexNameException) {
88-
channel.sendResponse(new JsonHttpResponse(request, BAD_REQUEST, JsonBuilder.cached().startObject().field("error", t.getMessage()).endObject()));
88+
channel.sendResponse(new JsonHttpResponse(request, BAD_REQUEST, JsonBuilder.jsonBuilder().startObject().field("error", t.getMessage()).endObject()));
8989
} else {
9090
channel.sendResponse(new JsonThrowableHttpResponse(request, e));
9191
}

modules/elasticsearch/src/main/java/org/elasticsearch/http/action/admin/indices/delete/HttpDeleteIndexAction.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737
import static org.elasticsearch.http.HttpResponse.Status.*;
3838
import static org.elasticsearch.util.TimeValue.*;
39-
import static org.elasticsearch.util.json.JsonBuilder.Cached.*;
39+
import static org.elasticsearch.util.json.JsonBuilder.*;
4040

4141
/**
4242
* @author kimchy (Shay Banon)
@@ -54,7 +54,7 @@ public class HttpDeleteIndexAction extends BaseHttpServerHandler {
5454
client.admin().indices().execDelete(deleteIndexRequest, new ActionListener<DeleteIndexResponse>() {
5555
@Override public void onResponse(DeleteIndexResponse result) {
5656
try {
57-
channel.sendResponse(new JsonHttpResponse(request, OK, cached().startObject().field("ok", true).endObject()));
57+
channel.sendResponse(new JsonHttpResponse(request, OK, jsonBuilder().startObject().field("ok", true).endObject()));
5858
} catch (IOException e) {
5959
onFailure(e);
6060
}

modules/elasticsearch/src/main/java/org/elasticsearch/http/action/admin/indices/mapping/create/HttpCreateMappingAction.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public class HttpCreateMappingAction extends BaseHttpServerHandler {
6969
try {
7070
Throwable t = unwrapCause(e);
7171
if (t instanceof IndexMissingException || t instanceof InvalidTypeNameException) {
72-
channel.sendResponse(new JsonHttpResponse(request, BAD_REQUEST, JsonBuilder.cached().startObject().field("error", t.getMessage()).endObject()));
72+
channel.sendResponse(new JsonHttpResponse(request, BAD_REQUEST, JsonBuilder.jsonBuilder().startObject().field("error", t.getMessage()).endObject()));
7373
} else {
7474
channel.sendResponse(new JsonThrowableHttpResponse(request, e));
7575
}

modules/elasticsearch/src/main/java/org/elasticsearch/http/action/count/HttpCountAction.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public class HttpCountAction extends BaseHttpServerHandler {
7171
}
7272
} catch (Exception e) {
7373
try {
74-
channel.sendResponse(new JsonHttpResponse(request, BAD_REQUEST, JsonBuilder.cached().startObject().field("error", e.getMessage()).endObject()));
74+
channel.sendResponse(new JsonHttpResponse(request, BAD_REQUEST, JsonBuilder.jsonBuilder().startObject().field("error", e.getMessage()).endObject()));
7575
} catch (IOException e1) {
7676
logger.error("Failed to send failure response", e1);
7777
}

modules/elasticsearch/src/main/java/org/elasticsearch/http/action/deletebyquery/HttpDeleteByQueryAction.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public class HttpDeleteByQueryAction extends BaseHttpServerHandler {
6363
deleteByQueryRequest.timeout(TimeValue.parseTimeValue(request.param("timeout"), ShardDeleteByQueryRequest.DEFAULT_TIMEOUT));
6464
} catch (Exception e) {
6565
try {
66-
channel.sendResponse(new JsonHttpResponse(request, PRECONDITION_FAILED, JsonBuilder.cached().startObject().field("error", e.getMessage()).endObject()));
66+
channel.sendResponse(new JsonHttpResponse(request, PRECONDITION_FAILED, JsonBuilder.jsonBuilder().startObject().field("error", e.getMessage()).endObject()));
6767
} catch (IOException e1) {
6868
logger.error("Failed to send failure response", e1);
6969
}

modules/elasticsearch/src/main/java/org/elasticsearch/http/action/index/HttpIndexAction.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public class HttpIndexAction extends BaseHttpServerHandler {
5656
indexRequest.opType(IndexRequest.OpType.CREATE);
5757
} else {
5858
try {
59-
channel.sendResponse(new JsonHttpResponse(request, BAD_REQUEST, JsonBuilder.cached().startObject().field("error", "opType [" + sOpType + "] not allowed, either [index] or [create] are allowed").endObject()));
59+
channel.sendResponse(new JsonHttpResponse(request, BAD_REQUEST, JsonBuilder.jsonBuilder().startObject().field("error", "opType [" + sOpType + "] not allowed, either [index] or [create] are allowed").endObject()));
6060
} catch (IOException e1) {
6161
logger.warn("Failed to send response", e1);
6262
return;

modules/elasticsearch/src/main/java/org/elasticsearch/http/action/search/HttpSearchAction.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public class HttpSearchAction extends BaseHttpServerHandler {
7777
searchRequest.operationThreading(operationThreading);
7878
} catch (Exception e) {
7979
try {
80-
channel.sendResponse(new JsonHttpResponse(request, BAD_REQUEST, JsonBuilder.cached().startObject().field("error", e.getMessage()).endObject()));
80+
channel.sendResponse(new JsonHttpResponse(request, BAD_REQUEST, JsonBuilder.jsonBuilder().startObject().field("error", e.getMessage()).endObject()));
8181
} catch (IOException e1) {
8282
logger.error("Failed to send failure response", e1);
8383
}

modules/elasticsearch/src/main/java/org/elasticsearch/http/action/support/HttpJsonBuilder.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
public class HttpJsonBuilder {
3131

3232
public static JsonBuilder cached(HttpRequest request) throws IOException {
33-
JsonBuilder builder = JsonBuilder.cached();
33+
JsonBuilder builder = JsonBuilder.jsonBuilder();
3434
String prettyPrint = request.param("pretty");
3535
if (prettyPrint != null && "true".equals(prettyPrint)) {
3636
builder.prettyPrint();

modules/elasticsearch/src/main/java/org/elasticsearch/index/query/json/BaseJsonQueryBuilder.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public abstract class BaseJsonQueryBuilder implements JsonQueryBuilder {
3131

3232
@Override public String build() throws QueryBuilderException {
3333
try {
34-
JsonBuilder builder = JsonBuilder.cached();
34+
JsonBuilder builder = JsonBuilder.jsonBuilder();
3535
toJson(builder);
3636
return builder.string();
3737
} catch (Exception e) {

modules/elasticsearch/src/main/java/org/elasticsearch/search/builder/SearchSourceBuilder.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ public SearchSourceBuilder field(String name) {
124124

125125
public String build() {
126126
try {
127-
JsonBuilder builder = JsonBuilder.cached();
127+
JsonBuilder builder = JsonBuilder.jsonBuilder();
128128
builder.startObject();
129129

130130
if (from != -1) {

modules/elasticsearch/src/main/java/org/elasticsearch/util/json/JsonBuilder.java

+47-7
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,22 @@
2424
import org.elasticsearch.ElasticSearchException;
2525
import org.elasticsearch.util.concurrent.NotThreadSafe;
2626
import org.elasticsearch.util.io.FastCharArrayWriter;
27+
import org.joda.time.DateTimeZone;
28+
import org.joda.time.ReadableInstant;
29+
import org.joda.time.format.DateTimeFormatter;
30+
import org.joda.time.format.ISODateTimeFormat;
2731

2832
import java.io.IOException;
33+
import java.util.Date;
2934

3035
/**
3136
* @author kimchy (Shay Banon)
3237
*/
3338
@NotThreadSafe
3439
public class JsonBuilder {
3540

41+
private final static DateTimeFormatter defaultDatePrinter = ISODateTimeFormat.dateTime().withZone(DateTimeZone.UTC);
42+
3643
/**
3744
* A thread local based cache of {@link JsonBuilder}.
3845
*/
@@ -57,19 +64,14 @@ public Cached(JsonBuilder generator) {
5764
/**
5865
* Returns the cached thread local generator, with its internal {@link StringBuilder} cleared.
5966
*/
60-
public static JsonBuilder cached() throws IOException {
67+
static JsonBuilder cached() throws IOException {
6168
Cached cached = cache.get();
6269
cached.generator.reset();
6370
return cached.generator;
6471
}
65-
66-
public static JsonBuilder cachedNoReset() {
67-
Cached cached = cache.get();
68-
return cached.generator;
69-
}
7072
}
7173

72-
public static JsonBuilder cached() throws IOException {
74+
public static JsonBuilder jsonBuilder() throws IOException {
7375
return Cached.cached();
7476
}
7577

@@ -226,6 +228,26 @@ public JsonBuilder field(String name, byte[] value) throws IOException {
226228
return this;
227229
}
228230

231+
public JsonBuilder field(String name, ReadableInstant date) throws IOException {
232+
generator.writeFieldName(name);
233+
return date(date);
234+
}
235+
236+
public JsonBuilder field(String name, ReadableInstant date, DateTimeFormatter formatter) throws IOException {
237+
generator.writeFieldName(name);
238+
return date(date, formatter);
239+
}
240+
241+
public JsonBuilder field(String name, Date date) throws IOException {
242+
generator.writeFieldName(name);
243+
return date(date);
244+
}
245+
246+
public JsonBuilder field(String name, Date date, DateTimeFormatter formatter) throws IOException {
247+
generator.writeFieldName(name);
248+
return date(date, formatter);
249+
}
250+
229251
public JsonBuilder nullField(String name) throws IOException {
230252
generator.writeNullField(name);
231253
return this;
@@ -286,6 +308,24 @@ public JsonBuilder bool(boolean value) throws IOException {
286308
return this;
287309
}
288310

311+
public JsonBuilder date(ReadableInstant date) throws IOException {
312+
return date(date, defaultDatePrinter);
313+
}
314+
315+
public JsonBuilder date(ReadableInstant date, DateTimeFormatter dateTimeFormatter) throws IOException {
316+
string(dateTimeFormatter.print(date));
317+
return this;
318+
}
319+
320+
public JsonBuilder date(Date date) throws IOException {
321+
return date(date, defaultDatePrinter);
322+
}
323+
324+
public JsonBuilder date(Date date, DateTimeFormatter dateTimeFormatter) throws IOException {
325+
string(dateTimeFormatter.print(date.getTime()));
326+
return this;
327+
}
328+
289329
public JsonBuilder value(Object value) throws IOException {
290330
Class type = value.getClass();
291331
if (type == String.class) {

modules/elasticsearch/src/test/java/org/elasticsearch/deps/joda/SimpleJodaTests.java

+9
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import org.joda.time.format.ISODateTimeFormat;
2525
import org.testng.annotations.Test;
2626

27+
import java.util.Date;
28+
2729
import static org.hamcrest.MatcherAssert.*;
2830
import static org.hamcrest.Matchers.*;
2931

@@ -54,4 +56,11 @@ public class SimpleJodaTests {
5456
millis = formatter.parseMillis("1970-01-01");
5557
assertThat(millis, equalTo(0l));
5658
}
59+
60+
@Test public void testWriteAndParse() {
61+
DateTimeFormatter dateTimeWriter = ISODateTimeFormat.dateTime().withZone(DateTimeZone.UTC);
62+
DateTimeFormatter formatter = ISODateTimeFormat.dateOptionalTimeParser().withZone(DateTimeZone.UTC);
63+
Date date = new Date();
64+
assertThat(formatter.parseMillis(dateTimeWriter.print(date.getTime())), equalTo(date.getTime()));
65+
}
5766
}

0 commit comments

Comments
 (0)