This commit is contained in:
Shinsuke Sugaya 2015-07-09 20:28:38 +09:00
parent 1f29e8cd77
commit 81926a5041
7 changed files with 519 additions and 53 deletions

View file

@ -1,5 +1,5 @@
map:{
; ElasticsearchBeanGen = map:{
; ElasticsearchFessConfigGen = map:{
; resourceMap = map:{
; resourceType = ELASTICSEARCH
; resourceFile = ../src/main/config/es/fess_config.json
@ -25,5 +25,31 @@ map:{
}
}
}
; ElasticsearchSearchLogGen = map:{
; resourceMap = map:{
; resourceType = ELASTICSEARCH
; resourceFile = ../src/main/config/es/search_log.json
}
; outputMap = map:{
; templateFile = unused
; outputDirectory = ../src/main/java
; package = org.codelibs.fess.es
; className = unused
}
; tableMap = map:{
; tablePath = search_log -> mappings -> map
; mappingMap = map:{
; type = map:{
; string = String
; integer = Integer
; long = Long
; float = Float
; double = Double
; boolean = Boolean
; date = java.time.LocalDateTime
}
}
}
}
}

View file

@ -44,7 +44,7 @@ $manager.makeDirectory($request.generateDirPath)
#end
#end
#elseif ($request.isResourceTypeElasticsearch())
#if ($request.requestName == "ElasticsearchBeanGen")
#if ($request.requestName.startsWith("Elasticsearch"))
##
## <<< Elasticsearch Schema Gen >>>
##
@ -115,6 +115,7 @@ $manager.makeDirectory($request.generateDirPath)
#end
#end
#if ($request.requestName == "ElasticsearchFessConfigGen")
#set ($path = "${request.generateDirPath}/cbean/bs/AbstractConditionBean.java")
$manager.makeDirectory($path)
$request.info("parse('${path}')")
@ -150,6 +151,7 @@ $manager.makeDirectory($request.generateDirPath)
$request.info("parse('${path}')")
$generator.parse("./elasticsearch/SqlClauseEs.vm", $path, "", "")
#end
#end
#else
##
## <<< Normal Gen >>>

View file

@ -1,7 +1,12 @@
package ${request.package}.bsbhv;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.function.Function;
import javax.annotation.Resource;
@ -12,12 +17,17 @@ import ${request.package}.cbean.bs.AbstractConditionBean;
import ${request.package}.cbean.result.EsPagingResultBean;
import org.dbflute.Entity;
import org.dbflute.bhv.AbstractBehaviorWritable;
import org.dbflute.bhv.readable.EntityRowHandler;
import org.dbflute.bhv.writable.DeleteOption;
import org.dbflute.bhv.writable.InsertOption;
import org.dbflute.bhv.writable.UpdateOption;
import org.dbflute.cbean.ConditionBean;
import org.dbflute.cbean.coption.CursorSelectOption;
import org.dbflute.cbean.result.ListResultBean;
import org.dbflute.exception.IllegalBehaviorStateException;
import org.elasticsearch.action.bulk.BulkItemResponse;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.count.CountRequestBuilder;
import org.elasticsearch.action.delete.DeleteRequestBuilder;
import org.elasticsearch.action.delete.DeleteResponse;
@ -25,41 +35,60 @@ import org.elasticsearch.action.index.IndexRequestBuilder;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.action.update.UpdateRequestBuilder;
import org.elasticsearch.client.Client;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
/**
* @author FreeGen
*/
public abstract class AbstractBehavior<ENTITY extends Entity, CB extends ConditionBean> extends AbstractBehaviorWritable<ENTITY, CB> {
@Resource
protected Client client;
protected abstract String asIndexEsName();
protected int sizeForDelete = 100;
protected String scrollForDelete = "1m";
protected int sizeForCursor = 100;
protected String scrollForCursor = "1m";
protected abstract String asEsIndex();
protected abstract String asEsIndexType();
protected abstract String asEsSearchType();
protected abstract <RESULT extends ENTITY> RESULT createEntity(Map<String, Object> source, Class<? extends RESULT> entityType);
@Override
protected int delegateSelectCountUniquely(ConditionBean cb) {
protected int delegateSelectCountUniquely(final ConditionBean cb) {
// TODO check response and cast problem
CountRequestBuilder builder = client.prepareCount(asIndexEsName()).setTypes(asTableDbName());
final CountRequestBuilder builder = client.prepareCount(asEsIndex()).setTypes(asEsSearchType());
return (int) ((AbstractConditionBean) cb).build(builder).execute().actionGet().getCount();
}
protected <RESULT extends ENTITY> List<RESULT> delegateSelectList(ConditionBean cb, Class<? extends RESULT> entityType) {
@Override
protected <RESULT extends ENTITY> List<RESULT> delegateSelectList(final ConditionBean cb, final Class<? extends RESULT> entityType) {
// TODO check response
SearchRequestBuilder builder = client.prepareSearch(asIndexEsName()).setTypes(asTableDbName());
final SearchRequestBuilder builder = client.prepareSearch(asEsIndex()).setTypes(asEsSearchType());
if (cb.isFetchScopeEffective()) {
builder.setFrom(cb.getFetchStartIndex());
builder.setSize(cb.getFetchSize());
}
((AbstractConditionBean) cb).request().build(builder);
SearchResponse response = ((AbstractConditionBean) cb).build(builder).execute().actionGet();
final SearchResponse response = ((AbstractConditionBean) cb).build(builder).execute().actionGet();
EsPagingResultBean<RESULT> list = new EsPagingResultBean<>();
SearchHits searchHits = response.getHits();
final EsPagingResultBean<RESULT> list = new EsPagingResultBean<>();
final SearchHits searchHits = response.getHits();
searchHits.forEach(hit -> {
Map<String, Object> source = hit.getSource();
RESULT entity = createEntity(source, entityType);
DocMeta docMeta = ((AbstractEntity) entity).asDocMeta();
final Map<String, Object> source = hit.getSource();
final RESULT entity = createEntity(source, entityType);
final DocMeta docMeta = ((AbstractEntity) entity).asDocMeta();
docMeta.id(hit.getId());
docMeta.version(hit.getVersion());
list.add(entity);
@ -78,14 +107,85 @@ public abstract class AbstractBehavior<ENTITY extends Entity, CB extends Conditi
return list;
}
@Override
protected <RESULT extends ENTITY> void helpSelectCursorHandlingByPaging(CB cb, EntityRowHandler<RESULT> handler,
Class<? extends RESULT> entityType, CursorSelectOption option) {
delegateSelectCursor(cb, handler, entityType);
}
@Override
protected <RESULT extends ENTITY> void delegateSelectCursor(final ConditionBean cb, final EntityRowHandler<RESULT> handler,
final Class<? extends RESULT> entityType) {
delegateBulkRequest(cb, searchHits -> {
searchHits.forEach(hit -> {
if (handler.isBreakCursor()) {
return;
}
final Map<String, Object> source = hit.getSource();
final RESULT entity = createEntity(source, entityType);
final DocMeta docMeta = ((AbstractEntity) entity).asDocMeta();
docMeta.id(hit.getId());
docMeta.version(hit.getVersion());
handler.handle(entity);
});
return !handler.isBreakCursor();
});
}
protected <RESULT extends ENTITY> void delegateSelectBulk(final ConditionBean cb, final EntityRowHandler<List<RESULT>> handler,
final Class<? extends RESULT> entityType) {
assertCBStateValid(cb);
assertObjectNotNull("entityRowHandler", handler);
assertSpecifyDerivedReferrerEntityProperty(cb, entityType);
assertObjectNotNull("entityRowHandler", handler);
delegateBulkRequest(cb, searchHits -> {
List<RESULT> list = new ArrayList<>();
searchHits.forEach(hit -> {
final Map<String, Object> source = hit.getSource();
final RESULT entity = createEntity(source, entityType);
final DocMeta docMeta = ((AbstractEntity) entity).asDocMeta();
docMeta.id(hit.getId());
docMeta.version(hit.getVersion());
list.add(entity);
});
handler.handle(list);
return !handler.isBreakCursor();
});
}
protected void delegateBulkRequest(final ConditionBean cb, Function<SearchHits, Boolean> handler) {
final SearchRequestBuilder builder = client.prepareSearch(asEsIndex()).setTypes(asEsIndexType()).setSearchType(SearchType.SCAN)
.setScroll(scrollForCursor).setSize(sizeForCursor);
((AbstractConditionBean) cb).request().build(builder);
final SearchResponse response = ((AbstractConditionBean) cb).build(builder).execute().actionGet();
String scrollId = response.getScrollId();
while (scrollId != null) {
final SearchResponse scrollResponse = client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute().actionGet();
scrollId = scrollResponse.getScrollId();
final SearchHits searchHits = scrollResponse.getHits();
final SearchHit[] hits = searchHits.getHits();
if (hits.length == 0) {
scrollId = null;
break;
}
if (!handler.apply(searchHits)) {
break;
}
}
}
@Override
protected Number doReadNextVal() {
String msg = "This table is NOT related to sequence: " + asTableDbName();
final String msg = "This table is NOT related to sequence: " + asEsIndexType();
throw new UnsupportedOperationException(msg);
}
@Override
protected <RESULT extends Entity> ListResultBean<RESULT> createListResultBean(ConditionBean cb, List<RESULT> selectedList) {
protected <RESULT extends Entity> ListResultBean<RESULT> createListResultBean(final ConditionBean cb, final List<RESULT> selectedList) {
if (selectedList instanceof EsPagingResultBean) {
return (ListResultBean<RESULT>) selectedList;
}
@ -93,48 +193,160 @@ public abstract class AbstractBehavior<ENTITY extends Entity, CB extends Conditi
}
@Override
protected int delegateInsert(Entity entity, InsertOption<? extends ConditionBean> option) {
AbstractEntity esEntity = (AbstractEntity) entity;
IndexRequestBuilder builder = client.prepareIndex(asIndexEsName(), asTableDbName()).setSource(esEntity.toSource());
RequestOptionCall<IndexRequestBuilder> indexOption = esEntity.asDocMeta().indexOption();
if (indexOption != null) {
indexOption.callback(builder);
}
IndexResponse response = builder.execute().actionGet();
protected int delegateInsert(final Entity entity, final InsertOption<? extends ConditionBean> option) {
final AbstractEntity esEntity = (AbstractEntity) entity;
IndexRequestBuilder builder = createInsertRequest(esEntity);
final IndexResponse response = builder.execute().actionGet();
esEntity.asDocMeta().id(response.getId());
return response.isCreated() ? 1 : 0;
}
@Override
protected int delegateUpdate(Entity entity, UpdateOption<? extends ConditionBean> option) {
AbstractEntity esEntity = (AbstractEntity) entity;
IndexRequestBuilder builder =
client.prepareIndex(asIndexEsName(), asTableDbName(), esEntity.asDocMeta().id()).setSource(esEntity.toSource());
RequestOptionCall<IndexRequestBuilder> indexOption = esEntity.asDocMeta().indexOption();
protected IndexRequestBuilder createInsertRequest(final AbstractEntity esEntity) {
final IndexRequestBuilder builder = client.prepareIndex(asEsIndex(), asEsIndexType()).setSource(esEntity.toSource());
final RequestOptionCall<IndexRequestBuilder> indexOption = esEntity.asDocMeta().indexOption();
if (indexOption != null) {
indexOption.callback(builder);
}
Long version = esEntity.asDocMeta().version();
if (version != null && version.longValue() != -1) {
builder.setVersion(version);
}
IndexResponse response = builder.execute().actionGet();
return 1;
return builder;
}
@Override
protected int delegateDelete(Entity entity, DeleteOption<? extends ConditionBean> option) {
AbstractEntity esEntity = (AbstractEntity) entity;
DeleteRequestBuilder builder = client.prepareDelete(asIndexEsName(), asTableDbName(), esEntity.asDocMeta().id());
RequestOptionCall<DeleteRequestBuilder> deleteOption = esEntity.asDocMeta().deleteOption();
if (deleteOption != null) {
deleteOption.callback(builder);
protected int delegateUpdate(final Entity entity, final UpdateOption<? extends ConditionBean> option) {
final AbstractEntity esEntity = (AbstractEntity) entity;
final IndexRequestBuilder builder = createUpdateRequest(esEntity);
final IndexResponse response = builder.execute().actionGet();
long version = response.getVersion();
if (version != -1) {
esEntity.asDocMeta().version(version);
}
DeleteResponse response = builder.execute().actionGet();
return 1;
}
protected IndexRequestBuilder createUpdateRequest(final AbstractEntity esEntity) {
final IndexRequestBuilder builder =
client.prepareIndex(asEsIndex(), asEsIndexType(), esEntity.asDocMeta().id()).setSource(esEntity.toSource());
final RequestOptionCall<IndexRequestBuilder> indexOption = esEntity.asDocMeta().indexOption();
if (indexOption != null) {
indexOption.callback(builder);
}
final Long version = esEntity.asDocMeta().version();
if (version != null && version.longValue() != -1) {
builder.setVersion(version);
}
return builder;
}
@Override
protected int delegateDelete(final Entity entity, final DeleteOption<? extends ConditionBean> option) {
final AbstractEntity esEntity = (AbstractEntity) entity;
final DeleteRequestBuilder builder = createDeleteRequest(esEntity);
final DeleteResponse response = builder.execute().actionGet();
return response.isFound() ? 1 : 0;
}
protected static String toString(Object value) {
protected DeleteRequestBuilder createDeleteRequest(final AbstractEntity esEntity) {
final DeleteRequestBuilder builder = client.prepareDelete(asEsIndex(), asEsIndexType(), esEntity.asDocMeta().id());
final RequestOptionCall<DeleteRequestBuilder> deleteOption = esEntity.asDocMeta().deleteOption();
if (deleteOption != null) {
deleteOption.callback(builder);
}
return builder;
}
@Override
protected int delegateQueryDelete(final ConditionBean cb, final DeleteOption<? extends ConditionBean> option) {
final SearchRequestBuilder builder = client.prepareSearch(asEsIndex()).setTypes(asEsIndexType()).setSearchType(SearchType.SCAN)
.setScroll(scrollForDelete).setSize(sizeForDelete);
((AbstractConditionBean) cb).request().build(builder);
final SearchResponse response = ((AbstractConditionBean) cb).build(builder).execute().actionGet();
int count = 0;
String scrollId = response.getScrollId();
while (scrollId != null) {
final SearchResponse scrollResponse = client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute().actionGet();
scrollId = scrollResponse.getScrollId();
final SearchHits searchHits = scrollResponse.getHits();
final SearchHit[] hits = searchHits.getHits();
if (hits.length == 0) {
scrollId = null;
break;
}
final BulkRequestBuilder bulkRequest = client.prepareBulk();
for (final SearchHit hit : hits) {
bulkRequest.add(client.prepareDelete(asEsIndex(), asEsIndexType(), hit.getId()));
}
count += hits.length;
final BulkResponse bulkResponse = bulkRequest.execute().actionGet();
if (bulkResponse.hasFailures()) {
throw new IllegalBehaviorStateException(bulkResponse.buildFailureMessage());
}
}
return count;
}
protected int[] delegateBatchInsert(final List<? extends Entity> entityList, final InsertOption<? extends ConditionBean> option) {
if (entityList.isEmpty()) {
return new int[] {};
}
return delegateBatchRequest(entityList, esEntity -> {
return createInsertRequest(esEntity);
});
}
protected int[] delegateBatchUpdate(List<? extends Entity> entityList, UpdateOption<? extends ConditionBean> option) {
if (entityList.isEmpty()) {
return new int[] {};
}
return delegateBatchRequest(entityList, esEntity -> {
return createUpdateRequest(esEntity);
});
}
protected int[] delegateBatchDelete(List<? extends Entity> entityList, DeleteOption<? extends ConditionBean> option) {
if (entityList.isEmpty()) {
return new int[] {};
}
return delegateBatchRequest(entityList, esEntity -> {
return createDeleteRequest(esEntity);
});
}
protected <BUILDER> int[] delegateBatchRequest(final List<? extends Entity> entityList, Function<AbstractEntity, BUILDER> call) {
final BulkList<? extends Entity> bulkList = (BulkList<? extends Entity>) entityList;
final BulkRequestBuilder bulkBuilder = client.prepareBulk();
for (final Entity entity : entityList) {
final AbstractEntity esEntity = (AbstractEntity) entity;
BUILDER builder = call.apply(esEntity);
if (builder instanceof IndexRequestBuilder) {
bulkBuilder.add((IndexRequestBuilder) builder);
} else if (builder instanceof UpdateRequestBuilder) {
bulkBuilder.add((UpdateRequestBuilder) builder);
} else if (builder instanceof DeleteRequestBuilder) {
bulkBuilder.add((DeleteRequestBuilder) builder);
}
}
RequestOptionCall<BulkRequestBuilder> builderCall = bulkList.getCall();
if (builderCall != null) {
builderCall.callback(bulkBuilder);
}
BulkResponse response = bulkBuilder.execute().actionGet();
List<Integer> resultList = new ArrayList<>();
for (BulkItemResponse itemResponse : response.getItems()) {
resultList.add(itemResponse.isFailed() ? 0 : 1);
}
int[] results = new int[resultList.size()];
for (int i = 0; i < resultList.size(); i++) {
results[i] = resultList.get(i);
}
return results;
}
protected static String toString(final Object value) {
if (value != null) {
return value.toString();
} else {
@ -142,7 +354,7 @@ public abstract class AbstractBehavior<ENTITY extends Entity, CB extends Conditi
}
}
protected static Short toShort(Object value) {
protected static Short toShort(final Object value) {
if (value instanceof Number) {
return ((Number) value).shortValue();
} else if (value instanceof String) {
@ -152,7 +364,7 @@ public abstract class AbstractBehavior<ENTITY extends Entity, CB extends Conditi
}
}
protected static Integer toInteger(Object value) {
protected static Integer toInteger(final Object value) {
if (value instanceof Number) {
return ((Number) value).intValue();
} else if (value instanceof String) {
@ -162,7 +374,7 @@ public abstract class AbstractBehavior<ENTITY extends Entity, CB extends Conditi
}
}
protected static Long toLong(Object value) {
protected static Long toLong(final Object value) {
if (value instanceof Number) {
return ((Number) value).longValue();
} else if (value instanceof String) {
@ -172,7 +384,7 @@ public abstract class AbstractBehavior<ENTITY extends Entity, CB extends Conditi
}
}
protected static Float toFloat(Object value) {
protected static Float toFloat(final Object value) {
if (value instanceof Number) {
return ((Number) value).floatValue();
} else if (value instanceof String) {
@ -182,7 +394,7 @@ public abstract class AbstractBehavior<ENTITY extends Entity, CB extends Conditi
}
}
protected static Double toDouble(Object value) {
protected static Double toDouble(final Object value) {
if (value instanceof Number) {
return ((Number) value).doubleValue();
} else if (value instanceof String) {
@ -192,7 +404,7 @@ public abstract class AbstractBehavior<ENTITY extends Entity, CB extends Conditi
}
}
protected static Boolean toBoolean(Object value) {
protected static Boolean toBoolean(final Object value) {
if (value instanceof Boolean) {
return ((Boolean) value).booleanValue();
} else if (value instanceof String) {
@ -201,5 +413,121 @@ public abstract class AbstractBehavior<ENTITY extends Entity, CB extends Conditi
return null;
}
}
public static class BulkList<E> implements List<E> {
private final List<E> parent;
private final RequestOptionCall<BulkRequestBuilder> call;
public BulkList(final List<E> parent, final RequestOptionCall<BulkRequestBuilder> call) {
this.parent = parent;
this.call = call;
}
public int size() {
return parent.size();
}
public boolean isEmpty() {
return parent.isEmpty();
}
public boolean contains(final Object o) {
return parent.contains(o);
}
public Iterator<E> iterator() {
return parent.iterator();
}
public Object[] toArray() {
return parent.toArray();
}
public <T> T[] toArray(final T[] a) {
return parent.toArray(a);
}
public boolean add(final E e) {
return parent.add(e);
}
public boolean remove(final Object o) {
return parent.remove(o);
}
public boolean containsAll(final Collection<?> c) {
return parent.containsAll(c);
}
public boolean addAll(final Collection<? extends E> c) {
return parent.addAll(c);
}
public boolean addAll(final int index, final Collection<? extends E> c) {
return parent.addAll(index, c);
}
public boolean removeAll(final Collection<?> c) {
return parent.removeAll(c);
}
public boolean retainAll(final Collection<?> c) {
return parent.retainAll(c);
}
public void clear() {
parent.clear();
}
public boolean equals(final Object o) {
return parent.equals(o);
}
public int hashCode() {
return parent.hashCode();
}
public E get(final int index) {
return parent.get(index);
}
public E set(final int index, final E element) {
return parent.set(index, element);
}
public void add(final int index, final E element) {
parent.add(index, element);
}
public E remove(final int index) {
return parent.remove(index);
}
public int indexOf(final Object o) {
return parent.indexOf(o);
}
public int lastIndexOf(final Object o) {
return parent.lastIndexOf(o);
}
public ListIterator<E> listIterator() {
return parent.listIterator();
}
public ListIterator<E> listIterator(final int index) {
return parent.listIterator(index);
}
public List<E> subList(final int fromIndex, final int toIndex) {
return parent.subList(fromIndex, toIndex);
}
public RequestOptionCall<BulkRequestBuilder> getCall() {
return call;
}
}
}

View file

@ -1,5 +1,6 @@
package ${request.package}.bsbhv;
import java.util.List;
import java.util.Map;
import ${request.package}.bsentity.AbstractEntity;
@ -9,11 +10,13 @@ import ${request.package}.cbean.${table.camelizedName}CB;
import ${request.package}.exentity.${table.camelizedName};
import org.dbflute.Entity;
import org.dbflute.bhv.readable.CBCall;
import org.dbflute.bhv.readable.EntityRowHandler;
import org.dbflute.cbean.ConditionBean;
import org.dbflute.cbean.result.ListResultBean;
import org.dbflute.cbean.result.PagingResultBean;
import org.dbflute.exception.IllegalBehaviorStateException;
import org.dbflute.optional.OptionalEntity;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.delete.DeleteRequestBuilder;
import org.elasticsearch.action.index.IndexRequestBuilder;
@ -24,12 +27,22 @@ public abstract class Bs${table.camelizedName}Bhv extends AbstractBehavior<${tab
@Override
public String asTableDbName() {
return asEsIndexType();
}
@Override
protected String asEsIndex() {
return "${table.indexSettings.index}";
}
@Override
public String asEsIndexType() {
return "${table.name}";
}
@Override
protected String asIndexEsName() {
return "${table.indexSettings.index}";
public String asEsSearchType() {
return "${table.name}";
}
@Override
@ -130,6 +143,14 @@ public abstract class Bs${table.camelizedName}Bhv extends AbstractBehavior<${tab
return (PagingResultBean<${table.camelizedName}>) facadeSelectList(createCB(cbLambda));
}
public void selectCursor(CBCall<${table.camelizedName}CB> cbLambda, EntityRowHandler<${table.camelizedName}> entityLambda) {
facadeSelectCursor(createCB(cbLambda), entityLambda);
}
public void selectBulk(CBCall<${table.camelizedName}CB> cbLambda, EntityRowHandler<List<${table.camelizedName}>> entityLambda) {
delegateSelectBulk(createCB(cbLambda), entityLambda,typeOfSelectedEntity());
}
public void insert(${table.camelizedName} entity) {
doInsert(entity, null);
}
@ -174,6 +195,34 @@ public abstract class Bs${table.camelizedName}Bhv extends AbstractBehavior<${tab
doDelete(entity, null);
}
public int queryDelete(CBCall<${table.camelizedName}CB> cbLambda) {
return doQueryDelete(createCB(cbLambda), null);
}
public int[] batchInsert(List<${table.camelizedName}> list) {
return batchInsert(list, null);
}
public int[] batchInsert(List<${table.camelizedName}> list, RequestOptionCall<BulkRequestBuilder> call) {
return doBatchInsert(new BulkList<>(list, call), null);
}
public int[] batchUpdate(List<${table.camelizedName}> list) {
return batchUpdate(list, null);
}
public int[] batchUpdate(List<${table.camelizedName}> list, RequestOptionCall<BulkRequestBuilder> call) {
return doBatchUpdate(new BulkList<>(list, call), null);
}
public int[] batchDelete(List<${table.camelizedName}> list) {
return batchDelete(list, null);
}
public int[] batchDelete(List<${table.camelizedName}> list, RequestOptionCall<BulkRequestBuilder> call) {
return doBatchDelete(new BulkList<>(list, call), null);
}
// TODO create, modify, remove
}

View file

@ -111,6 +111,25 @@ public abstract class Bs${table.camelizedName}CF extends AbstractConditionFilter
#if ($column.isNormalColumn)
#set ($javaNative = ${column.type})
public void set${column.capCamelName}_NotEqual($javaNative ${column.uncapCamelName}) {
set${column.capCamelName}_NotEqual(${column.uncapCamelName}, null, null);
}
public void set${column.capCamelName}_NotEqual($javaNative ${column.uncapCamelName}, ConditionOptionCall<NotFilterBuilder> notOpLambda,
ConditionOptionCall<TermFilterBuilder> eqOpLambda) {
not(subCf -> {
subCf.set${column.capCamelName}_Equal(${column.uncapCamelName}, eqOpLambda);
} , notOpLambda);
}
public void set${column.capCamelName}_Equal($javaNative ${column.uncapCamelName}) {
set${column.capCamelName}_Term(${column.uncapCamelName}, null);
}
public void set${column.capCamelName}_Equal($javaNative ${column.uncapCamelName}, ConditionOptionCall<TermFilterBuilder> opLambda) {
set${column.capCamelName}_Term(${column.uncapCamelName}, opLambda);
}
public void set${column.capCamelName}_Term($javaNative ${column.uncapCamelName}) {
set${column.capCamelName}_Term(${column.uncapCamelName}, null);
}

View file

@ -66,6 +66,14 @@ public abstract class Bs${table.camelizedName}CQ extends AbstractConditionQuery
#foreach ($column in $table.columnList)
#if ($column.isNormalColumn)
#set ($javaNative = ${column.type})
public void set${column.capCamelName}_Equal($javaNative ${column.uncapCamelName}) {
set${column.capCamelName}_Term(${column.uncapCamelName}, null);
}
public void set${column.capCamelName}_Equal($javaNative ${column.uncapCamelName}, ConditionOptionCall<TermQueryBuilder> opLambda) {
set${column.capCamelName}_Term(${column.uncapCamelName}, opLambda);
}
public void set${column.capCamelName}_Term($javaNative ${column.uncapCamelName}) {
set${column.capCamelName}_Term(${column.uncapCamelName}, null);
}

View file

@ -1,5 +1,9 @@
package ${request.package}.bsentity;
#if ($table.get("_id") && $table.get("_id").get("path"))
#set ($idColumn = $table.get("_id").get("path"))
#end
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
@ -35,9 +39,11 @@ public class Bs${table.camelizedName} extends AbstractEntity {
#elseif ($column.isRefColumn)
#set ($javaNative = ${column.camelizedName})
#end
#if ($column.name != $idColumn)
/** ${column.name} */
protected ${javaNative} ${column.uncapCamelName};
#end
#end
// [Referrers] *comment only
#foreach ($referrer in $table.referrerList)
@ -53,14 +59,36 @@ public class Bs${table.camelizedName} extends AbstractEntity {
#elseif ($column.isRefColumn)
#set ($javaNative = ${column.camelizedName})
#end
public ${javaNative} get${column.capCamelName}() {
#if ($column.name != $idColumn)
#if ($javaNative == "boolean")
public ${javaNative} is${column.capCamelName}() {
checkSpecifiedProperty("${column.uncapCamelName}");
return ${column.uncapCamelName};
}
#else
public ${javaNative} get${column.capCamelName}() {
checkSpecifiedProperty("${column.uncapCamelName}");
return ${column.uncapCamelName};
}
#end
public void set${column.capCamelName}(${javaNative} value) {
registerModifiedProperty("${column.uncapCamelName}");
this.${column.uncapCamelName} = value;
}
#else
public ${javaNative} get${column.capCamelName}() {
checkSpecifiedProperty("${column.uncapCamelName}");
return asDocMeta().id();
}
public void set${column.capCamelName}(${javaNative} value) {
${column.uncapCamelName} = value;
registerModifiedProperty("${column.uncapCamelName}");
asDocMeta().id(value);
}
#end
#end
@Override
@ -68,9 +96,15 @@ public class Bs${table.camelizedName} extends AbstractEntity {
Map<String, Object> sourceMap = new HashMap<>();
#foreach ($column in $table.columnList)
#if ($column.isNormalColumn)
#if ($column.name != $idColumn)
if (${column.uncapCamelName} != null) {
sourceMap.put("${column.name}", ${column.uncapCamelName});
}
#else
if (asDocMeta().id() != null) {
sourceMap.put("${column.name}", asDocMeta().id());
}
#end
#end
#end
return sourceMap;