Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
2776b50
Edit des fichiers modèles
4rthur-Root May 29, 2026
c204060
Add lab name to audit schema
4rthur-Root May 29, 2026
e6b6e6d
Align model entities with domain logic
4rthur-Root May 29, 2026
f284e95
Document public Java APIs with Javadoc
4rthur-Root May 29, 2026
daaddcb
Add unit tests for model classes
4rthur-Root May 29, 2026
9d130aa
Corrections mineures orthographe du JavaDoc
4rthur-Root May 30, 2026
38ac373
feat(ui): validate final mockup & add data stubs
M4dnolyn May 30, 2026
51ac4bd
chore: add CI workflow and PR template
4rthur-Root May 30, 2026
cac0d7b
fix: move PR template to correct location
4rthur-Root May 30, 2026
4ab5d25
Add: Adding CONTRIBUTING to the repo
4rthur-Root May 30, 2026
68d90c3
chore: untrack target directory
4rthur-Root May 30, 2026
6d2a438
docs: add SETUP.md environment guide
4rthur-Root May 30, 2026
bd8fd9e
Merge pull request #1 from TheSOCAnalyst/core/github-config
akpmarcelin Jun 3, 2026
83f7dea
feat(ui): sauvegarde avant merge role-3
M4dnolyn Jun 6, 2026
441f856
Merge feature/role-3-models into develop: model Javadoc + unit tests
4rthur-Root Jun 10, 2026
407b35c
Merge core/github-config into develop: CI workflow, PR template, CONT…
4rthur-Root Jun 10, 2026
d3c8561
Merge branch 'develop' of https://github.com/4rthur-Root/CyberLab int…
4rthur-Root Jun 10, 2026
f77b570
feat(ui): modifications LabController
M4dnolyn Jun 11, 2026
ca438ab
Merge remote-tracking branch 'origin/develop' into feature/role-1-ui
M4dnolyn Jun 11, 2026
eb159f9
back
M4dnolyn Jun 25, 2026
1be9395
UI: Alignement complet de l'interface avec la maquette et refactoring…
M4dnolyn Jun 25, 2026
787dbfc
feat(ui): phase1A - affichage dynamique des labos via mockLabs
M4dnolyn Jul 2, 2026
9db79f0
feat(ui): phase1B - selection labo affiche les VMs associees
M4dnolyn Jul 2, 2026
8db5026
feat(ui): selection VM active les controles contextuels
M4dnolyn Jul 2, 2026
ff897fd
feat(hypervisor): mock hypervisor conforme au contrat IHypervisor reel
M4dnolyn Jul 2, 2026
cb3c964
feat(ui): snapshots take/restore en asynchrone
M4dnolyn Jul 2, 2026
3fcd550
feat(ui): journal utilisateur dynamique avec horodatage
M4dnolyn Jul 2, 2026
e5cc781
feat(ui): audit automatique + accordeon system audit logs
M4dnolyn Jul 2, 2026
bec3661
feat(ui): import VM avec FileChooser (stub)
M4dnolyn Jul 2, 2026
a6bd6a3
feat(ui): export PDF avec FileChooser (stub)
M4dnolyn Jul 2, 2026
757056d
feat(ui): check
M4dnolyn Jul 2, 2026
8baa586
fix(ui): implementer onImportVMsClicked (mock) + corriger accolades r…
M4dnolyn Jul 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
## Ce que fait ce MR

<!-- Une phrase : "Ajoute X", "Corrige Y", "Implémente Z" -->

## Couche concernée

- [ ] `model` — entités et POJOs
- [ ] `hypervisor` — IHypervisor / VBoxOrchestrator
- [ ] `data` — DatabaseManager / schema SQL
- [ ] `pdf` — PdfExporter
- [ ] `controller` — LabController
- [ ] `ui` — vues JavaFX
- [ ] Config / build (pom.xml, module-info, CI)

## Checklist avant review

- [ ] `./mvnw test` passe en local (0 failure, 0 error)
- [ ] Javadoc présent sur toutes les classes et méthodes publiques ajoutées
- [ ] Pas de `System.out.println` de debug oublié
- [ ] Pas de TODO non intentionnel
- [ ] Les imports inutilisés ont été supprimés (IntelliJ : Ctrl+Alt+O)

## Pour le reviewer

<!-- Ce qui mérite une attention particulière, un choix d'implémentation à valider, une question -->
34 changes: 34 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: CI

on:
push:
branches: [ "main", "develop", "feature/**", "fix/**" ]
pull_request:
branches: [ "develop", "main" ]

jobs:
build-and-test:
name: Build & Test (Java 17)
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Java 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven # met le dépôt Maven en cache → builds 2x plus rapides

- name: Build & run tests
run: ./mvnw test --no-transfer-progress

- name: Upload Surefire reports on failure
if: failure() # s'exécute UNIQUEMENT si les tests échouent
uses: actions/upload-artifact@v4
with:
name: surefire-reports
path: target/surefire-reports/
retention-days: 7
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,4 @@ build/

### Mac OS ###
.DS_Store
target/
74 changes: 74 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Guide de contribution — Cyber Lab Manager

## Branches

| Préfixe | Usage | Exemple |
|---|---|---|
| `feature/` | Nouvelle fonctionnalité | `feature/vbox-orchestrator` |
| `fix/` | Correction de bug | `fix/snapshot-uuid-null` |
| `chore/` | Config, CI, docs | `chore/github-config` |
| `test/` | Ajout ou correction de tests seuls | `test/hypervisor-coverage` |

**Règle absolue :** on ne pousse jamais directement sur `develop` ou `main`.
Toujours passer par un MR depuis une branche `feature/` ou `fix/`.

## Format des commits

On suit [Conventional Commits](https://www.conventionalcommits.org/fr) :

```
<type>(<scope optionnel>): <description courte en français>
```

| Type | Quand l'utiliser |
|---|---|
| `feat` | Ajout d'une fonctionnalité |
| `fix` | Correction d'un bug |
| `test` | Ajout ou modification de tests |
| `docs` | Documentation (Javadoc, Markdown) |
| `refactor` | Refactoring sans changement de comportement |
| `chore` | Config build, CI, dépendances |

**Exemples :**
```
feat(model): add Snapshot uuid and online fields
fix(hypervisor): handle VBoxManage non-zero exit code
test(model): add LabTest unmodifiable list assertion
docs(hypervisor): complete Javadoc on IHypervisor
chore: add GitHub Actions CI workflow
```

## Ouvrir un MR

1. Ta branche est à jour avec `develop` (`git rebase develop` ou `git merge develop`)
2. `./mvnw test` passe en local — **0 failure, 0 error**
3. Javadoc présent sur toutes les classes et méthodes publiques ajoutées
4. Ouvre le MR vers `develop` sur GitHub
5. Remplis le template de MR (pré-rempli automatiquement)
6. Assigne au moins un reviewer

## Revue de code

- Le reviewer a **48h** pour donner son retour
- Un commentaire `[bloquant]` doit être résolu avant le merge
- Un commentaire `[suggestion]` est optionnel
- Approuver = confirmer que les tests passent ET que le code est lisible

## Standards de code

- **Java 17**, style standard IntelliJ (Ctrl+Alt+L pour formatter)
- Javadoc obligatoire sur toutes les classes et méthodes `public`
- Pas de `System.out.println` → utiliser `java.util.logging.Logger`
- Imports inutilisés supprimés (Ctrl+Alt+O dans IntelliJ)
- Pas de TODO non documenté dans un MR

## Responsabilités par package

| Package | Responsable |
|---|---|
| `tg.cyberlabmanager.model` | Rôle 3 |
| `tg.cyberlabmanager.hypervisor` | Rôle 3 |
| `tg.cyberlabmanager.data` | Rôle 2 |
| `tg.cyberlabmanager.pdf` | Rôle 2 |
| `tg.cyberlabmanager.ui` | Rôle 1 |
| `tg.cyberlabmanager.controller` | Rôle 1 |
Binary file added docs/Images/mockup-final.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
89 changes: 89 additions & 0 deletions docs/Markdowns/SETUP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# SETUP — Environnement de développement

## Prérequis

| Outil | Version minimale | Vérification |
|---|---|---|
| JDK | 17 (LTS) | `java -version` |
| Maven | 3.8+ | `./mvnw -version` |
| VirtualBox | 7.0+ | Pour les tests d'intégration |
| Git | 2.x | `git --version` |

> Le projet utilise le Maven Wrapper (`./mvnw`) — pas besoin d'installer Maven globalement.

---

## Configuration IDE — point critique à lire

Le projet compile en **Java 17** même si tu as un JDK plus récent (21, 22…) sur ta machine.
C'est contrôlé par cette ligne dans `pom.xml` :

```xml
<maven.compiler.release>17</maven.compiler.release>
```

Cette propriété fixe simultanément la syntaxe acceptée, le bytecode cible (class file version 61)
et les APIs accessibles — le compilateur de ton JDK s'adapte automatiquement.

### IntelliJ IDEA

**File → Project Structure → Project** :
- SDK : ton JDK installé (17, 21, peu importe)
- Language level : **17**

**File → Settings → Build → Compiler → Java Compiler** :
- Target bytecode version : **17**

### Pourquoi c'est important

Si quelqu'un compile avec bytecode Java 21 et pousse du code, les autres obtiendront :
```
UnsupportedClassVersionError: Unsupported major.minor version 65.0
```
La version 65 = Java 21. La version 61 = Java 17 (notre cible).
Garder tout le monde sur la même cible évite ce type de conflit au merge.

---

## Lancer le projet

```bash
# Compiler et lancer tous les tests
./mvnw test

# Lancer l'application JavaFX
./mvnw javafx:run

# Générer la Javadoc dans target/reports/apidocs/
./mvnw javadoc:javadoc
```

> Si tu utilises un JDK non standard, préfixe avec JAVA_HOME :
> `JAVA_HOME=/usr/lib/jvm/jdk-21.0.11-oracle-x64 ./mvnw test`

---

## Structure des branches

```
main ← releases stables uniquement
develop ← intégration continue (branche de référence)
feature/x ← développement d'une fonctionnalité
fix/x ← correction de bug
chore/x ← config, CI, documentation
```

Voir [CONTRIBUTING.md](../CONTRIBUTING.md) pour les conventions complètes.

---

## Responsabilités par package

| Package | Rôle | Contenu |
|---|---|---|
| `tg.cyberlabmanager.model` | Rôle 3 | Entités métier (Lab, VM, Snapshot…) |
| `tg.cyberlabmanager.hypervisor` | Rôle 3 | IHypervisor, VBoxOrchestrator |
| `tg.cyberlabmanager.data` | Rôle 2 | DatabaseManager, SQLite |
| `tg.cyberlabmanager.pdf` | Rôle 2 | PdfExporter |
| `tg.cyberlabmanager.ui` | Rôle 1 | Vues JavaFX |
| `tg.cyberlabmanager.controller` | Rôle 1 | LabController |
7 changes: 5 additions & 2 deletions src/main/java/module-info.java
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
/**
* Module principal de l'application Cyber Lab Manager.
*/
module tg.cyberlabmanager {

// ── JavaFX ──────────────────────────────────────────────────────────
Expand All @@ -23,12 +26,12 @@
opens tg.cyberlabmanager.controller to javafx.fxml;
opens tg.cyberlabmanager.ui to javafx.fxml;

// ── Exports publics ──────────────────────────────────────────────────
// ── Exports publics
exports tg.cyberlabmanager.app;
exports tg.cyberlabmanager.controller;
exports tg.cyberlabmanager.model;
exports tg.cyberlabmanager.data;
exports tg.cyberlabmanager.hypervisor;
exports tg.cyberlabmanager.pdf;
exports tg.cyberlabmanager.ui;
}
}
43 changes: 38 additions & 5 deletions src/main/java/tg/cyberlabmanager/app/CyberLabApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,49 @@
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
import tg.cyberlabmanager.controller.LabController;

import java.io.IOException;

/**
* Application JavaFX principale de Cyber Lab Manager.
*/
public class CyberLabApp extends Application {

private LabController controller;

/**
* Cree l'application JavaFX.
*/
public CyberLabApp() {
}

/**
* Initialise et affiche la fenetre principale JavaFX.
*
* @param stage scene principale fournie par JavaFX
* @throws IOException si le chargement du fichier FXML echoue
*/
@Override
public void start(Stage stage) throws IOException {
FXMLLoader loader = new FXMLLoader(CyberLabApp.class.getResource("/tg/cyberlabmanager/ui/main-view.fxml"));
Scene scene = new Scene(loader.load(), 900, 600);
public void start(Stage stage) throws Exception {
FXMLLoader loader = new FXMLLoader(
CyberLabApp.class.getResource("/tg/cyberlabmanager/ui/main-view.fxml")
);
Scene scene = new Scene(loader.load(), 1400, 820);
controller = loader.getController();
stage.setTitle("Cyber Lab Manager");
stage.setMinWidth(1100);
stage.setMinHeight(650);
stage.setScene(scene);
stage.show();
}

@Override
public void stop() {
if (controller != null) {
controller.shutdown();
}
}

public static void main(String[] args) {
launch(args);
}
}
14 changes: 14 additions & 0 deletions src/main/java/tg/cyberlabmanager/app/Launcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,21 @@

import javafx.application.Application;

/**
* Point d'entree deleguant le lancement a l'application JavaFX.
*/
public class Launcher {
/**
* Cree le lanceur de l'application.
*/
public Launcher() {
}

/**
* Lance l'application JavaFX.
*
* @param args arguments de ligne de commande
*/
public static void main(String[] args) {
Application.launch(CyberLabApp.class, args);
}
Expand Down
Loading
Loading