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();
}
}
}