Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand Down Expand Up @@ -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"));
}
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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() {
Expand Down Expand Up @@ -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()) {
Expand All @@ -272,22 +290,22 @@ 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() {
from("direct:start1").to("lpr://remote/printer1?sendToPrinter=true");
}
});
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()) {
Expand All @@ -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);
Expand All @@ -328,7 +347,30 @@ public void printToMiddleTray() throws Exception {
MediaTray mediaTray = (MediaTray) attribute;
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.setInternalOrientation( OrientationRequested.REVERSE_LANDSCAPE );
configuration.setMediaTray("middle");
configuration.setSendToPrinter(false);

PrinterProducer producer = new PrinterProducer(endpoint, configuration);
producer.start();
PrinterOperations printerOperations = producer.getPrinterOperations();
PrintRequestAttributeSet attributeSet = printerOperations.getPrintRequestAttributeSet();

Attribute attribute = attributeSet.get(OrientationRequested.class);
assertNotNull(attribute);
assertEquals("reverse-landscape", attribute.toString());
}

protected void setupJavaPrint() {
// "install" another default printer
PrintService psDefault = mock(PrintService.class);
Expand Down