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()); } } -
