package com.swingsane.gui.list;
import javax.swing.JComponent;
import com.swingsane.business.scanning.ScanEventListener;
import com.swingsane.business.scanning.ScanJob;
import com.swingsane.i18n.Localizer;
import com.swingsane.preferences.model.Scanner;
/**
* @author Roland Quast (roland@formreturn.com)
*
*/
@SuppressWarnings("serial")
public class ScannerListItem extends JComponent {
public enum ScannerStatus {
IDLE, BUSY
}
private ScanJob scanJob;
private ScanEventListener scanEventListener;
private Scanner scanner;
private ScannerStatus status = ScannerStatus.IDLE;
public ScannerListItem(Scanner scanner) {
this.scanner = scanner;
}
public final void cancel() {
if ((scanJob != null) && scanJob.isActive()) {
scanJob.cancel();
}
}
public final Scanner getScanner() {
return scanner;
}
private String getScannerAddress() {
return scanner.getRemoteAddress() + ":" + scanner.getRemotePortNumber();
}
private String getScannerModel() {
// de-uglify SANE descriptions by replacing underscores with spaces.
return (scanner.getVendor() + " " + scanner.getModel()).replace("_", " ");
}
public final ScannerStatus getScannerStatus() {
return status;
}
private String getStatus() {
switch (status) {
case IDLE:
return Localizer.localize("IdleScannerStatusText");
case BUSY:
return Localizer.localize("BusyScannerStatusText");
default:
break;
}
return null;
}
public final boolean isActive() {
if (scanJob == null) {
return false;
}
return scanJob.isActive();
}
public final void removeListeners() {
scanJob.removeScanEventListener(scanEventListener);
}
public final void setScanEventListener(ScanEventListener scanEventListener) {
this.scanEventListener = scanEventListener;
}
public final void setScanJob(ScanJob scanJob) {
this.scanJob = scanJob;
}
public final void setScannerStatus(ScannerStatus scannerStatus) {
status = scannerStatus;
}
@Override
public final String toString() {
if ((scanner.getDescription() != null) && (scanner.getDescription().trim().length() > 0)) {
return scanner.getDescription() + " (" + getStatus() + ")";
} else {
return getScannerModel() + " - " + scanner.getName() + " - " + getScannerAddress() + " ("
+ getStatus() + ")";
}
}
}