use of io.vertigo.dynamo.domain.model.URI in project vertigo by KleeGroup.
the class DtObjectUtil method createEntityURI.
/**
* Creates an URI of entity from an existing fragment.
* @param fragment fragment
* @return related entity URI
*/
public static <E extends Entity, F extends Fragment<E>> URI<E> createEntityURI(final F fragment) {
Assertion.checkNotNull(fragment);
// -----
final DtDefinition dtDefinition = findDtDefinition(fragment);
final DtDefinition entityDtDefinition = dtDefinition.getFragment().get();
final DtField idField = entityDtDefinition.getIdField().get();
final Object idValue = idField.getDataAccessor().getValue(fragment);
return new URI<>(entityDtDefinition, idValue);
}
use of io.vertigo.dynamo.domain.model.URI in project vertigo by KleeGroup.
the class AbstractStoreManagerTest method testGetFamilleLocationCars.
/**
* Test que les listes NN ne reste pas en cache après une mise à jour.
* Ici l'entité en cache est la destination de la navigation : Car
*/
@Test
public void testGetFamilleLocationCars() {
try (VTransactionWritable transaction = transactionManager.createCurrentTransaction()) {
// on crée une famille
final Famille famille = new Famille();
famille.setLibelle("Ma famille");
final Famille createdFamille = storeManager.getDataStore().create(famille);
// on récupère la liste des voitures
final DtList<Car> cars = storeManager.getDataStore().findAll(allCarsUri);
Assert.assertNotNull(cars);
Assert.assertFalse("La liste des cars est vide", cars.isEmpty());
// on associe la liste de voiture à la famille en NN
final List<URI> carUriList = new ArrayList<>();
for (final Car car : cars) {
carUriList.add(new URI(dtDefinitionCar, car.getId()));
}
familleDAO.updateNN(createdFamille.getVoituresLocationDtListURI(), carUriList);
// On garde le résultat de l'association NN
final DtList<Car> firstResult = createdFamille.getVoituresLocationList();
Assert.assertEquals("Test tailles du nombre de voiture dans une NN", cars.size(), firstResult.size());
// On met à jour l'association en retirant le premier élément
carUriList.remove(0);
familleDAO.updateNN(createdFamille.getVoituresLocationDtListURI(), carUriList);
// on garde le résultat en lazy : il doit avoir le meme nombre de voiture qu'au début
final DtList<Car> lazyResult = createdFamille.getVoituresLocationList();
Assert.assertEquals("Test tailles du nombre de voiture pour une NN", firstResult.size(), lazyResult.size());
// on recharge la famille et on recharge la liste issus de l'association NN : il doit avoir une voiture de moins qu'au début
final DtDefinition dtFamille = DtObjectUtil.findDtDefinition(Famille.class);
final Famille famille2 = storeManager.getDataStore().readOne(new URI<Famille>(dtFamille, createdFamille.getFamId()));
final DtList<Car> secondResult = famille2.getVoituresLocationList();
Assert.assertEquals("Test tailles du nombre de voiture dans une NN", firstResult.size() - 1, secondResult.size());
transaction.commit();
}
}
use of io.vertigo.dynamo.domain.model.URI in project vertigo by KleeGroup.
the class ItemSearchLoader method loadNextURI.
/**
* {@inheritDoc}
*/
@Override
protected List<URI<Item>> loadNextURI(final Long lastId, final DtDefinition dtDefinition) {
final SearchIndexDefinition indexDefinition = searchManager.findFirstIndexDefinitionByKeyConcept(Item.class);
final List<URI<Item>> uris = new ArrayList<>(SEARCH_CHUNK_SIZE);
// call loader service
int i = 0;
for (final Item item : itemDataBase.getAllItems()) {
if (i > lastId) {
uris.add(new URI(indexDefinition.getKeyConceptDtDefinition(), item.getId()));
}
if (uris.size() >= SEARCH_CHUNK_SIZE) {
break;
}
i++;
}
return uris;
}
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).field("urn", index.getURI().urn());
/* 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);
}
Aggregations