From cdf0d0f914a871bf158b212007223a342291d7b9 Mon Sep 17 00:00:00 2001 From: Carsten Erker Date: Wed, 15 Jan 2014 14:48:48 +0100 Subject: [PATCH 1/2] add configuration property for page orientation --- .../printer/PrinterConfiguration.java | 45 ++++++++++++++++++- .../component/printer/PrinterProducer.java | 3 +- .../component/printer/PrinterPrintTest.java | 24 ++++++++++ 3 files changed, 70 insertions(+), 2 deletions(-) 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 d17c9c08bac6f..cf0c341dc72a1 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 @@ -21,6 +21,7 @@ import java.util.Map; import javax.print.DocFlavor; import javax.print.attribute.standard.MediaSizeName; +import javax.print.attribute.standard.OrientationRequested; import javax.print.attribute.standard.Sides; import org.apache.camel.util.ObjectHelper; @@ -40,6 +41,8 @@ public class PrinterConfiguration { private MediaSizeName mediaSizeName; private String sides; private Sides internalSides; + private String orientation; + private OrientationRequested internalOrientation; private boolean sendToPrinter = true; private String mediaTray; @@ -79,14 +82,17 @@ public void parseURI(URI uri) throws Exception { } setMediaSize((String)printSettings.get("mediaSize")); setSides((String)printSettings.get("sides")); - setMediaSizeName(assignMediaSize(mediaSize)); + setOrientation(((String)printSettings.get("orientation"))); + setMediaSizeName(assignMediaSize(mediaSize)); setInternalSides(assignSides(sides)); + setInternalOrientation(assignOrientation(orientation)); if (printSettings.containsKey("sendToPrinter")) { if (!(Boolean.valueOf((String) printSettings.get("sendToPrinter")))) { setSendToPrinter(false); } } + if (printSettings.containsKey("mediaTray")) { setMediaTray((String) printSettings.get("mediaTray")); } @@ -198,6 +204,27 @@ public Sides assignSides(String sidesString) { return answer; } + public OrientationRequested assignOrientation(final String orientation) { + OrientationRequested answer; + + if (orientation == null) { + // default to portrait + answer = OrientationRequested.PORTRAIT; + } else if (orientation.equalsIgnoreCase("portrait")) { + answer = OrientationRequested.PORTRAIT; + } else if (orientation.equalsIgnoreCase("landscape")) { + answer = OrientationRequested.LANDSCAPE; + } else if (orientation.equalsIgnoreCase("reverse-portrait")) { + answer = OrientationRequested.REVERSE_PORTRAIT; + } else if (orientation.equalsIgnoreCase("reverse-landscape")) { + answer = OrientationRequested.REVERSE_LANDSCAPE; + } else { + answer = OrientationRequested.PORTRAIT; + } + + return answer; + } + public URI getUri() { return uri; } @@ -286,6 +313,22 @@ public void setInternalSides(Sides internalSides) { this.internalSides = internalSides; } + public OrientationRequested getInternalOrientation() { + return internalOrientation; + } + + public void setInternalOrientation(OrientationRequested internalOrientation) { + this.internalOrientation = internalOrientation; + } + + public String getOrientation() { + return orientation; + } + + public void setOrientation( String orientation ) { + this.orientation = orientation; + } + public String getMimeType() { return mimeType; } 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 d3464813028c6..ee3239c0e225b 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 @@ -71,7 +71,8 @@ private PrintRequestAttributeSet assignPrintAttributes() throws PrintException { } printRequestAttributeSet.add(config.getMediaSizeName()); printRequestAttributeSet.add(config.getInternalSides()); - + printRequestAttributeSet.add(config.getInternalOrientation()); + if (config.getMediaTray() != null) { MediaTray mediaTray = resolveMediaTray(config.getMediaTray()); 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 b20ae18193985..2a136705c0f54 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 @@ -329,6 +329,30 @@ public void printToMiddleTray() throws Exception { assertEquals("middle", mediaTray.toString()); } + @Test + public void printsWithLandscapeOrientation() 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"); + configuration.setOrientation("landscape"); + + 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 PrintService psDefault = mock(PrintService.class); From 7be880b753d9028c6d2be5c08cfe33073f9cc280 Mon Sep 17 00:00:00 2001 From: Carsten Erker Date: Thu, 16 Jan 2014 10:15:45 +0100 Subject: [PATCH 2/2] add printer tests with page orientation --- .../component/printer/PrinterPrintTest.java | 52 +++++++++++++------ 1 file changed, 35 insertions(+), 17 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 2a136705c0f54..794e917cafab7 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 @@ -30,6 +30,7 @@ import javax.print.attribute.standard.Media; import javax.print.attribute.standard.MediaSizeName; import javax.print.attribute.standard.MediaTray; +import javax.print.attribute.standard.OrientationRequested; import javax.print.attribute.standard.Sides; import org.apache.camel.Endpoint; @@ -181,6 +182,23 @@ public void configure() { sendJPEG(); } + @Test + @Ignore + public void testSendingJPEGToPrinterWithLandscapePageOrientation() throws Exception { + if (isAwtHeadless()) { + return; + } + context.addRoutes(new RouteBuilder() { + public void configure() { + from("direct:start").to("lpr://localhost/default?flavor=DocFlavor.INPUT_STREAM" + + "&mimeType=JPEG&sendToPrinter=false&orientation=landscape"); + } + }); + context.start(); + + sendJPEG(); + } + /** * Test for resolution of bug CAMEL-3446. * Not specifying mediaSize nor sides attributes make it use @@ -199,14 +217,14 @@ public void configure() { }); context.start(); } - + @Test public void moreThanOneLprEndpoint() throws Exception { if (isAwtHeadless()) { return; } - + int numberOfPrintservicesBefore = PrintServiceLookup.lookupPrintServices(null, null).length; // setup javax.print @@ -224,7 +242,7 @@ public void moreThanOneLprEndpoint() throws Exception { DocPrintJob job1 = mock(DocPrintJob.class); when(ps1.createPrintJob()).thenReturn(job1); - + context.addRoutes(new RouteBuilder() { public void configure() { @@ -258,7 +276,7 @@ public void configure() { verify(job1, times(1)).print(any(Doc.class), any(PrintRequestAttributeSet.class)); } - + @Test public void printerNameTest() throws Exception { if (isAwtHeadless()) { @@ -272,7 +290,7 @@ public void printerNameTest() throws Exception { assertTrue("The Remote PrintService #1 should be registered.", res1); DocPrintJob job1 = mock(DocPrintJob.class); when(ps1.createPrintJob()).thenReturn(job1); - + context.addRoutes(new RouteBuilder() { public void configure() { @@ -280,14 +298,14 @@ public void configure() { } }); context.start(); - + template.sendBody("direct:start1", "Hello Printer 1"); context.stop(); verify(job1, times(1)).print(any(Doc.class), any(PrintRequestAttributeSet.class)); } - + @Test public void setJobName() throws Exception { if (isAwtHeadless()) { @@ -311,10 +329,11 @@ 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.setPort( 631 ); + configuration.setPrintername( "DefaultPrinter" ); + configuration.setMediaSizeName( MediaSizeName.ISO_A4 ); + configuration.setInternalSides( Sides.ONE_SIDED ); + configuration.setInternalOrientation( OrientationRequested.PORTRAIT ); configuration.setMediaTray("middle"); PrinterProducer producer = new PrinterProducer(endpoint, configuration); @@ -328,7 +347,7 @@ public void printToMiddleTray() throws Exception { MediaTray mediaTray = (MediaTray) attribute; assertEquals("middle", mediaTray.toString()); } - + @Test public void printsWithLandscapeOrientation() throws Exception { PrinterEndpoint endpoint = new PrinterEndpoint(); @@ -338,19 +357,18 @@ public void printsWithLandscapeOrientation() throws Exception { configuration.setPrintername("DefaultPrinter"); configuration.setMediaSizeName(MediaSizeName.ISO_A4); configuration.setInternalSides(Sides.ONE_SIDED); + configuration.setInternalOrientation( OrientationRequested.REVERSE_LANDSCAPE ); configuration.setMediaTray("middle"); - configuration.setOrientation("landscape"); + configuration.setSendToPrinter(false); 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); + Attribute attribute = attributeSet.get(OrientationRequested.class); assertNotNull(attribute); - assertTrue(attribute instanceof MediaTray); - MediaTray mediaTray = (MediaTray) attribute; - assertEquals("middle", mediaTray.toString()); + assertEquals("reverse-landscape", attribute.toString()); } protected void setupJavaPrint() {