From ecce86aaf75c7b428dc4b74fce27e822fe52df72 Mon Sep 17 00:00:00 2001 From: Piotr Pekala Date: Mon, 9 Sep 2019 06:57:42 -0700 Subject: [PATCH] Dialog for VPCS added --- src/app/app.module.ts | 9 ++- src/app/cartography/models/node.ts | 1 + .../config-action.component.html | 4 ++ .../config-action.component.spec.ts | 0 .../config-action/config-action.component.ts | 58 +++++++++++++++++++ .../context-menu/context-menu.component.html | 4 ++ .../configurator/configurator.component.scss | 7 +++ .../vpcs/configurator-vpcs.component.html | 39 +++++++++++++ .../vpcs/configurator-vpcs.component.ts | 58 +++++++++++++++++++ src/app/services/node.service.ts | 11 ++++ 10 files changed, 189 insertions(+), 2 deletions(-) create mode 100644 src/app/components/project-map/context-menu/actions/config-action/config-action.component.html create mode 100644 src/app/components/project-map/context-menu/actions/config-action/config-action.component.spec.ts create mode 100644 src/app/components/project-map/context-menu/actions/config-action/config-action.component.ts create mode 100644 src/app/components/project-map/node-editors/configurator/configurator.component.scss create mode 100644 src/app/components/project-map/node-editors/configurator/vpcs/configurator-vpcs.component.html create mode 100644 src/app/components/project-map/node-editors/configurator/vpcs/configurator-vpcs.component.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 3edba25a..fbcdc4ff 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -211,6 +211,8 @@ import { ProjectsFilter } from './filters/projectsFilter.pipe'; import { ComputeService } from './services/compute.service'; import { ReloadNodeActionComponent } from './components/project-map/context-menu/actions/reload-node-action/reload-node-action.component'; import { SuspendNodeActionComponent } from './components/project-map/context-menu/actions/suspend-node-action/suspend-node-action.component'; +import { ConfigActionComponent } from './components/project-map/context-menu/actions/config-action/config-action.component'; +import { ConfiguratorDialogVpcsComponent } from './components/project-map/node-editors/configurator/vpcs/configurator-vpcs.component'; if (environment.production) { Raven.config('https://b2b1cfd9b043491eb6b566fd8acee358@sentry.io/842726', { @@ -349,7 +351,9 @@ if (environment.production) { ChangeSymbolActionComponent, EditProjectDialogComponent, ReloadNodeActionComponent, - SuspendNodeActionComponent + SuspendNodeActionComponent, + ConfigActionComponent, + ConfiguratorDialogVpcsComponent ], imports: [ BrowserModule, @@ -449,7 +453,8 @@ if (environment.production) { SaveProjectDialogComponent, InfoDialogComponent, ChangeSymbolDialogComponent, - EditProjectDialogComponent + EditProjectDialogComponent, + ConfiguratorDialogVpcsComponent ], bootstrap: [AppComponent] }) diff --git a/src/app/cartography/models/node.ts b/src/app/cartography/models/node.ts index 5caf995f..3478617f 100644 --- a/src/app/cartography/models/node.ts +++ b/src/app/cartography/models/node.ts @@ -5,6 +5,7 @@ export class Node { command_line: string; compute_id: string; console: number; + console_auto_start: boolean; console_host: string; console_type: string; first_port_name: string; diff --git a/src/app/components/project-map/context-menu/actions/config-action/config-action.component.html b/src/app/components/project-map/context-menu/actions/config-action/config-action.component.html new file mode 100644 index 00000000..3290ba3a --- /dev/null +++ b/src/app/components/project-map/context-menu/actions/config-action/config-action.component.html @@ -0,0 +1,4 @@ + diff --git a/src/app/components/project-map/context-menu/actions/config-action/config-action.component.spec.ts b/src/app/components/project-map/context-menu/actions/config-action/config-action.component.spec.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/app/components/project-map/context-menu/actions/config-action/config-action.component.ts b/src/app/components/project-map/context-menu/actions/config-action/config-action.component.ts new file mode 100644 index 00000000..5d9d0974 --- /dev/null +++ b/src/app/components/project-map/context-menu/actions/config-action/config-action.component.ts @@ -0,0 +1,58 @@ +import { Component, Input, OnInit, OnChanges } from '@angular/core'; +import { Server } from '../../../../../models/server'; +import { Node } from '../../../../../cartography/models/node'; +import { MatDialog, MatDialogRef } from '@angular/material'; +import { ConfiguratorDialogVpcsComponent } from '../../../node-editors/configurator/vpcs/configurator-vpcs.component'; + + +@Component({ + selector: 'app-config-node-action', + templateUrl: './config-action.component.html' +}) +export class ConfigActionComponent { + @Input() server: Server; + @Input() node: Node; + private conf = { + width: '600px', + autoFocus: false + }; + dialogRef; + + constructor(private dialog: MatDialog) {} + + configureNode() { + if (this.node.node_type === 'vpcs') { + this.dialogRef = this.dialog.open(ConfiguratorDialogVpcsComponent, this.conf); + } else if (this.node.node_type === 'ethernet_hub') { + + } else if (this.node.node_type === 'ethernet_switch') { + + } else if (this.node.node_type === 'cloud') { + + } else if (this.node.node_type === 'dynamips') { + + } else if (this.node.node_type === 'iou') { + + } else if (this.node.node_type === 'qemu') { + + } else if (this.node.node_type === 'virtualbox') { + + } else if (this.node.node_type === 'vmware') { + + } else if (this.node.node_type === 'docker') { + + } else if (this.node.node_type === 'nat') { + + } else if (this.node.node_type === 'frame_relay_switch') { + + } else if (this.node.node_type === 'atm_switch') { + + } else if (this.node.node_type === 'traceng') { + + } + + let instance = this.dialogRef.componentInstance; + instance.server = this.server; + instance.node = this.node; + } +} diff --git a/src/app/components/project-map/context-menu/context-menu.component.html b/src/app/components/project-map/context-menu/context-menu.component.html index 091a6fcf..177d607d 100644 --- a/src/app/components/project-map/context-menu/context-menu.component.html +++ b/src/app/components/project-map/context-menu/context-menu.component.html @@ -5,6 +5,10 @@ [server]="server" [node]="nodes[0]" > + diff --git a/src/app/components/project-map/node-editors/configurator/configurator.component.scss b/src/app/components/project-map/node-editors/configurator/configurator.component.scss new file mode 100644 index 00000000..ae93f5c6 --- /dev/null +++ b/src/app/components/project-map/node-editors/configurator/configurator.component.scss @@ -0,0 +1,7 @@ +.form-field { + width: 100%; +} + +.select { + width: 100%; +} diff --git a/src/app/components/project-map/node-editors/configurator/vpcs/configurator-vpcs.component.html b/src/app/components/project-map/node-editors/configurator/vpcs/configurator-vpcs.component.html new file mode 100644 index 00000000..e4edc149 --- /dev/null +++ b/src/app/components/project-map/node-editors/configurator/vpcs/configurator-vpcs.component.html @@ -0,0 +1,39 @@ +

Configurator for node {{node.name}}

+ + + +
+ + +
diff --git a/src/app/components/project-map/node-editors/configurator/vpcs/configurator-vpcs.component.ts b/src/app/components/project-map/node-editors/configurator/vpcs/configurator-vpcs.component.ts new file mode 100644 index 00000000..c2073860 --- /dev/null +++ b/src/app/components/project-map/node-editors/configurator/vpcs/configurator-vpcs.component.ts @@ -0,0 +1,58 @@ +import { Component, OnInit, Input } from "@angular/core"; +import { FormBuilder, FormGroup, Validators, FormControl } from '@angular/forms'; +import { VpcsConfigurationService } from '../../../../../services/vpcs-configuration.service'; +import { Node } from '../../../../../cartography/models/node'; +import { Server } from '../../../../../models/server'; +import { NodeService } from '../../../../../services/node.service'; +import { ToasterService } from '../../../../../services/toaster.service'; +import { MatDialogRef } from '@angular/material'; + + +@Component({ + selector: 'app-configurator-vpcs', + templateUrl: './configurator-vpcs.component.html', + styleUrls: ['../configurator.component.scss'] +}) +export class ConfiguratorDialogVpcsComponent implements OnInit { + server: Server; + node: Node; + + inputForm: FormGroup; + consoleTypes: string[] = []; + categories = []; + + constructor( + public dialogRef: MatDialogRef, + public nodeService: NodeService, + private toasterService: ToasterService, + private formBuilder: FormBuilder, + private vpcsConfigurationService: VpcsConfigurationService + ) { + this.inputForm = this.formBuilder.group({ + name: new FormControl('', Validators.required) + }); + } + + ngOnInit() { + this.nodeService.getNode(this.server, this.node).subscribe((node: Node) => { + this.node = node; + this.getConfiguration(); + }) + } + + getConfiguration() { + this.consoleTypes = this.vpcsConfigurationService.getConsoleTypes(); + this.categories = this.vpcsConfigurationService.getCategories(); + } + + onSaveClick() { + this.nodeService.updateNode(this.server, this.node).subscribe(() => { + this.toasterService.success(`Node ${this.node.name} updated.`); + this.onCancelClick(); + }); + } + + onCancelClick() { + this.dialogRef.close(); + } +} diff --git a/src/app/services/node.service.ts b/src/app/services/node.service.ts index 111b5106..9beb0d6f 100644 --- a/src/app/services/node.service.ts +++ b/src/app/services/node.service.ts @@ -86,6 +86,13 @@ export class NodeService { }); } + updateNode(server: Server, node: Node): Observable { + return this.httpServer.put(server, `/projects/${node.project_id}/nodes/${node.node_id}`, { + console_type: node.console_type, + name: node.name + }); + } + delete(server: Server, node: Node) { return this.httpServer.delete(server, `/projects/${node.project_id}/nodes/${node.node_id}`); } @@ -99,6 +106,10 @@ export class NodeService { }); } + getNode(server: Server, node: Node) { + return this.httpServer.get(server, `/projects/${node.project_id}/nodes/${node.node_id}`) + } + getConfiguration(server: Server, node: Node) { let urlPath: string = `/projects/${node.project_id}/nodes/${node.node_id}`