fix #285
This commit is contained in:
parent
1f29e8cd77
commit
81926a5041
7 changed files with 519 additions and 53 deletions
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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 >>>
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue