From 87d6b8f0825140b46aa074abd33f38b214455f8a Mon Sep 17 00:00:00 2001 From: delchev Date: Thu, 2 Apr 2026 18:40:20 +0300 Subject: [PATCH 1/2] definition name and business key added in tables of tasks --- .../engine/bpm/flowable/dto/TaskDTO.java | 51 +++++++++++++++++++ .../flowable/endpoint/BpmInboxEndpoint.java | 6 +++ .../META-INF/dirigible/inbox/index.html | 16 ++++-- .../translations/bg-BG/translations.json | 6 ++- .../translations/en-US/translations.json | 2 + .../views/bpm-tasks.html | 16 ++++-- 6 files changed, 87 insertions(+), 10 deletions(-) diff --git a/components/engine/engine-bpm-flowable/src/main/java/org/eclipse/dirigible/components/engine/bpm/flowable/dto/TaskDTO.java b/components/engine/engine-bpm-flowable/src/main/java/org/eclipse/dirigible/components/engine/bpm/flowable/dto/TaskDTO.java index 47f2bf0d3c9..bb4937d25a8 100644 --- a/components/engine/engine-bpm-flowable/src/main/java/org/eclipse/dirigible/components/engine/bpm/flowable/dto/TaskDTO.java +++ b/components/engine/engine-bpm-flowable/src/main/java/org/eclipse/dirigible/components/engine/bpm/flowable/dto/TaskDTO.java @@ -40,6 +40,13 @@ public class TaskDTO { /** The process instance id. */ private String processInstanceId; + /** The process instance id. */ + private String processDefinitionId; + + private String processDefinitionName; + + private String processInstanceBusinessKey; + /** * Gets the candidate users. * @@ -184,4 +191,48 @@ public Date getCreateTime() { public void setCreateTime(Date createTime) { this.createTime = createTime; } + + /** + * @return the processDefinitionId + */ + public String getProcessDefinitionId() { + return processDefinitionId; + } + + /** + * @param processDefinitionId the processDefinitionId to set + */ + public void setProcessDefinitionId(String processDefinitionId) { + this.processDefinitionId = processDefinitionId; + } + + /** + * @return the processDefinitionName + */ + public String getProcessDefinitionName() { + return processDefinitionName; + } + + /** + * @param processDefinitionName the processDefinitionName to set + */ + public void setProcessDefinitionName(String processDefinitionName) { + this.processDefinitionName = processDefinitionName; + } + + /** + * @return the processInstanceBusinessKey + */ + public String getProcessInstanceBusinessKey() { + return processInstanceBusinessKey; + } + + /** + * @param processInstanceBusinessKey the processInstanceBusinessKey to set + */ + public void setProcessInstanceBusinessKey(String processInstanceBusinessKey) { + this.processInstanceBusinessKey = processInstanceBusinessKey; + } + + } diff --git a/components/engine/engine-bpm-flowable/src/main/java/org/eclipse/dirigible/components/engine/bpm/flowable/endpoint/BpmInboxEndpoint.java b/components/engine/engine-bpm-flowable/src/main/java/org/eclipse/dirigible/components/engine/bpm/flowable/endpoint/BpmInboxEndpoint.java index 83702c24f52..15b80ccc75c 100644 --- a/components/engine/engine-bpm-flowable/src/main/java/org/eclipse/dirigible/components/engine/bpm/flowable/endpoint/BpmInboxEndpoint.java +++ b/components/engine/engine-bpm-flowable/src/main/java/org/eclipse/dirigible/components/engine/bpm/flowable/endpoint/BpmInboxEndpoint.java @@ -11,6 +11,7 @@ import org.eclipse.dirigible.components.api.security.UserFacade; import org.eclipse.dirigible.components.base.endpoint.BaseEndpoint; +import org.eclipse.dirigible.components.engine.bpm.flowable.dto.ProcessInstanceData; import org.eclipse.dirigible.components.engine.bpm.flowable.dto.TaskActionData; import org.eclipse.dirigible.components.engine.bpm.flowable.dto.TaskDTO; import org.eclipse.dirigible.components.engine.bpm.flowable.service.BpmService; @@ -85,6 +86,11 @@ private TaskDTO mapToDTO(Task task) { .map(IdentityLinkInfo::getGroupId) .filter(Objects::nonNull) .collect(Collectors.joining(","))); + ProcessInstanceData processInstance = bpmService.getProcessInstanceById(task.getProcessInstanceId()); + dto.setProcessInstanceBusinessKey(processInstance.getBusinessKey()); + dto.setProcessDefinitionId(processInstance.getProcessDefinitionId()); + dto.setProcessDefinitionName(processInstance.getProcessDefinitionName()); + return dto; } diff --git a/components/resources/resources-inbox/src/main/resources/META-INF/dirigible/inbox/index.html b/components/resources/resources-inbox/src/main/resources/META-INF/dirigible/inbox/index.html index 9ed75dd5a06..13d1acc3401 100644 --- a/components/resources/resources-inbox/src/main/resources/META-INF/dirigible/inbox/index.html +++ b/components/resources/resources-inbox/src/main/resources/META-INF/dirigible/inbox/index.html @@ -48,23 +48,27 @@
{{'inbox:candidateTasks' | t:'Candid - + + + - + + + @@ -80,24 +84,28 @@
{{'inbox:assignedTasks' | t:'Assigne
{{'inbox:taskId' | t:'Task Id'}}{{'inbox:processDefinitionName' | t:'Definition Name'}}{{'inbox:processInstanceBusinessKey' | t:'Business Key'}} {{'inbox:taskName' | t:'Task Name'}} {{'inbox:assignee' | t:'Assignee'}} {{'inbox:candidateUsers' | t:'Candidate Users'}} {{'inbox:candidateGroups' | t:'Candidate Groups'}} {{'inbox:processInstanceId' | t:'Process Instance Id'}}{{'inbox:taskId' | t:'Task Id'}} {{'inbox:createTime' | t:'Create Time'}}
{{next.id}}{{next.processDefinitionName}}{{next.processInstanceBusinessKey}} {{next.name}} {{next.assignee}} {{next.candidateUsers}} {{next.candidateGroups}} {{next.processInstanceId}}{{next.id}} {{formatTime(next.createTime)}}
- + + + - + + +
{{'inbox:taskId' | t:'Task Id'}}{{'inbox:processDefinitionName' | t:'Definition Name'}}{{'inbox:processInstanceBusinessKey' | t:'Business Key'}} {{'inbox:taskName' | t:'Task Name'}} {{'inbox:assignee' | t:'Assignee'}} {{'inbox:candidateUsers' | t:'Candidate Users'}} {{'inbox:candidateGroups' | t:'Candidate Groups'}} {{'inbox:processInstanceId' | t:'Process Instance Id'}}{{'inbox:taskId' | t:'Task Id'}} {{'inbox:createTime' | t:'Create Time'}} {{'inbox:formKey' | t:'Form Key'}}
{{next.id}}{{next.processDefinitionName}}{{next.processInstanceBusinessKey}} {{next.name}} {{next.assignee}} {{next.candidateUsers}} {{next.candidateGroups}} {{next.processInstanceId}}{{next.id}} {{formatTime(next.createTime)}} Candidate tasks - + + + - + + + @@ -72,24 +76,28 @@
Assigned tasks
Task IdDefinition NameBusiness Key Task Name Assignee Candidate Users Candidate Groups Process Instance IdTask Id Create Time
{{next.id}}{{next.processDefinitionName}}{{next.processInstanceBusinessKey}} {{next.name}} {{next.assignee}} {{next.candidateUsers}} {{next.candidateGroups}} {{next.processInstanceId}}{{next.id}} {{formatTime(next.createTime)}}
- + + + - + + +
Task IdDefinition NameBusiness Key Task Name Assignee Candidate Users Candidate Groups Process Instance IdTask Id Create Time Form Key
{{next.id}}{{next.processDefinitionName}}{{next.processInstanceBusinessKey}} {{next.name}} {{next.assignee}} {{next.candidateUsers}} {{next.candidateGroups}} {{next.processInstanceId}}{{next.id}} {{formatTime(next.createTime)}} From 738a3da1c318e90150ca146ed5596240ed7e2ca5 Mon Sep 17 00:00:00 2001 From: delchev Date: Mon, 6 Apr 2026 19:25:44 +0300 Subject: [PATCH 2/2] clean up of checksums on unpublish --- .../initializers/definition/DefinitionRepository.java | 10 ++++++++++ .../initializers/definition/DefinitionService.java | 9 +++++++++ .../SynchronizationWatcherPublisherHandler.java | 10 ++++++++++ .../synchronizer/table/TableAlterProcessor.java | 10 ++++------ .../eclipse/dirigible/database/sql/DataTypeUtils.java | 3 +++ 5 files changed, 36 insertions(+), 6 deletions(-) diff --git a/components/core/core-initializers/src/main/java/org/eclipse/dirigible/components/initializers/definition/DefinitionRepository.java b/components/core/core-initializers/src/main/java/org/eclipse/dirigible/components/initializers/definition/DefinitionRepository.java index 33d0adeb515..c84ac064632 100644 --- a/components/core/core-initializers/src/main/java/org/eclipse/dirigible/components/initializers/definition/DefinitionRepository.java +++ b/components/core/core-initializers/src/main/java/org/eclipse/dirigible/components/initializers/definition/DefinitionRepository.java @@ -33,4 +33,14 @@ public interface DefinitionRepository extends JpaRepository { @Query("update Definition d set d.checksum = :checksum where d.type in :types") void updateChecksums(String checksum, Set types); + /** + * Initialize checksums. + * + * @param location the location + */ + @Modifying + @Transactional + @Query("update Definition d set d.checksum = '' where d.location like :location") + void initializeChecksums(String location); + } diff --git a/components/core/core-initializers/src/main/java/org/eclipse/dirigible/components/initializers/definition/DefinitionService.java b/components/core/core-initializers/src/main/java/org/eclipse/dirigible/components/initializers/definition/DefinitionService.java index 17757e3ac7b..54475008d7a 100644 --- a/components/core/core-initializers/src/main/java/org/eclipse/dirigible/components/initializers/definition/DefinitionService.java +++ b/components/core/core-initializers/src/main/java/org/eclipse/dirigible/components/initializers/definition/DefinitionService.java @@ -131,4 +131,13 @@ public void updateChecksums(String checksum, Set types) { definitionRepository.updateChecksums(checksum, types); } + /** + * Initialize checksums. + * + * @param location the location + */ + public void initializeChecksums(String location) { + definitionRepository.initializeChecksums(location + "%"); + } + } diff --git a/components/core/core-initializers/src/main/java/org/eclipse/dirigible/components/initializers/synchronizer/SynchronizationWatcherPublisherHandler.java b/components/core/core-initializers/src/main/java/org/eclipse/dirigible/components/initializers/synchronizer/SynchronizationWatcherPublisherHandler.java index c0ae004adce..461a2b06d45 100644 --- a/components/core/core-initializers/src/main/java/org/eclipse/dirigible/components/initializers/synchronizer/SynchronizationWatcherPublisherHandler.java +++ b/components/core/core-initializers/src/main/java/org/eclipse/dirigible/components/initializers/synchronizer/SynchronizationWatcherPublisherHandler.java @@ -11,6 +11,8 @@ import org.eclipse.dirigible.components.base.publisher.PublisherHandler; import org.eclipse.dirigible.components.base.synchronizer.SynchronizationWatcher; +import org.eclipse.dirigible.components.initializers.definition.DefinitionService; +import org.eclipse.dirigible.repository.api.IRepositoryStructure; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @@ -27,6 +29,9 @@ public class SynchronizationWatcherPublisherHandler implements PublisherHandler @Autowired private SynchronizationWatcher synchronizationWatcher; + @Autowired + private DefinitionService definitionService; + /** * Before publish. * @@ -66,6 +71,11 @@ public void beforeUnpublish(String location) { */ @Override public void afterUnpublish(String location) { + String path = location; + if (location.startsWith(IRepositoryStructure.PATH_REGISTRY_PUBLIC)) { + path = path.substring(IRepositoryStructure.PATH_REGISTRY_PUBLIC.length()); + } + definitionService.initializeChecksums(path); synchronizationWatcher.force(); } diff --git a/components/data/data-structures/src/main/java/org/eclipse/dirigible/components/data/structures/synchronizer/table/TableAlterProcessor.java b/components/data/data-structures/src/main/java/org/eclipse/dirigible/components/data/structures/synchronizer/table/TableAlterProcessor.java index be5473d940f..ca55b3c6e3c 100644 --- a/components/data/data-structures/src/main/java/org/eclipse/dirigible/components/data/structures/synchronizer/table/TableAlterProcessor.java +++ b/components/data/data-structures/src/main/java/org/eclipse/dirigible/components/data/structures/synchronizer/table/TableAlterProcessor.java @@ -76,8 +76,7 @@ public static void execute(Connection connection, Table tableModel) throws SQLEx // ADD iteration for (TableColumn columnModel : tableModel.getColumns()) { - String name = "\"" + columnModel.getName() + "\""; - String nameOriginal = name; + String name = columnModel.getName(); DataType type = DataType.valueOfByName(columnModel.getType()); String length = columnModel.getLength(); @@ -112,7 +111,7 @@ public static void execute(Connection connection, Table tableModel) throws SQLEx modelColumnNames.add(name.toUpperCase()); - String nameOriginalCanonical = nameOriginal.toUpperCase(); + String nameOriginalCanonical = name.toUpperCase(); if (!columnDefinitions.containsKey(nameOriginalCanonical)) { AlterTableBuilder alterTableBuilder = SqlFactory.getNative(connection) @@ -120,7 +119,7 @@ public static void execute(Connection connection, Table tableModel) throws SQLEx .table(tableName); alterTableBuilder.add() - .column(name, type, isPrimaryKey, isNullable, isUnique, args); + .column("\"" + name + "\"", type, isPrimaryKey, isNullable, isUnique, args); if (!isNullable) { throw new SQLException(String.format(INCOMPATIBLE_CHANGE_OF_TABLE, tableName, name, "NOT NULL")); @@ -144,13 +143,12 @@ public static void execute(Connection connection, Table tableModel) throws SQLEx // DROP iteration for (String columnName : columnDefinitions.keySet()) { - columnName = "\"" + columnName + "\""; if (!modelColumnNames.contains(columnName.toUpperCase())) { AlterTableBuilder alterTableBuilder = SqlFactory.getNative(connection) .alter() .table(tableName); alterTableBuilder.drop() - .column(columnName, DataType.BOOLEAN); + .column("\"" + columnName + "\"", DataType.BOOLEAN); executeAlterBuilder(connection, alterTableBuilder); } } diff --git a/modules/database/database-sql/src/main/java/org/eclipse/dirigible/database/sql/DataTypeUtils.java b/modules/database/database-sql/src/main/java/org/eclipse/dirigible/database/sql/DataTypeUtils.java index f6ade7ade5e..3570fbcdc76 100644 --- a/modules/database/database-sql/src/main/java/org/eclipse/dirigible/database/sql/DataTypeUtils.java +++ b/modules/database/database-sql/src/main/java/org/eclipse/dirigible/database/sql/DataTypeUtils.java @@ -100,6 +100,8 @@ public class DataTypeUtils { private static final String TIMESTAMP = "TIMESTAMP"; /** The Constant DATE. */ private static final String DATE = "DATE"; + /** The Constant DATE. */ + private static final String DATETIME = "DATETIME"; /** The Constant TEXT. */ private static final String TEXT = "TEXT"; /** The Constant CHARACTER. */ @@ -275,6 +277,7 @@ public class DataTypeUtils { UNIFIED_STRING_FROM_DATABASE_TYPE.put(BINARY_VARYING, BLOB); UNIFIED_STRING_FROM_DATABASE_TYPE.put(BINARY_LARGE_OBJECT, BLOB); UNIFIED_STRING_FROM_DATABASE_TYPE.put(BYTEA, BLOB); + UNIFIED_STRING_FROM_DATABASE_TYPE.put(DATETIME, TIMESTAMP); }