package com.revolsys.swing.parallel; import java.util.function.Consumer; import java.util.function.Supplier; import com.revolsys.util.Property; public class SupplierConsumerSwingWorker<B> extends AbstractSwingWorker<B, Void> { private final Supplier<B> backgroundTask; private final Consumer<B> doneTask; private final String description; public SupplierConsumerSwingWorker(final String description, final Runnable backgroundTask) { this(description, () -> { backgroundTask.run(); return null; }, null); } public SupplierConsumerSwingWorker(final String description, final Supplier<B> backgroundTask) { this(description, backgroundTask, null); } public SupplierConsumerSwingWorker(final String description, final Supplier<B> backgroundTask, final Consumer<B> doneTask) { if (Property.isEmpty(description)) { this.description = backgroundTask.toString(); } else { this.description = description; } this.backgroundTask = backgroundTask; this.doneTask = doneTask; } public SupplierConsumerSwingWorker(final Supplier<B> backgroundTask, final Consumer<B> doneTask) { this(null, backgroundTask, doneTask); } public String getDescription() { return this.description; } @Override protected B handleBackground() { if (this.backgroundTask != null) { return this.backgroundTask.get(); } return null; } @Override protected void handleDone(final B result) { if (this.doneTask != null) { this.doneTask.accept(result); } } @Override public String toString() { return this.description; } }