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

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 7540c898e880 camel-printer: resolve mediaSize values whose case or 
family prefix differ (#29472)
7540c898e880 is described below

commit 7540c898e880cb8fae2b06363f3b9d611878c0f6
Author: dhairya05 <[email protected]>
AuthorDate: Mon Nov 9 19:19:20 2026 +0530

    camel-printer: resolve mediaSize values whose case or family prefix differ 
(#29472)
---
 .../camel/component/printer/MediaSizeAssigner.java | 37 ++++++++++-
 .../component/printer/PrinterConfiguration.java    | 16 +----
 .../component/printer/MediaSizeAssignerTest.java   | 73 ++++++++++++++++++++++
 3 files changed, 110 insertions(+), 16 deletions(-)

diff --git 
a/components/camel-printer/src/main/java/org/apache/camel/component/printer/MediaSizeAssigner.java
 
b/components/camel-printer/src/main/java/org/apache/camel/component/printer/MediaSizeAssigner.java
index 597c4c6e9118..36470428e999 100644
--- 
a/components/camel-printer/src/main/java/org/apache/camel/component/printer/MediaSizeAssigner.java
+++ 
b/components/camel-printer/src/main/java/org/apache/camel/component/printer/MediaSizeAssigner.java
@@ -19,9 +19,40 @@ package org.apache.camel.component.printer;
 import javax.print.attribute.standard.MediaSizeName;
 
 public class MediaSizeAssigner {
-    private MediaSizeName mediaSizeName;
+
+    /**
+     * Resolves the media size as named by the {@link MediaSizeName} 
enumeration.
+     * <p/>
+     * The value is matched ignoring case, and {@code -} is accepted in place 
of {@code _}, so that the documented
+     * default of {@code na-letter} can also be given explicitly. A value that 
does not belong to the family its prefix
+     * suggests is looked up in the remaining sizes as well, so sizes such as 
{@code iso_designated_long} resolve.
+     *
+     * @param  size                     the configured media size
+     * @return                          the matching media size name
+     * @throws IllegalArgumentException if the value does not name a known 
media size
+     */
+    public MediaSizeName selectMediaSizeName(String size) {
+        String name = size.replace('-', '_');
+
+        MediaSizeName answer = null;
+        if (name.regionMatches(true, 0, "iso", 0, "iso".length())) {
+            answer = selectMediaSizeNameISO(name);
+        } else if (name.regionMatches(true, 0, "jis", 0, "jis".length())) {
+            answer = selectMediaSizeNameJIS(name);
+        } else if (name.regionMatches(true, 0, "na", 0, "na".length())) {
+            answer = selectMediaSizeNameNA(name);
+        }
+        if (answer == null) {
+            answer = selectMediaSizeNameOther(name);
+        }
+        if (answer == null) {
+            throw new IllegalArgumentException("Unknown mediaSize: " + size);
+        }
+        return answer;
+    }
 
     public MediaSizeName selectMediaSizeNameISO(String size) {
+        MediaSizeName mediaSizeName = null;
         if (size.equalsIgnoreCase("iso_a0")) {
             mediaSizeName = MediaSizeName.ISO_A0;
         } else if (size.equalsIgnoreCase("iso_a1")) {
@@ -85,7 +116,7 @@ public class MediaSizeAssigner {
     }
 
     public MediaSizeName selectMediaSizeNameJIS(String size) {
-
+        MediaSizeName mediaSizeName = null;
         if (size.equalsIgnoreCase("jis_b0")) {
             mediaSizeName = MediaSizeName.JIS_B0;
         } else if (size.equalsIgnoreCase("jis_b1")) {
@@ -114,6 +145,7 @@ public class MediaSizeAssigner {
     }
 
     public MediaSizeName selectMediaSizeNameNA(String size) {
+        MediaSizeName mediaSizeName = null;
         if (size.equalsIgnoreCase("na_letter")) {
             mediaSizeName = MediaSizeName.NA_LETTER;
         } else if (size.equalsIgnoreCase("na_legal")) {
@@ -188,6 +220,7 @@ public class MediaSizeAssigner {
     }
 
     public MediaSizeName selectMediaSizeNameOther(String size) {
+        MediaSizeName mediaSizeName = null;
         if (size.equalsIgnoreCase("executive")) {
             mediaSizeName = MediaSizeName.EXECUTIVE;
         } else if (size.equalsIgnoreCase("ledger")) {
diff --git 
a/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterConfiguration.java
 
b/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterConfiguration.java
index 7856cc990751..bbddc3738568 100644
--- 
a/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterConfiguration.java
+++ 
b/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterConfiguration.java
@@ -180,24 +180,12 @@ public class PrinterConfiguration {
     }
 
     private MediaSizeName assignMediaSize(String size) {
-        MediaSizeAssigner mediaSizeAssigner = new MediaSizeAssigner();
-
-        MediaSizeName answer;
-
         if (size == null) {
             // default to NA letter if no size configured
-            answer = MediaSizeName.NA_LETTER;
-        } else if (size.regionMatches(true, 0, "iso", 0, "iso".length())) {
-            answer = mediaSizeAssigner.selectMediaSizeNameISO(size);
-        } else if (size.startsWith("jis")) {
-            answer = mediaSizeAssigner.selectMediaSizeNameJIS(size);
-        } else if (size.startsWith("na")) {
-            answer = mediaSizeAssigner.selectMediaSizeNameNA(size);
-        } else {
-            answer = mediaSizeAssigner.selectMediaSizeNameOther(size);
+            return MediaSizeName.NA_LETTER;
         }
 
-        return answer;
+        return new MediaSizeAssigner().selectMediaSizeName(size);
     }
 
     public Sides assignSides(String sidesString) {
diff --git 
a/components/camel-printer/src/test/java/org/apache/camel/component/printer/MediaSizeAssignerTest.java
 
b/components/camel-printer/src/test/java/org/apache/camel/component/printer/MediaSizeAssignerTest.java
new file mode 100644
index 000000000000..be117e4c8231
--- /dev/null
+++ 
b/components/camel-printer/src/test/java/org/apache/camel/component/printer/MediaSizeAssignerTest.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.printer;
+
+import javax.print.attribute.standard.MediaSizeName;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+public class MediaSizeAssignerTest {
+
+    private final MediaSizeAssigner assigner = new MediaSizeAssigner();
+
+    @Test
+    public void testLowercaseNames() {
+        assertSame(MediaSizeName.ISO_A4, 
assigner.selectMediaSizeName("iso_a4"));
+        assertSame(MediaSizeName.JIS_B4, 
assigner.selectMediaSizeName("jis_b4"));
+        assertSame(MediaSizeName.NA_LETTER, 
assigner.selectMediaSizeName("na_letter"));
+        assertSame(MediaSizeName.EXECUTIVE, 
assigner.selectMediaSizeName("executive"));
+    }
+
+    @Test
+    public void testNamesAreCaseInsensitive() {
+        // the mediaSize option documents that the value's case is ignored
+        assertSame(MediaSizeName.ISO_A4, 
assigner.selectMediaSizeName("ISO_A4"));
+        assertSame(MediaSizeName.JIS_B4, 
assigner.selectMediaSizeName("JIS_B4"));
+        assertSame(MediaSizeName.NA_LETTER, 
assigner.selectMediaSizeName("NA_LETTER"));
+        assertSame(MediaSizeName.EXECUTIVE, 
assigner.selectMediaSizeName("Executive"));
+    }
+
+    @Test
+    public void testHyphenIsAcceptedForUnderscore() {
+        // na-letter is the documented default value of the mediaSize option
+        assertSame(MediaSizeName.NA_LETTER, 
assigner.selectMediaSizeName("na-letter"));
+        assertSame(MediaSizeName.ISO_A4, 
assigner.selectMediaSizeName("iso-a4"));
+        assertSame(MediaSizeName.NA_NUMBER_10_ENVELOPE, 
assigner.selectMediaSizeName("na-number-10-envelope"));
+    }
+
+    @Test
+    public void testSizeOutsideTheFamilyItsPrefixSuggests() {
+        // iso_designated_long and iso_c3 are not part of the ISO A/B/C series 
tables
+        assertSame(MediaSizeName.ISO_DESIGNATED_LONG, 
assigner.selectMediaSizeName("iso_designated_long"));
+        assertSame(MediaSizeName.ISO_DESIGNATED_LONG, 
assigner.selectMediaSizeName("ISO_DESIGNATED_LONG"));
+    }
+
+    @Test
+    public void testUnknownSizeIsRejected() {
+        IllegalArgumentException e
+                = assertThrows(IllegalArgumentException.class, () -> 
assigner.selectMediaSizeName("no_such_size"));
+        assertEquals("Unknown mediaSize: no_such_size", e.getMessage());
+
+        // an unmatched value must not leak the result of an earlier lookup 
either
+        assigner.selectMediaSizeName("iso_a4");
+        assertThrows(IllegalArgumentException.class, () -> 
assigner.selectMediaSizeName("iso_a99"));
+    }
+}

Reply via email to