001package jmri.jmrit.logixng.tools.debugger; 002 003import jmri.InstanceManager; 004import jmri.jmrit.logixng.*; 005import jmri.jmrit.logixng.implementation.AbstractMaleSocket; 006 007/** 008 * Abstract debugger male socket 009 * @author Daniel Bergqvist 2020 010 */ 011public abstract class AbstractDebuggerMaleSocket extends AbstractMaleSocket { 012 013 private final Debugger _debugger = InstanceManager.getDefault(Debugger.class); 014// protected final MaleSocket ((MaleSocket)getObject()); 015 016 private boolean _breakpointBefore = false; 017 private boolean _breakpointAfter = false; 018 019 private boolean _stepInto = true; 020 private boolean _lastDoBreak = true; 021 022 023 public AbstractDebuggerMaleSocket(BaseManager<? extends MaleSocket> manager, MaleSocket maleSocket) { 024 super(manager, maleSocket); 025 } 026 027 /** 028 * Get information about this action/expression before it is executed or 029 * evaluated. 030 * @return an information string 031 */ 032 public abstract String getBeforeInfo(); 033 034 /** 035 * Get information about this action/expression after it is executed or 036 * evaluated. 037 * @return an information string 038 */ 039 public abstract String getAfterInfo(); 040 041 protected boolean isDebuggerActive() { 042 return _debugger.isDebuggerActive() 043 && (_debugger.getDebugConditionalNG() == this.getConditionalNG()); 044 } 045 046 protected void before() { 047 _lastDoBreak = _debugger.getBreak(); 048 if (isDebuggerActive() && (_debugger.getBreak() || _breakpointBefore)) { 049// System.out.format("Before: %s%n", getLongDescription()); 050 _debugger.firePropertyChange(Debugger.STEP_BEFORE, null, this); 051 _debugger.setBreak(_stepInto); 052 } 053 } 054 055 protected void after() { 056 if (isDebuggerActive()) { 057 _debugger.setBreak(_lastDoBreak); 058 if (_debugger.getBreak() || _breakpointAfter) { 059// System.out.format("After: %s%n", getLongDescription()); 060 _debugger.firePropertyChange(Debugger.STEP_AFTER, null, this); 061 } 062 } 063 } 064 065 public void setStepInto(boolean value) { 066 _stepInto = value; 067 } 068 069 public void setBreakpointBefore(boolean value) { 070 _breakpointBefore = value; 071 } 072 073 public boolean getBreakpointBefore() { 074 return _breakpointBefore; 075 } 076 077 public void setBreakpointAfter(boolean value) { 078 _breakpointAfter = value; 079 } 080 081 public boolean getBreakpointAfter() { 082 return _breakpointAfter; 083 } 084 085 @Override 086 protected final void registerListenersForThisClass() { 087 ((MaleSocket)getObject()).registerListeners(); 088 } 089 090 @Override 091 protected final void unregisterListenersForThisClass() { 092 ((MaleSocket)getObject()).unregisterListeners(); 093 } 094 095 @Override 096 protected final void disposeMe() { 097 ((MaleSocket)getObject()).dispose(); 098 } 099 100 @Override 101 public final void setEnabled(boolean enable) { 102 ((MaleSocket)getObject()).setEnabled(enable); 103 } 104 105 @Override 106 public void setEnabledFlag(boolean enable) { 107 ((MaleSocket)getObject()).setEnabledFlag(enable); 108 } 109 110 @Override 111 public final boolean isEnabled() { 112 return ((MaleSocket)getObject()).isEnabled(); 113 } 114 115 @Override 116 public final void setDebugConfig(DebugConfig config) { 117 ((MaleSocket)getObject()).setDebugConfig(config); 118 } 119 120 @Override 121 public final DebugConfig getDebugConfig() { 122 return ((MaleSocket)getObject()).getDebugConfig(); 123 } 124 125 @Override 126 public final DebugConfig createDebugConfig() { 127 return ((MaleSocket)getObject()).createDebugConfig(); 128 } 129 130 @Override 131 public final String getComment() { 132 return ((MaleSocket)getObject()).getComment(); 133 } 134 135 @Override 136 public final void setComment(String comment) { 137 ((MaleSocket)getObject()).setComment(comment); 138 } 139 140 @Override 141 public void setParent(Base parent) { 142 super.setParent(parent); 143 ((MaleSocket)getObject()).setParent(this); 144 } 145 146}