From eb054718246012f6df53160dc9438bcecb1ef076 Mon Sep 17 00:00:00 2001 From: Evert Tigchelaar Date: Fri, 13 Jul 2012 14:56:10 +0200 Subject: [PATCH 1/2] Added MediaTray support. --- .../printer/PrinterConfiguration.java | 12 ++++++ .../component/printer/PrinterProducer.java | 41 +++++++++++++++++++ .../component/printer/PrinterPrintTest.java | 34 +++++++++++++++ 3 files changed, 87 insertions(+) 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 b218b94667a80..e9d2f84018f07 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 @@ -40,6 +40,7 @@ public class PrinterConfiguration { private String sides; private Sides internalSides; private boolean sendToPrinter = true; + private String mediaTray; public PrinterConfiguration() { } @@ -82,6 +83,10 @@ public void parseURI(URI uri) throws Exception { setSendToPrinter(false); } } + + if (printSettings.containsKey("mediaTray")) { + setMediaTray((String) printSettings.get("mediaTray")); + } } private DocFlavor assignDocFlavor(String flavor, String mimeType) throws Exception { @@ -294,4 +299,11 @@ public void setSendToPrinter(boolean sendToPrinter) { this.sendToPrinter = sendToPrinter; } + public String getMediaTray() { + return mediaTray; + } + + public void setMediaTray(String mediaTray) { + this.mediaTray = mediaTray; + } } diff --git a/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterProducer.java b/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterProducer.java index 7298c7216c67e..3a1b1ad1840ac 100644 --- a/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterProducer.java +++ b/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterProducer.java @@ -25,6 +25,8 @@ import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; import javax.print.attribute.standard.Copies; +import javax.print.attribute.standard.Media; +import javax.print.attribute.standard.MediaTray; import org.apache.camel.Endpoint; import org.apache.camel.Exchange; @@ -70,9 +72,48 @@ private PrintRequestAttributeSet assignPrintAttributes() throws PrintException { printRequestAttributeSet.add(config.getMediaSizeName()); printRequestAttributeSet.add(config.getInternalSides()); + if (config.getMediaTray() != null) { + MediaTray mediaTray = resolveMediaTray(config.getMediaTray()); + + if (mediaTray == null) { + throw new PrintException("mediatray not found " + config.getMediaTray()); + } + + printRequestAttributeSet.add(mediaTray); + } + return printRequestAttributeSet; } + private MediaTray resolveMediaTray(String tray) { + Media med[] = (Media[]) getPrintService().getSupportedAttributeValues(Media.class, null, null); + + if (med == null) { + return null; + } else { + MediaTray foundTray = null; + + for (int i = 0; foundTray == null && i < med.length; i++) { + Media media = med[i]; + + if (media instanceof MediaTray) { + MediaTray mediaTray = (MediaTray) media; + + String trayName = mediaTray.toString().trim(); + + if (trayName.contains(" ")) { + trayName = trayName.replace(' ', '_'); + } + + if (trayName.equals(tray)) { + return mediaTray; + } + } + } + return null; + } + } + private PrintService assignPrintService() throws PrintException { PrintService printService; diff --git a/components/camel-printer/src/test/java/org/apache/camel/component/printer/PrinterPrintTest.java b/components/camel-printer/src/test/java/org/apache/camel/component/printer/PrinterPrintTest.java index 40e162def38f3..500806c11b73c 100644 --- a/components/camel-printer/src/test/java/org/apache/camel/component/printer/PrinterPrintTest.java +++ b/components/camel-printer/src/test/java/org/apache/camel/component/printer/PrinterPrintTest.java @@ -25,7 +25,12 @@ import javax.print.DocPrintJob; import javax.print.PrintService; import javax.print.PrintServiceLookup; +import javax.print.attribute.Attribute; import javax.print.attribute.PrintRequestAttributeSet; +import javax.print.attribute.standard.Media; +import javax.print.attribute.standard.MediaSizeName; +import javax.print.attribute.standard.MediaTray; +import javax.print.attribute.standard.Sides; import org.apache.camel.Endpoint; import org.apache.camel.Exchange; @@ -271,6 +276,29 @@ public void configure() { context.stop(); assertMockEndpointsSatisfied(); } + + @Test + public void printToMiddleTray() throws Exception { + PrinterEndpoint endpoint = new PrinterEndpoint(); + PrinterConfiguration configuration = new PrinterConfiguration(); + configuration.setHostname("localhost"); + configuration.setPort(631); + configuration.setPrintername("DefaultPrinter"); + configuration.setMediaSizeName(MediaSizeName.ISO_A4); + configuration.setInternalSides(Sides.ONE_SIDED); + configuration.setMediaTray("middle"); + + PrinterProducer producer = new PrinterProducer(endpoint, configuration); + producer.start(); + PrinterOperations printerOperations = producer.getPrinterOperations(); + PrintRequestAttributeSet attributeSet = printerOperations.getPrintRequestAttributeSet(); + + Attribute attribute = attributeSet.get(javax.print.attribute.standard.Media.class); + assertNotNull(attribute); + assertTrue(attribute instanceof MediaTray); + MediaTray mediaTray = (MediaTray) attribute; + assertEquals("middle", mediaTray.toString()); + } protected void setupJavaPrint() { // "install" another default printer @@ -282,6 +310,12 @@ protected void setupJavaPrint() { when(psLookup.getDefaultPrintService()).thenReturn(psDefault); DocPrintJob docPrintJob = mock(DocPrintJob.class); when(psDefault.createPrintJob()).thenReturn(docPrintJob); + MediaTray[] trays = new MediaTray[]{ + MediaTray.TOP, + MediaTray.MIDDLE, + MediaTray.BOTTOM + }; + when(psDefault.getSupportedAttributeValues(Media.class, null, null)).thenReturn(trays); PrintServiceLookup.registerServiceProvider(psLookup); } } From 2671159f9ba1c96e1d75989c6f7e84733735af23 Mon Sep 17 00:00:00 2001 From: Evert Tigchelaar Date: Tue, 24 Jul 2012 14:12:19 +0200 Subject: [PATCH 2/2] checkstyle fixes --- .../apache/camel/component/printer/PrinterPrintTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/camel-printer/src/test/java/org/apache/camel/component/printer/PrinterPrintTest.java b/components/camel-printer/src/test/java/org/apache/camel/component/printer/PrinterPrintTest.java index 500806c11b73c..d0dc700bd130a 100644 --- a/components/camel-printer/src/test/java/org/apache/camel/component/printer/PrinterPrintTest.java +++ b/components/camel-printer/src/test/java/org/apache/camel/component/printer/PrinterPrintTest.java @@ -311,9 +311,9 @@ protected void setupJavaPrint() { DocPrintJob docPrintJob = mock(DocPrintJob.class); when(psDefault.createPrintJob()).thenReturn(docPrintJob); MediaTray[] trays = new MediaTray[]{ - MediaTray.TOP, - MediaTray.MIDDLE, - MediaTray.BOTTOM + MediaTray.TOP, + MediaTray.MIDDLE, + MediaTray.BOTTOM }; when(psDefault.getSupportedAttributeValues(Media.class, null, null)).thenReturn(trays); PrintServiceLookup.registerServiceProvider(psLookup);