A modular, extensible, and visually intuitive platform for smart team task assignment and management.
Built with JavaFX (Client) and Java (Server), this project demonstrates clean layered architecture, flexible data access (DB & Files), and pluggable assignment algorithms.
- Client: JavaFX desktop application (FXML-based, modular).
- Server: Java backend with layered architecture, REST-like API over custom protocol.
- Algorithm Module: Contains the models, algorithms, and core logic, packaged as a JAR used by the server.
![]() |
|---|
| Main Classes Overview |
![]() |
|---|
| Layered Architecture |
- Network Layer: Receives client requests, dispatches to controllers.
- Controller Layer: Per-entity API, validation, forwarding to service.
- Service / Business Logic: Core algorithms, task/member/assignment management.
- DAO Layer: Data access abstraction — supports both file and SQLite storage.
- Model & Algorithm Layer: Core entities and assignment strategies.
![]() |
|---|
| Client Component Diagram |
![]() |
|---|
| UX Navigation Map |
- FXML Views: All UI screens and cards (tasks, members, assignments, stats, home, forms, sidebar).
- Controllers: Per-view logic and data binding.
- Utils: Helper classes for navigation, skill rendering, JSON handling, etc.
- NetworkClient: Handles communication with the server.
- Modular Layered Design: Easily swap out data sources, algorithms, or UI components.
- Flexible Assignment Algorithms: Choose between Greedy, BalancedLoad, or custom strategies.
- Modern JavaFX UI: Clean, FXML-based, modular, and extendable.
- Persistent Storage: Supports both SQLite DB and file-based storage (configurable).
- Clear UX Flow: Easy navigation between core modules (tasks, members, assignments, stats).
This project includes comprehensive JUnit test suites for all critical components:
TaskAssignmentServiceTest– Thoroughly tests assignment logic for both File and SQLite DAOs.TestDataGenerator– Quickly creates random but valid test data for integration/stress tests.
DaoImplIntegrationTest,DaoInsertDemoDataTest– Validates CRUD operations and data isolation for both persistence types.DBInitAndPopulateTest– Ensures clean DB state and demo population routines.
IntegrationFullFlowTest– End-to-end test: simulates real client-server-database flows.NetworkEndToEndTest– Verifies communication and results over actual network calls.
NetworkEdgeCasesTest– Network drops, invalid ports, timeouts, large payloads, multiple requests per connection.ConcurrencyAndRobustnessTest– Simulates concurrent users, race conditions, thread safety.
ValidationAndErrorTest– Confirms that all business and input validation is enforced, and error responses are consistent and safe.
🚀 Getting Started
Prerequisites
- Java 17+ (client and server)
- JavaFX SDK (client)
- SQLite JDBC Driver (if using SQLite backend)
How to run tests:
./gradlew test
# Or in your IDE: Right click > Run Tests on test folders
git clone https://github.com/your-username/SmartSchedulerApp.git
cd SmartSchedulerApp
# Build AlgorithmModule (JAR)
cd AlgorithmModule
./gradlew build
# Build & run Server
cd ../SmartSchedulerApp
./gradlew build
java -jar build/libs/SmartSchedulerApp.jar
# Build & run Client (JavaFX)
cd ../SmartSchedulerUI
./gradlew build
java --module-path <path-to-javafx-lib> --add-modules javafx.controls,javafx.fxml -jar build/libs/SmartSchedulerUI.jar
-
Switch between File and SQLite backend:
Edit the configuration fileconfig.propertiesor environment variable to set DAO type (fileorsqlite). -
Add new assignment algorithms:
ImplementITaskAssignmentinterface and register inStrategyFactory. -
Custom UI:
Modify or add FXML and Controller classes as needed.
- Java 17+
- JavaFX 17+ (FXML)
- SQLite / File persistence
- JUnit (unit tests for logic and DAO)
- Gradle (build automation)
- Add a new algorithm:
ImplementITaskAssignment, add toStrategyFactory. - UI Themes:
Replace FXML/CSS for custom look. - REST/HTTP support:
Adapt the server network layer for HTTP (optional).
PRs and issues are welcome!
- Initial design and implementation: Yehonatan Ravoach
- Inspired by real-world scheduling challenges in project management



