use of io.vertigo.dynamo.domain.model.URI in project vertigo by KleeGroup.
the class ESDocumentCodec method index2XContentBuilder.
/**
* Transformation d'un index en un document ElasticSearch.
* @param <S> Type du sujet représenté par ce document
* @param <I> Type d'object indexé
* @param index Objet logique de recherche
* @return Document SOLR
* @throws IOException Json exception
*/
<S extends KeyConcept, I extends DtObject> XContentBuilder index2XContentBuilder(final SearchIndex<S, I> index) throws IOException {
Assertion.checkNotNull(index);
// -----
final DtDefinition dtDefinition = index.getDefinition().getIndexDtDefinition();
// on ne copie pas les champs not stored dans le domain
final List<DtField> notStoredFields = getNotStoredFields(dtDefinition);
// on ne copie pas les champs (copyTo)
notStoredFields.addAll(index.getDefinition().getIndexCopyToFields());
final I dtResult;
if (notStoredFields.isEmpty()) {
dtResult = index.getIndexDtObject();
} else {
dtResult = cloneDto(dtDefinition, index.getIndexDtObject(), notStoredFields);
}
/* 2: Result stocké */
final String result = encode(dtResult);
/* 1 : URI */
try (final XContentBuilder xContentBuilder = XContentFactory.jsonBuilder()) {
xContentBuilder.startObject().field(FULL_RESULT, result);
/* 3 : Les champs du dto index */
final DtObject dtIndex = index.getIndexDtObject();
final DtDefinition indexDtDefinition = DtObjectUtil.findDtDefinition(dtIndex);
final Set<DtField> copyToFields = index.getDefinition().getIndexCopyToFields();
for (final DtField dtField : indexDtDefinition.getFields()) {
if (!copyToFields.contains(dtField)) {
// On index pas les copyFields
final Object value = dtField.getDataAccessor().getValue(dtIndex);
if (value != null) {
// les valeurs null ne sont pas indexées => conséquence : on ne peut pas les rechercher
final String indexFieldName = dtField.getName();
if (value instanceof String) {
final String encodedValue = escapeInvalidUTF8Char((String) value);
xContentBuilder.field(indexFieldName, encodedValue);
} else {
xContentBuilder.field(indexFieldName, value);
}
}
}
}
return xContentBuilder.endObject();
}
}
use of io.vertigo.dynamo.domain.model.URI in project vertigo by KleeGroup.
the class ESDocumentCodec method searchHit2Index.
/**
* Transformation d'un resultat ElasticSearch en un index.
* Les highlights sont ajoutés avant ou après (non determinable).
* @param <S> Type du sujet représenté par ce document
* @param <I> Type d'object indexé
* @param indexDefinition Definition de l'index
* @param searchHit Resultat ElasticSearch
* @return Objet logique de recherche
*/
<S extends KeyConcept, I extends DtObject> SearchIndex<S, I> searchHit2Index(final SearchIndexDefinition indexDefinition, final SearchHit searchHit) {
/* On lit du document les données persistantes. */
/* 1. URI */
final String urn = searchHit.getId();
final URI uri = io.vertigo.dynamo.domain.model.URI.fromURN(urn);
/* 2 : Result stocké */
final I resultDtObjectdtObject;
if (searchHit.field(FULL_RESULT) == null) {
resultDtObjectdtObject = decode((String) searchHit.getSource().get(FULL_RESULT));
} else {
resultDtObjectdtObject = decode(searchHit.field(FULL_RESULT).getValue());
}
// -----
return SearchIndex.createIndex(indexDefinition, uri, resultDtObjectdtObject);
}
use of io.vertigo.dynamo.domain.model.URI in project vertigo by KleeGroup.
the class CarSearchLoader method loadData.
/**
* {@inheritDoc}
*/
@Override
public List<SearchIndex<Car, Car>> loadData(final SearchChunk<Car> searchChunk) {
final SearchIndexDefinition indexDefinition = searchManager.findFirstIndexDefinitionByKeyConcept(Car.class);
try (final VTransactionWritable tx = getTransactionManager().createCurrentTransaction()) {
final List<SearchIndex<Car, Car>> result = new ArrayList<>();
final DtDefinition dtDefinition = DtObjectUtil.findDtDefinition(Car.class);
for (final Car car : loadCarList(searchChunk)) {
final URI<Car> uri = new URI<>(dtDefinition, car.getId());
result.add(SearchIndex.createIndex(indexDefinition, uri, car));
}
return result;
}
}
use of io.vertigo.dynamo.domain.model.URI in project vertigo by KleeGroup.
the class ItemSearchLoader method getTaskDefinition.
private TaskDefinition getTaskDefinition(final SearchChunk<Item> searchChunk) {
final Domain doItems = definitionSpace.resolve("DO_DT_ITEM_DTC", Domain.class);
final String sql = searchChunk.getAllURIs().stream().map(uri -> uri.getId().toString()).collect(Collectors.joining(", ", "select * from ITEM where ID in (", ")"));
return TaskDefinition.builder("TK_LOAD_ALL_ITEMS").withEngine(TaskEngineSelect.class).withRequest(sql).withPackageName(TaskEngineSelect.class.getPackage().getName()).withOutRequired("dtc", doItems).build();
}
use of io.vertigo.dynamo.domain.model.URI in project vertigo by KleeGroup.
the class ItemSearchLoader method loadData.
/**
* {@inheritDoc}
*/
@Override
public List<SearchIndex<Item, Item>> loadData(final SearchChunk<Item> searchChunk) {
final SearchIndexDefinition indexDefinition = searchManager.findFirstIndexDefinitionByKeyConcept(Item.class);
try (final VTransactionWritable tx = getTransactionManager().createCurrentTransaction()) {
final List<SearchIndex<Item, Item>> result = new ArrayList<>();
final DtDefinition dtDefinition = DtObjectUtil.findDtDefinition(Item.class);
for (final Item item : loadItems(searchChunk)) {
final URI<Item> uri = new URI<>(dtDefinition, item.getId());
result.add(SearchIndex.createIndex(indexDefinition, uri, item));
}
return result;
}
}
Aggregations