diff --git a/frontends/dnet-is-application/src/app/contexts/context-viewer.component.html b/frontends/dnet-is-application/src/app/contexts/context-viewer.component.html
index 35e0c686..d53f6ffc 100644
--- a/frontends/dnet-is-application/src/app/contexts/context-viewer.component.html
+++ b/frontends/dnet-is-application/src/app/contexts/context-viewer.component.html
@@ -1 +1,44 @@
-CONTEXT EDITOR
\ No newline at end of file
+
Context Viewer
+
+
+ Context ID: {{context?.id}}
+ Label: {{context?.label}}
+ Type: {{context?.type}}
+
+
+
+ Return to contexts list
+ Global parameters
+ Download
+
+
+
\ No newline at end of file
diff --git a/frontends/dnet-is-application/src/app/contexts/contexts.component.css b/frontends/dnet-is-application/src/app/contexts/contexts.component.css
index d5ec5248..b8d78c73 100644
--- a/frontends/dnet-is-application/src/app/contexts/contexts.component.css
+++ b/frontends/dnet-is-application/src/app/contexts/contexts.component.css
@@ -4,3 +4,15 @@
padding: 0 !important;
height: 2.5em !important;
}
+
+.context-node {
+ padding-top: 1em;
+}
+
+.context-node a {
+ text-decoration: none;
+}
+
+.context-node a:hover {
+ text-decoration: underline;
+}
\ No newline at end of file
diff --git a/frontends/dnet-is-application/src/app/contexts/contexts.component.html b/frontends/dnet-is-application/src/app/contexts/contexts.component.html
index fa986db5..34dc5a8c 100644
--- a/frontends/dnet-is-application/src/app/contexts/contexts.component.html
+++ b/frontends/dnet-is-application/src/app/contexts/contexts.component.html
@@ -27,7 +27,7 @@
Parameters
- show
+ show
diff --git a/frontends/dnet-is-application/src/app/contexts/contexts.component.ts b/frontends/dnet-is-application/src/app/contexts/contexts.component.ts
index 31ff650a..94c5b74f 100644
--- a/frontends/dnet-is-application/src/app/contexts/contexts.component.ts
+++ b/frontends/dnet-is-application/src/app/contexts/contexts.component.ts
@@ -2,12 +2,12 @@ import { Component, Inject,AfterViewInit, OnInit, ViewChild } from '@angular/cor
import { ISService } from '../is.service';
import { MatTableDataSource } from '@angular/material/table';
import { MatSort, Sort } from '@angular/material/sort';
-import { Context, WfHistoryEntry } from '../model/controller.model';
+import { Context, ContextNode, WfHistoryEntry } from '../model/controller.model';
import { ActivatedRoute, Params } from '@angular/router';
import { Observable, combineLatest } from 'rxjs';
import { map } from 'rxjs/operators';
import { MatDialog, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
-import { KeyValue } from '../model/controller.model';
+import { KeyValue, ContextParam } from '../model/controller.model';
import { FormControl, FormGroup, FormGroupDirective, NgForm, Validators } from '@angular/forms';
@Component({
@@ -22,7 +22,7 @@ export class ContextsComponent implements AfterViewInit ,OnInit {
@ViewChild(MatSort) sort: MatSort | undefined
- constructor(public service: ISService, public route: ActivatedRoute, public contextDialog: MatDialog) {
+ constructor(public service: ISService, public route: ActivatedRoute, public dialog: MatDialog) {
}
ngOnInit() {
@@ -42,20 +42,13 @@ export class ContextsComponent implements AfterViewInit ,OnInit {
this.contextsDatasource.filter = filterValue;
}
-
- openEditDialog(context: Context): void {
- const dialogRef = this.contextDialog.open(ContextParamsDialog, {
+ showParamsDialog(context: Context): void {
+ const dialogRef = this.dialog.open(ContextParamsDialog, {
data: context.parameters,
width: '80%'
});
}
- deleteContext(ctx:Context) {
- if (confirm('Are you sure?')) {
- this.service.deleteContext(ctx.id, (data: void) => this.reload());
- }
- }
-
}
@Component({
@@ -78,6 +71,35 @@ export class ContextParamsDialog {
templateUrl: './context-viewer.component.html',
styleUrls: ['./contexts.component.css']
})
-export class ContextViewerComponent {
+export class ContextViewerComponent implements OnInit {
+
+ context?:Context
+ categories:ContextNode[] = [];
+
+ constructor(public service: ISService, public route: ActivatedRoute, public dialog: MatDialog) {
+ }
+
+ ngOnInit() {
+ this.route.queryParams.subscribe((params) => {
+ this.service.loadContext(params['id'], (data: Context) => this.context = data);
+ this.service.loadContextCategories(params['id'], (data:ContextNode[]) => this.categories = data);
+ });
+ }
+
+ populateNode(level:number, node:ContextNode): void {
+ this.service.loadContextConcepts(level, node.id, (data:ContextNode[]) => {
+ node.populated = true;
+ node.childs = data
+ });
+ }
+
+ showParamsDialog(params:ContextParam[] | undefined): void {
+ if (params) {
+ this.dialog.open(ContextParamsDialog, {
+ data: params,
+ width: '80%'
+ });
+ }
+ }
}
diff --git a/frontends/dnet-is-application/src/app/is.service.ts b/frontends/dnet-is-application/src/app/is.service.ts
index 1337330a..dd0cb800 100644
--- a/frontends/dnet-is-application/src/app/is.service.ts
+++ b/frontends/dnet-is-application/src/app/is.service.ts
@@ -1,6 +1,6 @@
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
-import { ResourceType, Protocol, WfHistoryEntry, SimpleResource, Context } from './model/controller.model';
+import { ResourceType, Protocol, WfHistoryEntry, SimpleResource, Context, ContextNode } from './model/controller.model';
import { Observable, Observer } from 'rxjs';
import { FormGroup } from '@angular/forms';
import { MatSnackBar } from '@angular/material/snack-bar';
@@ -112,15 +112,22 @@ export class ISService {
});
}
- addContext(context: Context, onSuccess: Function, relatedForm?: FormGroup): void {
- this.client.post('/ajax/contexts/', context).subscribe({
+ loadContext(ctxId:string, onSuccess: Function): void {
+ this.client.get('./ajax/contexts/' + encodeURIComponent(ctxId)).subscribe({
next: data => onSuccess(data),
- error: error => this.showError(error, relatedForm)
+ error: error => this.showError(error)
});
}
- deleteContext(contextId: string, onSuccess: Function): void {
- this.client.delete('/ajax/contexts/' + encodeURIComponent(contextId)).subscribe({
+ loadContextCategories(ctxId:string, onSuccess: Function): void {
+ this.client.get('./ajax/contexts/' + encodeURIComponent(ctxId) + '/categories').subscribe({
+ next: data => onSuccess(data),
+ error: error => this.showError(error)
+ });
+ }
+
+ loadContextConcepts(level:number, nodeId:string, onSuccess: Function): void {
+ this.client.get('./ajax/contexts/' + encodeURIComponent(level) + '/' + encodeURIComponent(nodeId) + '/concepts').subscribe({
next: data => onSuccess(data),
error: error => this.showError(error)
});
diff --git a/frontends/dnet-is-application/src/app/model/controller.model.ts b/frontends/dnet-is-application/src/app/model/controller.model.ts
index cd339ac7..1c9084a1 100644
--- a/frontends/dnet-is-application/src/app/model/controller.model.ts
+++ b/frontends/dnet-is-application/src/app/model/controller.model.ts
@@ -64,4 +64,15 @@ export interface Context {
parameters: ContextParam[],
nChilds: number,
type: string
-}
\ No newline at end of file
+}
+
+export interface ContextNode {
+ id: string,
+ label: string,
+ parameters: ContextParam[],
+ nChilds: number,
+ claim: boolean,
+ parent: string,
+ populated?: boolean,
+ childs?: ContextNode[]
+}