package com.kostbot.zoodirector.ui.workers; import com.kostbot.zoodirector.zookeepersync.ZookeeperSync; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.swing.*; public class SaveDataWorker extends SwingWorker<Void, Void> { private static final Logger logger = LoggerFactory.getLogger(SaveDataWorker.class); private final ZookeeperSync zookeeperSync; private final String path; private final int version; private final byte[] data; private final Callback callback; private boolean success; /** * Create a SaveDataWorker for saving data to zookeeper. On completion callback.execute() is called on the EDT. If * the worker is cancelled the callback will not be executed. * * @param zookeeperSync * @param path * @param data * @param callback */ public SaveDataWorker(ZookeeperSync zookeeperSync, String path, int version, byte[] data, Callback callback) { this.zookeeperSync = zookeeperSync; this.path = path; this.version = version; this.data = data; this.callback = callback; } public interface Callback { void onComplete(String path); void onFailure(String path); } @Override protected Void doInBackground() { logger.debug("save {} requested", path); try { zookeeperSync.setData(path, version, data); success = true; } catch (Exception e) { logger.error("save {} failed [{}]", path, e.getMessage()); } return null; } @Override protected void done() { if (isCancelled()) { logger.debug("save {} cancelled", path); } else { logger.debug("save {} complete", path); if (callback != null) { if (success) { callback.onComplete(path); } else { callback.onFailure(path); } } } } }