This is an automated email from the ASF dual-hosted git repository.
fjtiradosarti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-kogito-apps.git
The following commit(s) were added to refs/heads/main by this push:
new 891401f7b [Fix #2169] Allow filtering over processInstances.definition
and definition.metadata (#2191)
891401f7b is described below
commit 891401f7b7aa46ab77952dbe6001e352c7b72c99
Author: Francisco Javier Tirado Sarti
<[email protected]>
AuthorDate: Wed Feb 19 17:09:51 2025 +0100
[Fix #2169] Allow filtering over processInstances.definition and
definition.metadata (#2191)
* [Fix_#2169] Supporting query over ProcessInstance.definition
* [Fix_#2169] Fixing broken tests
* Revert "[Fix_#2169] Fixing broken tests"
This reverts commit bede4279f566d7e0d56db838c4e99a5f2601400f.
* [Fix #2169] Alternative approach
* [Fix #2169] Metadata query IT
* [Fix #2169] Annotation query IT
* [Fix #2169] Simplifying Flyway script
* [Fix #2169] Walters comments
---
.../index/service/ProcessDefinitionHelper.java | 6 +++-
.../graphql/AbstractGraphQLSchemaManager.java | 2 +-
.../src/main/resources/basic.schema.graphqls | 7 ++++
.../kie/kogito/index/model/ProcessDefinition.java | 6 ++--
.../org/kie/kogito/index/test/QueryTestUtils.java | 11 ++++++
.../query/AbstractProcessDefinitionQueryIT.java | 10 +-----
.../protostream/ProcessDefinitionMarshaller.java | 6 ++--
.../ProcessDefinitionMarshallerTest.java | 14 +++++---
.../jpa/mapper/ProcessDefinitionEntityMapper.java | 15 +++++++++
.../jpa/mapper/ProcessInstanceEntityMapper.java | 7 ++++
.../index/jpa/model/ProcessDefinitionEntity.java | 20 +++++------
.../index/jpa/model/ProcessInstanceEntity.java | 15 +++++++++
.../storage/ProcessDefinitionEntityStorage.java | 3 ++
.../jpa/storage/ProcessInstanceEntityStorage.java | 1 +
.../ansi/V1.45.1.0__metadata_as_column.sql | 39 ++++++++++++++++++++++
.../mongodb/model/ProcessDefinitionEntity.java | 6 ++--
.../index/postgresql/PostgresqlJsonHelper.java | 29 +++++++++++++---
.../PostgresqlProcessDefinitionEntityStorage.java} | 23 +++++--------
.../postgresql/V1.45.1.0__metadata_as_jsonb.sql} | 15 ++++-----
.../query/ProcessDefinitionEntityQueryIT.java | 31 +++++++++++++++++
.../query/ProcessInstanceEntityQueryIT.java | 23 +++++++++++++
21 files changed, 225 insertions(+), 64 deletions(-)
diff --git
a/data-index/data-index-common/src/main/java/org/kie/kogito/index/service/ProcessDefinitionHelper.java
b/data-index/data-index-common/src/main/java/org/kie/kogito/index/service/ProcessDefinitionHelper.java
index 96e3b9c4c..0a5b64bbe 100644
---
a/data-index/data-index-common/src/main/java/org/kie/kogito/index/service/ProcessDefinitionHelper.java
+++
b/data-index/data-index-common/src/main/java/org/kie/kogito/index/service/ProcessDefinitionHelper.java
@@ -63,7 +63,7 @@ public class ProcessDefinitionHelper {
instance.setEndpoint(doMerge(data.getEndpoint(),
instance.getEndpoint()));
instance.setDescription(doMerge(data.getDescription(),
instance.getDescription()));
instance.setAnnotations(doMerge(data.getAnnotations(),
instance.getAnnotations()));
-
instance.setMetadata(CommonUtils.mergeMap(toStringMap(data.getMetadata()),
instance.getMetadata()));
+
instance.setMetadata(CommonUtils.mergeMap(toObjectMap(data.getMetadata()),
instance.getMetadata()));
instance.setNodes(doMerge(nodeDefinitions(data), instance.getNodes()));
instance.setSource(doMerge(data.getSource(), instance.getSource()));
return instance;
@@ -95,6 +95,10 @@ public class ProcessDefinitionHelper {
return current;
}
+ private static Map<String, Object> toObjectMap(Map<String, ?> map) {
+ return map == null ? null : Collections.unmodifiableMap(map);
+ }
+
private static Map<String, String> toStringMap(Map<String, ?> input) {
if (input == null) {
return null;
diff --git
a/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/AbstractGraphQLSchemaManager.java
b/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/AbstractGraphQLSchemaManager.java
index 142f2c02a..a3872eff8 100644
---
a/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/AbstractGraphQLSchemaManager.java
+++
b/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/AbstractGraphQLSchemaManager.java
@@ -149,7 +149,7 @@ public abstract class AbstractGraphQLSchemaManager
implements GraphQLSchemaManag
public ProcessDefinition getProcessDefinition(DataFetchingEnvironment env)
{
ProcessInstance source = env.getSource();
- return cacheService.getProcessDefinitionStorage().get(new
ProcessDefinitionKey(source.getProcessId(), source.getVersion()));
+ return source.getDefinition();
}
protected String getServiceUrl(String endpoint, String processId) {
diff --git
a/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
b/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
index 0f9ca7628..358454c2a 100644
--- a/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
+++ b/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
@@ -64,6 +64,12 @@ input ProcessDefinitionArgument {
id: StringArgument
name: StringArgument
version: StringArgument
+ annotations: StringArrayArgument
+ roles: StringArrayArgument
+ serviceUrl: StringArgument
+ description: StringArgument
+ type: StringArgument
+ metadata: JSON
}
type ProcessInstance {
@@ -194,6 +200,7 @@ input ProcessInstanceArgument {
businessKey: StringArgument
createdBy: StringArgument
updatedBy: StringArgument
+ definition: ProcessDefinitionArgument
}
input ProcessInstanceErrorArgument {
diff --git
a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessDefinition.java
b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessDefinition.java
index e6e2450ea..7476448ee 100644
---
a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessDefinition.java
+++
b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessDefinition.java
@@ -35,7 +35,7 @@ public class ProcessDefinition {
private String source;
private String description;
private Set<String> annotations;
- private Map<String, String> metadata;
+ private Map<String, Object> metadata;
private List<Node> nodes;
public String getId() {
@@ -126,11 +126,11 @@ public class ProcessDefinition {
this.annotations = annotations;
}
- public Map<String, String> getMetadata() {
+ public Map<String, Object> getMetadata() {
return metadata;
}
- public void setMetadata(Map<String, String> metadata) {
+ public void setMetadata(Map<String, Object> metadata) {
this.metadata = metadata;
}
diff --git
a/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/QueryTestUtils.java
b/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/QueryTestUtils.java
index 5e8f305dc..1feb8e582 100644
---
a/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/QueryTestUtils.java
+++
b/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/QueryTestUtils.java
@@ -21,6 +21,9 @@ package org.kie.kogito.index.test;
import java.util.List;
import java.util.function.BiConsumer;
+import org.assertj.core.groups.Tuple;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
+
import com.fasterxml.jackson.databind.node.ObjectNode;
import static org.assertj.core.api.Assertions.assertThat;
@@ -55,4 +58,12 @@ public class QueryTestUtils {
return (instances, ids) ->
assertThat(instances).extracting("id").doesNotContainAnyElementsOf(List.of(ids));
}
+ public static <V> BiConsumer<List<V>, ProcessDefinitionKey[]>
assertWithKey() {
+ return (instances, ids) -> assertThat(instances).hasSize(ids == null ?
0 : ids.length).extracting("id", "version").map(Tuple::toArray)
+ .map(objs -> new ProcessDefinitionKey((String) objs[0],
(String) objs[1])).containsExactly(ids);
+ }
+
+ public static <V> BiConsumer<List<V>, ProcessDefinitionKey[]>
assertNoKey() {
+ return (instances, ids) -> assertThat(instances).isEmpty();
+ }
}
diff --git
a/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/query/AbstractProcessDefinitionQueryIT.java
b/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/query/AbstractProcessDefinitionQueryIT.java
index a6e61fc01..f66412a9d 100644
---
a/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/query/AbstractProcessDefinitionQueryIT.java
+++
b/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/query/AbstractProcessDefinitionQueryIT.java
@@ -18,11 +18,8 @@
*/
package org.kie.kogito.index.test.query;
-import java.util.List;
import java.util.Set;
-import java.util.function.BiConsumer;
-import org.assertj.core.groups.Tuple;
import org.junit.jupiter.api.Test;
import org.kie.kogito.index.model.ProcessDefinition;
import org.kie.kogito.index.model.ProcessDefinitionKey;
@@ -33,7 +30,7 @@ import org.kie.kogito.persistence.api.query.SortDirection;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
-import static org.assertj.core.api.Assertions.assertThat;
+import static org.kie.kogito.index.test.QueryTestUtils.assertWithKey;
import static org.kie.kogito.persistence.api.query.QueryFilterFactory.contains;
import static
org.kie.kogito.persistence.api.query.QueryFilterFactory.containsAll;
import static
org.kie.kogito.persistence.api.query.QueryFilterFactory.containsAny;
@@ -71,9 +68,4 @@ public abstract class AbstractProcessDefinitionQueryIT
extends QueryTestBase<Pro
null, pdv2Key, pdv1Key);
}
- public static <V> BiConsumer<List<V>, ProcessDefinitionKey[]>
assertWithKey() {
- return (instances, ids) -> assertThat(instances).hasSize(ids == null ?
0 : ids.length).extracting("id", "version").map(Tuple::toArray)
- .map(objs -> new ProcessDefinitionKey((String) objs[0],
(String) objs[1])).containsExactly(ids);
- }
-
}
diff --git
a/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/ProcessDefinitionMarshaller.java
b/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/ProcessDefinitionMarshaller.java
index 720fdf1e0..a4f3eeb6f 100644
---
a/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/ProcessDefinitionMarshaller.java
+++
b/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/ProcessDefinitionMarshaller.java
@@ -20,6 +20,7 @@ package org.kie.kogito.index.infinispan.protostream;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Optional;
@@ -61,7 +62,7 @@ public class ProcessDefinitionMarshaller extends
AbstractMarshaller implements M
pd.setName(reader.readString(NAME));
pd.setDescription(reader.readString(DESCRIPTION));
pd.setAnnotations(reader.readCollection(ANNOTATIONS, new HashSet<>(),
String.class));
- pd.setMetadata(buildMetadata(reader));
+ pd.setMetadata(Collections.unmodifiableMap(buildMetadata(reader)));
pd.setRoles(reader.readCollection(ROLES, new HashSet<>(),
String.class));
pd.setAddons(reader.readCollection(ADDONS, new HashSet<>(),
String.class));
pd.setType(reader.readString(TYPE));
@@ -97,7 +98,8 @@ public class ProcessDefinitionMarshaller extends
AbstractMarshaller implements M
private static Set<Entry> buildMetadata(ProcessDefinition pd) {
return Optional.ofNullable(pd.getMetadata())
.map(Map::entrySet)
- .map(entries -> entries.stream().map(e -> new
Entry(e.getKey(), e.getValue())).collect(Collectors.toSet()))
+ .map(entries -> entries.stream().filter(e -> e.getValue() !=
null)
+ .map(e -> new Entry(e.getKey(),
e.getValue().toString())).collect(Collectors.toSet()))
.orElse(null);
}
diff --git
a/data-index/data-index-storage/data-index-storage-infinispan/src/test/java/org/kie/kogito/index/infinispan/protostream/ProcessDefinitionMarshallerTest.java
b/data-index/data-index-storage/data-index-storage-infinispan/src/test/java/org/kie/kogito/index/infinispan/protostream/ProcessDefinitionMarshallerTest.java
index e8f08da5f..e614a32a2 100644
---
a/data-index/data-index-storage/data-index-storage-infinispan/src/test/java/org/kie/kogito/index/infinispan/protostream/ProcessDefinitionMarshallerTest.java
+++
b/data-index/data-index-storage/data-index-storage-infinispan/src/test/java/org/kie/kogito/index/infinispan/protostream/ProcessDefinitionMarshallerTest.java
@@ -21,6 +21,7 @@ package org.kie.kogito.index.infinispan.protostream;
import java.io.IOException;
import java.util.HashSet;
import java.util.Map;
+import java.util.Set;
import org.infinispan.protostream.MessageMarshaller;
import org.junit.jupiter.api.Test;
@@ -29,7 +30,6 @@ import org.kie.kogito.index.model.ProcessDefinition;
import org.mockito.InOrder;
import static java.util.Collections.singleton;
-import static java.util.stream.Collectors.toSet;
import static org.assertj.core.api.Assertions.assertThat;
import static
org.kie.kogito.index.infinispan.protostream.ProcessDefinitionMarshaller.ADDONS;
import static
org.kie.kogito.index.infinispan.protostream.ProcessDefinitionMarshaller.ANNOTATIONS;
@@ -48,6 +48,9 @@ import static org.mockito.Mockito.when;
class ProcessDefinitionMarshallerTest {
+ private static final String metaKey = "key1";
+ private final String metaValue = "value1";
+
@Test
void testReadFrom() throws IOException {
MessageMarshaller.ProtoStreamReader reader =
mock(MessageMarshaller.ProtoStreamReader.class);
@@ -56,7 +59,7 @@ class ProcessDefinitionMarshallerTest {
when(reader.readString(NAME)).thenReturn("processName");
when(reader.readString(DESCRIPTION)).thenReturn("descr");
when(reader.readCollection(eq(ANNOTATIONS), any(),
eq(String.class))).thenReturn(new HashSet<>(singleton("tag1")));
- when(reader.readCollection(eq(METADATA), any(),
eq(Entry.class))).thenReturn(new HashSet<>(singleton(new Entry("key1",
"value1"))));
+ when(reader.readCollection(eq(METADATA), any(),
eq(Entry.class))).thenReturn(new HashSet<>(singleton(new Entry(metaKey,
metaValue))));
when(reader.readCollection(eq(ROLES), any(),
eq(String.class))).thenReturn(new HashSet<>(singleton("admin")));
when(reader.readCollection(eq(ADDONS), any(),
eq(String.class))).thenReturn(new HashSet<>(singleton("process-management")));
when(reader.readString(TYPE)).thenReturn("processType");
@@ -71,7 +74,7 @@ class ProcessDefinitionMarshallerTest {
.hasFieldOrPropertyWithValue(NAME, "processName")
.hasFieldOrPropertyWithValue(DESCRIPTION, "descr")
.hasFieldOrPropertyWithValue(ANNOTATIONS, singleton("tag1"))
- .hasFieldOrPropertyWithValue(METADATA, Map.of("key1",
"value1"))
+ .hasFieldOrPropertyWithValue(METADATA, Map.of(metaKey,
metaValue))
.hasFieldOrPropertyWithValue(ROLES, singleton("admin"))
.hasFieldOrPropertyWithValue(ADDONS,
singleton("process-management"))
.hasFieldOrPropertyWithValue(TYPE, "processType");
@@ -90,13 +93,14 @@ class ProcessDefinitionMarshallerTest {
@Test
void testWriteTo() throws IOException {
+
ProcessDefinition pd = new ProcessDefinition();
pd.setId("processId");
pd.setVersion("1.0");
pd.setName("processName");
pd.setDescription("descr");
pd.setAnnotations(singleton("tag1"));
- pd.setMetadata(Map.of("key1", "value1"));
+ pd.setMetadata(Map.of(metaKey, metaValue));
pd.setRoles(singleton("admin"));
pd.setAddons(singleton("process-management"));
pd.setType("processType");
@@ -112,7 +116,7 @@ class ProcessDefinitionMarshallerTest {
inOrder.verify(writer).writeString(NAME, pd.getName());
inOrder.verify(writer).writeString(DESCRIPTION, pd.getDescription());
inOrder.verify(writer).writeCollection(ANNOTATIONS,
pd.getAnnotations(), String.class);
- inOrder.verify(writer).writeCollection(METADATA,
pd.getMetadata().entrySet().stream().map(e -> new Entry(e.getKey(),
e.getValue())).collect(toSet()), Entry.class);
+ inOrder.verify(writer).writeCollection(METADATA, Set.of(new
Entry(metaKey, metaValue)), Entry.class);
inOrder.verify(writer).writeCollection(ROLES, pd.getRoles(),
String.class);
inOrder.verify(writer).writeCollection(ADDONS, pd.getAddons(),
String.class);
inOrder.verify(writer).writeString(TYPE, pd.getType());
diff --git
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/mapper/ProcessDefinitionEntityMapper.java
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/mapper/ProcessDefinitionEntityMapper.java
index 1cf04b7ab..6549f9f99 100644
---
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/mapper/ProcessDefinitionEntityMapper.java
+++
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/mapper/ProcessDefinitionEntityMapper.java
@@ -18,13 +18,19 @@
*/
package org.kie.kogito.index.jpa.mapper;
+import java.util.Map;
+
import org.kie.kogito.index.jpa.model.ProcessDefinitionEntity;
import org.kie.kogito.index.model.ProcessDefinition;
+import org.kie.kogito.jackson.utils.JsonObjectUtils;
import org.mapstruct.AfterMapping;
import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
@Mapper(componentModel = "cdi", suppressTimestampInGenerated = true)
public interface ProcessDefinitionEntityMapper {
@@ -41,6 +47,15 @@ public interface ProcessDefinitionEntityMapper {
return value == null ? null : new String(value);
}
+ default ObjectNode map(Map<String, Object> model) {
+ JsonNode entity = JsonObjectUtils.fromValue(model);
+ return entity == null || !entity.isObject() ? null : (ObjectNode)
entity;
+ }
+
+ default Map<String, Object> map(ObjectNode entity) {
+ return (Map<String, Object>) JsonObjectUtils.convertValue(entity,
Map.class);
+ }
+
@AfterMapping
default void afterMapping(@MappingTarget ProcessDefinitionEntity entity) {
if (entity.getNodes() != null) {
diff --git
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/mapper/ProcessInstanceEntityMapper.java
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/mapper/ProcessInstanceEntityMapper.java
index f241c4d85..55b1cb471 100644
---
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/mapper/ProcessInstanceEntityMapper.java
+++
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/mapper/ProcessInstanceEntityMapper.java
@@ -19,13 +19,16 @@
package org.kie.kogito.index.jpa.mapper;
import org.kie.kogito.index.jpa.model.MilestoneEntity;
+import org.kie.kogito.index.jpa.model.ProcessDefinitionEntity;
import org.kie.kogito.index.jpa.model.ProcessInstanceEntity;
import org.kie.kogito.index.model.Milestone;
+import org.kie.kogito.index.model.ProcessDefinition;
import org.kie.kogito.index.model.ProcessInstance;
import org.mapstruct.AfterMapping;
import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
+import org.mapstruct.factory.Mappers;
@Mapper(componentModel = "cdi", suppressTimestampInGenerated = true)
public interface ProcessInstanceEntityMapper {
@@ -40,6 +43,10 @@ public interface ProcessInstanceEntityMapper {
@InheritInverseConfiguration
ProcessInstance mapToModel(ProcessInstanceEntity pi);
+ default ProcessDefinition mapToDefinition(ProcessDefinitionEntity entity) {
+ return
Mappers.getMapper(ProcessDefinitionEntityMapper.class).mapToModel(entity);
+ }
+
@AfterMapping
default void afterMapping(@MappingTarget ProcessInstanceEntity entity) {
entity.getNodes().forEach(n -> n.setProcessInstance(entity));
diff --git
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessDefinitionEntity.java
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessDefinitionEntity.java
index a7158f31b..2b70331c1 100644
---
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessDefinitionEntity.java
+++
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessDefinitionEntity.java
@@ -19,22 +19,24 @@
package org.kie.kogito.index.jpa.model;
import java.util.List;
-import java.util.Map;
import java.util.Objects;
import java.util.Set;
import org.kie.kogito.index.model.ProcessDefinitionKey;
+import org.kie.kogito.persistence.postgresql.hibernate.JsonBinaryConverter;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
import jakarta.persistence.CascadeType;
import jakarta.persistence.CollectionTable;
import jakarta.persistence.Column;
+import jakarta.persistence.Convert;
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Entity;
import jakarta.persistence.ForeignKey;
import jakarta.persistence.Id;
import jakarta.persistence.IdClass;
import jakarta.persistence.JoinColumn;
-import jakarta.persistence.MapKeyColumn;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
@@ -74,13 +76,9 @@ public class ProcessDefinitionEntity extends AbstractEntity {
@JoinColumn(name = "process_version", referencedColumnName =
"version") }, foreignKey = @ForeignKey(name = "fk_definitions_annotations"))
@Column(name = "annotation")
private Set<String> annotations;
- @ElementCollection
- @CollectionTable(name = "definitions_metadata", joinColumns = {
- @JoinColumn(name = "process_id", referencedColumnName = "id"),
@JoinColumn(name = "process_version", referencedColumnName = "version") },
- foreignKey = @ForeignKey(name = "fk_definitions_metadata"))
- @MapKeyColumn(name = "name")
- @Column(name = "meta_value")
- private Map<String, String> metadata;
+ @Convert(converter = JsonBinaryConverter.class)
+ @Column(columnDefinition = "jsonb")
+ private ObjectNode metadata;
@Override
public String getId() {
@@ -171,11 +169,11 @@ public class ProcessDefinitionEntity extends
AbstractEntity {
this.annotations = annotations;
}
- public Map<String, String> getMetadata() {
+ public ObjectNode getMetadata() {
return metadata;
}
- public void setMetadata(Map<String, String> metadata) {
+ public void setMetadata(ObjectNode metadata) {
this.metadata = metadata;
}
diff --git
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessInstanceEntity.java
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessInstanceEntity.java
index a3a0b0ceb..73644f03b 100644
---
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessInstanceEntity.java
+++
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessInstanceEntity.java
@@ -23,6 +23,8 @@ import java.util.List;
import java.util.Objects;
import java.util.Set;
+import org.hibernate.annotations.NotFound;
+import org.hibernate.annotations.NotFoundAction;
import org.kie.kogito.persistence.postgresql.hibernate.JsonBinaryConverter;
import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -34,9 +36,12 @@ import jakarta.persistence.Convert;
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Embedded;
import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
import jakarta.persistence.ForeignKey;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
+import jakarta.persistence.JoinColumns;
+import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
@@ -85,6 +90,12 @@ public class ProcessInstanceEntity extends AbstractEntity {
@Embedded
private ProcessInstanceErrorEntity error;
+ @ManyToOne(targetEntity = ProcessDefinitionEntity.class, fetch =
FetchType.LAZY)
+ @JoinColumns({ @JoinColumn(name = "processId", referencedColumnName =
"id", insertable = false, updatable = false),
+ @JoinColumn(name = "version", referencedColumnName = "version",
insertable = false, updatable = false) })
+ @NotFound(action = NotFoundAction.IGNORE)
+ private ProcessDefinitionEntity definition;
+
@Override
public String getId() {
return id;
@@ -279,6 +290,10 @@ public class ProcessInstanceEntity extends AbstractEntity {
return Objects.hash(id);
}
+ public ProcessDefinitionEntity getDefinition() {
+ return definition;
+ }
+
@Override
public String toString() {
return "ProcessInstanceEntity{" +
diff --git
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessDefinitionEntityStorage.java
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessDefinitionEntityStorage.java
index e22670c66..9b64ef09b 100644
---
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessDefinitionEntityStorage.java
+++
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessDefinitionEntityStorage.java
@@ -24,11 +24,14 @@ import
org.kie.kogito.index.jpa.model.ProcessDefinitionEntityRepository;
import org.kie.kogito.index.model.ProcessDefinition;
import org.kie.kogito.index.model.ProcessDefinitionKey;
+import io.quarkus.arc.DefaultBean;
+
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.transaction.Transactional;
@ApplicationScoped
+@DefaultBean
public class ProcessDefinitionEntityStorage extends
AbstractStorage<ProcessDefinitionKey, ProcessDefinitionEntity,
ProcessDefinition> {
protected ProcessDefinitionEntityStorage() {
diff --git
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
index 17a3c8290..b9fe816cb 100644
---
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
+++
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
@@ -113,6 +113,7 @@ public class ProcessInstanceEntityStorage extends
AbstractJPAStorageFetcher<Stri
return
repository.findByIdOptional(event.getKogitoProcessInstanceId()).orElseGet(() ->
{
ProcessInstanceEntity pi = new ProcessInstanceEntity();
pi.setProcessId(event.getKogitoProcessId());
+ pi.setVersion(event.getKogitoProcessInstanceVersion());
pi.setId(event.getKogitoProcessInstanceId());
pi.setLastUpdate(toZonedDateTime(event.getTime()));
pi.setNodes(new ArrayList<>());
diff --git
a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.1.0__metadata_as_column.sql
b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.1.0__metadata_as_column.sql
new file mode 100644
index 000000000..9b8e2304f
--- /dev/null
+++
b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.1.0__metadata_as_column.sql
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+ALTER TABLE definitions ADD COLUMN metadata varchar(max);
+
+/* Migration for postgresql and sql server */
+/*
+UPDATE definitions SET metadata = v
+FROM (SELECT process_id, process_version, string_agg(name || ':' ||
meta_value, ',') as v FROM definitions_metadata group by process_id,
process_version) as grouped_metadata
+WHERE id = grouped_metadata.process_id and version =
grouped_metadata.process_version;
+*/
+
+
+/* Migration for h2 and oracle*/
+/*
+UPDATE definitions SET metadata = v
+FROM (SELECT process_id, process_version, listagg(name || ':' || meta_value,
',') as v FROM definitions_metadata group by process_id, process_version) as
grouped_metadata
+WHERE id = grouped_metadata.process_id and version =
grouped_metadata.process_version;
+*/
+
+
+/* Since migration is disable, do not delete not longer used table*/
+/* DROP TABLE definitions_metadata;*/
diff --git
a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessDefinitionEntity.java
b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessDefinitionEntity.java
index b009835ad..01176239e 100644
---
a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessDefinitionEntity.java
+++
b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessDefinitionEntity.java
@@ -40,7 +40,7 @@ public class ProcessDefinitionEntity {
private Set<String> annotations;
- private Map<String, String> metadata;
+ private Map<String, Object> metadata;
private Set<String> roles;
@@ -148,11 +148,11 @@ public class ProcessDefinitionEntity {
this.annotations = annotations;
}
- public Map<String, String> getMetadata() {
+ public Map<String, Object> getMetadata() {
return metadata;
}
- public void setMetadata(Map<String, String> metadata) {
+ public void setMetadata(Map<String, Object> metadata) {
this.metadata = metadata;
}
diff --git
a/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/PostgresqlJsonHelper.java
b/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/PostgresqlJsonHelper.java
index 3cb1f347d..d8bb74a7b 100644
---
a/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/PostgresqlJsonHelper.java
+++
b/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/PostgresqlJsonHelper.java
@@ -18,14 +18,18 @@
*/
package org.kie.kogito.index.postgresql;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.kie.kogito.persistence.api.query.AttributeFilter;
+import jakarta.persistence.PersistenceException;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.Expression;
+import jakarta.persistence.criteria.Join;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
@@ -101,11 +105,26 @@ public class PostgresqlJsonHelper {
private static Expression buildPathExpression(CriteriaBuilder builder,
Root<?> root, String attributeName, boolean isStr) {
String[] attributes = attributeName.split("\\.");
- Expression<?>[] arguments = new Expression[attributes.length];
- arguments[0] = root.get(attributes[0]);
- for (int i = 1; i < attributes.length; i++) {
- arguments[i] = builder.literal(attributes[i]);
+
+ Collection<Expression> arguments = new ArrayList<>();
+ if (attributes.length == 1)
+ return root.get(attributeName);
+ int startIndex;
+ // Check if the first attribute is a join, if it is, assume next
attribute is the json property (not sure thats necessarily correct but it will
work)
+ try {
+ Join join = root.join(attributes[0]);
+ arguments.add(join.get(attributes[1]));
+ startIndex = 2;
+ } catch (PersistenceException ex) {
+ // If not, the first attribute is the json one,
+ arguments.add(root.get(attributes[0]));
+ startIndex = 1;
+ }
+
+ for (int i = startIndex; i < attributes.length; i++) {
+ arguments.add(builder.literal(attributes[i]));
}
- return isStr ? builder.function("jsonb_extract_path_text",
String.class, arguments) : builder.function("jsonb_extract_path", Object.class,
arguments);
+ return isStr ? builder.function("jsonb_extract_path_text",
String.class, arguments.toArray(new Expression[arguments.size()]))
+ : builder.function("jsonb_extract_path", Object.class,
arguments.toArray(new Expression[arguments.size()]));
}
}
diff --git
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessDefinitionEntityStorage.java
b/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/PostgresqlProcessDefinitionEntityStorage.java
similarity index 56%
copy from
data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessDefinitionEntityStorage.java
copy to
data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/PostgresqlProcessDefinitionEntityStorage.java
index e22670c66..03b25e932 100644
---
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessDefinitionEntityStorage.java
+++
b/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/PostgresqlProcessDefinitionEntityStorage.java
@@ -16,34 +16,27 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.kogito.index.jpa.storage;
+package org.kie.kogito.index.postgresql;
import org.kie.kogito.index.jpa.mapper.ProcessDefinitionEntityMapper;
-import org.kie.kogito.index.jpa.model.ProcessDefinitionEntity;
import org.kie.kogito.index.jpa.model.ProcessDefinitionEntityRepository;
+import org.kie.kogito.index.jpa.storage.ProcessDefinitionEntityStorage;
import org.kie.kogito.index.model.ProcessDefinition;
-import org.kie.kogito.index.model.ProcessDefinitionKey;
+import org.kie.kogito.persistence.api.query.Query;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
-import jakarta.transaction.Transactional;
@ApplicationScoped
-public class ProcessDefinitionEntityStorage extends
AbstractStorage<ProcessDefinitionKey, ProcessDefinitionEntity,
ProcessDefinition> {
-
- protected ProcessDefinitionEntityStorage() {
- }
+public class PostgresqlProcessDefinitionEntityStorage extends
ProcessDefinitionEntityStorage {
@Inject
- public ProcessDefinitionEntityStorage(ProcessDefinitionEntityRepository
repository, ProcessDefinitionEntityMapper mapper) {
- super(repository, ProcessDefinition.class,
ProcessDefinitionEntity.class, mapper::mapToModel, mapper::mapToEntity, e ->
new ProcessDefinitionKey(e.getId(),
- e.getVersion()));
+ public
PostgresqlProcessDefinitionEntityStorage(ProcessDefinitionEntityRepository
repository, ProcessDefinitionEntityMapper mapper) {
+ super(repository, mapper);
}
- @Transactional
@Override
- public boolean containsKey(ProcessDefinitionKey key) {
- return getRepository().count("id = ?1 and version = ?2", key.getId(),
key.getVersion()) == 1;
+ public Query<ProcessDefinition> query() {
+ return new PostgresqlJsonJPAQuery<>(repository, mapToModel,
entityClass);
}
-
}
diff --git
a/data-index/data-index-storage/data-index-storage-postgresql/src/test/java/org/kie/kogito/index/postgresql/query/ProcessDefinitionEntityQueryIT.java
b/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.1.0__metadata_as_jsonb.sql
similarity index 64%
copy from
data-index/data-index-storage/data-index-storage-postgresql/src/test/java/org/kie/kogito/index/postgresql/query/ProcessDefinitionEntityQueryIT.java
copy to
data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.1.0__metadata_as_jsonb.sql
index 0f304623b..df50d9301 100644
---
a/data-index/data-index-storage/data-index-storage-postgresql/src/test/java/org/kie/kogito/index/postgresql/query/ProcessDefinitionEntityQueryIT.java
+++
b/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.1.0__metadata_as_jsonb.sql
@@ -16,15 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.kogito.index.postgresql.query;
-import org.kie.kogito.index.jpa.query.AbstractProcessDefinitionEntityQueryIT;
-import org.kie.kogito.testcontainers.quarkus.PostgreSqlQuarkusTestResource;
+ALTER TABLE definitions ADD COLUMN metadata jsonb;
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
+WITH grouped_metadata as (SELECT process_id, process_version,
json_object_agg(name, meta_value) as v FROM definitions_metadata group by
process_id, process_version)
+UPDATE definitions SET metadata = v
+FROM grouped_metadata
+WHERE id = grouped_metadata.process_id and version =
grouped_metadata.process_version;
-@QuarkusTest
-@QuarkusTestResource(PostgreSqlQuarkusTestResource.class)
-class ProcessDefinitionEntityQueryIT extends
AbstractProcessDefinitionEntityQueryIT {
-}
+DROP TABLE definitions_metadata;
diff --git
a/data-index/data-index-storage/data-index-storage-postgresql/src/test/java/org/kie/kogito/index/postgresql/query/ProcessDefinitionEntityQueryIT.java
b/data-index/data-index-storage/data-index-storage-postgresql/src/test/java/org/kie/kogito/index/postgresql/query/ProcessDefinitionEntityQueryIT.java
index 0f304623b..9b6a70aa1 100644
---
a/data-index/data-index-storage/data-index-storage-postgresql/src/test/java/org/kie/kogito/index/postgresql/query/ProcessDefinitionEntityQueryIT.java
+++
b/data-index/data-index-storage/data-index-storage-postgresql/src/test/java/org/kie/kogito/index/postgresql/query/ProcessDefinitionEntityQueryIT.java
@@ -18,13 +18,44 @@
*/
package org.kie.kogito.index.postgresql.query;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.junit.jupiter.api.Test;
import org.kie.kogito.index.jpa.query.AbstractProcessDefinitionEntityQueryIT;
+import org.kie.kogito.index.model.ProcessDefinition;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
+import org.kie.kogito.index.test.TestUtils;
+import org.kie.kogito.persistence.api.Storage;
import org.kie.kogito.testcontainers.quarkus.PostgreSqlQuarkusTestResource;
import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
+import static java.util.Collections.singletonList;
+import static org.kie.kogito.index.json.JsonUtils.jsonFilter;
+import static org.kie.kogito.index.test.QueryTestUtils.assertNoKey;
+import static org.kie.kogito.index.test.QueryTestUtils.assertWithKey;
+import static org.kie.kogito.persistence.api.query.QueryFilterFactory.contains;
+import static org.kie.kogito.persistence.api.query.QueryFilterFactory.equalTo;
+
@QuarkusTest
@QuarkusTestResource(PostgreSqlQuarkusTestResource.class)
class ProcessDefinitionEntityQueryIT extends
AbstractProcessDefinitionEntityQueryIT {
+
+ @Test
+ void testMetadata() {
+ final String processId = "persons";
+ final String version = "1.0";
+ ProcessDefinitionKey key = new ProcessDefinitionKey(processId,
version);
+ ProcessDefinition definitionEvent =
TestUtils.createProcessDefinition(processId, version, Set.of());
+ definitionEvent.setMetadata(Map.of("name", "Javierito", "hobbies",
List.of("community", "first")));
+ Storage<ProcessDefinitionKey, ProcessDefinition> storage =
getStorage();
+ storage.put(key, definitionEvent);
+ queryAndAssert(assertWithKey(), storage,
singletonList(jsonFilter(equalTo("metadata.name", "Javierito"))), null, null,
null, key);
+ queryAndAssert(assertNoKey(), storage,
singletonList(jsonFilter(equalTo("metadata.name", "Fulanito"))), null, null,
null, key);
+ queryAndAssert(assertWithKey(), storage,
singletonList(jsonFilter(contains("metadata.hobbies", "community"))), null,
null, null, key);
+ queryAndAssert(assertNoKey(), storage,
singletonList(jsonFilter(contains("metadata.hobbies", "commercial"))), null,
null, null, key);
+ }
}
diff --git
a/data-index/data-index-storage/data-index-storage-postgresql/src/test/java/org/kie/kogito/index/postgresql/query/ProcessInstanceEntityQueryIT.java
b/data-index/data-index-storage/data-index-storage-postgresql/src/test/java/org/kie/kogito/index/postgresql/query/ProcessInstanceEntityQueryIT.java
index 9eb7611e7..fe2a33237 100644
---
a/data-index/data-index-storage/data-index-storage-postgresql/src/test/java/org/kie/kogito/index/postgresql/query/ProcessInstanceEntityQueryIT.java
+++
b/data-index/data-index-storage/data-index-storage-postgresql/src/test/java/org/kie/kogito/index/postgresql/query/ProcessInstanceEntityQueryIT.java
@@ -19,11 +19,16 @@
package org.kie.kogito.index.postgresql.query;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.UUID;
import org.junit.jupiter.api.Test;
import org.kie.kogito.event.process.ProcessInstanceVariableDataEvent;
import org.kie.kogito.index.jpa.query.AbstractProcessInstanceEntityQueryIT;
+import org.kie.kogito.index.jpa.storage.ProcessDefinitionEntityStorage;
+import org.kie.kogito.index.model.ProcessDefinition;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
import org.kie.kogito.index.storage.ProcessInstanceStorage;
import org.kie.kogito.index.test.TestUtils;
import org.kie.kogito.testcontainers.quarkus.PostgreSqlQuarkusTestResource;
@@ -31,6 +36,8 @@ import
org.kie.kogito.testcontainers.quarkus.PostgreSqlQuarkusTestResource;
import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
+import jakarta.inject.Inject;
+
import static java.util.Collections.singletonList;
import static org.kie.kogito.index.json.JsonUtils.jsonFilter;
import static org.kie.kogito.index.test.QueryTestUtils.assertNotId;
@@ -41,6 +48,9 @@ import static
org.kie.kogito.persistence.api.query.QueryFilterFactory.*;
@QuarkusTestResource(PostgreSqlQuarkusTestResource.class)
class ProcessInstanceEntityQueryIT extends
AbstractProcessInstanceEntityQueryIT {
+ @Inject
+ ProcessDefinitionEntityStorage definitionStorage;
+
@Test
void testProcessInstanceVariables() {
String processId = "travels";
@@ -48,6 +58,13 @@ class ProcessInstanceEntityQueryIT extends
AbstractProcessInstanceEntityQueryIT
ProcessInstanceStorage storage = getStorage();
ProcessInstanceVariableDataEvent variableEvent =
TestUtils.createProcessInstanceVariableEvent(processInstanceId, processId,
"John", 28, false,
List.of("Super", "Astonishing", "TheRealThing"));
+ final String version = "1.0";
+ ProcessDefinitionKey key = new ProcessDefinitionKey(processId,
version);
+ ProcessDefinition definitionEvent =
TestUtils.createProcessDefinition(processId, version, Set.of());
+ definitionEvent.setAnnotations(Set.of("Javierito", "Another"));
+ definitionEvent.setMetadata(Map.of("name", "Javierito", "hobbies",
List.of("community", "first")));
+ variableEvent.setKogitoProcessInstanceVersion(version);
+ definitionStorage.put(key, definitionEvent);
storage.indexVariable(variableEvent);
queryAndAssert(assertWithId(), storage,
singletonList(jsonFilter(equalTo("variables.traveller.name", "John"))), null,
null, null,
processInstanceId);
@@ -123,5 +140,11 @@ class ProcessInstanceEntityQueryIT extends
AbstractProcessInstanceEntityQueryIT
processInstanceId);
queryAndAssert(assertNotId(), storage,
singletonList(jsonFilter(containsAll("variables.traveller.aliases",
List.of("Super", "TheDummyThing")))), null, null, null,
processInstanceId);
+ queryAndAssert(assertWithId(), storage,
singletonList(jsonFilter(equalTo("definition.metadata.name", "Javierito"))),
null, null, null, processInstanceId);
+ queryAndAssert(assertNotId(), storage,
singletonList(jsonFilter(equalTo("definition.metadata.name", "Fulanito"))),
null, null, null, processInstanceId);
+ queryAndAssert(assertWithId(), storage,
singletonList(jsonFilter(contains("definition.metadata.hobbies",
"community"))), null, null, null, processInstanceId);
+ queryAndAssert(assertNotId(), storage,
singletonList(jsonFilter(contains("definition.metadata.hobbies",
"commercial"))), null, null, null, processInstanceId);
+ queryAndAssert(assertWithId(), storage,
singletonList(contains("definition.annotations", "Javierito")), null, null,
null, processInstanceId);
+ queryAndAssert(assertNotId(), storage,
singletonList(contains("definition.annotations", "Fulanito")), null, null,
null, processInstanceId);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]