From 074ab925d65665b22506c9462dfe4e71984783d2 Mon Sep 17 00:00:00 2001 From: Florian Lambers <fl462057@fh-muenster.de> Date: Mon, 29 Nov 2021 15:03:50 +0100 Subject: [PATCH] added flag to frontend --- .../Testgenerator/rest/dto/BPMNFlowDTO.java | 11 +++++ .../rest/dto/FlowElementDTO.java | 9 ++++ .../rest/service/flow/FlowController.java | 17 +++++++- .../bpmn-diagram/bpmn-diagram.component.ts | 2 +- .../app/components/flows/flows.component.html | 4 ++ .../app/components/flows/flows.component.ts | 2 + .../app/components/test/test.component.html | 7 +++- .../src/app/components/test/test.component.ts | 42 ++++++++++++++++++- .../src/app/models/bpmn-flow-element.ts | 3 +- .../src/app/models/bpmn-flow.ts | 1 + .../testgenerator-web/src/index.html | 14 +++++++ 11 files changed, 107 insertions(+), 5 deletions(-) diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/BPMNFlowDTO.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/BPMNFlowDTO.java index 6395060..6650737 100644 --- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/BPMNFlowDTO.java +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/BPMNFlowDTO.java @@ -2,11 +2,14 @@ package de.fhmuenster.masterthesis.Testgenerator.rest.dto; import java.util.List; +import de.fhmuenster.masterthesis.testgeneratorDSL.Flag; + public class BPMNFlowDTO { private String name; private List<FlowElementDTO> flowElements; private long testCount; + private String flag; public BPMNFlowDTO() { } @@ -34,4 +37,12 @@ public class BPMNFlowDTO { public void setTestCount(long testCount) { this.testCount = testCount; } + + public String getFlag() { + return flag; + } + + public void setFlag(String flag) { + this.flag = flag; + } } diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/FlowElementDTO.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/FlowElementDTO.java index 6bb6740..247ea41 100644 --- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/FlowElementDTO.java +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/FlowElementDTO.java @@ -3,6 +3,7 @@ package de.fhmuenster.masterthesis.Testgenerator.rest.dto; public class FlowElementDTO { private String id; + private String flag; public FlowElementDTO() { } @@ -14,4 +15,12 @@ public class FlowElementDTO { public void setId(String id) { this.id = id; } + + public String getFlag() { + return flag; + } + + public void setFlag(String flag) { + this.flag = flag; + } } diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/flow/FlowController.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/flow/FlowController.java index 4573c9a..004f3ba 100644 --- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/flow/FlowController.java +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/flow/FlowController.java @@ -50,9 +50,14 @@ public class FlowController { Project projectForId = projectService.getProjectForId(projectId); List<Flow> flows = flowService.getFlows(projectForId.getProjectDirectories()); + Map<String, Long> flowTestcount = testService.getFlowTestcount(projectForId.getProjectDirectories()); List<BPMNFlowDTO> flowDtos = MAPPER_FLOW.mapToList(flows, BPMNFlowDTO.class); + for(int i=0; i < flows.size(); i++) { + flowDtos.get(i).setFlag(flows.get(i).getFlag().getName()); + } + for (Entry<String, Long> testcount : flowTestcount.entrySet()) { for (BPMNFlowDTO bpmnFlowDTO : flowDtos) { if(bpmnFlowDTO.getName().equals(testcount.getKey())) { @@ -61,6 +66,8 @@ public class FlowController { } } + + BPMNFlowSetDTO dto = new BPMNFlowSetDTO(); dto.setFlows(flowDtos); @@ -72,7 +79,15 @@ public class FlowController { Project projectForId = projectService.getProjectForId(projectId); Flow flow = flowService.getFlow(projectForId.getProjectDirectories(), flowId); - return MAPPER_FLOW.map(flow, BPMNFlowDTO.class); + + BPMNFlowDTO mappedFlow = MAPPER_FLOW.map(flow, BPMNFlowDTO.class); + + for(int i=0; i < mappedFlow.getFlowElements().size(); i++) { + FlowElementDTO element = mappedFlow.getFlowElements().get(i); + element.setFlag(flow.getInclElements().get(i).getFlag().getName()); + } + + return mappedFlow; } @RequestMapping(path = "/project/{projectId}/servicetask/delegate", method = RequestMethod.GET) diff --git a/testgenerator-web/testgenerator-web/src/app/components/bpmn-diagram/bpmn-diagram.component.ts b/testgenerator-web/testgenerator-web/src/app/components/bpmn-diagram/bpmn-diagram.component.ts index 410bb67..9a5fab9 100644 --- a/testgenerator-web/testgenerator-web/src/app/components/bpmn-diagram/bpmn-diagram.component.ts +++ b/testgenerator-web/testgenerator-web/src/app/components/bpmn-diagram/bpmn-diagram.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, AfterContentInit, OnDestroy, ViewChild, ElementRef, Input, ViewChildren } from '@angular/core'; +import { Component, OnInit, AfterContentInit, OnDestroy, ViewChild, ElementRef, Input, ViewChildren, AfterViewInit } from '@angular/core'; import * as BpmnJS from 'bpmn-js/dist/bpmn-viewer.production.min.js'; import { BPMNFlow } from 'src/app/models/bpmn-flow'; diff --git a/testgenerator-web/testgenerator-web/src/app/components/flows/flows.component.html b/testgenerator-web/testgenerator-web/src/app/components/flows/flows.component.html index 319779c..eddde30 100644 --- a/testgenerator-web/testgenerator-web/src/app/components/flows/flows.component.html +++ b/testgenerator-web/testgenerator-web/src/app/components/flows/flows.component.html @@ -24,6 +24,10 @@ <div *ngFor="let flow of flowSet.flows; let i=index"> <hr *ngIf="i > 0"> <div class="testgen-flow"> + <span class="badge bg-danger" *ngIf="flow.flag && flow.flag === 'RED'"> </span> + <span class="badge bg-warning" *ngIf="flow.flag && flow.flag === 'YELLOW'"> </span> + <span class="badge bg-success" *ngIf="flow.flag && flow.flag === 'GREEN'"> </span> + <h4 [ngClass]="{'testgen-flow-highlight': activeFlow.name === flow.name}" class="testgen-flow-name" i18n="flow name">{{flow.name}} - (Number of generated tests: {{flow.testCount}})</h4> <p *ngIf="detailFlowVisible" class="testgen-flow-flowlist">{{flow | flow}}</p> diff --git a/testgenerator-web/testgenerator-web/src/app/components/flows/flows.component.ts b/testgenerator-web/testgenerator-web/src/app/components/flows/flows.component.ts index f71b104..5e255ad 100644 --- a/testgenerator-web/testgenerator-web/src/app/components/flows/flows.component.ts +++ b/testgenerator-web/testgenerator-web/src/app/components/flows/flows.component.ts @@ -52,6 +52,7 @@ export class FlowsComponent implements OnInit { try { let result = await this.flowService.getFlows(this.actualProject); this.flowSet = result; + console.log(this.flowSet); this.activeFlow = this.flowSet.flows[0]; } finally { this.isFlowLoading = false; @@ -71,6 +72,7 @@ export class FlowsComponent implements OnInit { async highlight(flow: BPMNFlow) { this.activeFlow = flow; window.scrollTo(0, 0); + } async onFlowVisibility() { diff --git a/testgenerator-web/testgenerator-web/src/app/components/test/test.component.html b/testgenerator-web/testgenerator-web/src/app/components/test/test.component.html index d02ec66..836b680 100644 --- a/testgenerator-web/testgenerator-web/src/app/components/test/test.component.html +++ b/testgenerator-web/testgenerator-web/src/app/components/test/test.component.html @@ -4,6 +4,11 @@ </h6> <div class="row"> <div class="col-md-12" *ngIf="!isLoading && !isTestLoading && testcase"> + <!-- + <div class="row"> + <app-bpmn-diagram [diagram]="diagram" [flow]="flow"></app-bpmn-diagram> + </div> + --> <p class="title" *ngIf="isEdit" i18n="edit test">Edit test</p> <p class="title" *ngIf="!isEdit" i18n="create test">Create test</p> @@ -47,7 +52,7 @@ <div formArrayName="taskVariableList"> <div class="testgen-taskvariable-container" *ngFor="let taskVariable of testcase.taskVariableList; let i=index"> <hr *ngIf="i > 0"> - <div class="testgen-testtask" [formGroupName]="i"> + <div [ngClass]="setClasses(taskVariable.task)" [formGroupName]="i"> <h3>{{taskVariable.task}}</h3> <div *ngFor="let variableValue of taskVariable.variableValues; let v=index"> diff --git a/testgenerator-web/testgenerator-web/src/app/components/test/test.component.ts b/testgenerator-web/testgenerator-web/src/app/components/test/test.component.ts index 8777bc2..788d2a3 100644 --- a/testgenerator-web/testgenerator-web/src/app/components/test/test.component.ts +++ b/testgenerator-web/testgenerator-web/src/app/components/test/test.component.ts @@ -12,6 +12,9 @@ import { VariableProposals } from 'src/app/models/variable-proposals'; import { VariableValueEndCheck } from 'src/app/models/variable-value-endcheck'; import { ServiceWithMock } from 'src/app/models/service-with-mock'; import { ExternalTopicWithMocks } from 'src/app/models/external-topic-with-mocks'; +import { BPMNFlow } from 'src/app/models/bpmn-flow'; +import { FlowService } from 'src/app/services/flow.service'; +import { FileService } from 'src/app/services/file.service'; @Component({ selector: 'app-test', @@ -42,7 +45,12 @@ export class TestComponent implements OnInit { public formGroup: FormGroup; - constructor(private _fb: FormBuilder, private testService: TestService, private router: Router, private route: ActivatedRoute) { + flow: BPMNFlow; + diagram: string; + isDiagramLoading: boolean; + + constructor(private _fb: FormBuilder, private testService: TestService, private router: Router, private route: ActivatedRoute, + private flowService: FlowService, private fileService: FileService) { this.route.params.subscribe(params => { this.actualProject = params['projectId']; this.actualFlow = params['flowId']; @@ -65,6 +73,7 @@ export class TestComponent implements OnInit { } this.initTestcase(); + this.loadBPMNDiagram(); this.isLoading = false; } @@ -177,6 +186,10 @@ export class TestComponent implements OnInit { this.flowInfo = result; this.cleanUpServiceWithMocks(); this.initVariableDataTypes(); + + let result2 = await this.flowService.getFlow(this.actualProject, this.actualFlow); + this.flow = result2; + } finally { this.isInfoLoading = false; } @@ -475,4 +488,31 @@ export class TestComponent implements OnInit { return null; } + + async loadBPMNDiagram() { + this.isDiagramLoading = true; + try { + let result = await this.fileService.getBPMNDiagram(this.actualProject); + this.diagram = result; + } finally { + this.isDiagramLoading = false; + } + } + + private setClasses(task: string) { + return { + 'testgen-testtask': true, + 'alert alert-danger': this.checkIfElementIsRed(task) + }; + } + + private checkIfElementIsRed(task: string): boolean { + for(let i=0; i < this.flow.flowElements.length; i++) { + if(this.flow.flowElements[i].flag === 'RED') { + return true; + } + } + + return false; + } } diff --git a/testgenerator-web/testgenerator-web/src/app/models/bpmn-flow-element.ts b/testgenerator-web/testgenerator-web/src/app/models/bpmn-flow-element.ts index 1da3401..b346782 100644 --- a/testgenerator-web/testgenerator-web/src/app/models/bpmn-flow-element.ts +++ b/testgenerator-web/testgenerator-web/src/app/models/bpmn-flow-element.ts @@ -1,4 +1,5 @@ export interface BPMNFlowElement { id: string; - name: string; + name: string; + flag: string; } \ No newline at end of file diff --git a/testgenerator-web/testgenerator-web/src/app/models/bpmn-flow.ts b/testgenerator-web/testgenerator-web/src/app/models/bpmn-flow.ts index 4353ee0..57c9876 100644 --- a/testgenerator-web/testgenerator-web/src/app/models/bpmn-flow.ts +++ b/testgenerator-web/testgenerator-web/src/app/models/bpmn-flow.ts @@ -4,4 +4,5 @@ export interface BPMNFlow { name: string; flowElements: Array<BPMNFlowElement>; testCount: number; + flag: string; } \ No newline at end of file diff --git a/testgenerator-web/testgenerator-web/src/index.html b/testgenerator-web/testgenerator-web/src/index.html index f93200c..dec746e 100644 --- a/testgenerator-web/testgenerator-web/src/index.html +++ b/testgenerator-web/testgenerator-web/src/index.html @@ -10,6 +10,20 @@ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> </head> +<style> + .testgen-highlight:not(.djs-connection) .djs-visual> :nth-child(1) { + fill: #ffbb33 !important; + } + .testgen-highlight.djs-connection .djs-visual> :nth-child(1) { + stroke: #ffbb33 !important; + /**#4285F4*/ + /**#ffbb33*/ + /**#00C851*/ + /**#ff4444*/ + } +</style> + + <body class="d-flex flex-column min-vh-100"> <app-root></app-root> -- GitLab