How nabia-faisal/stock-exchange works
Purpose and entry points
NUST Exchange is a stateful JavaFX desktop stock-exchange simulator: authenticated traders submit market/limit buy and sell orders, which are matched into trades while prices and bot activity run in the background. Launch through src/main/java/com/nust/exchange/app/Main.java; JavaFX lifecycle and application composition are in src/main/java/com/nust/exchange/app/App.java.
Application shell and UI boundary
JavaFX views are the presentation boundary: login/registration occurs in src/main/java/com/nust/exchange/ui/LoginView.java, and the authenticated trading/dashboard experience is in src/main/java/com/nust/exchange/ui/DashboardView.java. UI actions should enter the exchange/domain APIs rather than mutate books, portfolios, or persistence directly. Styling is packaged at src/main/resources/styles.css.
Exchange orchestration
src/main/java/com/nust/exchange/engine/Exchange.java is the central market coordinator/singleton. It owns or coordinates listed stocks, traders, order submission, matching, market listeners, startup seeding/loading, and shutdown persistence. It forms the boundary between UI/background actors and mutable trading state.
Trading domain and order lifecycle
Orders are represented by src/main/java/com/nust/exchange/model/Order.java with distinct MarketOrder.java and LimitOrder.java; creation is centralized by src/main/java/com/nust/exchange/patterns/OrderFactory.java. Order side, type, and lifecycle status reside in src/main/java/com/nust/exchange/enums/OrderSide.java, OrderType.java, and OrderStatus.java. Validation failures are expressed through the trading exception hierarchy under src/main/java/com/nust/exchange/exceptions/.
Matching and settlement
src/main/java/com/nust/exchange/engine/OrderBook.java maintains executable order-book state/depth. src/main/java/com/nust/exchange/engine/MatchingEngine.java applies price-time priority, supports partial fills, and emits src/main/java/com/nust/exchange/model/Trade.java. Executions update buyer/seller cash and inventory through src/main/java/com/nust/exchange/model/Portfolio.java and Holding.java; this is the critical conservation and synchronization boundary.
Actors and live market processes
Trader variants—base src/main/java/com/nust/exchange/model/Trader.java, plus retail, institutional, and admin subclasses—define account capabilities. src/main/java/com/nust/exchange/engine/PriceSimulator.java updates market prices, while BotTrader.java creates automated order flow concurrently. Market changes are propagated through the observer interface src/main/java/com/nust/exchange/patterns/MarketListener.java; consumers include the UI.
Persistence and runtime infrastructure
State is disk-backed in the repository-local data/ directory. src/main/java/com/nust/exchange/persistence/DataStore.java coordinates persistence; CSV repositories/mappers persist stocks and trades, while BinaryRepository.java serializes trader/account state. TransactionLogger.java appends trade audit records. The runtime is Java 17+ (documented Java 21 execution), JavaFX 21, Maven (pom.xml), with no network service or database dependency.
Main entry points: Exchange.java Exchange · App.java App · MatchingEngine.java MatchingEngine · DashboardView.java DashboardView
Components 19
JavaFX UI
- Main
src/main/java/com/nust/exchange/app/Main.java - App
src/main/java/com/nust/exchange/app/App.java - LoginView
src/main/java/com/nust/exchange/ui/LoginView.java - DashboardView · Displays authenticated market activity and submits user actions.
src/main/java/com/nust/exchange/ui/DashboardView.java
Market Core
- Exchange · Singleton boundary for mutable market state and lifecycle.
src/main/java/com/nust/exchange/engine/Exchange.java - OrderFactory
src/main/java/com/nust/exchange/patterns/OrderFactory.java - Orders · Order lifecycle uses side, type, and status enums.
src/main/java/com/nust/exchange/model/Order.java - OrderBook · Maintains executable orders and depth.
src/main/java/com/nust/exchange/engine/OrderBook.java - MatchingEngine · Applies price-time priority and partial fills.
src/main/java/com/nust/exchange/engine/MatchingEngine.java - Trade
src/main/java/com/nust/exchange/model/Trade.java - Portfolio & Holding · Cash and inventory update at the execution boundary.
src/main/java/com/nust/exchange/model/Portfolio.java - MarketListener
src/main/java/com/nust/exchange/patterns/MarketListener.java
Market Actors
- Traders · Base trader with retail, institutional, and admin variants.
src/main/java/com/nust/exchange/model/Trader.java - PriceSimulator
src/main/java/com/nust/exchange/engine/PriceSimulator.java - BotTrader · Generates concurrent automated order flow.
src/main/java/com/nust/exchange/engine/BotTrader.java
Persistence
- DataStore
src/main/java/com/nust/exchange/persistence/DataStore.java - CSV & Binary repositories · CSV persists stocks and trades; binary serialization persists accounts.
src/main/java/com/nust/exchange/persistence/BinaryRepository.java - TransactionLogger
- data · Repository-local persisted exchange state.
Connections 21
- Main → App: launches
- App → LoginView: composes
- App → DashboardView: composes
- LoginView → Exchange: authenticates through
- DashboardView → Exchange: trading actions
- Exchange → OrderFactory: creates orders
- OrderFactory → Orders: builds
- Exchange → OrderBook: submits to
- OrderBook → MatchingEngine: executable orders
- MatchingEngine → Trade: emits
- MatchingEngine → Portfolio & Holding: settles
- Traders → Portfolio & Holding: own
- BotTrader → Exchange: automated orders
- PriceSimulator → Exchange: price updates
- Exchange → MarketListener: publishes market changes
- MarketListener → DashboardView: updates
- Exchange → DataStore: loads and saves state
- DataStore → CSV & Binary repositories: coordinates
- CSV & Binary repositories → data: persists
- Trade → TransactionLogger: audit record
- TransactionLogger → data: appends