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 741c0d4e89..0317ec61c5 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 @@ -96,6 +96,7 @@ type ProcessInstance { identity: String createdBy: String updatedBy: String + slaDueDate: DateTime } type ProcessInstanceError { @@ -135,6 +136,7 @@ type NodeInstance { exit: DateTime definitionId: String! nodeId: String! + slaDueDate: DateTime } enum MilestoneStatus { diff --git a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/NodeInstance.java b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/NodeInstance.java index 1e22527c59..ab9df6cadd 100644 --- a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/NodeInstance.java +++ b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/NodeInstance.java @@ -38,6 +38,8 @@ public class NodeInstance { @JsonProperty("leaveTime") private ZonedDateTime exit; + private ZonedDateTime slaDueDate; + @JsonProperty("nodeDefinitionId") private String definitionId; @@ -97,6 +99,14 @@ public void setName(String name) { this.name = name; } + public ZonedDateTime getSlaDueDate() { + return slaDueDate; + } + + public void setSlaDueDate(ZonedDateTime slaDueDate) { + this.slaDueDate = slaDueDate; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -125,6 +135,7 @@ public String toString() { ", type='" + type + '\'' + ", enter=" + enter + ", exit=" + exit + + ", slaDueDate=" + slaDueDate + ", definitionId='" + definitionId + '\'' + '}'; } diff --git a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessInstanceMeta.java b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessInstanceMeta.java index d211ea198d..09441ca019 100644 --- a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessInstanceMeta.java +++ b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessInstanceMeta.java @@ -49,6 +49,7 @@ public class ProcessInstanceMeta { @JsonProperty("updatedBy") private String updatedBy; private ZonedDateTime lastUpdate; + private ZonedDateTime slaDueDate; public String getId() { return id; @@ -186,6 +187,14 @@ public void setUpdatedBy(String updatedBy) { this.updatedBy = updatedBy; } + public ZonedDateTime getSlaDueDate() { + return slaDueDate; + } + + public void setSlaDueDate(ZonedDateTime slaDueDate) { + this.slaDueDate = slaDueDate; + } + @Override public String toString() { return "ProcessInstanceMeta{" + diff --git a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceNodeDataEventMerger.java b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceNodeDataEventMerger.java index d800dfd226..bb7c39a5bc 100644 --- a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceNodeDataEventMerger.java +++ b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceNodeDataEventMerger.java @@ -63,6 +63,7 @@ public ProcessInstance merge(ProcessInstance pi, ProcessInstanceDataEvent dat nodeInstance.setNodeId(body.getNodeDefinitionId()); nodeInstance.setName(body.getNodeName()); nodeInstance.setType(body.getNodeType()); + nodeInstance.setSlaDueDate(toZonedDateTime(body.getSlaDueDate())); ZonedDateTime eventDate = toZonedDateTime(body.getEventDate()); switch (body.getEventType()) { case EVENT_TYPE_ENTER: diff --git a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceStateDataEventMerger.java b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceStateDataEventMerger.java index b49036fb0c..a7be6d0ea3 100644 --- a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceStateDataEventMerger.java +++ b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceStateDataEventMerger.java @@ -63,6 +63,7 @@ public ProcessInstance merge(ProcessInstance pi, ProcessInstanceDataEvent dat pi.setLastUpdate(toZonedDateTime(event.getTime())); pi.setDefinition(definitions(event)); pi.setUpdatedBy(event.getData().getEventUser()); + pi.setSlaDueDate(toZonedDateTime(event.getData().getSlaDueDate())); LOGGER.debug("Value after merging: {}", pi); return pi; } diff --git a/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/NodeInstanceMarshaller.java b/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/NodeInstanceMarshaller.java index 194ad08caa..dd4b5f557c 100644 --- a/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/NodeInstanceMarshaller.java +++ b/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/NodeInstanceMarshaller.java @@ -42,6 +42,7 @@ public NodeInstance readFrom(ProtoStreamReader reader) throws IOException { node.setExit(dateToZonedDateTime(reader.readDate("exit"))); node.setDefinitionId(reader.readString("definitionId")); node.setNodeId(reader.readString("nodeId")); + node.setSlaDueDate(dateToZonedDateTime(reader.readDate("slaDueDate"))); return node; } @@ -54,6 +55,7 @@ public void writeTo(ProtoStreamWriter writer, NodeInstance node) throws IOExcept writer.writeDate("exit", zonedDateTimeToDate(node.getExit())); writer.writeString("definitionId", node.getDefinitionId()); writer.writeString("nodeId", node.getNodeId()); + writer.writeDate("slaDueDate", zonedDateTimeToDate(node.getSlaDueDate())); } @Override diff --git a/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/ProcessInstanceMarshaller.java b/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/ProcessInstanceMarshaller.java index ab391703aa..3e46ea2bf3 100644 --- a/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/ProcessInstanceMarshaller.java +++ b/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/ProcessInstanceMarshaller.java @@ -55,6 +55,7 @@ public class ProcessInstanceMarshaller extends AbstractMarshaller implements Mes protected static final String MILESTONES = "milestones"; protected static final String CREATED_BY = "createdBy"; protected static final String UPDATED_BY = "updatedBy"; + protected static final String SLA_DUE_DATE = "slaDueDate"; public ProcessInstanceMarshaller(ObjectMapper mapper) { super(mapper); @@ -84,6 +85,7 @@ public ProcessInstance readFrom(ProtoStreamReader reader) throws IOException { pi.setVersion(reader.readString(VERSION)); pi.setCreatedBy(reader.readString(CREATED_BY)); pi.setUpdatedBy(reader.readString(UPDATED_BY)); + pi.setSlaDueDate(dateToZonedDateTime(reader.readDate(SLA_DUE_DATE))); return pi; } @@ -110,6 +112,7 @@ public void writeTo(ProtoStreamWriter writer, ProcessInstance pi) throws IOExcep writer.writeString(VERSION, pi.getVersion()); writer.writeString(CREATED_BY, pi.getCreatedBy()); writer.writeString(UPDATED_BY, pi.getCreatedBy()); + writer.writeDate(SLA_DUE_DATE, zonedDateTimeToDate(pi.getSlaDueDate())); } @Override diff --git a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/NodeInstanceEntity.java b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/NodeInstanceEntity.java index 347e6f9a7f..51c5bef912 100644 --- a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/NodeInstanceEntity.java +++ b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/NodeInstanceEntity.java @@ -43,6 +43,7 @@ public class NodeInstanceEntity extends AbstractEntity { private String type; private ZonedDateTime enter; private ZonedDateTime exit; + private ZonedDateTime slaDueDate; private String definitionId; @ManyToOne(cascade = CascadeType.ALL, optional = false) @OnDelete(action = OnDeleteAction.CASCADE) @@ -106,6 +107,14 @@ public void setExit(ZonedDateTime exit) { this.exit = exit; } + public ZonedDateTime getSlaDueDate() { + return slaDueDate; + } + + public void setSlaDueDate(ZonedDateTime slaDueDate) { + this.slaDueDate = slaDueDate; + } + public ProcessInstanceEntity getProcessInstance() { return processInstance; } 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 7046de267b..a3a0b0ceb3 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 @@ -68,6 +68,9 @@ public class ProcessInstanceEntity extends AbstractEntity { private String createdBy; private String updatedBy; + + private ZonedDateTime slaDueDate; + @Convert(converter = JsonBinaryConverter.class) @Column(columnDefinition = "jsonb") private ObjectNode variables; @@ -203,6 +206,14 @@ public void setUpdatedBy(String updatedBy) { this.updatedBy = updatedBy; } + public ZonedDateTime getSlaDueDate() { + return slaDueDate; + } + + public void setSlaDueDate(ZonedDateTime slaDueDate) { + this.slaDueDate = slaDueDate; + } + public ObjectNode getVariables() { return variables; } @@ -286,6 +297,7 @@ public String toString() { ", lastUpdate=" + lastUpdate + ", createdBy=" + createdBy + ", updatedBy=" + updatedBy + + ", slaDueDate=" + slaDueDate + ", variables=" + variables + ", nodes=" + nodes + ", milestones=" + milestones + 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 8796f3204a..68e5d24844 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 @@ -179,6 +179,7 @@ private NodeInstanceEntity updateNode(NodeInstanceEntity nodeInstance, ProcessIn nodeInstance.setNodeId(body.getNodeDefinitionId()); nodeInstance.setName(body.getNodeName()); nodeInstance.setType(body.getNodeType()); + nodeInstance.setSlaDueDate(toZonedDateTime(body.getSlaDueDate())); ZonedDateTime eventDate = toZonedDateTime(body.getEventDate()); switch (body.getEventType()) { case EVENT_TYPE_ENTER: @@ -219,6 +220,7 @@ private void indexState(ProcessInstanceEntity pi, ProcessInstanceStateEventBody pi.setLastUpdate(toZonedDateTime(data.getEventDate())); pi.setAddons(addons); pi.setEndpoint(endpoint); + pi.setSlaDueDate(toZonedDateTime(data.getSlaDueDate())); } private void indexVariable(ProcessInstanceEntity pi, ProcessInstanceVariableEventBody data) { diff --git a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractProcessInstanceStorageIT.java b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractProcessInstanceStorageIT.java index b60f7ed300..f8f8c6674e 100644 --- a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractProcessInstanceStorageIT.java +++ b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractProcessInstanceStorageIT.java @@ -109,7 +109,7 @@ public void testProcessInstanceNodeEvent() { .hasSize(1); Assertions.assertThat(processInstance.getNodes().get(0)) - .hasNoNullFieldsOrPropertiesExcept("exit") + .hasNoNullFieldsOrPropertiesExcept("exit", "slaDueDate") .hasFieldOrPropertyWithValue("name", "nodeName") .hasFieldOrPropertyWithValue("type", "BoundaryEventNode") .hasFieldOrPropertyWithValue("definitionId", nodeDefinitionId) @@ -125,7 +125,7 @@ public void testProcessInstanceNodeEvent() { .hasSize(1); Assertions.assertThat(processInstance.getNodes().get(0)) - .hasNoNullFieldsOrProperties() + .hasNoNullFieldsOrPropertiesExcept("slaDueDate") .hasFieldOrPropertyWithValue("name", "nodeName") .hasFieldOrPropertyWithValue("type", "BoundaryEventNode") .hasFieldOrPropertyWithValue("definitionId", nodeDefinitionId) diff --git a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.0.6__add_sla_due_date_columns.sql b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.0.6__add_sla_due_date_columns.sql new file mode 100644 index 0000000000..fdd7838f41 --- /dev/null +++ b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.0.6__add_sla_due_date_columns.sql @@ -0,0 +1,21 @@ +/* + * 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 processes ADD sla_due_date timestamp; +ALTER TABLE nodes ADD sla_due_date timestamp; \ No newline at end of file diff --git a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntity.java b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntity.java index 28cef62442..5a66e6f298 100644 --- a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntity.java +++ b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntity.java @@ -70,6 +70,8 @@ public class ProcessInstanceEntity { String updatedBy; + Long slaDueDate; + public String getId() { return id; } @@ -238,6 +240,14 @@ public void setUpdatedBy(String updatedBy) { this.updatedBy = updatedBy; } + public Long getSlaDueDate() { + return slaDueDate; + } + + public void setSlaDueDate(Long slaDueDate) { + this.slaDueDate = slaDueDate; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -271,6 +281,8 @@ public static class NodeInstanceEntity { String definitionId; + Long slaDueDate; + public String getId() { return id; } @@ -327,6 +339,14 @@ public void setDefinitionId(String definitionId) { this.definitionId = definitionId; } + public Long getSlaDueDate() { + return slaDueDate; + } + + public void setSlaDueDate(Long slaDueDate) { + this.slaDueDate = slaDueDate; + } + @Override public boolean equals(Object o) { if (this == o) { diff --git a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntityMapper.java b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntityMapper.java index 16e1f13d3c..18e674d57e 100644 --- a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntityMapper.java +++ b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntityMapper.java @@ -77,6 +77,7 @@ public ProcessInstanceEntity mapToEntity(String key, ProcessInstance instance) { entity.setVersion(instance.getVersion()); entity.setCreatedBy(instance.getCreatedBy()); entity.setUpdatedBy(instance.getUpdatedBy()); + entity.setSlaDueDate(zonedDateTimeToInstant(instance.getSlaDueDate())); return entity; } @@ -108,6 +109,7 @@ public ProcessInstance mapToModel(ProcessInstanceEntity entity) { instance.setVersion(entity.getVersion()); instance.setCreatedBy(entity.getCreatedBy()); instance.setUpdatedBy(entity.getCreatedBy()); + instance.setSlaDueDate(instantToZonedDateTime(entity.getSlaDueDate())); return instance; } @@ -146,6 +148,7 @@ NodeInstance toNodeInstance(ProcessInstanceEntity.NodeInstanceEntity entity) { instance.setEnter(instantToZonedDateTime(entity.getEnter())); instance.setExit(instantToZonedDateTime(entity.getExit())); instance.setDefinitionId(entity.getDefinitionId()); + instance.setSlaDueDate(instantToZonedDateTime(entity.getSlaDueDate())); return instance; } @@ -162,6 +165,7 @@ ProcessInstanceEntity.NodeInstanceEntity fromNodeInstance(NodeInstance instance) entity.setEnter(zonedDateTimeToInstant(instance.getEnter())); entity.setExit(zonedDateTimeToInstant(instance.getExit())); entity.setDefinitionId(instance.getDefinitionId()); + entity.setSlaDueDate(zonedDateTimeToInstant(instance.getSlaDueDate())); return entity; } diff --git a/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.0.6__add_sla_due_date_columns.sql b/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.0.6__add_sla_due_date_columns.sql new file mode 100644 index 0000000000..58b83a3266 --- /dev/null +++ b/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.0.6__add_sla_due_date_columns.sql @@ -0,0 +1,21 @@ +/* + * 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 IF exists processes ADD COLUMN IF NOT EXISTS sla_due_date timestamp; +ALTER TABLE IF exists nodes ADD COLUMN IF NOT EXISTS sla_due_date timestamp; \ No newline at end of file diff --git a/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto b/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto index 5c23eecefa..ed6d7c09ee 100644 --- a/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto +++ b/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto @@ -153,6 +153,7 @@ message ProcessInstance { optional string createdBy = 20; /* @Field(store = Store.YES) */ optional string updatedBy = 21; + optional int64 slaDueDate = 22; } /* @Indexed */ @@ -177,6 +178,7 @@ message NodeInstance { optional string definitionId = 6; /* @Field(store = Store.YES) */ optional string nodeId = 7; + optional int64 slaDueDate = 8; } /* @Indexed */