From b3ebd9fc9b2f1c71a567d4579e4a2bd4ee478a80 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Wed, 23 Apr 2014 10:15:12 -0400 Subject: [PATCH] hatch : create job settings from config hash cont. Signed-off-by: Bill Erickson --- .../hatch/HatchWebSocketHandler.java | 12 +- src/org/evergreen_ils/hatch/PrintManager.java | 164 ++++++++---------- 2 files changed, 84 insertions(+), 92 deletions(-) diff --git a/src/org/evergreen_ils/hatch/HatchWebSocketHandler.java b/src/org/evergreen_ils/hatch/HatchWebSocketHandler.java index c8a03bf837..7c59a18ece 100644 --- a/src/org/evergreen_ils/hatch/HatchWebSocketHandler.java +++ b/src/org/evergreen_ils/hatch/HatchWebSocketHandler.java @@ -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; } diff --git a/src/org/evergreen_ils/hatch/PrintManager.java b/src/org/evergreen_ils/hatch/PrintManager.java index f24fb6fb7c..dc6420f0ea 100644 --- a/src/org/evergreen_ils/hatch/PrintManager.java +++ b/src/org/evergreen_ils/hatch/PrintManager.java @@ -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 configurePrinter(Map params) { - Map config = (Map) params.get("config"); + public Map configurePrinter( + Map params) throws IllegalArgumentException { + + Map settings = + (Map) 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 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 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> pageRanges = - new LinkedList>(); - - for (PageRange range : ranges) { - Map oneRange = new HashMap(); - 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 builtRanges = new LinkedList(); + 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 resolutionMap = new HashMap(); - 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, Mapparams) { @@ -309,25 +301,21 @@ public class PrintManager { // page ranges -------------- PageRange[] ranges = jobSettings.getPageRanges(); if (ranges != null) { - List> pageRanges = - new LinkedList>(); - - for (PageRange range : ranges) { - Map oneRange = new HashMap(); - oneRange.put("startPage", range.getStartPage()); - oneRange.put("endPage", range.getEndPage()); - pageRanges.add(oneRange); - } - settings.put("pageRanges", pageRanges); - } + List pageRanges = new LinkedList(); + 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 resolutionMap = new HashMap(); - 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; -- 2.43.2