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 f30e90c7ed..0f9ca76289 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 @@ -371,6 +371,7 @@ type UserTaskInstance { comments: [Comment!] attachments: [Attachment!] externalReferenceId : String + slaDueDate: DateTime } input UserTaskInstanceArgument { @@ -490,4 +491,4 @@ input JobOrderBy { retries: OrderBy lastUpdate: OrderBy executionCounter: OrderBy -} \ No newline at end of file +} diff --git a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/UserTaskInstance.java b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/UserTaskInstance.java index b87d73777f..0aca4380a1 100644 --- a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/UserTaskInstance.java +++ b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/UserTaskInstance.java @@ -18,6 +18,8 @@ */ package org.kie.kogito.index.model; +import java.time.ZonedDateTime; + import com.fasterxml.jackson.databind.node.ObjectNode; public class UserTaskInstance extends UserTaskInstanceMeta { @@ -29,6 +31,7 @@ public class UserTaskInstance extends UserTaskInstanceMeta { private ObjectNode outputs; private String endpoint; private String externalReferenceId; + private ZonedDateTime slaDueDate; public String getProcessId() { return processId; @@ -67,6 +70,7 @@ public String toString() { ", inputs=" + inputs + ", outputs=" + outputs + ", endpoint='" + endpoint + '\'' + + ", slaDueDate=" + slaDueDate + "} " + super.toString(); } @@ -103,4 +107,12 @@ public String getExternalReferenceId() { public void setExternalReferenceId(String externalReferenceId) { this.externalReferenceId = externalReferenceId; } + + public ZonedDateTime getSlaDueDate() { + return slaDueDate; + } + + public void setSlaDueDate(ZonedDateTime slaDueDate) { + this.slaDueDate = slaDueDate; + } } diff --git a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/UserTaskInstanceStateEventMerger.java b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/UserTaskInstanceStateEventMerger.java index 8e813f07e5..a6d11e33f6 100644 --- a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/UserTaskInstanceStateEventMerger.java +++ b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/UserTaskInstanceStateEventMerger.java @@ -62,6 +62,7 @@ public UserTaskInstance merge(UserTaskInstance task, UserTaskInstanceDataEvent(), Comment.class)); ut.setAttachments(reader.readCollection(ATTACHMENTS, new ArrayList<>(), Attachment.class)); ut.setExternalReferenceId(reader.readString(EXTERNAL_REFERENCE_ID)); + ut.setSlaDueDate(dateToZonedDateTime(reader.readDate(SLA_DUE_DATE))); return ut; } @@ -121,6 +123,7 @@ public void writeTo(ProtoStreamWriter writer, UserTaskInstance ut) throws IOExce writer.writeCollection(COMMENTS, ut.getComments(), Comment.class); writer.writeCollection(ATTACHMENTS, ut.getAttachments(), Attachment.class); writer.writeString(EXTERNAL_REFERENCE_ID, ut.getExternalReferenceId()); + writer.writeDate(SLA_DUE_DATE, zonedDateTimeToDate(ut.getSlaDueDate())); } @Override diff --git a/data-index/data-index-storage/data-index-storage-infinispan/src/test/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshallerTest.java b/data-index/data-index-storage/data-index-storage-infinispan/src/test/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshallerTest.java index 07f98b1ac7..687c2d0fe0 100644 --- a/data-index/data-index-storage/data-index-storage-infinispan/src/test/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshallerTest.java +++ b/data-index/data-index-storage/data-index-storage-infinispan/src/test/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshallerTest.java @@ -61,6 +61,7 @@ import static org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.REFERENCE_NAME; import static org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.ROOT_PROCESS_ID; import static org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.ROOT_PROCESS_INSTANCE_ID; +import static org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.SLA_DUE_DATE; import static org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.STARTED; import static org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.STATE; import static org.mockito.ArgumentMatchers.any; @@ -102,6 +103,7 @@ static void setup() { TASK.setLastUpdate(ZonedDateTime.now(ZoneOffset.UTC).truncatedTo(ChronoUnit.MILLIS)); TASK.setEndpoint("endpoint"); TASK.setExternalReferenceId("externalReferenceId"); + TASK.setSlaDueDate(time); TASK.setComments(List.of(Comment.builder() .id("attId") .content("Text comment") @@ -147,6 +149,7 @@ void testReadFrom() throws IOException { when(reader.readCollection(eq(COMMENTS), any(), eq(Comment.class))).thenReturn(TASK.getComments()); when(reader.readCollection(eq(ATTACHMENTS), any(), eq(Attachment.class))).thenReturn(TASK.getAttachments()); when(reader.readString(EXTERNAL_REFERENCE_ID)).thenReturn(TASK.getExternalReferenceId()); + when(reader.readDate(SLA_DUE_DATE)).thenReturn(marshaller.zonedDateTimeToDate(TASK.getSlaDueDate())); UserTaskInstance task = marshaller.readFrom(reader); @@ -178,6 +181,7 @@ void testReadFrom() throws IOException { inOrder.verify(reader).readCollection(COMMENTS, new ArrayList<>(), Comment.class); inOrder.verify(reader).readCollection(ATTACHMENTS, new ArrayList<>(), Attachment.class); inOrder.verify(reader).readString(EXTERNAL_REFERENCE_ID); + inOrder.verify(reader).readDate(SLA_DUE_DATE); verifyNoMoreInteractions(reader); } @@ -214,6 +218,7 @@ void testWriteTo() throws IOException { inOrder.verify(writer).writeCollection(COMMENTS, TASK.getComments(), Comment.class); inOrder.verify(writer).writeCollection(ATTACHMENTS, TASK.getAttachments(), Attachment.class); inOrder.verify(writer).writeString(EXTERNAL_REFERENCE_ID, TASK.getExternalReferenceId()); + inOrder.verify(writer).writeDate(SLA_DUE_DATE, marshaller.zonedDateTimeToDate(TASK.getSlaDueDate())); verifyNoMoreInteractions(writer); } diff --git a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/UserTaskInstanceEntity.java b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/UserTaskInstanceEntity.java index 314174ed1a..7b97570c7b 100644 --- a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/UserTaskInstanceEntity.java +++ b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/UserTaskInstanceEntity.java @@ -90,8 +90,8 @@ public class UserTaskInstanceEntity extends AbstractEntity { private List comments; @OneToMany(cascade = CascadeType.ALL, mappedBy = "userTask", orphanRemoval = true, fetch = FetchType.LAZY) private List attachments; - private String externalReferenceId; + private ZonedDateTime slaDueDate; public String getExternalReferenceId() { return externalReferenceId; @@ -294,6 +294,14 @@ public void setAttachments(List attachments) { this.attachments = attachments; } + public ZonedDateTime getSlaDueDate() { + return slaDueDate; + } + + public void setSlaDueDate(ZonedDateTime slaDueDate) { + this.slaDueDate = slaDueDate; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -338,6 +346,7 @@ public String toString() { ", endpoint='" + endpoint + '\'' + ", comments='" + comments + '\'' + ", attachments='" + attachments + '\'' + + ", slaDueDate=" + slaDueDate + '}'; } } diff --git a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/UserTaskInstanceEntityStorage.java b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/UserTaskInstanceEntityStorage.java index 5204db6574..66cb04d03d 100644 --- a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/UserTaskInstanceEntityStorage.java +++ b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/UserTaskInstanceEntityStorage.java @@ -201,6 +201,7 @@ private void indexState(UserTaskInstanceEntity task, UserTaskInstanceStateDataEv task.setLastUpdate(toZonedDateTime(event.getData().getEventDate())); task.setReferenceName(event.getData().getUserTaskReferenceName()); task.setExternalReferenceId(body.getExternalReferenceId()); + task.setSlaDueDate(toZonedDateTime(body.getSlaDueDate())); } private String getEndpoint(URI source, String pId, String taskName, String taskId) { diff --git a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.0.7__add_sla_due_date_tasks.sql b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.0.7__add_sla_due_date_tasks.sql new file mode 100644 index 0000000000..2164293a98 --- /dev/null +++ b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.0.7__add_sla_due_date_tasks.sql @@ -0,0 +1,20 @@ +/* + * 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 tasks ADD sla_due_date timestamp; diff --git a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntity.java b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntity.java index c97c753dc0..ca21ba4554 100644 --- a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntity.java +++ b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntity.java @@ -78,6 +78,8 @@ public class UserTaskInstanceEntity { private String externalReferenceId; + private Long slaDueDate; + public String getId() { return id; } @@ -278,6 +280,14 @@ public String getExternalReferenceId() { return externalReferenceId; } + public Long getSlaDueDate() { + return slaDueDate; + } + + public void setSlaDueDate(Long slaDueDate) { + this.slaDueDate = slaDueDate; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -322,6 +332,7 @@ public String toString() { ", endpoint='" + endpoint + '\'' + ", comments='" + comments + '\'' + ", attachments='" + attachments + '\'' + + ", slaDueDate=" + slaDueDate + '}'; } diff --git a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapper.java b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapper.java index 1a8b9add5d..707ea28d7a 100644 --- a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapper.java +++ b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapper.java @@ -80,6 +80,7 @@ public UserTaskInstanceEntity mapToEntity(String key, UserTaskInstance instance) entity.setComments(Optional.ofNullable(instance.getComments()).map(comments -> comments.stream().map(this::fromComment).collect(toList())).orElse(null)); entity.setAttachments(Optional.ofNullable(instance.getAttachments()).map(attachments -> attachments.stream().map(this::fromAttachment).collect(toList())).orElse(null)); entity.setExternalReferenceId(instance.getExternalReferenceId()); + entity.setSlaDueDate(zonedDateTimeToInstant(instance.getSlaDueDate())); return entity; } @@ -115,6 +116,7 @@ public UserTaskInstance mapToModel(UserTaskInstanceEntity entity) { instance.setComments(Optional.ofNullable(entity.getComments()).map(comments -> comments.stream().map(this::toComment).collect(toList())).orElse(null)); instance.setAttachments(Optional.ofNullable(entity.getAttachments()).map(attachments -> attachments.stream().map(this::toAttachment).collect(toList())).orElse(null)); instance.setExternalReferenceId(entity.getExternalReferenceId()); + instance.setSlaDueDate(instantToZonedDateTime(entity.getSlaDueDate())); return instance; } diff --git a/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapperTest.java b/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapperTest.java index 013ba7a041..6a0f6f9b36 100644 --- a/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapperTest.java +++ b/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapperTest.java @@ -116,6 +116,7 @@ static void setup() { userTaskInstance.setComments(List.of(comment)); userTaskInstance.setAttachments(List.of(attachment)); userTaskInstance.setExternalReferenceId(externalReferenceId); + userTaskInstance.setSlaDueDate(time); userTaskInstanceEntity = new UserTaskInstanceEntity(); userTaskInstanceEntity.setId(testId); @@ -142,6 +143,7 @@ static void setup() { userTaskInstanceEntity.setComments(List.of(commentEntity)); userTaskInstanceEntity.setAttachments(List.of(attachmentEntity)); userTaskInstanceEntity.setExternalReferenceId(externalReferenceId); + userTaskInstanceEntity.setSlaDueDate(zonedDateTimeToInstant(time)); } @Test diff --git a/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.0.7__add_sla_due_date_tasks.sql b/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.0.7__add_sla_due_date_tasks.sql new file mode 100644 index 0000000000..84c67e7eef --- /dev/null +++ b/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.0.7__add_sla_due_date_tasks.sql @@ -0,0 +1,20 @@ +/* + * 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 tasks ADD COLUMN IF NOT EXISTS sla_due_date timestamp; 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 ed6d7c09ee..3460ff5a26 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 @@ -240,6 +240,7 @@ message UserTaskInstance { /* @Field(store = Store.YES) */ repeated Attachment attachments = 24; optional string externalReferenceId = 25; + optional int64 slaDueDate = 26; } /* @Indexed */ @@ -279,6 +280,7 @@ message UserTaskInstanceMeta { /* @Field(store = Store.YES) */ repeated Attachment attachments = 18; optional string externalReferenceId = 25; + optional int64 slaDueDate = 26; } /* @Indexed */