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"));
+ }
+}