- Finalized the resolvePath logic in DynFormConfigurable to ensure strict project-root orientation.
- Cleaned up temporary test scripts and agent artifacts.
- Included minor updates to resource examples.
- Implemented DynFormAnnotator to validate field usage in <LAYOUT> and <FILTERS> against their respective <FIELDS> definitions.
- Refined ActionBean generator logic for NUMBER and DATE column width calculation.
- Improved window management and focus for newly generated files using FileEditorManagerEx.
- Bumped plugin version to 3.2.6.
- Added comprehensive reference and completion support for FORM-NAME in DATASET > FIELDS > FIELD.
- Implemented smart field resolution to target hidden fields in FORM_ENTRY > FIELDS and named fields in FORM_ENTRY > LAYOUT.
- Enhanced form scanning to recursively discover fields across all included .frml files.
- Bumped plugin version to 3.2.5.
- Implemented persistent directory memory for Action Model and Dataset generators (per project).
- Added configuration to automatically open generated files in the editor with a customizable limit.
- Enforced strict project-scope file selection for i18n and XSD settings.
- Switched to relative path storage for i18n/XSD configuration to enhance project portability.
- Improved File Browser logic to start at the current directory or fallback to project root.
- Fixed compilation errors and optimized imports in configuration classes.
- Bumped plugin version to 3.2.4.
- Implemented comprehensive reference and completion support for <FOREIGN-DATASETS> and <MASTER-DATA> tags.
- Enhanced dataset resolution to support recursive scanning across included .frml files.
- Improved field resolution logic for MASTER-FIELDS and DETAIL-FIELDS to resolve from datasets specified by DATASET-ID or DATAID.
- Bumped plugin version to 3.2.3 and updated change notes.
- Updated the I18n settings to allow selecting the message bundle XML file directly via a file browser (TextFieldWithBrowseButton).
- Modified I18nUtils to load message files via absolute paths from project settings, improving reliability.
- Bumped plugin version to 3.2.2 and updated change notes.
- Schema Validation (XSD):
- Added new configuration UI for DynamicForm Tools to manage XSD schemas.
- Implemented DynFormXsdScanner to automatically map local .xsd files to the ExternalResourceManager using a custom URI prefix.
- Ensured XSD registration is properly scoped at the Project-level (rather than Application-level) using write-actions to comply with IDE threading policies.
- Architecture & Refactoring:
- Renamed base package from com.sdk.dynformTools to com.sdk.dynform across the entire project for structural consistency.
- Converted Application-level settings/configurables to Project-level services.
- Extracted and restored complex I18n folding and inlay hint logic that was previously overwritten, adapting it to use the new Project-level settings.
- UI & Metadata:
- Bumped plugin version to 3.2.0.
- Rebranded settings page to "DynamicForm Tools".
- Organized settings into logical "Internationalization" and "Schema Validation" groups.
- Core Logic Enhancements:
- Implement bidirectional field referencing between <FIELDS>, <LAYOUT>, and <TITLES> tags in .frml files, enabling seamless navigation from definitions to usages and vice versa.
- Add robust support for AJAX-OPTION field mapping:
- SRC attribute: Links to field definitions within defs/ajax.xml datasets.
- TARGET attribute: Links to local field definitions within the same form.
- Implement global grid resolution: GRID-ID now searches across the current file and all recursively included files (<INCLUDE>).
- Enhance deep recursive search for fields/sections within nested tags like <SECTION>, <ROW>, and <FIELD-LIST>.
- Path Resolution & Helpers (DynFormPathUtils):
- Added support for module-relative paths starting with # (mapping to view/frm/).
- Added support for cross-module paths starting with / (mapping to WEB-INF/app/module/{module}/view/frm/).
- Implemented auto-correction for common keyboard typos (Thai 'ิ' instead of /).
- Added specialized helpers for locating ajax.xml and included files within the framework's structure.
- Smart Completion Enhancements:
- Added context-aware completion for TARGET and SRC fields in AJAX update-fields.
- Enabled global GRID-ID completion by scanning all included resources.
- Improved dataset completion to include both local and AJAX-defined datasets.
- Test Resources:
- Added a comprehensive set of real-world examples (bdgt04, bdgt05, bdgt06) in DevResources/full-examples/ to validate complex cross-module and master-detail scenarios.
- Rebranded plugin from "ActionModelsGenerator" to "Dynamic Form Helper".
- Refactored package structure from "com.sdk.generators" to "com.sdk.dynform.tools".
- Added comprehensive I18n support for Java, XML, and JavaScript:
- Inlay hints and code folding for internationalization keys.
- Completion and reference contributors for "message.xml" keys.
- Configuration settings and UI for i18n tools.
- Introduced support for the ".frml" (DynForm) file type.
- Added specialized DynForm completion and path resolution helpers.
- Updated "build.gradle.kts" with JSP and JavaScript platform dependencies.
- Updated documentation and project metadata to reflect the new name.
- Grouped database actions into a single "Generate Action Models" popup menu.
- Renamed base action to "Generate Action Models V2" for clarity.
- Improved context menu organization in the Database View.
- Update GUtils.java to handle case-insensitive column type mapping.
- Add "number" type mapping to support more database dialects.
- Add DevResources/Dataset.xml as a sample dataset definition.
- Added 'Generate Dataset XML' feature to automate table definitions from database schema.
- Implemented intelligent label generation (prioritizing comments) and automatic type mapping for XML.
- Added 'Generate Action Models V3' supporting the new sdk.db package structure.
- Updated release notes and bumped version to 2.1.0.
- Registered new actions with keyboard shortcuts in plugin.xml.
The generator was failing to identify primary key columns, resulting in generated beans without them. This has been fixed by updating the code to use the `getColumnsRef()` method, which correctly retrieves the column names for the primary key.
This commit refactors the project structure by moving generator-related classes
to a new package (`com.sdk.generators.actionmodels`) and standardizing
template directory names (`src/main/resources/templates`).
It introduces new FreeMarker templates (`actionDTO.ftl`, `actionDTO.extend.ftl`)
and corresponding logic in `GeneratorServices.java` to support the generation
of Data Transfer Object (DTO) classes alongside ActionBeans. The changes
also involve enhancements related to `ActionField` and `DTOField` generation.
Updates to `build.gradle.kts`, `plugin.xml`, and Gradle wrapper files
reflect these structural and functional enhancements.
Introduces GEMINI.md to provide a comprehensive overview of the ActionModelsGenerator project,
including its purpose, core technologies, build instructions, and development conventions.
This document serves as essential context for future interactions and development.