package jetbrains.buildServer.clouds.vmware.tasks; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; import jetbrains.buildServer.clouds.vmware.VMWareCloudClient; import jetbrains.buildServer.clouds.vmware.connector.VMWareApiConnector; import org.jetbrains.annotations.NotNull; /** * Created by sergeypak on 27/10/2016. */ public class VmwareUpdateTaskManager implements VmwarePooledUpdateInstanceTask.PooledTaskObsoleteHandler { private final ConcurrentHashMap<String, VmwarePooledUpdateInstanceTask> myUpdateTasks; public VmwareUpdateTaskManager(){ myUpdateTasks = new ConcurrentHashMap<>(); } @NotNull public synchronized VmwareUpdateInstanceTask createUpdateTask(@NotNull final VMWareApiConnector connector, @NotNull final VMWareCloudClient client){ final VmwarePooledUpdateInstanceTask task = myUpdateTasks.computeIfAbsent(connector.getKey(), k -> createNewPooledTask(connector, client)); final VmwareUpdateInstanceTask retval = new VmwareUpdateInstanceTask(connector.getKey(), client, task); retval.register(); return retval; } protected VmwarePooledUpdateInstanceTask createNewPooledTask(@NotNull final VMWareApiConnector connector, @NotNull final VMWareCloudClient client){ return new VmwarePooledUpdateInstanceTask(connector, client, this); } @Override public synchronized void pooledTaskObsolete(@NotNull final VmwarePooledUpdateInstanceTask task) { myUpdateTasks.remove(task.getKey()); } }