From 18aa2bbc91e7179554f9a041a37e5d954a24fd06 Mon Sep 17 00:00:00 2001 From: Alexandre Vanini <vanini.alexandre@gmail.com> Date: Tue, 7 May 2019 16:37:28 +0200 Subject: [PATCH] [ANGULAR + JAVALIN] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ajout de route pour la database création de programme + ajout de kata totalement ok j'ai remplacé le jquery par le clienthttp de angular --- client/src/app/app-routing.module.ts | 2 +- client/src/app/app.module.ts | 4 +- client/src/app/compilation.service.ts | 21 +----- client/src/app/create-kata.service.ts | 18 ++--- client/src/app/create-program.service.ts | 21 ++---- .../src/app/fetch-kata-show-case.service.ts | 13 ++-- client/src/app/fetch-kata.service.ts | 9 +-- client/src/app/fetch-program.service.ts | 24 ++---- .../app/kata-create/kata-create.component.ts | 38 ++++++---- .../kata-displayer.component.html | 7 +- .../kata-displayer.component.ts | 3 +- client/src/app/kata-displayer/kataShowCase.ts | 6 +- .../app/kata-displayer/kataShowCaseMock.ts | 3 +- client/src/app/kata/kata.component.html | 14 ++-- client/src/app/kata/kata.component.ts | 39 ++++++---- client/src/app/kata/kata.ts | 13 ++-- client/src/app/kata/kataMock.ts | 2 + .../program-create.component.ts | 23 +++--- .../program-displayer.component.html | 6 +- .../program-displayer.component.ts | 2 +- client/src/app/program-displayer/program.ts | 14 ++-- .../src/app/program-displayer/programMock.ts | 3 +- .../terminal-code.component.html | 2 +- .../server_rest/src/main/java/Kata.java | 32 +++++++- .../src/main/java/KataShowCase.java | 42 +++++++++++ .../server_rest/src/main/java/LiveDB.java | 58 ++++++++++---- .../server_rest/src/main/java/Program.java | 9 +++ .../src/main/java/ProgramShowCase.java | 71 ++++++++++++++++++ .../src/main/java/ProgramsDataBase.java | 6 +- .../server_rest/src/main/java/app.java | 14 +++- .../server_rest/target/classes/Kata.class | Bin 1872 -> 2442 bytes .../target/classes/KataShowCase.class | Bin 0 -> 1249 bytes .../server_rest/target/classes/LiveDB.class | Bin 1043 -> 3026 bytes .../server_rest/target/classes/Program.class | Bin 1718 -> 2160 bytes .../target/classes/ProgramShowCase.class | Bin 0 -> 2020 bytes .../target/classes/ProgramsDataBase.class | Bin 470 -> 682 bytes .../server_rest/target/classes/app.class | Bin 4421 -> 5012 bytes .../__pycache__/sample.cpython-34.pyc | Bin 97 -> 97 bytes .../src/main/java/DockerCompilation.java | 11 --- .../target/classes/DockerCompilation.class | Bin 5418 -> 5176 bytes 40 files changed, 345 insertions(+), 185 deletions(-) create mode 100644 tests/serveur_compilation/server_rest/src/main/java/KataShowCase.java create mode 100644 tests/serveur_compilation/server_rest/src/main/java/ProgramShowCase.java create mode 100644 tests/serveur_compilation/server_rest/target/classes/KataShowCase.class create mode 100644 tests/serveur_compilation/server_rest/target/classes/ProgramShowCase.class diff --git a/client/src/app/app-routing.module.ts b/client/src/app/app-routing.module.ts index c89d41c..928840b 100644 --- a/client/src/app/app-routing.module.ts +++ b/client/src/app/app-routing.module.ts @@ -14,7 +14,7 @@ const routerOptions: ExtraOptions = { const routes: Routes = [ {path: 'program_test', component: ProgramDisplayerComponent}, {path: 'kata-displayer/:id/:title/:language/:sensei', component: KataDisplayerComponent}, - {path: 'kata/:id', component: KataComponent}, + {path: 'kata/:prgtitle/:sensei/:prid/:id', component: KataComponent}, {path: 'program_create', component: ProgramCreateComponent}, {path: 'kata_create/:id/:language', component: KataCreateComponent}, ]; diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index fa7b47e..b9d1f5d 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts @@ -17,6 +17,7 @@ import {AceEditorModule} from 'ng2-ace-editor'; import { KataCreateComponent } from './kata-create/kata-create.component'; import { ProgramCreateComponent } from './program-create/program-create.component'; import {FormsModule} from '@angular/forms'; +import { HttpClientModule } from '@angular/common/http'; @NgModule({ @@ -44,7 +45,8 @@ import {FormsModule} from '@angular/forms'; AppRoutingModule, RouterModule, AceEditorModule, - FormsModule + FormsModule, + HttpClientModule ], providers: [], bootstrap: [AppComponent] diff --git a/client/src/app/compilation.service.ts b/client/src/app/compilation.service.ts index e9f714a..35844fd 100644 --- a/client/src/app/compilation.service.ts +++ b/client/src/app/compilation.service.ts @@ -1,28 +1,15 @@ import {Injectable} from '@angular/core'; -import * as $ from 'jquery'; +import {HttpClient} from '@angular/common/http'; @Injectable({ providedIn: 'root' }) export class CompilationService { - compilationServer(obj: string): string { - let response = ''; - $.ajax({ - url: 'http://localhost:7000/run/', - type: 'POST', - async: false, - data: obj, - contentType: 'application/json', - success(data) { - response = data; - } - - }); - - return response; + compilationServer(obj: string) { + return this.http.post('http://localhost:7000/run/', obj); } - constructor() { + constructor(private http: HttpClient) { } } diff --git a/client/src/app/create-kata.service.ts b/client/src/app/create-kata.service.ts index 87f9bfb..7821435 100644 --- a/client/src/app/create-kata.service.ts +++ b/client/src/app/create-kata.service.ts @@ -1,23 +1,15 @@ import {Injectable} from '@angular/core'; -import * as $ from 'jquery'; +import {HttpClient, HttpHeaders} from '@angular/common/http'; @Injectable({ providedIn: 'root' }) -export class CreateKataService { - - publish(obj: string): void { - - $.ajax({ - url: 'http://localhost:7000/kata/create', - type: 'POST', - async: false, - data: obj, - contentType: 'application/json' - }); +export class CreateKataService { + publish(obj: string) { + return this.http.post('http://localhost:7000/kata/create', obj); } - constructor() { + constructor(private http: HttpClient) { } } diff --git a/client/src/app/create-program.service.ts b/client/src/app/create-program.service.ts index 7630baf..ee2f282 100644 --- a/client/src/app/create-program.service.ts +++ b/client/src/app/create-program.service.ts @@ -1,30 +1,19 @@ import {Injectable} from '@angular/core'; -import * as $ from 'jquery'; +import {HttpClient} from '@angular/common/http'; @Injectable({ providedIn: 'root' }) -export class CreateProgramService { - createProgram(obj: string): string { - let response = ''; - $.ajax({ - url: 'http://localhost:7000/program/create', - type: 'POST', - async: false, - data: obj, - contentType: 'application/json', - success(data) { - response = data; - } +export class CreateProgramService { - }); - return response; + createProgram(obj: string) { + return this.http.post('http://localhost:7000/program/create', obj); } - constructor() { + constructor(private http: HttpClient) { } } diff --git a/client/src/app/fetch-kata-show-case.service.ts b/client/src/app/fetch-kata-show-case.service.ts index fc7d9aa..e92d827 100644 --- a/client/src/app/fetch-kata-show-case.service.ts +++ b/client/src/app/fetch-kata-show-case.service.ts @@ -1,14 +1,17 @@ -import { Injectable } from '@angular/core'; +import {Injectable} from '@angular/core'; import {KataShowCase} from './kata-displayer/kataShowCase'; -import {KATAS} from './kata-displayer/kataShowCaseMock'; +import * as $ from 'jquery'; +import {HttpClient} from '@angular/common/http'; @Injectable({ providedIn: 'root' }) export class FetchKataShowCaseService { - constructor() { } - getPrograms(program: number): KataShowCase[] { - return KATAS.filter(x => x.idProgram === program); + constructor(private http: HttpClient) { + } + + getKatasDetails(program: number) { + return this.http.get('http://localhost:7000/program/getkatas/details/' + program + ''); } } diff --git a/client/src/app/fetch-kata.service.ts b/client/src/app/fetch-kata.service.ts index 659d926..1ff94d5 100644 --- a/client/src/app/fetch-kata.service.ts +++ b/client/src/app/fetch-kata.service.ts @@ -1,18 +1,17 @@ import {Injectable} from '@angular/core'; +import {HttpClient} from '@angular/common/http'; -import {Kata} from './kata/kata'; -import {KATAS} from './kata/kataMock'; @Injectable({ providedIn: 'root' }) export class FetchKataService { - getKata(kataId: number): Kata[] { - return KATAS; + getKata(programID: number, kataID: number) { + return this.http.get('http://localhost:7000/program/getkata/' + programID + '/' + kataID + ''); } - constructor() { + constructor(private http: HttpClient) { } } diff --git a/client/src/app/fetch-program.service.ts b/client/src/app/fetch-program.service.ts index 72758ec..9e1a79b 100644 --- a/client/src/app/fetch-program.service.ts +++ b/client/src/app/fetch-program.service.ts @@ -1,30 +1,16 @@ import {Injectable} from '@angular/core'; -import {Program} from './program-displayer/program'; -import {PROGRAMS} from './program-displayer/programMock'; -import * as $ from 'jquery'; +import {HttpClient} from '@angular/common/http'; @Injectable({ providedIn: 'root' }) export class FetchProgramService { - getPrograms(): Program[] { - let response = ''; - - $.ajax({ - url: 'http://localhost:7000/program/getall', - type: 'get', - async: false, - success(data) { - response = data; - } - - }); - - const obj: Program[] = response as Program; - return obj; + getPrograms() { + return this.http.get('http://localhost:7000/program/getdetails'); } - constructor() { + + constructor(private http: HttpClient) { } } diff --git a/client/src/app/kata-create/kata-create.component.ts b/client/src/app/kata-create/kata-create.component.ts index 8937b4d..a4a7a04 100644 --- a/client/src/app/kata-create/kata-create.component.ts +++ b/client/src/app/kata-create/kata-create.component.ts @@ -5,7 +5,6 @@ import {ActivatedRoute, Router} from '@angular/router'; import {Location} from '@angular/common'; import {CreateKataService} from '../create-kata.service'; import {CompilationService} from '../compilation.service'; -import * as $ from 'jquery'; @Component({ selector: 'app-kata-create', @@ -64,37 +63,44 @@ export class KataCreateComponent implements OnInit { } publish(): void { + this.kateCreateService.publish(JSON.stringify({ + id: +new Date(), title: this.title, + language: this.language, canva: this.canva, cassert: this.assert, solution: this.solution, rules: this.rules, keepAssert: this.keepAssertForKata, nbAttempt: this.numberOfAttempt, - programID: this.programId - })); + programID: this.programId, + difficulty: 'Ceinture blanche' + })).subscribe(); this.router.navigate(['/kata-displayer/' + this.programId + '']); } try(): void { - const response = $.parseJSON(this.compilationService.compilationServer(JSON.stringify({ + let response; + + this.compilationService.compilationServer(JSON.stringify({ language: this.language, stream: this.solution, assert: this.assert - }))); - - - if (response.exit === 0) { - this.status = 0; - this.result = response.output + '\nTests passed'; - } else { - this.status = 1; - this.result = response.error; - } - - this.result += '\nExecuted in : ' + response.time + 'ms'; + })).subscribe((data: string) => { + console.log(data); + response = data; + if (response.exit === 0) { + this.status = 0; + this.result = response.output + '\nTests passed'; + } else { + this.status = 1; + this.result = response.error; + } + + this.result += '\nExecuted in : ' + response.time + 'ms'; + }); } ngOnInit() { diff --git a/client/src/app/kata-displayer/kata-displayer.component.html b/client/src/app/kata-displayer/kata-displayer.component.html index f51d8bd..c8b63d8 100644 --- a/client/src/app/kata-displayer/kata-displayer.component.html +++ b/client/src/app/kata-displayer/kata-displayer.component.html @@ -1,4 +1,4 @@ -<div class="container"> +<div class="container" *ngIf="katas"> <span class="title">{{programTitle}} <br> <span class="subtitle">{{programSensei}} <span class="language"> {{programLanguage}}</span> @@ -11,13 +11,14 @@ <div class="p-2"> <div class="card" style="width: 18rem;"> <div class="card-body"> - <h5 class="card-title"><a class="title" routerLink="/kata/{{kata.id}}">{{kata.title}}</a></h5> + <h5 class="card-title"><a class="title" + routerLink="/kata/{{programTitle}}/{{programSensei}}/{{idProgram}}/{{kata.id}}">{{kata.title}}</a></h5> <br/> <h6 class="card-subtitle mb-2 text-muted">{{kata.difficulty}} </h6> <span style="float: right;">{{kata.status}}</span> <br/> <br/> - <p class="card-text">{{kata.description}}</p> + <!--<p class="card-text">{{kata.description}}</p>--> </div> </div> </div> diff --git a/client/src/app/kata-displayer/kata-displayer.component.ts b/client/src/app/kata-displayer/kata-displayer.component.ts index c914061..8e20a10 100644 --- a/client/src/app/kata-displayer/kata-displayer.component.ts +++ b/client/src/app/kata-displayer/kata-displayer.component.ts @@ -16,6 +16,7 @@ export class KataDisplayerComponent implements OnInit { programTitle: string; programLanguage: string; programSensei: string; + constructor( private route: ActivatedRoute, private location: Location, @@ -28,7 +29,7 @@ export class KataDisplayerComponent implements OnInit { this.programSensei = this.route.snapshot.paramMap.get('sensei'); this.programLanguage = this.route.snapshot.paramMap.get('language'); this.programTitle = this.route.snapshot.paramMap.get('title'); - this.katas = this.fetchKataShowCaseService.getPrograms(this.idProgram); + this.fetchKataShowCaseService.getKatasDetails(this.idProgram).subscribe((data: KataShowCase[]) => this.katas = data); } ngOnInit() { diff --git a/client/src/app/kata-displayer/kataShowCase.ts b/client/src/app/kata-displayer/kataShowCase.ts index 3b7a3ee..01043af 100644 --- a/client/src/app/kata-displayer/kataShowCase.ts +++ b/client/src/app/kata-displayer/kataShowCase.ts @@ -1,9 +1,7 @@ -export class KataShowCase { - id: number; +export interface KataShowCase { title: string; difficulty: string; - idProgram: number; - description: string; + id: string; status: string; } diff --git a/client/src/app/kata-displayer/kataShowCaseMock.ts b/client/src/app/kata-displayer/kataShowCaseMock.ts index 7d8599c..d9827e4 100644 --- a/client/src/app/kata-displayer/kataShowCaseMock.ts +++ b/client/src/app/kata-displayer/kataShowCaseMock.ts @@ -1,4 +1,4 @@ -import {KataShowCase} from './kataShowCase'; +/*import {KataShowCase} from './kataShowCase'; export const KATAS: KataShowCase[] = [ { @@ -12,3 +12,4 @@ export const KATAS: KataShowCase[] = [ {id: 1, title: 'Fopen', difficulty: 'Ceinture Jaune', idProgram: 1, description: 'TOFILL', status: 'FAILED'}, {id: 2, title: 'Fwrite', difficulty: 'Ceinture Verte', idProgram: 1, description: 'TOFILL', status: 'RESOLVED'} ]; +*/ diff --git a/client/src/app/kata/kata.component.html b/client/src/app/kata/kata.component.html index 2963cce..bfb1775 100644 --- a/client/src/app/kata/kata.component.html +++ b/client/src/app/kata/kata.component.html @@ -1,26 +1,26 @@ -<div class="d-flex justify-content-center" style="margin-top:2%"> +<div *ngIf="kata" class="d-flex justify-content-center" style="margin-top:2%"> <div class="d-flex flex-column"> - <div class="p-2 title">{{kata.title}} <a routerLink="/kata-displayer/0/{{kata.title}}/{{kata.language}}/{{kata.sensei}}">- {{kata.programTitle}}</a> - <br><span class="subtitle">{{kata.sensei}} <span class="language"> {{kata.language}}</span></span></div> + <div class="p-2 title">{{kata.title}} <a routerLink="/kata-displayer/{{programID}}/{{kata.title}}/{{kata.language}}/{{programSensei}}">- {{programTitle}}</a> + <br><span class="subtitle">{{programSensei}} <span class="language"> {{kata.language}}</span></span></div> <div class="p-2 "><textarea disabled style="text-align: justify">{{kata.rules}}</textarea> <app-terminal-code style="margin-left: 20px;" [code]="kata.canva" [type]="kata.language" (new)="OnNewEvent($event)"></app-terminal-code> </div> <div class="p-2"> - <app-terminal-assert [code]="kata.assert" [type]="kata.language"></app-terminal-assert> + <app-terminal-assert [code]="kata.cassert" [type]="kata.language"></app-terminal-assert> <textarea [ngClass]="{'success':status === 0,'error':status === 1,'':status === 2}" style="white-space: pre-wrap;" disabled>{{result}}</textarea> </div> <div class="p-2"> - <button (click)="compile(kata.language,kata.canva,kata.assert)" class="code">TRY MY SOLUTION</button> - <button (click)="compile(kata.language,kata.canva,kata.assert)" style="margin-right: 10px" class="code">SURRENDER</button> + <button (click)="compile(kata.language,kata.canva,kata.cassert)" class="code">TRY MY SOLUTION</button> + <button style="margin-right: 10px" class="code">SURRENDER</button> </div> </div> </div> -<!--[(ngModel)]="result"--> + diff --git a/client/src/app/kata/kata.component.ts b/client/src/app/kata/kata.component.ts index fb7f8f0..706d298 100644 --- a/client/src/app/kata/kata.component.ts +++ b/client/src/app/kata/kata.component.ts @@ -17,6 +17,10 @@ export class KataComponent implements OnInit { idKata: number; status = 2; result = ''; + programID: number; + + programTitle: string; + programSensei: string; constructor( private route: ActivatedRoute, @@ -28,7 +32,13 @@ export class KataComponent implements OnInit { getKata(): void { this.idKata = +this.route.snapshot.paramMap.get('id'); - this.kata = this.fetchKataService.getKata(this.idKata)[0]; + this.programID = +this.route.snapshot.paramMap.get('prid'); + this.programSensei = this.route.snapshot.paramMap.get('sensei'); + this.programTitle = this.route.snapshot.paramMap.get('prgtitle'); + this.fetchKataService.getKata(this.programID, this.idKata).subscribe((data: Kata) => { + this.kata = data; + }); + } OnNewEvent(event: any): void { @@ -36,22 +46,25 @@ export class KataComponent implements OnInit { } compile(language: string, stream: string, assert: string): void { - const response = $.parseJSON(this.compilationService.compilationServer(JSON.stringify({ + let response; + + this.compilationService.compilationServer(JSON.stringify({ language: this.kata.language, stream: stream, assert: assert - }))); - - - if (response.exit === 0) { - this.status = 0; - this.result = response.output + '\nExercise passed'; - } else { - this.status = 1; - this.result = response.error; - } + })).subscribe((data: string) => { + console.log(data); + response = data; + if (response.exit === 0) { + this.status = 0; + this.result = response.output + '\nExercise passed'; + } else { + this.status = 1; + this.result = response.error; + } - this.result += '\nExecuted in : ' + response.time + 'ms'; + this.result += '\nExecuted in : ' + response.time + 'ms'; + }); } ngOnInit() { diff --git a/client/src/app/kata/kata.ts b/client/src/app/kata/kata.ts index 7466b9d..603cb6b 100644 --- a/client/src/app/kata/kata.ts +++ b/client/src/app/kata/kata.ts @@ -1,12 +1,13 @@ -export class Kata { - id: number; +export interface Kata { + id: string; title: string; - sensei: string; - programTitle: string; language: string; solution: string; canva: string; rules: string; - assert: string; - + cassert: string; + keepAssert: boolean; + nbAttempt: number; + programID: string; + difficulty: string; } diff --git a/client/src/app/kata/kataMock.ts b/client/src/app/kata/kataMock.ts index c027ffe..9e5cbbf 100644 --- a/client/src/app/kata/kataMock.ts +++ b/client/src/app/kata/kataMock.ts @@ -1,3 +1,4 @@ +/* import {Kata} from './kata'; // TODO un kata n'a pas besoin de programtitile, ca devrait être passé par la classe d'en dessus (idem pour sensei) @@ -17,3 +18,4 @@ export const KATAS: Kata[] = [{ 'assert_that(m.multiTwo([3])).is_equal_to([6])', solution: 'def multiTwo(n):\n' + ' return [i*2 for i in n]' }]; +*/ diff --git a/client/src/app/program-create/program-create.component.ts b/client/src/app/program-create/program-create.component.ts index d5e63a2..97468c2 100644 --- a/client/src/app/program-create/program-create.component.ts +++ b/client/src/app/program-create/program-create.component.ts @@ -24,26 +24,27 @@ export class ProgramCreateComponent implements OnInit { } createProgram(newkata: boolean): void { - console.log(this.programTags.split(',')); - this.programToKata = +this.createProgramService.createProgram(JSON.stringify({ - id: + new Date(), + this.createProgramService.createProgram(JSON.stringify({ + id: this.programToKata, sensei: 'Orestis Pileas Malaspinas', language: this.programLanguage, nbKata: 0, title: this.programTitle, description: this.programDescr, - tags: this.programTags.split(',') - })); - - if (newkata) { - this.router.navigate(['/kata_create/' + this.programToKata + '/' + this.programLanguage + '']); - } else { - this.router.navigate(['/']); - } + tags: this.programTags.split(','), + katas: [] + })).subscribe(() => { + if (newkata) { + this.router.navigate(['/kata_create/' + this.programToKata + '/' + this.programLanguage + '']); + } else { + this.router.navigate(['/']); + } + }); } ngOnInit() { + this.programToKata = +new Date(); } } diff --git a/client/src/app/program-displayer/program-displayer.component.html b/client/src/app/program-displayer/program-displayer.component.html index 63cd657..a7d45b1 100644 --- a/client/src/app/program-displayer/program-displayer.component.html +++ b/client/src/app/program-displayer/program-displayer.component.html @@ -1,13 +1,13 @@ -<div class="d-flex justify-content-center" style="margin-top:2%"> +<div class="d-flex justify-content-center" *ngIf="programs" style="margin-top:2%"> <div class="d-flex flex-column"> <div class="p-2" style="width:200px"></div> <div class="p-2">Liste de programme</div> <div class="p-2" > - <span *ngFor="let program of programs"> + <span *ngFor="let program of programs"> <div class="card" style="width: 18rem;"> <div class="card-body"> - <a routerLink="/kata-displayer/{{program.id}}/{{program.title}}/{{program.language}}/{{program.sensei}}"> + <a routerLink="/kata-displayer/{{program.programID}}/{{program.title}}/{{program.language}}/{{program.sensei}}"> <h5 class="card-title">{{program.title}}</h5></a> <h6 class="card-subtitle mb-2 text-muted"><a class="sensei" href="">{{program.sensei}} </a> <a href=""><span class="language">{{program.language}}</span></a></h6> diff --git a/client/src/app/program-displayer/program-displayer.component.ts b/client/src/app/program-displayer/program-displayer.component.ts index 63172e5..45517eb 100644 --- a/client/src/app/program-displayer/program-displayer.component.ts +++ b/client/src/app/program-displayer/program-displayer.component.ts @@ -16,7 +16,7 @@ export class ProgramDisplayerComponent implements OnInit { } getProgram(): void { - this.programs = this.fetchProgramService.getPrograms(); + this.fetchProgramService.getPrograms().subscribe((data: Program[]) => this.programs = data); } ngOnInit() { diff --git a/client/src/app/program-displayer/program.ts b/client/src/app/program-displayer/program.ts index 354edb0..228b41e 100644 --- a/client/src/app/program-displayer/program.ts +++ b/client/src/app/program-displayer/program.ts @@ -1,9 +1,9 @@ export interface Program { - id: string, - title: string; - language: string; - sensei: string; - nbKata: number; - description: string; - tags: string[]; + programID: string; + title: string; + language: string; + sensei: string; + nbKata: number; + description: string; + tags: string[]; } diff --git a/client/src/app/program-displayer/programMock.ts b/client/src/app/program-displayer/programMock.ts index e8161da..a505b6f 100644 --- a/client/src/app/program-displayer/programMock.ts +++ b/client/src/app/program-displayer/programMock.ts @@ -1,4 +1,4 @@ -import {Program} from './program'; +/*import {Program} from './program'; export const PROGRAMS: Program[] = [ { @@ -20,3 +20,4 @@ export const PROGRAMS: Program[] = [ } ]; +*/ diff --git a/client/src/app/terminal-code/terminal-code.component.html b/client/src/app/terminal-code/terminal-code.component.html index f860115..bb8fe61 100644 --- a/client/src/app/terminal-code/terminal-code.component.html +++ b/client/src/app/terminal-code/terminal-code.component.html @@ -1 +1 @@ -<ace-editor [readOnly]="false" [mode]="type" (textChanged)="onChange($event)" [autoUpdateContent]="true" [(text)]="code" [durationBeforeCallback]="1000" #editor></ace-editor> +<ace-editor [readOnly]="false" [mode]="type" (textChanged)="onChange($event)" [autoUpdateContent]="true" [(text)]="code" [durationBeforeCallback]="200" #editor></ace-editor> diff --git a/tests/serveur_compilation/server_rest/src/main/java/Kata.java b/tests/serveur_compilation/server_rest/src/main/java/Kata.java index 9cd0bc5..55f94dc 100644 --- a/tests/serveur_compilation/server_rest/src/main/java/Kata.java +++ b/tests/serveur_compilation/server_rest/src/main/java/Kata.java @@ -1,7 +1,7 @@ public class Kata { - private String title, canva, cassert, solution, rules; + private String id, title, canva, cassert, solution, rules,programID,difficulty,language; private boolean keepAssert; - private int nbAttempt,programID; + private int nbAttempt; public boolean isKeepAssert() { @@ -60,11 +60,35 @@ public class Kata { this.nbAttempt = nbAttempt; } - public int getProgramID() { + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getProgramID() { return programID; } - public void setProgramID(int programID) { + public void setProgramID(String programID) { this.programID = programID; } + + public String getDifficulty() { + return difficulty; + } + + public void setDifficulty(String difficulty) { + this.difficulty = difficulty; + } + + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } } diff --git a/tests/serveur_compilation/server_rest/src/main/java/KataShowCase.java b/tests/serveur_compilation/server_rest/src/main/java/KataShowCase.java new file mode 100644 index 0000000..345ea1e --- /dev/null +++ b/tests/serveur_compilation/server_rest/src/main/java/KataShowCase.java @@ -0,0 +1,42 @@ +public class KataShowCase { + private String title,difficulty,id,status; + + public KataShowCase(String title, String difficulty, String id, String status){ + this.difficulty = difficulty; + this.title = title; + this.id = id; + this.status = status; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDifficulty() { + return difficulty; + } + + public void setDifficulty(String difficulty) { + this.difficulty = difficulty; + } + + public String getId() { + return id; + } + + public void setId(String programID) { + this.id = programID; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/tests/serveur_compilation/server_rest/src/main/java/LiveDB.java b/tests/serveur_compilation/server_rest/src/main/java/LiveDB.java index 6d2608e..334fe38 100644 --- a/tests/serveur_compilation/server_rest/src/main/java/LiveDB.java +++ b/tests/serveur_compilation/server_rest/src/main/java/LiveDB.java @@ -1,31 +1,63 @@ import java.util.ArrayList; -public class LiveDB extends ProgramsDataBase{ +public class LiveDB extends ProgramsDataBase { - ArrayList<Program> programs; ArrayList<Kata> katas; + ArrayList<Program> programs; public LiveDB() { - programs = new ArrayList<>(); + this.programs = new ArrayList<>(); + this.katas = new ArrayList<>(); + } + + public void createProgram(Program prg) { + this.programs.add(prg); + } + public void createKata(Kata kata) { + for (Program p : this.programs) + if (p.getId().equals(kata.getProgramID())) { + p.setNbKata(p.getNbKata() + 1); + p.getKatas().add(kata); + break; + } } - public String createProgram(Program prg) { + public ArrayList<ProgramShowCase> getProgramsDetails() { + ArrayList<ProgramShowCase> p = new ArrayList<>(); - programs.add(prg); - return String.valueOf(programs.indexOf(prg)); + for (Program prg : this.programs) + p.add(new ProgramShowCase(prg.getTitle(), prg.getSensei(), prg.getLanguage(), prg.getDescription(), prg.getNbKata(), prg.getTags(), prg.getId())); + + return p; } - public void createKata(Kata kata) { - katas.add(kata); - //programs.get(kata.getProgramID()).setKata(); - // programs.get(kata.getProgramID()).getKata().add(kata); + public Kata getProgramKata(String programID, String kataID) { + ArrayList<Kata> ktemp = new ArrayList<>(); + Kata kata = new Kata(); + for (Program prg : this.programs) + if (prg.getId().equals(programID)) + ktemp = prg.getKatas(); + for(Kata k : ktemp) + if(k.getId().equals(kataID)) + kata = k; + return kata; } - public ArrayList<Program> getAllPrograms(){ - return programs; + public ArrayList<KataShowCase> getProgramKatasDetails(String programID) { + ArrayList<KataShowCase> ktsc = new ArrayList<>(); + ArrayList<Kata> kt = new ArrayList<>(); + for (Program prg : this.programs) + if (prg.getId().equals(programID)) { + kt = prg.getKatas(); + break; + } + + for (Kata k : kt) + ktsc.add(new KataShowCase(k.getTitle(), k.getDifficulty(), k.getId(), "TODO")); + return ktsc; } -} +} \ No newline at end of file diff --git a/tests/serveur_compilation/server_rest/src/main/java/Program.java b/tests/serveur_compilation/server_rest/src/main/java/Program.java index f165d3e..40ced19 100644 --- a/tests/serveur_compilation/server_rest/src/main/java/Program.java +++ b/tests/serveur_compilation/server_rest/src/main/java/Program.java @@ -4,6 +4,7 @@ public class Program { private String id,sensei,language,title,description; private String[] tags; private int nbKata; + private ArrayList<Kata> katas; public String getSensei() { return sensei; @@ -60,6 +61,14 @@ public class Program { public void setId(String id) { this.id = id; } + + public ArrayList<Kata> getKatas() { + return katas; + } + + public void setKatas(ArrayList<Kata> katas) { + this.katas = katas; + } /* public ArrayList<Kata> getKata() { return kata; diff --git a/tests/serveur_compilation/server_rest/src/main/java/ProgramShowCase.java b/tests/serveur_compilation/server_rest/src/main/java/ProgramShowCase.java new file mode 100644 index 0000000..5f1974c --- /dev/null +++ b/tests/serveur_compilation/server_rest/src/main/java/ProgramShowCase.java @@ -0,0 +1,71 @@ +public class ProgramShowCase { + private String title,sensei,language,description,programID; + private int nbKata; + private String[] tags; + + public ProgramShowCase(String title, String sensei, String language, String description, int nbKata, String[] tags, String programID){ + this.title = title; + this.sensei = sensei; + this.language = language; + this.description = description; + this.nbKata = nbKata; + this.tags = tags; + this.programID = programID; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getSensei() { + return sensei; + } + + public void setSensei(String sensei) { + this.sensei = sensei; + } + + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public int getNbKata() { + return nbKata; + } + + public void setNbKata(int nbKata) { + this.nbKata = nbKata; + } + + public String[] getTags() { + return tags; + } + + public void setTags(String[] tags) { + this.tags = tags; + } + + public String getProgramID() { + return programID; + } + + public void setProgramID(String programID) { + this.programID = programID; + } +} diff --git a/tests/serveur_compilation/server_rest/src/main/java/ProgramsDataBase.java b/tests/serveur_compilation/server_rest/src/main/java/ProgramsDataBase.java index 942460a..fdd800a 100644 --- a/tests/serveur_compilation/server_rest/src/main/java/ProgramsDataBase.java +++ b/tests/serveur_compilation/server_rest/src/main/java/ProgramsDataBase.java @@ -1,7 +1,9 @@ import java.util.ArrayList; public abstract class ProgramsDataBase { - public abstract String createProgram(Program prg); + public abstract void createProgram(Program prg); public abstract void createKata(Kata kata); - public abstract ArrayList<Program> getAllPrograms(); + public abstract ArrayList<ProgramShowCase> getProgramsDetails(); + public abstract Kata getProgramKata(String programID, String kataID); + public abstract ArrayList<KataShowCase> getProgramKatasDetails(String programID); } diff --git a/tests/serveur_compilation/server_rest/src/main/java/app.java b/tests/serveur_compilation/server_rest/src/main/java/app.java index 9fc5f03..7e406b8 100644 --- a/tests/serveur_compilation/server_rest/src/main/java/app.java +++ b/tests/serveur_compilation/server_rest/src/main/java/app.java @@ -57,7 +57,7 @@ public class app { app.post("/program/create", ctx -> { Program prg = objectMapper.readValue(ctx.body(), Program.class); - ctx.result(db.createProgram(prg)); + db.createProgram(prg); }); app.post("/kata/create", ctx -> { @@ -65,8 +65,16 @@ public class app { db.createKata(kt); }); - app.get("/program/getall", ctx -> { - ctx.json(db.getAllPrograms()); + app.get("/program/getdetails", ctx -> { + ctx.json(db.getProgramsDetails()); + }); + + app.get("/program/getkatas/details/:id", ctx -> { + ctx.json(db.getProgramKatasDetails(ctx.pathParam("id"))); + }); + + app.get("/program/getkata/:prid/:id", ctx -> { + ctx.json(db.getProgramKata(ctx.pathParam("prid"),ctx.pathParam("id"))); }); } diff --git a/tests/serveur_compilation/server_rest/target/classes/Kata.class b/tests/serveur_compilation/server_rest/target/classes/Kata.class index 24051da0d093d147439b77806979affed7719169..f25c79bcda09dd0d6749bcb29e8197d9ff1f8e99 100644 GIT binary patch literal 2442 zcmX^0Z`VEs1_l#`04@eT1}9DiUIu3n;Q}IDL4+HKa0d|{Ai@(wc!3CS5a9zNeAyZN z*ctp88JIFt7#W0ovJ%S@^>Y&Q()EK&iZb)ktr;0uOEODxQW+UolN0mG5*ZoTlM{=J zQ;SL%890jbb4p7x^Ya)PSc^(?Qi~ZGI17sM(~A;wJzW?XxKc9H(lV1vb4n^188|?O zmL{gBGBR*wr=}J-Ld{@|Vr1aVOL8nJNzE-NVPs(RWMp8o$;`_vv14Rl*3b-NWMFa5 zPf2BD;P=VQOZ6+wO-d~aNlXH{NXREYIWZ?Ju_zP7hYGTkWMmdIGO+o0Czd2yGcxdG z7JDPv$E=|l#mK;0oLYh`%AyekvWX)-wIl@MTM-RSY=Oa13|AqlfvEsyh%+RpK&qik zuJqIrXIQ{-6(e!D(^E@=;Q`5AjLZW$C<qd=AhV!Mp7hibKSYo*YiN2hGVm0m2(oB+ zf*iw|o?7CW!pOi{452|<0}xRJ(uBn2O;0UxL5eg`Fd_3nPW4I5ONYcG$f*b(S8#r5 zQF5wVCMae&L4mIaN=!TqvJ7%O43Z2|JPd*i0z3>tAVL^Kh=2%D5FyPV!^6N2Vu^tW zaS$QFAi&7L0y2k@K>%bDBw6|=Wu+#UFeozcGVn1lFmN+4fiyBOFff6P2h&0f0$^Gg zN{c{gQ7A12rNyDN1eBI!kOJ$IW{_cEU=U|u1Ua37kwKn;fkB^vk%5tcfq_+PI|JiJ zurdV(1_m~;AR~h!0|NsOn9a(d#GuT;z`)3$!k~(wc?$#68Z^xuST(CLs6#c|F)%SO zfvnP!-pas)u$l`j%EQ3Qzza4(49sVPS`Ts>$Uh)gYcOa+%|iHM3j^~8G=~U)jY0Q? z7K1iaGr}R-TN#+q9U{WO${-3h0n;IZ3<BWb)4}Qx7IcS5fQ><Sh%R=Au%J6chJlqq z7Hk5hLqI756e4<99m0z45CyO?=nm1x?hsaVho~^HGN^)0z;p;GX@VSLfYl*v=nl~U z8-wl;L+lP=LwAS{11p0r*aS?6fbs^&Ax2mo!jA3`1F$jZ4l%~=5O#Ejm@u$1n1W5f zbO<POf*fMPU<yrd$cdE$J=a)(jX`&a8G|`gGa|7{Z)M;>cZdxGD}ycA1Wbp3azDr+ z7Fa`s6Fo#6z{a3E#1eamaH2cJg@Kj96>I{gL-?V&#tN%LxX>Nq0X7ERA=cO(!iDY- z9|l$iU$6<74gr;ypb)Xa>JV;phXjC)L3fBPc874IJ0ygGl_3;t0;WSi1vbbbc32(4 ngYJ+BurcTkvB&NZ9(0GqFt9Sjf=$452&l#YIm7{6ggOEME@Txs literal 1872 zcmX^0Z`VEs1_l!bM=l0#1~X0uE(UWDVF4m6L4*~Eum%w}Ai@?z*s(L%vokm_GO(6p zmgJ-|G6?x(C6*=X=OpH(>j#$<W#*+@GcvFyC+3wUGBU6yCl(i{7L_nEa1`g~l$K=X z=P@#{7M13t7Bez%Wv8YVI6~zaqZk=D^O77(N>XzRN*Ea!JsBA|3ySj7ixP7^T^JeI zY%=pQOY9gKm^C!R7#Ucc^HWk88TfrN^HTjvbCXhwLK2f8&dE<s%n3^@$^`MDf-EH& znZ=9@Y(CzJC5hII3_O{|-bi*cYiLF>GVm6smLQ9=XheZ*;z&;|34wT3L_-ssXE}=D zDnvCf6~GK}h6D*nHI&Jfo?7Az3m~pyBo23aYDq9Wz_^Q%c_0S`K|&B@7L>`8o?7CE z2tH;FO;1J!o?;Y177b63V?as+5Fravgv8|v&Mz%WPIb!!g(fE`!1O>7%)=ngAi={R z#30PWz{9}H!@vh3_(6mKh!6x3A`GHD3}OtTj0`Lwjf@NeAgz$J;h&V1nq0!5$N)-h z3=A9$OdxX@7#Ns9MuBO523{~N0Hp<?v=D<ZSX_ib6ikbOX+Z`?kee7786+7P81xw! z85kKD7+AHoGcaxhE0bbiU|<6aGBQXrFfj0d*{lpQ46+Oi42%qN4DuM7w=giRLDS5E zRkH$vB2=>-0}}%i$SN)Atqe>EtGU3UJPfQ1ykHZ=z<f5S^&qE#`~`Bg5`!|-EQBw% zFfeaGbBF-g7<6B#FsMQ`BOIc=m4O-EAtDT{45DBYFdf3fzzYsOHLMO{L3fA**cfz& zsAG2s3%WyO7+4u(!6sljgb(Tv4Xh4fMR$k-*cfz&XkvE=E4o8e7+4up!6slj1e6p( zQKN;`A#CUl(EuBR?htM44q-!ghz<iQgD%(vOoxE-0>~jcSRKNS?hpg8G3XA_#qJPx zbcdKQurio}O~7;rC^Lc_q6f}us9A0c0|$Dpu>c!`?hpe8LyW{Ky_JCj-61v%tPHkb z6EGbDDg{6eF~aH)PIQMjfQ><Sh%t7DaH2cJg@Kj96>I{gLqNq4$RQ@+d};~+UTD}~ diff --git a/tests/serveur_compilation/server_rest/target/classes/KataShowCase.class b/tests/serveur_compilation/server_rest/target/classes/KataShowCase.class new file mode 100644 index 0000000000000000000000000000000000000000..0cd30bb503988e17695e5101e37861fec13e46c1 GIT binary patch literal 1249 zcmX^0Z`VEs1_l!bO)ds@21QN=HU=dSp$sBaK!hqggBm-7IwJ#XNoGk-DkFoCPgY`C zqJB<dUb=p8Nl|8Ax-}yMS4w7DT4r)-PDv#r15;)SBLiD;Nn%N9F(U(;O=ezZi5(+@ zw+5z8@<cSl7#Ucc^HWk88TfrN^HTjvbCXhwLK2f8?#oY3%n3^@$^`MDf-EH&nZ=9@ zd_LZZC5gcq`Q^@u#i`be3>@jHB_R-hiD+nIx`vT~qZqD26pIHyPT@^YEpb8eKW{NA zpEW(T#50AFfwdSya~2fkrxzvWdb%(&aHgl01VclLvlzkV3eGPrN=|jl1bImi+0}ZW z;OAlBWzgVZ;9}t9Vc-A}+#rI7fs>Je2U#&Ag8)c5B)0sMvQm>v7#Wx~G{YDa8Q2)u z85kH?7??mNFfcGMfs6yw+zgyxng>jCGB7gmGVn1lGVn7nFf=eQF|aZ)Fi2@_XJFLQ z*~-AArM;DbSxa{-1B;d<%T@-~jbOb3AT<nZU>jH%SQ$WRiI0JuL70JqL6U)!K@gnm zz$P&WF$gn&fE3szj9{Hy44e#1U>3+V%wQJCJuD223?dAoP}k@)FfxGDvubT&VBP?? zm<=q*1Ga<*%w~mJ!pI=TAP&`R$G`-(f(`5ggtNK8q5=%841!=2#K3$us0j=VY*1%1 zGDu)`2ot(PM8L+NJ46z@LzvJVBEi7QAPF`B(;=Wx0)>DSR)?^lJ46O-47x+4u{(qX z-60ALtPF}^6EGbj!vIPqj100^9m0z45EZa7=nj#??hvFD1&JCB237`5unCwB0i_X8 Kh{%Hzg8~3xDXq%@ literal 0 HcmV?d00001 diff --git a/tests/serveur_compilation/server_rest/target/classes/LiveDB.class b/tests/serveur_compilation/server_rest/target/classes/LiveDB.class index 643b28cb936fca7c136dc0d74110d0826e0f7fd4..e7abcb7ca81754ed034a5c3e5f1f504b1f140e3f 100644 GIT binary patch literal 3026 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 IaCzkm0MVP9S^xk5 literal 1043 zcmX^0Z`VEs1_l!bGcE=$232+jH7*7w231Z5P6l-lO9Mn`axrKzXoJLb*co)$8T1$# zI0}mL(~A;wiy0Y2eX<hE67@?<GIR7Di;5B}eKLzntQi?NgEQ0f5=%;pQW+T(u&J@} z34j=4ZD-BMz?z*{l32{hAd6k8cVbB*SRI>9W?p8A9U}v?hGrNe1B-KhN-84*zfWdf zs$XetQfg61Vp2{jBZH7nesW??SYlBohz}KHDaptzW@O;-@yRSpb#bz0WZ+FMN=+<D zg}Q{1K~@9qDouz>auV~>^@B@_GV{`{85x)hiqaVwIN^#I8Mq)OfE>ukz^UN_VpxNn z2J#Uj0~<tyk%2EgwZt(e2WnL@BZIgG)C!ESQ^GET8e&|*`K3k4scxAd?{Y(Yqz8%% z9tJ@MAw~va5F0ICco?`Dcz77}84P$B3>l2r8H{-tOc+dg82A}@Ku!e*3nPO7%#kjM zC5cXn#i@)8%!w%}j0~b0NP*&?l$DxXVyzj)$iSYNmy%lHpN2z)CnJLZ*fmIj$;iN7 zmY7qT3en^V4GJU$)(naaoD5tH3=B*R3?O$iFf#Chd3+2EAP2+w0t_q+j37@lFfs@; zFfceVFf%YRFfa&cZD(NA+ReZext)P|D+9|$ux=3s1_nL`W(EcZP6ieRE(U%EUItMH z1_mC89tJT6aRvqkMg|E6NvL_g3`}4*h-z(NVA0;jz#0x^u<c-A-vBohlvfxS1Q|FP zgun)hK{P=PWMB|wkYbQ#U}RuqkYSL88tnu%noDa70|(e>gd-v5i7{|8NFtfX1vih2 yL5@KlY@PyxA_EiH>-u0m0|P6_g$Spyf&C@}HU{EPR;V$M5LIGeWKafsL<In2k<G*a diff --git a/tests/serveur_compilation/server_rest/target/classes/Program.class b/tests/serveur_compilation/server_rest/target/classes/Program.class index 076c738e8da22af7eb12c4d2246a1350e57e6e69..28a6aa780e25735f56a5623fa57bcb5ccfcefe45 100644 GIT binary patch literal 2160 zcmX^0Z`VEs1_l!bPc8;-20Km$E(UuL;Q%5WL4*^Ca0U@BAi@<yxUn<1vom-wGB9PP zFfs`FWF?j*>gOcprRxWm6lLb6TQf4S6{qGEr)DxTaDc>16Vp=}8CXj)OL9^f8MsqY zi<65o3raHc^B5UeN)pqH85xA5u^N+?<egZO$jHFx$;iN(omi4s%*Y@LQCV7&nWOJm zRFqihlUZD1&B(wRoSB}NSW;S)%E%y#O^uBY$S`X=ko#;h^D;~97#Wx~G{YDfSe)}y zQW+WeeKPY>{YrC_Qj0<olR$12^2tw5%n3^@$^`MDf-EH&nZ=9@oIU|X`RPT8xgfjK zQ%i!OUKY{NgxC)9IwD9oixEmhH853x+`*lmTH=$KmktRq?qXyfM|x^W2qXkKis4Mo z^wbhRXdp3bXnHa-fb4;ZuxNOKjO9yDEpb5(biQIV0d|n#;D`{_(8L-Q>>xYAD#SFf zC;(Z*nx0zXnZn4xS`48<E(V2oF(ZRGEKD$BO&+@pQe1(23pGXp8g6K&fGih7jj76l zRA_7|VATURAEcKnIKQ+gIn^x_6y-e7Sk(h1YaRwE25BA!J_cSM27VAB03t*fM0pql zK`bE#VIBq^5KD|foRNVYs+W;L0Hhm|Dg2YNQj<#<6d6EyjDdlJfeEC8fq{VuWG<NI zXW#|X0#I5IN((UvgT+M{M8UKegE#{tg9Ml@$sowU2yz|+BZCYB1A{&TBLgD?0|Tqp zb_T|cU?s8)3=C{wL1qRy1_lNmFq@S@o<V_ufq{`hkwFPV^A-lC4QQIVuxeIjP=RW; zV_;%n0$HV{y_JCpVKo<6l#hXxfgfyw7?{rnwI1X&J_cT}t5vZ&gc;o-LSSRieW8Zk zA<XCw5o2Iw5C@xp=@3u^fPzmQt3z1O9U=ub2HhbV*d4-x?hrW!P!xb71k)j)6aaFF zCW96<bP@5og@JVqTGS|Eb%-{D4pcKDYNWR^u%bIeje(Ux9c%)oLqJIm<Pcq~A;N|p zB3fW$&_hHIdx)^1J4BCxl|dhD0;WSic>&}QeFg)lr;tO09o->DU}Ml7V#r_w)r<%c z?X3*#=ngSsU}Z1|n}F#MP-X-<#29OcaG*QH3TzCzLrk!T2nV`D>=;-X?7=2rI)n$B zYfKr;7?{xV{uTyKbcZ;BjX`w?qzEx*U}Ughu!I^CfSipvK@MVO0F@w+Z0yFs%HR$* e3DZH4V#x|#!mu%jF-XD-Dr*Kt1{-j?wFLl>7c5c$ literal 1718 zcmX^0Z`VEs1_l!b8!iSe1|v=eP6lHTVFDsdL4+BIFb5G9Ai|QJ!HS*1nvsDiGlh{s z$R{hYEKxrvF)v*|xTGjEFWs7vfvq?-uQ)Z6k%0pwUYeMm%E-W4l39|I%E-W-l3JWx zlvz-cnV-kVz*3T!Ud+fK9F5hOyd>|$l0-%ZMo&ftHk-`6%o00B24)S-Fh&Lz=lqmZ zMh1SL%)C^;(%hufqL9QSkoiJB`N@enVTnbVAU;%(r6eP>n2~|gC!i=ly(lr)nvsDs zJ+&kl>P!(0O>Fja79*61YGA4Wxq~}BwZtbeFCF4Z?qXyfM|x^W2*lSM#c(FbVn3+I zm^Cy#85uzKz(iOyJVD0trKgs-AO{p*F`587$Z&AriE3zK4L){|onRGW8dwy7tYJ-0 zE%8iYWMD0Z&|Ja!rA5i9ZkeEv<bej39w>%+7(^Mwco=vYcz782Km<RC5M~hJVGsbZ z1Q~>Q7`PdD7#Y~1+87xGKpG)Q!#^o2HMxXAk%5zei-CcGoq-9Yn1O+T31lRg=40Ri z)BI3c07?ro2!X|g8AKQu82A|&K`vonWDsXyV9;k^WME`qU|`kS&cL`4tW1J|fq@My z$jl(gz`(!*X0tL#F-S8oFfcO6FvwzP-on7N0ZlU}R?Tt@@=(oo3``76Agi>rw=ysx ztmXoX@-nb8@PSPb1M}IS)`OhJ3w9DCg928EFrzy}5Nr&(FBGvmgc;o-q71AIVqg<6 z9Rdn)Q1B^XbqEW(LnOh*pgTkvyF*ye9U{xX${+_e0n;I%7za5-g+Ub>x`=q)!oa!) zEov0O#-KYyjX@o%84)$oTNzl<9iqy>%Af`|0n;I%BnEPb2G$T^Lk|&6urcTk(Zn7i zZ0HWrWng8{1Dk;95K!6&IYf&=8|o?K5Mf7mh#}Y*bcg6L=t4CkLPUEj13S7yOc_`i z%)lmKIs}yYKn~Hv8X_F%4zUCqgYFQ0>><K|?hsoBRt7t;378JyhUOXraAGh708vlT Ab^rhX diff --git a/tests/serveur_compilation/server_rest/target/classes/ProgramShowCase.class b/tests/serveur_compilation/server_rest/target/classes/ProgramShowCase.class new file mode 100644 index 0000000000000000000000000000000000000000..787ad292fa0c3d49f6f3f9376aa49f0cc0621a24 GIT binary patch literal 2020 zcmX^0Z`VEs1_l!bTP_AJ1|v=eP6lHTVFDsdL4+BIFb5G9Ai|QJ!HS*1nvsFEB(o$Z zm61WnCo8cmQ9ma!FI_*lq$o2l-I|estvEHWI5m@zfdeF7nwXx-$iSVFTAW;zSx}Oh zpU23+Sx}UpUX+;Y>B7jsmY3w6Sdz%d!05@yz*3T!Ud+fK9F5gno6Nk-5<5nQLJdr5 z@<cqbScGYkW*8#_i*tTTDkB5GPi9`KUukYqYEejH5+n%nlM{2o5{oiHe5fExNk(Qd zBZHt%0K}ug8TsYTiN&ebj0_y<sU;zh&=b+n#I%f&fuk6%LKKTnL9XFUPb~?ChB9X{ zg3X<tTH=$Kmktf|Vq_j)dTNOaaxCx_qX~da^@GL+vxcT8BLm26m<Wr8C&+4cko&>0 zB&wl_CHNQ_*g@_Gs}R$`q5xzFPkL$zG-yC+fTtLR%N3koT9lmXmI(@95vV#?5bA+a z91nvigAES@Hv<n3122f+0}=cnLXbg-he4P@goi<ZfrpWSA5A+Wg8;|?NRstW%1TWx zVPs&|&<tZxWZ-1rVqjokXJ7&u%)r3F1Tq^;^D*#%X?`dz0Hp;Pguvp$3?d8+4Ezj? z45AET42%ro3=9l=7?>D17#J9Iw6-%aYH4p}VA9gr%D}9pyOn`OOOj<P1FM!O>sAIf zElIYm4D4Ex>{}T)HiAu)U|?WSW8h?9U|?flVPI$AWZ+=nW8h>EX5eCwWZ-6yXW(H_ zW#DDdX5eFxWME(jg4n|##URZ90y<##GlJ{}`+y0|0{MX%%mVp>1<V4upB2mk`G5_~ z0{M-dfssLmK^E#0eFjDbkZG)1TNs!&z@5kj78C?Kfd|ZHg*t(eL5@Kls@aZ#i2>vQ zHgFIiJjewW6=h&$5CfYa2IjLtO#peFn*n4hBZC4~hcKf%L=tQaNDBi4!Xb*-9m0(6 z5LpIR205?^m=58EIz$PpLs-xqq6jty-66`@9m0a{5LE_N1~sq=m<|C&At)+TusVbl z-65J_W6&L<irpcs=nm0kU}ew)n}F#MPznM$M2$fm8qLUQgl!F48ZiVLgYFOw22H4D zL>iIa%D{&15K{(L1~ae;m<|CYV30$!7_^~gAv=T}Jwz<Q#-KYyhd~#r8Q~D^tqknw z4zXomWv~OAfawrW{sB2e4{OwLpgY77Yz(?X^sz?`Qn3KZHLeV-3~pc(FdYKQz95Gf IfaAar05Z=RGXMYp literal 0 HcmV?d00001 diff --git a/tests/serveur_compilation/server_rest/target/classes/ProgramsDataBase.class b/tests/serveur_compilation/server_rest/target/classes/ProgramsDataBase.class index 5cf70dcf91262632cd00de8714059b7414cfebc6..bcfdd67e6dde0c9b6d912f6e36b8665e556f522d 100644 GIT binary patch delta 324 zcmcb{yoy!y)W2Q(7#J8#7-YE^m>Hzl8Kl`6WG0Gc^YUo;1Qg|`7bWIeYlcmnCoLwF zo>~GGDRxOMNzBYCW@Heb_)$#2nvsDsI5Ryjv81#pm61Vf;z#-V;Eeoo=fvVvYddR3 z20nyV@5GWsMg|=XpRB~PME#t^ymbBGlA_GKbZblzO&^eIYeoh!RQ(9+HL;kZ2{LHn zMPYMGT#||Ur6rj;`i@0KiIqN?#U(aidtfe}EWjAY$Tm5jF;<C%kwKV2gn@yDkwKI} WjDe9skb!}Li9wu!kwF5?k^}%=qhCh= delta 117 zcmZ3*dW~81)W2Q(7#J8#7$mqDm>ERb8N}Eb#3zbo%gJi^1Qg|`7bWIeYx-m*mL=-v zB<7{-2bUCO=A~Ot?3L!@OHVCv%*lbOnz&1oQEB2nF-{wpzR718;}}^cYcs`iF)%U+ LGcYhPF^B*F>r5dc diff --git a/tests/serveur_compilation/server_rest/target/classes/app.class b/tests/serveur_compilation/server_rest/target/classes/app.class index d71aef4b1c2e5d40604a286ab5ad413696e90e86..b6aa526cb48f6549b6af307f8969b230ef95c720 100644 GIT binary patch delta 2495 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 delta 1950 zcmbQDepIRc)W2Q(7#J8#7~XR+*fJDwF%&Wsfrw%dQNqDcD#XCRPzB;tb1>8hF)%Vz zaWK>gF))GX1|bG!h-4EdgAGG77efm}D;Gl!LmP<O4q|n%Gjwt>STS^g<ht1zdO&n9 zNT!dSp`W9kVFDL}6vIRiF^QdFG6%yHE(SS<sUTt+JHvD?1|^0W><lwO{8?NKDh#th z#2gSYmz`lA7lS6le0GKfTnySEWed3&bV2kYc80|u9ZR?v3>cPjG3YZa0};zX#9VfU z6<iEvAZ07L7z8aC3fLJ|fm~R?&fv?=uzIrzBOfEHF(ZSx#$*Lfk;&0adW>r}uVR|a z$hda09gC`{6N585!#W;@^$Z($7&d~4O$?hSSFp&{ZxLV!;Adml%EPdYVLK1Q4u+kK z4E*{9MfvGPiMjg8MX8A;sr+mVyBHaG^s^I75)neXkrk$=mL%rn@Ut=O;bGXzu#<<u zj=`RtVIL2}eue`)3<ntw@h~_rIPx$YW;nvgz~Y@)lE}kwl;IeU1jBKL6O0V(0T2s$ z7)~;r;$b+=aAtB3t0spN!&x4Na}4Jv?`2ivz5wD}WVpo0AURoqS(259;WC5sWF9tI zgDVVIc^I4+uJJHj2dTNi;LOM%oRwIXsGpOVm#!a@QIubvn3R*s!*G+~79)e~<OF8f z$z^PDLbn<2fHd9(5%+i)?lT-&{F;rC;{n4%E(RNhN0UFZX9?RdJO*)|fQYAz49w}N zC6m{4NOC#m<Uk!gxtCLJGApOy<W-!#a<UpeP+@CLAA}o%ONuh{(yb?N;WlArWDuPk zz$vmhnk$k~hMnOV55seY*E|f-3;{e05g;NIMEElVOy=V;VPbeY*@fo?6T`d7db~dM zHVn253=B*RT%Z7EU|`?^1uFvs13LpFgA;=@10#bA0|SFT10w??0|NuA)^-NQjbII~ z3=9lxU_nj>HwFd<9x$7g!JWZ_fq{XO!IQxYs=1AUnSqIcfx&JE1JgDJW<lwQZ44|v z+Cr?m7}zHN<khN27%0WS#=yWJz`)BO#30FF#h}Vy&tS;l!eGnb0k%X8Vi1EjgAW4( z122OigD-<01ET;JgFiz60~6S-Rt!vFr|@WPV&LD#Ah3-=FdSh67uW<>25ts7u!%ej zjP+pG2QmaPFfar&Ffgz%FfxP)a503!jSPYMKw=Yvkk&Q^VIh%i459}ZM0_?e@M~{l z5JMQx$H2_Mz~I0jz~IOr&fo;L0^(>128ay;3>*w$4B-rnaJ%Y3mPNoVi-cMx3$sid zY?-(Z$UoZK7$mkaNFsR%Vxu*K0D}#K41+C_jk0hXc^M)ZqL6F^Sr`qokg2|!ft7)k zfq`KSqt9*zsYoH|?F=%$I@=gz4=~92XbZ`2V^Gj$*~Xx_oPh%*th}2+B~p7EgX(q$ zHD4W2cx+=(*V)FPv7ABF4?=TWvFJ*&Y-7;U-M^ec0;EZ2IfDR*)<YPgAGw>sAX0l< zJ%izP2BYl^#vpkUKP_F52X(eFm_p4nUCw}F9@r7)8yPqmm>A?4lo*s4j2WyMoES72 zoEh91ycjeY)EPn;!Wp!|bUcGDm`-O<VyI{6VwlLF$uNmw8pBKmO@<tX#SF_BSj`xi z8C)lq2-eqw5^@0pHv<oYFhdMOECUmRG6M@k978+<6N52>B0~a0A_Egc1XwJIfr%jj z%t~fpV#olqK<Zi;*ceh6QW=;T>KRlR(iqYim>8CWWi!BOZw)kBm>5<uWHMwiFfwE_ zFfi0J2>fTLS7KmdXUJh^kYiwEXHa7K&mhIX3=v>wPyvZ){%2rkV1Wy<GiZWE*?%%H zI<YfoyR$Rsx<hoTAav@3)u8CqN7HG>0!ohckhIUh!H^5j`i5XfGcbtmX0V9d&S1Hj zfqyrHRpfRC>&*;8poGuJ04fR~`HGu?i-CuMnIR8cMC3EP0+%R^3@;eoFuY`tWGG`` kV9;V<VJK%{W~gAOWT=3$Y9TBEh6;vy2$P|Lp^>2i0ROOLV*mgE diff --git a/tests/serveur_compilation/serveur_compilation/share_docker_file/__pycache__/sample.cpython-34.pyc b/tests/serveur_compilation/serveur_compilation/share_docker_file/__pycache__/sample.cpython-34.pyc index d8b4331ea84fc0443059b6c9bca23135615f2cf4..dff2bd8c9b20431260cff819dc0a15783cef5ded 100644 GIT binary patch delta 15 WcmYdH<b21&%cVQ<Vhqzn&IkY|KLor0 delta 15 WcmYdH<b21&%XMGpVhrO%&IkZ02n7fL diff --git a/tests/serveur_compilation/serveur_compilation/src/main/java/DockerCompilation.java b/tests/serveur_compilation/serveur_compilation/src/main/java/DockerCompilation.java index 6ad789e..cce482e 100644 --- a/tests/serveur_compilation/serveur_compilation/src/main/java/DockerCompilation.java +++ b/tests/serveur_compilation/serveur_compilation/src/main/java/DockerCompilation.java @@ -13,14 +13,12 @@ public class DockerCompilation { case "python": filename = "share_docker_file/sample.py"; filename_test = "share_docker_file/assert.py"; - // cmd = "python3 " + filename_test; cmd = "docker run --rm --mount type=bind,source=/Users/freak/Desktop/dojo-hepia/tests/serveur_compilation/serveur_compilation/share_docker_file,dst=/env/ hey:1.1 python3 assert.py"; break; case "java": filename = "share_docker_file/kata.java"; filename_test = "share_docker_file/Main.java"; cmd = "docker run --rm --mount type=bind,source=/Users/freak/Desktop/dojo-hepia/tests/serveur_compilation/serveur_compilation/share_docker_file,dst=/env/ java:4.0 ./java_test.sh"; - //cmd = "java " + filename_test; break; } @@ -91,15 +89,6 @@ public class DockerCompilation { file = new File(filename_test); file.delete(); - switch (input.get("language").toString()){ - case "java": - file = new File("share_docker_file/Main.class"); - file.delete(); - file = new File("share_docker_file/kata.class"); - file.delete(); - break; - } - return json; } } diff --git a/tests/serveur_compilation/serveur_compilation/target/classes/DockerCompilation.class b/tests/serveur_compilation/serveur_compilation/target/classes/DockerCompilation.class index 994cf1cca332b9d916993ed58361757ca7d99761..6f7d0b292ea90673daa6db85c46c39b053bcc3a0 100644 GIT binary patch delta 1859 zcmZ3bwL_!+)W2Q(7#J8#7;bYhI5HG+Fcfhx6mu|?a4}>tl!AoHxEQh-$~hP+Ky)Ps zLlp-@H3vft2SY6fLmdZ0JqJSrJ3}J}LlYN+AVV_;Lkoy*1rcrR4DDPD;tU<^44qsI zk_=t!4BcD|(hOZ33_V;7y$pR^4E^;C6Sx@q876Wu<S<NPXPC^zpafDkg^NK2L{DXB zm<E!X&c&e4FoTOhjbSE;n8nU8n~On*p%6sO;b52xqRT)sZ6MY2*cs+?F&Kk<vjD_j z$i=XTVKGQ#2?s+Q2SYpu!%{AWWem&N83b2wG1xM!1QDy)8CJ71tl2EexQmH>Ejz<H zc82wnuQ9hXJ25y<PGHfI-oUVthhY=LW*&wu3|ko)*a|93GV=3y7`8EN-@KgVH>05w z!wyCUw&Iea)WlpKhMf$%co=pwI5RQ`XC;;;>gOcprR#@e6y=vECgr5^FzjL2JNYu3 z67xO==gB|Vj3oB+FdSew$j)$xhv6{85gvx4499pFjx%hX?8KfYdV=934}%lKDG+g* zhv5vvW=00_$#UG{d^`+i8O|{>FmmxQoM$*W`4zjY#RZ0~><kxq7%nkf=3%(PaFvmP zr6e;qm7U=lNbEWz0}t3infdx|nIM-qG2Gx`xXEy9b1lbwW?=^gM+OjJVqj!&VsK_) zWN?|R&m(5+%D}+D#=r<B-53}cc))B{26qMz1_lO322Tbr1||j<1_t(D46F<S3=B+- zn=5$gm?p>ZchtKwFfj5lI5RLXa4`rm@Gw*`@G(>~@H5mg2rx7;2r{%X2s3mrh%j_B zh%)puNHWZ3kYZTIAkDCjL6YGJgFM4=25E+q3^EMo7~~l)GRQJqW{_jJ!Jx?Sgh7en zJ%cjCcLqg9UIukW0S0A8AqEvjaRzlpDF#(W83r{*MFy>UMimBaMs)@~MjZxyMl%Kj zMjHlWMi&MPMt24iMo$J)Mn47%#y|!$#$X0>#s~&m##{zF#tH^|#%T-=jPn?58MiPv zF>YsYVBE>z$heQeh4C_jE8{%|H^x5<?o2EUE=*Dko=ma~?o9Fw9!x3>zD&9d0Zg_G zflTfUK}>-R^}$SW3}H+e4B<?943SI~3{gyV3~3B*3=E7?3^EL}88jKZ8GINx7)~;< zGWat1F>o+k2DAJbI2fM5WEq9PVtx!9j51)BKLZD&4udp907D=H2csugEQo=ZF&NAW zX5eKkWzb{@VF;~fU}el@aAyc(2xs7B+`_;N5@cXy+zD0)(sCQ3kb#x)GJ`uq1V|l| z6igkHJWL%ZR-rM@z|_bP$q>cB$iU20#}LgB%D}|H##GG^!w|~A%)rG|&JfEG%D}?F z$5hNvAIA{Nz{ViNl+O^)5X!*LsKOY_kiZbgz{RM}7{!ptki@{lq{|S(kj#+6z{`}u zAjy!*kjB8rkPb;`P`L~SUWQBt2Bw7!>i-!W7`WIO9M~DM*cq}Rhyg;eGh{O|F!1w8 z@%&`q{LdiAz{zfbL!lr8BRhlme+EumW=&ozByW!05@Pg9)vGe_V0R@00}DGt4#<8b zPj&_swm%Fa><nuE88jGp(KNt)1<}IJpvJ)PpMf1i9n|{>RgCNm^<dBOp_z!TlAS>u z<PdR={|rnR?nSd6WH+WF6ca&aDM36`Pjw%W=Ak%h`iLQyfq{XEA&-HPAs@^t003%z BG_wEz delta 2122 zcmdm?u}Z7{)W2Q(7#J8#818d1I5QM;FqCjGlyWeXaWUjDl!JsSxEOL7DmfUcKy)<+ zLk$N*EeAs#2SYsvLjwmxBL_nhJ3})ELkky!AVVt$LmP;02N50Y44qsI;tXBv4BcD| zk_<iU482?o(hNNu41HV-{R|Vh7$(*;OyXjg$S|3UA&+4SJHu2i1|^WXX<Q5{AbL7G z!witrOfCj>hFM$;Y7DbM#2j{pxm*l748<T~9tXpG5M2S1=>Vx-z|OFci@_M=n?)f0 zVlIXy3`;>G%QzSkI2aN+7?yJ}tYBEl&LF;ui@}y*HHcWl!LXKtVI4cedUl2loB0`c zF|luCXV}EfuzB(Y=5}Tm2G_|^EIQI#7`E~-Y-8BY!?1&4CnEz}L1jrsejX3QE{5Hk z7qa|jG<0Fu!^pr^TvC*pn9IYkmth|d!+r)=Mh4-m#Ii*FoW#6z{g8~J{PM)4oKzl$ z0}KZzpJh{GI|NdqGWi3e%4A7)Zi&M@3`ZD_vNIgxVK~lkf`{QG!zmty(+oQ&+py;e zonbi3!{EYj4n&;iVYtAseexc5nfi+imlzosxp){ZGn{2)5CmIST9TQg?~z!X;hR{% z$iR|Xky*mSaD`zfJHu5ThHDJhc^Gam++<{6Dap)DWoNhr61&aFzysEsnXm7b338(g z!yO)myA1aj8Dxqx5{pvfQ}UCuQ;Xu$GILV(eG@bD^pbNDixrBo%4a8*B!cCOH(PSd zXO3}VaAp7jCI&_Z7Y0`bMg}(q1_pfwMg~R(1_oBG?F@_?85kIt7~B~c7}&sqYz!U@ z3=BMAHY<ZCgBJq>10#bsgAW4}NHfO@237_^1_q{=n@xD?m}0esShg{+Zew7x;%71w zkmTRSz`hz}BZC51pW!Mc1_lOUNq!-&Z48_<8Q7T31VjZuDvZJMV5JO#yBTaFg&ejs z*je#O@@-?V4+jf4PF~J8ncba%fl-OUW3nT^aJ?Wy6N3;#D}x9_2ZJa>H-i{MKZ7*G zYz7&IWel<m>lmaNjxZ=P9A}VaILRQ#aE?Kd;Ua@P!(|2qh8qmZ3{MzT7~V6eGJI!H zX5?kiWE5afWfWpiV-#o5WRzl1XOv;kU{qw#VN_wzWmIP{VANqSWHe(iVzgl}WprV% zVsx)(Fk|#&FlY2*uwo2kuwV>kuw;y2uxHF=aA2%paAcgu;KVqO!JcsogA3z!1}Day z49<-E7~B{yGq^L}WAI@7!{Eup!r;av#o)~(%izf*&)~(R!r;%O%Miq5%Mi@u&Je;B z$PmgD#}L7k!4S!m#}Lg_!4Sh##}LPKgdu^c{yak>(^ZBfrUwkkOwSn7K~cph#UR5l zn?aMom%)#LgW)6tD}z5n00RfZWiTs{frH@*OqNjyEEd4P!6*Y}1u}3j>M%$%1Th3N za4>p;#X=Z(8H2&BPzGMcQU*<iFotjjR>oWg_j-m1hDZip#w`rYP{EyGg&-}r;R-J^ zxHCk7)G<lH)G^7!)PYhCG*vM$y<~`Hh+$x4U}k#85X%tGz{J4D^q3)zA)JAkfs5%r zLp(z`0}BHm(`|+XhHwTphI%2U>kNqu;SB7IDvU=Nk{E&+xER$L4>2S&q%iO>=`!qL zNM%T4;AP5SXk<ud$Y9`O$b=+js9Y8UFGDs11Jh*&?f(o83|#CCPV5Xh><qaO!~mh# z8FCpJ82EXlcz!Z){%4S5;Do9(!cZv4z{t)Z{-1#pmsykF3d);fw}cqIQuV3~JW$)w zEN5U~VQ0t#*{|fu&Y;5fhe3p$LG3?-1_Lje2Dq;vTG$!X7#RLDuw$r$dLN;Rk)5F) z>^VL(6VX+&Gl+v6BF^!jfeFLCXx4-5##Dr2BFHQyh==N_?jzDXR8LJG{b#6W5WpXl d#_SBXko3nR^pio6K`<X&J{K@BG8BSYMF8xkd6EDC -- GitLab