Search in sources :

Example 11 with URI

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);
}
Also used : DtDefinition(io.vertigo.dynamo.domain.metamodel.DtDefinition) DtObject(io.vertigo.dynamo.domain.model.DtObject) URI(io.vertigo.dynamo.domain.model.URI) DtField(io.vertigo.dynamo.domain.metamodel.DtField)

Example 12 with URI

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();
    }
}
Also used : Famille(io.vertigo.dynamo.store.data.domain.famille.Famille) Car(io.vertigo.dynamo.store.data.domain.car.Car) ArrayList(java.util.ArrayList) DtDefinition(io.vertigo.dynamo.domain.metamodel.DtDefinition) VTransactionWritable(io.vertigo.commons.transaction.VTransactionWritable) URI(io.vertigo.dynamo.domain.model.URI) DtListURI(io.vertigo.dynamo.domain.model.DtListURI) Test(org.junit.Test)

Example 13 with URI

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;
}
Also used : SearchIndexDefinition(io.vertigo.dynamo.search.metamodel.SearchIndexDefinition) ArrayList(java.util.ArrayList) URI(io.vertigo.dynamo.domain.model.URI)

Example 14 with URI

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();
    }
}
Also used : DtObject(io.vertigo.dynamo.domain.model.DtObject) DtDefinition(io.vertigo.dynamo.domain.metamodel.DtDefinition) URI(io.vertigo.dynamo.domain.model.URI) DtObject(io.vertigo.dynamo.domain.model.DtObject) XContentBuilder(org.elasticsearch.common.xcontent.XContentBuilder) DtField(io.vertigo.dynamo.domain.metamodel.DtField)

Example 15 with URI

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);
}
Also used : URI(io.vertigo.dynamo.domain.model.URI) URI(io.vertigo.dynamo.domain.model.URI)

Aggregations

URI (io.vertigo.dynamo.domain.model.URI)38 DtDefinition (io.vertigo.dynamo.domain.metamodel.DtDefinition)21 DtField (io.vertigo.dynamo.domain.metamodel.DtField)11 Entity (io.vertigo.dynamo.domain.model.Entity)10 ArrayList (java.util.ArrayList)10 DtObject (io.vertigo.dynamo.domain.model.DtObject)9 SearchIndexDefinition (io.vertigo.dynamo.search.metamodel.SearchIndexDefinition)8 DtListURI (io.vertigo.dynamo.domain.model.DtListURI)7 VTransactionWritable (io.vertigo.commons.transaction.VTransactionWritable)6 DtList (io.vertigo.dynamo.domain.model.DtList)5 Account (io.vertigo.account.account.Account)4 AccountGroup (io.vertigo.account.account.AccountGroup)4 Home (io.vertigo.app.Home)4 AssociationNNDefinition (io.vertigo.dynamo.domain.metamodel.association.AssociationNNDefinition)4 FileInfoURI (io.vertigo.dynamo.domain.model.FileInfoURI)4 KeyConcept (io.vertigo.dynamo.domain.model.KeyConcept)4 VFile (io.vertigo.dynamo.file.model.VFile)4 SearchIndex (io.vertigo.dynamo.search.model.SearchIndex)4 TaskDefinition (io.vertigo.dynamo.task.metamodel.TaskDefinition)4 Task (io.vertigo.dynamo.task.model.Task)4