package uk.co.mmscomputing.device.sane; import uk.co.mmscomputing.device.sane.gui.SaneSelectPanel; public class SaneDeviceManager implements SaneConstants{ private SaneDevice device; private String devicename; private boolean onlyLocal; SaneDeviceManager(){ device = null; devicename = null; onlyLocal = true; } public void setDevice(String name){ devicename = name; } public void setLocalOnly(boolean local){onlyLocal=local;} public String[] getDevices()throws SaneIOException{ return jsane.getDevices(onlyLocal); } synchronized SaneDevice getDevice()throws SaneIOException{ if((device!=null)&&(device.isBusy()||device.getName().equals(devicename))){ return device; } if((devicename==null)||(devicename.equals(""))){ jsane.init(); try{ String[] devices=getDevices(); if(devices.length==0){ throw new SaneIOException(getClass(),"getDevice","SaneDeviceManager.ex.nodevicesinstalled"); } devicename=devices[0]; }finally{ jsane.exit(); } } device = new SaneDevice(devicename); return device; } void selectDevice()throws SaneIOException{ jsane.init(); try{ String[] devices=jsane.getDevices(onlyLocal); new SaneSelectPanel(this,devices).showDialog(); }finally{ jsane.exit(); } } void selectDevice(String name)throws SaneIOException{ jsane.init(); try{ String[] devices=jsane.getDevices(onlyLocal); for(int i=0;i<devices.length;i++){ // System.out.println(getClass().getName()+".selectDevice:\n\t"+devices[i]); if(devices[i].equals(name)){ devicename=devices[i];return; } } throw new SaneIOException(getClass(),"selectDevice","SaneDeviceManager.ex.cannotfinddevice",name); }finally{ jsane.exit(); } } }