package jetbrains.mps.debug.api.breakpoints;
/*Generated by MPS */
import com.intellij.openapi.project.Project;
import java.util.List;
import java.util.ArrayList;
import org.jetbrains.annotations.NotNull;
public abstract class AbstractBreakpoint implements IBreakpoint {
protected final Project myProject;
protected boolean myIsEnabled = true;
protected long myCreationTime = -1;
private final List<IBreakpointListener> myListeners = new ArrayList<IBreakpointListener>();
protected AbstractBreakpoint(Project project) {
myProject = project;
}
@Override
public boolean isEnabled() {
return myIsEnabled;
}
public void toggleEnabled() {
setEnabled(!(myIsEnabled));
}
@Override
public void setCreationTime(long time) {
myCreationTime = time;
}
@Override
public void addBreakpointListener(@NotNull IBreakpointListener listener) {
myListeners.add(listener);
}
@Override
public void removeBreakpointListener(IBreakpointListener listener) {
myListeners.remove(listener);
}
@Override
public long getCreationTime() {
return myCreationTime;
}
@Override
public void setEnabled(final boolean enabled) {
boolean toggled = setEnabledInternal(enabled);
if (toggled) {
fireBreakpointEnabledStateToggled(enabled);
}
}
private boolean setEnabledInternal(boolean enabled) {
if (getKind().supportsDisable()) {
if (myIsEnabled != enabled) {
myIsEnabled = enabled;
if (myIsEnabled) {
enableInRunningSessions();
} else {
disableInRunningSessions();
}
return true;
}
}
return false;
}
@Override
public Project getProject() {
return myProject;
}
protected void disableInRunningSessions() {
removeFromRunningSessions();
}
protected void enableInRunningSessions() {
addToRunningSessions();
}
protected void fireBreakpointEnabledStateToggled(boolean enabled) {
// todo come up with better name
for (IBreakpointListener listener : myListeners) {
listener.breakpointEnabledStateToggled(this, enabled);
}
}
@Override
public boolean isValid() {
return true;
}
}