blob: f74b68b4e57136deb40f79663c0e2ab724ec24de [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2016 xored software, Inc. and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* xored software, Inc. - initial API and Implementation (Yuri Strot)
*******************************************************************************/
package org.eclipse.dltk.internal.launching.execution;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchesListener2;
import org.eclipse.dltk.core.environment.IDeployment;
public class DeploymentManager implements ILaunchesListener2 {
private Map<ILaunch, Set<IDeployment>> launchToDeployment = new HashMap<>();
private Set<IDeployment> activeDeployments = new HashSet<>();
private static DeploymentManager sInstance = null;
public static synchronized DeploymentManager getInstance() {
if (sInstance == null) {
sInstance = new DeploymentManager();
}
return sInstance;
}
public void startup() {
DebugPlugin.getDefault().getLaunchManager().addLaunchListener(this);
}
public void shutdown() {
undeployAll(activeDeployments);
DebugPlugin.getDefault().getLaunchManager().removeLaunchListener(this);
}
@Override
public void launchesAdded(ILaunch[] launches) {
}
@Override
public void launchesChanged(ILaunch[] launches) {
}
@Override
public synchronized void launchesRemoved(ILaunch[] launches) {
for (int i = 0; i < launches.length; i++) {
if (launchToDeployment.containsKey(launches[i])) {
Set<IDeployment> deployments = launchToDeployment
.get(launches[i]);
undeployAll(deployments);
launchToDeployment.remove(launches[i]);
}
}
}
private synchronized void undeployAll(Collection<IDeployment> deployments) {
Set<IDeployment> copy = new HashSet<>(deployments);
for (Iterator<IDeployment> iterator = copy.iterator(); iterator
.hasNext();) {
IDeployment deployment = iterator.next();
deployment.dispose();
activeDeployments.remove(deployment);
}
}
public synchronized void addDeployment(IDeployment deployment) {
activeDeployments.add(deployment);
}
public synchronized void addDeployment(ILaunch launch,
IDeployment deployment) {
activeDeployments.add(deployment);
if (launchToDeployment.containsKey(launch)) {
launchToDeployment.get(launch).add(deployment);
} else {
Set<IDeployment> elements = new HashSet<>();
elements.add(deployment);
launchToDeployment.put(launch, elements);
}
}
public synchronized void removeDeployment(IDeployment deployment) {
activeDeployments.remove(deployment);
}
@Override
public void launchesTerminated(ILaunch[] launches) {
launchesRemoved(launches);
}
}