/* * Copyright (C) 2016 NAUMEN. All rights reserved. * * This file may be distributed and/or modified under the terms of the * GNU General Public License version 2 as published by the Free Software * Foundation and appearing in the file LICENSE.GPL included in the * packaging of this file. * */ package ru.naumen.servacc.ui; import java.util.List; import java.util.concurrent.Future; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.TreeItem; import ru.naumen.servacc.config2.i.IConnectableConfigItem; /** * @author vtarasov * @since 22.01.2016 */ public class WaitForConnectionTask implements Runnable { private static final int MIN_DELAY = 100; private TreeItem treeItem; private IConnectableConfigItem configItem; private Future<?> connectionTaskFuture; public WaitForConnectionTask(TreeItem treeItem, IConnectableConfigItem configItem, Future<?> connectionTaskFuture) { this.treeItem = treeItem; this.configItem = configItem; this.connectionTaskFuture = connectionTaskFuture; } @Override public void run() { List<Image> images = ImageCache.getImages(configItem.getConnectionProcessIconName()); int imageIndex = 0; while (imageIndex < images.size()) { if (connectionTaskFuture.isDone()) { changeTreeItemIcon(ImageCache.getImage(configItem.getIconName())); return; } Image image = images.get(imageIndex); int delay = image.getImageData().delayTime; changeTreeItemIcon(image); imageIndex++; if (imageIndex == images.size()) { imageIndex = 0; } waitPause(delay); } } private void changeTreeItemIcon(Image image) { if (treeItem.isDisposed()) { return; } treeItem.getDisplay().asyncExec(() -> { if (treeItem.isDisposed()) { return; } treeItem.setImage(image); treeItem.getParent().update(); }); } private void waitPause(int delay) { try { Thread.currentThread().sleep(delay < MIN_DELAY ? MIN_DELAY : delay); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }