Author: davsclaus Date: Thu Jul 8 13:46:09 2010 New Revision: 961767 URL: http://svn.apache.org/viewvc?rev=961767&view=rev Log: CAMEL-2919: only one single step at a given time is allowed.
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultDebugger.java camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Debugger.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultDebugger.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultDebugger.java?rev=961767&r1=961766&r2=961767&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultDebugger.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultDebugger.java Thu Jul 8 13:46:09 2010 @@ -52,8 +52,8 @@ public class DefaultDebugger implements private static final Log LOG = LogFactory.getLog(DefaultDebugger.class); private final List<BreakpointConditions> breakpoints = new ArrayList<BreakpointConditions>(); - // TODO: Should we support multiple single steps? - private final Map<String, Breakpoint> singleSteps = new HashMap<String, Breakpoint>(); + private final int maxConcurrentSingleSteps = 1; + private final Map<String, Breakpoint> singleSteps = new HashMap<String, Breakpoint>(maxConcurrentSingleSteps); private CamelContext camelContext; /** @@ -97,11 +97,11 @@ public class DefaultDebugger implements } public void addBreakpoint(Breakpoint breakpoint) { - breakpoints.add(new BreakpointConditions(breakpoint)); + addBreakpoint(breakpoint, (Condition) null); } public void addBreakpoint(Breakpoint breakpoint, Condition... conditions) { - if (conditions != null) { + if (conditions != null && conditions.length > 0) { breakpoints.add(new BreakpointConditions(breakpoint, Arrays.asList(conditions))); } else { breakpoints.add(new BreakpointConditions(breakpoint)); @@ -109,7 +109,7 @@ public class DefaultDebugger implements } public void addSingleStepBreakpoint(final Breakpoint breakpoint) { - addSingleStepBreakpoint(breakpoint, null); + breakpoints.add(new BreakpointConditions(breakpoint)); } public void addSingleStepBreakpoint(final Breakpoint breakpoint, Condition... conditions) { @@ -177,8 +177,14 @@ public class DefaultDebugger implements return Collections.unmodifiableList(answer); } - public void startSingleStepExchange(String exchangeId, Breakpoint breakpoint) { + public boolean startSingleStepExchange(String exchangeId, Breakpoint breakpoint) { + // can we accept single stepping the given exchange? + if (singleSteps.size() >= maxConcurrentSingleSteps) { + return false; + } + singleSteps.put(exchangeId, breakpoint); + return true; } public void stopSingleStepExchange(String exchangeId) { Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Debugger.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Debugger.java?rev=961767&r1=961766&r2=961767&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Debugger.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Debugger.java Thu Jul 8 13:46:09 2010 @@ -96,8 +96,10 @@ public interface Debugger extends Servic * * @param exchangeId the exchange id * @param breakpoint the breakpoint + * @return <tt>true</tt> if the debugger will single step the given exchange, <tt>false</tt> if the debugger is already + * single stepping another, and thus cannot simultaneously single step another exchange */ - void startSingleStepExchange(String exchangeId, Breakpoint breakpoint); + boolean startSingleStepExchange(String exchangeId, Breakpoint breakpoint); /** * Stops the single step debug mode for the given exchange.