You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2012/03/15 03:08:03 UTC

svn commit: r1300804 - in /camel/trunk/components/camel-printer: ./ src/main/java/org/apache/camel/component/printer/ src/test/java/org/apache/camel/component/printer/

Author: ningjiang
Date: Thu Mar 15 02:08:03 2012
New Revision: 1300804

URL: http://svn.apache.org/viewvc?rev=1300804&view=rev
Log:
CAMEL-5082 enhanments on the camel-printer

Modified:
    camel/trunk/components/camel-printer/pom.xml
    camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterComponent.java
    camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterEndpoint.java
    camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterOperations.java
    camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterOperationsInterface.java
    camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterProducer.java
    camel/trunk/components/camel-printer/src/test/java/org/apache/camel/component/printer/PrinterPrintTest.java

Modified: camel/trunk/components/camel-printer/pom.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-printer/pom.xml?rev=1300804&r1=1300803&r2=1300804&view=diff
==============================================================================
--- camel/trunk/components/camel-printer/pom.xml (original)
+++ camel/trunk/components/camel-printer/pom.xml Thu Mar 15 02:08:03 2012
@@ -53,7 +53,12 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
-
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-all</artifactId>
+            <version>1.8.5</version>
+            <scope>test</scope>
+        </dependency>
         <!-- logging -->
         <dependency>
             <groupId>org.slf4j</groupId>
@@ -76,7 +81,6 @@
                     </filesets>
                 </configuration>
             </plugin>
-
         </plugins>
     </build>
     

Modified: camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterComponent.java?rev=1300804&r1=1300803&r2=1300804&view=diff
==============================================================================
--- camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterComponent.java (original)
+++ camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterComponent.java Thu Mar 15 02:08:03 2012
@@ -19,29 +19,18 @@ package org.apache.camel.component.print
 import java.net.URI;
 import java.util.Map;
 
-import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.impl.DefaultComponent;
 
 public class PrinterComponent extends DefaultComponent {
-    PrinterConfiguration config;
-    
-    public PrinterComponent() {
-        config = new PrinterConfiguration();
-    }
-
-    public PrinterComponent(CamelContext context) {
-        super(context);
-        config = new PrinterConfiguration();
-    }
 
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
+        PrinterConfiguration config = new PrinterConfiguration();
         config.parseURI(new URI(uri));
-        
+
         PrinterEndpoint printerEndpoint = new PrinterEndpoint(uri, this, config);
         setProperties(printerEndpoint.getConfig(), parameters);
         return new PrinterEndpoint(uri, this, config);
     }
-
 }

Modified: camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterEndpoint.java?rev=1300804&r1=1300803&r2=1300804&view=diff
==============================================================================
--- camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterEndpoint.java (original)
+++ camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterEndpoint.java Thu Mar 15 02:08:03 2012
@@ -23,6 +23,9 @@ import org.apache.camel.Producer;
 import org.apache.camel.impl.DefaultEndpoint;
 
 public class PrinterEndpoint extends DefaultEndpoint {
+    
+    public static final String JOB_NAME = "PrinterJobName";
+    
     private PrinterConfiguration config;
 
     public PrinterEndpoint() {

Modified: camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterOperations.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterOperations.java?rev=1300804&r1=1300803&r2=1300804&view=diff
==============================================================================
--- camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterOperations.java (original)
+++ camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterOperations.java Thu Mar 15 02:08:03 2012
@@ -19,6 +19,7 @@ package org.apache.camel.component.print
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.InputStream;
+import java.util.Locale;
 import java.util.UUID;
 import javax.print.Doc;
 import javax.print.DocFlavor;
@@ -29,6 +30,7 @@ import javax.print.PrintServiceLookup;
 import javax.print.attribute.HashPrintRequestAttributeSet;
 import javax.print.attribute.PrintRequestAttributeSet;
 import javax.print.attribute.standard.Copies;
+import javax.print.attribute.standard.JobName;
 import javax.print.attribute.standard.MediaSizeName;
 import javax.print.attribute.standard.Sides;
 
@@ -56,13 +58,12 @@ public class PrinterOperations implement
     }
 
     public PrinterOperations(PrintService printService, DocFlavor flavor, PrintRequestAttributeSet printRequestAttributeSet) throws PrintException {
-        this();
         this.setPrintService(printService);
         this.setFlavor(flavor);
         this.setPrintRequestAttributeSet(printRequestAttributeSet);
     }
 
-    public void print(Doc doc, int copies, boolean sendToPrinter, String mimeType) throws PrintException {
+    public void print(Doc doc, int copies, boolean sendToPrinter, String mimeType, String jobName) throws PrintException {
         LOG.trace("Print Service: " + this.printService.getName());
         LOG.trace("About to print " + copies + " copy(s)");
         
@@ -95,15 +96,17 @@ public class PrinterOperations implement
                 if (LOG.isDebugEnabled()) {
                     LOG.debug("Issuing Job {} to Printer: {}", i, this.printService.getName());
                 }
-                print(doc);
+                print(doc, jobName);
             }
         }
     }
         
-    public void print(Doc doc) throws PrintException {
+    public void print(Doc doc, String jobName) throws PrintException {
         // we need create a new job for each print 
         DocPrintJob job = getPrintService().createPrintJob();
-        job.print(doc, printRequestAttributeSet);
+        PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet(printRequestAttributeSet);
+        attrs.add(new JobName(jobName, Locale.getDefault()));
+        job.print(doc, attrs);
     }
 
     public PrintService getPrintService() {

Modified: camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterOperationsInterface.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterOperationsInterface.java?rev=1300804&r1=1300803&r2=1300804&view=diff
==============================================================================
--- camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterOperationsInterface.java (original)
+++ camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterOperationsInterface.java Thu Mar 15 02:08:03 2012
@@ -27,6 +27,6 @@ public interface PrinterOperationsInterf
      * @param doc document to print
      * @throws PrintException is thrown if printing failed
      */
-    void print(Doc doc) throws PrintException;
+    void print(Doc doc, String jobName) throws PrintException;
 
 }

Modified: camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterProducer.java?rev=1300804&r1=1300803&r2=1300804&view=diff
==============================================================================
--- camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterProducer.java (original)
+++ camel/trunk/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterProducer.java Thu Mar 15 02:08:03 2012
@@ -45,13 +45,14 @@ public class PrinterProducer extends Def
     public void process(Exchange exchange) throws Exception {
         Object body = exchange.getIn().getBody();
         InputStream is = exchange.getContext().getTypeConverter().convertTo(InputStream.class, body);
-        print(is);
+        String jobName = exchange.getIn().getHeader(PrinterEndpoint.JOB_NAME, "Camel: lpr", String.class);
+        print(is, jobName);
     }
     
-    private void print(InputStream body) throws PrintException { 
+    private void print(InputStream body, String jobName) throws PrintException { 
         if (printerOperations.getPrintService().isDocFlavorSupported(printerOperations.getFlavor())) {
             PrintDocument printDoc = new PrintDocument(body, printerOperations.getFlavor());        
-            printerOperations.print(printDoc, config.getCopies(), config.isSendToPrinter(), config.getMimeType()); 
+            printerOperations.print(printDoc, config.getCopies(), config.isSendToPrinter(), config.getMimeType(), jobName); 
         }
     }
 

Modified: camel/trunk/components/camel-printer/src/test/java/org/apache/camel/component/printer/PrinterPrintTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-printer/src/test/java/org/apache/camel/component/printer/PrinterPrintTest.java?rev=1300804&r1=1300803&r2=1300804&view=diff
==============================================================================
--- camel/trunk/components/camel-printer/src/test/java/org/apache/camel/component/printer/PrinterPrintTest.java (original)
+++ camel/trunk/components/camel-printer/src/test/java/org/apache/camel/component/printer/PrinterPrintTest.java Thu Mar 15 02:08:03 2012
@@ -18,19 +18,39 @@ package org.apache.camel.component.print
 
 import java.io.FileInputStream;
 import java.io.InputStream;
+import java.util.Map;
 
+import javax.print.Doc;
+import javax.print.DocFlavor;
+import javax.print.DocPrintJob;
+import javax.print.PrintService;
+import javax.print.PrintServiceLookup;
+import javax.print.attribute.PrintRequestAttributeSet;
+
+import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.camel.util.IOHelper;
-
+import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
 
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
 public class PrinterPrintTest extends CamelTestSupport {
 
+    @Before
+    public void setup() {
+        setupJavaPrint();
+    }
+
     @Override
     public boolean isUseRouteBuilder() {
         return false;
@@ -174,4 +194,94 @@ public class PrinterPrintTest extends Ca
         });
         context.start();
     }
+    
+    @Test
+    public void moreThanOneLprEndpoint() throws Exception {
+
+        if (isAwtHeadless()) {
+            return;
+        }
+        
+        int numberOfPrintservicesBefore = PrintServiceLookup.lookupPrintServices(null, null).length;
+
+        // setup javax.print 
+        PrintService ps1 = mock(PrintService.class);
+        when(ps1.getName()).thenReturn("printer1");
+        when(ps1.isDocFlavorSupported(any(DocFlavor.class))).thenReturn(Boolean.TRUE);
+        PrintService ps2 = mock(PrintService.class);
+        when(ps2.getName()).thenReturn("printer2");
+        boolean res1 = PrintServiceLookup.registerService(ps1);
+        assertTrue("PrintService #1 should be registered.", res1);
+        boolean res2 = PrintServiceLookup.registerService(ps2);
+        assertTrue("PrintService #2 should be registered.", res2);
+        PrintService[] pss = PrintServiceLookup.lookupPrintServices(null, null);
+        assertEquals("lookup should report two PrintServices.", numberOfPrintservicesBefore + 2, pss.length);
+
+        DocPrintJob job1 = mock(DocPrintJob.class);
+        when(ps1.createPrintJob()).thenReturn(job1);
+        
+        context.addRoutes(new RouteBuilder() {
+
+            public void configure() {
+                from("direct:start1").to("lpr://localhost/printer1?sendToPrinter=true");
+                from("direct:start2").to("lpr://localhost/printer2?sendToPrinter=false");
+            }
+        });
+        context.start();
+
+        // Are there two different PrintConfigurations?
+        Map<String, Endpoint> epm = context().getEndpointMap();
+        assertEquals("Four endpoints", 4, epm.size());
+        Endpoint lp1 = null;
+        Endpoint lp2 = null;
+        for (Map.Entry<String, Endpoint> ep : epm.entrySet()) {
+            if (ep.getKey().contains("printer1")) {
+                lp1 = ep.getValue();
+            }
+            if (ep.getKey().contains("printer2")) {
+                lp2 = ep.getValue();
+            }
+        }
+        assertNotNull(lp1);
+        assertNotNull(lp2);
+        assertEquals("printer1", ((PrinterEndpoint)lp1).getConfig().getPrintername());
+        assertEquals("printer2", ((PrinterEndpoint)lp2).getConfig().getPrintername());
+
+        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()) {
+            return;
+        }
+
+        getMockEndpoint("mock:output").setExpectedMessageCount(1);
+        context.addRoutes(new RouteBuilder() {
+            public void configure() {
+                from("direct:start").to("lpr://localhost/default").to("mock:output");
+            }
+        });
+        context.start();
+        template.sendBodyAndHeader("direct:start", "Hello Printer", PrinterEndpoint.JOB_NAME, "Test-Job-Name");
+        context.stop();
+        assertMockEndpointsSatisfied();
+    }
+    
+    protected void setupJavaPrint() {
+        // "install" another default printer
+        PrintService psDefault = mock(PrintService.class);
+        when(psDefault.getName()).thenReturn("DefaultPrinter");
+        when(psDefault.isDocFlavorSupported(any(DocFlavor.class))).thenReturn(Boolean.TRUE);
+        PrintServiceLookup psLookup = mock(PrintServiceLookup.class);
+        when(psLookup.getPrintServices()).thenReturn(new PrintService[]{psDefault});
+        when(psLookup.getDefaultPrintService()).thenReturn(psDefault);
+        DocPrintJob docPrintJob = mock(DocPrintJob.class);
+        when(psDefault.createPrintJob()).thenReturn(docPrintJob);
+        PrintServiceLookup.registerServiceProvider(psLookup);
+    }
 }