/**
  * Method called after an object field has been output, but before the value is output.
  *
  * <p>Default handling (without pretty-printing) will output a single colon to separate the two.
  * Pretty-printer is to output a colon as well, but can surround that with other (white-space)
  * decoration.
  */
 @Override
 public void writeObjectFieldValueSeparator(JsonGenerator jg) throws IOException {
   if (_spacesInObjectEntries) {
     jg.writeRaw(" : ");
   } else {
     jg.writeRaw(':');
   }
 }
 @Override
 public void writeEndArray(JsonGenerator gen, int nrOfValues) throws IOException {
   if (!_arrayIndenter.isInline()) {
     --_nesting;
   }
   if (nrOfValues > 0) {
     _arrayIndenter.writeIndentation(gen, _nesting);
   } else {
     gen.writeRaw(' ');
   }
   gen.writeRaw(']');
 }
 @Override
 public void writeEndObject(JsonGenerator jg, int nrOfEntries) throws IOException {
   if (!_objectIndenter.isInline()) {
     --_nesting;
   }
   if (nrOfEntries > 0) {
     _objectIndenter.writeIndentation(jg, _nesting);
   } else {
     jg.writeRaw(' ');
   }
   jg.writeRaw('}');
 }
 @Override
 public void serialize(
     final JsonBuilder json,
     final JsonGenerator jsonGenerator,
     final SerializerProvider serializerProvider)
     throws IOException, JsonGenerationException {
   // the JSON from the builder will already be started/ended as array or object...just need to
   // surround it
   // with appropriate chars to fit into the serialization pattern.
   jsonGenerator.writeRaw(":");
   jsonGenerator.writeRaw(json.toString());
   jsonGenerator.writeRaw(",");
 }
 @Override
 public void writeStartArray(JsonGenerator jg) throws IOException {
   if (!_arrayIndenter.isInline()) {
     ++_nesting;
   }
   jg.writeRaw('[');
 }
  @Override
  protected void renderMergedOutputModel(
      Map<String, Object> model, HttpServletRequest request, HttpServletResponse response)
      throws Exception {

    OutputStream stream =
        this.updateContentLength ? createTemporaryOutputStream() : response.getOutputStream();

    Object value = filterModel(model);
    JsonGenerator generator =
        this.objectMapper.getJsonFactory().createJsonGenerator(stream, this.encoding);

    // A workaround for JsonGenerators not applying serialization features
    // https://github.com/FasterXML/jackson-databind/issues/12
    if (this.objectMapper.isEnabled(SerializationFeature.INDENT_OUTPUT)) {
      generator.useDefaultPrettyPrinter();
    }

    if (this.prefixJson) {
      generator.writeRaw("{} && ");
    }
    this.objectMapper.writeValue(generator, value);

    if (this.updateContentLength) {
      writeToResponse(response, (ByteArrayOutputStream) stream);
    }
  }
 @Override
 public void writeStartObject(JsonGenerator jg) throws IOException {
   jg.writeRaw('{');
   if (!_objectIndenter.isInline()) {
     ++_nesting;
   }
 }
  @Ignore
  @Test
  public void testBulkUpdate() throws IOException {

    ResetBasicData.reset();

    EbeanServer server = Ebean.getServer(null);
    JsonContext jsonContext = server.json();

    StringWriter writer = new StringWriter();
    JsonGenerator generator = jsonContext.createGenerator(writer);

    List<Customer> customers = Ebean.find(Customer.class).findList();

    for (Customer customer : customers) {

      customer.setName(customer.getName() + "esMod");
      PathProperties updateProps = PathProperties.parse("name");

      generator.writeStartObject();
      generator.writeFieldName("update");
      generator.writeStartObject();
      generator.writeStringField("_id", customer.getId().toString());
      generator.writeStringField("_type", "customer");
      generator.writeStringField("_index", "customer");
      generator.writeEndObject();
      generator.writeEndObject();
      generator.writeRaw("\n");

      generator.writeStartObject();
      generator.writeFieldName("doc");
      jsonContext.toJson(customer, generator, updateProps);
      generator.writeEndObject();
      generator.writeRaw("\n");
    }

    generator.close();
    String json = writer.toString();

    post("http://localhost:9200/_bulk", json);

    // curl -s -XPOST localhost:9200/_bulk

    //    { "update" : {"_id" : "1", "_type" : "type1", "_index" : "index1"} }
    //    { "doc" : {"field2" : "value2"} }

  }
 @Override
 public void write(Record record) throws IOException {
   if (closed) {
     throw new IOException("writer has been closed");
   }
   generator.writeObject(BeanHelper.wrapRecord(record));
   generator.writeRaw('\n');
 }
  @Test
  public void testCreateGenerator_writeRaw() throws Exception {

    EbeanServer server = Ebean.getDefaultServer();

    StringWriter writer = new StringWriter();
    JsonContext json = server.json();
    JsonGenerator generator = json.createGenerator(writer);

    // test that we can write anything via writeRaw()
    generator.writeRaw("START");
    generator.writeStartArray();
    generator.writeStartObject();
    generator.writeNumberField("count", 12);
    generator.writeEndObject();
    generator.writeEndArray();
    generator.writeRaw("END");
    generator.close();

    assertEquals("START[{\"count\":12}]END", writer.toString());
  }
 @Override
 public void writeIndentation(JsonGenerator jg, int level) throws IOException {
   jg.writeRaw(' ');
 }
 /**
  * Method called after an array value has been completely output, and before another value is to
  * be output.
  *
  * <p>Default handling (without pretty-printing) will output a single comma to separate the two.
  * Pretty-printer is to output a comma as well, but can surround that with other (white-space)
  * decoration.
  */
 @Override
 public void writeArrayValueSeparator(JsonGenerator gen) throws IOException {
   gen.writeRaw(',');
   _arrayIndenter.writeIndentation(gen, _nesting);
 }
 /**
  * Method called after an object entry (field:value) has been completely output, and before
  * another value is to be output.
  *
  * <p>Default handling (without pretty-printing) will output a single comma to separate the two.
  * Pretty-printer is to output a comma as well, but can surround that with other (white-space)
  * decoration.
  */
 @Override
 public void writeObjectEntrySeparator(JsonGenerator jg) throws IOException {
   jg.writeRaw(',');
   _objectIndenter.writeIndentation(jg, _nesting);
 }
 @Override
 public void writeRootValueSeparator(JsonGenerator jg) throws IOException {
   if (_rootSeparator != null) {
     jg.writeRaw(_rootSeparator);
   }
 }
 @Override
 public void writeArrayValueSeparator(JsonGenerator g) throws IOException {
   g.writeRaw(" , ");
 }