Class JavaStateTransition

java.lang.Object
io.github.jspinak.brobot.manageStates.JavaStateTransition
All Implemented Interfaces:
IStateTransition

public class JavaStateTransition extends Object implements IStateTransition
Code-based state transition implementation for the Brobot framework.

JavaStateTransition represents transitions defined through Java code using BooleanSupplier functions. This implementation enables dynamic, programmatic state navigation where transition logic can involve complex conditions, external data, or runtime calculations that cannot be expressed declaratively.

Key components:

  • Transition Function: BooleanSupplier that executes the transition logic
  • Activation List: States to activate after successful transition
  • Exit List: States to deactivate after successful transition
  • Visibility Control: Whether source state remains visible post-transition
  • Path Score: Weight for path-finding algorithms (higher = less preferred)

State reference handling:

  • Uses state names during definition (IDs not yet assigned)
  • Names are converted to IDs during initialization
  • Both name and ID sets are maintained for flexibility
  • Supports multiple target states for branching transitions

Transition execution flow:

  1. BooleanSupplier is invoked to perform transition logic
  2. If true is returned, transition is considered successful
  3. States in 'activate' set become active
  4. States in 'exit' set become inactive
  5. Success counter is incremented for metrics

Common use patterns:

  • Complex navigation logic that depends on runtime conditions
  • Transitions involving external API calls or data validation
  • Dynamic state activation based on application state
  • Fallback transitions with custom error handling

Builder pattern benefits:

  • Fluent API for readable transition definitions
  • Default values for optional properties
  • Type-safe state name specification
  • Convenient overloads for common patterns

In the model-based approach, JavaStateTransition provides the flexibility needed for complex automation scenarios where declarative ActionDefinitions are insufficient. It enables seamless integration of custom logic while maintaining the benefits of the state graph structure for navigation and path finding.

Since:
1.0
See Also: