Search in sources :

Example 1 with DtListState

use of io.vertigo.dynamo.domain.model.DtListState in project vertigo by KleeGroup.

the class AbstractSearchManagerTest method testPaginatedQuery.

/**
 * Test de requétage de l'index avec tri.
 * La création s'effectue dans une seule transaction.
 */
@Test
public void testPaginatedQuery() {
    index(false);
    final SearchQuery searchQuery = SearchQuery.builder(ListFilter.of("*:*")).build();
    final DtList<Car> dtListFull = doQuery(searchQuery, null).getDtList();
    final DtList<Car> dtList1 = doQuery(searchQuery, new DtListState(4, 0, null, null)).getDtList();
    final DtList<Car> dtList2 = doQuery(searchQuery, new DtListState(4, 4, null, null)).getDtList();
    final DtList<Car> dtList3 = doQuery(searchQuery, new DtListState(4, 2 * 4, null, null)).getDtList();
    Assert.assertEquals(4, dtList1.size());
    Assert.assertEquals(4, dtList2.size());
    // 9 elements
    Assert.assertEquals(carDataBase.size() - 2 * 4, dtList3.size());
    Assert.assertEquals(dtListFull.get(0).getId(), dtList1.get(0).getId());
    Assert.assertEquals(dtListFull.get(3).getId(), dtList1.get(dtList1.size() - 1).getId());
    Assert.assertEquals(dtListFull.get(4).getId(), dtList2.get(0).getId());
    Assert.assertEquals(dtListFull.get(7).getId(), dtList2.get(dtList2.size() - 1).getId());
    Assert.assertEquals(dtListFull.get(8).getId(), dtList3.get(0).getId());
    Assert.assertEquals(dtListFull.get(dtListFull.size() - 1).getId(), dtList3.get(dtList3.size() - 1).getId());
}
Also used : SearchQuery(io.vertigo.dynamo.search.model.SearchQuery) Car(io.vertigo.dynamo.search_2_4.data.domain.Car) DtListState(io.vertigo.dynamo.domain.model.DtListState) Test(org.junit.Test)

Example 2 with DtListState

use of io.vertigo.dynamo.domain.model.DtListState in project vertigo by KleeGroup.

the class AbstractSearchManagerTest method testClusterByFacetRangeVerySmallMaxRows.

/**
 * Test le facettage par term d'une liste.
 */
@Test
public void testClusterByFacetRangeVerySmallMaxRows() {
    index(true);
    final SearchQuery searchQuery = SearchQuery.builder(ListFilter.of("*:*")).withFacetClustering(// "avant 2000", "2000-2005", "après 2005"
    yearFacetDefinition).build();
    final FacetedQueryResult<Car, SearchQuery> result = searchManager.loadList(carIndexDefinition, searchQuery, new DtListState(1, 0, null, null));
    // On vérifie qu'il existe une valeur pour chaque marques et que le nombre d'occurrences est correct
    final Map<String, List<Car>> databaseCluster = new HashMap<>();
    databaseCluster.put(YearCluster.before2000.getLabel(), new ArrayList<>());
    databaseCluster.put(YearCluster.between2000and2005.getLabel(), new ArrayList<>());
    databaseCluster.put(YearCluster.after2005.getLabel(), new ArrayList<>());
    for (final Car car : carDataBase.getAllCars()) {
        if (car.getYear() < 2000) {
            databaseCluster.get(YearCluster.before2000.getLabel()).add(car);
        } else if (car.getYear() < 2005) {
            databaseCluster.get(YearCluster.between2000and2005.getLabel()).add(car);
        } else {
            databaseCluster.get(YearCluster.after2005.getLabel()).add(car);
        }
    }
    Assert.assertEquals(databaseCluster.size(), result.getClusters().size());
    for (final Entry<FacetValue, DtList<Car>> entry : result.getClusters().entrySet()) {
        final String searchFacetLabel = entry.getKey().getLabel().getDisplay().toLowerCase(Locale.FRENCH);
        final int searchFacetCount = entry.getValue().size();
        // result == listState.top (=1)
        Assert.assertEquals(1, searchFacetCount);
        for (final Car car : entry.getValue()) {
            if (car.getYear() < 2000) {
                Assert.assertEquals(searchFacetLabel, YearCluster.before2000.getLabel());
            } else if (car.getYear() < 2005) {
                Assert.assertEquals(searchFacetLabel, YearCluster.between2000and2005.getLabel());
            } else {
                Assert.assertEquals(searchFacetLabel, YearCluster.after2005.getLabel());
            }
        }
    }
}
Also used : SearchQuery(io.vertigo.dynamo.search.model.SearchQuery) HashMap(java.util.HashMap) FacetValue(io.vertigo.dynamo.collections.model.FacetValue) Car(io.vertigo.dynamo.search_2_4.data.domain.Car) DtListState(io.vertigo.dynamo.domain.model.DtListState) ArrayList(java.util.ArrayList) DtList(io.vertigo.dynamo.domain.model.DtList) List(java.util.List) DtList(io.vertigo.dynamo.domain.model.DtList) Test(org.junit.Test)

Example 3 with DtListState

use of io.vertigo.dynamo.domain.model.DtListState in project vertigo by KleeGroup.

the class AbstractSearchManagerTest method testSortedClusterByFacetTerm.

/**
 * Test le facettage par term d'une liste.
 */
@Test
public void testSortedClusterByFacetTerm() {
    index(true);
    final SearchQuery searchQuery = SearchQuery.builder(ListFilter.of("*:*")).withFacetClustering(makeFacetDefinition).build();
    final DtListState listState = new DtListState(null, 0, carIndexDefinition.getIndexDtDefinition().getField("YEAR").getName(), true);
    final FacetedQueryResult<Car, SearchQuery> result = searchManager.loadList(carIndexDefinition, searchQuery, listState);
    // On vérifie qu'il existe une valeur pour chaque marques et que la première est bien la plus ancienne
    final Map<String, Set<Car>> databaseCluster = new HashMap<>();
    for (final Car car : carDataBase.getAllCars()) {
        databaseCluster.computeIfAbsent(car.getMake().toLowerCase(Locale.FRENCH), k -> new TreeSet<>((e1, e2) -> e2.getYear().compareTo(e1.getYear()))).add(car);
    }
    Assert.assertEquals(databaseCluster.size(), result.getClusters().size());
    for (final Entry<FacetValue, DtList<Car>> entry : result.getClusters().entrySet()) {
        final String searchFacetLabel = entry.getKey().getLabel().getDisplay().toLowerCase(Locale.FRENCH);
        final Car firstClusterCar = entry.getValue().get(0);
        final Set<Car> carsByMake = databaseCluster.get(searchFacetLabel);
        Assert.assertEquals(carsByMake.iterator().next().getId(), firstClusterCar.getId());
        for (final Car car : entry.getValue()) {
            Assert.assertEquals(searchFacetLabel, car.getMake().toLowerCase(Locale.FRENCH));
        }
    }
}
Also used : SearchQuery(io.vertigo.dynamo.search.model.SearchQuery) ListFilter(io.vertigo.dynamo.collections.ListFilter) URLDecoder(java.net.URLDecoder) BeforeClass(org.junit.BeforeClass) URL(java.net.URL) URI(io.vertigo.dynamo.domain.model.URI) DtObjectUtil(io.vertigo.dynamo.domain.util.DtObjectUtil) TimeoutException(java.util.concurrent.TimeoutException) HashMap(java.util.HashMap) Facet(io.vertigo.dynamo.collections.model.Facet) SearchIndexDefinition(io.vertigo.dynamo.search.metamodel.SearchIndexDefinition) TreeSet(java.util.TreeSet) Car(io.vertigo.dynamo.search_2_4.data.domain.Car) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) FacetDefinition(io.vertigo.dynamo.collections.metamodel.FacetDefinition) Future(java.util.concurrent.Future) Locale(java.util.Locale) Map(java.util.Map) SearchQuery(io.vertigo.dynamo.search.model.SearchQuery) FacetedQueryResult(io.vertigo.dynamo.collections.model.FacetedQueryResult) CarDataBase(io.vertigo.dynamo.search_2_4.data.domain.CarDataBase) Set(java.util.Set) AbstractTestCaseJU4(io.vertigo.AbstractTestCaseJU4) Test(org.junit.Test) DefinitionSpace(io.vertigo.core.definition.DefinitionSpace) FacetedQueryDefinition(io.vertigo.dynamo.collections.metamodel.FacetedQueryDefinition) DtList(io.vertigo.dynamo.domain.model.DtList) SearchIndex(io.vertigo.dynamo.search.model.SearchIndex) CarSearchLoader(io.vertigo.dynamo.search_2_4.data.domain.CarSearchLoader) File(java.io.File) DtListState(io.vertigo.dynamo.domain.model.DtListState) SelectedFacetValues(io.vertigo.dynamo.collections.model.SelectedFacetValues) ExecutionException(java.util.concurrent.ExecutionException) TimeUnit(java.util.concurrent.TimeUnit) VUserException(io.vertigo.lang.VUserException) List(java.util.List) FacetedQuery(io.vertigo.dynamo.collections.model.FacetedQuery) Logger(org.apache.logging.log4j.Logger) SearchManager(io.vertigo.dynamo.search.SearchManager) Entry(java.util.Map.Entry) Assert(org.junit.Assert) LogManager(org.apache.logging.log4j.LogManager) FacetValue(io.vertigo.dynamo.collections.model.FacetValue) TreeSet(java.util.TreeSet) Set(java.util.Set) HashMap(java.util.HashMap) FacetValue(io.vertigo.dynamo.collections.model.FacetValue) Car(io.vertigo.dynamo.search_2_4.data.domain.Car) TreeSet(java.util.TreeSet) DtListState(io.vertigo.dynamo.domain.model.DtListState) DtList(io.vertigo.dynamo.domain.model.DtList) Test(org.junit.Test)

Example 4 with DtListState

use of io.vertigo.dynamo.domain.model.DtListState in project vertigo by KleeGroup.

the class AbstractESSearchServicesPlugin method loadList.

/**
 * {@inheritDoc}
 */
@Override
public final <R extends DtObject> FacetedQueryResult<R, SearchQuery> loadList(final SearchIndexDefinition indexDefinition, final SearchQuery searchQuery, final DtListState listState) {
    Assertion.checkNotNull(searchQuery);
    // -----
    final ESStatement<KeyConcept, R> statement = createElasticStatement(indexDefinition);
    final DtListState usedListState = listState != null ? listState : defaultListState;
    return statement.loadList(indexDefinition, searchQuery, usedListState, defaultMaxRows);
}
Also used : KeyConcept(io.vertigo.dynamo.domain.model.KeyConcept) DtListState(io.vertigo.dynamo.domain.model.DtListState)

Example 5 with DtListState

use of io.vertigo.dynamo.domain.model.DtListState in project vertigo by KleeGroup.

the class PaginatorAndSortWebServiceHandlerPlugin method handle.

/**
 * {@inheritDoc}
 */
@Override
public Object handle(final Request request, final Response response, final WebServiceCallContext routeContext, final HandlerChain chain) throws SessionException {
    final WebServiceDefinition webServiceDefinition = routeContext.getWebServiceDefinition();
    // Criteria in body
    // DtListState in query //see at WebServiceDefinitionBuilder withAutoSortAndPagination it defined where DtListState was
    // serverToken in DtListState
    final WebServiceParam uiListWebServiceParams = lookupWebServiceParam(webServiceDefinition, DtListState.class);
    final WebServiceParam serverTokenWebServiceParams = lookupWebServiceParam(webServiceDefinition, LIST_SERVER_TOKEN);
    final DtListState parsedDtListState = (DtListState) routeContext.getParamValue(uiListWebServiceParams);
    final DtListState dtListState = checkAndEnsureDefaultValue(parsedDtListState);
    final Optional<String> listServerToken = (Optional<String>) routeContext.getParamValue(serverTokenWebServiceParams);
    Optional<DtList<?>> fullListOption = Optional.empty();
    if (listServerToken.isPresent()) {
        fullListOption = tokenManager.get(listServerToken.get());
        response.header(LIST_SERVER_TOKEN, listServerToken.get());
    }
    final DtList<?> fullList;
    if (fullListOption.isPresent()) {
        fullList = fullListOption.get();
    } else {
        final Object result = chain.handle(request, response, routeContext);
        Assertion.checkArgument(result instanceof DtList, "sort and pagination only supports DtList");
        fullList = (DtList<?>) result;
        final String fullListServerToken = tokenManager.put(fullList);
        response.header(LIST_SERVER_TOKEN, fullListServerToken);
    }
    // TODO total count should be list meta
    response.header("x-total-count", String.valueOf(fullList.size()));
    final DtList<?> filteredList = applySortAndPagination(fullList, dtListState);
    filteredList.setMetaData(DtList.TOTAL_COUNT_META, fullList.size());
    return filteredList;
}
Also used : WebServiceDefinition(io.vertigo.vega.webservice.metamodel.WebServiceDefinition) WebServiceParam(io.vertigo.vega.webservice.metamodel.WebServiceParam) Optional(java.util.Optional) DtListState(io.vertigo.dynamo.domain.model.DtListState) DtObject(io.vertigo.dynamo.domain.model.DtObject) DtList(io.vertigo.dynamo.domain.model.DtList)

Aggregations

DtListState (io.vertigo.dynamo.domain.model.DtListState)14 SearchQuery (io.vertigo.dynamo.search.model.SearchQuery)8 Test (org.junit.Test)7 DtList (io.vertigo.dynamo.domain.model.DtList)5 Item (io.vertigo.dynamo.search.data.domain.Item)5 FacetValue (io.vertigo.dynamo.collections.model.FacetValue)4 Car (io.vertigo.dynamo.search_2_4.data.domain.Car)4 ArrayList (java.util.ArrayList)4 HashMap (java.util.HashMap)4 List (java.util.List)4 AbstractTestCaseJU4 (io.vertigo.AbstractTestCaseJU4)2 DefinitionSpace (io.vertigo.core.definition.DefinitionSpace)2 ListFilter (io.vertigo.dynamo.collections.ListFilter)2 FacetDefinition (io.vertigo.dynamo.collections.metamodel.FacetDefinition)2 FacetedQueryDefinition (io.vertigo.dynamo.collections.metamodel.FacetedQueryDefinition)2 Facet (io.vertigo.dynamo.collections.model.Facet)2 FacetedQuery (io.vertigo.dynamo.collections.model.FacetedQuery)2 FacetedQueryResult (io.vertigo.dynamo.collections.model.FacetedQueryResult)2 SelectedFacetValues (io.vertigo.dynamo.collections.model.SelectedFacetValues)2 URI (io.vertigo.dynamo.domain.model.URI)2