feat: implement project-level XSD registration and refactor base package

- 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.
This commit is contained in:
2026-04-10 22:51:47 +07:00
parent c76ca9a293
commit 660c7a058c
22 changed files with 2094 additions and 179 deletions

View File

@@ -2,11 +2,11 @@
<idea-plugin>
<!-- Unique id for this plugin. Must stay constant for the life of the plugin. -->
<id>com.sdk.dynform.tools</id>
<name>Dynamic Form Helper</name>
<name>DynamicForm Tools</name>
<vendor>Sakda Sakprapakorn</vendor>
<description><![CDATA[
<h3>Enhance Development with Dynamic Form Tools</h3>
<h3>Enhance Development with DynamicForm Tools</h3>
<p>This plugin is a comprehensive suite of tools designed to streamline the development of Java-based web applications (like <code>vrms-system</code> and <code>teddy-taxi-web</code>) that utilize the DynForm framework.</p>
<h4>Core Modules:</h4>
@@ -29,11 +29,17 @@
<h4>Usage:</h4>
<ul>
<li><b>Generation:</b> Right-click a table in the <b>Database tool window</b> -> <b>"Generate Action Models"</b>.</li>
<li><b>I18n:</b> Type <code>@M{</code> in XML or use supported I18n methods in Java/JS to see suggestions. Configure message file paths in <b>Settings -> DynForm I18n Tools</b>.</li>
<li><b>I18n:</b> Type <code>@M{</code> in XML or use supported I18n methods in Java/JS to see suggestions. Configure message file paths in <b>Settings -> DynamicForm Tools</b>.</li>
</ul>
]]></description>
<change-notes><![CDATA[
<h2>[3.2.0]</h2>
<ul>
<li><strong>Schema Validation:</strong> Introduced project-level automatic XSD registration. Configure a target folder and namespace prefix to seamlessly map <code>.xsd</code> files to the <code>ExternalResourceManager</code>.</li>
<li><strong>Architecture:</strong> Finalized rebranding by standardizing internal packages to <code>com.sdk.dynform.*</code> for better consistency.</li>
<li><strong>UI Improvement:</strong> Streamlined the plugin settings UI into distinct Internationalization and Schema Validation groups.</li>
</ul>
<h2>[3.1.0]</h2>
<ul>
<li><strong>Advanced Navigation:</strong> Implemented bidirectional field referencing between <code>&lt;FIELDS&gt;</code>, <code>&lt;LAYOUT&gt;</code>, and <code>&lt;TITLES&gt;</code> tags in <code>.frml</code> files.</li>
@@ -50,7 +56,7 @@
</ul>
<h2>[3.0.1]</h2>
<ul>
<li><strong>Rebranding:</strong> Renamed plugin to "Dynamic Form Helper" (DynamicFormTools) to better reflect its expanding capabilities beyond code generation.</li>
<li><strong>Rebranding:</strong> Renamed plugin to "DynamicForm Tools" to better reflect its expanding capabilities beyond code generation.</li>
<li><strong>I18n Support:</strong> Added comprehensive tools for internationalization:
<ul>
<li>Inlay hints and code folding for i18n keys in Java, XML, and JavaScript.</li>
@@ -96,20 +102,20 @@
<depends>JavaScript</depends>
<actions>
<group id="com.sdk.dynform.tools.generators.actionmodels.GeneratorGroup" popup="true" text="Generate Action Models">
<group id="com.sdk.dynform.tools.actionbean.actionmodels.GeneratorGroup" popup="true" text="Generate Action Models">
<add-to-group group-id="DatabaseViewPopupMenu" anchor="first"/>
<action id="com.sdk.dynform.tools.generators.actionmodels.GenerateBeanAction"
class="com.sdk.dynform.tools.generators.actionmodels.GenerateBeanAction"
<action id="com.sdk.dynform.tools.actionbean.GenerateBeanAction"
class="com.sdk.dynform.tools.actionbean.GenerateBeanAction"
text="Generate Action Models V2"
description="Generates ActionBean classes from a database schema.">
</action>
<action id="com.sdk.dynform.tools.generators.actionmodels.GenerateBeanAction.v3"
class="com.sdk.dynform.tools.generators.actionmodels.GenerateBeanActionV3"
<action id="com.sdk.dynform.tools.actionbean.GenerateBeanAction.v3"
class="com.sdk.dynform.tools.actionbean.GenerateBeanActionV3"
text="Generate Action Models V3"
description="Generates ActionBean classes from a database schema V3 (sdk.db.xxx).">
</action>
<action id="com.sdk.dynform.tools.generators.actionmodels.GenerateDatasetAction"
class="com.sdk.dynform.tools.generators.actionmodels.GenerateDatasetAction"
<action id="com.sdk.dynform.tools.actionbean.GenerateDatasetAction"
class="com.sdk.dynform.tools.actionbean.GenerateDatasetAction"
text="Generate Dataset XML"
description="Generates Dataset XML definition from a database table.">
</action>
@@ -117,12 +123,13 @@
</actions>
<extensions defaultExtensionNs="com.intellij">
<applicationService serviceImplementation="com.sdk.dynform.tools.i18n.I18nSettings"/>
<applicationConfigurable instance="com.sdk.dynform.tools.i18n.I18nConfigurable"
id="com.sdk.dynform.tools.i18n.I18nConfigurable"
displayName="DynForm I18n Tools"/>
<projectService serviceImplementation="com.sdk.dynform.tools.config.DynFormSettings"/>
<projectConfigurable instance="com.sdk.dynform.tools.config.DynFormConfigurable"
id="com.sdk.dynform.tools.config.DynFormConfigurable"
displayName="DynamicForm Tools"
nonDefaultProject="true"/>
<fileType name="FRML" implementationClass="com.sdk.dynform.tools.helper.FRMLFileType" extensions="frml" language="XML"/>
<fileType name="FRML" implementationClass="com.sdk.dynform.tools.dynform.FRMLFileType" extensions="frml" language="XML"/>
<notificationGroup id="Dynamic-Form-Tools-Notification" displayType="BALLOON" isLogByDefault="true"/>
<!-- Folding Builders -->
@@ -140,18 +147,18 @@
<psi.referenceContributor language="XML" implementation="com.sdk.dynform.tools.i18n.I18nReferenceContributor"/>
<psi.referenceContributor language="JavaScript" implementation="com.sdk.dynform.tools.i18n.I18nReferenceContributor"/>
<psi.referenceContributor language="JAVA" implementation="com.sdk.dynform.tools.helper.DynFormReferenceContributor"/>
<psi.referenceContributor language="XML" implementation="com.sdk.dynform.tools.helper.DynFormReferenceContributor"/>
<psi.referenceContributor language="JavaScript" implementation="com.sdk.dynform.tools.helper.DynFormReferenceContributor"/>
<psi.referenceContributor language="JAVA" implementation="com.sdk.dynform.tools.dynform.DynFormReferenceContributor"/>
<psi.referenceContributor language="XML" implementation="com.sdk.dynform.tools.dynform.DynFormReferenceContributor"/>
<psi.referenceContributor language="JavaScript" implementation="com.sdk.dynform.tools.dynform.DynFormReferenceContributor"/>
<!-- Completion Contributors -->
<completion.contributor language="JAVA" implementationClass="com.sdk.dynform.tools.i18n.I18nCompletionContributor"/>
<completion.contributor language="XML" implementationClass="com.sdk.dynform.tools.i18n.I18nCompletionContributor"/>
<completion.contributor language="JavaScript" implementationClass="com.sdk.dynform.tools.i18n.I18nCompletionContributor"/>
<completion.contributor language="JAVA" implementationClass="com.sdk.dynform.tools.helper.DynFormCompletionContributor"/>
<completion.contributor language="XML" implementationClass="com.sdk.dynform.tools.helper.DynFormCompletionContributor"/>
<completion.contributor language="JavaScript" implementationClass="com.sdk.dynform.tools.helper.DynFormCompletionContributor"/>
<completion.contributor language="JAVA" implementationClass="com.sdk.dynform.tools.dynform.DynFormCompletionContributor"/>
<completion.contributor language="XML" implementationClass="com.sdk.dynform.tools.dynform.DynFormCompletionContributor"/>
<completion.contributor language="JavaScript" implementationClass="com.sdk.dynform.tools.dynform.DynFormCompletionContributor"/>
</extensions>
</idea-plugin>
</idea-plugin>