/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.debug; import com.google.inject.Inject; import com.google.inject.Singleton; import org.eclipse.che.commons.annotation.Nullable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * The debugger provider. * * @author Andrey Plotnikov * @author Anatoliy Bazko */ @Singleton public class DebuggerManager implements DebuggerManagerObservable { private Debugger activeDebugger; private Map<String, Debugger> debuggers; private List<DebuggerManagerObserver> observers; @Inject protected DebuggerManager() { this.debuggers = new HashMap<>(); this.observers = new ArrayList<>(); } /** * Register new debugger for the given id. */ public void registeredDebugger(String id, Debugger debugger) { debuggers.put(id, debugger); } /** * Gets {@link Debugger} for the given id. */ @Nullable public Debugger getDebugger(String id) { return debuggers.get(id); } /** * Sets new active debugger. * Resubscribe all {@link DebuggerObserver} to listen to events from new {@link Debugger} * * @param debugger * debugger is being used */ public void setActiveDebugger(@Nullable Debugger debugger) { if (activeDebugger != null) { for (DebuggerManagerObserver observer : observers) { activeDebugger.removeObserver(observer); } } activeDebugger = debugger; for (DebuggerManagerObserver observer : observers) { if (activeDebugger != null) { activeDebugger.addObserver(observer); } observer.onActiveDebuggerChanged(activeDebugger); } } /** * @return {@link Debugger} is currently being used */ @Nullable public Debugger getActiveDebugger() { return activeDebugger; } @Override public void addObserver(DebuggerManagerObserver observer) { observers.add(observer); } @Override public void removeObserver(DebuggerManagerObserver observer) { observers.remove(observer); } }