hatch : create job settings from config hash cont.
authorBill Erickson <berick@esilibrary.com>
Wed, 23 Apr 2014 14:15:12 +0000 (10:15 -0400)
committerJeff Godin <jgodin@tadl.org>
Fri, 3 Jun 2016 20:38:47 +0000 (16:38 -0400)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
src/org/evergreen_ils/hatch/HatchWebSocketHandler.java
src/org/evergreen_ils/hatch/PrintManager.java

index c8a03bf..7c59a18 100644 (file)
@@ -209,10 +209,14 @@ public class HatchWebSocketHandler {
         }
 
         if (action.equals("print-config")) {
-            reply(
-                new PrintManager().configurePrinter(params),
-                msgid
-            );
+            try {
+                reply(
+                    new PrintManager().configurePrinter(params),
+                    msgid
+                );
+            } catch(IllegalArgumentException e) {
+                reply(e.toString(), msgid, false);
+            }
             return;
         }
 
index f24fb6f..dc6420f 100644 (file)
@@ -25,9 +25,6 @@ import javafx.scene.web.WebEngine;
 import javafx.collections.ObservableSet;
 import javafx.collections.SetChangeListener;
 
-import java.util.Set;
-import java.util.LinkedHashSet;
-
 import javax.print.PrintService;
 import javax.print.PrintServiceLookup;
 import javax.print.attribute.Attribute;
@@ -36,48 +33,56 @@ import javax.print.attribute.PrintRequestAttributeSet;
 import javax.print.attribute.standard.Media;
 import javax.print.attribute.standard.OrientationRequested;
 
+import java.lang.IllegalArgumentException;
+
 // data structures
 import java.util.Map;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedList;
+import java.util.Set;
+import java.util.LinkedHashSet;
 
 public class PrintManager {
 
     static final Logger logger = Log.getLogger("PrintManager");
 
-    public Map<String,Object> configurePrinter(Map<String,Object> params) {
-        Map<String,Object> config = (Map<String,Object>) params.get("config");
+    public Map<String,Object> configurePrinter(
+        Map<String,Object> params) throws IllegalArgumentException {
+
+        Map<String,Object> settings = 
+            (Map<String,Object>) params.get("config");
 
-        String name = (String) config.get("printer");
+        PrinterJob job = buildPrinterJob(settings);
+        
+        job.showPrintDialog(null);
+
+        // no printing needed
+        job.endJob(); 
+
+        // extract modifications to the settings applied within the dialog
+        return extractSettingsFromJob(job);
+    }
+
+    public PrinterJob buildPrinterJob(
+        Map<String,Object> settings) throws IllegalArgumentException {
+
+        String name = (String) settings.get("printer");
         Printer printer = getPrinterByName(name);
 
-        if (printer == null) {
-            logger.warn("No such printer: " + name);
-            return null;
-        }
+        if (printer == null) 
+            throw new IllegalArgumentException("No such printer: " + name);
 
-        PageLayout layout = buildPageLayout(config, printer);
+        PageLayout layout = buildPageLayout(settings, printer);
         PrinterJob job = PrinterJob.createPrinterJob(printer);
 
         if (layout != null) job.getJobSettings().setPageLayout(layout);
 
         // apply any provided settings to the job
-        applySettingsToJob(config, job);
-
-        try {
-            job.showPrintDialog(null);
-        } catch (IllegalArgumentException e) {
-            logger.warn(e);
-            return null;
-        }
-
-        // no printing needed
-        job.endJob(); 
+        applySettingsToJob(settings, job);
 
-        // extract modifications to the settings applied within the dialog
-        return extractSettingsFromJob(job);
+        return job;
     }
 
     protected PageLayout buildPageLayout(
@@ -134,76 +139,63 @@ public class PrintManager {
             job.getPrinter().getPrinterAttributes();
 
         String collation = (String) settings.get("collation");
+        Long copies = (Long) settings.get("copies");
+        String printColor = (String) settings.get("printColor");
+        String printQuality = (String) settings.get("printQuality");
+        String printSides = (String) settings.get("printSides");
+        String paperSource = (String) settings.get("paperSource");
+        Object[] pageRanges = (Object[]) settings.get("pageRanges");
+
         if (collation != null) 
             jobSettings.setCollation(Collation.valueOf(collation));
 
-        if (settings.get("copies") != null) {
-            jobSettings.setCopies(
-                ((Long) settings.get("copies")).intValue()
-            );
-        }
+        if (copies != null) 
+            jobSettings.setCopies(((Long) settings.get("copies")).intValue());
 
-        if (settings.get("printColor") != null) {
-            jobSettings.setPrintColor(
-                PrintColor.valueOf((String) settings.get("printColor")));
-        }
+        if (printColor != null) 
+            jobSettings.setPrintColor(PrintColor.valueOf(printColor));
 
-        if (settings.get("printQuality") != null) {
-            jobSettings.setPrintQuality(
-                PrintQuality.valueOf((String) settings.get("printQuality")));
-        }
+        if (printQuality != null) 
+            jobSettings.setPrintQuality(PrintQuality.valueOf(printQuality));
 
-        if (settings.get("printSides") != null) {
-            jobSettings.setPrintSides(
-                PrintSides.valueOf((String) settings.get("printSides")));
-        }
+        if (printSides != null) 
+            jobSettings.setPrintSides(PrintSides.valueOf(printSides));
 
         // find the paperSource by name
-        if (settings.get("paperSource") != null) {
-            String sourceName = (String) settings.get("paperSource");
-
+        if (paperSource != null) {
             Set<PaperSource> paperSources = 
                 printerAttrs.getSupportedPaperSources();
 
             // note: "Automatic" appears to be a virtual source,
             // meaning no source.. meaning let the printer decide.
             for (PaperSource source : paperSources) {
-                if (source.getName().equals(sourceName)) {
-                    logger.info("matched paper source for " + sourceName);
+                if (source.getName().equals(paperSource)) {
+                    logger.info("matched paper source for " + paperSource);
                     jobSettings.setPaperSource(source);
                     break;
                 }
             }
         }
 
-        /*
-        // page ranges --------------
-        PageRange[] ranges = jobSettings.getPageRanges();
-        if (ranges != null) {
-            List<Map<String,Integer>> pageRanges = 
-                new LinkedList<Map<String,Integer>>();
-
-            for (PageRange range : ranges) {
-                Map<String,Integer> oneRange = new HashMap<String,Integer>();
-                oneRange.put("startPage", range.getStartPage());
-                oneRange.put("startPage", range.getEndPage());
-                pageRanges.add(oneRange);
-            }
-            settings.put("pageRanges", pageRanges);
-        }
 
+        if (pageRanges != null) {
+            logger.info("pageRanges = " + pageRanges.toString());
+            List<PageRange> builtRanges = new LinkedList<PageRange>();
+            int i = 0, start = 0, end = 0;
+            do {
+                if (i % 2 == 0 && i > 0)
+                    builtRanges.add(new PageRange(start, end));
 
-        // resolution --------------
-        PrintResolution resolution = jobSettings.getPrintResolution();
-        Map<String,Integer> resolutionMap = new HashMap<String,Integer>();
-        resolutionMap.put("feedResolution", resolution.getFeedResolution());
-        resolutionMap.put("crossFeedResolution", resolution.getCrossFeedResolution());
-        settings.put("printResolution", resolutionMap);
+                if (i == pageRanges.length) break;
 
-        logger.info("compiled printer properties: " + settings.toString());
-        return settings;
-        */
-    };
+                int current = ((Long) pageRanges[i]).intValue();
+                if (i % 2 == 0) start = current; else end = current;
+
+            } while (++i > 0);
+
+            jobSettings.setPageRanges(builtRanges.toArray(new PageRange[0]));
+        }
+    }
 
 
     public void print(WebEngine engine, Map<String,Object>params) {
@@ -309,25 +301,21 @@ public class PrintManager {
         // page ranges --------------
         PageRange[] ranges = jobSettings.getPageRanges();
         if (ranges != null) {
-            List<Map<String,Integer>> pageRanges = 
-                new LinkedList<Map<String,Integer>>();
-
-            for (PageRange range : ranges) {
-                Map<String,Integer> oneRange = new HashMap<String,Integer>();
-                oneRange.put("startPage", range.getStartPage());
-                oneRange.put("endPage", range.getEndPage());
-                pageRanges.add(oneRange);
-            }
-            settings.put("pageRanges", pageRanges);
-        }
+            List<Integer> pageRanges = new LinkedList<Integer>();
 
+            if (ranges.length == 1 &&
+                ranges[0].getStartPage() == 1 && 
+                ranges[0].getEndPage() == Integer.MAX_VALUE) {
+                // full range -- no need to store
 
-        // resolution --------------
-        PrintResolution resolution = jobSettings.getPrintResolution();
-        Map<String,Integer> resolutionMap = new HashMap<String,Integer>();
-        resolutionMap.put("feedResolution", resolution.getFeedResolution());
-        resolutionMap.put("crossFeedResolution", resolution.getCrossFeedResolution());
-        settings.put("printResolution", resolutionMap);
+            } else {
+                for (PageRange range : ranges) {
+                    pageRanges.add(range.getStartPage());
+                    pageRanges.add(range.getEndPage());
+                }
+                settings.put("pageRanges", pageRanges);
+            }
+        }
 
         logger.info("compiled printer properties: " + settings.toString());
         return settings;