All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.avaje.ebeanservice.elastic.ElasticDocStoreBeanAdapter Maven / Gradle / Ivy

package com.avaje.ebeanservice.elastic;

import com.avaje.ebean.bean.EntityBean;
import com.avaje.ebeaninternal.server.core.PersistRequestBean;
import com.avaje.ebeaninternal.server.deploy.BeanDescriptor;
import com.avaje.ebeaninternal.server.deploy.meta.DeployBeanDescriptor;
import com.avaje.ebeaninternal.server.text.json.WriteJson;
import com.avaje.ebeanservice.docstore.api.DocStoreUpdateContext;
import com.avaje.ebeanservice.docstore.api.support.DocStoreBeanBaseAdapter;
import com.avaje.ebeanservice.elastic.bulk.BulkBuffer;
import com.fasterxml.jackson.core.JsonGenerator;

import java.io.IOException;

/**
 * Helper for BeanDescriptor to handle the ElasticSearch features.
 */
public class ElasticDocStoreBeanAdapter extends DocStoreBeanBaseAdapter {

  public ElasticDocStoreBeanAdapter(BeanDescriptor desc, DeployBeanDescriptor deploy) {
    super(desc, deploy);
  }

  @Override
  public void deleteById(Object idValue, DocStoreUpdateContext docTxn) throws IOException {

    BulkBuffer txn = asElasticBulkUpdate(docTxn);
    JsonGenerator gen = txn.gen();
    writeBulkHeader(gen, idValue, "delete");
  }

  @Override
  public void insert(Object idValue, PersistRequestBean persistRequest, DocStoreUpdateContext txn) throws IOException {

    index(idValue, persistRequest.getBean(), txn);
  }

  @Override
  public void index(Object idValue, T entityBean, DocStoreUpdateContext docTxn) throws IOException {

    BulkBuffer txn = asElasticBulkUpdate(docTxn);

    JsonGenerator gen = txn.gen();
    writeBulkHeader(gen, idValue, "index");

    // use the pathProperties for 'index' requests
    WriteJson writeJson = txn.createWriteJson(server, gen, docStructure.doc());
    desc.jsonWrite(writeJson, (EntityBean) entityBean);
    gen.writeRaw("\n");
  }

  @Override
  public void update(Object idValue, PersistRequestBean persistRequest, DocStoreUpdateContext docTxn) throws IOException {

    BulkBuffer txn = asElasticBulkUpdate(docTxn);
    JsonGenerator gen = txn.gen();
    writeBulkHeader(gen, idValue, "update");

    gen.writeStartObject();
    gen.writeFieldName("doc");
    // only the 'dirty' properties included in 'update' request
    WriteJson writeJson = txn.createWriteJson(server, gen, null);
    desc.jsonWriteDirty(writeJson, persistRequest.getEntityBean(), persistRequest.getDirtyProperties());
    gen.writeEndObject();
    gen.writeRaw("\n");
  }

  private BulkBuffer asElasticBulkUpdate(DocStoreUpdateContext docTxn) {
    return (BulkBuffer)docTxn;
  }

  @Override
  public void updateEmbedded(Object idValue, String embeddedProperty, String embeddedRawContent, DocStoreUpdateContext docTxn) throws IOException {

    BulkBuffer txn = asElasticBulkUpdate(docTxn);

    JsonGenerator gen = txn.gen();
    writeBulkHeader(gen, idValue, "update");

    gen.writeStartObject();
    gen.writeFieldName("doc");
    gen.writeStartObject();
    gen.writeFieldName(embeddedProperty);
    gen.writeRaw(":");
    gen.writeRaw(embeddedRawContent);
    gen.writeEndObject();
    gen.writeEndObject();
    gen.writeRaw("\n");
  }

  private void writeBulkHeader(JsonGenerator gen, Object idValue, String event) throws IOException {

    gen.writeStartObject();
    gen.writeFieldName(event);
    gen.writeStartObject();
    gen.writeStringField("_id", idValue.toString());
    gen.writeStringField("_type", indexType);
    gen.writeStringField("_index", indexName);
    gen.writeEndObject();
    gen.writeEndObject();
    gen.writeRaw("\n");
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy