package jetbrains.mps.debug.api.breakpoints;
/*Generated by MPS */
import com.intellij.openapi.components.ApplicationComponent;
import java.util.Map;
import java.util.HashMap;
import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import jetbrains.mps.debug.api.BreakpointManagerComponent;
import org.jdom.Element;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
import com.intellij.openapi.application.ApplicationManager;
public class BreakpointProvidersManager implements ApplicationComponent {
private final Map<IBreakpointKind, IBreakpointsProvider> myKindToProvider = new HashMap<IBreakpointKind, IBreakpointsProvider>();
private final Map<String, IBreakpointKind> myNameToKind = new HashMap<String, IBreakpointKind>();
public BreakpointProvidersManager() {
}
@NotNull
@Override
public String getComponentName() {
return "Breakpoint Providers Manager Component";
}
@Override
public void initComponent() {
}
@Override
public void disposeComponent() {
}
public void registerProvider(IBreakpointsProvider<? extends IBreakpoint, ? extends IBreakpointKind<? extends IBreakpoint>> provider) {
// I just love generics in java
for (IBreakpointKind kind : provider.getAllKinds()) {
myKindToProvider.put(kind, provider);
myNameToKind.put(kind.getName(), kind);
}
for (Project project : ProjectManager.getInstance().getOpenProjects()) {
BreakpointManagerComponent.getInstance(project).reReadState();
}
}
public void unregisterProvider(IBreakpointsProvider<? extends IBreakpoint, ? extends IBreakpointKind<? extends IBreakpoint>> provider) {
Map<BreakpointManagerComponent, Element> states = new HashMap<BreakpointManagerComponent, Element>();
for (Project project : ProjectManager.getInstance().getOpenProjects()) {
BreakpointManagerComponent component = BreakpointManagerComponent.getInstance(project);
states.put(component, component.getState());
}
for (IBreakpointKind kind : provider.getAllKinds()) {
myKindToProvider.remove(kind);
myNameToKind.remove(kind.getName());
}
for (BreakpointManagerComponent component : states.keySet()) {
component.loadState(states.get(component));
}
}
@Nullable
public IBreakpointsProvider getProvider(IBreakpointKind kind) {
return myKindToProvider.get(kind);
}
@Nullable
public IBreakpointKind getKind(String name) {
return myNameToKind.get(name);
}
public Set<IBreakpointKind> getAllKinds() {
return myKindToProvider.keySet();
}
public static BreakpointProvidersManager getInstance() {
return ApplicationManager.getApplication().getComponent(BreakpointProvidersManager.class);
}
}