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}