This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch WW-3871-typeconversion-key-derivation
in repository https://gitbox.apache.org/repos/asf/struts.git

commit 734f85982359d5b4dff0a9d7414a0cc3f38ed130
Author: Lukasz Lenart <[email protected]>
AuthorDate: Sat Jul 25 15:09:41 2026 +0200

    WW-3871 feat(core): add ConversionRule#prefix() owning the rule-to-prefix 
table
---
 .../conversion/annotations/ConversionRule.java     | 21 ++++++++++++++++++
 .../annotations/ConversionRuleTest.java}           | 25 +++++++++++-----------
 2 files changed, 34 insertions(+), 12 deletions(-)

diff --git 
a/core/src/main/java/org/apache/struts2/conversion/annotations/ConversionRule.java
 
b/core/src/main/java/org/apache/struts2/conversion/annotations/ConversionRule.java
index fa75f69e4..090a6709a 100644
--- 
a/core/src/main/java/org/apache/struts2/conversion/annotations/ConversionRule.java
+++ 
b/core/src/main/java/org/apache/struts2/conversion/annotations/ConversionRule.java
@@ -18,6 +18,8 @@
  */
 package org.apache.struts2.conversion.annotations;
 
+import org.apache.struts2.conversion.impl.DefaultObjectTypeDeterminer;
+
 /**
  * <code>ConversionRule</code>
  *
@@ -28,6 +30,25 @@ public enum ConversionRule {
 
     PROPERTY, COLLECTION, MAP, KEY, KEY_PROPERTY, ELEMENT, CREATE_IF_NULL;
 
+    /**
+     * The prefix a conversion mapping key carries for this rule, as read back 
by
+     * {@link DefaultObjectTypeDeterminer}. {@code PROPERTY} and {@code MAP} 
have no prefix of their
+     * own: map and collection metadata is read through the {@code Key_} and 
{@code Element_} keys.
+     *
+     * @return the mapping key prefix, never null; an empty string when the 
rule has none
+     * @since 7.3.0
+     */
+    public String prefix() {
+        return switch (this) {
+            case COLLECTION -> 
DefaultObjectTypeDeterminer.DEPRECATED_ELEMENT_PREFIX;
+            case CREATE_IF_NULL -> 
DefaultObjectTypeDeterminer.CREATE_IF_NULL_PREFIX;
+            case ELEMENT -> DefaultObjectTypeDeterminer.ELEMENT_PREFIX;
+            case KEY -> DefaultObjectTypeDeterminer.KEY_PREFIX;
+            case KEY_PROPERTY -> 
DefaultObjectTypeDeterminer.KEY_PROPERTY_PREFIX;
+            case PROPERTY, MAP -> "";
+        };
+    }
+
     @Override
     public String toString() {
         return super.toString().toUpperCase();
diff --git 
a/core/src/main/java/org/apache/struts2/conversion/annotations/ConversionRule.java
 
b/core/src/test/java/org/apache/struts2/conversion/annotations/ConversionRuleTest.java
similarity index 58%
copy from 
core/src/main/java/org/apache/struts2/conversion/annotations/ConversionRule.java
copy to 
core/src/test/java/org/apache/struts2/conversion/annotations/ConversionRuleTest.java
index fa75f69e4..04e63e1ec 100644
--- 
a/core/src/main/java/org/apache/struts2/conversion/annotations/ConversionRule.java
+++ 
b/core/src/test/java/org/apache/struts2/conversion/annotations/ConversionRuleTest.java
@@ -18,19 +18,20 @@
  */
 package org.apache.struts2.conversion.annotations;
 
-/**
- * <code>ConversionRule</code>
- *
- * @author Rainer Hermanns
- * @version $Id$
- */
-public enum ConversionRule {
+import org.junit.Test;
 
-    PROPERTY, COLLECTION, MAP, KEY, KEY_PROPERTY, ELEMENT, CREATE_IF_NULL;
+import static org.junit.Assert.assertEquals;
 
-    @Override
-    public String toString() {
-        return super.toString().toUpperCase();
+public class ConversionRuleTest {
+
+    @Test
+    public void prefixIsDefinedForEveryRule() {
+        assertEquals("", ConversionRule.PROPERTY.prefix());
+        assertEquals("", ConversionRule.MAP.prefix());
+        assertEquals("Collection_", ConversionRule.COLLECTION.prefix());
+        assertEquals("CreateIfNull_", ConversionRule.CREATE_IF_NULL.prefix());
+        assertEquals("Element_", ConversionRule.ELEMENT.prefix());
+        assertEquals("Key_", ConversionRule.KEY.prefix());
+        assertEquals("KeyProperty_", ConversionRule.KEY_PROPERTY.prefix());
     }
 }
-

Reply via email to