Skip to content
Snippets Groups Projects
Commit 8d7e6292 authored by Alexandre Vanini's avatar Alexandre Vanini
Browse files

[ANGULAR] - Add program

users can now create programs and display them in the front page. They are stored into the database in the javalin instance.
parent d3d5decb
No related branches found
No related tags found
No related merge requests found
Showing
with 123 additions and 74 deletions
import {NgModule} from '@angular/core';
import {RouterModule, Routes} from '@angular/router';
import {ExtraOptions, RouterModule, Routes} from '@angular/router';
import {ProgramDisplayerComponent} from './program-displayer/program-displayer.component';
import {KataDisplayerComponent} from './kata-displayer/kata-displayer.component';
import {KataComponent} from './kata/kata.component';
import {ProgramCreateComponent} from './program-create/program-create.component';
import {KataCreateComponent} from './kata-create/kata-create.component';
const routerOptions: ExtraOptions = {
useHash: false,
anchorScrolling: 'enabled'
};
const routes: Routes = [
{path: 'program_test', component: ProgramDisplayerComponent},
{path: 'kata-displayer/:id/:title/:language/:sensei', component: KataDisplayerComponent},
......@@ -18,7 +23,7 @@ const routes: Routes = [
declarations: [],
exports: [RouterModule],
imports: [RouterModule.forRoot(routes)],
imports: [RouterModule.forRoot(routes, routerOptions)],
})
export class AppRoutingModule {
......
import {Injectable} from '@angular/core';
import {Kata} from './kata/kata';
import * as $ from 'jquery';
@Injectable({
......
import {Injectable} from '@angular/core';
import * as $ from 'jquery';
import {stringify} from 'querystring';
import {Kata} from './kata/kata';
@Injectable({
providedIn: 'root'
......@@ -29,3 +27,4 @@ export class CreateProgramService {
constructor() {
}
}
import {Injectable} from '@angular/core';
import {Program} from './program-displayer/program';
import {PROGRAMS} from './program-displayer/programMock';
import * as $ from 'jquery';
@Injectable({
providedIn: 'root'
})
export class FetchProgramService {
getPrograms(sensei: string): Program[] {
// return PROGRAMS.filter(x => x.sensei === sensei);
return PROGRAMS;
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;
}
constructor() {
......
.error {
border: 3px rgba(192, 57, 43, 0.8) solid;
background-color: rgba(192, 57, 43, 0.2);
}
.success {
border: 3px rgba(39, 174, 96, 1.0) solid;
background-color: rgba(39, 174, 96, 0.2);
}
* {
display: inline-block;
font-family: "Helvetica Neue";
}
textarea.result {
textarea {
background-color: rgba(43, 47, 57, 1);
border: 2px solid rgba(44, 62, 80, 1.0);
color: white;
......@@ -19,18 +29,10 @@ textarea.result {
margin-left: 20px;
}
textarea {
background-color: rgba(43, 47, 57, 1);
border: 2px solid rgba(44, 62, 80, 1.0);
color: white;
textarea.rules {
width: 100%;
height: 200px;
border-radius: 6px;
font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;
outline: none;
padding: 10px;
margin: 0;
}
input[type=button] {
......@@ -60,3 +62,5 @@ select {
-webkit-appearance: none;
appearance: none;
}
<div class="d-flex justify-content-center" style="margin-top:2%">
<div class="d-flex flex-column">
<div class="p-2"><input type="text" placeholder=" Some title.." [(ngModel)]="title"/></div>
<div class="p-2"><textarea [(ngModel)]="rules"></textarea></div>
<div class="p-2"><textarea class="rules" [(ngModel)]="rules"></textarea></div>
<div class="p-2">
<app-terminal-code [code]="code" [type]="language" (new)="OnNewEventSolution($event)"></app-terminal-code>
<app-terminal-code style="margin-left: 20px;" [code]="assert" [type]="language"
......@@ -9,7 +10,7 @@
</div>
<div class="p-2">
<app-terminal-code [code]="canva" [type]="language" (new)="OnNewEventCanva($event)"></app-terminal-code>
<textarea class="result" [ngClass]="{'success':status === 0,'error':status === 1,'':status === 2}"
<textarea [ngClass]="{'success':status === 0,'error':status === 1,'':status === 2}"
style="white-space: pre-wrap" disabled>{{result}}</textarea>
</div>
<div class="p-2">
......@@ -21,7 +22,7 @@
<br/>
Nombre d'essai avant le débloquage de la solution :
<input type="number" value="0" [(ngModel)]="numberOfAttempt"/>
<input type="button" value="ESSAYER"/>
<input (click)="try()" type="button" value="ESSAYER"/>
<input (click)="publish()" type="button" style="margin-left:10px" value="PUBLIER"/>
</div>
......
import {Component, OnInit} from '@angular/core';
import {Canva} from '../languages_canvas';
import {LANGService} from '../lang.service';
import {ActivatedRoute} from '@angular/router';
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',
......@@ -15,7 +17,9 @@ export class KataCreateComponent implements OnInit {
constructor(private langservice: LANGService,
private route: ActivatedRoute,
private location: Location,
private kateCreateService: CreateKataService
private kateCreateService: CreateKataService,
public router: Router,
private compilationService: CompilationService
) {
}
......@@ -70,6 +74,27 @@ export class KataCreateComponent implements OnInit {
nbAttempt: this.numberOfAttempt,
programID: this.programId
}));
this.router.navigate(['/kata-displayer/' + this.programId + '']);
}
try(): void {
const response = $.parseJSON(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';
}
ngOnInit() {
......
......@@ -9,7 +9,7 @@
<div class="p-2">
<app-terminal-assert [code]="kata.assert" [type]="kata.language"></app-terminal-assert>
<textarea [ngClass]="{'success':status === 0,'error':status === 1,'':status === 2}" style="white-space: pre-wrap"
<textarea [ngClass]="{'success':status === 0,'error':status === 1,'':status === 2}" style="white-space: pre-wrap;"
disabled>{{result}}</textarea>
</div>
......
......@@ -17,7 +17,6 @@ export class ProgramCreateComponent implements OnInit {
programDescr = '';
programTags = '';
programLanguage = 'python';
programToKata = 0;
update(event: any) {
......@@ -25,15 +24,15 @@ export class ProgramCreateComponent implements OnInit {
}
createProgram(newkata: boolean): void {
console.log(this.programTags.split(','));
this.programToKata = +this.createProgramService.createProgram(JSON.stringify({
id: + new Date(),
sensei: 'Orestis Pileas Malaspinas',
language: this.programLanguage,
nbKata: 0,
title: this.programTitle,
descr: this.programDescr,
tags: this.programTags,
kata: []
description: this.programDescr,
tags: this.programTags.split(',')
}));
if (newkata) {
......
......@@ -13,7 +13,7 @@
<a href=""><span class="language">{{program.language}}</span></a></h6>
<br/>
<p class="card-text">{{program.description}}</p>
<span *ngFor="let tag of program.tag">
<span *ngFor="let tag of program.tags">
<span class="tag">{{tag}}</span>
</span>
<span class="nbkata">#{{program.nbKata}}</span>
......
......@@ -15,12 +15,12 @@ export class ProgramDisplayerComponent implements OnInit {
constructor(private fetchProgramService: FetchProgramService) {
}
getProgram(sensei: string): void {
this.programs = this.fetchProgramService.getPrograms(sensei);
getProgram(): void {
this.programs = this.fetchProgramService.getPrograms();
}
ngOnInit() {
this.getProgram('Orestis Pileas Malaspinas');
this.getProgram();
}
}
export class Program {
id: number;
export interface Program {
id: string,
title: string;
language: string;
sensei: string;
nbKata: number;
description: string;
tag: string[];
tags: string[];
}
......@@ -3,10 +3,13 @@ import java.util.ArrayList;
public class LiveDB extends ProgramsDataBase{
ArrayList<Program> programs;
ArrayList<Kata> katas;
public LiveDB() {
programs = new ArrayList<>();
}
public String createProgram(Program prg) {
......@@ -15,10 +18,14 @@ public class LiveDB extends ProgramsDataBase{
return String.valueOf(programs.indexOf(prg));
}
public void addKata(Kata kata) {
public void createKata(Kata kata) {
katas.add(kata);
//programs.get(kata.getProgramID()).setKata();
programs.get(kata.getProgramID()).getKata().add(kata);
int caca = 12;
// programs.get(kata.getProgramID()).getKata().add(kata);
}
public ArrayList<Program> getAllPrograms(){
return programs;
}
}
import java.util.ArrayList;
public class Program {
private String sensei,language,title,descr,tags;
private String id,sensei,language,title,description;
private String[] tags;
private int nbKata;
private ArrayList<Kata> kata;
/*
public Program(String sensei, String language,int nbkata, String title, String descr, String tags, Kata[] katas){
this.sensei = sensei;
this.language = language;
this.nbKata = nbkata;
this.title = title;
this.descr = descr;
this.tags = tags;
this.kata = katas;
}
*/
public String getSensei() {
return sensei;
}
......@@ -39,35 +29,43 @@ public class Program {
this.title = title;
}
public String getDescr() {
return descr;
public int getNbKata() {
return nbKata;
}
public void setNbKata(int nbKata) {
this.nbKata = nbKata;
}
public String getDescription() {
return description;
}
public void setDescr(String descr) {
this.descr = descr;
public void setDescription(String description) {
this.description = description;
}
public String getTags() {
public String[] getTags() {
return tags;
}
public void setTags(String tags) {
public void setTags(String[] tags) {
this.tags = tags;
}
public int getNbKata() {
return nbKata;
public String getId() {
return id;
}
public void setNbKata(int nbKata) {
this.nbKata = nbKata;
public void setId(String id) {
this.id = id;
}
/*
public ArrayList<Kata> getKata() {
return kata;
}
public void setKata(ArrayList<Kata> kata) {
this.kata = kata;
}
}*/
}
import java.util.ArrayList;
public abstract class ProgramsDataBase {
public abstract String createProgram(Program prg);
public abstract void addKata(Kata kata);
public abstract void createKata(Kata kata);
public abstract ArrayList<Program> getAllPrograms();
}
......@@ -6,12 +6,6 @@ import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.commons.lang.StringEscapeUtils;
import org.json.JSONObject;
import static org.apache.commons.lang.StringEscapeUtils.escapeJava;
public class app {
private static ProgramsDataBase db = new LiveDB();
......@@ -68,10 +62,12 @@ public class app {
app.post("/kata/create", ctx -> {
Kata kt = objectMapper.readValue(ctx.body(), Kata.class);
db.addKata(kt);
db.createKata(kt);
});
app.get("/program/getall", ctx -> {
ctx.json(db.getAllPrograms());
});
}
......
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment