Install required files
-
+
{{ applianceToInstall.name }} version {{ version.name }}
@@ -250,6 +212,7 @@
Add new template
[uploader]="uploaderImage"
/>
+
-
- Server type
-
- Install the appliance locally
- Install the appliance on the GNS3 VM
-
-
+
-
- Server type
-
- Install the appliance locally
- Install the appliance on the GNS3 VM
-
-
Install required files
-
- Server type
-
- Install the appliance locally
- Install the appliance on the GNS3 VM
-
-
Install required files
-
-
-
-
+
+
+
+
diff --git a/src/app/components/project-map/node-editors/configurator/cloud/configurator-cloud.component.ts b/src/app/components/project-map/node-editors/configurator/cloud/configurator-cloud.component.ts
index fd34de07b..52add1389 100644
--- a/src/app/components/project-map/node-editors/configurator/cloud/configurator-cloud.component.ts
+++ b/src/app/components/project-map/node-editors/configurator/cloud/configurator-cloud.component.ts
@@ -1,11 +1,11 @@
import { Component, OnInit, ViewChild } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialogRef } from '@angular/material/dialog';
import { Node } from '../../../../../cartography/models/node';
import { UdpTunnelsComponent } from '../../../../../components/preferences/common/udp-tunnels/udp-tunnels.component';
import { PortsMappingEntity } from '../../../../../models/ethernetHub/ports-mapping-enity';
import { QemuBinary } from '../../../../../models/qemu/qemu-binary';
-import { Server } from '../../../../../models/server';
+import{ Controller } from '../../../../../models/controller';
import { BuiltInTemplatesConfigurationService } from '../../../../../services/built-in-templates-configuration.service';
import { NodeService } from '../../../../../services/node.service';
import { ToasterService } from '../../../../../services/toaster.service';
@@ -16,12 +16,11 @@ import { ToasterService } from '../../../../../services/toaster.service';
styleUrls: ['../configurator.component.scss'],
})
export class ConfiguratorDialogCloudComponent implements OnInit {
- server: Server;
+ controller:Controller ;
node: Node;
name: string;
- generalSettingsForm: FormGroup;
+ generalSettingsForm: UntypedFormGroup;
consoleTypes: string[] = [];
- binaries: QemuBinary[] = [];
onCloseOptions = [];
bootPriorities = [];
diskInterfaces: string[] = [];
@@ -42,16 +41,16 @@ export class ConfiguratorDialogCloudComponent implements OnInit {
public dialogRef: MatDialogRef
,
public nodeService: NodeService,
private toasterService: ToasterService,
- private formBuilder: FormBuilder,
+ private formBuilder: UntypedFormBuilder,
private builtInTemplatesConfigurationService: BuiltInTemplatesConfigurationService
) {
this.generalSettingsForm = this.formBuilder.group({
- name: new FormControl('', Validators.required),
+ name: new UntypedFormControl('', Validators.required),
});
}
ngOnInit() {
- this.nodeService.getNode(this.server, this.node).subscribe((node: Node) => {
+ this.nodeService.getNode(this.controller, this.node).subscribe((node: Node) => {
this.node = node;
this.name = node.name;
this.getConfiguration();
@@ -98,7 +97,7 @@ export class ConfiguratorDialogCloudComponent implements OnInit {
.concat(this.portsMappingEthernet)
.concat(this.portsMappingTap);
- this.nodeService.updateNode(this.server, this.node).subscribe(() => {
+ this.nodeService.updateNode(this.controller, this.node).subscribe(() => {
this.toasterService.success(`Node ${this.node.name} updated.`);
this.onCancelClick();
});
diff --git a/src/app/components/project-map/node-editors/configurator/docker/configurator-docker.component.html b/src/app/components/project-map/node-editors/configurator/docker/configurator-docker.component.html
index d093bc2e6..15c42a254 100644
--- a/src/app/components/project-map/node-editors/configurator/docker/configurator-docker.component.html
+++ b/src/app/components/project-map/node-editors/configurator/docker/configurator-docker.component.html
@@ -32,8 +32,17 @@ Configurator for node {{ name }}
/>
+
+
+ MB
+
+
+
+
+
+
@@ -99,9 +108,9 @@ Extra hosts
- Additional directories
+ Additional volumes
-
+
diff --git a/src/app/components/project-map/node-editors/configurator/docker/configurator-docker.component.ts b/src/app/components/project-map/node-editors/configurator/docker/configurator-docker.component.ts
index 5597cdd87..0a734ea01 100644
--- a/src/app/components/project-map/node-editors/configurator/docker/configurator-docker.component.ts
+++ b/src/app/components/project-map/node-editors/configurator/docker/configurator-docker.component.ts
@@ -1,13 +1,14 @@
import { Component, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialog, MatDialogRef } from '@angular/material/dialog';
import { Node } from '../../../../../cartography/models/node';
-import { Server } from '../../../../../models/server';
+import{ Controller } from '../../../../../models/controller';
import { DockerConfigurationService } from '../../../../../services/docker-configuration.service';
import { NodeService } from '../../../../../services/node.service';
import { ToasterService } from '../../../../../services/toaster.service';
import { ConfigureCustomAdaptersDialogComponent } from './configure-custom-adapters/configure-custom-adapters.component';
import { EditNetworkConfigurationDialogComponent } from './edit-network-configuration/edit-network-configuration.component';
+import { NonNegativeValidator } from '../../../../../validators/non-negative-validator';
@Component({
selector: 'app-configurator-docker',
@@ -15,10 +16,10 @@ import { EditNetworkConfigurationDialogComponent } from './edit-network-configur
styleUrls: ['../configurator.component.scss'],
})
export class ConfiguratorDialogDockerComponent implements OnInit {
- server: Server;
+ controller:Controller ;
node: Node;
name: string;
- generalSettingsForm: FormGroup;
+ generalSettingsForm: UntypedFormGroup;
consoleTypes: string[] = [];
consoleResolutions: string[] = ['2560x1440', '1920x1080', '1680x1050', '1440x900', '1366x768', '1280x1024', '1280x800', '1024x768', '800x600', '640x480'];
private conf = {
@@ -27,37 +28,34 @@ export class ConfiguratorDialogDockerComponent implements OnInit {
disableClose: true,
};
dialogRef;
- additionalDirectories: string = "";
constructor(
- public dialogReference: MatDialogRef,
- public nodeService: NodeService,
- private toasterService: ToasterService,
- private formBuilder: FormBuilder,
- private dockerConfigurationService: DockerConfigurationService,
- private dialog: MatDialog
+ public dialogReference: MatDialogRef,
+ public nodeService: NodeService,
+ private toasterService: ToasterService,
+ private formBuilder: UntypedFormBuilder,
+ private dockerConfigurationService: DockerConfigurationService,
+ private nonNegativeValidator: NonNegativeValidator,
+ private dialog: MatDialog
) {
- this.generalSettingsForm = this.formBuilder.group({
- name: new FormControl('', Validators.required),
- adapter: new FormControl('', Validators.required),
- startCommand: new FormControl(''),
- consoleHttpPort: new FormControl('', Validators.required),
- consoleHttpPath: new FormControl('', Validators.required),
- });
+ this.generalSettingsForm = this.formBuilder.group({
+ name: new UntypedFormControl('', Validators.required),
+ adapter: new UntypedFormControl('', Validators.required),
+ memory: new UntypedFormControl('', nonNegativeValidator.get),
+ cpus: new UntypedFormControl('', nonNegativeValidator.get),
+ startCommand: new UntypedFormControl(''),
+ consoleHttpPort: new UntypedFormControl('', Validators.required),
+ consoleHttpPath: new UntypedFormControl('', Validators.required)
+ });
}
ngOnInit() {
- this.nodeService.getNode(this.server, this.node).subscribe((node: Node) => {
- this.node = node;
- this.name = node.name;
- this.getConfiguration();
- if (this.node.properties.extra_volumes && this.node.properties.extra_volumes.length>0) {
- for (let index = 0; index < this.node.properties.extra_volumes.length - 1; index++) {
- this.additionalDirectories = this.additionalDirectories + this.node.properties.extra_volumes[index] + "\n";
- }
- this.additionalDirectories = this.additionalDirectories + this.node.properties.extra_volumes[this.node.properties.extra_volumes.length - 1];
- }
- });
+ this.nodeService.getNode(this.controller, this.node).subscribe((node: Node) => {
+ this.node = node;
+ this.name = node.name;
+ this.getConfiguration();
+ if (!this.node.properties.cpus) this.node.properties.cpus = 0.0;
+ });
}
getConfiguration() {
@@ -67,29 +65,20 @@ export class ConfiguratorDialogDockerComponent implements OnInit {
configureCustomAdapters() {
this.dialogRef = this.dialog.open(ConfigureCustomAdaptersDialogComponent, this.conf);
let instance = this.dialogRef.componentInstance;
- instance.server = this.server;
+ instance.controller = this.controller;
instance.node = this.node;
}
editNetworkConfiguration() {
this.dialogRef = this.dialog.open(EditNetworkConfigurationDialogComponent, this.conf);
let instance = this.dialogRef.componentInstance;
- instance.server = this.server;
+ instance.controller = this.controller;
instance.node = this.node;
}
onSaveClick() {
- var extraVolumes = this.additionalDirectories.split("\n").filter(elem => elem != "");
- for (const item of extraVolumes) {
- console.log(item);
- if (!item.startsWith("/")) {
- this.toasterService.error(`Wrong format for additional directories.`);
- return;
- }
- }
if (this.generalSettingsForm.valid) {
- this.node.properties.extra_volumes = extraVolumes;
- this.nodeService.updateNode(this.server, this.node).subscribe(() => {
+ this.nodeService.updateNode(this.controller, this.node).subscribe(() => {
this.toasterService.success(`Node ${this.node.name} updated.`);
this.onCancelClick();
});
diff --git a/src/app/components/project-map/node-editors/configurator/docker/configure-custom-adapters/configure-custom-adapters.component.ts b/src/app/components/project-map/node-editors/configurator/docker/configure-custom-adapters/configure-custom-adapters.component.ts
index 2441fc826..b6ea74e4b 100644
--- a/src/app/components/project-map/node-editors/configurator/docker/configure-custom-adapters/configure-custom-adapters.component.ts
+++ b/src/app/components/project-map/node-editors/configurator/docker/configure-custom-adapters/configure-custom-adapters.component.ts
@@ -1,8 +1,8 @@
import { Component, OnInit } from '@angular/core';
-import { FormBuilder } from '@angular/forms';
+import { UntypedFormBuilder } from '@angular/forms';
import { MatDialogRef } from '@angular/material/dialog';
import { Node } from '../../../../../../cartography/models/node';
-import { Server } from '../../../../../../models/server';
+import{ Controller } from '../../../../../../models/controller';
import { DockerConfigurationService } from '../../../../../../services/docker-configuration.service';
import { NodeService } from '../../../../../../services/node.service';
import { ToasterService } from '../../../../../../services/toaster.service';
@@ -13,7 +13,7 @@ import { ToasterService } from '../../../../../../services/toaster.service';
styleUrls: ['./configure-custom-adapters.component.scss'],
})
export class ConfigureCustomAdaptersDialogComponent implements OnInit {
- server: Server;
+ controller:Controller ;
node: Node;
displayedColumns: string[] = ['adapter_number', 'port_name'];
adapters: CustomAdapter[] = [];
@@ -22,7 +22,7 @@ export class ConfigureCustomAdaptersDialogComponent implements OnInit {
public dialogRef: MatDialogRef,
public nodeService: NodeService,
private toasterService: ToasterService,
- private formBuilder: FormBuilder,
+ private formBuilder: UntypedFormBuilder,
private dockerConfigurationService: DockerConfigurationService
) {}
@@ -42,7 +42,7 @@ export class ConfigureCustomAdaptersDialogComponent implements OnInit {
onSaveClick() {
this.node.custom_adapters = this.adapters;
- this.nodeService.updateNodeWithCustomAdapters(this.server, this.node).subscribe(() => {
+ this.nodeService.updateNodeWithCustomAdapters(this.controller, this.node).subscribe(() => {
this.onCancelClick();
this.toasterService.success(`Configuration saved for node ${this.node.name}`);
});
diff --git a/src/app/components/project-map/node-editors/configurator/docker/edit-network-configuration/edit-network-configuration.component.ts b/src/app/components/project-map/node-editors/configurator/docker/edit-network-configuration/edit-network-configuration.component.ts
index 2f298783c..0984400a5 100644
--- a/src/app/components/project-map/node-editors/configurator/docker/edit-network-configuration/edit-network-configuration.component.ts
+++ b/src/app/components/project-map/node-editors/configurator/docker/edit-network-configuration/edit-network-configuration.component.ts
@@ -1,7 +1,7 @@
import { Component, OnInit } from '@angular/core';
import { MatDialogRef } from '@angular/material/dialog';
import { Node } from '../../../../../../cartography/models/node';
-import { Server } from '../../../../../../models/server';
+import{ Controller } from '../../../../../../models/controller';
import { NodeService } from '../../../../../../services/node.service';
import { ToasterService } from '../../../../../../services/toaster.service';
@@ -11,7 +11,7 @@ import { ToasterService } from '../../../../../../services/toaster.service';
styleUrls: ['./edit-network-configuration.component.scss'],
})
export class EditNetworkConfigurationDialogComponent implements OnInit {
- server: Server;
+ controller:Controller ;
node: Node;
configuration: string;
@@ -22,14 +22,14 @@ export class EditNetworkConfigurationDialogComponent implements OnInit {
) {}
ngOnInit() {
- this.nodeService.getNetworkConfiguration(this.server, this.node).subscribe((response: string) => {
+ this.nodeService.getNetworkConfiguration(this.controller, this.node).subscribe((response: string) => {
this.configuration = response;
});
}
onSaveClick() {
this.nodeService
- .saveNetworkConfiguration(this.server, this.node, this.configuration)
+ .saveNetworkConfiguration(this.controller, this.node, this.configuration)
.subscribe((response: string) => {
this.onCancelClick();
this.toasterService.success(`Configuration for node ${this.node.name} saved.`);
diff --git a/src/app/components/project-map/node-editors/configurator/ethernet-switch/configurator-ethernet-switch.component.ts b/src/app/components/project-map/node-editors/configurator/ethernet-switch/configurator-ethernet-switch.component.ts
index 296182c06..63c78b7b7 100644
--- a/src/app/components/project-map/node-editors/configurator/ethernet-switch/configurator-ethernet-switch.component.ts
+++ b/src/app/components/project-map/node-editors/configurator/ethernet-switch/configurator-ethernet-switch.component.ts
@@ -1,9 +1,9 @@
import { Component, OnInit, ViewChild } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialogRef } from '@angular/material/dialog';
import { Node } from '../../../../../cartography/models/node';
import { PortsComponent } from '../../../../../components/preferences/common/ports/ports.component';
-import { Server } from '../../../../../models/server';
+import{ Controller } from '../../../../../models/controller';
import { BuiltInTemplatesConfigurationService } from '../../../../../services/built-in-templates-configuration.service';
import { NodeService } from '../../../../../services/node.service';
import { ToasterService } from '../../../../../services/toaster.service';
@@ -15,26 +15,26 @@ import { ToasterService } from '../../../../../services/toaster.service';
})
export class ConfiguratorDialogEthernetSwitchComponent implements OnInit {
@ViewChild(PortsComponent) portsComponent: PortsComponent;
- server: Server;
+ controller:Controller ;
node: Node;
name: string;
- inputForm: FormGroup;
+ inputForm: UntypedFormGroup;
consoleTypes: string[] = [];
constructor(
public dialogRef: MatDialogRef,
public nodeService: NodeService,
private toasterService: ToasterService,
- private formBuilder: FormBuilder,
+ private formBuilder: UntypedFormBuilder,
private ethernetSwitchesConfigurationService: BuiltInTemplatesConfigurationService
) {
this.inputForm = this.formBuilder.group({
- name: new FormControl('', Validators.required),
+ name: new UntypedFormControl('', Validators.required),
});
}
ngOnInit() {
- this.nodeService.getNode(this.server, this.node).subscribe((node: Node) => {
+ this.nodeService.getNode(this.controller, this.node).subscribe((node: Node) => {
this.node = node;
this.name = this.node.name;
this.getConfiguration();
@@ -48,7 +48,7 @@ export class ConfiguratorDialogEthernetSwitchComponent implements OnInit {
onSaveClick() {
if (this.inputForm.valid) {
this.node.properties.ports_mapping = this.portsComponent.ethernetPorts;
- this.nodeService.updateNode(this.server, this.node).subscribe(() => {
+ this.nodeService.updateNode(this.controller, this.node).subscribe(() => {
this.toasterService.success(`Node ${this.node.name} updated.`);
this.onCancelClick();
});
diff --git a/src/app/components/project-map/node-editors/configurator/ethernet_hub/configurator-ethernet-hub.component.ts b/src/app/components/project-map/node-editors/configurator/ethernet_hub/configurator-ethernet-hub.component.ts
index 4b4e2e47c..813ae377c 100644
--- a/src/app/components/project-map/node-editors/configurator/ethernet_hub/configurator-ethernet-hub.component.ts
+++ b/src/app/components/project-map/node-editors/configurator/ethernet_hub/configurator-ethernet-hub.component.ts
@@ -1,8 +1,8 @@
import { Component, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialogRef } from '@angular/material/dialog';
import { Node } from '../../../../../cartography/models/node';
-import { Server } from '../../../../../models/server';
+import{ Controller } from '../../../../../models/controller';
import { NodeService } from '../../../../../services/node.service';
import { ToasterService } from '../../../../../services/toaster.service';
import { VpcsConfigurationService } from '../../../../../services/vpcs-configuration.service';
@@ -13,10 +13,10 @@ import { VpcsConfigurationService } from '../../../../../services/vpcs-configura
styleUrls: ['../configurator.component.scss'],
})
export class ConfiguratorDialogEthernetHubComponent implements OnInit {
- server: Server;
+ controller:Controller ;
node: Node;
numberOfPorts: number;
- inputForm: FormGroup;
+ inputForm: UntypedFormGroup;
consoleTypes: string[] = [];
categories = [];
name: string;
@@ -25,16 +25,16 @@ export class ConfiguratorDialogEthernetHubComponent implements OnInit {
public dialogRef: MatDialogRef,
public nodeService: NodeService,
private toasterService: ToasterService,
- private formBuilder: FormBuilder,
+ private formBuilder: UntypedFormBuilder,
private vpcsConfigurationService: VpcsConfigurationService
) {
this.inputForm = this.formBuilder.group({
- name: new FormControl('', Validators.required),
+ name: new UntypedFormControl('', Validators.required),
});
}
ngOnInit() {
- this.nodeService.getNode(this.server, this.node).subscribe((node: Node) => {
+ this.nodeService.getNode(this.controller, this.node).subscribe((node: Node) => {
this.node = node;
this.name = this.node.name;
this.numberOfPorts = this.node.ports.length;
@@ -57,7 +57,7 @@ export class ConfiguratorDialogEthernetHubComponent implements OnInit {
});
}
- this.nodeService.updateNode(this.server, this.node).subscribe(() => {
+ this.nodeService.updateNode(this.controller, this.node).subscribe(() => {
this.toasterService.success(`Node ${this.node.name} updated.`);
this.onCancelClick();
});
diff --git a/src/app/components/project-map/node-editors/configurator/ios/configurator-ios.component.ts b/src/app/components/project-map/node-editors/configurator/ios/configurator-ios.component.ts
index 9090e1f5a..a7ca7d4f4 100644
--- a/src/app/components/project-map/node-editors/configurator/ios/configurator-ios.component.ts
+++ b/src/app/components/project-map/node-editors/configurator/ios/configurator-ios.component.ts
@@ -1,8 +1,8 @@
import { Component, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialogRef } from '@angular/material/dialog';
import { Node } from '../../../../../cartography/models/node';
-import { Server } from '../../../../../models/server';
+import{ Controller } from '../../../../../models/controller';
import { IosConfigurationService } from '../../../../../services/ios-configuration.service';
import { NodeService } from '../../../../../services/node.service';
import { ToasterService } from '../../../../../services/toaster.service';
@@ -13,32 +13,32 @@ import { ToasterService } from '../../../../../services/toaster.service';
styleUrls: ['../configurator.component.scss'],
})
export class ConfiguratorDialogIosComponent implements OnInit {
- server: Server;
+ controller:Controller ;
node: Node;
name: string;
- generalSettingsForm: FormGroup;
- memoryForm: FormGroup;
+ generalSettingsForm: UntypedFormGroup;
+ memoryForm: UntypedFormGroup;
consoleTypes: string[] = [];
constructor(
public dialogRef: MatDialogRef,
public nodeService: NodeService,
private toasterService: ToasterService,
- private formBuilder: FormBuilder,
+ private formBuilder: UntypedFormBuilder,
private configurationService: IosConfigurationService
) {
this.generalSettingsForm = this.formBuilder.group({
- name: new FormControl('', Validators.required),
+ name: new UntypedFormControl('', Validators.required),
});
this.memoryForm = this.formBuilder.group({
- ram: new FormControl('', Validators.required),
- nvram: new FormControl('', Validators.required),
+ ram: new UntypedFormControl('', Validators.required),
+ nvram: new UntypedFormControl('', Validators.required),
});
}
ngOnInit() {
- this.nodeService.getNode(this.server, this.node).subscribe((node: Node) => {
+ this.nodeService.getNode(this.controller, this.node).subscribe((node: Node) => {
this.node = node;
this.name = node.name;
this.getConfiguration();
@@ -51,7 +51,7 @@ export class ConfiguratorDialogIosComponent implements OnInit {
onSaveClick() {
if (this.generalSettingsForm.valid && this.memoryForm.valid) {
- this.nodeService.updateNode(this.server, this.node).subscribe(() => {
+ this.nodeService.updateNode(this.controller, this.node).subscribe(() => {
this.toasterService.success(`Node ${this.node.name} updated.`);
this.onCancelClick();
});
diff --git a/src/app/components/project-map/node-editors/configurator/iou/configurator-iou.component.ts b/src/app/components/project-map/node-editors/configurator/iou/configurator-iou.component.ts
index b336bcc64..c98066e63 100644
--- a/src/app/components/project-map/node-editors/configurator/iou/configurator-iou.component.ts
+++ b/src/app/components/project-map/node-editors/configurator/iou/configurator-iou.component.ts
@@ -1,8 +1,8 @@
import { Component, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialogRef } from '@angular/material/dialog';
import { Node } from '../../../../../cartography/models/node';
-import { Server } from '../../../../../models/server';
+import{ Controller } from '../../../../../models/controller';
import { IouConfigurationService } from '../../../../../services/iou-configuration.service';
import { NodeService } from '../../../../../services/node.service';
import { ToasterService } from '../../../../../services/toaster.service';
@@ -13,32 +13,32 @@ import { ToasterService } from '../../../../../services/toaster.service';
styleUrls: ['../configurator.component.scss'],
})
export class ConfiguratorDialogIouComponent implements OnInit {
- server: Server;
+ controller:Controller ;
node: Node;
name: string;
- generalSettingsForm: FormGroup;
- networkForm: FormGroup;
+ generalSettingsForm: UntypedFormGroup;
+ networkForm: UntypedFormGroup;
consoleTypes: string[] = [];
constructor(
public dialogRef: MatDialogRef,
public nodeService: NodeService,
private toasterService: ToasterService,
- private formBuilder: FormBuilder,
+ private formBuilder: UntypedFormBuilder,
private configurationService: IouConfigurationService
) {
this.generalSettingsForm = this.formBuilder.group({
- name: new FormControl('', Validators.required),
+ name: new UntypedFormControl('', Validators.required),
});
this.networkForm = this.formBuilder.group({
- ethernetAdapters: new FormControl('', Validators.required),
- serialAdapters: new FormControl('', Validators.required),
+ ethernetAdapters: new UntypedFormControl('', Validators.required),
+ serialAdapters: new UntypedFormControl('', Validators.required),
});
}
ngOnInit() {
- this.nodeService.getNode(this.server, this.node).subscribe((node: Node) => {
+ this.nodeService.getNode(this.controller, this.node).subscribe((node: Node) => {
this.node = node;
this.name = node.name;
this.getConfiguration();
@@ -51,7 +51,7 @@ export class ConfiguratorDialogIouComponent implements OnInit {
onSaveClick() {
if (this.generalSettingsForm.valid && this.networkForm.valid) {
- this.nodeService.updateNode(this.server, this.node).subscribe(() => {
+ this.nodeService.updateNode(this.controller, this.node).subscribe(() => {
this.toasterService.success(`Node ${this.node.name} updated.`);
this.onCancelClick();
});
diff --git a/src/app/components/project-map/node-editors/configurator/nat/configurator-nat.component.ts b/src/app/components/project-map/node-editors/configurator/nat/configurator-nat.component.ts
index c42da4d12..be80af17b 100644
--- a/src/app/components/project-map/node-editors/configurator/nat/configurator-nat.component.ts
+++ b/src/app/components/project-map/node-editors/configurator/nat/configurator-nat.component.ts
@@ -1,8 +1,8 @@
import { Component, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialogRef } from '@angular/material/dialog';
import { Node } from '../../../../../cartography/models/node';
-import { Server } from '../../../../../models/server';
+import{ Controller } from '../../../../../models/controller';
import { NodeService } from '../../../../../services/node.service';
import { ToasterService } from '../../../../../services/toaster.service';
@@ -12,24 +12,24 @@ import { ToasterService } from '../../../../../services/toaster.service';
styleUrls: ['../configurator.component.scss'],
})
export class ConfiguratorDialogNatComponent implements OnInit {
- server: Server;
+ controller:Controller ;
node: Node;
name: string;
- generalSettingsForm: FormGroup;
+ generalSettingsForm: UntypedFormGroup;
constructor(
public dialogRef: MatDialogRef,
public nodeService: NodeService,
private toasterService: ToasterService,
- private formBuilder: FormBuilder
+ private formBuilder: UntypedFormBuilder
) {
this.generalSettingsForm = this.formBuilder.group({
- name: new FormControl('', Validators.required),
+ name: new UntypedFormControl('', Validators.required),
});
}
ngOnInit() {
- this.nodeService.getNode(this.server, this.node).subscribe((node: Node) => {
+ this.nodeService.getNode(this.controller, this.node).subscribe((node: Node) => {
this.node = node;
this.name = node.name;
});
@@ -37,7 +37,7 @@ export class ConfiguratorDialogNatComponent implements OnInit {
onSaveClick() {
if (this.generalSettingsForm.valid) {
- this.nodeService.updateNode(this.server, this.node).subscribe(() => {
+ this.nodeService.updateNode(this.controller, this.node).subscribe(() => {
this.toasterService.success(`Node ${this.node.name} updated.`);
this.onCancelClick();
});
diff --git a/src/app/components/project-map/node-editors/configurator/qemu/configurator-qemu.component.html b/src/app/components/project-map/node-editors/configurator/qemu/configurator-qemu.component.html
index 190fb0fb4..97a483c62 100644
--- a/src/app/components/project-map/node-editors/configurator/qemu/configurator-qemu.component.html
+++ b/src/app/components/project-map/node-editors/configurator/qemu/configurator-qemu.component.html
@@ -11,6 +11,13 @@ Configurator for node {{ name }}
+
+
+
+ {{ platform }}
+
+
+
Configurator for node {{ name }}
-
-
-
- {{ binary.path }}
-
-
-
+
@@ -143,9 +144,7 @@ Configurator for node {{ name }}
-
- Use the legacy networking mode
-
+
Replicate network connection state
@@ -241,6 +240,9 @@ Configurator for node {{ name }}
Enable the Trusted Platform Module (TPM)
+
+ Enable the UEFI boot mode
+
diff --git a/src/app/components/project-map/node-editors/configurator/qemu/configurator-qemu.component.ts b/src/app/components/project-map/node-editors/configurator/qemu/configurator-qemu.component.ts
index e03d477c1..656c2e21e 100644
--- a/src/app/components/project-map/node-editors/configurator/qemu/configurator-qemu.component.ts
+++ b/src/app/components/project-map/node-editors/configurator/qemu/configurator-qemu.component.ts
@@ -1,11 +1,11 @@
import { Component, OnInit, ViewChild } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialog, MatDialogRef } from '@angular/material/dialog';
import { Node } from '../../../../../cartography/models/node';
import { CustomAdaptersTableComponent } from '../../../../../components/preferences/common/custom-adapters-table/custom-adapters-table.component';
import { QemuBinary } from '../../../../../models/qemu/qemu-binary';
import { QemuImage } from '../../../../../models/qemu/qemu-image';
-import { Server } from '../../../../../models/server';
+import{ Controller } from '../../../../../models/controller';
import { NodeService } from '../../../../../services/node.service';
import { QemuConfigurationService } from '../../../../../services/qemu-configuration.service';
import { QemuService } from '../../../../../services/qemu.service';
@@ -18,12 +18,11 @@ import { QemuImageCreatorComponent } from './qemu-image-creator/qemu-image-creat
styleUrls: ['../configurator.component.scss'],
})
export class ConfiguratorDialogQemuComponent implements OnInit {
- server: Server;
+ controller:Controller ;
node: Node;
name: string;
- generalSettingsForm: FormGroup;
+ generalSettingsForm: UntypedFormGroup;
consoleTypes: string[] = [];
- binaries: QemuBinary[] = [];
onCloseOptions = [];
bootPriorities = [];
diskInterfaces: string[] = [];
@@ -31,6 +30,7 @@ export class ConfiguratorDialogQemuComponent implements OnInit {
displayedColumns: string[] = ['adapter_number', 'port_name', 'adapter_type', 'actions'];
networkTypes = [];
qemuImages: QemuImage[] = [];
+ selectPlatform: string[] = [];
private conf = {
autoFocus: false,
@@ -46,36 +46,34 @@ export class ConfiguratorDialogQemuComponent implements OnInit {
public dialogRef: MatDialogRef
,
public nodeService: NodeService,
private toasterService: ToasterService,
- private formBuilder: FormBuilder,
+ private formBuilder: UntypedFormBuilder,
private qemuService: QemuService,
private qemuConfigurationService: QemuConfigurationService
) {
this.generalSettingsForm = this.formBuilder.group({
- name: new FormControl('', Validators.required),
- ram: new FormControl('', Validators.required),
+ name: new UntypedFormControl('', Validators.required),
+ ram: new UntypedFormControl('', Validators.required),
});
}
ngOnInit() {
- this.nodeService.getNode(this.server, this.node).subscribe((node: Node) => {
+ this.nodeService.getNode(this.controller, this.node).subscribe((node: Node) => {
this.node = node;
this.name = node.name;
this.getConfiguration();
});
- this.qemuService.getBinaries(this.server).subscribe((qemuBinaries: QemuBinary[]) => {
- this.binaries = qemuBinaries;
- });
-
- this.qemuService.getImages(this.server).subscribe((qemuImages: QemuImage[]) => {
+ this.qemuService.getImages(this.controller).subscribe((qemuImages: QemuImage[]) => {
this.qemuImages = qemuImages;
});
+ this.selectPlatform = this.qemuConfigurationService.getPlatform();
+
}
openQemuImageCreator() {
this.dialogRefQemuImageCreator = this.dialog.open(QemuImageCreatorComponent, this.conf);
let instance = this.dialogRefQemuImageCreator.componentInstance;
- instance.server = this.server;
+ instance.controller = this.controller;
}
uploadCdromImageFile(event) {
@@ -116,7 +114,7 @@ export class ConfiguratorDialogQemuComponent implements OnInit {
this.node.properties.adapters = this.node.custom_adapters.length;
- this.nodeService.updateNodeWithCustomAdapters(this.server, this.node).subscribe(() => {
+ this.nodeService.updateNodeWithCustomAdapters(this.controller, this.node).subscribe(() => {
this.toasterService.success(`Node ${this.node.name} updated.`);
this.onCancelClick();
});
diff --git a/src/app/components/project-map/node-editors/configurator/qemu/qemu-image-creator/qemu-image-creator.component.ts b/src/app/components/project-map/node-editors/configurator/qemu/qemu-image-creator/qemu-image-creator.component.ts
index 5287f987a..40a215d5f 100644
--- a/src/app/components/project-map/node-editors/configurator/qemu/qemu-image-creator/qemu-image-creator.component.ts
+++ b/src/app/components/project-map/node-editors/configurator/qemu/qemu-image-creator/qemu-image-creator.component.ts
@@ -1,8 +1,8 @@
import { Component, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialogRef } from '@angular/material/dialog';
import { QemuImg } from '../../../../../../models/qemu/qemu-img';
-import { Server } from '../../../../../../models/server';
+import{ Controller } from '../../../../../../models/controller';
import { NodeService } from '../../../../../../services/node.service';
import { QemuService } from '../../../../../../services/qemu.service';
import { ToasterService } from '../../../../../../services/toaster.service';
@@ -13,7 +13,7 @@ import { ToasterService } from '../../../../../../services/toaster.service';
styleUrls: ['../../configurator.component.scss'],
})
export class QemuImageCreatorComponent implements OnInit {
- server: Server;
+ controller:Controller ;
qemuImg: QemuImg;
formatOptions: string[] = ['qcow2', 'qcow', 'vhd', 'vdi', 'vmdk', 'raw'];
@@ -75,19 +75,19 @@ export class QemuImageCreatorComponent implements OnInit {
lazyRefcountsOptions: string[] = ['off', 'on'];
refcountBitsOptions: number[] = [1, 2, 4, 8, 16, 32, 64];
zeroedGrainOptions: string[] = ['on', 'off'];
- inputForm: FormGroup;
+ inputForm: UntypedFormGroup;
constructor(
public dialogRef: MatDialogRef,
public nodeService: NodeService,
private toasterService: ToasterService,
- private formBuilder: FormBuilder,
+ private formBuilder: UntypedFormBuilder,
private qemuService: QemuService
) {
this.inputForm = this.formBuilder.group({
- qemu_img: new FormControl('', Validators.required),
- path: new FormControl('', Validators.required),
- size: new FormControl('', Validators.required),
+ qemu_img: new UntypedFormControl('', Validators.required),
+ path: new UntypedFormControl('', Validators.required),
+ size: new UntypedFormControl('', Validators.required),
});
}
@@ -101,7 +101,7 @@ export class QemuImageCreatorComponent implements OnInit {
onSaveClick() {
if (this.inputForm.valid && this.qemuImg.format) {
- this.qemuService.addImage(this.server, this.qemuImg).subscribe(() => {
+ this.qemuService.addImage(this.controller, this.qemuImg).subscribe(() => {
this.dialogRef.close();
});
} else {
diff --git a/src/app/components/project-map/node-editors/configurator/switch/configurator-switch.component.ts b/src/app/components/project-map/node-editors/configurator/switch/configurator-switch.component.ts
index ada8e2041..51692af7d 100644
--- a/src/app/components/project-map/node-editors/configurator/switch/configurator-switch.component.ts
+++ b/src/app/components/project-map/node-editors/configurator/switch/configurator-switch.component.ts
@@ -1,8 +1,8 @@
import { Component, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialogRef } from '@angular/material/dialog';
import { Node } from '../../../../../cartography/models/node';
-import { Server } from '../../../../../models/server';
+import{ Controller } from '../../../../../models/controller';
import { NodeService } from '../../../../../services/node.service';
import { ToasterService } from '../../../../../services/toaster.service';
@@ -12,11 +12,11 @@ import { ToasterService } from '../../../../../services/toaster.service';
styleUrls: ['../configurator.component.scss', '../../../../preferences/preferences.component.scss'],
})
export class ConfiguratorDialogSwitchComponent implements OnInit {
- server: Server;
+ controller:Controller ;
node: Node;
name: string;
- nameForm: FormGroup;
- inputForm: FormGroup;
+ nameForm: UntypedFormGroup;
+ inputForm: UntypedFormGroup;
consoleTypes: string[] = [];
nodeMappings = new Map();
@@ -33,22 +33,22 @@ export class ConfiguratorDialogSwitchComponent implements OnInit {
public dialogRef: MatDialogRef,
public nodeService: NodeService,
private toasterService: ToasterService,
- private formBuilder: FormBuilder
+ private formBuilder: UntypedFormBuilder
) {
this.nameForm = this.formBuilder.group({
- name: new FormControl('', Validators.required),
+ name: new UntypedFormControl('', Validators.required),
});
this.inputForm = this.formBuilder.group({
- sourcePort: new FormControl('', Validators.required),
- sourceDlci: new FormControl('', Validators.required),
- destinationPort: new FormControl('', Validators.required),
- destinationDlci: new FormControl('', Validators.required),
+ sourcePort: new UntypedFormControl('', Validators.required),
+ sourceDlci: new UntypedFormControl('', Validators.required),
+ destinationPort: new UntypedFormControl('', Validators.required),
+ destinationDlci: new UntypedFormControl('', Validators.required),
});
}
ngOnInit() {
- this.nodeService.getNode(this.server, this.node).subscribe((node: Node) => {
+ this.nodeService.getNode(this.controller, this.node).subscribe((node: Node) => {
this.node = node;
this.name = node.name;
@@ -115,7 +115,7 @@ export class ConfiguratorDialogSwitchComponent implements OnInit {
{}
);
- this.nodeService.updateNode(this.server, this.node).subscribe(() => {
+ this.nodeService.updateNode(this.controller, this.node).subscribe(() => {
this.toasterService.success(`Node ${this.node.name} updated.`);
this.onCancelClick();
});
diff --git a/src/app/components/project-map/node-editors/configurator/traceng/configurator-traceng.component.html b/src/app/components/project-map/node-editors/configurator/traceng/configurator-traceng.component.html
deleted file mode 100644
index e257af66e..000000000
--- a/src/app/components/project-map/node-editors/configurator/traceng/configurator-traceng.component.html
+++ /dev/null
@@ -1,20 +0,0 @@
-Configurator for node {{ name }}
-
-
-
-
-
-
-
diff --git a/src/app/components/project-map/node-editors/configurator/traceng/configurator-traceng.component.ts b/src/app/components/project-map/node-editors/configurator/traceng/configurator-traceng.component.ts
deleted file mode 100644
index 7bb08222d..000000000
--- a/src/app/components/project-map/node-editors/configurator/traceng/configurator-traceng.component.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-import { Component, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
-import { MatDialogRef } from '@angular/material/dialog';
-import { Node } from '../../../../../cartography/models/node';
-import { Server } from '../../../../../models/server';
-import { NodeService } from '../../../../../services/node.service';
-import { ToasterService } from '../../../../../services/toaster.service';
-
-@Component({
- selector: 'app-configurator-traceng',
- templateUrl: './configurator-traceng.component.html',
- styleUrls: ['../configurator.component.scss'],
-})
-export class ConfiguratorDialogTracengComponent implements OnInit {
- server: Server;
- node: Node;
- name: string;
- generalSettingsForm: FormGroup;
-
- constructor(
- public dialogRef: MatDialogRef,
- public nodeService: NodeService,
- private toasterService: ToasterService,
- private formBuilder: FormBuilder
- ) {
- this.generalSettingsForm = this.formBuilder.group({
- name: new FormControl('', Validators.required),
- });
- }
-
- ngOnInit() {
- this.nodeService.getNode(this.server, this.node).subscribe((node: Node) => {
- this.node = node;
- this.name = node.name;
- });
- }
-
- onSaveClick() {
- if (this.generalSettingsForm.valid) {
- this.nodeService.updateNode(this.server, this.node).subscribe(() => {
- this.toasterService.success(`Node ${this.node.name} updated.`);
- this.onCancelClick();
- });
- } else {
- this.toasterService.error(`Fill all required fields.`);
- }
- }
-
- onCancelClick() {
- this.dialogRef.close();
- }
-}
diff --git a/src/app/components/project-map/node-editors/configurator/virtualbox/configurator-virtualbox.component.ts b/src/app/components/project-map/node-editors/configurator/virtualbox/configurator-virtualbox.component.ts
index 629f2aed4..c0b032695 100644
--- a/src/app/components/project-map/node-editors/configurator/virtualbox/configurator-virtualbox.component.ts
+++ b/src/app/components/project-map/node-editors/configurator/virtualbox/configurator-virtualbox.component.ts
@@ -1,9 +1,9 @@
import { Component, OnInit, ViewChild } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialogRef } from '@angular/material/dialog';
import { Node } from '../../../../../cartography/models/node';
import { CustomAdaptersTableComponent } from '../../../../../components/preferences/common/custom-adapters-table/custom-adapters-table.component';
-import { Server } from '../../../../../models/server';
+import{ Controller } from '../../../../../models/controller';
import { NodeService } from '../../../../../services/node.service';
import { ToasterService } from '../../../../../services/toaster.service';
import { VirtualBoxConfigurationService } from '../../../../../services/virtual-box-configuration.service';
@@ -14,10 +14,10 @@ import { VirtualBoxConfigurationService } from '../../../../../services/virtual-
styleUrls: ['../configurator.component.scss'],
})
export class ConfiguratorDialogVirtualBoxComponent implements OnInit {
- server: Server;
+ controller:Controller ;
node: Node;
name: string;
- generalSettingsForm: FormGroup;
+ generalSettingsForm: UntypedFormGroup;
consoleTypes: string[] = [];
onCloseOptions = [];
@@ -30,17 +30,17 @@ export class ConfiguratorDialogVirtualBoxComponent implements OnInit {
public dialogRef: MatDialogRef,
public nodeService: NodeService,
private toasterService: ToasterService,
- private formBuilder: FormBuilder,
+ private formBuilder: UntypedFormBuilder,
private virtualBoxConfigurationService: VirtualBoxConfigurationService
) {
this.generalSettingsForm = this.formBuilder.group({
- name: new FormControl('', Validators.required),
- ram: new FormControl('', Validators.required),
+ name: new UntypedFormControl('', Validators.required),
+ ram: new UntypedFormControl('', Validators.required),
});
}
ngOnInit() {
- this.nodeService.getNode(this.server, this.node).subscribe((node: Node) => {
+ this.nodeService.getNode(this.controller, this.node).subscribe((node: Node) => {
this.node = node;
this.name = node.name;
this.getConfiguration();
@@ -65,7 +65,7 @@ export class ConfiguratorDialogVirtualBoxComponent implements OnInit {
this.node.properties.adapters = this.node.custom_adapters.length;
- this.nodeService.updateNodeWithCustomAdapters(this.server, this.node).subscribe(() => {
+ this.nodeService.updateNodeWithCustomAdapters(this.controller, this.node).subscribe(() => {
this.toasterService.success(`Node ${this.node.name} updated.`);
this.onCancelClick();
});
diff --git a/src/app/components/project-map/node-editors/configurator/vmware/configurator-vmware.component.ts b/src/app/components/project-map/node-editors/configurator/vmware/configurator-vmware.component.ts
index 854021cd0..f0aad466c 100644
--- a/src/app/components/project-map/node-editors/configurator/vmware/configurator-vmware.component.ts
+++ b/src/app/components/project-map/node-editors/configurator/vmware/configurator-vmware.component.ts
@@ -1,9 +1,9 @@
import { Component, OnInit, ViewChild } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialogRef } from '@angular/material/dialog';
import { Node } from '../../../../../cartography/models/node';
import { CustomAdaptersTableComponent } from '../../../../../components/preferences/common/custom-adapters-table/custom-adapters-table.component';
-import { Server } from '../../../../../models/server';
+import{ Controller } from '../../../../../models/controller';
import { NodeService } from '../../../../../services/node.service';
import { ToasterService } from '../../../../../services/toaster.service';
import { VmwareConfigurationService } from '../../../../../services/vmware-configuration.service';
@@ -14,10 +14,10 @@ import { VmwareConfigurationService } from '../../../../../services/vmware-confi
styleUrls: ['../configurator.component.scss'],
})
export class ConfiguratorDialogVmwareComponent implements OnInit {
- server: Server;
+ controller:Controller ;
node: Node;
name: string;
- generalSettingsForm: FormGroup;
+ generalSettingsForm: UntypedFormGroup;
consoleTypes: string[] = [];
onCloseOptions = [];
@@ -30,16 +30,16 @@ export class ConfiguratorDialogVmwareComponent implements OnInit {
public dialogRef: MatDialogRef,
public nodeService: NodeService,
private toasterService: ToasterService,
- private formBuilder: FormBuilder,
+ private formBuilder: UntypedFormBuilder,
private vmwareConfigurationService: VmwareConfigurationService
) {
this.generalSettingsForm = this.formBuilder.group({
- name: new FormControl('', Validators.required),
+ name: new UntypedFormControl('', Validators.required),
});
}
ngOnInit() {
- this.nodeService.getNode(this.server, this.node).subscribe((node: Node) => {
+ this.nodeService.getNode(this.controller, this.node).subscribe((node: Node) => {
this.node = node;
this.name = node.name;
this.getConfiguration();
@@ -64,7 +64,7 @@ export class ConfiguratorDialogVmwareComponent implements OnInit {
this.node.properties.adapters = this.node.custom_adapters.length;
- this.nodeService.updateNodeWithCustomAdapters(this.server, this.node).subscribe(() => {
+ this.nodeService.updateNodeWithCustomAdapters(this.controller, this.node).subscribe(() => {
this.toasterService.success(`Node ${this.node.name} updated.`);
this.onCancelClick();
});
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
index 920e94c98..f10689f48 100644
--- 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
@@ -1,8 +1,8 @@
import { Component, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialogRef } from '@angular/material/dialog';
import { Node } from '../../../../../cartography/models/node';
-import { Server } from '../../../../../models/server';
+import{ Controller } from '../../../../../models/controller';
import { NodeService } from '../../../../../services/node.service';
import { ToasterService } from '../../../../../services/toaster.service';
import { VpcsConfigurationService } from '../../../../../services/vpcs-configuration.service';
@@ -13,26 +13,26 @@ import { VpcsConfigurationService } from '../../../../../services/vpcs-configura
styleUrls: ['../configurator.component.scss'],
})
export class ConfiguratorDialogVpcsComponent implements OnInit {
- server: Server;
+ controller:Controller ;
node: Node;
name: string;
- inputForm: FormGroup;
+ inputForm: UntypedFormGroup;
consoleTypes: string[] = [];
constructor(
public dialogRef: MatDialogRef,
public nodeService: NodeService,
private toasterService: ToasterService,
- private formBuilder: FormBuilder,
+ private formBuilder: UntypedFormBuilder,
private vpcsConfigurationService: VpcsConfigurationService
) {
this.inputForm = this.formBuilder.group({
- name: new FormControl('', Validators.required),
+ name: new UntypedFormControl('', Validators.required),
});
}
ngOnInit() {
- this.nodeService.getNode(this.server, this.node).subscribe((node: Node) => {
+ this.nodeService.getNode(this.controller, this.node).subscribe((node: Node) => {
this.node = node;
this.name = node.name;
this.getConfiguration();
@@ -45,7 +45,7 @@ export class ConfiguratorDialogVpcsComponent implements OnInit {
onSaveClick() {
if (this.inputForm.valid) {
- this.nodeService.updateNode(this.server, this.node).subscribe(() => {
+ this.nodeService.updateNode(this.controller, this.node).subscribe(() => {
this.toasterService.success(`Node ${this.node.name} updated.`);
this.onCancelClick();
});
diff --git a/src/app/components/project-map/node-select-interface/node-select-interface.component.spec.ts b/src/app/components/project-map/node-select-interface/node-select-interface.component.spec.ts
index 38a8a0832..efd21b5cc 100644
--- a/src/app/components/project-map/node-select-interface/node-select-interface.component.spec.ts
+++ b/src/app/components/project-map/node-select-interface/node-select-interface.component.spec.ts
@@ -1,15 +1,15 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
import { NodeSelectInterfaceComponent } from './node-select-interface.component';
describe('NodeSelectInterfaceComponent', () => {
let component: NodeSelectInterfaceComponent;
let fixture: ComponentFixture;
- beforeEach(async(() => {
- TestBed.configureTestingModule({
+ beforeEach(async() => {
+ await TestBed.configureTestingModule({
declarations: [NodeSelectInterfaceComponent],
}).compileComponents();
- }));
+ });
beforeEach(() => {
fixture = TestBed.createComponent(NodeSelectInterfaceComponent);
@@ -17,7 +17,7 @@ describe('NodeSelectInterfaceComponent', () => {
fixture.detectChanges();
});
- // it('should create', () => {
- // expect(component).toBeTruthy();
- // });
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
});
diff --git a/src/app/components/project-map/nodes-menu/nodes-menu-confirmation-dialog/nodes-menu-confirmation-dialog.component.html b/src/app/components/project-map/nodes-menu/nodes-menu-confirmation-dialog/nodes-menu-confirmation-dialog.component.html
new file mode 100644
index 000000000..dae4f3f1d
--- /dev/null
+++ b/src/app/components/project-map/nodes-menu/nodes-menu-confirmation-dialog/nodes-menu-confirmation-dialog.component.html
@@ -0,0 +1,13 @@
+
+
+
Confirm {{ confirmActionData.actionType}} All
+
+
+
+
+ Are you sure you want to {{confirmActionData.actionType}} all devices?
+
+
+
+
+
diff --git a/src/app/components/project-map/nodes-menu/nodes-menu-confirmation-dialog/nodes-menu-confirmation-dialog.component.scss b/src/app/components/project-map/nodes-menu/nodes-menu-confirmation-dialog/nodes-menu-confirmation-dialog.component.scss
new file mode 100644
index 000000000..c74494a94
--- /dev/null
+++ b/src/app/components/project-map/nodes-menu/nodes-menu-confirmation-dialog/nodes-menu-confirmation-dialog.component.scss
@@ -0,0 +1,19 @@
+.close-btn{
+ height: 30px;
+ width: 30px;
+ margin-left: 10px;
+ margin-bottom:10px
+}
+.close-icon{
+ font-size: 15px;
+}
+.text-padding{
+ padding: 15px 0 0 0;
+
+}
+.mat-dialog-actions {
+ min-height: 31px;
+}
+.heading-txt{
+ text-transform: capitalize;
+}
\ No newline at end of file
diff --git a/src/app/components/project-map/nodes-menu/nodes-menu-confirmation-dialog/nodes-menu-confirmation-dialog.component.spec.ts b/src/app/components/project-map/nodes-menu/nodes-menu-confirmation-dialog/nodes-menu-confirmation-dialog.component.spec.ts
new file mode 100644
index 000000000..ae514afeb
--- /dev/null
+++ b/src/app/components/project-map/nodes-menu/nodes-menu-confirmation-dialog/nodes-menu-confirmation-dialog.component.spec.ts
@@ -0,0 +1,44 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { MatCheckboxModule } from '@angular/material/checkbox';
+import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+import { MatIconModule } from '@angular/material/icon';
+import { MatMenuModule } from '@angular/material/menu';
+import { MatSnackBarModule } from '@angular/material/snack-bar';
+import { MatToolbarModule } from '@angular/material/toolbar';
+
+import { NodesMenuConfirmationDialogComponent } from './nodes-menu-confirmation-dialog.component';
+
+describe('NodesMenuConfirmationDialogComponent', () => {
+ let component: NodesMenuConfirmationDialogComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports:[
+ MatIconModule,
+ MatToolbarModule,
+ MatMenuModule,
+ MatCheckboxModule,
+ MatDialogModule,
+ MatSnackBarModule,
+ ],
+ providers: [
+
+ { provide: MAT_DIALOG_DATA, useValue: {} },
+ { provide: MatDialogRef, useValue: {} },
+ ],
+ declarations: [ NodesMenuConfirmationDialogComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(NodesMenuConfirmationDialogComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/components/project-map/nodes-menu/nodes-menu-confirmation-dialog/nodes-menu-confirmation-dialog.component.ts b/src/app/components/project-map/nodes-menu/nodes-menu-confirmation-dialog/nodes-menu-confirmation-dialog.component.ts
new file mode 100644
index 000000000..3c9125346
--- /dev/null
+++ b/src/app/components/project-map/nodes-menu/nodes-menu-confirmation-dialog/nodes-menu-confirmation-dialog.component.ts
@@ -0,0 +1,27 @@
+import { Component, Inject, OnInit } from '@angular/core';
+import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+
+@Component({
+ selector: 'app-nodes-menu-confirmation-dialog',
+ templateUrl: './nodes-menu-confirmation-dialog.component.html',
+ styleUrls: ['./nodes-menu-confirmation-dialog.component.scss'],
+})
+export class NodesMenuConfirmationDialogComponent implements OnInit {
+ confirmActionData = {
+ actionType: 'start',
+ isAction:false
+ };
+ constructor(
+ @Inject(MAT_DIALOG_DATA) public data: any,
+ public dialogRef: MatDialogRef
+ ) {}
+
+ ngOnInit(): void {
+ this.confirmActionData.actionType = this.data;
+ }
+
+ confirmAction() {
+ this.confirmActionData.isAction = true
+ this.dialogRef.close(this.confirmActionData);
+ }
+}
diff --git a/src/app/components/project-map/nodes-menu/nodes-menu.component.html b/src/app/components/project-map/nodes-menu/nodes-menu.component.html
index b495ad3c9..7414dc46c 100644
--- a/src/app/components/project-map/nodes-menu/nodes-menu.component.html
+++ b/src/app/components/project-map/nodes-menu/nodes-menu.component.html
@@ -12,7 +12,7 @@
matTooltip="Start/Resume all nodes"
matTooltipClass="custom-tooltip"
mat-icon-button
- (click)="startNodes()"
+ (click)="confirmControlsActions('start')"
class="menu-button"
>
play_arrow
@@ -21,7 +21,7 @@
matTooltip="Suspend all nodes"
matTooltipClass="custom-tooltip"
mat-icon-button
- (click)="suspendNodes()"
+ (click)="confirmControlsActions('suspend')"
class="menu-button"
>
pause
@@ -30,7 +30,7 @@
matTooltip="Stop all nodes"
matTooltipClass="custom-tooltip"
mat-icon-button
- (click)="stopNodes()"
+ (click)="confirmControlsActions('stop')"
class="menu-button"
>
stop
@@ -39,9 +39,19 @@
matTooltip="Reload all nodes"
matTooltipClass="custom-tooltip"
mat-icon-button
- (click)="reloadNodes()"
+ (click)="confirmControlsActions('reload')"
class="menu-button"
>
replay
+
+
diff --git a/src/app/components/project-map/nodes-menu/nodes-menu.component.spec.ts b/src/app/components/project-map/nodes-menu/nodes-menu.component.spec.ts
index 9e2c45274..bf5e1952a 100644
--- a/src/app/components/project-map/nodes-menu/nodes-menu.component.spec.ts
+++ b/src/app/components/project-map/nodes-menu/nodes-menu.component.spec.ts
@@ -1,6 +1,6 @@
import { CommonModule } from '@angular/common';
import { NO_ERRORS_SCHEMA } from '@angular/core';
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MatButtonModule } from '@angular/material/button';
import { MatIconModule } from '@angular/material/icon';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
@@ -8,7 +8,7 @@ import { ElectronService } from 'ngx-electron';
import { of } from 'rxjs';
import { NodesDataSource } from '../../../cartography/datasources/nodes-datasource';
import { NodeService } from '../../../services/node.service';
-import { ServerService } from '../../../services/server.service';
+import { ControllerService } from '../../../services/controller.service';
import { SettingsService } from '../../../services/settings.service';
import { ToasterService } from '../../../services/toaster.service';
import { MockedToasterService } from '../../../services/toaster.service.spec';
@@ -22,21 +22,21 @@ xdescribe('NodesMenuComponent', () => {
let mockedNodeService: MockedNodeService = new MockedNodeService();
let mockedNodesDataSource: MockedNodesDataSource = new MockedNodesDataSource();
- beforeEach(async(() => {
- TestBed.configureTestingModule({
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
imports: [MatButtonModule, MatIconModule, CommonModule, NoopAnimationsModule],
providers: [
{ provide: NodeService, useValue: mockedNodeService },
{ provide: ToasterService, useValue: mockedToasterService },
{ provide: NodesDataSource, useValue: mockedNodesDataSource },
- { provide: ServerService },
+ { provide: ControllerService },
{ provide: SettingsService },
{ provide: ElectronService },
],
declarations: [NodesMenuComponent],
schemas: [NO_ERRORS_SCHEMA],
}).compileComponents();
- }));
+ });
beforeEach(() => {
fixture = TestBed.createComponent(NodesMenuComponent);
diff --git a/src/app/components/project-map/nodes-menu/nodes-menu.component.ts b/src/app/components/project-map/nodes-menu/nodes-menu.component.ts
index 839ccbbe5..111b4f3a1 100644
--- a/src/app/components/project-map/nodes-menu/nodes-menu.component.ts
+++ b/src/app/components/project-map/nodes-menu/nodes-menu.component.ts
@@ -1,14 +1,16 @@
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
-import { MapSettingsService } from '../../../services/mapsettings.service';
+import { MatDialog } from '@angular/material/dialog';
import { ElectronService } from 'ngx-electron';
import { NodesDataSource } from '../../../cartography/datasources/nodes-datasource';
import { Project } from '../../../models/project';
-import { Server } from '../../../models/server';
+import{ Controller } from '../../../models/controller';
+import { MapSettingsService } from '../../../services/mapsettings.service';
import { NodeService } from '../../../services/node.service';
-import { ServerService } from '../../../services/server.service';
+import { NodeConsoleService } from '../../../services/nodeConsole.service';
+import { ControllerService } from '../../../services/controller.service';
import { SettingsService } from '../../../services/settings.service';
import { ToasterService } from '../../../services/toaster.service';
-import { NodeConsoleService } from '../../../services/nodeConsole.service';
+import { NodesMenuConfirmationDialogComponent } from './nodes-menu-confirmation-dialog/nodes-menu-confirmation-dialog.component';
@Component({
selector: 'app-nodes-menu',
@@ -18,17 +20,18 @@ import { NodeConsoleService } from '../../../services/nodeConsole.service';
})
export class NodesMenuComponent {
@Input('project') project: Project;
- @Input('server') server: Server;
+ @Input('controller') controller:Controller ;
constructor(
private nodeService: NodeService,
private nodeConsoleService: NodeConsoleService,
private nodesDataSource: NodesDataSource,
private toasterService: ToasterService,
- private serverService: ServerService,
+ private controllerService: ControllerService,
private settingsService: SettingsService,
private mapSettingsService: MapSettingsService,
- private electronService: ElectronService
+ private electronService: ElectronService,
+ private dialog: MatDialog
) {}
async startConsoleForAllNodes() {
@@ -47,7 +50,7 @@ export class NodesMenuComponent {
name: node.name,
project_id: node.project_id,
node_id: node.node_id,
- server_url: this.serverService.getServerUrl(this.server),
+ controller_url: this.controllerService.getControllerUrl(this.controller),
};
await this.electronService.remote.require('./console-executor.js').openConsole(request);
}
@@ -61,26 +64,56 @@ export class NodesMenuComponent {
}
startNodes() {
- this.nodeService.startAll(this.server, this.project).subscribe(() => {
+ this.nodeService.startAll(this.controller, this.project).subscribe(() => {
this.toasterService.success('All nodes successfully started');
});
}
stopNodes() {
- this.nodeService.stopAll(this.server, this.project).subscribe(() => {
+ this.nodeService.stopAll(this.controller, this.project).subscribe(() => {
this.toasterService.success('All nodes successfully stopped');
});
}
suspendNodes() {
- this.nodeService.suspendAll(this.server, this.project).subscribe(() => {
+ this.nodeService.suspendAll(this.controller, this.project).subscribe(() => {
this.toasterService.success('All nodes successfully suspended');
});
}
reloadNodes() {
- this.nodeService.reloadAll(this.server, this.project).subscribe(() => {
+ this.nodeService.reloadAll(this.controller, this.project).subscribe(() => {
this.toasterService.success('All nodes successfully reloaded');
});
}
+
+ resetNodes() {
+ this.nodeService.resetAllNodes(this.controller, this.project).subscribe(() => {
+ this.toasterService.success('Successfully reset all console connections');
+ });
+ }
+
+ public confirmControlsActions(type) {
+ const dialogRef = this.dialog.open(NodesMenuConfirmationDialogComponent, {
+ width: '500px',
+ maxHeight: '200px',
+ autoFocus: false,
+ disableClose: true,
+ data: type,
+ });
+
+ dialogRef.afterClosed().subscribe((confirmAction_result) => {
+ if (confirmAction_result.isAction && confirmAction_result.actionType == 'start') {
+ this.startNodes();
+ } else if (confirmAction_result.isAction && confirmAction_result.actionType == 'stop') {
+ this.stopNodes();
+ } else if (confirmAction_result.isAction && confirmAction_result.actionType == 'reload') {
+ this.reloadNodes();
+ } else if (confirmAction_result.isAction && confirmAction_result.actionType == 'suspend') {
+ this.suspendNodes();
+ } else {
+ this.resetNodes()
+ }
+ });
+ }
}
diff --git a/src/app/components/project-map/packet-capturing/packet-filters/packet-filters.component.spec.ts b/src/app/components/project-map/packet-capturing/packet-filters/packet-filters.component.spec.ts
index 08f9a5bba..1b4842162 100644
--- a/src/app/components/project-map/packet-capturing/packet-filters/packet-filters.component.spec.ts
+++ b/src/app/components/project-map/packet-capturing/packet-filters/packet-filters.component.spec.ts
@@ -23,8 +23,8 @@ describe('PacketFiltersDialogComponent', () => {
close: jasmine.createSpy('close'),
};
- beforeEach(async(() => {
- TestBed.configureTestingModule({
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
imports: [
MatDialogModule,
FormsModule,
@@ -44,7 +44,7 @@ describe('PacketFiltersDialogComponent', () => {
declarations: [PacketFiltersDialogComponent],
schemas: [NO_ERRORS_SCHEMA],
}).compileComponents();
- }));
+ });
beforeEach(() => {
fixture = TestBed.createComponent(PacketFiltersDialogComponent);
diff --git a/src/app/components/project-map/packet-capturing/packet-filters/packet-filters.component.ts b/src/app/components/project-map/packet-capturing/packet-filters/packet-filters.component.ts
index 3b22edefe..ed86dc8d6 100644
--- a/src/app/components/project-map/packet-capturing/packet-filters/packet-filters.component.ts
+++ b/src/app/components/project-map/packet-capturing/packet-filters/packet-filters.component.ts
@@ -5,7 +5,7 @@ import { FilterDescription } from '../../../../models/filter-description';
import { Link } from '../../../../models/link';
import { Message } from '../../../../models/message';
import { Project } from '../../../../models/project';
-import { Server } from '../../../../models/server';
+import{ Controller } from '../../../../models/controller';
import { LinkService } from '../../../../services/link.service';
import { HelpDialogComponent } from '../../help-dialog/help-dialog.component';
@@ -15,7 +15,7 @@ import { HelpDialogComponent } from '../../help-dialog/help-dialog.component';
styleUrls: ['./packet-filters.component.scss'],
})
export class PacketFiltersDialogComponent implements OnInit {
- server: Server;
+ controller:Controller ;
project: Project;
link: Link;
filters: Filter;
@@ -28,7 +28,7 @@ export class PacketFiltersDialogComponent implements OnInit {
) {}
ngOnInit() {
- this.linkService.getLink(this.server, this.link.project_id, this.link.link_id).subscribe((link: Link) => {
+ this.linkService.getLink(this.controller, this.link.project_id, this.link.link_id).subscribe((link: Link) => {
this.link = link;
this.filters = {
bpf: [],
@@ -47,7 +47,7 @@ export class PacketFiltersDialogComponent implements OnInit {
}
});
- this.linkService.getAvailableFilters(this.server, this.link).subscribe((availableFilters: FilterDescription[]) => {
+ this.linkService.getAvailableFilters(this.controller, this.link).subscribe((availableFilters: FilterDescription[]) => {
this.availableFilters = availableFilters;
});
}
@@ -65,14 +65,14 @@ export class PacketFiltersDialogComponent implements OnInit {
packet_loss: [0],
};
- this.linkService.updateLink(this.server, this.link).subscribe((link: Link) => {
+ this.linkService.updateLink(this.controller, this.link).subscribe((link: Link) => {
this.dialogRef.close();
});
}
onYesClick() {
this.link.filters = this.filters;
- this.linkService.updateLink(this.server, this.link).subscribe((link: Link) => {
+ this.linkService.updateLink(this.controller, this.link).subscribe((link: Link) => {
this.dialogRef.close();
});
}
diff --git a/src/app/components/project-map/packet-capturing/start-capture/start-capture.component.spec.ts b/src/app/components/project-map/packet-capturing/start-capture/start-capture.component.spec.ts
index ebb8a6445..69bdd22bd 100644
--- a/src/app/components/project-map/packet-capturing/start-capture/start-capture.component.spec.ts
+++ b/src/app/components/project-map/packet-capturing/start-capture/start-capture.component.spec.ts
@@ -1,6 +1,6 @@
import { CommonModule } from '@angular/common';
import { NO_ERRORS_SCHEMA } from '@angular/core';
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
@@ -29,8 +29,8 @@ describe('StartCaptureDialogComponent', () => {
close: jasmine.createSpy('close'),
};
- beforeEach(async(() => {
- TestBed.configureTestingModule({
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
imports: [
MatDialogModule,
FormsModule,
@@ -53,7 +53,7 @@ describe('StartCaptureDialogComponent', () => {
declarations: [StartCaptureDialogComponent],
schemas: [NO_ERRORS_SCHEMA],
}).compileComponents();
- }));
+ });
beforeEach(() => {
fixture = TestBed.createComponent(StartCaptureDialogComponent);
diff --git a/src/app/components/project-map/packet-capturing/start-capture/start-capture.component.ts b/src/app/components/project-map/packet-capturing/start-capture/start-capture.component.ts
index 5426758e0..9ef998e7a 100644
--- a/src/app/components/project-map/packet-capturing/start-capture/start-capture.component.ts
+++ b/src/app/components/project-map/packet-capturing/start-capture/start-capture.component.ts
@@ -1,12 +1,12 @@
import { Component, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialogRef } from '@angular/material/dialog';
import { NodesDataSource } from '../../../../cartography/datasources/nodes-datasource';
import { CapturingSettings } from '../../../../models/capturingSettings';
import { Link } from '../../../../models/link';
import { LinkNode } from '../../../../models/link-node';
import { Project } from '../../../../models/project';
-import { Server } from '../../../../models/server';
+import{ Controller } from '../../../../models/controller';
import { LinkService } from '../../../../services/link.service';
import { PacketCaptureService } from '../../../../services/packet-capture.service';
import { ToasterService } from '../../../../services/toaster.service';
@@ -18,24 +18,24 @@ import { PacketFiltersDialogComponent } from '../packet-filters/packet-filters.c
styleUrls: ['./start-capture.component.scss'],
})
export class StartCaptureDialogComponent implements OnInit {
- server: Server;
+ controller:Controller ;
project: Project;
link: Link;
linkTypes = [];
- inputForm: FormGroup;
+ inputForm: UntypedFormGroup;
startProgram: boolean;
constructor(
private dialogRef: MatDialogRef
,
private linkService: LinkService,
- private formBuilder: FormBuilder,
+ private formBuilder: UntypedFormBuilder,
private toasterService: ToasterService,
private nodesDataSource: NodesDataSource,
private packetCaptureService: PacketCaptureService
) {
this.inputForm = this.formBuilder.group({
- linkType: new FormControl('', Validators.required),
- fileName: new FormControl('', Validators.required),
+ linkType: new UntypedFormControl('', Validators.required),
+ fileName: new UntypedFormControl('', Validators.required),
});
}
@@ -78,10 +78,10 @@ export class StartCaptureDialogComponent implements OnInit {
};
if (this.startProgram) {
- this.packetCaptureService.startCapture(this.server, this.project, this.link, captureSettings.capture_file_name);
+ this.packetCaptureService.startCapture(this.controller, this.project, this.link, captureSettings.capture_file_name);
}
- this.linkService.startCaptureOnLink(this.server, this.link, captureSettings).subscribe(() => {
+ this.linkService.startCaptureOnLink(this.controller, this.link, captureSettings).subscribe(() => {
this.dialogRef.close();
});
}
diff --git a/src/app/components/project-map/project-map-menu/project-map-lock-confirmation-dialog/project-map-lock-confirmation-dialog.component.html b/src/app/components/project-map/project-map-menu/project-map-lock-confirmation-dialog/project-map-lock-confirmation-dialog.component.html
new file mode 100644
index 000000000..82b5771ca
--- /dev/null
+++ b/src/app/components/project-map/project-map-menu/project-map-lock-confirmation-dialog/project-map-lock-confirmation-dialog.component.html
@@ -0,0 +1,14 @@
+
+
+
Confirm {{ confirmActionData.actionType}} All
+
+
+
+
+ Are you sure you want to {{confirmActionData.actionType}} all devices?
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/components/project-map/project-map-menu/project-map-lock-confirmation-dialog/project-map-lock-confirmation-dialog.component.scss b/src/app/components/project-map/project-map-menu/project-map-lock-confirmation-dialog/project-map-lock-confirmation-dialog.component.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/app/components/project-map/project-map-menu/project-map-lock-confirmation-dialog/project-map-lock-confirmation-dialog.component.spec.ts b/src/app/components/project-map/project-map-menu/project-map-lock-confirmation-dialog/project-map-lock-confirmation-dialog.component.spec.ts
new file mode 100644
index 000000000..121362263
--- /dev/null
+++ b/src/app/components/project-map/project-map-menu/project-map-lock-confirmation-dialog/project-map-lock-confirmation-dialog.component.spec.ts
@@ -0,0 +1,44 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { MatCheckboxModule } from '@angular/material/checkbox';
+import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+import { MatIconModule } from '@angular/material/icon';
+import { MatMenuModule } from '@angular/material/menu';
+import { MatSnackBarModule } from '@angular/material/snack-bar';
+import { MatToolbarModule } from '@angular/material/toolbar';
+
+import { ProjectMapLockConfirmationDialogComponent } from './project-map-lock-confirmation-dialog.component';
+
+describe('ProjectMapLockConfirmationDialogComponent', () => {
+ let component: ProjectMapLockConfirmationDialogComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports:[
+ MatIconModule,
+ MatToolbarModule,
+ MatMenuModule,
+ MatCheckboxModule,
+ MatDialogModule,
+ MatSnackBarModule,
+ ],
+ providers: [
+
+ { provide: MAT_DIALOG_DATA, useValue: {} },
+ { provide: MatDialogRef, useValue: {} },
+ ],
+ declarations: [ ProjectMapLockConfirmationDialogComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(ProjectMapLockConfirmationDialogComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/components/project-map/project-map-menu/project-map-lock-confirmation-dialog/project-map-lock-confirmation-dialog.component.ts b/src/app/components/project-map/project-map-menu/project-map-lock-confirmation-dialog/project-map-lock-confirmation-dialog.component.ts
new file mode 100644
index 000000000..1b8141f87
--- /dev/null
+++ b/src/app/components/project-map/project-map-menu/project-map-lock-confirmation-dialog/project-map-lock-confirmation-dialog.component.ts
@@ -0,0 +1,28 @@
+import { Component, Inject, OnInit } from '@angular/core';
+import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+
+@Component({
+ selector: 'app-project-map-lock-confirmation-dialog',
+ templateUrl: './project-map-lock-confirmation-dialog.component.html',
+ styleUrls: ['./project-map-lock-confirmation-dialog.component.scss']
+})
+export class ProjectMapLockConfirmationDialogComponent implements OnInit {
+ confirmActionData = {
+ actionType: 'Unlock',
+ isAction:false
+ };
+ constructor(
+ @Inject(MAT_DIALOG_DATA) public data: any,
+ public dialogRef: MatDialogRef
+ ) {}
+
+ ngOnInit(): void {
+ this.confirmActionData.actionType = this.data.actionType;
+ }
+
+ confirmAction() {
+ this.confirmActionData.isAction = this.data.actionType == 'Lock'? true : false;
+ this.dialogRef.close(this.confirmActionData);
+ }
+
+}
diff --git a/src/app/components/project-map/project-map-menu/project-map-menu.component.html b/src/app/components/project-map/project-map-menu/project-map-menu.component.html
index 81f0fc0f7..e3b53e86e 100644
--- a/src/app/components/project-map/project-map-menu/project-map-menu.component.html
+++ b/src/app/components/project-map/project-map-menu/project-map-menu.component.html
@@ -86,7 +86,7 @@
class="menu-button"
(click)="changeLockValue()"
>
- lock
+ {{lock}}
{
let component: ProjectMapMenuComponent;
@@ -24,9 +31,14 @@ describe('ProjectMapMenuComponent', () => {
let drawingService = new MockedDrawingService();
let mapSettingService = new MapSettingsService();
let mockedSymbolService = new MockedSymbolService();
+ let mockedProjectService: MockedProjectService = new MockedProjectService();
+ let mockedNodeService: MockedNodeService = new MockedNodeService();
+ let mockedNodesDataSource: MockedNodesDataSource = new MockedNodesDataSource();
+ let mockedDrawingsDataSource = new MockedDrawingsDataSource();
+ let mockedDrawingsEventSource = new DrawingsEventSource();
- beforeEach(async(() => {
- TestBed.configureTestingModule({
+ beforeEach(async() => {
+ await TestBed.configureTestingModule({
imports: [
MatIconModule,
MatDialogModule,
@@ -38,15 +50,20 @@ describe('ProjectMapMenuComponent', () => {
],
providers: [
{ provide: DrawingService, useValue: drawingService },
- { provide: ToolsService },
+ { provide: DrawingsDataSource, useValue: mockedDrawingsDataSource },
+ { provide: DrawingsEventSource, useValue: mockedDrawingsEventSource },
+ { provide: ProjectService, useValue: mockedProjectService },
+ { provide: ToolsService, useClass: ToolsService },
{ provide: MapSettingsService, useValue: mapSettingService },
{ provide: SymbolService, useValue: mockedSymbolService },
+ { provide: NodeService, useValue: mockedNodeService },
+ { provide: NodesDataSource, useValue: mockedNodesDataSource },
{ provide: ElectronService },
],
declarations: [ProjectMapMenuComponent, D3MapComponent, ...ANGULAR_MAP_DECLARATIONS],
schemas: [NO_ERRORS_SCHEMA],
}).compileComponents();
- }));
+ });
beforeEach(() => {
fixture = TestBed.createComponent(ProjectMapMenuComponent);
@@ -77,9 +94,9 @@ describe('ProjectMapMenuComponent', () => {
spyOn(mapSettingService, 'changeMapLockValue');
component.changeLockValue();
- expect(mapSettingService.changeMapLockValue).toHaveBeenCalledWith(true);
+ expect(mapSettingService.changeMapLockValue).toHaveBeenCalledWith(true);;
component.changeLockValue();
- expect(mapSettingService.changeMapLockValue).toHaveBeenCalledWith(false);
+ expect(mapSettingService.changeMapLockValue).toHaveBeenCalledWith(false);;
});
});
diff --git a/src/app/components/project-map/project-map-menu/project-map-menu.component.ts b/src/app/components/project-map/project-map-menu/project-map-menu.component.ts
index 827e81473..06064435c 100644
--- a/src/app/components/project-map/project-map-menu/project-map-menu.component.ts
+++ b/src/app/components/project-map/project-map-menu/project-map-menu.component.ts
@@ -1,17 +1,24 @@
import { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
+import { NodeService } from '../../../services/node.service';
import { select } from 'd3-selection';
+import { Subscription } from 'rxjs';
import * as svg from 'save-svg-as-png';
import downloadSvg from 'svg-crowbar';
+import { Drawing } from '../../../cartography/models/drawing';
+import { Node } from '../../../cartography/models/node';
+import { Controller } from '../../../models/controller';
import { Project } from '../../../models/project';
-import { Server } from '../../../models/server';
import { DrawingService } from '../../../services/drawing.service';
import { MapSettingsService } from '../../../services/mapsettings.service';
+import { ProjectService } from '../../../services/project.service';
import { SymbolService } from '../../../services/symbol.service';
import { ThemeService } from '../../../services/theme.service';
import { ToolsService } from '../../../services/tools.service';
import { Screenshot, ScreenshotDialogComponent } from '../screenshot-dialog/screenshot-dialog.component';
-
+import { ProjectMapLockConfirmationDialogComponent } from './project-map-lock-confirmation-dialog/project-map-lock-confirmation-dialog.component';
+import { DrawingsDataSource } from '../../../cartography/datasources/drawings-datasource';
+import { NodesDataSource } from '../../../cartography/datasources/nodes-datasource';
@Component({
selector: 'app-project-map-menu',
templateUrl: './project-map-menu.component.html',
@@ -20,9 +27,12 @@ import { Screenshot, ScreenshotDialogComponent } from '../screenshot-dialog/scre
})
export class ProjectMapMenuComponent implements OnInit, OnDestroy {
@Input() project: Project;
- @Input() server: Server;
+ @Input() controller: Controller;
+ private nodes: Node[] = [];
+ private drawing: Drawing[] = [];
public selectedDrawing: string;
+ public lock: string = 'lock_open';
public drawTools = {
isRectangleChosen: false,
isEllipseChosen: false,
@@ -31,20 +41,30 @@ export class ProjectMapMenuComponent implements OnInit, OnDestroy {
};
public isLocked: boolean = false;
public isLightThemeEnabled: boolean = false;
-
+ private projectSubscription: Subscription;
constructor(
private toolsService: ToolsService,
private mapSettingsService: MapSettingsService,
private drawingService: DrawingService,
private symbolService: SymbolService,
private dialog: MatDialog,
- private themeService: ThemeService
+ private themeService: ThemeService,
+ private projectServices: ProjectService,
+ private nodeService : NodeService,
+ private nodesDataSource: NodesDataSource,
+ private drawingsDataSource: DrawingsDataSource,
) {}
ngOnInit() {
this.themeService.getActualTheme() === 'light'
? (this.isLightThemeEnabled = true)
: (this.isLightThemeEnabled = false);
+ this.projectSubscription = this.projectServices.projectLockIconSubject.subscribe((isRedraw: boolean) => {
+ if (isRedraw) {
+ this.getAllNodesAndDrawingStatus();
+ }
+ });
+ this.getAllNodesAndDrawingStatus();
}
getCssClassForIcon(type: string) {
@@ -85,7 +105,7 @@ export class ProjectMapMenuComponent implements OnInit, OnDestroy {
let splittedImage = splittedSvg[i].split('"');
let splittedUrl = splittedImage[1].split('/');
- let elem = await this.symbolService.raw(this.server, splittedUrl[7]).toPromise();
+ let elem = await this.symbolService.raw(this.controller, splittedUrl[7]).toPromise();
let splittedElement = elem.split('-->');
splittedSvg[i] = splittedElement[1].substring(2);
i += 2;
@@ -104,11 +124,15 @@ export class ProjectMapMenuComponent implements OnInit, OnDestroy {
}
public addDrawing(selectedObject: string) {
- if ((selectedObject === 'rectangle' && this.drawTools.isRectangleChosen) || (selectedObject === 'ellipse' && this.drawTools.isEllipseChosen) ||
- (selectedObject === 'line' && this.drawTools.isLineChosen) || (selectedObject === 'text' && this.drawTools.isTextChosen)) {
- document.documentElement.style.cursor = "default";
+ if (
+ (selectedObject === 'rectangle' && this.drawTools.isRectangleChosen) ||
+ (selectedObject === 'ellipse' && this.drawTools.isEllipseChosen) ||
+ (selectedObject === 'line' && this.drawTools.isLineChosen) ||
+ (selectedObject === 'text' && this.drawTools.isTextChosen)
+ ) {
+ document.documentElement.style.cursor = 'default';
} else {
- document.documentElement.style.cursor = "crosshair";
+ document.documentElement.style.cursor = 'crosshair';
}
switch (selectedObject) {
@@ -147,8 +171,7 @@ export class ProjectMapMenuComponent implements OnInit, OnDestroy {
}
public resetDrawToolChoice() {
- document.documentElement.style.cursor = "default";
-
+ document.documentElement.style.cursor = 'default';
this.drawTools.isRectangleChosen = false;
this.drawTools.isEllipseChosen = false;
this.drawTools.isLineChosen = false;
@@ -156,10 +179,70 @@ export class ProjectMapMenuComponent implements OnInit, OnDestroy {
this.selectedDrawing = '';
this.toolsService.textAddingToolActivation(this.drawTools.isTextChosen);
}
+ getAllNodesAndDrawingStatus() {
+ this.projectServices.getProjectStatus(this.controller,this.project.project_id).subscribe((status)=>{
+ if (status) {
+ this.isLocked = true;
+ this.lock = 'lock';
+ } else {
+ this.isLocked = false;
+ this.lock = 'lock_open';
+ }
+ })
+ this.projectServices.nodes(this.controller, this.project.project_id).subscribe((response) => {
+ this.nodes = response;
+ this.nodes.forEach((node) => {
+ this.nodeService.updateNode(this.controller, node).subscribe((node) => {
+ this.nodesDataSource.update(node);
+ });
+ });
+ });
+
+ this.projectServices.drawings(this.controller, this.project.project_id).subscribe((response) => {
+ this.drawing = response;
+ this.drawing.forEach((drawing) => {
+ this.drawingService.update(this.controller, drawing).subscribe((drawing) => {
+ this.drawingsDataSource.update(drawing);
+ });
+ });
+ });
+ }
public changeLockValue() {
this.isLocked = !this.isLocked;
this.mapSettingsService.changeMapLockValue(this.isLocked);
+ const dialogRef = this.dialog.open(ProjectMapLockConfirmationDialogComponent, {
+ width: '500px',
+ maxHeight: '200px',
+ autoFocus: false,
+ disableClose: true,
+ data: { isAction: this.isLocked, actionType: this.isLocked == true ? 'Lock' : 'Unlock' },
+ });
+
+ dialogRef.afterClosed().subscribe((confirmAction_result) => {
+ if (confirmAction_result && confirmAction_result != '') {
+ if (confirmAction_result.actionType == 'Lock' && confirmAction_result.isAction) {
+ this.lockAllNode();
+ } else {
+ this.unlockAllNode();
+ }
+ } else {
+ }
+ });
+ }
+
+ lockAllNode() {
+ this.lock = 'lock';
+ this.drawingService.lockAllNodes(this.controller, this.project).subscribe((res) => {
+ this.getAllNodesAndDrawingStatus();
+ });
+ }
+
+ unlockAllNode() {
+ this.lock = 'lock_open';
+ this.drawingService.unLockAllNodes(this.controller, this.project).subscribe((res) => {
+ this.getAllNodesAndDrawingStatus();
+ });
}
public uploadImageFile(event) {
@@ -175,7 +258,7 @@ export class ProjectMapMenuComponent implements OnInit, OnDestroy {
let image = fileReader.result;
let svg = this.createSvgFileForImage(image, imageToUpload);
this.drawingService
- .add(this.server, this.project.project_id, -(imageToUpload.width / 2), -(imageToUpload.height / 2), svg)
+ .add(this.controller, this.project.project_id, -(imageToUpload.width / 2), -(imageToUpload.height / 2), svg)
.subscribe(() => {});
};
@@ -186,9 +269,11 @@ export class ProjectMapMenuComponent implements OnInit, OnDestroy {
}
private createSvgFileForImage(image: string | ArrayBuffer, imageToUpload: HTMLImageElement) {
- return ``;
}
- ngOnDestroy() {}
+ ngOnDestroy() {
+ // this.projectSubscription.unsubscribe();
+ }
}
diff --git a/src/app/components/project-map/project-map.component.html b/src/app/components/project-map/project-map.component.html
index ffd368c45..ec2554a2c 100644
--- a/src/app/components/project-map/project-map.component.html
+++ b/src/app/components/project-map/project-map.component.html
@@ -1,7 +1,7 @@
-
call_made
- Export portable project
+ Export project
call_received
- Import portable project
+ Import project
close
@@ -158,7 +159,7 @@
Show console
- Show topology/servers summary
Show notifications
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/src/app/components/project-map/project-map.component.scss b/src/app/components/project-map/project-map.component.scss
index e32958950..dacbf3c97 100644
--- a/src/app/components/project-map/project-map.component.scss
+++ b/src/app/components/project-map/project-map.component.scss
@@ -73,10 +73,6 @@ g.node:hover {
font-size: 28px !important;
}
- .map-settings-button mat-icon {
- font-size: 22px !important;
- }
-
.selected {
background: rgba(0, 151, 167, 0.1);
@@ -386,6 +382,9 @@ g.node text,
.context-menu-items .mat-menu-item:focus {
background: none;
}
+.light-theme .context-menu-items .mat-menu-item:hover {
+ background-color: rgba(153, 152, 152, 0.795) !important;
+}
.visible {
display: none;
diff --git a/src/app/components/project-map/project-map.component.spec.ts b/src/app/components/project-map/project-map.component.spec.ts
index bdad1e589..f60cb0c34 100644
--- a/src/app/components/project-map/project-map.component.spec.ts
+++ b/src/app/components/project-map/project-map.component.spec.ts
@@ -1,9 +1,9 @@
import { CommonModule } from '@angular/common';
import { NO_ERRORS_SCHEMA } from '@angular/core';
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MatBottomSheetModule } from '@angular/material/bottom-sheet';
import { MatCheckboxModule } from '@angular/material/checkbox';
-import { MatDialogModule } from '@angular/material/dialog';
+import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatIconModule } from '@angular/material/icon';
import { MatMenuModule } from '@angular/material/menu';
import { MatToolbarModule } from '@angular/material/toolbar';
@@ -46,7 +46,7 @@ import { ProjectWebServiceHandler } from '../../handlers/project-web-service-han
import { CapturingSettings } from '../../models/capturingSettings';
import { Link } from '../../models/link';
import { Project } from '../../models/project';
-import { Server } from '../../models/server';
+import{ Controller } from '../../models/controller';
import { DrawingService } from '../../services/drawing.service';
import { LinkService } from '../../services/link.service';
import { MapScaleService } from '../../services/mapScale.service';
@@ -56,8 +56,8 @@ import { NotificationService } from '../../services/notification.service';
import { ProjectService } from '../../services/project.service';
import { MockedProjectService } from '../../services/project.service.spec';
import { RecentlyOpenedProjectService } from '../../services/recentlyOpenedProject.service';
-import { ServerService } from '../../services/server.service';
-import { MockedServerService } from '../../services/server.service.spec';
+import { ControllerService } from '../../services/controller.service';
+import { MockedControllerService } from '../../services/controller.service.spec';
import { SettingsService } from '../../services/settings.service';
import { ToasterService } from '../../services/toaster.service';
import { MockedToasterService } from '../../services/toaster.service.spec';
@@ -89,55 +89,55 @@ export class MockedNodeService {
return of(this.node);
}
- delete(server: Server, node: Node) {
+ delete(controller:Controller , node: Node) {
return of();
}
- startAll(server: Server, project: Project) {
+ startAll(controller:Controller , project: Project) {
return of();
}
- stopAll(server: Server, project: Project) {
+ stopAll(controller:Controller , project: Project) {
return of();
}
- suspendAll(server: Server, project: Project) {
+ suspendAll(controller:Controller , project: Project) {
return of();
}
- reloadAll(server: Server, project: Project) {
+ reloadAll(controller:Controller , project: Project) {
return of();
}
- start(server: Server, node: Node) {
+ start(controller:Controller , node: Node) {
return of();
}
- stop(server: Server, node: Node) {
+ stop(controller:Controller , node: Node) {
return of();
}
- suspend(server: Server, node: Node) {
+ suspend(controller:Controller , node: Node) {
return of();
}
- reload(server: Server, node: Node) {
+ reload(controller:Controller , node: Node) {
return of();
}
- duplicate(server: Server, node: Node) {
+ duplicate(controller:Controller , node: Node) {
return of(node);
}
- getStartupConfiguration(server: Server, node: Node) {
+ getStartupConfiguration(controller:Controller , node: Node) {
return of('sample config');
}
- saveConfiguration(server: Server, node: Node, configuration: string) {
+ saveConfiguration(controller:Controller , node: Node, configuration: string) {
return of(configuration);
}
- update(server: Server, node: Node) {
+ update(controller:Controller , node: Node) {
return of(node);
}
}
@@ -146,31 +146,31 @@ export class MockedDrawingService {
public drawing = {} as Drawing;
constructor() {}
- add(_server: Server, _project_id: string, _x: number, _y: number, _svg: string) {
+ add(_controller:Controller , _project_id: string, _x: number, _y: number, _svg: string) {
return of(this.drawing);
}
- duplicate(server: Server, project_id: string, drawing: Drawing) {
+ duplicate(controller:Controller , project_id: string, drawing: Drawing) {
return of(drawing);
}
- updatePosition(_server: Server, _project: Project, _drawing: Drawing, _x: number, _y: number) {
+ updatePosition(_controller:Controller , _project: Project, _drawing: Drawing, _x: number, _y: number) {
return of(this.drawing);
}
- updateSizeAndPosition(_server: Server, _drawing: Drawing, _x: number, _y: number, _svg: string) {
+ updateSizeAndPosition(_controller:Controller , _drawing: Drawing, _x: number, _y: number, _svg: string) {
return of(this.drawing);
}
- update(_server: Server, _drawing: Drawing) {
+ update(_controller:Controller , _drawing: Drawing) {
return of(this.drawing);
}
- delete(_server: Server, _drawing: Drawing) {
+ delete(_controller:Controller , _drawing: Drawing) {
return of(this.drawing);
}
- updateText(_server: Server, _drawing: Drawing, _svg: string): Observable
{
+ updateText(_controller:Controller , _drawing: Drawing, _svg: string): Observable {
return of(this.drawing);
}
}
@@ -178,15 +178,15 @@ export class MockedDrawingService {
export class MockedLinkService {
constructor() {}
- getLink(server: Server, projectId: string, linkId: string) {
+ getLink(controller:Controller , projectId: string, linkId: string) {
return of({});
}
- deleteLink(_server: Server, link: Link) {
+ deleteLink(_controller:Controller , link: Link) {
return of({});
}
- updateLink(server: Server, link: Link) {
+ updateLink(controller:Controller , link: Link) {
return of({});
}
@@ -198,11 +198,11 @@ export class MockedLinkService {
return of({});
}
- startCaptureOnLink(server: Server, link: Link, settings: CapturingSettings) {
+ startCaptureOnLink(controller:Controller , link: Link, settings: CapturingSettings) {
return of({});
}
- getAvailableFilters(server: Server, link: Link) {
+ getAvailableFilters(controller:Controller , link: Link) {
return of({});
}
}
@@ -258,12 +258,12 @@ xdescribe('ProjectMapComponent', () => {
let nodeCreatedLabelStylesFixer;
let mockedRouter = new MockedActivatedRoute();
- beforeEach(async(() => {
+ beforeEach(async() => {
nodeCreatedLabelStylesFixer = {
fix: (node) => node,
};
- TestBed.configureTestingModule({
+ await TestBed.configureTestingModule({
imports: [
MatBottomSheetModule,
MatIconModule,
@@ -276,7 +276,7 @@ xdescribe('ProjectMapComponent', () => {
],
providers: [
{ provide: ActivatedRoute },
- { provide: ServerService, useClass: MockedServerService },
+ { provide: ControllerService, useClass: MockedControllerService },
{ provide: ProjectService, useClass: MockedProjectService },
{ provide: NodeService },
{ provide: LinkService },
@@ -319,11 +319,15 @@ xdescribe('ProjectMapComponent', () => {
{ provide: MapSymbolsDataSource, useClass: MapSymbolsDataSource },
{ provide: MapSettingsService, useClass: MapSettingsService },
{ provide: NotificationService },
+ { provide: MatDialogRef, useValue: {}},
+ { provide: MAT_DIALOG_DATA, useValue: {}},
+
+
],
declarations: [ProjectMapComponent, ProjectMapMenuComponent, D3MapComponent, ...ANGULAR_MAP_DECLARATIONS],
schemas: [NO_ERRORS_SCHEMA],
}).compileComponents();
- }));
+ });
beforeEach(() => {
fixture = TestBed.createComponent(ProjectMapComponent);
diff --git a/src/app/components/project-map/project-map.component.ts b/src/app/components/project-map/project-map.component.ts
index 3f2ce336b..7705a19ad 100644
--- a/src/app/components/project-map/project-map.component.ts
+++ b/src/app/components/project-map/project-map.component.ts
@@ -1,11 +1,22 @@
-import { ChangeDetectorRef, Component, ComponentFactoryResolver, ComponentRef, Injector, OnDestroy, OnInit, SimpleChange, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core';
+import {
+ ChangeDetectorRef,
+ Component,
+ ComponentRef,
+ OnDestroy,
+ OnInit,
+ ViewChild,
+ ViewContainerRef,
+ ViewEncapsulation,
+} from '@angular/core';
import { MatBottomSheet } from '@angular/material/bottom-sheet';
import { MatDialog } from '@angular/material/dialog';
import { Title } from '@angular/platform-browser';
import { ActivatedRoute, ParamMap, Router } from '@angular/router';
+import { ExportPortableProjectComponent } from '../../components/export-portable-project/export-portable-project.component';
+import { environment } from 'environments/environment';
import * as Mousetrap from 'mousetrap';
import { from, Observable, Subscription } from 'rxjs';
-import { map, mergeMap, takeUntil } from 'rxjs/operators';
+import { map, mergeMap } from 'rxjs/operators';
import { D3MapComponent } from '../../cartography/components/d3-map/d3-map.component';
import { MapDrawingToDrawingConverter } from '../../cartography/converters/map/map-drawing-to-drawing-converter';
import { MapLabelToLabelConverter } from '../../cartography/converters/map/map-label-to-label-converter';
@@ -51,7 +62,7 @@ import { ProgressService } from '../../common/progress/progress.service';
import { ProjectWebServiceHandler } from '../../handlers/project-web-service-handler';
import { Link } from '../../models/link';
import { Project } from '../../models/project';
-import { Server } from '../../models/server';
+import{ Controller } from '../../models/controller';
import { Symbol } from '../../models/symbol';
import { DrawingService } from '../../services/drawing.service';
import { MapScaleService } from '../../services/mapScale.service';
@@ -61,7 +72,7 @@ import { NodeConsoleService } from '../../services/nodeConsole.service';
import { NotificationService } from '../../services/notification.service';
import { ProjectService } from '../../services/project.service';
import { RecentlyOpenedProjectService } from '../../services/recentlyOpenedProject.service';
-import { ServerService } from '../../services/server.service';
+import { ControllerService } from '../../services/controller.service';
import { Settings, SettingsService } from '../../services/settings.service';
import { SymbolService } from '../../services/symbol.service';
import { ThemeService } from '../../services/theme.service';
@@ -79,6 +90,7 @@ import { ContextMenuComponent } from './context-menu/context-menu.component';
import { NodeCreatedLabelStylesFixer } from './helpers/node-created-label-styles-fixer';
import { NewTemplateDialogComponent } from './new-template-dialog/new-template-dialog.component';
import { ProjectMapMenuComponent } from './project-map-menu/project-map-menu.component';
+import { ProjectReadmeComponent } from './project-readme/project-readme.component';
@Component({
selector: 'app-project-map',
@@ -92,7 +104,7 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
public drawings: Drawing[] = [];
public symbols: Symbol[] = [];
public project: Project;
- public server: Server;
+ public controller:Controller ;
public projectws: WebSocket;
public ws: WebSocket;
public isProjectMapMenuVisible: boolean = false;
@@ -105,6 +117,7 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
public toolbarVisibility: boolean = true;
public symbolScaling: boolean = true;
private instance: ComponentRef;
+ // private instance: any
tools = {
selection: true,
@@ -123,13 +136,13 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
@ViewChild(ContextMenuComponent) contextMenu: ContextMenuComponent;
@ViewChild(D3MapComponent) mapChild: D3MapComponent;
@ViewChild(ProjectMapMenuComponent) projectMapMenuComponent: ProjectMapMenuComponent;
- @ViewChild('topologySummaryContainer', {read: ViewContainerRef}) topologySummaryContainer: ViewContainerRef;
+ @ViewChild('topologySummaryContainer', { read: ViewContainerRef }) topologySummaryContainer: ViewContainerRef;
private projectMapSubscription: Subscription = new Subscription();
constructor(
private route: ActivatedRoute,
- private serverService: ServerService,
+ private controllerService: ControllerService,
private projectService: ProjectService,
private nodeService: NodeService,
public drawingService: DrawingService,
@@ -174,19 +187,23 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
private nodeConsoleService: NodeConsoleService,
private symbolService: SymbolService,
private cd: ChangeDetectorRef,
- private cfr: ComponentFactoryResolver,
- private injector: Injector
+ // private cfr: ComponentFactoryResolver,
+ // private injector: Injector,
+ private viewContainerRef: ViewContainerRef
) {}
+ // constructor(private viewContainerRef: ViewContainerRef) {}
+ // createMyComponent() {this.viewContainerRef.createComponent(MyComponent);}
+
ngOnInit() {
this.getSettings();
this.progressService.activate();
- if (this.serverService.isServiceInitialized) {
+ if (this.controllerService.isServiceInitialized) {
this.getData();
} else {
this.projectMapSubscription.add(
- this.serverService.serviceInitialized.subscribe((val) => {
+ this.controllerService.serviceInitialized.subscribe((val) => {
if (val) this.getData();
})
);
@@ -219,17 +236,19 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
async lazyLoadTopologySummary() {
if (this.isTopologySummaryVisible) {
- const {TopologySummaryComponent} = await import('../topology-summary/topology-summary.component');
- const componentFactory = this.cfr.resolveComponentFactory(TopologySummaryComponent);
- this.instance = this.topologySummaryContainer.createComponent(componentFactory, null, this.injector);
- this.instance.instance.server = this.server;
+ const { TopologySummaryComponent } = await import('../topology-summary/topology-summary.component');
+ this.instance = this.viewContainerRef.createComponent(TopologySummaryComponent);
+
+ // const componentFactory = this.cfr.resolveComponentFactory(TopologySummaryComponent);
+ // this.instance = this.topologySummaryContainer.createComponent(componentFactory, null, this.injector);
+ this.instance.instance.controller = this.controller;
this.instance.instance.project = this.project;
} else if (this.instance) {
- if (this.instance.instance) {
+ if (this.instance.instance) {
this.instance.instance.ngOnDestroy();
this.instance.destroy();
}
- }
+ }
}
addSubscriptions() {
@@ -248,15 +267,15 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
this.projectMapSubscription.add(
this.nodesDataSource.changes.subscribe((nodes: Node[]) => {
- if (!this.server) return;
+ if (!this.controller) return;
nodes.forEach(async (node: Node) => {
- node.symbol_url = `${this.server.protocol}//${this.server.host}:${this.server.port}/v2/symbols/${node.symbol}/raw`;
+ node.symbol_url = `${this.controller.protocol}//${this.controller.host}:${this.controller.port}/${environment.current_version}/symbols/${node.symbol}/raw`;
- // if (node.width == 0 && node.height == 0) {
- // let symbolDimensions = await this.symbolService.getDimensions(this.server, node.symbol).toPromise();
- // node.width = symbolDimensions.width;
- // node.height = symbolDimensions.height;
- // }
+ if (node.width == 0 && node.height == 0) {
+ let symbolDimensions = await this.symbolService.getDimensions(this.controller, node.symbol).toPromise();
+ node.width = symbolDimensions.width;
+ node.height = symbolDimensions.height;
+ }
});
this.nodes = nodes;
@@ -267,6 +286,7 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
this.projectMapSubscription.add(
this.linksDataSource.changes.subscribe((links: Link[]) => {
+ console.log('from project map component');
this.links = links;
this.mapChangeDetectorRef.detectChanges();
})
@@ -309,15 +329,14 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
getData() {
const routeSub = this.route.paramMap.subscribe((paramMap: ParamMap) => {
- const server_id = parseInt(paramMap.get('server_id'), 10);
+ const controller_id = parseInt(paramMap.get('controller_id'), 10);
- from(this.serverService.get(server_id))
+ from(this.controllerService.get(controller_id))
.pipe(
- mergeMap((server: Server) => {
- if (!server) this.router.navigate(['/servers']);
-
- this.server = server;
- return this.projectService.get(server, paramMap.get('project_id')).pipe(
+ mergeMap((controller:Controller ) => {
+ if (!controller) this.router.navigate(['/controllers']);
+ this.controller = controller;
+ return this.projectService.get(controller, paramMap.get('project_id')).pipe(
map((project) => {
return project;
})
@@ -325,28 +344,28 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
}),
mergeMap((project: Project) => {
this.project = project;
- if (!project) this.router.navigate(['/servers']);
+ if (!project) this.router.navigate(['/controllers']);
- this.projectService.open(this.server, this.project.project_id);
+ this.projectService.open(this.controller, this.project.project_id);
this.title.setTitle(this.project.name);
-
this.isInterfaceLabelVisible = this.mapSettingsService.showInterfaceLabels;
this.toggleShowTopologySummary(this.mapSettingsService.isTopologySummaryVisible);
- this.recentlyOpenedProjectService.setServerId(this.server.id.toString());
+ this.recentlyOpenedProjectService.setcontrollerId(this.controller.id.toString());
if (this.project.status === 'opened') {
return new Observable((observer) => {
observer.next(this.project);
});
} else {
- return this.projectService.open(this.server, this.project.project_id);
+ return this.projectService.open(this.controller, this.project.project_id);
}
})
)
.subscribe(
(project: Project) => {
this.onProjectLoad(project);
+ if (this.mapSettingsService.openReadme) this.showReadme();
},
(error) => {
this.progressService.setError(error);
@@ -397,7 +416,7 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
Mousetrap.bind('ctrl+shift+s', (event: Event) => {
event.preventDefault();
- this.router.navigate(['/server', this.server.id, 'preferences']);
+ this.router.navigate(['/controller', this.controller.id, 'preferences']);
});
Mousetrap.bind('del', (event: Event) => {
@@ -418,7 +437,7 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
.filter((item) => item instanceof MapNode)
.forEach((item: MapNode) => {
const node = this.mapNodeToNode.convert(item);
- this.nodeService.delete(this.server, node).subscribe((data) => {
+ this.nodeService.delete(this.controller, node).subscribe((data) => {
this.toasterService.success('Node has been deleted');
});
});
@@ -427,7 +446,7 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
.filter((item) => item instanceof MapDrawing)
.forEach((item: MapDrawing) => {
const drawing = this.mapDrawingToDrawing.convert(item);
- this.drawingService.delete(this.server, drawing).subscribe((data) => {
+ this.drawingService.delete(this.controller, drawing).subscribe((data) => {
this.toasterService.success('Drawing has been deleted');
});
});
@@ -440,15 +459,15 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
this.recentlyOpenedProjectService.setProjectId(this.project.project_id);
const subscription = this.projectService
- .nodes(this.server, project.project_id)
+ .nodes(this.controller, project.project_id)
.pipe(
mergeMap((nodes: Node[]) => {
this.nodesDataSource.set(nodes);
- return this.projectService.links(this.server, project.project_id);
+ return this.projectService.links(this.controller, project.project_id);
}),
mergeMap((links: Link[]) => {
this.linksDataSource.set(links);
- return this.projectService.drawings(this.server, project.project_id);
+ return this.projectService.drawings(this.controller, project.project_id);
})
)
.subscribe((drawings: Drawing[]) => {
@@ -463,7 +482,7 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
}
setUpProjectWS(project: Project) {
- this.projectws = new WebSocket(this.notificationService.projectNotificationsPath(this.server, project.project_id));
+ this.projectws = new WebSocket(this.notificationService.projectNotificationsPath(this.controller, project.project_id));
this.projectws.onmessage = (event: MessageEvent) => {
this.projectWebServiceHandler.handleMessage(JSON.parse(event.data));
@@ -475,7 +494,7 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
}
setUpWS() {
- this.ws = new WebSocket(this.notificationService.notificationsPath(this.server));
+ this.ws = new WebSocket(this.notificationService.notificationsPath(this.controller));
}
setUpMapCallbacks() {
@@ -573,25 +592,25 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
this.progressService.activate();
this.nodeService
.createFromTemplate(
- this.server,
+ this.controller,
this.project,
nodeAddedEvent.template,
nodeAddedEvent.x,
nodeAddedEvent.y,
- nodeAddedEvent.server
+ nodeAddedEvent.controller
)
.subscribe(
(node: Node) => {
// if (nodeAddedEvent.name !== nodeAddedEvent.template.name) {
// node.name = nodeAddedEvent.name;
- // this.nodeService.updateNode(this.server, node).subscribe(()=>{});
+ // this.nodeService.updateNode(this.controller, node).subscribe(()=>{});
// }
- this.projectService.nodes(this.server, this.project.project_id).subscribe((nodes: Node[]) => {
+ this.projectService.nodes(this.controller, this.project.project_id).subscribe((nodes: Node[]) => {
nodes
.filter((node) => node.label.style === null)
.forEach((node) => {
const fixedNode = this.nodeCreatedLabelStylesFixer.fix(node);
- this.nodeService.updateLabel(this.server, node, fixedNode.label).subscribe();
+ this.nodeService.updateLabel(this.controller, node, fixedNode.label).subscribe();
});
this.nodesDataSource.set(nodes);
@@ -906,7 +925,7 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
disableClose: true,
});
let instance = dialogRef.componentInstance;
- instance.server = this.server;
+ instance.controller = this.controller;
}
saveProject() {
@@ -916,7 +935,7 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
disableClose: true,
});
let instance = dialogRef.componentInstance;
- instance.server = this.server;
+ instance.controller = this.controller;
instance.project = this.project;
}
@@ -927,7 +946,7 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
disableClose: true,
});
let instance = dialogRef.componentInstance;
- instance.server = this.server;
+ instance.controller = this.controller;
instance.project = this.project;
}
@@ -939,22 +958,22 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
disableClose: true,
});
let instance = dialogRef.componentInstance;
- instance.server = this.server;
+ instance.controller = this.controller;
const subscription = dialogRef.componentInstance.onImportProject.subscribe((projectId: string) => {
uuid = projectId;
});
- dialogRef.afterClosed().subscribe(() => {
+ dialogRef.afterClosed().subscribe((isCancel:boolean) => {
subscription.unsubscribe();
- if (uuid) {
+ if (uuid && !isCancel) {
this.bottomSheet.open(NavigationDialogComponent);
let bottomSheetRef = this.bottomSheet._openedBottomSheetRef;
bottomSheetRef.instance.projectMessage = 'imported project';
const bottomSheetSubscription = bottomSheetRef.afterDismissed().subscribe((result: boolean) => {
if (result) {
- this.projectService.open(this.server, uuid).subscribe(() => {
- this.router.navigate(['/server', this.server.id, 'project', uuid]);
+ this.projectService.open(this.controller, uuid).subscribe(() => {
+ this.router.navigate(['/controller', this.controller.id, 'project', uuid]);
});
}
});
@@ -975,10 +994,23 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
) {
this.toasterService.error('Project with running nodes cannot be exported.');
} else {
- location.assign(this.projectService.getExportPath(this.server, this.project));
+ // location.assign(this.projectService.getExportPath(this.controller, this.project));
+ this.exportPortableProjectDialog();
}
}
+ exportPortableProjectDialog() {
+ const dialogRef = this.dialog.open(ExportPortableProjectComponent, {
+ width: '700px',
+ maxHeight: '850px',
+ autoFocus: false,
+ disableClose: true,
+ data: {controllerDetails:this.controller,projectDetails:this.project},
+ });
+
+ dialogRef.afterClosed().subscribe((isAddes: boolean) => {});
+ }
+
public uploadImageFile(event) {
this.readImageFile(event.target);
}
@@ -990,11 +1022,11 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
fileReader.onloadend = () => {
let image = fileReader.result;
- let svg = ``;
this.drawingService
- .add(this.server, this.project.project_id, -(imageToUpload.width / 2), -(imageToUpload.height / 2), svg)
+ .add(this.controller, this.project.project_id, -(imageToUpload.width / 2), -(imageToUpload.height / 2), svg)
.subscribe(() => {});
};
@@ -1010,8 +1042,8 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
bottomSheetRef.instance.message = 'Do you want to close the project?';
const bottomSheetSubscription = bottomSheetRef.afterDismissed().subscribe((result: boolean) => {
if (result) {
- this.projectService.close(this.server, this.project.project_id).subscribe(() => {
- this.router.navigate(['/server', this.server.id, 'projects']);
+ this.projectService.close(this.controller, this.project.project_id).subscribe(() => {
+ this.router.navigate(['/controller', this.controller.id, 'projects']);
});
}
});
@@ -1023,8 +1055,8 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
bottomSheetRef.instance.message = 'Do you want to delete the project?';
const bottomSheetSubscription = bottomSheetRef.afterDismissed().subscribe((result: boolean) => {
if (result) {
- this.projectService.delete(this.server, this.project.project_id).subscribe(() => {
- this.router.navigate(['/server', this.server.id, 'projects']);
+ this.projectService.delete(this.controller, this.project.project_id).subscribe(() => {
+ this.router.navigate(['/controller', this.controller.id, 'projects']);
});
}
});
@@ -1038,7 +1070,19 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
disableClose: true,
});
let instance = dialogRef.componentInstance;
- instance.server = this.server;
+ instance.controller = this.controller;
+ instance.project = this.project;
+ }
+
+ public showReadme() {
+ const dialogRef = this.dialog.open(ProjectReadmeComponent, {
+ width: '600px',
+ height: '650px',
+ autoFocus: false,
+ disableClose: true,
+ });
+ let instance = dialogRef.componentInstance;
+ instance.controller = this.controller;
instance.project = this.project;
}
diff --git a/src/app/components/project-map/project-readme/project-readme.component.html b/src/app/components/project-map/project-readme/project-readme.component.html
new file mode 100644
index 000000000..263e05cf5
--- /dev/null
+++ b/src/app/components/project-map/project-readme/project-readme.component.html
@@ -0,0 +1,7 @@
+Project README
+
+
+
+
+ Close
+
\ No newline at end of file
diff --git a/src/app/components/project-map/project-readme/project-readme.component.scss b/src/app/components/project-map/project-readme/project-readme.component.scss
new file mode 100644
index 000000000..605a3657e
--- /dev/null
+++ b/src/app/components/project-map/project-readme/project-readme.component.scss
@@ -0,0 +1,4 @@
+.textWrapper {
+ height: 500px!important;
+ overflow-y: scroll;
+}
diff --git a/src/app/components/project-map/project-readme/project-readme.component.ts b/src/app/components/project-map/project-readme/project-readme.component.ts
new file mode 100644
index 000000000..646c9d25f
--- /dev/null
+++ b/src/app/components/project-map/project-readme/project-readme.component.ts
@@ -0,0 +1,45 @@
+import { Component, AfterViewInit } from '@angular/core';
+import { MatDialogRef } from '@angular/material/dialog';
+import{ Controller } from '../../../models/controller';
+import { Project } from '../../../models/project';
+import { ProjectService } from '../../../services/project.service';
+import * as marked from 'marked';
+import { ElementRef } from '@angular/core';
+import { Renderer2 } from '@angular/core';
+import { ViewChild } from '@angular/core';
+
+@Component({
+ selector: 'app-project-readme',
+ templateUrl: './project-readme.component.html',
+ styleUrls: ['./project-readme.component.scss']
+})
+export class ProjectReadmeComponent implements AfterViewInit {
+ controller:Controller ;
+ project: Project;
+ @ViewChild('text', {static: false}) text: ElementRef;
+
+ constructor(
+ public dialogRef: MatDialogRef,
+ private projectService: ProjectService,
+ private elementRef: ElementRef,
+ private renderer: Renderer2
+ ) {}
+
+ ngAfterViewInit() {
+ let markdown = ``;
+
+ this.projectService.getReadmeFile(this.controller, this.project.project_id).subscribe(file => {
+ if (file) {
+ markdown = file;
+ setTimeout(function(){
+ const markdownHtml = marked(markdown);
+ document.getElementById('text').innerHTML = markdownHtml;
+ }, 1000);
+ }
+ });
+ }
+
+ onNoClick() {
+ this.dialogRef.close();
+ }
+}
diff --git a/src/app/components/project-map/screenshot-dialog/screenshot-dialog.component.ts b/src/app/components/project-map/screenshot-dialog/screenshot-dialog.component.ts
index b7fed3660..f7cc74de5 100644
--- a/src/app/components/project-map/screenshot-dialog/screenshot-dialog.component.ts
+++ b/src/app/components/project-map/screenshot-dialog/screenshot-dialog.component.ts
@@ -1,5 +1,5 @@
import { Component, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialogRef } from '@angular/material/dialog';
import { DeviceDetectorService } from 'ngx-device-detector';
import { ElectronService } from 'ngx-electron';
@@ -11,19 +11,19 @@ import { ToasterService } from '../../../services/toaster.service';
styleUrls: ['./screenshot-dialog.component.scss'],
})
export class ScreenshotDialogComponent implements OnInit {
- nameForm: FormGroup;
+ nameForm: UntypedFormGroup;
isPngAvailable: boolean;
filetype: string = 'svg';
constructor(
public dialogRef: MatDialogRef,
private toasterService: ToasterService,
- private formBuilder: FormBuilder,
+ private formBuilder: UntypedFormBuilder,
private electronService: ElectronService,
private deviceService: DeviceDetectorService
) {
this.nameForm = this.formBuilder.group({
- screenshotName: new FormControl(`screenshot-${Date.now()}`, [Validators.required]),
+ screenshotName: new UntypedFormControl(`screenshot-${Date.now()}`, [Validators.required]),
});
this.isPngAvailable = this.electronService.isWindows || this.deviceService.getDeviceInfo().os === 'Windows';
}
diff --git a/src/app/components/project-map/web-console/web-console.component.ts b/src/app/components/project-map/web-console/web-console.component.ts
index c3a6a89a8..c3df43a3a 100644
--- a/src/app/components/project-map/web-console/web-console.component.ts
+++ b/src/app/components/project-map/web-console/web-console.component.ts
@@ -4,7 +4,7 @@ import { AttachAddon } from 'xterm-addon-attach';
import { FitAddon } from 'xterm-addon-fit';
import { Node } from '../../../cartography/models/node';
import { Project } from '../../../models/project';
-import { Server } from '../../../models/server';
+import{ Controller } from '../../../models/controller';
import { NodeConsoleService } from '../../../services/nodeConsole.service';
import { ThemeService } from '../../../services/theme.service';
@@ -15,7 +15,7 @@ import { ThemeService } from '../../../services/theme.service';
styleUrls: ['../../../../../node_modules/xterm/css/xterm.css', './web-console.component.scss'],
})
export class WebConsoleComponent implements OnInit, AfterViewInit {
- @Input() server: Server;
+ @Input() controller:Controller ;
@Input() project: Project;
@Input() node: Node;
@@ -53,7 +53,7 @@ export class WebConsoleComponent implements OnInit, AfterViewInit {
if (this.isLightThemeEnabled)
this.term.setOption('theme', { background: 'white', foreground: 'black', cursor: 'black' });
- const socket = new WebSocket(this.consoleService.getUrl(this.server, this.node));
+ const socket = new WebSocket(this.consoleService.getUrl(this.controller, this.node));
socket.onerror = (event) => {
this.term.write('Connection lost');
diff --git a/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.spec.ts b/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.spec.ts
index 77cc7a32e..349730a17 100644
--- a/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.spec.ts
+++ b/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.spec.ts
@@ -1,4 +1,4 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatFormFieldModule } from '@angular/material/form-field';
@@ -8,7 +8,7 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { Router } from '@angular/router';
import { of } from 'rxjs/internal/observable/of';
import { Project } from '../../../models/project';
-import { Server } from '../../../models/server';
+import{ Controller } from '../../../models/controller';
import { ProjectService } from '../../../services/project.service';
import { ToasterService } from '../../../services/toaster.service';
import { AddBlankProjectDialogComponent } from './add-blank-project-dialog.component';
@@ -53,7 +53,7 @@ export class MockedProjectService {
describe('AddBlankProjectDialogComponent', () => {
let component: AddBlankProjectDialogComponent;
let fixture: ComponentFixture;
- let server: Server;
+ let controller:Controller ;
let router = {
navigate: jasmine.createSpy('navigate'),
};
@@ -64,8 +64,8 @@ describe('AddBlankProjectDialogComponent', () => {
close: jasmine.createSpy('close'),
};
- beforeEach(async(() => {
- TestBed.configureTestingModule({
+ beforeEach(async() => {
+ await TestBed.configureTestingModule({
imports: [
MatDialogModule,
MatFormFieldModule,
@@ -85,15 +85,15 @@ describe('AddBlankProjectDialogComponent', () => {
declarations: [AddBlankProjectDialogComponent],
}).compileComponents();
- server = new Server();
- server.host = 'localhost';
- server.port = 80;
- }));
+ controller = new Controller ();
+ controller.host = 'localhost';
+ controller.port = 80;
+ });
beforeEach(() => {
fixture = TestBed.createComponent(AddBlankProjectDialogComponent);
component = fixture.componentInstance;
- component.server = server;
+ component.controller = controller;
fixture.detectChanges();
});
diff --git a/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.ts b/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.ts
index 7fd23fbcc..8683eff17 100644
--- a/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.ts
+++ b/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.ts
@@ -1,10 +1,10 @@
import { Component, EventEmitter, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialog, MatDialogRef } from '@angular/material/dialog';
import { Router } from '@angular/router';
import { v4 as uuid } from 'uuid';
import { Project } from '../../../models/project';
-import { Server } from '../../../models/server';
+import{ Controller } from '../../../models/controller';
import { ProjectService } from '../../../services/project.service';
import { ToasterService } from '../../../services/toaster.service';
import { projectNameAsyncValidator } from '../../../validators/project-name-async-validator';
@@ -18,8 +18,8 @@ import { ProjectNameValidator } from '../models/projectNameValidator';
providers: [ProjectNameValidator],
})
export class AddBlankProjectDialogComponent implements OnInit {
- server: Server;
- projectNameForm: FormGroup;
+ controller:Controller ;
+ projectNameForm: UntypedFormGroup;
uuid: string;
onAddProject = new EventEmitter();
@@ -29,16 +29,16 @@ export class AddBlankProjectDialogComponent implements OnInit {
private dialog: MatDialog,
private projectService: ProjectService,
private toasterService: ToasterService,
- private formBuilder: FormBuilder,
+ private formBuilder: UntypedFormBuilder,
private projectNameValidator: ProjectNameValidator
) {}
ngOnInit() {
this.projectNameForm = this.formBuilder.group({
- projectName: new FormControl(
+ projectName: new UntypedFormControl(
null,
[Validators.required, this.projectNameValidator.get],
- [projectNameAsyncValidator(this.server, this.projectService)]
+ [projectNameAsyncValidator(this.controller, this.projectService)]
),
});
}
@@ -51,7 +51,7 @@ export class AddBlankProjectDialogComponent implements OnInit {
if (this.projectNameForm.invalid) {
return;
}
- this.projectService.list(this.server).subscribe((projects: Project[]) => {
+ this.projectService.list(this.controller).subscribe((projects: Project[]) => {
const projectName = this.projectNameForm.controls['projectName'].value;
let existingProject = projects.find((project) => project.name === projectName);
@@ -70,11 +70,11 @@ export class AddBlankProjectDialogComponent implements OnInit {
addProject(): void {
this.uuid = uuid();
this.projectService
- .add(this.server, this.projectNameForm.controls['projectName'].value, this.uuid)
+ .add(this.controller, this.projectNameForm.controls['projectName'].value, this.uuid)
.subscribe((project: Project) => {
this.dialogRef.close();
this.toasterService.success(`Project ${project.name} added`);
- this.router.navigate(['/server', this.server.id, 'project', project.project_id]);
+ this.router.navigate(['/controller', this.controller.id, 'project', project.project_id]);
});
}
@@ -97,8 +97,8 @@ export class AddBlankProjectDialogComponent implements OnInit {
dialogRef.afterClosed().subscribe((answer: boolean) => {
if (answer) {
- this.projectService.close(this.server, existingProject.project_id).subscribe(() => {
- this.projectService.delete(this.server, existingProject.project_id).subscribe(() => {
+ this.projectService.close(this.controller, existingProject.project_id).subscribe(() => {
+ this.projectService.delete(this.controller, existingProject.project_id).subscribe(() => {
this.addProject();
});
});
diff --git a/src/app/components/projects/choose-name-dialog/choose-name-dialog.component.html b/src/app/components/projects/choose-name-dialog/choose-name-dialog.component.html
index 42d261a1d..22505eb65 100644
--- a/src/app/components/projects/choose-name-dialog/choose-name-dialog.component.html
+++ b/src/app/components/projects/choose-name-dialog/choose-name-dialog.component.html
@@ -1,4 +1,4 @@
-Please choose name for exporting project
+Save project as