package com.universalbits.conorganizer.badger.ui;
import com.universalbits.conorganizer.badger.control.BadgePrinter;
import com.universalbits.conorganizer.badger.control.BadgeSource;
import javax.print.DocFlavor;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
class StartPrintingAction extends AbstractAction {
private static Logger LOGGER = Logger.getLogger(StartPrintingAction.class.getName());
private final BadgePrinterUI badgePrinterUI;
private final BadgeSource badgeSource;
private static final long serialVersionUID = 1L;
private static final String START_TEXT = "Start Printing";
private static final String STOP_TEXT = "Stop Printing";
private boolean running = false;
BadgePrinter badgePrinter;
public StartPrintingAction(BadgePrinterUI badgePrinterUI, BadgeSource badgeSource) {
super(START_TEXT);
this.badgePrinterUI = badgePrinterUI;
this.badgeSource = badgeSource;
}
@Override
public Object getValue(String key) {
if (key.equals(Action.NAME)) {
return running ? STOP_TEXT : START_TEXT;
}
return super.getValue(key);
}
private void stop() {
running = false;
badgePrinter.stop();
firePropertyChange(Action.NAME, STOP_TEXT, START_TEXT);
}
private void start() {
running = true;
PrintService ps = null;
firePropertyChange(Action.NAME, START_TEXT, STOP_TEXT);
if (badgePrinterUI.isPrintMode()) {
final PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
pras.add(new Copies(1));
final PrintService[] services = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.PNG, pras);
for (PrintService service : services) {
final String name = service.getName();
System.out.println(name);
// TODO need to
if (name.startsWith("HiTi")) {
ps = service;
}
}
if (ps == null) {
System.err.println("Could not find printer");
this.setEnabled(true);
return;
}
}
final PrintService printService = ps;
new Thread() {
public void run() {
badgePrinter = badgePrinterUI.getBadgePrinter();
final File userHome = new File(System.getProperty("user.home"));
final File outDir = new File(userHome, "badger");
if (badgePrinterUI.isPrintMode()) {
badgePrinter.printBadges(badgeSource, printService, outDir);
} else {
if (outDir.isDirectory() || outDir.mkdirs()) {
badgePrinter.generateBadgePNGs(badgeSource, outDir);
} else {
LOGGER.log(Level.SEVERE, "Could not create badge output directory dir=" + outDir.getAbsolutePath());
}
}
StartPrintingAction.this.firePropertyChange(Action.NAME, START_TEXT, STOP_TEXT);
}
}.start();
}
@Override
public void actionPerformed(ActionEvent event) {
if (running) {
stop();
} else {
start();
}
}
}