From e859262f25bb7de17d047f5e9efc34b46adc012e Mon Sep 17 00:00:00 2001 From: Mario Serrano Date: Thu, 16 Apr 2026 10:06:25 -0500 Subject: [PATCH 1/7] feat: add custom payment provider and extra fields to account payment provider --- .../modules/saas/AccountPaymentProcessor.java | 21 +++++-- .../dynamia/modules/saas/domain/Account.java | 11 ++++ .../saas/domain/AccountPaymentProvider.java | 61 ++++++++++++++++++- .../META-INF/descriptors/AccountForm.yml | 4 +- .../AccountPaymentProviderForm.yml | 25 +++++++- .../AccountPaymentProviderTable.yml | 1 - .../descriptors/AccountRegionForm.yml | 3 + .../descriptors/AccountRegionTable.yml | 3 +- 8 files changed, 119 insertions(+), 10 deletions(-) diff --git a/extensions/saas/sources/core/src/main/java/tools/dynamia/modules/saas/AccountPaymentProcessor.java b/extensions/saas/sources/core/src/main/java/tools/dynamia/modules/saas/AccountPaymentProcessor.java index 4d44fca7..c604aaad 100644 --- a/extensions/saas/sources/core/src/main/java/tools/dynamia/modules/saas/AccountPaymentProcessor.java +++ b/extensions/saas/sources/core/src/main/java/tools/dynamia/modules/saas/AccountPaymentProcessor.java @@ -1,9 +1,5 @@ package tools.dynamia.modules.saas; -import tools.dynamia.modules.saas.domain.AccountPayment; - -import java.util.Map; - /** * Basic API to implement processing account payments. You should implement * your own payment processor and register it using spring annotations @@ -15,5 +11,20 @@ public interface AccountPaymentProcessor { String getName(); - Map processPayment(AccountPayment payment); + default String getExtra0Label() { + return "Extra 0"; + } + + default String getExtra1Label() { + return "Extra 1"; + } + + default String getExtra2Label() { + return "Extra 2"; + } + + default String getExtra3Label() { + return "Extra 3"; + } + } diff --git a/extensions/saas/sources/core/src/main/java/tools/dynamia/modules/saas/domain/Account.java b/extensions/saas/sources/core/src/main/java/tools/dynamia/modules/saas/domain/Account.java index 21179fd1..42fb2420 100644 --- a/extensions/saas/sources/core/src/main/java/tools/dynamia/modules/saas/domain/Account.java +++ b/extensions/saas/sources/core/src/main/java/tools/dynamia/modules/saas/domain/Account.java @@ -197,6 +197,9 @@ public class Account extends SimpleEntity implements Transferable { @ManyToOne private AccountSaleChannel channel; + @ManyToOne(fetch = FetchType.LAZY) + private AccountPaymentProvider customPaymentProvider; + public Account() { initLocale(); } @@ -948,4 +951,12 @@ public Date getResellerInvoiceDate() { public void setResellerInvoiceDate(Date resellerInvoiceDate) { this.resellerInvoiceDate = resellerInvoiceDate; } + + public AccountPaymentProvider getCustomPaymentProvider() { + return customPaymentProvider; + } + + public void setCustomPaymentProvider(AccountPaymentProvider customPaymentProvider) { + this.customPaymentProvider = customPaymentProvider; + } } diff --git a/extensions/saas/sources/core/src/main/java/tools/dynamia/modules/saas/domain/AccountPaymentProvider.java b/extensions/saas/sources/core/src/main/java/tools/dynamia/modules/saas/domain/AccountPaymentProvider.java index 33015ca2..33a4460e 100644 --- a/extensions/saas/sources/core/src/main/java/tools/dynamia/modules/saas/domain/AccountPaymentProvider.java +++ b/extensions/saas/sources/core/src/main/java/tools/dynamia/modules/saas/domain/AccountPaymentProvider.java @@ -16,14 +16,25 @@ public class AccountPaymentProvider extends SimpleEntity { private String apiKey; @Column(length = 500) private String apiSecret; + + @Column(length = 500) + private String integritySecret; + + @Column(length = 500) + private String webCheckoutSecret; + @Column(length = 500) private String serviceURL; private String merchantId; private boolean testMode; - private boolean active = true; private String paymentProcessor; + private String extra0; + private String extra1; + private String extra2; + private String extra3; + public String getName() { return name; } @@ -80,6 +91,54 @@ public void setActive(boolean active) { this.active = active; } + public String getIntegritySecret() { + return integritySecret; + } + + public void setIntegritySecret(String integritySecret) { + this.integritySecret = integritySecret; + } + + public String getWebCheckoutSecret() { + return webCheckoutSecret; + } + + public void setWebCheckoutSecret(String webcheckoutSecret) { + this.webCheckoutSecret = webcheckoutSecret; + } + + public String getExtra0() { + return extra0; + } + + public void setExtra0(String extra0) { + this.extra0 = extra0; + } + + public String getExtra1() { + return extra1; + } + + public void setExtra1(String extra1) { + this.extra1 = extra1; + } + + public String getExtra2() { + return extra2; + } + + public void setExtra2(String extra2) { + this.extra2 = extra2; + } + + public String getExtra3() { + return extra3; + } + + public void setExtra3(String extra3) { + this.extra3 = extra3; + } + @Override public String toString() { return name; diff --git a/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountForm.yml b/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountForm.yml index aa632585..c7ba325f 100644 --- a/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountForm.yml +++ b/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountForm.yml @@ -120,6 +120,8 @@ fields: multiline: true height: 80px + customPaymentProvider: + groups: contactInfo: @@ -130,7 +132,7 @@ groups: fields: [ reseller, resellerAgent, resellerInvoice, resellerInvoiceDate, resellerComments ] configuration: - fields: [ locale, timeZone,skin, maxUsers,statusDescription,uuid,instanceUuid,creationDate,remote,autoInit,requiredInstanceUuid,redirect,templateAccount ] + fields: [ locale, timeZone,skin, maxUsers,statusDescription,uuid,instanceUuid,creationDate,remote,autoInit,requiredInstanceUuid,redirect,templateAccount,customPaymentProvider ] notification: fields: [ globalMessage,globalMessageType,showGlobalMessage ] diff --git a/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountPaymentProviderForm.yml b/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountPaymentProviderForm.yml index c67fae0d..ac1b35ba 100644 --- a/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountPaymentProviderForm.yml +++ b/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountPaymentProviderForm.yml @@ -14,9 +14,32 @@ fields: merchantId: apiKey: apiSecret: + webCheckoutSecret: + label: Webcheckout URL + integritySecret: + serviceURL: + label: Service URL testMode: active: + extra0: + label: Extra 0 + extra1: + label: Extra 1 + extra2: + label: Extra 2 + extra3: + label: Extra 3 + +groups: + extraProperties: + label: Extra Properties + fields: + - extra0 + - extra1 + - extra2 + - extra3 + layout: - columns: 1 \ No newline at end of file + columns: 2 \ No newline at end of file diff --git a/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountPaymentProviderTable.yml b/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountPaymentProviderTable.yml index f51f07e4..66e127b2 100644 --- a/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountPaymentProviderTable.yml +++ b/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountPaymentProviderTable.yml @@ -7,6 +7,5 @@ fields: paymentProcessor: label: Processor merchantId: - serviceURL: testMode: active: diff --git a/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountRegionForm.yml b/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountRegionForm.yml index ff0b6bd0..6b766994 100644 --- a/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountRegionForm.yml +++ b/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountRegionForm.yml @@ -17,3 +17,6 @@ fields: component: localebox parameters: component: crudview + +layout: + columns: 4 \ No newline at end of file diff --git a/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountRegionTable.yml b/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountRegionTable.yml index 49acd02c..52ea9ee9 100644 --- a/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountRegionTable.yml +++ b/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountRegionTable.yml @@ -7,4 +7,5 @@ fields: code: currency: timeZone: - locale: \ No newline at end of file + locale: + paymentProvider: \ No newline at end of file From 40a3f58d359eb35633bf1f76bd31edb4cca63ae9 Mon Sep 17 00:00:00 2001 From: Mario Serrano Date: Thu, 16 Apr 2026 10:06:34 -0500 Subject: [PATCH 2/7] chore: bump version to 26.4.1 across all modules in pom.xml and package.json --- extensions/dashboard/sources/pom.xml | 6 ++--- extensions/email-sms/sources/core/pom.xml | 6 ++--- extensions/email-sms/sources/pom.xml | 4 +-- extensions/email-sms/sources/ui/pom.xml | 6 ++--- .../packages/files-sdk/package.json | 2 +- extensions/entity-files/sources/core/pom.xml | 8 +++--- extensions/entity-files/sources/pom.xml | 2 +- extensions/entity-files/sources/s3/pom.xml | 4 +-- extensions/entity-files/sources/ui/pom.xml | 6 ++--- extensions/file-importer/sources/core/pom.xml | 4 +-- extensions/file-importer/sources/pom.xml | 2 +- extensions/file-importer/sources/ui/pom.xml | 6 ++--- extensions/finances/sources/api/pom.xml | 2 +- extensions/finances/sources/pom.xml | 2 +- extensions/pom.xml | 2 +- .../reports/packages/reports-sdk/package.json | 2 +- extensions/reports/sources/api/pom.xml | 2 +- extensions/reports/sources/core/pom.xml | 12 ++++----- extensions/reports/sources/pom.xml | 2 +- extensions/reports/sources/ui/pom.xml | 8 +++--- .../saas/packages/saas-sdk/package.json | 2 +- extensions/saas/sources/api/pom.xml | 4 +-- extensions/saas/sources/core/pom.xml | 10 +++---- extensions/saas/sources/jpa/pom.xml | 6 ++--- extensions/saas/sources/pom.xml | 2 +- extensions/saas/sources/remote/pom.xml | 4 +-- extensions/saas/sources/ui/pom.xml | 8 +++--- extensions/security/sources/core/pom.xml | 14 +++++----- extensions/security/sources/pom.xml | 2 +- extensions/security/sources/ui/pom.xml | 8 +++--- platform/app/pom.xml | 26 +++++++++---------- platform/core/actions/pom.xml | 6 ++--- platform/core/commons/pom.xml | 2 +- platform/core/crud/pom.xml | 10 +++---- platform/core/domain-jpa/pom.xml | 4 +-- platform/core/domain/pom.xml | 2 +- platform/core/integration/pom.xml | 4 +-- platform/core/io/pom.xml | 2 +- platform/core/navigation/pom.xml | 8 +++--- platform/core/reports/pom.xml | 2 +- platform/core/templates/pom.xml | 6 ++--- platform/core/viewers/pom.xml | 12 ++++----- platform/core/web/pom.xml | 12 ++++----- platform/packages/sdk/package-lock.json | 4 +-- platform/packages/sdk/package.json | 2 +- platform/packages/ui-core/package.json | 2 +- platform/packages/vue/package.json | 2 +- platform/starters/zk-starter/pom.xml | 10 +++---- platform/ui/ui-shared/pom.xml | 8 +++--- platform/ui/zk/pom.xml | 18 ++++++------- pom.xml | 2 +- themes/pom.xml | 2 +- themes/theme-dynamical/sources/pom.xml | 4 +-- 53 files changed, 149 insertions(+), 149 deletions(-) diff --git a/extensions/dashboard/sources/pom.xml b/extensions/dashboard/sources/pom.xml index 525f2c89..323aac1c 100644 --- a/extensions/dashboard/sources/pom.xml +++ b/extensions/dashboard/sources/pom.xml @@ -23,7 +23,7 @@ tools.dynamia.modules tools.dynamia.modules.parent - 26.4.0 + 26.4.1 ../../pom.xml @@ -38,12 +38,12 @@ tools.dynamia tools.dynamia.zk - 26.4.0 + 26.4.1 tools.dynamia.modules tools.dynamia.modules.saas.api - 26.4.0 + 26.4.1 diff --git a/extensions/email-sms/sources/core/pom.xml b/extensions/email-sms/sources/core/pom.xml index f4c600af..2002f6a3 100644 --- a/extensions/email-sms/sources/core/pom.xml +++ b/extensions/email-sms/sources/core/pom.xml @@ -23,7 +23,7 @@ tools.dynamia.modules.email.parent tools.dynamia.modules - 26.4.0 + 26.4.1 tools.dynamia.modules.email @@ -50,12 +50,12 @@ tools.dynamia tools.dynamia.domain.jpa - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.templates - 26.4.0 + 26.4.1 org.springframework diff --git a/extensions/email-sms/sources/pom.xml b/extensions/email-sms/sources/pom.xml index 2a1c5fa0..3c7ba5a6 100644 --- a/extensions/email-sms/sources/pom.xml +++ b/extensions/email-sms/sources/pom.xml @@ -23,7 +23,7 @@ tools.dynamia.modules tools.dynamia.modules.parent - 26.4.0 + 26.4.1 ../../pom.xml @@ -85,7 +85,7 @@ tools.dynamia.modules tools.dynamia.modules.saas.jpa - 26.4.0 + 26.4.1 diff --git a/extensions/email-sms/sources/ui/pom.xml b/extensions/email-sms/sources/ui/pom.xml index f275a54b..3971de5d 100644 --- a/extensions/email-sms/sources/ui/pom.xml +++ b/extensions/email-sms/sources/ui/pom.xml @@ -22,7 +22,7 @@ tools.dynamia.modules.email.parent tools.dynamia.modules - 26.4.0 + 26.4.1 DynamiaModules - Email UI @@ -34,12 +34,12 @@ tools.dynamia tools.dynamia.zk - 26.4.0 + 26.4.1 tools.dynamia.modules tools.dynamia.modules.email - 26.4.0 + 26.4.1 tools.dynamia.zk.addons diff --git a/extensions/entity-files/packages/files-sdk/package.json b/extensions/entity-files/packages/files-sdk/package.json index d0fcfa77..0c707dc0 100644 --- a/extensions/entity-files/packages/files-sdk/package.json +++ b/extensions/entity-files/packages/files-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@dynamia-tools/files-sdk", - "version": "26.4.0", + "version": "26.4.1", "website": "https://dynamia.tools", "description": "TypeScript/JavaScript client SDK for the Dynamia Entity Files extension REST API", "keywords": [ diff --git a/extensions/entity-files/sources/core/pom.xml b/extensions/entity-files/sources/core/pom.xml index 8242f69b..1027a48c 100644 --- a/extensions/entity-files/sources/core/pom.xml +++ b/extensions/entity-files/sources/core/pom.xml @@ -22,7 +22,7 @@ tools.dynamia.modules.entityfiles.parent tools.dynamia.modules - 26.4.0 + 26.4.1 DynamiaModules - EntityFiles - Core tools.dynamia.modules.entityfiles @@ -54,20 +54,20 @@ tools.dynamia tools.dynamia.domain.jpa - 26.4.0 + 26.4.1 jar tools.dynamia tools.dynamia.io - 26.4.0 + 26.4.1 jar tools.dynamia tools.dynamia.web - 26.4.0 + 26.4.1 jar diff --git a/extensions/entity-files/sources/pom.xml b/extensions/entity-files/sources/pom.xml index c03f0453..0d5e48ae 100644 --- a/extensions/entity-files/sources/pom.xml +++ b/extensions/entity-files/sources/pom.xml @@ -23,7 +23,7 @@ tools.dynamia.modules tools.dynamia.modules.parent - 26.4.0 + 26.4.1 ../../pom.xml diff --git a/extensions/entity-files/sources/s3/pom.xml b/extensions/entity-files/sources/s3/pom.xml index fdd35844..01444438 100644 --- a/extensions/entity-files/sources/s3/pom.xml +++ b/extensions/entity-files/sources/s3/pom.xml @@ -23,7 +23,7 @@ tools.dynamia.modules tools.dynamia.modules.entityfiles.parent - 26.4.0 + 26.4.1 DynamiaModules - EntityFiles - S3 @@ -49,7 +49,7 @@ tools.dynamia.modules tools.dynamia.modules.entityfiles - 26.4.0 + 26.4.1 software.amazon.awssdk diff --git a/extensions/entity-files/sources/ui/pom.xml b/extensions/entity-files/sources/ui/pom.xml index a1669a7f..9b8399f0 100644 --- a/extensions/entity-files/sources/ui/pom.xml +++ b/extensions/entity-files/sources/ui/pom.xml @@ -22,7 +22,7 @@ tools.dynamia.modules.entityfiles.parent tools.dynamia.modules - 26.4.0 + 26.4.1 DynamiaModules - EntityFiles UI tools.dynamia.modules.entityfiles.ui @@ -48,12 +48,12 @@ tools.dynamia.modules tools.dynamia.modules.entityfiles - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.zk - 26.4.0 + 26.4.1 jar diff --git a/extensions/file-importer/sources/core/pom.xml b/extensions/file-importer/sources/core/pom.xml index 751ac78f..6948f2ff 100644 --- a/extensions/file-importer/sources/core/pom.xml +++ b/extensions/file-importer/sources/core/pom.xml @@ -23,7 +23,7 @@ tools.dynamia.modules.importer.parent tools.dynamia.modules - 26.4.0 + 26.4.1 Dynamia Modules - Importer Core tools.dynamia.modules.importer @@ -56,7 +56,7 @@ tools.dynamia tools.dynamia.reports - 26.4.0 + 26.4.1 diff --git a/extensions/file-importer/sources/pom.xml b/extensions/file-importer/sources/pom.xml index 74d35983..1c45634b 100644 --- a/extensions/file-importer/sources/pom.xml +++ b/extensions/file-importer/sources/pom.xml @@ -26,7 +26,7 @@ tools.dynamia.modules tools.dynamia.modules.parent - 26.4.0 + 26.4.1 ../../pom.xml diff --git a/extensions/file-importer/sources/ui/pom.xml b/extensions/file-importer/sources/ui/pom.xml index 7b0c8303..f428ce04 100644 --- a/extensions/file-importer/sources/ui/pom.xml +++ b/extensions/file-importer/sources/ui/pom.xml @@ -23,7 +23,7 @@ tools.dynamia.modules.importer.parent tools.dynamia.modules - 26.4.0 + 26.4.1 Dynamia Modules - Importer UI tools.dynamia.modules.importer.ui @@ -55,13 +55,13 @@ tools.dynamia tools.dynamia.zk - 26.4.0 + 26.4.1 tools.dynamia.modules tools.dynamia.modules.importer - 26.4.0 + 26.4.1 diff --git a/extensions/finances/sources/api/pom.xml b/extensions/finances/sources/api/pom.xml index 4c0ee885..809fa308 100644 --- a/extensions/finances/sources/api/pom.xml +++ b/extensions/finances/sources/api/pom.xml @@ -26,7 +26,7 @@ tools.dynamia.modules tools.dynamia.modules.finances.parent - 26.4.0 + 26.4.1 Dynamia Modules - Finances API diff --git a/extensions/finances/sources/pom.xml b/extensions/finances/sources/pom.xml index 81a0c965..12307fd7 100644 --- a/extensions/finances/sources/pom.xml +++ b/extensions/finances/sources/pom.xml @@ -26,7 +26,7 @@ tools.dynamia.modules tools.dynamia.modules.parent - 26.4.0 + 26.4.1 ../../pom.xml diff --git a/extensions/pom.xml b/extensions/pom.xml index 03d89c7b..a5b92e00 100644 --- a/extensions/pom.xml +++ b/extensions/pom.xml @@ -6,7 +6,7 @@ tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 ../pom.xml diff --git a/extensions/reports/packages/reports-sdk/package.json b/extensions/reports/packages/reports-sdk/package.json index f3fee760..7bd5e313 100644 --- a/extensions/reports/packages/reports-sdk/package.json +++ b/extensions/reports/packages/reports-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@dynamia-tools/reports-sdk", - "version": "26.4.0", + "version": "26.4.1", "website": "https://dynamia.tools", "description": "TypeScript/JavaScript client SDK for the Dynamia Reports extension REST API", "keywords": [ diff --git a/extensions/reports/sources/api/pom.xml b/extensions/reports/sources/api/pom.xml index 391a617f..4d2c4162 100644 --- a/extensions/reports/sources/api/pom.xml +++ b/extensions/reports/sources/api/pom.xml @@ -23,7 +23,7 @@ tools.dynamia.modules tools.dynamia.modules.reports.parent - 26.4.0 + 26.4.1 DynamiaModules - Reports API diff --git a/extensions/reports/sources/core/pom.xml b/extensions/reports/sources/core/pom.xml index d9109c32..388e29b8 100644 --- a/extensions/reports/sources/core/pom.xml +++ b/extensions/reports/sources/core/pom.xml @@ -23,7 +23,7 @@ tools.dynamia.modules tools.dynamia.modules.reports.parent - 26.4.0 + 26.4.1 DynamiaModules - Reports Core @@ -50,17 +50,17 @@ tools.dynamia.modules tools.dynamia.modules.reports.api - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.domain.jpa - 26.4.0 + 26.4.1 tools.dynamia.modules tools.dynamia.modules.saas.jpa - 26.4.0 + 26.4.1 org.springframework @@ -69,12 +69,12 @@ tools.dynamia tools.dynamia.reports - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.templates - 26.4.0 + 26.4.1 compile diff --git a/extensions/reports/sources/pom.xml b/extensions/reports/sources/pom.xml index 5cc490e4..3d7a7dff 100644 --- a/extensions/reports/sources/pom.xml +++ b/extensions/reports/sources/pom.xml @@ -23,7 +23,7 @@ tools.dynamia.modules tools.dynamia.modules.parent - 26.4.0 + 26.4.1 ../../pom.xml diff --git a/extensions/reports/sources/ui/pom.xml b/extensions/reports/sources/ui/pom.xml index 378cb82a..b3c0f1c1 100644 --- a/extensions/reports/sources/ui/pom.xml +++ b/extensions/reports/sources/ui/pom.xml @@ -23,7 +23,7 @@ tools.dynamia.modules tools.dynamia.modules.reports.parent - 26.4.0 + 26.4.1 DynamiaModules - Reports UI @@ -49,17 +49,17 @@ tools.dynamia.modules tools.dynamia.modules.reports.core - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.zk - 26.4.0 + 26.4.1 tools.dynamia.modules tools.dynamia.modules.dashboard - 26.4.0 + 26.4.1 io.swagger.core.v3 diff --git a/extensions/saas/packages/saas-sdk/package.json b/extensions/saas/packages/saas-sdk/package.json index f477d6b3..373b85c1 100644 --- a/extensions/saas/packages/saas-sdk/package.json +++ b/extensions/saas/packages/saas-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@dynamia-tools/saas-sdk", - "version": "26.4.0", + "version": "26.4.1", "website": "https://dynamia.tools", "description": "TypeScript/JavaScript client SDK for the Dynamia SaaS extension REST API", "keywords": [ diff --git a/extensions/saas/sources/api/pom.xml b/extensions/saas/sources/api/pom.xml index 61c8e33c..8cb939f8 100644 --- a/extensions/saas/sources/api/pom.xml +++ b/extensions/saas/sources/api/pom.xml @@ -26,7 +26,7 @@ tools.dynamia.modules tools.dynamia.modules.saas.parent - 26.4.0 + 26.4.1 @@ -55,7 +55,7 @@ tools.dynamia tools.dynamia.actions - 26.4.0 + 26.4.1 org.springframework.boot diff --git a/extensions/saas/sources/core/pom.xml b/extensions/saas/sources/core/pom.xml index c4224331..dbca4eeb 100644 --- a/extensions/saas/sources/core/pom.xml +++ b/extensions/saas/sources/core/pom.xml @@ -22,7 +22,7 @@ tools.dynamia.modules tools.dynamia.modules.saas.parent - 26.4.0 + 26.4.1 DynamiaModules - SaaS Core @@ -49,18 +49,18 @@ tools.dynamia.modules tools.dynamia.modules.saas.api - 26.4.0 + 26.4.1 tools.dynamia.modules tools.dynamia.modules.saas.jpa - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.integration - 26.4.0 + 26.4.1 @@ -86,7 +86,7 @@ tools.dynamia.modules tools.dynamia.modules.entityfiles - 26.4.0 + 26.4.1 org.hibernate.orm diff --git a/extensions/saas/sources/jpa/pom.xml b/extensions/saas/sources/jpa/pom.xml index a66d1997..d46b7378 100644 --- a/extensions/saas/sources/jpa/pom.xml +++ b/extensions/saas/sources/jpa/pom.xml @@ -24,7 +24,7 @@ tools.dynamia.modules.saas.parent tools.dynamia.modules - 26.4.0 + 26.4.1 DynamiaModules - SaaS JPA @@ -35,12 +35,12 @@ tools.dynamia.modules tools.dynamia.modules.saas.api - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.domain.jpa - 26.4.0 + 26.4.1 diff --git a/extensions/saas/sources/pom.xml b/extensions/saas/sources/pom.xml index 448251cd..5b9d53a7 100644 --- a/extensions/saas/sources/pom.xml +++ b/extensions/saas/sources/pom.xml @@ -23,7 +23,7 @@ tools.dynamia.modules tools.dynamia.modules.parent - 26.4.0 + 26.4.1 ../../pom.xml diff --git a/extensions/saas/sources/remote/pom.xml b/extensions/saas/sources/remote/pom.xml index 9e849cb0..c8aa1d0e 100644 --- a/extensions/saas/sources/remote/pom.xml +++ b/extensions/saas/sources/remote/pom.xml @@ -25,7 +25,7 @@ tools.dynamia.modules.saas.parent tools.dynamia.modules - 26.4.0 + 26.4.1 @@ -38,7 +38,7 @@ tools.dynamia.modules tools.dynamia.modules.saas.jpa - 26.4.0 + 26.4.1 diff --git a/extensions/saas/sources/ui/pom.xml b/extensions/saas/sources/ui/pom.xml index 6bde3bc2..ae813d8d 100644 --- a/extensions/saas/sources/ui/pom.xml +++ b/extensions/saas/sources/ui/pom.xml @@ -22,7 +22,7 @@ tools.dynamia.modules tools.dynamia.modules.saas.parent - 26.4.0 + 26.4.1 DynamiaModules - SaaS UI tools.dynamia.modules.saas.ui @@ -54,12 +54,12 @@ tools.dynamia tools.dynamia.zk - 26.4.0 + 26.4.1 tools.dynamia.modules tools.dynamia.modules.saas - 26.4.0 + 26.4.1 @@ -70,7 +70,7 @@ tools.dynamia.modules tools.dynamia.modules.entityfiles.ui - 26.4.0 + 26.4.1 diff --git a/extensions/security/sources/core/pom.xml b/extensions/security/sources/core/pom.xml index abd650b8..8230ac74 100644 --- a/extensions/security/sources/core/pom.xml +++ b/extensions/security/sources/core/pom.xml @@ -17,7 +17,7 @@ tools.dynamia.modules tools.dynamia.modules.security.parent - 26.4.0 + 26.4.1 4.0.0 @@ -32,34 +32,34 @@ tools.dynamia.modules tools.dynamia.modules.saas.api - 26.4.0 + 26.4.1 tools.dynamia.modules tools.dynamia.modules.entityfiles - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.domain.jpa - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.domain - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.integration - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.web - 26.4.0 + 26.4.1 diff --git a/extensions/security/sources/pom.xml b/extensions/security/sources/pom.xml index debd67e0..c2b0bcbb 100644 --- a/extensions/security/sources/pom.xml +++ b/extensions/security/sources/pom.xml @@ -19,7 +19,7 @@ tools.dynamia.modules tools.dynamia.modules.parent - 26.4.0 + 26.4.1 ../../pom.xml diff --git a/extensions/security/sources/ui/pom.xml b/extensions/security/sources/ui/pom.xml index 6f6eb733..a023c6ac 100644 --- a/extensions/security/sources/ui/pom.xml +++ b/extensions/security/sources/ui/pom.xml @@ -17,7 +17,7 @@ tools.dynamia.modules tools.dynamia.modules.security.parent - 26.4.0 + 26.4.1 DynamiaModules - Security UI @@ -44,18 +44,18 @@ tools.dynamia.modules tools.dynamia.modules.security - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.zk - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.app - 26.4.0 + 26.4.1 diff --git a/platform/app/pom.xml b/platform/app/pom.xml index 3a01b363..d5ab3d79 100644 --- a/platform/app/pom.xml +++ b/platform/app/pom.xml @@ -23,7 +23,7 @@ tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 ../../pom.xml @@ -74,58 +74,58 @@ tools.dynamia tools.dynamia.actions - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.commons - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.crud - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.domain - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.integration - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.io - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.navigation - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.reports - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.templates - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.viewers - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.web - 26.4.0 + 26.4.1 @@ -205,7 +205,7 @@ tools.dynamia tools.dynamia.domain.jpa - 26.4.0 + 26.4.1 test diff --git a/platform/core/actions/pom.xml b/platform/core/actions/pom.xml index 13e590b1..17b5079a 100644 --- a/platform/core/actions/pom.xml +++ b/platform/core/actions/pom.xml @@ -23,7 +23,7 @@ tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 ../../../pom.xml @@ -65,12 +65,12 @@ tools.dynamia tools.dynamia.integration - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.commons - 26.4.0 + 26.4.1 diff --git a/platform/core/commons/pom.xml b/platform/core/commons/pom.xml index dd6455de..51bbda17 100644 --- a/platform/core/commons/pom.xml +++ b/platform/core/commons/pom.xml @@ -25,7 +25,7 @@ tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 ../../../pom.xml DynamiaTools - Commons diff --git a/platform/core/crud/pom.xml b/platform/core/crud/pom.xml index 1af5c40f..b077e403 100644 --- a/platform/core/crud/pom.xml +++ b/platform/core/crud/pom.xml @@ -23,7 +23,7 @@ tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 ../../../pom.xml @@ -62,23 +62,23 @@ tools.dynamia tools.dynamia.actions - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.viewers - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.navigation - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.domain.jpa - 26.4.0 + 26.4.1 test diff --git a/platform/core/domain-jpa/pom.xml b/platform/core/domain-jpa/pom.xml index 1c088e30..15fba195 100644 --- a/platform/core/domain-jpa/pom.xml +++ b/platform/core/domain-jpa/pom.xml @@ -23,7 +23,7 @@ tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 ../../../pom.xml @@ -65,7 +65,7 @@ tools.dynamia tools.dynamia.domain - 26.4.0 + 26.4.1 diff --git a/platform/core/domain/pom.xml b/platform/core/domain/pom.xml index 7dda4c97..aecb3486 100644 --- a/platform/core/domain/pom.xml +++ b/platform/core/domain/pom.xml @@ -26,7 +26,7 @@ tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 ../../../pom.xml DynamiaTools - Domain diff --git a/platform/core/integration/pom.xml b/platform/core/integration/pom.xml index a6173d9f..7e38a862 100644 --- a/platform/core/integration/pom.xml +++ b/platform/core/integration/pom.xml @@ -27,7 +27,7 @@ tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 ../../../pom.xml @@ -67,7 +67,7 @@ tools.dynamia tools.dynamia.commons - 26.4.0 + 26.4.1 provided diff --git a/platform/core/io/pom.xml b/platform/core/io/pom.xml index 464e6e78..0d665e42 100644 --- a/platform/core/io/pom.xml +++ b/platform/core/io/pom.xml @@ -28,7 +28,7 @@ tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 ../../../pom.xml diff --git a/platform/core/navigation/pom.xml b/platform/core/navigation/pom.xml index 59438148..376bc029 100644 --- a/platform/core/navigation/pom.xml +++ b/platform/core/navigation/pom.xml @@ -23,7 +23,7 @@ tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 ../../../pom.xml @@ -63,17 +63,17 @@ tools.dynamia tools.dynamia.commons - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.integration - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.actions - 26.4.0 + 26.4.1 diff --git a/platform/core/reports/pom.xml b/platform/core/reports/pom.xml index c62fe634..54d95537 100644 --- a/platform/core/reports/pom.xml +++ b/platform/core/reports/pom.xml @@ -26,7 +26,7 @@ tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 ../../../pom.xml diff --git a/platform/core/templates/pom.xml b/platform/core/templates/pom.xml index cb2fff38..57d96bc1 100644 --- a/platform/core/templates/pom.xml +++ b/platform/core/templates/pom.xml @@ -23,7 +23,7 @@ tools.dynamia.parent tools.dynamia - 26.4.0 + 26.4.1 ../../../pom.xml @@ -64,12 +64,12 @@ tools.dynamia tools.dynamia.integration - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.commons - 26.4.0 + 26.4.1 diff --git a/platform/core/viewers/pom.xml b/platform/core/viewers/pom.xml index 776ae47e..2708cea1 100644 --- a/platform/core/viewers/pom.xml +++ b/platform/core/viewers/pom.xml @@ -25,7 +25,7 @@ tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 ../../../pom.xml @@ -67,27 +67,27 @@ tools.dynamia tools.dynamia.commons - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.integration - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.io - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.domain - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.actions - 26.4.0 + 26.4.1 org.yaml diff --git a/platform/core/web/pom.xml b/platform/core/web/pom.xml index 47cdf49d..09183fae 100644 --- a/platform/core/web/pom.xml +++ b/platform/core/web/pom.xml @@ -29,7 +29,7 @@ tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 ../../../pom.xml @@ -88,27 +88,27 @@ tools.dynamia tools.dynamia.commons - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.integration - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.navigation - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.viewers - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.crud - 26.4.0 + 26.4.1 org.springframework diff --git a/platform/packages/sdk/package-lock.json b/platform/packages/sdk/package-lock.json index 17a6e814..4e95bbdd 100644 --- a/platform/packages/sdk/package-lock.json +++ b/platform/packages/sdk/package-lock.json @@ -1,12 +1,12 @@ { "name": "@dynamia-tools/sdk", - "version": "26.4.0", + "version": "26.4.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@dynamia-tools/sdk", - "version": "26.4.0", + "version": "26.4.1", "license": "Apache-2.0", "devDependencies": { "@types/node": "^22.0.0", diff --git a/platform/packages/sdk/package.json b/platform/packages/sdk/package.json index d9b6e440..3ed457c3 100644 --- a/platform/packages/sdk/package.json +++ b/platform/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@dynamia-tools/sdk", - "version": "26.4.0", + "version": "26.4.1", "website": "https://dynamia.tools", "description": "Official JavaScript / TypeScript client SDK for Dynamia Platform REST APIs", "keywords": [ diff --git a/platform/packages/ui-core/package.json b/platform/packages/ui-core/package.json index 8b1a4a90..a317d131 100644 --- a/platform/packages/ui-core/package.json +++ b/platform/packages/ui-core/package.json @@ -1,6 +1,6 @@ { "name": "@dynamia-tools/ui-core", - "version": "26.4.0", + "version": "26.4.1", "description": "Framework-agnostic view/viewer/renderer core for Dynamia Platform", "keywords": [ "dynamia", diff --git a/platform/packages/vue/package.json b/platform/packages/vue/package.json index b8fc19fe..833195ef 100644 --- a/platform/packages/vue/package.json +++ b/platform/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@dynamia-tools/vue", - "version": "26.4.0", + "version": "26.4.1", "description": "Vue 3 adapter for Dynamia Platform UI", "keywords": [ "dynamia", diff --git a/platform/starters/zk-starter/pom.xml b/platform/starters/zk-starter/pom.xml index 6bffe59d..30d2feed 100644 --- a/platform/starters/zk-starter/pom.xml +++ b/platform/starters/zk-starter/pom.xml @@ -4,7 +4,7 @@ tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 ../../../pom.xml @@ -28,22 +28,22 @@ tools.dynamia tools.dynamia.app - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.commons - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.zk - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.domain.jpa - 26.4.0 + 26.4.1 org.hibernate.validator diff --git a/platform/ui/ui-shared/pom.xml b/platform/ui/ui-shared/pom.xml index 78c7c6a7..c8a03fec 100644 --- a/platform/ui/ui-shared/pom.xml +++ b/platform/ui/ui-shared/pom.xml @@ -23,7 +23,7 @@ tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 ../../../pom.xml @@ -64,17 +64,17 @@ tools.dynamia tools.dynamia.integration - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.commons - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.io - 26.4.0 + 26.4.1 diff --git a/platform/ui/zk/pom.xml b/platform/ui/zk/pom.xml index 8608a648..87b6df56 100644 --- a/platform/ui/zk/pom.xml +++ b/platform/ui/zk/pom.xml @@ -21,7 +21,7 @@ tools.dynamia.parent tools.dynamia - 26.4.0 + 26.4.1 ../../../pom.xml 4.0.0 @@ -99,31 +99,31 @@ tools.dynamia tools.dynamia.web - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.navigation - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.ui - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.domain - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.viewers - 26.4.0 + 26.4.1 org.yaml @@ -134,19 +134,19 @@ tools.dynamia tools.dynamia.crud - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.reports - 26.4.0 + 26.4.1 compile tools.dynamia tools.dynamia.templates - 26.4.0 + 26.4.1 compile diff --git a/pom.xml b/pom.xml index 68e4b113..476c74a6 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ 4.0.0 tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 pom Dynamia Soluciones IT SAS diff --git a/themes/pom.xml b/themes/pom.xml index 679b0d7d..ffead089 100644 --- a/themes/pom.xml +++ b/themes/pom.xml @@ -6,7 +6,7 @@ tools.dynamia tools.dynamia.parent - 26.4.0 + 26.4.1 ../pom.xml diff --git a/themes/theme-dynamical/sources/pom.xml b/themes/theme-dynamical/sources/pom.xml index aee9a242..46dd9562 100644 --- a/themes/theme-dynamical/sources/pom.xml +++ b/themes/theme-dynamical/sources/pom.xml @@ -24,7 +24,7 @@ tools.dynamia.themes tools.dynamia.themes.parent - 26.4.0 + 26.4.1 ../../pom.xml @@ -102,7 +102,7 @@ tools.dynamia tools.dynamia.zk - 26.4.0 + 26.4.1 provided From 81cd365a19d45d46774bd0650ddb49d273850c08 Mon Sep 17 00:00:00 2001 From: Mario Serrano Date: Sat, 18 Apr 2026 07:51:05 -0500 Subject: [PATCH 3/7] refactor: simplify item retrieval and selection logic in ProviderPickerBox --- .../dynamia/zk/ui/ProviderPickerBox.java | 78 +++++++++++-------- 1 file changed, 46 insertions(+), 32 deletions(-) diff --git a/platform/ui/zk/src/main/java/tools/dynamia/zk/ui/ProviderPickerBox.java b/platform/ui/zk/src/main/java/tools/dynamia/zk/ui/ProviderPickerBox.java index 4d521f1c..d000630a 100644 --- a/platform/ui/zk/src/main/java/tools/dynamia/zk/ui/ProviderPickerBox.java +++ b/platform/ui/zk/src/main/java/tools/dynamia/zk/ui/ProviderPickerBox.java @@ -22,22 +22,23 @@ import tools.dynamia.commons.BeanSorter; import tools.dynamia.commons.ObjectOperations; import tools.dynamia.commons.StringUtils; -import tools.dynamia.commons.reflect.ReflectionException; import tools.dynamia.integration.Containers; import tools.dynamia.zk.BindingComponentIndex; import tools.dynamia.zk.ComponentAliasIndex; import tools.dynamia.zk.util.ZKUtil; +import java.io.Serial; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.Optional; +import java.util.Objects; public class ProviderPickerBox extends Combobox { /** * */ + @Serial private static final long serialVersionUID = 4710970528102748639L; static { @@ -58,25 +59,12 @@ public ProviderPickerBox() { setItemRenderer((item, data, index) -> { - String id, name, icon; - - try { - id = ObjectOperations.invokeGetMethod(data, idField).toString(); - } catch (ReflectionException | NullPointerException e) { - throw new UiException("Error loading ID field for " + data, e); - } - - try { - name = ObjectOperations.invokeGetMethod(data, nameField).toString(); - } catch (ReflectionException | NullPointerException e) { - name = id; - } - - try { - icon = ObjectOperations.invokeGetMethod(data, iconField).toString(); - } catch (ReflectionException | NullPointerException e) { - icon = null; + String id = getItemId(item); + if (id == null) { + throw new UiException(item + " has no id field named [" + idField + "]"); } + String name = getItemName(item); + String icon = getItemIcon(item); if (name == null) { @@ -161,22 +149,48 @@ public String getSelected() { return selected; } + @SuppressWarnings({"unchecked", "rawtypes"}) public void setSelected(String selected) { - if (selected != this.selected) { + if (!Objects.equals(selected, this.selected)) { this.selected = selected; - try { - Optional provider = Containers.get().findObjects(providerClass) - .stream() - .filter(p -> selected.equals(ObjectOperations.invokeGetMethod(p, idField))) - .findFirst(); - if (provider.isPresent()) { - ListModelList model = (ListModelList) getModel(); - //noinspection unchecked - model.addToSelection(provider.get()); - } - } catch (Exception ignored) { + if (getModel() instanceof ListModelList model) { + model.stream().filter(item -> Objects.equals(getItemId(item), selected)) + .findFirst() + .ifPresent(model::addToSelection); + } + } + } + + /** + * Return the ID of the item, using the idField property. By default it is "id", but you can change it to any field of your provider class. + * + * @param item to check + * @return item id + */ + protected String getItemId(Object item) { + return getItemField(item, idField); + } + protected String getItemName(Object item) { + return getItemField(item, nameField); + } + + protected String getItemIcon(Object item) { + return getItemField(item, iconField); + } + + protected String getItemField(Object item, String field) { + try { + if (item != null) { + Object fieldValue = ObjectOperations.invokeGetMethod(item, field); + if (fieldValue != null) { + return fieldValue.toString(); + } + } else { + return null; } + } catch (Exception _) { } + return null; } } From 4cee738d9368159fa7dfa93d88ea283a9a2db7e8 Mon Sep 17 00:00:00 2001 From: Mario Serrano Date: Sat, 18 Apr 2026 07:53:40 -0500 Subject: [PATCH 4/7] feat: enhance ProviderPickerBox with detailed documentation and configurable fields --- .../dynamia/zk/ui/ProviderPickerBox.java | 158 +++++++++++++++++- 1 file changed, 154 insertions(+), 4 deletions(-) diff --git a/platform/ui/zk/src/main/java/tools/dynamia/zk/ui/ProviderPickerBox.java b/platform/ui/zk/src/main/java/tools/dynamia/zk/ui/ProviderPickerBox.java index d000630a..9b984213 100644 --- a/platform/ui/zk/src/main/java/tools/dynamia/zk/ui/ProviderPickerBox.java +++ b/platform/ui/zk/src/main/java/tools/dynamia/zk/ui/ProviderPickerBox.java @@ -33,10 +33,35 @@ import java.util.List; import java.util.Objects; +/** + * A ZK Combobox component that discovers and lists implementations of a given + * provider interface or base class from the application's IoC container. + * + *

The component populates its items by querying {@link Containers#get()} + * for all objects assignable to the configured provider class. Each item is + * rendered using configurable field names for the identifier, display name, + * and optional icon. By default the fields are {@code id}, {@code name} and + * {@code icon} respectively.

+ * + *

The combobox is configured as read-only and will show the provider's + * display name while the underlying value stored for selection is the provider + * identifier (as resolved by {@link #idField}). The component registers the + * alias {@code providerpickerbox} for use in ZUL files and supports binding + * via the {@code selected} property.

+ * + *

Example ZUL usage

+ *
{@code
+ * 
+ * }
+ */ public class ProviderPickerBox extends Combobox { /** - * + * Serialization id. */ @Serial private static final long serialVersionUID = 4710970528102748639L; @@ -46,14 +71,47 @@ public class ProviderPickerBox extends Combobox { BindingComponentIndex.getInstance().put("selected", ProviderPickerBox.class); } + /** + * The currently selected provider identifier. This value corresponds to the + * field defined by {@link #idField} for the selected provider instance. + */ private String selected; + + /** + * Fully-qualified class name of the provider interface or base class used to + * discover implementations in the IoC container. + */ private String className; + + /** + * Name of the provider field used as unique identifier. Defaults to {@code "id"}. + */ private String idField = "id"; + + /** + * Name of the provider field used for display label. Defaults to {@code "name"}. + */ private String nameField = "name"; + /** + * Name of the provider field used as an icon CSS class. Defaults to {@code "icon"}. + */ private String iconField = "icon"; + + /** + * Resolved provider {@link Class} corresponding to {@link #className}. May be {@code null} + * until {@link #setClassName(String)} is called with a valid class name. + */ private Class providerClass; + /** + * Constructs a new ProviderPickerBox. + * + *

The combobox is set to read-only and an item renderer is installed that + * resolves the item's id, name and icon using the configured field names. + * If the id cannot be resolved for an item an {@link UiException} is thrown + * during rendering.

+ */ public ProviderPickerBox() { setReadonly(true); @@ -80,6 +138,15 @@ public ProviderPickerBox() { }); } + /** + * Initializes or refreshes the combobox model by locating all provider + * implementations from the IoC container and filling the component model. + * + *

The list is attempted to be sorted by {@link #nameField} using + * {@link BeanSorter}; if sorting fails the raw collection is used.

+ * + * @throws UiException if the lookup or model population fails + */ private void initModel() { if (providerClass != null) { try { @@ -100,10 +167,23 @@ private void initModel() { } + /** + * Returns the fully-qualified class name configured to discover provider + * implementations. + * + * @return the configured provider class name, or {@code null} if none set + */ public String getClassName() { return className; } + /** + * Sets the fully-qualified provider class name and immediately attempts to + * resolve the class and initialize the component model. + * + * @param className fully-qualified provider interface or base class name + * @throws UiException if the class cannot be found on the classpath + */ public void setClassName(String className) { this.className = className; try { @@ -114,33 +194,72 @@ public void setClassName(String className) { } } + /** + * Returns the name of the field used as the provider identifier. + * + * @return the id field name + */ public String getIdField() { return idField; } + /** + * Sets the name of the field used as the provider identifier and refreshes + * the component model. + * + * @param idField the identifier field name (getter must be available on provider objects) + */ public void setIdField(String idField) { this.idField = idField; initModel(); } + /** + * Returns the name of the field used as the provider display label. + * + * @return the display name field + */ public String getNameField() { return nameField; } + /** + * Sets the name of the field used as the provider display label and + * refreshes the component model. + * + * @param nameField the display name field + */ public void setNameField(String nameField) { this.nameField = nameField; initModel(); } + /** + * Returns the name of the field used as the provider icon CSS class. + * + * @return the icon field name + */ public String getIconField() { return iconField; } + /** + * Sets the name of the field used as the provider icon CSS class and + * refreshes the component model. + * + * @param iconField the icon field name + */ public void setIconField(String iconField) { this.iconField = iconField; initModel(); } + /** + * Returns the identifier of the currently selected provider item, or + * {@code null} if nothing is selected. + * + * @return selected provider id or {@code null} + */ public String getSelected() { selected = null; if (getSelectedItem() != null) { @@ -149,6 +268,13 @@ public String getSelected() { return selected; } + /** + * Programmatically selects the item whose identifier matches the provided + * {@code selected} value. If a matching item is found it is added to the + * selection of the underlying {@link ListModelList}. + * + * @param selected provider identifier to select + */ @SuppressWarnings({"unchecked", "rawtypes"}) public void setSelected(String selected) { if (!Objects.equals(selected, this.selected)) { @@ -162,23 +288,47 @@ public void setSelected(String selected) { } /** - * Return the ID of the item, using the idField property. By default it is "id", but you can change it to any field of your provider class. + * Returns the provider item's identifier by reading the configured {@code field} + * from the given {@code item} using reflection utilities. * - * @param item to check - * @return item id + * @param item provider instance to inspect + * @return identifier as string or {@code null} when it cannot be resolved */ protected String getItemId(Object item) { return getItemField(item, idField); } + /** + * Returns the provider item's display name by reading the configured + * {@link #nameField} from the given {@code item}. + * + * @param item provider instance to inspect + * @return display name as string or {@code null} when it cannot be resolved + */ protected String getItemName(Object item) { return getItemField(item, nameField); } + /** + * Returns the provider item's icon CSS class by reading the configured + * {@link #iconField} from the given {@code item}. + * + * @param item provider instance to inspect + * @return icon css class as string or {@code null} when it cannot be resolved + */ protected String getItemIcon(Object item) { return getItemField(item, iconField); } + /** + * Generic helper that reads a named field value from an object using + * {@link ObjectOperations#invokeGetMethod(Object, String)} and returns + * its string representation when present. + * + * @param item object to inspect + * @param field field name to read (getter must exist) + * @return field value as string or {@code null} if not found or not accessible + */ protected String getItemField(Object item, String field) { try { if (item != null) { From 7f4cdf74d7f3e8daefff53e83f7dada0486e9240 Mon Sep 17 00:00:00 2001 From: Mario Serrano Date: Sat, 18 Apr 2026 07:53:46 -0500 Subject: [PATCH 5/7] chore: update version to 26.4.1 in README and dependency sections --- README.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 34a6e104..8f27a045 100644 --- a/README.md +++ b/README.md @@ -16,16 +16,16 @@ ### ๐Ÿ“… CalVer Versioning -Starting with version **26.4.0**, Dynamia Platform adopts **Calendar Versioning (CalVer)** with the format `YY.MM.MINOR`. This means: +Starting with version **26.4.1**, Dynamia Platform adopts **Calendar Versioning (CalVer)** with the format `YY.MM.MINOR`. This means: - **All modules share the same version**: Core, extensions, starters, themesโ€”everything is released together -- **26.4.0** = First release of February 2026 (Year 26, Month 02, Release 0) +- **26.4.1** = First release of February 2026 (Year 26, Month 02, Release 0) - **26.2.1** = Second release of February 2026 - **26.3.0** = First release of March 2026 - **Unified releases** ensure compatibility and simplify dependency management - No more version mismatches between platform components! **Examples**: -- `26.4.0` โ†’ February 2026, first release +- `26.4.1` โ†’ February 2026, first release - `26.2.1` โ†’ February 2026, second release (hotfix or minor update) - `26.12.3` โ†’ December 2026, fourth release @@ -230,19 +230,19 @@ Enterprise authentication and authorization: tools.dynamia tools.dynamia.app - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.zk - 26.4.0 + 26.4.1 tools.dynamia tools.dynamia.domain.jpa - 26.4.0 + 26.4.1 ``` @@ -250,9 +250,9 @@ Enterprise authentication and authorization: **Gradle** (`build.gradle`) ```groovy dependencies { - implementation 'tools.dynamia:tools.dynamia.app:26.4.0' - implementation 'tools.dynamia:tools.dynamia.zk:26.4.0' - implementation 'tools.dynamia:tools.dynamia.domain.jpa:26.4.0' + implementation 'tools.dynamia:tools.dynamia.app:26.4.1' + implementation 'tools.dynamia:tools.dynamia.zk:26.4.1' + implementation 'tools.dynamia:tools.dynamia.domain.jpa:26.4.1' } ``` @@ -291,65 +291,65 @@ Enterprise authentication and authorization: ### Adding Extensions -To use any of the built-in extensions, simply add their dependencies. **All extensions now share the same version (26.4.0)** thanks to unified CalVer: +To use any of the built-in extensions, simply add their dependencies. **All extensions now share the same version (26.4.1)** thanks to unified CalVer: ```xml tools.dynamia.modules tools.dynamia.modules.saas - 26.4.0 + 26.4.1 tools.dynamia.modules tools.dynamia.modules.email - 26.4.0 + 26.4.1 tools.dynamia.modules tools.dynamia.modules.entityfiles - 26.4.0 + 26.4.1 tools.dynamia.modules tools.dynamia.modules.entityfiles.s3 - 26.4.0 + 26.4.1 tools.dynamia.modules tools.dynamia.modules.dashboard - 26.4.0 + 26.4.1 tools.dynamia.reports tools.dynamia.reports.core - 26.4.0 + 26.4.1 tools.dynamia.modules tools.dynamia.modules.fileimporter - 26.4.0 + 26.4.1 tools.dynamia.modules tools.dynamia.modules.security - 26.4.0 + 26.4.1 ``` -> **๐Ÿ’ก Pro Tip**: With CalVer, all Dynamia Platform components use the same version. Just use `26.4.0` for everything! +> **๐Ÿ’ก Pro Tip**: With CalVer, all Dynamia Platform components use the same version. Just use `26.4.1` for everything! > **Note**: All artifacts are available on [Maven Central](https://search.maven.org/search?q=tools.dynamia) @@ -472,7 +472,7 @@ Java 11+ and ecosystem update: - ๐Ÿš€ **Spring Boot 4** - Next-gen Spring ecosystem - ๐ŸŽจ **ZK 10+** - Modern web UI capabilities - ๐Ÿ”„ **Synchronized Releases** - Core, extensions, starters, and themes share the same version -- ๐ŸŽฏ **Simplified Dependencies** - One version to rule them all (e.g., 26.4.0 for February 2026) +- ๐ŸŽฏ **Simplified Dependencies** - One version to rule them all (e.g., 26.4.1 for February 2026) - โšก **Enhanced Performance** - Optimized for modern JVM and cloud environments - ๐Ÿ›ก๏ธ **Production Hardened** - Battle-tested in enterprise environments From db8280b4f2803dc4fe69dac8609e33a27d78335d Mon Sep 17 00:00:00 2001 From: Mario Serrano Date: Sun, 19 Apr 2026 16:18:41 -0500 Subject: [PATCH 6/7] refactor: rename item-related methods in ProviderPickerBox to improve clarity --- .../dynamia/zk/ui/ProviderPickerBox.java | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/platform/ui/zk/src/main/java/tools/dynamia/zk/ui/ProviderPickerBox.java b/platform/ui/zk/src/main/java/tools/dynamia/zk/ui/ProviderPickerBox.java index 9b984213..81e43ee9 100644 --- a/platform/ui/zk/src/main/java/tools/dynamia/zk/ui/ProviderPickerBox.java +++ b/platform/ui/zk/src/main/java/tools/dynamia/zk/ui/ProviderPickerBox.java @@ -117,12 +117,13 @@ public ProviderPickerBox() { setItemRenderer((item, data, index) -> { - String id = getItemId(item); + String id = getDataId(data); if (id == null) { throw new UiException(item + " has no id field named [" + idField + "]"); } - String name = getItemName(item); - String icon = getItemIcon(item); + + String name = getDataName(data); + String icon = getDataIcon(data); if (name == null) { @@ -280,7 +281,7 @@ public void setSelected(String selected) { if (!Objects.equals(selected, this.selected)) { this.selected = selected; if (getModel() instanceof ListModelList model) { - model.stream().filter(item -> Objects.equals(getItemId(item), selected)) + model.stream().filter(item -> Objects.equals(getDataId(item), selected)) .findFirst() .ifPresent(model::addToSelection); } @@ -291,33 +292,33 @@ public void setSelected(String selected) { * Returns the provider item's identifier by reading the configured {@code field} * from the given {@code item} using reflection utilities. * - * @param item provider instance to inspect + * @param data provider instance to inspect * @return identifier as string or {@code null} when it cannot be resolved */ - protected String getItemId(Object item) { - return getItemField(item, idField); + protected String getDataId(Object data) { + return getDataField(data, idField); } /** * Returns the provider item's display name by reading the configured * {@link #nameField} from the given {@code item}. * - * @param item provider instance to inspect + * @param data provider instance to inspect * @return display name as string or {@code null} when it cannot be resolved */ - protected String getItemName(Object item) { - return getItemField(item, nameField); + protected String getDataName(Object data) { + return getDataField(data, nameField); } /** * Returns the provider item's icon CSS class by reading the configured * {@link #iconField} from the given {@code item}. * - * @param item provider instance to inspect + * @param data provider instance to inspect * @return icon css class as string or {@code null} when it cannot be resolved */ - protected String getItemIcon(Object item) { - return getItemField(item, iconField); + protected String getDataIcon(Object data) { + return getDataField(data, iconField); } /** @@ -325,14 +326,14 @@ protected String getItemIcon(Object item) { * {@link ObjectOperations#invokeGetMethod(Object, String)} and returns * its string representation when present. * - * @param item object to inspect + * @param data object to inspect * @param field field name to read (getter must exist) * @return field value as string or {@code null} if not found or not accessible */ - protected String getItemField(Object item, String field) { + protected String getDataField(Object data, String field) { try { - if (item != null) { - Object fieldValue = ObjectOperations.invokeGetMethod(item, field); + if (data != null) { + Object fieldValue = ObjectOperations.invokeGetMethod(data, field); if (fieldValue != null) { return fieldValue.toString(); } From c6d59b81273e02fe80cf120abc0b28becc5912ce Mon Sep 17 00:00:00 2001 From: Mario Serrano Date: Sun, 19 Apr 2026 16:18:49 -0500 Subject: [PATCH 7/7] refactor: reorder fields in AccountForm.yml for improved organization --- .../ui/src/main/resources/META-INF/descriptors/AccountForm.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountForm.yml b/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountForm.yml index c7ba325f..e692fac6 100644 --- a/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountForm.yml +++ b/extensions/saas/sources/ui/src/main/resources/META-INF/descriptors/AccountForm.yml @@ -132,7 +132,7 @@ groups: fields: [ reseller, resellerAgent, resellerInvoice, resellerInvoiceDate, resellerComments ] configuration: - fields: [ locale, timeZone,skin, maxUsers,statusDescription,uuid,instanceUuid,creationDate,remote,autoInit,requiredInstanceUuid,redirect,templateAccount,customPaymentProvider ] + fields: [ locale, timeZone,skin, maxUsers,statusDescription,uuid,instanceUuid,creationDate,customPaymentProvider,remote,autoInit,requiredInstanceUuid,redirect,templateAccount, ] notification: fields: [ globalMessage,globalMessageType,showGlobalMessage ]