/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.demo.twainservice; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.Collection; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.event.EventListenerList; import org.demo.scannerservice.Parameters; import org.demo.scannerservice.ScannerManager; import org.demo.scannerservice.ScannerListener; import uk.co.mmscomputing.device.scanner.Scanner; import uk.co.mmscomputing.device.scanner.ScannerIOException; import uk.co.mmscomputing.device.scanner.ScannerIOMetadata; import uk.co.mmscomputing.device.scanner.ScannerIOMetadata.Type; import uk.co.mmscomputing.device.twain.TwainIdentity; /** * * @author edwin */ public class TwainManager implements ScannerManager, uk.co.mmscomputing.device.scanner.ScannerListener { private static Scanner scanner = null; private final EventListenerList listeners = new EventListenerList(); @Override public void addListener(ScannerListener listener) { listeners.add(ScannerListener.class, listener); } @Override public void removeListener(ScannerListener listener) { listeners.remove(ScannerListener.class, listener); } @Override public void acquire() { Thread t = new Thread(new Runnable() { @Override public void run() { if (scanner == null) { scanner = Scanner.getDevice(); scanner.addListener(TwainManager.this); } try { scanner.select(); scanner.acquire(); } catch (ScannerIOException ex) { Logger.getLogger(TwainManager.class.getName()).log(Level.SEVERE, null, ex); } } }); t.start(); } protected void fireScanPerformed(BufferedImage img) { final ScannerListener[] list = listeners.getListeners(ScannerListener.class); for (ScannerListener l : list) { l.imageAcquired(img); } } @Override public void setConfiguration(Parameters cfg) { throw new UnsupportedOperationException("Not supported yet."); } @Override public Parameters getConfiguration() { throw new UnsupportedOperationException("Not supported yet."); } @Override public void update(Type type, ScannerIOMetadata metadata) { try { if (type.equals(ScannerIOMetadata.ACQUIRED)) { BufferedImage image = metadata.getImage(); fireScanPerformed(image); } else if (type.equals(ScannerIOMetadata.STATECHANGE)) { System.out.println(metadata.getStateStr()); } else if (type.equals(ScannerIOMetadata.EXCEPTION)) { metadata.getException().printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } } @Override public String getDescription() { return "mmsComputing jTwain"; } @Override public String toString() { return getDescription(); } @Override public Collection<org.demo.scannerservice.Scanner> getListDevices() { Collection<org.demo.scannerservice.Scanner> result = new ArrayList<org.demo.scannerservice.Scanner>(); uk.co.mmscomputing.device.twain.TwainScanner twainMgr=(uk.co.mmscomputing.device.twain.TwainScanner) Scanner.getDevice(); TwainIdentity[] identities = twainMgr.getIdentities(); for (TwainIdentity identity : identities) { result.add(new TwainScanner(identity)); } return result; } }