| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A concurrent URL health-checker built around Data-Oriented Programming (DOP), functional-style pipelines, and structured concurrency on modern Java.
The design follows one core principle: data stays as data. Domain values (ScanRequest, Outcome, ScanResult) are immutable records and sealed types with no behavior attached; all logic lives in small, composable functions that transform one immutable value into the next.
Input — the user adds URLs through the UI, backed by a sealed RowItem (Pending/Scanned) shown in a single TableView, updated in place as results arrive.
Scan trigger — clicking Scan rebuilds Operator.requestList from every row (regardless of prior state, so nothing is ever permanently skipped), then runs Operator.setUp() to build one Callable<ScanResult> per request.
Execution — Operator.executeScan() forks every task into a StructuredTaskScope, joined by a custom Joiner (CustomJoin) that routes each result into successes or failures as it completes, and reports individual task-level failures via an injected fail-safe callback rather than crashing the scan.
Network layer — each request goes out via java.net.http.HttpClient with browser-like headers, returning a Success or Fail Outcome — network errors and malformed URLs are both caught and converted into a normal Fail result rather than throwing.
Aggregation — once all tasks complete, Report.summarize() folds the results into a CountStat (total/success/failure counts) alongside the raw success/failure lists.
Export — JSON_DTO/CSV_DTO convert the report into JSON/CSV records, memoized via LazyConstant so repeated exports don't reconvert, and written out through the OS file picker.
UI responsiveness — the whole scan runs inside a javafx.concurrent.Task on a background thread, so the UI never freezes during network calls; per-row UI updates from CustomJoin's callback are marshaled back onto the JavaFX Application Thread via Platform.runLater.
Built incrementally, phase by phase:
./gradlew run
Requires --enable-preview for structured concurrency and LazyConstant — make sure your build.gradle compiler/run tasks pass that flag.
./gradlew test
Integration tests (tagged integration) make real HTTPS requests and are slower than the unit suite.
This repository is not open source. It's shared publicly for portfolio and informational purposes only.
Want to use this code for something? Reach out first — open an issue or contact me via my GitHub profile.
| Back | FazBrowse Home | New Git URL |