From c173d5b556dbfecab6dab8d9341b48a5c1cdd9cf Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Tue, 22 Apr 2014 12:02:01 -0400 Subject: [PATCH] hatch : create job settings from config hash, initial Signed-off-by: Bill Erickson --- .../evergreen_ils/hatch/HatchWebSocketHandler.java | 5 +- src/org/evergreen_ils/hatch/PrintManager.java | 141 ++++++++++++++++++--- 2 files changed, 125 insertions(+), 21 deletions(-) diff --git a/src/org/evergreen_ils/hatch/HatchWebSocketHandler.java b/src/org/evergreen_ils/hatch/HatchWebSocketHandler.java index 7e59b11..16ea901 100644 --- a/src/org/evergreen_ils/hatch/HatchWebSocketHandler.java +++ b/src/org/evergreen_ils/hatch/HatchWebSocketHandler.java @@ -208,11 +208,8 @@ public class HatchWebSocketHandler { } if (action.equals("print-config")) { - // pass ourselves off to the print handler so it can reply - // for us after printing has completed. - String printer = (String) params.get("printer"); reply( - new PrintManager().configurePrinter(printer), + new PrintManager().configurePrinter(params), msgid ); return; diff --git a/src/org/evergreen_ils/hatch/PrintManager.java b/src/org/evergreen_ils/hatch/PrintManager.java index ded234a..ab1d2e4 100644 --- a/src/org/evergreen_ils/hatch/PrintManager.java +++ b/src/org/evergreen_ils/hatch/PrintManager.java @@ -47,28 +47,135 @@ public class PrintManager { static final Logger logger = Log.getLogger("PrintManager"); - public Attribute getAttribute( - PrintService service, Class attrClass, String name) { + public Map configurePrinter(Map params) { + Map config = (Map) params.get("config"); - Attribute[] attrs = (Attribute[]) - service.getSupportedAttributeValues(attrClass, null, null); + String name = (String) config.get("printer"); + Printer printer = getPrinterByName(name); - for (Attribute a : attrs) { - if (a.toString().equals(name)) - return a; + if (printer == null) { + logger.warn("No such printer: " + name); + return null; } - return null; - } - public Map configurePrinter(String name) { - Printer printer = getPrinterByName(name); PrinterJob job = PrinterJob.createPrinterJob(printer); + + // apply any provided settings to the job + applySettingsToJob(config, job); + job.showPrintDialog(null); - Map settings = printerSettingsToMap(job); - job.endJob(); + + // extract any modifications to the settings + Map settings = extractSettingsFromJob(job); + + job.endJob(); // no printing needed return settings; } + // applies the settings in settings to the provided print job + protected void applySettingsToJob( + Map settings, PrinterJob job) { + + JobSettings jobSettings = job.getJobSettings(); + + String collation = (String) settings.get("collation"); + if (collation != null) + jobSettings.setCollation(Collation.valueOf(collation)); + + if (settings.get("copies") != null) { + jobSettings.setCopies( + ((Long) settings.get("copies")).intValue() + ); + } + + // there does not appear to be any way to create a PaperSource + // directly from its name (via public method), so instead we + // manually find the matching paper source + if (settings.get("paperSource") != null) { + String sourceName = (String) settings.get("paperSource"); + + PrinterAttributes printerAttrs = + job.getPrinter().getPrinterAttributes(); + + 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); + jobSettings.setPaperSource(source); + break; + } + } + } + + /* + settings.put( + jobSettings.printColorProperty().getName(), + jobSettings.printColorProperty().getValue() + ); + settings.put( + jobSettings.printQualityProperty().getName(), + jobSettings.printQualityProperty().getValue() + ); + settings.put( + jobSettings.printSidesProperty().getName(), + jobSettings.printSidesProperty().getValue() + ); + + // nested properties... + + // page layout -------------- + PageLayout layout = jobSettings.getPageLayout(); + Map layoutMap = new HashMap(); + layoutMap.put("bottomMargin", layout.getBottomMargin()); + layoutMap.put("leftMargin", layout.getLeftMargin()); + layoutMap.put("topMargin", layout.getTopMargin()); + layoutMap.put("rightMargin", layout.getRightMargin()); + layoutMap.put("pageOrientation", layout.getPageOrientation().toString()); + layoutMap.put("printableHeight", layout.getPrintableHeight()); + layoutMap.put("printableWidth", layout.getPrintableWidth()); + + Paper paper = layout.getPaper(); + Map paperMap = new HashMap(); + paperMap.put("height", paper.getHeight()); + paperMap.put("width", paper.getWidth()); + paperMap.put("name", paper.getName()); + layoutMap.put("paper", paperMap); + + settings.put("pageLayout", layoutMap); + + // 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); + } + + + // resolution -------------- + PrintResolution resolution = jobSettings.getPrintResolution(); + Map resolutionMap = new HashMap(); + resolutionMap.put("feedResolution", resolution.getFeedResolution()); + resolutionMap.put("crossFeedResolution", resolution.getCrossFeedResolution()); + settings.put("printResolution", resolutionMap); + + logger.info("compiled printer properties: " + settings.toString()); + return settings; + */ + }; + + public void print(WebEngine engine, Mapparams) { //debugPrintService(null); // testing @@ -114,7 +221,7 @@ public class PrintManager { job.getJobSettings().setPageLayout(firstLayout); if (!job.showPrintDialog(null)) return; // print canceled by user - Map settings = printerSettingsToMap(job); + Map settings = extractSettingsFromJob(job); engine.print(job); job.endJob(); @@ -124,7 +231,7 @@ public class PrintManager { socket.reply(settings, (String) params.get("msgid")); } - protected Map printerSettingsToMap(PrinterJob job) { + protected Map extractSettingsFromJob(PrinterJob job) { Map settings = new HashMap(); JobSettings jobSettings = job.getJobSettings(); @@ -137,8 +244,8 @@ public class PrintManager { jobSettings.copiesProperty().getValue() ); settings.put( - jobSettings.paperSourceProperty().getName(), - jobSettings.paperSourceProperty().getValue() + "paperSource", + jobSettings.getPaperSource().getName() ); settings.put( jobSettings.printColorProperty().getName(), -- 2.11.0