# parthibanlogan/java architecture

> Architecture diagram of the GitHub repository parthibanlogan/java, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/parthibanlogan/java
- Repository: https://github.com/parthibanlogan/java

## Overview

The repository is a civil-engineering Java learning lab with two substantial product threads: a catchment rainfall–runoff simulator, delivered on Android and the web, and browser/server Java teaching and assessment tools. Its principal engineering workflow loads terrain and rainfall data, builds drainage and catchment state, simulates runoff, then presents maps and hydrographs. The README also describes lessons, experiments, a reusable project starter, problem bank, and student-project directory. Several app and grading internals are unsampled, so their documented capabilities are shown without speculative internal links.

Main entry points: [`android-app/app/src/main/java/lab/civiltech/android/MainActivity.java`](https://github.com/parthibanlogan/java/blob/main/android-app/app/src/main/java/lab/civiltech/android/MainActivity.java) (Android app), [`apps/student/app.py`](https://github.com/parthibanlogan/java/blob/main/apps/student/app.py) (Student app), [`java/civiltech-core/src/main/java/civiltech/lab/CatchmentModel.java`](https://github.com/parthibanlogan/java/blob/main/java/civiltech-core/src/main/java/civiltech/lab/CatchmentModel.java) (Runoff simulation), [`apps/teacher/app.py`](https://github.com/parthibanlogan/java/blob/main/apps/teacher/app.py) (Teacher app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_sim["Catchment simulation"]
  node_android["Android app<br/>[MainActivity.java]"]
  node_grid["Terrain data<br/>[GridData.java]"]
  node_rain["Rainfall data<br/>[RainfallGrid.java]"]
  node_terrain["Terrain network<br/>[FlowNetwork.java]"]
  node_watershed["Catchment delineation<br/>[Watershed.java]"]
  node_settings["Simulation settings"]
  node_hydrology["Runoff simulation"]
  node_results["Hydrograph results"]
  node_map["Catchment map"]
  node_chart["Hydrograph view"]
end

subgraph group_learn["Java learning"]
  node_lessons["Java lessons"]
  node_experiments["Java experiments"]
end

subgraph group_assess["Lab assessment"]
  node_student["Student app<br/>[app.py]"]
  node_teacher["Teacher app<br/>[app.py]"]
  node_labdata["Lab catalog and control<br/>[labdata.py]"]
  node_sandbox["Java sandbox<br/>[sandbox.py]"]
  node_activity["Typing activity log<br/>[activity.py]"]
  node_crypto["Encrypted submissions<br/>[labcrypto.py]"]
  node_gradebook["Private gradebook"]
end

subgraph group_platform["Project platform"]
  node_starter["Project starter"]
  node_problem_bank["Problem bank"]
  node_projects["Student projects"]
  node_browser["Web experience"]
end

node_engineer(("Student / engineer"))
node_github["GitHub services"]
node_android_user(("App user"))

node_android_user -->|"uses"| node_android
node_android -->|"loads"| node_grid
node_android -->|"loads"| node_rain
node_android -->|"builds and runs"| node_hydrology
node_grid -->|"creates"| node_terrain
node_hydrology -->|"builds network"| node_terrain
node_hydrology -->|"delineates"| node_watershed
node_hydrology -->|"validates"| node_settings
node_hydrology -->|"produces"| node_results
node_android -->|"updates"| node_map
node_android -->|"shows"| node_chart
node_engineer -->|"learns from"| node_lessons
node_engineer -->|"practices with"| node_experiments
node_engineer -->|"copies"| node_starter
node_engineer -->|"claims problems"| node_problem_bank
node_engineer -->|"submits projects"| node_projects
node_engineer -->|"uses"| node_student
node_student -->|"reads catalog"| node_labdata
node_student -->|"compiles and runs"| node_sandbox
node_student -->|"records typing"| node_activity
node_student -->|"encrypts submission"| node_crypto
node_student -->|"submits issue"| node_github
node_teacher -->|"reads sessions"| node_labdata
node_teacher -->|"reviews typing"| node_activity
node_teacher -->|"manages sessions"| node_github
node_teacher -->|"dispatches marking"| node_gradebook
node_gradebook -.->|"collects submissions"| node_github
node_engineer -->|"uses"| node_browser

click node_android "https://github.com/parthibanlogan/java/blob/main/android-app/app/src/main/java/lab/civiltech/android/MainActivity.java"
click node_grid "https://github.com/parthibanlogan/java/blob/main/java/civiltech-core/src/main/java/civiltech/lab/GridData.java"
click node_rain "https://github.com/parthibanlogan/java/blob/main/java/civiltech-core/src/main/java/civiltech/lab/RainfallGrid.java"
click node_terrain "https://github.com/parthibanlogan/java/blob/main/java/civiltech-core/src/main/java/civiltech/terrain/FlowNetwork.java"
click node_watershed "https://github.com/parthibanlogan/java/blob/main/java/civiltech-core/src/main/java/civiltech/terrain/Watershed.java"
click node_settings "https://github.com/parthibanlogan/java/blob/main/java/civiltech-core/src/main/java/civiltech/lab/SimulationSettings.java"
click node_hydrology "https://github.com/parthibanlogan/java/blob/main/java/civiltech-core/src/main/java/civiltech/lab/CatchmentModel.java"
click node_results "https://github.com/parthibanlogan/java/blob/main/java/civiltech-core/src/main/java/civiltech/lab/SimulationResult.java"
click node_map "https://github.com/parthibanlogan/java/blob/main/android-app/app/src/main/java/lab/civiltech/android/CatchmentMapView.java"
click node_chart "https://github.com/parthibanlogan/java/blob/main/android-app/app/src/main/java/lab/civiltech/android/HydrographView.java"
click node_lessons "https://github.com/parthibanlogan/java/tree/main/course/lessons"
click node_experiments "https://github.com/parthibanlogan/java/tree/main/course/experiments"
click node_starter "https://github.com/parthibanlogan/java/tree/main/starter-template"
click node_problem_bank "https://github.com/parthibanlogan/java/tree/main/problems"
click node_projects "https://github.com/parthibanlogan/java/tree/main/projects"
click node_student "https://github.com/parthibanlogan/java/blob/main/apps/student/app.py"
click node_teacher "https://github.com/parthibanlogan/java/blob/main/apps/teacher/app.py"
click node_labdata "https://github.com/parthibanlogan/java/blob/main/apps/labcore/labdata.py"
click node_sandbox "https://github.com/parthibanlogan/java/blob/main/apps/labcore/sandbox.py"
click node_activity "https://github.com/parthibanlogan/java/blob/main/tools/lab/activity.py"
click node_crypto "https://github.com/parthibanlogan/java/blob/main/tools/lab/labcrypto.py"
click node_gradebook "https://github.com/parthibanlogan/java/tree/main/lab-system/gradebook"
click node_browser "https://github.com/parthibanlogan/java/tree/main/site"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_android,node_grid,node_rain,node_terrain,node_watershed,node_settings,node_hydrology,node_results,node_map,node_chart,node_android_user toneBlue
class node_lessons,node_experiments toneAmber
class node_student,node_teacher,node_labdata,node_sandbox,node_activity,node_crypto,node_gradebook toneMint
class node_starter,node_problem_bank,node_projects,node_browser toneRose
class node_engineer,node_github toneIndigo
```

## Components

### Catchment simulation

- [Android app](https://github.com/parthibanlogan/java/blob/main/android-app/app/src/main/java/lab/civiltech/android/MainActivity.java): `android-app/app/src/main/java/lab/civiltech/android/MainActivity.java`
- [Terrain data](https://github.com/parthibanlogan/java/blob/main/java/civiltech-core/src/main/java/civiltech/lab/GridData.java): `java/civiltech-core/src/main/java/civiltech/lab/GridData.java`
- [Rainfall data](https://github.com/parthibanlogan/java/blob/main/java/civiltech-core/src/main/java/civiltech/lab/RainfallGrid.java): `java/civiltech-core/src/main/java/civiltech/lab/RainfallGrid.java`
- [Terrain network](https://github.com/parthibanlogan/java/blob/main/java/civiltech-core/src/main/java/civiltech/terrain/FlowNetwork.java): `java/civiltech-core/src/main/java/civiltech/terrain/FlowNetwork.java`
- [Catchment delineation](https://github.com/parthibanlogan/java/blob/main/java/civiltech-core/src/main/java/civiltech/terrain/Watershed.java): `java/civiltech-core/src/main/java/civiltech/terrain/Watershed.java`
- [Simulation settings](https://github.com/parthibanlogan/java/blob/main/java/civiltech-core/src/main/java/civiltech/lab/SimulationSettings.java): `java/civiltech-core/src/main/java/civiltech/lab/SimulationSettings.java`
- [Runoff simulation](https://github.com/parthibanlogan/java/blob/main/java/civiltech-core/src/main/java/civiltech/lab/CatchmentModel.java): `java/civiltech-core/src/main/java/civiltech/lab/CatchmentModel.java`
- [Hydrograph results](https://github.com/parthibanlogan/java/blob/main/java/civiltech-core/src/main/java/civiltech/lab/SimulationResult.java): `java/civiltech-core/src/main/java/civiltech/lab/SimulationResult.java`
- [Catchment map](https://github.com/parthibanlogan/java/blob/main/android-app/app/src/main/java/lab/civiltech/android/CatchmentMapView.java): `android-app/app/src/main/java/lab/civiltech/android/CatchmentMapView.java`
- [Hydrograph view](https://github.com/parthibanlogan/java/blob/main/android-app/app/src/main/java/lab/civiltech/android/HydrographView.java): `android-app/app/src/main/java/lab/civiltech/android/HydrographView.java`

### Java learning

- [Java lessons](https://github.com/parthibanlogan/java/tree/main/course/lessons): `course/lessons`
- [Java experiments](https://github.com/parthibanlogan/java/tree/main/course/experiments): `course/experiments`

### Lab assessment

- [Student app](https://github.com/parthibanlogan/java/blob/main/apps/student/app.py): `apps/student/app.py`
- [Teacher app](https://github.com/parthibanlogan/java/blob/main/apps/teacher/app.py): `apps/teacher/app.py`
- [Lab catalog and control](https://github.com/parthibanlogan/java/blob/main/apps/labcore/labdata.py): `apps/labcore/labdata.py`
- [Java sandbox](https://github.com/parthibanlogan/java/blob/main/apps/labcore/sandbox.py): `apps/labcore/sandbox.py`
- [Typing activity log](https://github.com/parthibanlogan/java/blob/main/tools/lab/activity.py): `tools/lab/activity.py`
- [Encrypted submissions](https://github.com/parthibanlogan/java/blob/main/tools/lab/labcrypto.py): `tools/lab/labcrypto.py`
- [Private gradebook](https://github.com/parthibanlogan/java/tree/main/lab-system/gradebook): `lab-system/gradebook`

### Project platform

- [Project starter](https://github.com/parthibanlogan/java/tree/main/starter-template): `starter-template`
- [Problem bank](https://github.com/parthibanlogan/java/tree/main/problems): `problems`
- [Student projects](https://github.com/parthibanlogan/java/tree/main/projects): `projects`
- [Web experience](https://github.com/parthibanlogan/java/tree/main/site): `site`

### Other components

- **Student / engineer**
- **GitHub services**
- **App user**

## Connections

- App user → Android app: uses (evidence: `README.md`)
- Android app → Terrain data: loads (evidence: `android-app/app/src/main/java/lab/civiltech/android/MainActivity.java`)
- Android app → Rainfall data: loads (evidence: `android-app/app/src/main/java/lab/civiltech/android/MainActivity.java`)
- Android app → Runoff simulation: builds and runs (evidence: `android-app/app/src/main/java/lab/civiltech/android/MainActivity.java`)
- Terrain data → Terrain network: creates (evidence: `java/civiltech-core/src/main/java/civiltech/lab/GridData.java`)
- Runoff simulation → Terrain network: builds network (evidence: `java/civiltech-core/src/main/java/civiltech/lab/CatchmentModel.java`)
- Runoff simulation → Catchment delineation: delineates (evidence: `java/civiltech-core/src/main/java/civiltech/lab/CatchmentModel.java`)
- Runoff simulation → Simulation settings: validates (evidence: `java/civiltech-core/src/main/java/civiltech/lab/CatchmentModel.java`)
- Runoff simulation → Hydrograph results: produces (evidence: `java/civiltech-core/src/main/java/civiltech/lab/CatchmentModel.java`)
- Android app → Catchment map: updates (evidence: `android-app/app/src/main/java/lab/civiltech/android/MainActivity.java`)
- Android app → Hydrograph view: shows (evidence: `android-app/app/src/main/java/lab/civiltech/android/MainActivity.java`)
- Student / engineer → Java lessons: learns from (evidence: `README.md`)
- Student / engineer → Java experiments: practices with (evidence: `README.md`)
- Student / engineer → Project starter: copies (evidence: `README.md`)
- Student / engineer → Problem bank: claims problems (evidence: `README.md`)
- Student / engineer → Student projects: submits projects (evidence: `README.md`)
- Student / engineer → Student app: uses (evidence: `README.md`)
- Student app → Lab catalog and control: reads catalog (evidence: `apps/student/app.py`)
- Student app → Java sandbox: compiles and runs (evidence: `apps/student/app.py`)
- Student app → Typing activity log: records typing (evidence: `apps/student/app.py`)
- Student app → Encrypted submissions: encrypts submission (evidence: `apps/student/app.py`)
- Student app → GitHub services: submits issue (evidence: `apps/student/app.py`)
- Teacher app → Lab catalog and control: reads sessions (evidence: `apps/teacher/app.py`)
- Teacher app → Typing activity log: reviews typing (evidence: `apps/teacher/app.py`)
- Teacher app → GitHub services: manages sessions (evidence: `apps/teacher/app.py`)
- Teacher app → Private gradebook: dispatches marking (evidence: `apps/teacher/app.py`)
- Private gradebook → GitHub services: collects submissions
- Student / engineer → Web experience: uses (evidence: `README.md`)
