Skip to content
This repository was archived by the owner on May 14, 2025. It is now read-only.

Commit 04760df

Browse files
BoykoAlexghillert
authored andcommitted
gh-714 Show DSL validation errors in the CTR UI
1 parent b8ae583 commit 04760df

File tree

3 files changed

+37
-5
lines changed

3 files changed

+37
-5
lines changed

ui/src/app/tasks/flo/tools.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export class ToolsService {
8080
graph = new Graph(nodes, links);
8181
}
8282

83-
return new TaskConversion(body.dsl, null, graph);
83+
return new TaskConversion(body.dsl, body.errors, graph);
8484
}
8585

8686
}

ui/src/app/tasks/task-create-composed-task/task-create-composed-task.component.spec.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ import { NgBusyModule } from 'ng-busy';
1212
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
1313
import { MockSharedAppService } from '../../tests/mocks/shared-app';
1414
import { MockToolsService } from '../../tests/mocks/mock-tools';
15+
import { ToolsService } from '../flo/tools.service';
1516

16-
/**
17+
/**cc
1718
* Test {@link TaskCreateComposedTaskComponent}.
1819
*
1920
* @author Janne Valkealahti
@@ -23,6 +24,7 @@ describe('TaskCreateComposedTaskComponent', () => {
2324
let fixture: ComponentFixture<TaskCreateComposedTaskComponent>;
2425
let activeRoute: MockActivatedRoute;
2526
const metamodelService = new MetamodelService(new MockSharedAppService(), new MockToolsService());
27+
const toolsService = new MockToolsService();
2628

2729
const commonTestParams = { id: '1' };
2830

@@ -45,7 +47,8 @@ describe('TaskCreateComposedTaskComponent', () => {
4547
{provide: RenderService},
4648
{provide: EditorService},
4749
{provide: BsModalService},
48-
{provide: ContentAssistService}
50+
{provide: ContentAssistService},
51+
{provide: ToolsService, useValue: toolsService}
4952
]
5053
})
5154
.compileComponents();

ui/src/app/tasks/task-create-composed-task/task-create-composed-task.component.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { RenderService } from '../flo/render.service';
88
import { EditorService } from '../flo/editor.service';
99
import { TaskCreateComposedTaskDialogComponent } from './task-create-composed-task-dialog.component';
1010
import * as CodeMirror from 'codemirror';
11+
import {ToolsService} from "../flo/tools.service";
1112

1213
/**
1314
* Component handling a creation of a composed task.
@@ -35,7 +36,8 @@ export class TaskCreateComposedTaskComponent implements OnInit, OnDestroy {
3536
constructor(public metamodelService: MetamodelService,
3637
public renderService: RenderService,
3738
public editorService: EditorService,
38-
private bsModalService: BsModalService) {
39+
private bsModalService: BsModalService,
40+
private toolsService: ToolsService) {
3941

4042
this.validationMarkers = new Map();
4143

@@ -101,7 +103,34 @@ export class TaskCreateComposedTaskComponent implements OnInit, OnDestroy {
101103
severity: Flo.Severity[m.severity].toLowerCase()
102104
}))
103105
);
104-
updateLintingCallback(editor, annotations);
106+
const dslText = this.dsl;
107+
this.toolsService.parseTaskTextToGraph(dslText).toPromise().then(taskConversion => {
108+
if (taskConversion.errors) {
109+
taskConversion.errors.forEach(e => annotations.push({
110+
from: this.getPosition(dslText, e['position']),
111+
to: e['length'] ? this.getPosition(dslText, e['position'] + e['length'])
112+
: this.getPosition(dslText, e['position'] + 1),
113+
message: e['message'],
114+
severity: 'error'
115+
}));
116+
}
117+
updateLintingCallback(editor, annotations);
118+
}).catch(error => updateLintingCallback(editor, annotations));
119+
}
120+
121+
getPosition(text: string, offset: number): CodeMirror.Position {
122+
let lineStartPosition = 0;
123+
let lineNumber = 0;
124+
for (let p = 0; p < offset; p++) {
125+
if (text.charAt(p) === '\n') {
126+
lineNumber++;
127+
lineStartPosition = p + 1;
128+
}
129+
}
130+
return {
131+
line: lineNumber,
132+
ch: offset - lineStartPosition
133+
};
105134
}
106135

107136
get isCreateComposedTaskDisabled(): boolean {

0 commit comments

Comments
 (0)