Search in sources :

Example 6 with Query

use of org.kie.kogito.persistence.api.query.Query in project kogito-apps by kiegroup.

the class TrustyServiceTest method givenStoredCounterfactualRequestsWhenGetCounterfactualRequestsThenRequestsAreReturned.

@Test
@SuppressWarnings({ "unchecked", "rawtypes" })
void givenStoredCounterfactualRequestsWhenGetCounterfactualRequestsThenRequestsAreReturned() {
    Storage<String, CounterfactualExplainabilityRequest> counterfactualStorage = mock(Storage.class);
    CounterfactualExplainabilityRequest request1 = mock(CounterfactualExplainabilityRequest.class);
    CounterfactualExplainabilityRequest request2 = mock(CounterfactualExplainabilityRequest.class);
    Query queryMock = mock(Query.class);
    when(queryMock.filter(any(List.class))).thenReturn(queryMock);
    when(queryMock.execute()).thenReturn(List.of(request1, request2));
    when(counterfactualStorage.query()).thenReturn(queryMock);
    when(trustyStorageServiceMock.getCounterfactualRequestStorage()).thenReturn(counterfactualStorage);
    assertTrue(trustyService.getCounterfactualRequests(TEST_EXECUTION_ID).containsAll(List.of(request1, request2)));
}
Also used : CounterfactualExplainabilityRequest(org.kie.kogito.explainability.api.CounterfactualExplainabilityRequest) Query(org.kie.kogito.persistence.api.query.Query) List(java.util.List) ArrayList(java.util.ArrayList) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) Test(org.junit.jupiter.api.Test)

Example 7 with Query

use of org.kie.kogito.persistence.api.query.Query in project kogito-apps by kiegroup.

the class TrustyServiceTest method givenMultipleStoredCounterfactualRequestsWhenGetCounterfactualRequestThenIllegalArgumentExceptionIsThrown.

@Test
@SuppressWarnings({ "unchecked", "rawtypes" })
void givenMultipleStoredCounterfactualRequestsWhenGetCounterfactualRequestThenIllegalArgumentExceptionIsThrown() {
    Storage<String, CounterfactualExplainabilityRequest> counterfactualStorage = mock(Storage.class);
    CounterfactualExplainabilityRequest request1 = mock(CounterfactualExplainabilityRequest.class);
    CounterfactualExplainabilityRequest request2 = mock(CounterfactualExplainabilityRequest.class);
    Query queryMock = mock(Query.class);
    when(queryMock.filter(any(List.class))).thenReturn(queryMock);
    when(queryMock.execute()).thenReturn(List.of(request1, request2));
    when(counterfactualStorage.query()).thenReturn(queryMock);
    when(trustyStorageServiceMock.getCounterfactualRequestStorage()).thenReturn(counterfactualStorage);
    assertThrows(IllegalArgumentException.class, () -> trustyService.getCounterfactualRequest(TEST_EXECUTION_ID, TEST_COUNTERFACTUAL_ID));
}
Also used : CounterfactualExplainabilityRequest(org.kie.kogito.explainability.api.CounterfactualExplainabilityRequest) Query(org.kie.kogito.persistence.api.query.Query) List(java.util.List) ArrayList(java.util.ArrayList) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) Test(org.junit.jupiter.api.Test)

Example 8 with Query

use of org.kie.kogito.persistence.api.query.Query in project kogito-apps by kiegroup.

the class GraphQLSchemaManager method createSchema.

private GraphQLSchema createSchema() {
    InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("schema.graphqls");
    SchemaParser schemaParser = new SchemaParser();
    TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(new InputStreamReader(stream));
    RuntimeWiring runtimeWiring = RuntimeWiring.newRuntimeWiring().type("Query", builder -> {
        builder.dataFetcher("ProcessInstances", this::getProcessInstancesValues);
        builder.dataFetcher("UserTaskInstances", this::getUserTaskInstancesValues);
        builder.dataFetcher("Jobs", this::getJobsValues);
        return builder;
    }).type("Mutation", builder -> {
        builder.dataFetcher("ProcessInstanceAbort", this::abortProcessInstance);
        builder.dataFetcher("ProcessInstanceRetry", this::retryProcessInstance);
        builder.dataFetcher("ProcessInstanceSkip", this::skipProcessInstance);
        builder.dataFetcher("ProcessInstanceUpdateVariables", this::updateProcessInstanceVariables);
        builder.dataFetcher("NodeInstanceTrigger", this::triggerNodeInstance);
        builder.dataFetcher("NodeInstanceRetrigger", this::retriggerNodeInstance);
        builder.dataFetcher("NodeInstanceCancel", this::cancelNodeInstance);
        builder.dataFetcher("JobCancel", this::cancelJob);
        builder.dataFetcher("JobReschedule", this::rescheduleJob);
        builder.dataFetcher("UserTaskInstanceUpdate", this::updateUserTaskInstance);
        builder.dataFetcher("UserTaskInstanceCommentCreate", this::createTaskInstanceComment);
        builder.dataFetcher("UserTaskInstanceAttachmentCreate", this::createTaskInstanceAttachment);
        builder.dataFetcher("UserTaskInstanceCommentUpdate", this::updateUserTaskComment);
        builder.dataFetcher("UserTaskInstanceCommentDelete", this::deleteUserTaskComment);
        builder.dataFetcher("UserTaskInstanceAttachmentUpdate", this::updateUserTaskAttachment);
        builder.dataFetcher("UserTaskInstanceAttachmentDelete", this::deleteUserTaskAttachment);
        return builder;
    }).type("ProcessInstance", builder -> {
        builder.dataFetcher("parentProcessInstance", this::getParentProcessInstanceValue);
        builder.dataFetcher("childProcessInstances", this::getChildProcessInstancesValues);
        builder.dataFetcher("serviceUrl", this::getProcessInstanceServiceUrl);
        builder.dataFetcher("diagram", this::getProcessInstanceDiagram);
        builder.dataFetcher("nodeDefinitions", this::getProcessNodes);
        return builder;
    }).type("UserTaskInstance", builder -> {
        builder.dataFetcher("schema", this::getUserTaskInstanceSchema);
        return builder;
    }).type("ProcessInstanceMeta", builder -> {
        builder.dataFetcher("serviceUrl", this::getProcessInstanceJsonServiceUrl);
        return builder;
    }).type("ProcessInstanceState", builder -> {
        builder.enumValues(name -> ProcessInstanceState.valueOf(name).ordinal());
        return builder;
    }).type("Subscription", builder -> {
        builder.dataFetcher(PROCESS_INSTANCE_ADDED, getProcessInstanceAddedDataFetcher());
        builder.dataFetcher(PROCESS_INSTANCE_UPDATED, getProcessInstanceUpdatedDataFetcher());
        builder.dataFetcher(USER_TASK_INSTANCE_ADDED, getUserTaskInstanceAddedDataFetcher());
        builder.dataFetcher(USER_TASK_INSTANCE_UPDATED, getUserTaskInstanceUpdatedDataFetcher());
        builder.dataFetcher(JOB_ADDED, getJobAddedDataFetcher());
        builder.dataFetcher(JOB_UPDATED, getJobUpdatedDataFetcher());
        return builder;
    }).scalar(qlDateTimeScalarType).build();
    SchemaGenerator schemaGenerator = new SchemaGenerator();
    return schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, runtimeWiring);
}
Also used : DataIndexStorageService(org.kie.kogito.index.DataIndexStorageService) DataFetchingEnvironment(graphql.schema.DataFetchingEnvironment) GraphQLNamedType(graphql.schema.GraphQLNamedType) ProcessInstanceState(org.kie.kogito.index.model.ProcessInstanceState) GraphQLInputObjectType(graphql.schema.GraphQLInputObjectType) ProcessInstance(org.kie.kogito.index.model.ProcessInstance) GraphQLScalarType(graphql.schema.GraphQLScalarType) LoggerFactory(org.slf4j.LoggerFactory) CompletableFuture(java.util.concurrent.CompletableFuture) Query(org.kie.kogito.persistence.api.query.Query) JsonUtils.getObjectMapper(org.kie.kogito.index.json.JsonUtils.getObjectMapper) Supplier(java.util.function.Supplier) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) Collections.singletonList(java.util.Collections.singletonList) Inject(javax.inject.Inject) SchemaParser(graphql.schema.idl.SchemaParser) Map(java.util.Map) DataIndexParsingException(org.kie.kogito.index.json.DataIndexParsingException) DataFetcher(graphql.schema.DataFetcher) GraphQLSchema(graphql.schema.GraphQLSchema) GraphQLQueryParserRegistry(org.kie.kogito.index.graphql.query.GraphQLQueryParserRegistry) Storage(org.kie.kogito.persistence.api.Storage) JsonNode(com.fasterxml.jackson.databind.JsonNode) KogitoRuntimeClient(org.kie.kogito.index.api.KogitoRuntimeClient) DataIndexServiceException(org.kie.kogito.index.service.DataIndexServiceException) Logger(org.slf4j.Logger) Job(org.kie.kogito.index.model.Job) Collection(java.util.Collection) Publisher(org.reactivestreams.Publisher) QueryFilterFactory.equalTo(org.kie.kogito.persistence.api.query.QueryFilterFactory.equalTo) TypeDefinitionRegistry(graphql.schema.idl.TypeDefinitionRegistry) IOException(java.io.IOException) UserTaskInstance(org.kie.kogito.index.model.UserTaskInstance) InputStreamReader(java.io.InputStreamReader) String.format(java.lang.String.format) Objects(java.util.Objects) Consumer(java.util.function.Consumer) List(java.util.List) Collectors.toList(java.util.stream.Collectors.toList) RuntimeWiring(graphql.schema.idl.RuntimeWiring) PostConstruct(javax.annotation.PostConstruct) Optional(java.util.Optional) ApplicationScoped(javax.enterprise.context.ApplicationScoped) GraphQLQueryOrderByParser(org.kie.kogito.index.graphql.query.GraphQLQueryOrderByParser) SchemaGenerator(graphql.schema.idl.SchemaGenerator) Node(org.kie.kogito.index.model.Node) InputStream(java.io.InputStream) InputStreamReader(java.io.InputStreamReader) RuntimeWiring(graphql.schema.idl.RuntimeWiring) InputStream(java.io.InputStream) TypeDefinitionRegistry(graphql.schema.idl.TypeDefinitionRegistry) SchemaGenerator(graphql.schema.idl.SchemaGenerator) SchemaParser(graphql.schema.idl.SchemaParser)

Example 9 with Query

use of org.kie.kogito.persistence.api.query.Query in project kogito-apps by kiegroup.

the class OracleQuery method execute.

@Override
public List<T> execute() {
    CriteriaBuilder builder = repository.getEntityManager().getCriteriaBuilder();
    CriteriaQuery<E> criteriaQuery = builder.createQuery(entityClass);
    Root<E> root = criteriaQuery.from(entityClass);
    if (filters != null && !filters.isEmpty()) {
        List<Predicate> predicates = getPredicates(builder, root);
        criteriaQuery.where(predicates.toArray(new Predicate[] {}));
    }
    if (sortBy != null && !sortBy.isEmpty()) {
        List<Order> orderBy = sortBy.stream().map(f -> {
            Path attributePath = getAttributePath(root, f.getAttribute());
            return f.getSort() == SortDirection.ASC ? builder.asc(attributePath) : builder.desc(attributePath);
        }).collect(toList());
        criteriaQuery.orderBy(orderBy);
    }
    javax.persistence.Query query = repository.getEntityManager().createQuery(criteriaQuery);
    if (limit != null) {
        query.setMaxResults(limit);
    }
    if (offset != null) {
        query.setFirstResult(offset);
    }
    return (List<T>) query.getResultList().stream().map(mapper).collect(toList());
}
Also used : CriteriaBuilder(javax.persistence.criteria.CriteriaBuilder) Order(javax.persistence.criteria.Order) CriteriaQuery(javax.persistence.criteria.CriteriaQuery) Join(javax.persistence.criteria.Join) Collection(java.util.Collection) Query(org.kie.kogito.persistence.api.query.Query) Function(java.util.function.Function) AbstractEntity(org.kie.kogito.index.oracle.model.AbstractEntity) List(java.util.List) PluralAttributePath(org.hibernate.query.criteria.internal.path.PluralAttributePath) Collectors.toList(java.util.stream.Collectors.toList) Predicate(javax.persistence.criteria.Predicate) CriteriaBuilder(javax.persistence.criteria.CriteriaBuilder) Order(javax.persistence.criteria.Order) AttributeSort(org.kie.kogito.persistence.api.query.AttributeSort) PanacheRepositoryBase(io.quarkus.hibernate.orm.panache.PanacheRepositoryBase) Path(javax.persistence.criteria.Path) Root(javax.persistence.criteria.Root) SortDirection(org.kie.kogito.persistence.api.query.SortDirection) AttributeFilter(org.kie.kogito.persistence.api.query.AttributeFilter) PluralAttributePath(org.hibernate.query.criteria.internal.path.PluralAttributePath) Path(javax.persistence.criteria.Path) Predicate(javax.persistence.criteria.Predicate) List(java.util.List) Collectors.toList(java.util.stream.Collectors.toList)

Example 10 with Query

use of org.kie.kogito.persistence.api.query.Query in project kogito-apps by kiegroup.

the class OracleQuery method execute.

@Override
public List<T> execute() {
    // Get type information from filters/sorting to cast JSON document fields in query
    fields = addFilters(new HashMap<>(), filters);
    if (sortBy != null && !sortBy.isEmpty()) {
        sortBy.stream().filter(sortBy -> !fields.containsKey(sortBy.getAttribute())).forEach(sortBy -> fields.put(sortBy.getAttribute(), new JsonField(sortBy.getAttribute())));
    }
    // Build the query to retrieve the filtered data from the temporary table above.
    StringBuilder queryString = new StringBuilder("SELECT key, name, json_value FROM kogito_data_cache ").append(" WHERE name = '").append(name).append("'");
    if (filters != null && !filters.isEmpty()) {
        queryString.append(" AND ");
        queryString.append(filters.stream().map(filter -> new StringBuilder().append(filterStringFunction(filter))).collect(joining(AND)));
    }
    // Sorting
    if (sortBy != null && !sortBy.isEmpty()) {
        queryString.append(" ORDER BY ");
        queryString.append(sortBy.stream().map(f -> {
            final JsonField field = fields.get(f.getAttribute());
            return cast(field, format(ATTRIBUTE_ACCESSOR, f.getAttribute())).append(" ").append(f.getSort().name());
        }).collect(joining(", ")));
    }
    LOGGER.debug("Executing Oracle query: {}", queryString);
    javax.persistence.Query query = repository.getEntityManager().createNativeQuery(queryString.toString()).unwrap(NativeQuery.class).addScalar("json_value", new JsonBlobType(type));
    if (limit != null) {
        query.setMaxResults(limit);
    }
    if (offset != null) {
        query.setFirstResult(offset);
    }
    List<?> results = query.getResultList();
    return results.stream().map(r -> {
        if (r == null) {
            return null;
        }
        try {
            return objectMapper.readValue(objectMapper.writeValueAsString(r), type);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }).collect(Collectors.toList());
}
Also used : Logger(org.slf4j.Logger) JsonBlobType(com.vladmihalcea.hibernate.type.json.JsonBlobType) LoggerFactory(org.slf4j.LoggerFactory) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) HashMap(java.util.HashMap) Query(org.kie.kogito.persistence.api.query.Query) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) Collectors(java.util.stream.Collectors) String.format(java.lang.String.format) Collectors.joining(java.util.stream.Collectors.joining) Objects(java.util.Objects) List(java.util.List) FilterCondition(org.kie.kogito.persistence.api.query.FilterCondition) Map(java.util.Map) NativeQuery(org.hibernate.query.NativeQuery) AttributeSort(org.kie.kogito.persistence.api.query.AttributeSort) CacheEntityRepository(org.kie.kogito.persistence.oracle.model.CacheEntityRepository) AttributeFilter(org.kie.kogito.persistence.api.query.AttributeFilter) JsonBlobType(com.vladmihalcea.hibernate.type.json.JsonBlobType) HashMap(java.util.HashMap) NativeQuery(org.hibernate.query.NativeQuery) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException)

Aggregations

Query (org.kie.kogito.persistence.api.query.Query)17 List (java.util.List)14 Test (org.junit.jupiter.api.Test)12 ArrayList (java.util.ArrayList)9 ArgumentMatchers.anyString (org.mockito.ArgumentMatchers.anyString)6 CounterfactualExplainabilityResult (org.kie.kogito.explainability.api.CounterfactualExplainabilityResult)5 CounterfactualExplainabilityRequest (org.kie.kogito.explainability.api.CounterfactualExplainabilityRequest)4 Storage (org.kie.kogito.persistence.api.Storage)4 AttributeFilter (org.kie.kogito.persistence.api.query.AttributeFilter)4 AttributeSort (org.kie.kogito.persistence.api.query.AttributeSort)4 Collection (java.util.Collection)3 Collectors.toList (java.util.stream.Collectors.toList)3 MatchedExecutionHeaders (org.kie.kogito.trusty.service.common.models.MatchedExecutionHeaders)3 Logger (org.slf4j.Logger)3 LoggerFactory (org.slf4j.LoggerFactory)3 PanacheRepositoryBase (io.quarkus.hibernate.orm.panache.PanacheRepositoryBase)2 IOException (java.io.IOException)2 String.format (java.lang.String.format)2 Map (java.util.Map)2 Objects (java.util.Objects)2