Compare commits

..

53 Commits

Author SHA1 Message Date
255fdae3e2 Release v3.0.5
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node 14 (push) Has been cancelled
Build / Node 16 (push) Has been cancelled
Build / Node 18 (push) Has been cancelled
2025-05-14 19:02:09 +02:00
b18b617b24 Fix issue when login with wrong credentials. Fixes https://github.com/GNS3/gns3-gui/issues/3714
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node 14 (push) Has been cancelled
Build / Node 16 (push) Has been cancelled
Build / Node 18 (push) Has been cancelled
2025-03-16 20:30:03 +07:00
cdf1b0ab72 Fix issue when login with wrong credentials. Fixes #1481
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node 14 (push) Has been cancelled
Build / Node 16 (push) Has been cancelled
Build / Node 18 (push) Has been cancelled
2025-03-15 14:58:54 +07:00
8222417c91 Use short imports
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node 14 (push) Has been cancelled
Build / Node 16 (push) Has been cancelled
Build / Node 18 (push) Has been cancelled
2025-03-02 17:44:00 +07:00
c7ebc354b9 Formatting for Controller 2025-03-02 17:53:30 +08:00
82905ea72f Development on 3.0.5.dev1
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node 14 (push) Has been cancelled
Build / Node 16 (push) Has been cancelled
Build / Node 18 (push) Has been cancelled
2025-02-25 22:37:10 +08:00
c49e5d2573 Release v3.0.4
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node 14 (push) Has been cancelled
Build / Node 16 (push) Has been cancelled
Build / Node 18 (push) Has been cancelled
2025-02-23 12:00:58 +10:00
de186fef4c Merge pull request #1543 from GNS3/idlepc
Some checks are pending
CodeQL / Analyze (javascript) (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
Build / Node 14 (push) Waiting to run
Build / Node 16 (push) Waiting to run
Build / Node 18 (push) Waiting to run
Idle-PC configuration support
2025-02-22 19:11:43 +08:00
346e3d988f Fix tests 2025-02-22 21:04:51 +10:00
4a34007cf4 Implement Idle-PC finder for IOS templates 2025-02-22 20:57:32 +10:00
aeb26b0f17 Add tooltip for idle-pc dialog and implement auto idle-pc action 2025-02-22 18:59:57 +10:00
6a9505fc0a Allow users to compute Idle-PC values 2025-02-22 16:51:23 +10:00
445ce5a864 Enforce password complexity. Ref https://github.com/GNS3/gns3-gui/issues/3698
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node 14 (push) Has been cancelled
Build / Node 16 (push) Has been cancelled
Build / Node 18 (push) Has been cancelled
2025-02-19 18:51:36 +10:00
050d4158ed Add possibility for a user to change his/her password. Ref https://github.com/GNS3/gns3-gui/issues/3698
Some checks are pending
CodeQL / Analyze (javascript) (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
Build / Node 14 (push) Waiting to run
Build / Node 16 (push) Waiting to run
Build / Node 18 (push) Waiting to run
2025-02-18 11:44:06 +10:00
6b28370111 Fix tests
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node 14 (push) Has been cancelled
Build / Node 16 (push) Has been cancelled
Build / Node 18 (push) Has been cancelled
2025-02-16 13:32:10 +10:00
8ec03968df Fix import/export Dynamips configs 2025-02-16 12:57:01 +10:00
097efdcbcd Add prune images and install images to image manager
Some checks are pending
CodeQL / Analyze (javascript) (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
Build / Node 14 (push) Waiting to run
Build / Node 16 (push) Waiting to run
Build / Node 18 (push) Waiting to run
2025-02-15 23:57:30 +10:00
cd483e047b Improvements to add new Ethernet switch ports 2025-02-15 18:16:21 +10:00
64cc001512 Merge pull request #1541 from GNS3/add-missing-settings
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node 14 (push) Has been cancelled
Build / Node 16 (push) Has been cancelled
Build / Node 18 (push) Has been cancelled
Add missing settings for nodes/templates
2025-02-05 18:14:59 +08:00
55bc69389d Add missing adapter and mac address settings for Qemu and Docker nodes 2025-02-05 20:02:58 +10:00
10c1461d93 Fix tests
Some checks failed
Build / Node 14 (push) Has been cancelled
Build / Node 16 (push) Has been cancelled
Build / Node 18 (push) Has been cancelled
2025-02-04 21:45:22 +10:00
86db2e208c Fix and improve IOS template configuration 2025-02-04 21:00:20 +10:00
80884a7929 Fix aux and aux_type usage 2025-02-04 14:23:32 +10:00
9523cd7703 Add missing IOS router settings in node configurator 2025-02-04 14:17:51 +10:00
042eb79e36 Development on 3.0.4.dev1
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node ${{ matrix.node }} (14) (push) Has been cancelled
Build / Node ${{ matrix.node }} (16) (push) Has been cancelled
Build / Node ${{ matrix.node }} (18) (push) Has been cancelled
2025-01-22 19:09:08 +10:00
67b597d8ec Release v3.0.3 2025-01-22 18:53:25 +10:00
7fd37610ee Merge remote-tracking branch 'origin/2.2' into master-3.0
# Conflicts:
#	package.json
#	src/app/components/project-map/new-template-dialog/new-template-dialog.component.ts
2025-01-22 18:44:55 +10:00
c8ccf4d475 Development on 2.2.54.dev1
Some checks failed
Build / build (push) Has been cancelled
2025-01-21 12:13:40 +10:00
1a49bec3d4 Release v2.2.53 2025-01-21 11:37:59 +10:00
64f9631946 Fix use of FileUploader 2025-01-21 11:37:22 +10:00
b02fe4c751 Merge remote-tracking branch 'origin/2.2' into master-3.0
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node ${{ matrix.node }} (14) (push) Has been cancelled
Build / Node ${{ matrix.node }} (16) (push) Has been cancelled
Build / Node ${{ matrix.node }} (18) (push) Has been cancelled
# Conflicts:
#	src/app/components/project-map/new-template-dialog/new-template-dialog.component.html
#	src/app/services/mapsettings.service.ts
2025-01-20 16:51:31 +10:00
84169a2c1e Add missing checkImageFromVersion() for IOS and IOU
Some checks are pending
Build / build (push) Waiting to run
2025-01-20 16:46:26 +10:00
2a9ced5cbd Allow ':' in project names. Fixes https://github.com/GNS3/gns3-gui/issues/3686 2025-01-20 13:39:04 +10:00
7c7e20d95f Release v3.0.2
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node ${{ matrix.node }} (14) (push) Has been cancelled
Build / Node ${{ matrix.node }} (16) (push) Has been cancelled
Build / Node ${{ matrix.node }} (18) (push) Has been cancelled
2025-01-03 21:36:27 +07:00
e959a947cc Use correct image upload endpoint
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node ${{ matrix.node }} (14) (push) Has been cancelled
Build / Node ${{ matrix.node }} (16) (push) Has been cancelled
Build / Node ${{ matrix.node }} (18) (push) Has been cancelled
2024-12-31 18:57:36 +07:00
7b633c29dd Allow ':' in project names. Fixes https://github.com/GNS3/gns3-gui/issues/3686
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node ${{ matrix.node }} (14) (push) Has been cancelled
Build / Node ${{ matrix.node }} (16) (push) Has been cancelled
Build / Node ${{ matrix.node }} (18) (push) Has been cancelled
2024-12-30 16:26:51 +07:00
c24517d1f0 Release v3.0.1
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node ${{ matrix.node }} (14) (push) Has been cancelled
Build / Node ${{ matrix.node }} (16) (push) Has been cancelled
Build / Node ${{ matrix.node }} (18) (push) Has been cancelled
2024-12-27 20:58:03 +07:00
9043c5b97c Use template image name when uploading to controller 2024-12-27 20:57:23 +07:00
2227d11932 Handle normal user cannot access user management page. Fixes https://github.com/GNS3/gns3-server/issues/2460
Some checks are pending
CodeQL / Analyze (javascript) (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
Build / Node ${{ matrix.node }} (14) (push) Waiting to run
Build / Node ${{ matrix.node }} (16) (push) Waiting to run
Build / Node ${{ matrix.node }} (18) (push) Waiting to run
2024-12-26 17:21:37 +07:00
2e581c4495 Merge pull request #1533 from GNS3/bugfix/1436
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node ${{ matrix.node }} (14) (push) Has been cancelled
Build / Node ${{ matrix.node }} (16) (push) Has been cancelled
Build / Node ${{ matrix.node }} (18) (push) Has been cancelled
Fix error 404 when editing a project
2024-12-23 17:27:07 +07:00
ee5b88e19a Backport: fix interface labels are not persistant
Some checks failed
Build / build (push) Has been cancelled
2024-12-23 16:05:05 +07:00
cddce63e2b Fix error 404 when editing a project 2024-12-23 15:44:43 +07:00
180c65351b Merge pull request #1532 from GNS3/bugfix/1435
Fix interface labels are not persistant
2024-12-23 15:13:50 +07:00
27eb8eb9c3 Fix interface labels are not persistant 2024-12-23 15:07:09 +07:00
ab84d1eea6 Development on 3.1.0.dev1
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Build / Node ${{ matrix.node }} (14) (push) Has been cancelled
Build / Node ${{ matrix.node }} (16) (push) Has been cancelled
Build / Node ${{ matrix.node }} (18) (push) Has been cancelled
2024-12-20 18:11:44 +07:00
89a7588612 Release v3.0.0
Some checks are pending
CodeQL / Analyze (javascript) (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
Build / Node ${{ matrix.node }} (14) (push) Waiting to run
Build / Node ${{ matrix.node }} (16) (push) Waiting to run
Build / Node ${{ matrix.node }} (18) (push) Waiting to run
2024-12-19 19:46:49 +07:00
ab5d298d7b Merge branch '2.2' into master-3.0
# Conflicts:
#	package.json
2024-12-19 18:17:25 +07:00
608fcfd04e Fix unable to configure Ethernet Switch. Fixes #1530
Some checks failed
Build / build (push) Has been cancelled
2024-12-19 18:16:41 +07:00
99c6502a65 Development on 2.2.53.dev1 2024-12-02 11:27:15 +10:00
28d27194be Release v2.2.52 2024-12-02 11:05:45 +10:00
bbb7f08925 Add .iol extension filter to image dialog. Ref https://github.com/GNS3/gns3-gui/issues/3664 2024-11-25 11:03:44 +10:00
c1fa038f27 Merge branch '2.2' into master-3.0 2024-11-25 11:03:29 +10:00
52f772676b Add .iol extension filter. Ref https://github.com/GNS3/gns3-gui/issues/3664 2024-11-25 11:02:49 +10:00
404 changed files with 3310 additions and 2741 deletions

1
.gitignore vendored
View File

@ -11,7 +11,6 @@
/scripts/build
/scripts/dist
/env
/.angular
# dependencies
/node_modules

View File

@ -5,5 +5,5 @@
"tabWidth": 2,
"semi": true,
"bracketSpacing": true,
"jsxBracketSameLine": false,
}
"jsxBracketSameLine": false
}

View File

@ -1,6 +1,6 @@
{
"name": "gns3-web-ui",
"version": "3.0.0rc2",
"version": "3.0.5",
"author": {
"name": "GNS3 Technology Inc.",
"email": "developers@gns3.com"

View File

@ -1,74 +1,74 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { BundledControllerFinderComponent } from './components/bundled-controller-finder/bundled-controller-finder.component';
import { DirectLinkComponent } from './components/direct-link/direct-link.component';
import { HelpComponent } from './components/help/help.component';
import { InstalledSoftwareComponent } from './components/installed-software/installed-software.component';
import { LoginComponent } from './components/login/login.component';
import { PageNotFoundComponent } from './components/page-not-found/page-not-found.component';
import { BuiltInPreferencesComponent } from './components/preferences/built-in/built-in-preferences.component';
import { CloudNodesAddTemplateComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component';
import { CloudNodesTemplateDetailsComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component';
import { CloudNodesTemplatesComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component';
import { EthernetHubsAddTemplateComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component';
import { EthernetHubsTemplateDetailsComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-template-details/ethernet-hubs-template-details.component';
import { EthernetHubsTemplatesComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component';
import { EthernetSwitchesAddTemplateComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component';
import { EthernetSwitchesTemplateDetailsComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-template-details/ethernet-switches-template-details.component';
import { EthernetSwitchesTemplatesComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component';
import { AddDockerTemplateComponent } from './components/preferences/docker/add-docker-template/add-docker-template.component';
import { CopyDockerTemplateComponent } from './components/preferences/docker/copy-docker-template/copy-docker-template.component';
import { DockerTemplateDetailsComponent } from './components/preferences/docker/docker-template-details/docker-template-details.component';
import { DockerTemplatesComponent } from './components/preferences/docker/docker-templates/docker-templates.component';
import { AddIosTemplateComponent } from './components/preferences/dynamips/add-ios-template/add-ios-template.component';
import { CopyIosTemplateComponent } from './components/preferences/dynamips/copy-ios-template/copy-ios-template.component';
import { IosTemplateDetailsComponent } from './components/preferences/dynamips/ios-template-details/ios-template-details.component';
import { IosTemplatesComponent } from './components/preferences/dynamips/ios-templates/ios-templates.component';
import { AddIouTemplateComponent } from './components/preferences/ios-on-unix/add-iou-template/add-iou-template.component';
import { CopyIouTemplateComponent } from './components/preferences/ios-on-unix/copy-iou-template/copy-iou-template.component';
import { IouTemplateDetailsComponent } from './components/preferences/ios-on-unix/iou-template-details/iou-template-details.component';
import { IouTemplatesComponent } from './components/preferences/ios-on-unix/iou-templates/iou-templates.component';
import { PreferencesComponent } from './components/preferences/preferences.component';
import { AddQemuVmTemplateComponent } from './components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component';
import { CopyQemuVmTemplateComponent } from './components/preferences/qemu/copy-qemu-vm-template/copy-qemu-vm-template.component';
import { QemuVmTemplateDetailsComponent } from './components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component';
import { QemuVmTemplatesComponent } from './components/preferences/qemu/qemu-vm-templates/qemu-vm-templates.component';
import { AddVirtualBoxTemplateComponent } from './components/preferences/virtual-box/add-virtual-box-template/add-virtual-box-template.component';
import { VirtualBoxTemplateDetailsComponent } from './components/preferences/virtual-box/virtual-box-template-details/virtual-box-template-details.component';
import { VirtualBoxTemplatesComponent } from './components/preferences/virtual-box/virtual-box-templates/virtual-box-templates.component';
import { AddVmwareTemplateComponent } from './components/preferences/vmware/add-vmware-template/add-vmware-template.component';
import { VmwareTemplateDetailsComponent } from './components/preferences/vmware/vmware-template-details/vmware-template-details.component';
import { VmwareTemplatesComponent } from './components/preferences/vmware/vmware-templates/vmware-templates.component';
import { AddVpcsTemplateComponent } from './components/preferences/vpcs/add-vpcs-template/add-vpcs-template.component';
import { VpcsTemplateDetailsComponent } from './components/preferences/vpcs/vpcs-template-details/vpcs-template-details.component';
import { VpcsTemplatesComponent } from './components/preferences/vpcs/vpcs-templates/vpcs-templates.component';
import { ProjectMapComponent } from './components/project-map/project-map.component';
import { ProjectsComponent } from './components/projects/projects.component';
import { ControllersComponent } from './components/controllers/controllers.component';
import { ConsoleComponent } from './components/settings/console/console.component';
import { SettingsComponent } from './components/settings/settings.component';
import { ListOfSnapshotsComponent } from './components/snapshots/list-of-snapshots/list-of-snapshots.component';
import { SystemStatusComponent } from './components/system-status/system-status.component';
import { WebConsoleFullWindowComponent } from './components/web-console-full-window/web-console-full-window.component';
import { BundledControllerFinderComponent } from '@components/bundled-controller-finder/bundled-controller-finder.component';
import { DirectLinkComponent } from '@components/direct-link/direct-link.component';
import { HelpComponent } from '@components/help/help.component';
import { InstalledSoftwareComponent } from '@components/installed-software/installed-software.component';
import { LoginComponent } from '@components/login/login.component';
import { PageNotFoundComponent } from '@components/page-not-found/page-not-found.component';
import { BuiltInPreferencesComponent } from '@components/preferences/built-in/built-in-preferences.component';
import { CloudNodesAddTemplateComponent } from '@components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component';
import { CloudNodesTemplateDetailsComponent } from '@components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component';
import { CloudNodesTemplatesComponent } from '@components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component';
import { EthernetHubsAddTemplateComponent } from '@components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component';
import { EthernetHubsTemplateDetailsComponent } from '@components/preferences/built-in/ethernet-hubs/ethernet-hubs-template-details/ethernet-hubs-template-details.component';
import { EthernetHubsTemplatesComponent } from '@components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component';
import { EthernetSwitchesAddTemplateComponent } from '@components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component';
import { EthernetSwitchesTemplateDetailsComponent } from '@components/preferences/built-in/ethernet-switches/ethernet-switches-template-details/ethernet-switches-template-details.component';
import { EthernetSwitchesTemplatesComponent } from '@components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component';
import { AddDockerTemplateComponent } from '@components/preferences/docker/add-docker-template/add-docker-template.component';
import { CopyDockerTemplateComponent } from '@components/preferences/docker/copy-docker-template/copy-docker-template.component';
import { DockerTemplateDetailsComponent } from '@components/preferences/docker/docker-template-details/docker-template-details.component';
import { DockerTemplatesComponent } from '@components/preferences/docker/docker-templates/docker-templates.component';
import { AddIosTemplateComponent } from '@components/preferences/dynamips/add-ios-template/add-ios-template.component';
import { CopyIosTemplateComponent } from '@components/preferences/dynamips/copy-ios-template/copy-ios-template.component';
import { IosTemplateDetailsComponent } from '@components/preferences/dynamips/ios-template-details/ios-template-details.component';
import { IosTemplatesComponent } from '@components/preferences/dynamips/ios-templates/ios-templates.component';
import { AddIouTemplateComponent } from '@components/preferences/ios-on-unix/add-iou-template/add-iou-template.component';
import { CopyIouTemplateComponent } from '@components/preferences/ios-on-unix/copy-iou-template/copy-iou-template.component';
import { IouTemplateDetailsComponent } from '@components/preferences/ios-on-unix/iou-template-details/iou-template-details.component';
import { IouTemplatesComponent } from '@components/preferences/ios-on-unix/iou-templates/iou-templates.component';
import { PreferencesComponent } from '@components/preferences/preferences.component';
import { AddQemuVmTemplateComponent } from '@components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component';
import { CopyQemuVmTemplateComponent } from '@components/preferences/qemu/copy-qemu-vm-template/copy-qemu-vm-template.component';
import { QemuVmTemplateDetailsComponent } from '@components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component';
import { QemuVmTemplatesComponent } from '@components/preferences/qemu/qemu-vm-templates/qemu-vm-templates.component';
import { AddVirtualBoxTemplateComponent } from '@components/preferences/virtual-box/add-virtual-box-template/add-virtual-box-template.component';
import { VirtualBoxTemplateDetailsComponent } from '@components/preferences/virtual-box/virtual-box-template-details/virtual-box-template-details.component';
import { VirtualBoxTemplatesComponent } from '@components/preferences/virtual-box/virtual-box-templates/virtual-box-templates.component';
import { AddVmwareTemplateComponent } from '@components/preferences/vmware/add-vmware-template/add-vmware-template.component';
import { VmwareTemplateDetailsComponent } from '@components/preferences/vmware/vmware-template-details/vmware-template-details.component';
import { VmwareTemplatesComponent } from '@components/preferences/vmware/vmware-templates/vmware-templates.component';
import { AddVpcsTemplateComponent } from '@components/preferences/vpcs/add-vpcs-template/add-vpcs-template.component';
import { VpcsTemplateDetailsComponent } from '@components/preferences/vpcs/vpcs-template-details/vpcs-template-details.component';
import { VpcsTemplatesComponent } from '@components/preferences/vpcs/vpcs-templates/vpcs-templates.component';
import { ProjectMapComponent } from '@components/project-map/project-map.component';
import { ProjectsComponent } from '@components/projects/projects.component';
import { ControllersComponent } from '@components/controllers/controllers.component';
import { ConsoleComponent } from '@components/settings/console/console.component';
import { SettingsComponent } from '@components/settings/settings.component';
import { ListOfSnapshotsComponent } from '@components/snapshots/list-of-snapshots/list-of-snapshots.component';
import { SystemStatusComponent } from '@components/system-status/system-status.component';
import { WebConsoleFullWindowComponent } from '@components/web-console-full-window/web-console-full-window.component';
import { ConsoleGuard } from './guards/console-guard';
import { LoginGuard } from './guards/login-guard';
import { DefaultLayoutComponent } from './layouts/default-layout/default-layout.component';
import { ControllerResolve } from './resolvers/controller-resolve';
import { UserManagementComponent } from './components/user-management/user-management.component';
import { LoggedUserComponent } from './components/users/logged-user/logged-user.component';
import { ImageManagerComponent } from './components/image-manager/image-manager.component';
import { UserDetailComponent } from "./components/user-management/user-detail/user-detail.component";
import { UserDetailResolver } from "./resolvers/user-detail.resolver";
import { ManagementComponent } from "./components/management/management.component";
import { UserGroupsResolver } from "./resolvers/user-groups.resolver";
import { GroupManagementComponent } from "./components/group-management/group-management.component";
import { RoleManagementComponent } from "./components/role-management/role-management.component";
import { GroupDetailsComponent } from "./components/group-details/group-details.component";
import { GroupMembersResolver } from "./resolvers/group-members.resolver";
import { GroupResolver } from "./resolvers/group.resolver";
import { GroupRoleResolver } from "./resolvers/group-role.resolver";
import { RoleDetailComponent } from "./components/role-management/role-detail/role-detail.component";
import { RoleDetailResolver } from "./resolvers/role-detail.resolver";
import { ControllerResolve } from '@resolvers/controller-resolve';
import { UserManagementComponent } from '@components/user-management/user-management.component';
import { LoggedUserComponent } from '@components/users/logged-user/logged-user.component';
import { ImageManagerComponent } from '@components/image-manager/image-manager.component';
import { UserDetailComponent } from "@components/user-management/user-detail/user-detail.component";
import { UserDetailResolver } from "@resolvers/user-detail.resolver";
import { ManagementComponent } from "@components/management/management.component";
import { UserGroupsResolver } from "@resolvers/user-groups.resolver";
import { GroupManagementComponent } from "@components/group-management/group-management.component";
import { RoleManagementComponent } from "@components/role-management/role-management.component";
import { GroupDetailsComponent } from "@components/group-details/group-details.component";
import { GroupMembersResolver } from "@resolvers/group-members.resolver";
import { GroupResolver } from "@resolvers/group.resolver";
import { GroupRoleResolver } from "@resolvers/group-role.resolver";
import { RoleDetailComponent } from "@components/role-management/role-detail/role-detail.component";
import { RoleDetailResolver } from "@resolvers/role-detail.resolver";
import { AclManagementComponent } from "@components/acl-management/acl-management.component";
import { ResourcePoolsManagementComponent } from "@components/resource-pools-management/resource-pools-management.component";
import { ResourcePoolDetailsComponent } from "@components/resource-pool-details/resource-pool-details.component";

View File

@ -5,7 +5,7 @@ import { RouterTestingModule } from '@angular/router/testing';
import { ElectronService, NgxElectronModule } from 'ngx-electron';
import { AppComponent } from './app.component';
import { ProgressService } from './common/progress/progress.service';
import { SettingsService } from './services/settings.service';
import { SettingsService } from '@services/settings.service';
import createSpyObj = jasmine.createSpyObj;
// import 'jasmine';

View File

@ -5,8 +5,8 @@ import { DomSanitizer } from '@angular/platform-browser';
import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';
import { ElectronService } from 'ngx-electron';
import { ProgressService } from './common/progress/progress.service';
import { SettingsService } from './services/settings.service';
import { ThemeService } from './services/theme.service';
import { SettingsService } from '@services/settings.service';
import { ThemeService } from '@services/theme.service';
@Component({
selector: 'app-root',

View File

@ -29,303 +29,307 @@ import { ProgressDialogComponent } from './common/progress-dialog/progress-dialo
import { ProgressDialogService } from './common/progress-dialog/progress-dialog.service';
import { ProgressComponent } from './common/progress/progress.component';
import { ProgressService } from './common/progress/progress.service';
import { AdbutlerComponent } from './components/adbutler/adbutler.component';
import { BundledControllerFinderComponent } from './components/bundled-controller-finder/bundled-controller-finder.component';
import { InformationDialogComponent } from './components/dialogs/information-dialog.component';
import { DirectLinkComponent } from './components/direct-link/direct-link.component';
import { DrawingAddedComponent } from './components/drawings-listeners/drawing-added/drawing-added.component';
import { DrawingDraggedComponent } from './components/drawings-listeners/drawing-dragged/drawing-dragged.component';
import { DrawingResizedComponent } from './components/drawings-listeners/drawing-resized/drawing-resized.component';
import { InterfaceLabelDraggedComponent } from './components/drawings-listeners/interface-label-dragged/interface-label-dragged.component';
import { LinkCreatedComponent } from './components/drawings-listeners/link-created/link-created.component';
import { NodeDraggedComponent } from './components/drawings-listeners/node-dragged/node-dragged.component';
import { NodeLabelDraggedComponent } from './components/drawings-listeners/node-label-dragged/node-label-dragged.component';
import { TextAddedComponent } from './components/drawings-listeners/text-added/text-added.component';
import { TextEditedComponent } from './components/drawings-listeners/text-edited/text-edited.component';
import { HelpComponent } from './components/help/help.component';
import { InstallSoftwareComponent } from './components/installed-software/install-software/install-software.component';
import { InstalledSoftwareComponent } from './components/installed-software/installed-software.component';
import { PageNotFoundComponent } from './components/page-not-found/page-not-found.component';
import { BuiltInPreferencesComponent } from './components/preferences/built-in/built-in-preferences.component';
import { CloudNodesAddTemplateComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component';
import { CloudNodesTemplateDetailsComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component';
import { CloudNodesTemplatesComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component';
import { EthernetHubsAddTemplateComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component';
import { EthernetHubsTemplateDetailsComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-template-details/ethernet-hubs-template-details.component';
import { EthernetHubsTemplatesComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component';
import { EthernetSwitchesAddTemplateComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component';
import { EthernetSwitchesTemplateDetailsComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-template-details/ethernet-switches-template-details.component';
import { EthernetSwitchesTemplatesComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component';
import { CustomAdaptersTableComponent } from './components/preferences/common/custom-adapters-table/custom-adapters-table.component';
import { CustomAdaptersComponent } from './components/preferences/common/custom-adapters/custom-adapters.component';
import { DeleteConfirmationDialogComponent } from './components/preferences/common/delete-confirmation-dialog/delete-confirmation-dialog.component';
import { DeleteTemplateComponent } from './components/preferences/common/delete-template-component/delete-template.component';
import { EmptyTemplatesListComponent } from './components/preferences/common/empty-templates-list/empty-templates-list.component';
import { PortsComponent } from './components/preferences/common/ports/ports.component';
import { SymbolsMenuComponent } from './components/preferences/common/symbols-menu/symbols-menu.component';
import { SymbolsComponent } from './components/preferences/common/symbols/symbols.component';
import { UdpTunnelsComponent } from './components/preferences/common/udp-tunnels/udp-tunnels.component';
import { AddDockerTemplateComponent } from './components/preferences/docker/add-docker-template/add-docker-template.component';
import { CopyDockerTemplateComponent } from './components/preferences/docker/copy-docker-template/copy-docker-template.component';
import { DockerTemplateDetailsComponent } from './components/preferences/docker/docker-template-details/docker-template-details.component';
import { DockerTemplatesComponent } from './components/preferences/docker/docker-templates/docker-templates.component';
import { AddIosTemplateComponent } from './components/preferences/dynamips/add-ios-template/add-ios-template.component';
import { CopyIosTemplateComponent } from './components/preferences/dynamips/copy-ios-template/copy-ios-template.component';
import { DynamipsPreferencesComponent } from './components/preferences/dynamips/dynamips-preferences/dynamips-preferences.component';
import { IosTemplateDetailsComponent } from './components/preferences/dynamips/ios-template-details/ios-template-details.component';
import { IosTemplatesComponent } from './components/preferences/dynamips/ios-templates/ios-templates.component';
import { GeneralPreferencesComponent } from './components/preferences/general/general-preferences.component';
import { AddIouTemplateComponent } from './components/preferences/ios-on-unix/add-iou-template/add-iou-template.component';
import { CopyIouTemplateComponent } from './components/preferences/ios-on-unix/copy-iou-template/copy-iou-template.component';
import { IouTemplateDetailsComponent } from './components/preferences/ios-on-unix/iou-template-details/iou-template-details.component';
import { IouTemplatesComponent } from './components/preferences/ios-on-unix/iou-templates/iou-templates.component';
import { PreferencesComponent } from './components/preferences/preferences.component';
import { AddQemuVmTemplateComponent } from './components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component';
import { CopyQemuVmTemplateComponent } from './components/preferences/qemu/copy-qemu-vm-template/copy-qemu-vm-template.component';
import { QemuPreferencesComponent } from './components/preferences/qemu/qemu-preferences/qemu-preferences.component';
import { QemuVmTemplateDetailsComponent } from './components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component';
import { QemuVmTemplatesComponent } from './components/preferences/qemu/qemu-vm-templates/qemu-vm-templates.component';
import { AddVirtualBoxTemplateComponent } from './components/preferences/virtual-box/add-virtual-box-template/add-virtual-box-template.component';
import { VirtualBoxPreferencesComponent } from './components/preferences/virtual-box/virtual-box-preferences/virtual-box-preferences.component';
import { VirtualBoxTemplateDetailsComponent } from './components/preferences/virtual-box/virtual-box-template-details/virtual-box-template-details.component';
import { VirtualBoxTemplatesComponent } from './components/preferences/virtual-box/virtual-box-templates/virtual-box-templates.component';
import { AddVmwareTemplateComponent } from './components/preferences/vmware/add-vmware-template/add-vmware-template.component';
import { VmwarePreferencesComponent } from './components/preferences/vmware/vmware-preferences/vmware-preferences.component';
import { VmwareTemplateDetailsComponent } from './components/preferences/vmware/vmware-template-details/vmware-template-details.component';
import { VmwareTemplatesComponent } from './components/preferences/vmware/vmware-templates/vmware-templates.component';
import { AddVpcsTemplateComponent } from './components/preferences/vpcs/add-vpcs-template/add-vpcs-template.component';
import { VpcsPreferencesComponent } from './components/preferences/vpcs/vpcs-preferences/vpcs-preferences.component';
import { VpcsTemplateDetailsComponent } from './components/preferences/vpcs/vpcs-template-details/vpcs-template-details.component';
import { VpcsTemplatesComponent } from './components/preferences/vpcs/vpcs-templates/vpcs-templates.component';
import { ChangeHostnameDialogComponent } from './components/project-map/change-hostname-dialog/change-hostname-dialog.component';
import { ChangeSymbolDialogComponent } from './components/project-map/change-symbol-dialog/change-symbol-dialog.component';
import { ConsoleWrapperComponent } from './components/project-map/console-wrapper/console-wrapper.component';
import { ContextConsoleMenuComponent } from './components/project-map/context-console-menu/context-console-menu.component';
import { AlignHorizontallyActionComponent } from './components/project-map/context-menu/actions/align-horizontally/align-horizontally.component';
import { AlignVerticallyActionComponent } from './components/project-map/context-menu/actions/align_vertically/align-vertically.component';
import { BringToFrontActionComponent } from './components/project-map/context-menu/actions/bring-to-front-action/bring-to-front-action.component';
import { ChangeHostnameActionComponent } from './components/project-map/context-menu/actions/change-hostname/change-hostname-action.component';
import { ChangeSymbolActionComponent } from './components/project-map/context-menu/actions/change-symbol/change-symbol-action.component';
import { ConfigActionComponent } from './components/project-map/context-menu/actions/config-action/config-action.component';
import { ConsoleDeviceActionBrowserComponent } from './components/project-map/context-menu/actions/console-device-action-browser/console-device-action-browser.component';
import { ConsoleDeviceActionComponent } from './components/project-map/context-menu/actions/console-device-action/console-device-action.component';
import { DeleteActionComponent } from './components/project-map/context-menu/actions/delete-action/delete-action.component';
import { DuplicateActionComponent } from './components/project-map/context-menu/actions/duplicate-action/duplicate-action.component';
import { EditConfigActionComponent } from './components/project-map/context-menu/actions/edit-config/edit-config-action.component';
import { EditStyleActionComponent } from './components/project-map/context-menu/actions/edit-style-action/edit-style-action.component';
import { EditLinkStyleActionComponent } from './components/project-map/context-menu/actions/edit-link-style-action/edit-link-style-action.component';
import { EditTextActionComponent } from './components/project-map/context-menu/actions/edit-text-action/edit-text-action.component';
import { ExportConfigActionComponent } from './components/project-map/context-menu/actions/export-config/export-config-action.component';
import { HttpConsoleNewTabActionComponent } from './components/project-map/context-menu/actions/http-console-new-tab/http-console-new-tab-action.component';
import { HttpConsoleActionComponent } from './components/project-map/context-menu/actions/http-console/http-console-action.component';
import { ImportConfigActionComponent } from './components/project-map/context-menu/actions/import-config/import-config-action.component';
import { LockActionComponent } from './components/project-map/context-menu/actions/lock-action/lock-action.component';
import { MoveLayerDownActionComponent } from './components/project-map/context-menu/actions/move-layer-down-action/move-layer-down-action.component';
import { MoveLayerUpActionComponent } from './components/project-map/context-menu/actions/move-layer-up-action/move-layer-up-action.component';
import { OpenFileExplorerActionComponent } from './components/project-map/context-menu/actions/open-file-explorer/open-file-explorer-action.component';
import { PacketFiltersActionComponent } from './components/project-map/context-menu/actions/packet-filters-action/packet-filters-action.component';
import { ReloadNodeActionComponent } from './components/project-map/context-menu/actions/reload-node-action/reload-node-action.component';
import { ResumeLinkActionComponent } from './components/project-map/context-menu/actions/resume-link-action/resume-link-action.component';
import { ShowNodeActionComponent } from './components/project-map/context-menu/actions/show-node-action/show-node-action.component';
import { StartCaptureOnStartedLinkActionComponent } from './components/project-map/context-menu/actions/start-capture-on-started-link/start-capture-on-started-link.component';
import { StartCaptureActionComponent } from './components/project-map/context-menu/actions/start-capture/start-capture-action.component';
import { StartNodeActionComponent } from './components/project-map/context-menu/actions/start-node-action/start-node-action.component';
import { StopCaptureActionComponent } from './components/project-map/context-menu/actions/stop-capture/stop-capture-action.component';
import { IsolateNodeActionComponent } from './components/project-map/context-menu/actions/isolate-node-action/isolate-node-action.component';
import { UnisolateNodeActionComponent } from './components/project-map/context-menu/actions/unisolate-node-action/unisolate-node-action.component';
import {StopNodeActionComponent } from './components/project-map/context-menu/actions/stop-node-action/stop-node-action.component';
import { SuspendLinkActionComponent } from './components/project-map/context-menu/actions/suspend-link/suspend-link-action.component';
import { SuspendNodeActionComponent } from './components/project-map/context-menu/actions/suspend-node-action/suspend-node-action.component';
import { ContextMenuComponent } from './components/project-map/context-menu/context-menu.component';
import { ConfigDialogComponent } from './components/project-map/context-menu/dialogs/config-dialog/config-dialog.component';
import { DrawLinkToolComponent } from './components/project-map/draw-link-tool/draw-link-tool.component';
import { StyleEditorDialogComponent } from './components/project-map/drawings-editors/style-editor/style-editor.component';
import { LinkStyleEditorDialogComponent } from './components/project-map/drawings-editors/link-style-editor/link-style-editor.component';
import { TextEditorDialogComponent } from './components/project-map/drawings-editors/text-editor/text-editor.component';
import { HelpDialogComponent } from './components/project-map/help-dialog/help-dialog.component';
import { NodeCreatedLabelStylesFixer } from './components/project-map/helpers/node-created-label-styles-fixer';
import { ImportApplianceComponent } from './components/project-map/import-appliance/import-appliance.component';
import { InfoDialogComponent } from './components/project-map/info-dialog/info-dialog.component';
import { LogConsoleComponent } from './components/project-map/log-console/log-console.component';
import { LogEventsDataSource } from './components/project-map/log-console/log-events-datasource';
import { ApplianceInfoDialogComponent } from './components/project-map/new-template-dialog/appliance-info-dialog/appliance-info-dialog.component';
import { NewTemplateDialogComponent } from './components/project-map/new-template-dialog/new-template-dialog.component';
import { TemplateNameDialogComponent } from './components/project-map/new-template-dialog/template-name-dialog/template-name-dialog.component';
import { ConfigEditorDialogComponent } from './components/project-map/node-editors/config-editor/config-editor.component';
import { ConfiguratorDialogAtmSwitchComponent } from './components/project-map/node-editors/configurator/atm_switch/configurator-atm-switch.component';
import { ConfiguratorDialogCloudComponent } from './components/project-map/node-editors/configurator/cloud/configurator-cloud.component';
import { ConfiguratorDialogDockerComponent } from './components/project-map/node-editors/configurator/docker/configurator-docker.component';
import { ConfigureCustomAdaptersDialogComponent } from './components/project-map/node-editors/configurator/docker/configure-custom-adapters/configure-custom-adapters.component';
import { EditNetworkConfigurationDialogComponent } from './components/project-map/node-editors/configurator/docker/edit-network-configuration/edit-network-configuration.component';
import { ConfiguratorDialogEthernetSwitchComponent } from './components/project-map/node-editors/configurator/ethernet-switch/configurator-ethernet-switch.component';
import { ConfiguratorDialogEthernetHubComponent } from './components/project-map/node-editors/configurator/ethernet_hub/configurator-ethernet-hub.component';
import { ConfiguratorDialogIosComponent } from './components/project-map/node-editors/configurator/ios/configurator-ios.component';
import { ConfiguratorDialogIouComponent } from './components/project-map/node-editors/configurator/iou/configurator-iou.component';
import { ConfiguratorDialogNatComponent } from './components/project-map/node-editors/configurator/nat/configurator-nat.component';
import { ConfiguratorDialogQemuComponent } from './components/project-map/node-editors/configurator/qemu/configurator-qemu.component';
import { QemuImageCreatorComponent } from './components/project-map/node-editors/configurator/qemu/qemu-image-creator/qemu-image-creator.component';
import { ConfiguratorDialogSwitchComponent } from './components/project-map/node-editors/configurator/switch/configurator-switch.component';
import { ConfiguratorDialogVirtualBoxComponent } from './components/project-map/node-editors/configurator/virtualbox/configurator-virtualbox.component';
import { ConfiguratorDialogVmwareComponent } from './components/project-map/node-editors/configurator/vmware/configurator-vmware.component';
import { ConfiguratorDialogVpcsComponent } from './components/project-map/node-editors/configurator/vpcs/configurator-vpcs.component';
import { NodeSelectInterfaceComponent } from './components/project-map/node-select-interface/node-select-interface.component';
import { NodesMenuComponent } from './components/project-map/nodes-menu/nodes-menu.component';
import { PacketFiltersDialogComponent } from './components/project-map/packet-capturing/packet-filters/packet-filters.component';
import { StartCaptureDialogComponent } from './components/project-map/packet-capturing/start-capture/start-capture.component';
import { ProjectMapMenuComponent } from './components/project-map/project-map-menu/project-map-menu.component';
import { ProjectMapComponent } from './components/project-map/project-map.component';
import { ProjectReadmeComponent } from './components/project-map/project-readme/project-readme.component';
import { ScreenshotDialogComponent } from './components/project-map/screenshot-dialog/screenshot-dialog.component';
import { WebConsoleComponent } from './components/project-map/web-console/web-console.component';
import { AddBlankProjectDialogComponent } from './components/projects/add-blank-project-dialog/add-blank-project-dialog.component';
import { ChooseNameDialogComponent } from './components/projects/choose-name-dialog/choose-name-dialog.component';
import { ConfirmationBottomSheetComponent } from './components/projects/confirmation-bottomsheet/confirmation-bottomsheet.component';
import { ConfirmationDialogComponent } from './components/projects/confirmation-dialog/confirmation-dialog.component';
import { EditProjectDialogComponent } from './components/projects/edit-project-dialog/edit-project-dialog.component';
import { ReadmeEditorComponent } from './components/projects/edit-project-dialog/readme-editor/readme-editor.component';
import { ImportProjectDialogComponent } from './components/projects/import-project-dialog/import-project-dialog.component';
import { ProjectNameValidator } from './components/projects/models/projectNameValidator';
import { NavigationDialogComponent } from './components/projects/navigation-dialog/navigation-dialog.component';
import { ProjectsComponent } from './components/projects/projects.component';
import { SaveProjectDialogComponent } from './components/projects/save-project-dialog/save-project-dialog.component';
import { AddControllerDialogComponent } from './components/controllers/add-controller-dialog/add-controller-dialog.component';
import { ControllerDiscoveryComponent } from './components/controllers/controller-discovery/controller-discovery.component';
import { ControllersComponent } from './components/controllers/controllers.component';
import { ConsoleComponent } from './components/settings/console/console.component';
import { SettingsComponent } from './components/settings/settings.component';
import { CreateSnapshotDialogComponent } from './components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component';
import { ListOfSnapshotsComponent } from './components/snapshots/list-of-snapshots/list-of-snapshots.component';
import { SnapshotMenuItemComponent } from './components/snapshots/snapshot-menu-item/snapshot-menu-item.component';
import { StatusChartComponent } from './components/system-status/status-chart/status-chart.component';
import { StatusInfoComponent } from './components/system-status/status-info/status-info.component';
import { SystemStatusComponent } from './components/system-status/system-status.component';
import { TemplateListDialogComponent } from './components/template/template-list-dialog/template-list-dialog.component';
import { TemplateComponent } from './components/template/template.component';
import { TopologySummaryComponent } from './components/topology-summary/topology-summary.component';
import { WebConsoleFullWindowComponent } from './components/web-console-full-window/web-console-full-window.component';
import { DataSourceFilter } from './filters/dataSourceFilter';
import { AuthImageFilter } from './filters/authImageFilter';
import { DateFilter } from './filters/dateFilter.pipe';
import { NameFilter } from './filters/nameFilter.pipe';
import { ProjectsFilter } from './filters/projectsFilter.pipe';
import { SearchFilter } from './filters/searchFilter.pipe';
import { TemplateFilter } from './filters/templateFilter.pipe';
import { AdbutlerComponent } from '@components/adbutler/adbutler.component';
import { BundledControllerFinderComponent } from '@components/bundled-controller-finder/bundled-controller-finder.component';
import { InformationDialogComponent } from '@components/dialogs/information-dialog/information-dialog.component';
import { QuestionDialogComponent } from "@components/dialogs/question-dialog/question-dialog.component";
import { DirectLinkComponent } from '@components/direct-link/direct-link.component';
import { DrawingAddedComponent } from '@components/drawings-listeners/drawing-added/drawing-added.component';
import { DrawingDraggedComponent } from '@components/drawings-listeners/drawing-dragged/drawing-dragged.component';
import { DrawingResizedComponent } from '@components/drawings-listeners/drawing-resized/drawing-resized.component';
import { InterfaceLabelDraggedComponent } from '@components/drawings-listeners/interface-label-dragged/interface-label-dragged.component';
import { LinkCreatedComponent } from '@components/drawings-listeners/link-created/link-created.component';
import { NodeDraggedComponent } from '@components/drawings-listeners/node-dragged/node-dragged.component';
import { NodeLabelDraggedComponent } from '@components/drawings-listeners/node-label-dragged/node-label-dragged.component';
import { TextAddedComponent } from '@components/drawings-listeners/text-added/text-added.component';
import { TextEditedComponent } from '@components/drawings-listeners/text-edited/text-edited.component';
import { HelpComponent } from '@components/help/help.component';
import { InstallSoftwareComponent } from '@components/installed-software/install-software/install-software.component';
import { InstalledSoftwareComponent } from '@components/installed-software/installed-software.component';
import { PageNotFoundComponent } from '@components/page-not-found/page-not-found.component';
import { BuiltInPreferencesComponent } from '@components/preferences/built-in/built-in-preferences.component';
import { CloudNodesAddTemplateComponent } from '@components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component';
import { CloudNodesTemplateDetailsComponent } from '@components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component';
import { CloudNodesTemplatesComponent } from '@components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component';
import { EthernetHubsAddTemplateComponent } from '@components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component';
import { EthernetHubsTemplateDetailsComponent } from '@components/preferences/built-in/ethernet-hubs/ethernet-hubs-template-details/ethernet-hubs-template-details.component';
import { EthernetHubsTemplatesComponent } from '@components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component';
import { EthernetSwitchesAddTemplateComponent } from '@components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component';
import { EthernetSwitchesTemplateDetailsComponent } from '@components/preferences/built-in/ethernet-switches/ethernet-switches-template-details/ethernet-switches-template-details.component';
import { EthernetSwitchesTemplatesComponent } from '@components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component';
import { CustomAdaptersTableComponent } from '@components/preferences/common/custom-adapters-table/custom-adapters-table.component';
import { CustomAdaptersComponent } from '@components/preferences/common/custom-adapters/custom-adapters.component';
import { DeleteConfirmationDialogComponent } from '@components/preferences/common/delete-confirmation-dialog/delete-confirmation-dialog.component';
import { DeleteTemplateComponent } from '@components/preferences/common/delete-template-component/delete-template.component';
import { EmptyTemplatesListComponent } from '@components/preferences/common/empty-templates-list/empty-templates-list.component';
import { PortsComponent } from '@components/preferences/common/ports/ports.component';
import { SymbolsMenuComponent } from '@components/preferences/common/symbols-menu/symbols-menu.component';
import { SymbolsComponent } from '@components/preferences/common/symbols/symbols.component';
import { UdpTunnelsComponent } from '@components/preferences/common/udp-tunnels/udp-tunnels.component';
import { AddDockerTemplateComponent } from '@components/preferences/docker/add-docker-template/add-docker-template.component';
import { CopyDockerTemplateComponent } from '@components/preferences/docker/copy-docker-template/copy-docker-template.component';
import { DockerTemplateDetailsComponent } from '@components/preferences/docker/docker-template-details/docker-template-details.component';
import { DockerTemplatesComponent } from '@components/preferences/docker/docker-templates/docker-templates.component';
import { AddIosTemplateComponent } from '@components/preferences/dynamips/add-ios-template/add-ios-template.component';
import { CopyIosTemplateComponent } from '@components/preferences/dynamips/copy-ios-template/copy-ios-template.component';
import { DynamipsPreferencesComponent } from '@components/preferences/dynamips/dynamips-preferences/dynamips-preferences.component';
import { IosTemplateDetailsComponent } from '@components/preferences/dynamips/ios-template-details/ios-template-details.component';
import { IosTemplatesComponent } from '@components/preferences/dynamips/ios-templates/ios-templates.component';
import { GeneralPreferencesComponent } from '@components/preferences/general/general-preferences.component';
import { AddIouTemplateComponent } from '@components/preferences/ios-on-unix/add-iou-template/add-iou-template.component';
import { CopyIouTemplateComponent } from '@components/preferences/ios-on-unix/copy-iou-template/copy-iou-template.component';
import { IouTemplateDetailsComponent } from '@components/preferences/ios-on-unix/iou-template-details/iou-template-details.component';
import { IouTemplatesComponent } from '@components/preferences/ios-on-unix/iou-templates/iou-templates.component';
import { PreferencesComponent } from '@components/preferences/preferences.component';
import { AddQemuVmTemplateComponent } from '@components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component';
import { CopyQemuVmTemplateComponent } from '@components/preferences/qemu/copy-qemu-vm-template/copy-qemu-vm-template.component';
import { QemuPreferencesComponent } from '@components/preferences/qemu/qemu-preferences/qemu-preferences.component';
import { QemuVmTemplateDetailsComponent } from '@components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component';
import { QemuVmTemplatesComponent } from '@components/preferences/qemu/qemu-vm-templates/qemu-vm-templates.component';
import { AddVirtualBoxTemplateComponent } from '@components/preferences/virtual-box/add-virtual-box-template/add-virtual-box-template.component';
import { VirtualBoxPreferencesComponent } from '@components/preferences/virtual-box/virtual-box-preferences/virtual-box-preferences.component';
import { VirtualBoxTemplateDetailsComponent } from '@components/preferences/virtual-box/virtual-box-template-details/virtual-box-template-details.component';
import { VirtualBoxTemplatesComponent } from '@components/preferences/virtual-box/virtual-box-templates/virtual-box-templates.component';
import { AddVmwareTemplateComponent } from '@components/preferences/vmware/add-vmware-template/add-vmware-template.component';
import { VmwarePreferencesComponent } from '@components/preferences/vmware/vmware-preferences/vmware-preferences.component';
import { VmwareTemplateDetailsComponent } from '@components/preferences/vmware/vmware-template-details/vmware-template-details.component';
import { VmwareTemplatesComponent } from '@components/preferences/vmware/vmware-templates/vmware-templates.component';
import { AddVpcsTemplateComponent } from '@components/preferences/vpcs/add-vpcs-template/add-vpcs-template.component';
import { VpcsPreferencesComponent } from '@components/preferences/vpcs/vpcs-preferences/vpcs-preferences.component';
import { VpcsTemplateDetailsComponent } from '@components/preferences/vpcs/vpcs-template-details/vpcs-template-details.component';
import { VpcsTemplatesComponent } from '@components/preferences/vpcs/vpcs-templates/vpcs-templates.component';
import { ChangeHostnameDialogComponent } from '@components/project-map/change-hostname-dialog/change-hostname-dialog.component';
import { ChangeSymbolDialogComponent } from '@components/project-map/change-symbol-dialog/change-symbol-dialog.component';
import { ConsoleWrapperComponent } from '@components/project-map/console-wrapper/console-wrapper.component';
import { ContextConsoleMenuComponent } from '@components/project-map/context-console-menu/context-console-menu.component';
import { AlignHorizontallyActionComponent } from '@components/project-map/context-menu/actions/align-horizontally/align-horizontally.component';
import { AlignVerticallyActionComponent } from '@components/project-map/context-menu/actions/align_vertically/align-vertically.component';
import { BringToFrontActionComponent } from '@components/project-map/context-menu/actions/bring-to-front-action/bring-to-front-action.component';
import { ChangeHostnameActionComponent } from '@components/project-map/context-menu/actions/change-hostname/change-hostname-action.component';
import { ChangeSymbolActionComponent } from '@components/project-map/context-menu/actions/change-symbol/change-symbol-action.component';
import { ConfigActionComponent } from '@components/project-map/context-menu/actions/config-action/config-action.component';
import { ConsoleDeviceActionBrowserComponent } from '@components/project-map/context-menu/actions/console-device-action-browser/console-device-action-browser.component';
import { ConsoleDeviceActionComponent } from '@components/project-map/context-menu/actions/console-device-action/console-device-action.component';
import { DeleteActionComponent } from '@components/project-map/context-menu/actions/delete-action/delete-action.component';
import { DuplicateActionComponent } from '@components/project-map/context-menu/actions/duplicate-action/duplicate-action.component';
import { EditConfigActionComponent } from '@components/project-map/context-menu/actions/edit-config/edit-config-action.component';
import { EditStyleActionComponent } from '@components/project-map/context-menu/actions/edit-style-action/edit-style-action.component';
import { EditLinkStyleActionComponent } from '@components/project-map/context-menu/actions/edit-link-style-action/edit-link-style-action.component';
import { EditTextActionComponent } from '@components/project-map/context-menu/actions/edit-text-action/edit-text-action.component';
import { ExportConfigActionComponent } from '@components/project-map/context-menu/actions/export-config/export-config-action.component';
import { HttpConsoleNewTabActionComponent } from '@components/project-map/context-menu/actions/http-console-new-tab/http-console-new-tab-action.component';
import { HttpConsoleActionComponent } from '@components/project-map/context-menu/actions/http-console/http-console-action.component';
import { IdlePcActionComponent } from "@components/project-map/context-menu/actions/idle-pc-action/idle-pc-action.component";
import { AutoIdlePcActionComponent } from "@components/project-map/context-menu/actions/auto-idle-pc-action/auto-idle-pc-action.component";
import { ImportConfigActionComponent } from '@components/project-map/context-menu/actions/import-config/import-config-action.component';
import { LockActionComponent } from '@components/project-map/context-menu/actions/lock-action/lock-action.component';
import { MoveLayerDownActionComponent } from '@components/project-map/context-menu/actions/move-layer-down-action/move-layer-down-action.component';
import { MoveLayerUpActionComponent } from '@components/project-map/context-menu/actions/move-layer-up-action/move-layer-up-action.component';
import { OpenFileExplorerActionComponent } from '@components/project-map/context-menu/actions/open-file-explorer/open-file-explorer-action.component';
import { PacketFiltersActionComponent } from '@components/project-map/context-menu/actions/packet-filters-action/packet-filters-action.component';
import { ReloadNodeActionComponent } from '@components/project-map/context-menu/actions/reload-node-action/reload-node-action.component';
import { ResumeLinkActionComponent } from '@components/project-map/context-menu/actions/resume-link-action/resume-link-action.component';
import { ShowNodeActionComponent } from '@components/project-map/context-menu/actions/show-node-action/show-node-action.component';
import { StartCaptureOnStartedLinkActionComponent } from '@components/project-map/context-menu/actions/start-capture-on-started-link/start-capture-on-started-link.component';
import { StartCaptureActionComponent } from '@components/project-map/context-menu/actions/start-capture/start-capture-action.component';
import { StartNodeActionComponent } from '@components/project-map/context-menu/actions/start-node-action/start-node-action.component';
import { StopCaptureActionComponent } from '@components/project-map/context-menu/actions/stop-capture/stop-capture-action.component';
import { IsolateNodeActionComponent } from '@components/project-map/context-menu/actions/isolate-node-action/isolate-node-action.component';
import { UnisolateNodeActionComponent } from '@components/project-map/context-menu/actions/unisolate-node-action/unisolate-node-action.component';
import { StopNodeActionComponent } from '@components/project-map/context-menu/actions/stop-node-action/stop-node-action.component';
import { SuspendLinkActionComponent } from '@components/project-map/context-menu/actions/suspend-link/suspend-link-action.component';
import { SuspendNodeActionComponent } from '@components/project-map/context-menu/actions/suspend-node-action/suspend-node-action.component';
import { ContextMenuComponent } from '@components/project-map/context-menu/context-menu.component';
import { ConfigDialogComponent } from '@components/project-map/context-menu/dialogs/config-dialog/config-dialog.component';
import { IdlePCDialogComponent } from "@components/project-map/context-menu/dialogs/idle-pc-dialog/idle-pc-dialog.component";
import { DrawLinkToolComponent } from '@components/project-map/draw-link-tool/draw-link-tool.component';
import { StyleEditorDialogComponent } from '@components/project-map/drawings-editors/style-editor/style-editor.component';
import { LinkStyleEditorDialogComponent } from '@components/project-map/drawings-editors/link-style-editor/link-style-editor.component';
import { TextEditorDialogComponent } from '@components/project-map/drawings-editors/text-editor/text-editor.component';
import { HelpDialogComponent } from '@components/project-map/help-dialog/help-dialog.component';
import { NodeCreatedLabelStylesFixer } from '@components/project-map/helpers/node-created-label-styles-fixer';
import { ImportApplianceComponent } from '@components/project-map/import-appliance/import-appliance.component';
import { InfoDialogComponent } from '@components/project-map/info-dialog/info-dialog.component';
import { LogConsoleComponent } from '@components/project-map/log-console/log-console.component';
import { LogEventsDataSource } from '@components/project-map/log-console/log-events-datasource';
import { ApplianceInfoDialogComponent } from '@components/project-map/new-template-dialog/appliance-info-dialog/appliance-info-dialog.component';
import { NewTemplateDialogComponent } from '@components/project-map/new-template-dialog/new-template-dialog.component';
import { TemplateNameDialogComponent } from '@components/project-map/new-template-dialog/template-name-dialog/template-name-dialog.component';
import { ConfigEditorDialogComponent } from '@components/project-map/node-editors/config-editor/config-editor.component';
import { ConfiguratorDialogAtmSwitchComponent } from '@components/project-map/node-editors/configurator/atm_switch/configurator-atm-switch.component';
import { ConfiguratorDialogCloudComponent } from '@components/project-map/node-editors/configurator/cloud/configurator-cloud.component';
import { ConfiguratorDialogDockerComponent } from '@components/project-map/node-editors/configurator/docker/configurator-docker.component';
import { ConfigureCustomAdaptersDialogComponent } from '@components/project-map/node-editors/configurator/docker/configure-custom-adapters/configure-custom-adapters.component';
import { EditNetworkConfigurationDialogComponent } from '@components/project-map/node-editors/configurator/docker/edit-network-configuration/edit-network-configuration.component';
import { ConfiguratorDialogEthernetSwitchComponent } from '@components/project-map/node-editors/configurator/ethernet-switch/configurator-ethernet-switch.component';
import { ConfiguratorDialogEthernetHubComponent } from '@components/project-map/node-editors/configurator/ethernet_hub/configurator-ethernet-hub.component';
import { ConfiguratorDialogIosComponent } from '@components/project-map/node-editors/configurator/ios/configurator-ios.component';
import { ConfiguratorDialogIouComponent } from '@components/project-map/node-editors/configurator/iou/configurator-iou.component';
import { ConfiguratorDialogNatComponent } from '@components/project-map/node-editors/configurator/nat/configurator-nat.component';
import { ConfiguratorDialogQemuComponent } from '@components/project-map/node-editors/configurator/qemu/configurator-qemu.component';
import { QemuImageCreatorComponent } from '@components/project-map/node-editors/configurator/qemu/qemu-image-creator/qemu-image-creator.component';
import { ConfiguratorDialogSwitchComponent } from '@components/project-map/node-editors/configurator/switch/configurator-switch.component';
import { ConfiguratorDialogVirtualBoxComponent } from '@components/project-map/node-editors/configurator/virtualbox/configurator-virtualbox.component';
import { ConfiguratorDialogVmwareComponent } from '@components/project-map/node-editors/configurator/vmware/configurator-vmware.component';
import { ConfiguratorDialogVpcsComponent } from '@components/project-map/node-editors/configurator/vpcs/configurator-vpcs.component';
import { NodeSelectInterfaceComponent } from '@components/project-map/node-select-interface/node-select-interface.component';
import { NodesMenuComponent } from '@components/project-map/nodes-menu/nodes-menu.component';
import { PacketFiltersDialogComponent } from '@components/project-map/packet-capturing/packet-filters/packet-filters.component';
import { StartCaptureDialogComponent } from '@components/project-map/packet-capturing/start-capture/start-capture.component';
import { ProjectMapMenuComponent } from '@components/project-map/project-map-menu/project-map-menu.component';
import { ProjectMapComponent } from '@components/project-map/project-map.component';
import { ProjectReadmeComponent } from '@components/project-map/project-readme/project-readme.component';
import { ScreenshotDialogComponent } from '@components/project-map/screenshot-dialog/screenshot-dialog.component';
import { WebConsoleComponent } from '@components/project-map/web-console/web-console.component';
import { AddBlankProjectDialogComponent } from '@components/projects/add-blank-project-dialog/add-blank-project-dialog.component';
import { ChooseNameDialogComponent } from '@components/projects/choose-name-dialog/choose-name-dialog.component';
import { ConfirmationBottomSheetComponent } from '@components/projects/confirmation-bottomsheet/confirmation-bottomsheet.component';
import { ConfirmationDialogComponent } from '@components/projects/confirmation-dialog/confirmation-dialog.component';
import { EditProjectDialogComponent } from '@components/projects/edit-project-dialog/edit-project-dialog.component';
import { ReadmeEditorComponent } from '@components/projects/edit-project-dialog/readme-editor/readme-editor.component';
import { ImportProjectDialogComponent } from '@components/projects/import-project-dialog/import-project-dialog.component';
import { ProjectNameValidator } from '@components/projects/models/projectNameValidator';
import { NavigationDialogComponent } from '@components/projects/navigation-dialog/navigation-dialog.component';
import { ProjectsComponent } from '@components/projects/projects.component';
import { SaveProjectDialogComponent } from '@components/projects/save-project-dialog/save-project-dialog.component';
import { AddControllerDialogComponent } from '@components/controllers/add-controller-dialog/add-controller-dialog.component';
import { ControllerDiscoveryComponent } from '@components/controllers/controller-discovery/controller-discovery.component';
import { ControllersComponent } from '@components/controllers/controllers.component';
import { ConsoleComponent } from '@components/settings/console/console.component';
import { SettingsComponent } from '@components/settings/settings.component';
import { CreateSnapshotDialogComponent } from '@components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component';
import { ListOfSnapshotsComponent } from '@components/snapshots/list-of-snapshots/list-of-snapshots.component';
import { SnapshotMenuItemComponent } from '@components/snapshots/snapshot-menu-item/snapshot-menu-item.component';
import { StatusChartComponent } from '@components/system-status/status-chart/status-chart.component';
import { StatusInfoComponent } from '@components/system-status/status-info/status-info.component';
import { SystemStatusComponent } from '@components/system-status/system-status.component';
import { TemplateListDialogComponent } from '@components/template/template-list-dialog/template-list-dialog.component';
import { TemplateComponent } from '@components/template/template.component';
import { TopologySummaryComponent } from '@components/topology-summary/topology-summary.component';
import { WebConsoleFullWindowComponent } from '@components/web-console-full-window/web-console-full-window.component';
import { DataSourceFilter } from '@filters/dataSourceFilter';
import { AuthImageFilter } from '@filters/authImageFilter';
import { DateFilter } from '@filters/dateFilter.pipe';
import { NameFilter } from '@filters/nameFilter.pipe';
import { ProjectsFilter } from '@filters/projectsFilter.pipe';
import { SearchFilter } from '@filters/searchFilter.pipe';
import { TemplateFilter } from '@filters/templateFilter.pipe';
import { ConsoleGuard } from './guards/console-guard';
import { LoginGuard } from './guards/login-guard';
import { ProjectWebServiceHandler } from './handlers/project-web-service-handler';
import { DefaultLayoutComponent } from './layouts/default-layout/default-layout.component';
import { MATERIAL_IMPORTS } from './material.imports';
import { ControllerResolve } from './resolvers/controller-resolve';
import { ApplianceService } from './services/appliances.service';
import { ProtocolHandlerService } from './services/protocol-handler.service';
import { BuiltInTemplatesConfigurationService } from './services/built-in-templates-configuration.service';
import { BuiltInTemplatesService } from './services/built-in-templates.service';
import { ComputeService } from './services/compute.service';
import { DockerConfigurationService } from './services/docker-configuration.service';
import { DockerService } from './services/docker.service';
import { DrawingService } from './services/drawing.service';
import { ExternalSoftwareDefinitionService } from './services/external-software-definition.service';
import { GoogleAnalyticsService } from './services/google-analytics.service';
import { HttpController, ControllerErrorHandler } from './services/http-controller.service';
import { InfoService } from './services/info.service';
import { InstalledSoftwareService } from './services/installed-software.service';
import { IosConfigurationService } from './services/ios-configuration.service';
import { IosService } from './services/ios.service';
import { IouConfigurationService } from './services/iou-configuration.service';
import { IouService } from './services/iou.service';
import { LinkService } from './services/link.service';
import { MapScaleService } from './services/mapScale.service';
import { MapSettingsService } from './services/mapsettings.service';
import { NodeService } from './services/node.service';
import { NodeConsoleService } from './services/nodeConsole.service';
import { NotificationService } from './services/notification.service';
import { PacketCaptureService } from './services/packet-capture.service';
import { PlatformService } from './services/platform.service';
import { ProjectService } from './services/project.service';
import { QemuConfigurationService } from './services/qemu-configuration.service';
import { QemuService } from './services/qemu.service';
import { RecentlyOpenedProjectService } from './services/recentlyOpenedProject.service';
import { ControllerManagementService } from './services/controller-management.service';
import { ControllerSettingsService } from './services/controller-settings.service';
import { ControllerDatabase } from './services/controller.database';
import { ControllerService } from './services/controller.service';
import { SettingsService } from './services/settings.service';
import { ConsoleService } from './services/settings/console.service';
import { DefaultConsoleService } from './services/settings/default-console.service';
import { SnapshotService } from './services/snapshot.service';
import { SymbolService } from './services/symbol.service';
import { TemplateMocksService } from './services/template-mocks.service';
import { TemplateService } from './services/template.service';
import { ThemeService } from './services/theme.service';
import { ToasterService } from './services/toaster.service';
import { ToolsService } from './services/tools.service';
import { UpdatesService } from './services/updates.service';
import { VersionService } from './services/version.service';
import { VirtualBoxConfigurationService } from './services/virtual-box-configuration.service';
import { VirtualBoxService } from './services/virtual-box.service';
import { VmwareConfigurationService } from './services/vmware-configuration.service';
import { VmwareService } from './services/vmware.service';
import { VpcsConfigurationService } from './services/vpcs-configuration.service';
import { VpcsService } from './services/vpcs.service';
import { ControllerResolve } from '@resolvers/controller-resolve';
import { ApplianceService } from '@services/appliances.service';
import { ProtocolHandlerService } from '@services/protocol-handler.service';
import { BuiltInTemplatesConfigurationService } from '@services/built-in-templates-configuration.service';
import { BuiltInTemplatesService } from '@services/built-in-templates.service';
import { ComputeService } from '@services/compute.service';
import { DockerConfigurationService } from '@services/docker-configuration.service';
import { DockerService } from '@services/docker.service';
import { DrawingService } from '@services/drawing.service';
import { ExternalSoftwareDefinitionService } from '@services/external-software-definition.service';
import { GoogleAnalyticsService } from '@services/google-analytics.service';
import { HttpController, ControllerErrorHandler } from '@services/http-controller.service';
import { InfoService } from '@services/info.service';
import { InstalledSoftwareService } from '@services/installed-software.service';
import { IosConfigurationService } from '@services/ios-configuration.service';
import { IosService } from '@services/ios.service';
import { IouConfigurationService } from '@services/iou-configuration.service';
import { IouService } from '@services/iou.service';
import { LinkService } from '@services/link.service';
import { MapScaleService } from '@services/mapScale.service';
import { MapSettingsService } from '@services/mapsettings.service';
import { NodeService } from '@services/node.service';
import { NodeConsoleService } from '@services/nodeConsole.service';
import { NotificationService } from '@services/notification.service';
import { PacketCaptureService } from '@services/packet-capture.service';
import { PlatformService } from '@services/platform.service';
import { ProjectService } from '@services/project.service';
import { QemuConfigurationService } from '@services/qemu-configuration.service';
import { QemuService } from '@services/qemu.service';
import { RecentlyOpenedProjectService } from '@services/recentlyOpenedProject.service';
import { ControllerManagementService } from '@services/controller-management.service';
import { ControllerSettingsService } from '@services/controller-settings.service';
import { ControllerDatabase } from '@services/controller.database';
import { ControllerService } from '@services/controller.service';
import { SettingsService } from '@services/settings.service';
import { ConsoleService } from '@services/settings/console.service';
import { DefaultConsoleService } from '@services/settings/default-console.service';
import { SnapshotService } from '@services/snapshot.service';
import { SymbolService } from '@services/symbol.service';
import { TemplateMocksService } from '@services/template-mocks.service';
import { TemplateService } from '@services/template.service';
import { ThemeService } from '@services/theme.service';
import { ToasterService } from '@services/toaster.service';
import { ToolsService } from '@services/tools.service';
import { UpdatesService } from '@services/updates.service';
import { VersionService } from '@services/version.service';
import { VirtualBoxConfigurationService } from '@services/virtual-box-configuration.service';
import { VirtualBoxService } from '@services/virtual-box.service';
import { VmwareConfigurationService } from '@services/vmware-configuration.service';
import { VmwareService } from '@services/vmware.service';
import { VpcsConfigurationService } from '@services/vpcs-configuration.service';
import { VpcsService } from '@services/vpcs.service';
import { NonNegativeValidator } from './validators/non-negative-validator';
import { RotationValidator } from './validators/rotation-validator';
import { MarkedDirective } from './directives/marked.directive';
import { LoginComponent } from './components/login/login.component';
import { LoginService } from './services/login.service';
import { LoginComponent } from '@components/login/login.component';
import { LoginService } from '@services/login.service';
import { HttpRequestsInterceptor } from './interceptors/http.interceptor';
import { UserManagementComponent } from './components/user-management/user-management.component';
import { UserService } from './services/user.service';
import { LoggedUserComponent } from './components/users/logged-user/logged-user.component';
import { AddUserDialogComponent } from './components/user-management/add-user-dialog/add-user-dialog.component';
import { UserFilterPipe } from './filters/user-filter.pipe';
import { GroupManagementComponent } from './components/group-management/group-management.component';
import { GroupFilterPipe } from './filters/group-filter.pipe';
import { AddGroupDialogComponent } from './components/group-management/add-group-dialog/add-group-dialog.component';
import { DeleteGroupDialogComponent } from './components/group-management/delete-group-dialog/delete-group-dialog.component';
import { DeleteUserDialogComponent } from './components/user-management/delete-user-dialog/delete-user-dialog.component';
import { GroupDetailsComponent } from './components/group-details/group-details.component';
import { UserDetailComponent } from './components/user-management/user-detail/user-detail.component';
import { AddUserToGroupDialogComponent } from './components/group-details/add-user-to-group-dialog/add-user-to-group-dialog.component';
import { UserManagementComponent } from '@components/user-management/user-management.component';
import { UserService } from '@services/user.service';
import { LoggedUserComponent } from '@components/users/logged-user/logged-user.component';
import { AddUserDialogComponent } from '@components/user-management/add-user-dialog/add-user-dialog.component';
import { UserFilterPipe } from '@filters/user-filter.pipe';
import { GroupManagementComponent } from '@components/group-management/group-management.component';
import { GroupFilterPipe } from '@filters/group-filter.pipe';
import { AddGroupDialogComponent } from '@components/group-management/add-group-dialog/add-group-dialog.component';
import { DeleteGroupDialogComponent } from '@components/group-management/delete-group-dialog/delete-group-dialog.component';
import { DeleteUserDialogComponent } from '@components/user-management/delete-user-dialog/delete-user-dialog.component';
import { GroupDetailsComponent } from '@components/group-details/group-details.component';
import { UserDetailComponent } from '@components/user-management/user-detail/user-detail.component';
import { AddUserToGroupDialogComponent } from '@components/group-details/add-user-to-group-dialog/add-user-to-group-dialog.component';
import { RemoveToGroupDialogComponent } from '@components/group-details/remove-to-group-dialog/remove-to-group-dialog.component';
import { PaginatorPipe } from './components/group-details/paginator.pipe';
import { MembersFilterPipe } from './components/group-details/members-filter.pipe';
import { ManagementComponent } from './components/management/management.component';
import { PaginatorPipe } from '@components/group-details/paginator.pipe';
import { MembersFilterPipe } from '@components/group-details/members-filter.pipe';
import { ManagementComponent } from '@components/management/management.component';
import {MatCheckboxModule} from "@angular/material/checkbox";
import { RoleManagementComponent } from './components/role-management/role-management.component';
import { RoleFilterPipe } from './components/role-management/role-filter.pipe';
import { AddRoleDialogComponent } from './components/role-management/add-role-dialog/add-role-dialog.component';
import { DeleteRoleDialogComponent } from './components/role-management/delete-role-dialog/delete-role-dialog.component';
import { RoleDetailComponent } from './components/role-management/role-detail/role-detail.component';
import { RoleManagementComponent } from '@components/role-management/role-management.component';
import { RoleFilterPipe } from '@components/role-management/role-filter.pipe';
import { AddRoleDialogComponent } from '@components/role-management/add-role-dialog/add-role-dialog.component';
import { DeleteRoleDialogComponent } from '@components/role-management/delete-role-dialog/delete-role-dialog.component';
import { RoleDetailComponent } from '@components/role-management/role-detail/role-detail.component';
import {MatSlideToggleModule} from '@angular/material/slide-toggle';
import {MatAutocompleteModule} from "@angular/material/autocomplete";;
import { AddRoleToGroupComponent } from './components/group-details/add-role-to-group/add-role-to-group.component';
import { AddRoleToGroupComponent } from '@components/group-details/add-role-to-group/add-role-to-group.component';
import {MatFormFieldModule} from "@angular/material/form-field";
import { ChangeUserPasswordComponent } from './components/user-management/user-detail/change-user-password/change-user-password.component';
import { ChangeUserPasswordComponent } from '@components/user-management/user-detail/change-user-password/change-user-password.component';
import {MatMenuModule} from "@angular/material/menu";
import { ImageManagerComponent } from './components/image-manager/image-manager.component';
import { AddImageDialogComponent } from './components/image-manager/add-image-dialog/add-image-dialog.component';
import { DeleteAllImageFilesDialogComponent } from './components/image-manager/deleteallfiles-dialog/deleteallfiles-dialog.component';
import { ImageManagerComponent } from '@components/image-manager/image-manager.component';
import { AddImageDialogComponent } from '@components/image-manager/add-image-dialog/add-image-dialog.component';
import { DeleteAllImageFilesDialogComponent } from '@components/image-manager/deleteallfiles-dialog/deleteallfiles-dialog.component';
import { UploadingProcessbarComponent } from './common/uploading-processbar/uploading-processbar.component';
import { ExportPortableProjectComponent } from './components/export-portable-project/export-portable-project.component';
import { NodesMenuConfirmationDialogComponent } from './components/project-map/nodes-menu/nodes-menu-confirmation-dialog/nodes-menu-confirmation-dialog.component';
import { ConfirmationDeleteAllProjectsComponent } from './components/projects/confirmation-delete-all-projects/confirmation-delete-all-projects.component';
import { ProjectMapLockConfirmationDialogComponent } from './components/project-map/project-map-menu/project-map-lock-confirmation-dialog/project-map-lock-confirmation-dialog.component';
import { ExportPortableProjectComponent } from '@components/export-portable-project/export-portable-project.component';
import { NodesMenuConfirmationDialogComponent } from '@components/project-map/nodes-menu/nodes-menu-confirmation-dialog/nodes-menu-confirmation-dialog.component';
import { ConfirmationDeleteAllProjectsComponent } from '@components/projects/confirmation-delete-all-projects/confirmation-delete-all-projects.component';
import { ProjectMapLockConfirmationDialogComponent } from '@components/project-map/project-map-menu/project-map-lock-confirmation-dialog/project-map-lock-confirmation-dialog.component';
import { AclManagementComponent } from "@components/acl-management/acl-management.component";
import { AddAceDialogComponent } from './components/acl-management/add-ace-dialog/add-ace-dialog.component';
import { AutocompleteComponent } from './components/acl-management/add-ace-dialog/autocomplete/autocomplete.component';
import { DeleteAceDialogComponent } from './components/acl-management/delete-ace-dialog/delete-ace-dialog.component';
import { AceFilterPipe } from './filters/ace-filter.pipe';
import { AddAceDialogComponent } from '@components/acl-management/add-ace-dialog/add-ace-dialog.component';
import { AutocompleteComponent } from '@components/acl-management/add-ace-dialog/autocomplete/autocomplete.component';
import { DeleteAceDialogComponent } from '@components/acl-management/delete-ace-dialog/delete-ace-dialog.component';
import { AceFilterPipe } from '@filters/ace-filter.pipe';
import { CdkAccordionModule } from "@angular/cdk/accordion";
import { CdkTreeModule } from "@angular/cdk/tree";
import { PrivilegeComponent } from './components/role-management/role-detail/privilege/privilege.component';
import { GroupPrivilegesPipe } from './components/role-management/role-detail/privilege/group-privileges.pipe';
import { ResourcePoolsManagementComponent } from './components/resource-pools-management/resource-pools-management.component';
import { AddResourcePoolDialogComponent } from './components/resource-pools-management/add-resource-pool-dialog/add-resource-pool-dialog.component';
import { DeleteResourcePoolComponent } from './components/resource-pools-management/delete-resource-pool/delete-resource-pool.component';
import { ResourcePoolsFilterPipe } from './components/resource-pools-management/resource-pools-filter.pipe';
import { ResourcePoolDetailsComponent } from './components/resource-pool-details/resource-pool-details.component';
import { DeleteResourceConfirmationDialogComponent } from './components/resource-pool-details/delete-resource-confirmation-dialog/delete-resource-confirmation-dialog.component';
import { PrivilegeComponent } from '@components/role-management/role-detail/privilege/privilege.component';
import { GroupPrivilegesPipe } from '@components/role-management/role-detail/privilege/group-privileges.pipe';
import { ResourcePoolsManagementComponent } from '@components/resource-pools-management/resource-pools-management.component';
import { AddResourcePoolDialogComponent } from '@components/resource-pools-management/add-resource-pool-dialog/add-resource-pool-dialog.component';
import { DeleteResourcePoolComponent } from '@components/resource-pools-management/delete-resource-pool/delete-resource-pool.component';
import { ResourcePoolsFilterPipe } from '@components/resource-pools-management/resource-pools-filter.pipe';
import { ResourcePoolDetailsComponent } from '@components/resource-pool-details/resource-pool-details.component';
import { DeleteResourceConfirmationDialogComponent } from '@components/resource-pool-details/delete-resource-confirmation-dialog/delete-resource-confirmation-dialog.component';
@NgModule({
declarations: [
@ -493,6 +497,7 @@ import { DeleteResourceConfirmationDialogComponent } from './components/resource
AlignVerticallyActionComponent,
ConfirmationBottomSheetComponent,
ConfigDialogComponent,
IdlePCDialogComponent,
ImportApplianceComponent,
DirectLinkComponent,
SystemStatusComponent,
@ -500,6 +505,8 @@ import { DeleteResourceConfirmationDialogComponent } from './components/resource
StatusChartComponent,
OpenFileExplorerActionComponent,
HttpConsoleActionComponent,
IdlePcActionComponent,
AutoIdlePcActionComponent,
WebConsoleComponent,
ConsoleWrapperComponent,
HttpConsoleNewTabActionComponent,
@ -511,6 +518,7 @@ import { DeleteResourceConfirmationDialogComponent } from './components/resource
ReadmeEditorComponent,
MarkedDirective,
InformationDialogComponent,
QuestionDialogComponent,
TemplateNameDialogComponent,
ConfigureCustomAdaptersDialogComponent,
EditNetworkConfigurationDialogComponent,

View File

@ -11,13 +11,13 @@ import {
} from '@angular/core';
import { select, Selection } from 'd3-selection';
import { Subscription } from 'rxjs';
import { Link } from '../../../models/link';
import { Project } from '../../../models/project';
import { Controller } from '../../../models/controller';
import { Symbol } from '../../../models/symbol';
import { MapScaleService } from '../../../services/mapScale.service';
import { MapSettingsService } from '../../../services/mapsettings.service';
import { ToolsService } from '../../../services/tools.service';
import { Link } from '@models/link';
import { Project } from '@models/project';
import { Controller } from '@models/controller';
import { Symbol } from '@models/symbol';
import { MapScaleService } from '@services/mapScale.service';
import { MapSettingsService } from '@services/mapsettings.service';
import { ToolsService } from '@services/tools.service';
import { CanvasSizeDetector } from '../../helpers/canvas-size-detector';
import { GraphDataManager } from '../../managers/graph-data-manager';
import { MapSettingsManager } from '../../managers/map-settings-manager';

View File

@ -1,7 +1,7 @@
import { EventEmitter } from '@angular/core';
import { async, ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
import { select } from 'd3-selection';
import { MapSettingsService } from '../../../services/mapsettings.service';
import { MapSettingsService } from '@services/mapsettings.service';
import { DraggableDrag, DraggableEnd, DraggableStart } from '../../events/draggable';
import { DrawingsEventSource } from '../../events/drawings-event-source';
import { LinksEventSource } from '../../events/links-event-source';

View File

@ -1,7 +1,7 @@
import { Component, Input, OnDestroy, OnInit } from '@angular/core';
import { select } from 'd3-selection';
import { merge, Subscription } from 'rxjs';
import { MapSettingsService } from '../../../services/mapsettings.service';
import { MapSettingsService } from '@services/mapsettings.service';
import { DraggableDrag, DraggableEnd, DraggableStart } from '../../events/draggable';
import { DrawingsEventSource } from '../../events/drawings-event-source';
import { DraggedDataEvent } from '../../events/event-source';

View File

@ -12,8 +12,8 @@ import {
ViewChild,
} from '@angular/core';
import { Subscription } from 'rxjs';
import { Link } from '../../../models/link';
import { Symbol } from '../../../models/symbol';
import { Link } from '@models/link';
import { Symbol } from '@models/symbol';
import { CanvasSizeDetector } from '../../helpers/canvas-size-detector';
import { GraphDataManager } from '../../managers/graph-data-manager';
import { LayersManager } from '../../managers/layers-manager';

View File

@ -13,7 +13,7 @@ import {
} from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { Subscription } from 'rxjs';
import { Symbol } from '../../../../models/symbol';
import { Symbol } from '@models/symbol';
import { DraggedDataEvent } from '../../../events/event-source';
import { NodesEventSource } from '../../../events/nodes-event-source';
import { CssFixer } from '../../../helpers/css-fixer';

View File

@ -1,10 +1,10 @@
import { Renderer2 } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { MockedLinkService } from '../../../components/project-map/project-map.component.spec';
import { LinkService } from '../../../services/link.service';
import { MapScaleService } from '../../../services/mapScale.service';
import { ToolsService } from '../../../services/tools.service';
import { MockedLinkService } from '@components/project-map/project-map.component.spec';
import { LinkService } from '@services/link.service';
import { MapScaleService } from '@services/mapScale.service';
import { ToolsService } from '@services/tools.service';
import { LinksDataSource } from '../../datasources/links-datasource';
import { NodesDataSource } from '../../datasources/nodes-datasource';
import { DrawingsEventSource } from '../../events/drawings-event-source';

View File

@ -11,12 +11,12 @@ import {
} from '@angular/core';
import { select } from 'd3-selection';
import { Subscription } from 'rxjs';
import { StyleProperty } from '../../../components/project-map/drawings-editors/text-editor/text-editor.component';
import { Link } from '../../../models/link';
import { Controller } from '../../../models/controller';
import { LinkService } from '../../../services/link.service';
import { MapScaleService } from '../../../services/mapScale.service';
import { ToolsService } from '../../../services/tools.service';
import { StyleProperty } from '@components/project-map/drawings-editors/text-editor/text-editor.component';
import { Link } from '@models/link';
import { Controller } from '@models/controller';
import { LinkService } from '@services/link.service';
import { MapScaleService } from '@services/mapScale.service';
import { ToolsService } from '@services/tools.service';
import { LinksDataSource } from '../../datasources/links-datasource';
import { NodesDataSource } from '../../datasources/nodes-datasource';
import { DrawingsEventSource } from '../../events/drawings-event-source';

View File

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core';
import { LinkNode } from '../../../models/link-node';
import { LinkNode } from '@models/link-node';
import { MapLinkNode } from '../../models/map/map-link-node';
import { Converter } from '../converter';
import { LabelToMapLabelConverter } from './label-to-map-label-converter';

View File

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core';
import { Link } from '../../../models/link';
import { Link } from '@models/link';
import { MapLink } from '../../models/map/map-link';
import { Converter } from '../converter';
import { LinkNodeToMapLinkNodeConverter } from './link-node-to-map-link-node-converter';

View File

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core';
import { LinkNode } from '../../../models/link-node';
import { LinkNode } from '@models/link-node';
import { MapLinkNode } from '../../models/map/map-link-node';
import { Converter } from '../converter';
import { MapLabelToLabelConverter } from './map-label-to-label-converter';

View File

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core';
import { Link } from '../../../models/link';
import { Link } from '@models/link';
import { MapLink } from '../../models/map/map-link';
import { Converter } from '../converter';
import { MapLinkNodeToLinkNodeConverter } from './map-link-node-to-link-node-converter';

View File

@ -27,6 +27,7 @@ export class MapNodeToNodeConverter implements Converter<MapNode, Node> {
node.port_name_format = mapNode.portNameFormat;
node.port_segment_size = mapNode.portSegmentSize;
node.ports = mapNode.ports ? mapNode.ports.map((mapPort) => this.mapPortToPort.convert(mapPort)) : [];
node.properties = mapNode.properties;
node.project_id = mapNode.projectId;
node.status = mapNode.status;
node.symbol = mapNode.symbol;

View File

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core';
import { Port } from '../../../models/port';
import { Port } from '@models/port';
import { MapPort } from '../../models/map/map-port';
import { Converter } from '../converter';

View File

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core';
import { Symbol } from '../../../models/symbol';
import { Symbol } from '@models/symbol';
import { MapSymbol } from '../../models/map/map-symbol';
import { Converter } from '../converter';

View File

@ -38,6 +38,7 @@ export class NodeToMapNodeConverter implements Converter<Node, MapNode> {
mapNode.portNameFormat = node.port_name_format;
mapNode.portSegmentSize = node.port_segment_size;
mapNode.ports = node.ports ? node.ports.map((port) => this.portToMapPort.convert(port)) : [];
mapNode.properties = node.properties;
mapNode.projectId = node.project_id;
mapNode.status = node.status;
mapNode.symbol = node.symbol;

View File

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core';
import { Port } from '../../../models/port';
import { Port } from '@models/port';
import { MapPort } from '../../models/map/map-port';
import { Converter } from '../converter';

View File

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core';
import { Symbol } from '../../../models/symbol';
import { Symbol } from '@models/symbol';
import { MapSymbol } from '../../models/map/map-symbol';
import { Converter } from '../converter';

View File

@ -1,4 +1,4 @@
import { Link } from '../../models/link';
import { Link } from '@models/link';
import { LinksDataSource } from './links-datasource';
describe('LinksDataSource', () => {

View File

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core';
import { Link } from '../../models/link';
import { Link } from '@models/link';
import { DataSource } from './datasource';
@Injectable()

View File

@ -1,4 +1,4 @@
import { Symbol } from '../../models/symbol';
import { Symbol } from '@models/symbol';
import { SymbolsDataSource } from './symbols-datasource';
describe('SymbolsDataSource', () => {

View File

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core';
import { Symbol } from '../../models/symbol';
import { Symbol } from '@models/symbol';
import { DataSource } from './datasource';
@Injectable()

View File

@ -1,7 +1,7 @@
import { Component } from '@angular/core';
import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { MapScaleService } from '../../services/mapScale.service';
import { MapScaleService } from '@services/mapScale.service';
import { MovingEventSource } from '../events/moving-event-source';
import { Context } from '../models/context';
import { ZoomingCanvasDirective } from './zooming-canvas.directive';

View File

@ -1,7 +1,7 @@
import { Directive, ElementRef, OnDestroy, OnInit } from '@angular/core';
import { select } from 'd3-selection';
import { Subscription } from 'rxjs';
import { MapScaleService } from '../../services/mapScale.service';
import { MapScaleService } from '@services/mapScale.service';
import { MovingEventSource } from '../events/moving-event-source';
import { Context } from '../models/context';

View File

@ -1,6 +1,6 @@
import { Injectable } from '@angular/core';
import { Link } from '../../models/link';
import { Symbol } from '../../models/symbol';
import { Link } from '@models/link';
import { Symbol } from '@models/symbol';
import { DrawingToMapDrawingConverter } from '../converters/map/drawing-to-map-drawing-converter';
import { LinkToMapLinkConverter } from '../converters/map/link-to-map-link-converter';
import { NodeToMapNodeConverter } from '../converters/map/node-to-map-node-converter';

View File

@ -1,8 +1,8 @@
import { Filter } from '../../../models/filter';
import { Filter } from '@models/filter';
import { Indexed } from '../../datasources/map-datasource';
import { MapLinkNode } from './map-link-node';
import { MapNode } from './map-node';
import { LinkStyle } from '../../../models/link-style';
import { LinkStyle } from '@models/link-style';
export class MapLink implements Indexed {
id: string;

View File

@ -1,6 +1,7 @@
import { Indexed } from '../../datasources/map-datasource';
import { MapLabel } from './map-label';
import { MapPort } from './map-port';
import { Properties } from '../node';
export class MapNode implements Indexed {
id: string;
@ -19,6 +20,7 @@ export class MapNode implements Indexed {
portNameFormat: string;
portSegmentSize: number;
ports: MapPort[];
properties: Properties;
projectId: string;
status: string;
symbol: string;

View File

@ -1,4 +1,4 @@
import { Port } from '../../models/port';
import { Port } from '@models/port';
import { Label } from './label';
export class PortsMapping {
@ -14,10 +14,15 @@ export class Properties {
headless: boolean;
linked_clone: boolean;
on_close: string;
aux_type: boolean;
aux: number;
aux_type: boolean;
ram: number;
system_id: string;
dynamips_id?: number;
npe?: string;
midplane?: string;
nvram: number;
image: string;
usage: string;
use_any_adapter: boolean;
vmname: string;
@ -48,16 +53,40 @@ export class Properties {
kernel_image: string;
kernel_image_md5sum?: any;
mac_address: string;
mac_addr: string;
options: string;
platform: string;
chassis?: string;
iomem?: number;
disk0: number;
disk1: number;
idlepc: string;
idlemax: number;
idlesleep: number;
exec_area: number;
mmap: boolean;
sparsemem: boolean;
auto_delete_disks: boolean;
process_priority: string;
qemu_path: string;
environment: string;
extra_hosts: string;
start_command: string;
replicate_network_connection_state: boolean;
memory: number;
tpm: boolean;
uefi: boolean;
slot0?: string;
slot1?: string;
slot2?: string;
slot3?: string;
slot4?: string;
slot5?: string;
slot6?: string;
slot7?: string;
wic0?: string;
wic1?: string;
wic2?: string;
}
export class Node {

View File

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core';
import { MapSettingsService } from '../../services/mapsettings.service';
import { MapSettingsService } from '@services/mapsettings.service';
import { SelectionManager } from '../managers/selection-manager';
import { EllipseElement } from '../models/drawings/ellipse-element';
import { LineElement } from '../models/drawings/line-element';

View File

@ -1,6 +1,6 @@
import { Injectable } from '@angular/core';
import { select } from 'd3-selection';
import { MapSettingsService } from '../../services/mapsettings.service';
import { MapSettingsService } from '@services/mapsettings.service';
import { LinkStatus } from '../models/link-status';
import { MapLink } from '../models/map/map-link';
import { SVGSelection } from '../models/types';

View File

@ -4,7 +4,7 @@ import { LinkContextMenu } from '../../events/event-source';
import { MapLink } from '../../models/map/map-link';
import { SVGSelection } from '../../models/types';
import { Widget } from '../widget';
import { LinkStyle } from '../../../models/link-style';
import { LinkStyle } from '@models/link-style';
import { StyleTranslator} from './style-translator';
class EthernetLinkPath {

View File

@ -4,7 +4,7 @@ import { LinkContextMenu } from '../../events/event-source';
import { MapLink } from '../../models/map/map-link';
import { SVGSelection } from '../../models/types';
import { Widget } from '../widget';
import { LinkStyle } from '../../../models/link-style';
import { LinkStyle } from '@models/link-style';
import { StyleTranslator} from './style-translator';
class SerialLinkPath {
@ -56,10 +56,10 @@ export class SerialLinkWidget implements Widget {
];
return new SerialLinkPath(
[source.x, source.y],
angle_source,
angle_target,
[target.x, target.y],
[source.x, source.y],
angle_source,
angle_target,
[target.x, target.y],
link.link_style.color ? link.link_style : this.defaultSerialLinkStyle);
}

View File

@ -1,4 +1,4 @@
import { LinkStyle } from '../../../models/link-style';
import { LinkStyle } from '@models/link-style';
export class StyleTranslator {
static getLinkStyle(linkStyle: LinkStyle) {

View File

@ -1,6 +1,6 @@
import { EventEmitter, Injectable } from '@angular/core';
import { event, select } from 'd3-selection';
import { MapSettingsService } from '../../services/mapsettings.service';
import { MapSettingsService } from '@services/mapsettings.service';
import { ClickedDataEvent } from '../events/event-source';
import { NodeClicked, NodeContextMenu } from '../events/nodes';
import { NodesEventSource } from '../events/nodes-event-source';

View File

@ -1,8 +1,8 @@
import { Injector } from '@angular/core';
import { TestBed } from '@angular/core/testing';
import { SettingsService } from '../../services/settings.service';
import { ToasterService } from '../../services/toaster.service';
import { MockedToasterService } from '../../services/toaster.service.spec';
import { SettingsService } from '@services/settings.service';
import { ToasterService } from '@services/toaster.service';
import { MockedToasterService } from '@services/toaster.service.spec';
import { SentryErrorHandler } from './sentry-error-handler';
import { ToasterErrorHandler } from './toaster-error-handler';

View File

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core';
import { ToasterService } from '../../services/toaster.service';
import { ToasterService } from '@services/toaster.service';
import { SentryErrorHandler } from './sentry-error-handler';
@Injectable()

View File

@ -1,4 +1,4 @@
import {Endpoint, RessourceType} from "../../../models/api/endpoint";
import {Endpoint, RessourceType} from "@models/api/endpoint";
export interface EndpointNode {
endpoint: string;

View File

@ -1,7 +1,7 @@
import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { AdButlerResponse } from '../../models/adbutler';
import { ThemeService } from '../../services/theme.service';
import { AdButlerResponse } from '@models/adbutler';
import { ThemeService } from '@services/theme.service';
import { Location } from '@angular/common';
const adButlerResponseBodyRegex: RegExp = /<a href="(.*)">(.*)<\/a><br\/>(.*)<br\/>\s*<button><a .*>(.*)<\/a>\s*<\/button>/i;

View File

@ -4,9 +4,9 @@ import { By } from '@angular/platform-browser';
import { Router } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
import { ProgressService } from '../../common/progress/progress.service';
import { Controller } from '../../models/controller';
import { ControllerService } from '../../services/controller.service';
import { MockedControllerService } from '../../services/controller.service.spec';
import { Controller } from '@models/controller';
import { ControllerService } from '@services/controller.service';
import { MockedControllerService } from '@services/controller.service.spec';
import { MockedProgressService } from '../project-map/project-map.component.spec';
import { BundledControllerFinderComponent } from './bundled-controller-finder.component';

View File

@ -2,8 +2,8 @@ import { DOCUMENT } from '@angular/common';
import { Component, Inject, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { ProgressService } from '../../common/progress/progress.service';
import { Controller } from '../../models/controller';
import { ControllerService } from '../../services/controller.service';
import { Controller } from '@models/controller';
import { ControllerService } from '@services/controller.service';
@Component({
selector: 'app-bundled-controller-finder',
@ -31,7 +31,7 @@ export class BundledControllerFinderComponent implements OnInit {
port = 80;
}
this.controllerService.getLocalController(this.document.location.hostname, port).then((controller:Controller ) => {
this.controllerService.getLocalController(this.document.location.hostname, port).then((controller: Controller ) => {
this.router.navigate(['/controller', controller.id, 'projects']);
this.progressService.deactivate();
});

View File

@ -2,9 +2,9 @@ import { Component, Inject, OnInit } from '@angular/core';
import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { ElectronService } from 'ngx-electron';
import { Controller } from '../../../models/controller';
import { ControllerService } from '../../../services/controller.service';
import { ToasterService } from '../../../services/toaster.service';
import { Controller } from '@models/controller';
import { ControllerService } from '@services/controller.service';
import { ToasterService } from '@services/toaster.service';
@Component({
selector: 'app-add-controller-dialog',
@ -124,7 +124,7 @@ export class AddControllerDialogComponent implements OnInit {
return;
}
const controller:Controller = Object.assign({}, this.controllerForm.value);
const controller: Controller = Object.assign({}, this.controllerForm.value);
this.controllerService.checkControllerVersion(controller).subscribe(
(controllerInfo) => {
if (controllerInfo.version.split('.')[0] >= 3) {

View File

@ -2,13 +2,13 @@ import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testin
import { MatCardModule } from '@angular/material/card';
import { MatDividerModule } from '@angular/material/divider';
import { Observable } from 'rxjs/Rx';
import { Controller } from '../../../models/controller';
import { Version } from '../../../models/version';
import { ControllerDatabase } from '../../../services/controller.database';
import { ControllerService } from '../../../services/controller.service';
import { MockedControllerService } from '../../../services/controller.service.spec';
import { VersionService } from '../../../services/version.service';
import { MockedVersionService } from '../../../services/version.service.spec';
import { Controller } from '@models/controller';
import { Version } from '@models/version';
import { ControllerDatabase } from '@services/controller.database';
import { ControllerService } from '@services/controller.service';
import { MockedControllerService } from '@services/controller.service.spec';
import { VersionService } from '@services/version.service';
import { MockedVersionService } from '@services/version.service.spec';
import { ControllerDiscoveryComponent } from './controller-discovery.component';
xdescribe('ControllerDiscoveryComponent', () => {
@ -112,7 +112,7 @@ describe('discovery', () => {
});
describe('discoverFirstAvailableController', () => {
let controller:Controller ;
let controller: Controller;
beforeEach(function () {
controller = new Controller ();
@ -142,7 +142,7 @@ describe('discoverFirstAvailableController', () => {
});
describe('accepting and ignoring found controller', () => {
let controller:Controller ;
let controller: Controller;
beforeEach(() => {
controller = new Controller ();
(controller.host = '199.111.111.1'), (controller.port = 3333);

View File

@ -3,11 +3,11 @@ import { ActivatedRoute } from '@angular/router';
import { forkJoin, from } from 'rxjs';
import { map } from 'rxjs//operators';
import { Observable } from 'rxjs/Rx';
import { Controller, ControllerProtocol } from '../../../models/controller';
import { Version } from '../../../models/version';
import { ControllerDatabase } from '../../../services/controller.database';
import { ControllerService } from '../../../services/controller.service';
import { VersionService } from '../../../services/version.service';
import { Controller, ControllerProtocol } from '@models/controller';
import { Version } from '@models/version';
import { ControllerDatabase } from '@services/controller.database';
import { ControllerService } from '@services/controller.service';
import { VersionService } from '@services/version.service';
@Component({
selector: 'app-controller-discovery',

View File

@ -4,11 +4,11 @@ import { MatDialog, MatDialogModule } from '@angular/material/dialog';
import { MatIconModule } from '@angular/material/icon';
import { MatMenuModule } from '@angular/material/menu';
import { MatToolbarModule } from '@angular/material/toolbar';
import { ControllerDatabase } from '../../services/controller.database';
import { ControllerService } from '../../services/controller.service';
import { ControllerDatabase } from '@services/controller.database';
import { ControllerService } from '@services/controller.service';
import { MockedControllerService } from 'app/services/controller.service.spec';
import { ControllersComponent } from './controllers.component';
import { ControllerManagementService } from '../../services/controller-management.service';
import { ControllerManagementService } from '@services/controller-management.service';
import { ElectronService } from 'ngx-electron';
import { ChildProcessService } from 'ngx-childprocess';
import { MatBottomSheet, MatBottomSheetModule } from '@angular/material/bottom-sheet';

View File

@ -7,10 +7,10 @@ import { ChildProcessService } from 'ngx-childprocess';
import { ElectronService } from 'ngx-electron';
import { merge, Observable, Subscription } from 'rxjs';
import { map } from 'rxjs/operators';
import {Controller , ControllerProtocol } from '../../models/controller';
import { ControllerManagementService } from '../../services/controller-management.service';
import { ControllerDatabase } from '../../services/controller.database';
import { ControllerService } from '../../services/controller.service';
import {Controller, ControllerProtocol } from '@models/controller';
import { ControllerManagementService } from '@services/controller-management.service';
import { ControllerDatabase } from '@services/controller.database';
import { ControllerService } from '@services/controller.service';
import { ConfirmationBottomSheetComponent } from '../projects/confirmation-bottomsheet/confirmation-bottomsheet.component';
import { AddControllerDialogComponent } from './add-controller-dialog/add-controller-dialog.component';
@ -41,7 +41,7 @@ export class ControllersComponent implements OnInit, OnDestroy {
getControllers() {
const runningControllerNames = this.controllerManagement.getRunningControllers();
this.controllerService.findAll().then((controllers:Controller []) => {
this.controllerService.findAll().then((controllers: Controller []) => {
controllers.forEach((controller) => {
const controllerIndex = runningControllerNames.findIndex((controllerName) => controller.name === controllerName);
if (controllerIndex >= 0) {
@ -122,14 +122,14 @@ export class ControllersComponent implements OnInit, OnDestroy {
dialogRef.afterClosed().subscribe((controller) => {
if (controller) {
this.controllerService.create(controller).then((created:Controller ) => {
this.controllerService.create(controller).then((created: Controller ) => {
this.controllerDatabase.addController(created);
});
}
});
}
getControllerStatus(controller:Controller ) {
getControllerStatus(controller: Controller ) {
if (controller.location === 'local') {
if (controller.status === undefined) {
return 'stopped';
@ -138,7 +138,7 @@ export class ControllersComponent implements OnInit, OnDestroy {
}
}
deleteController(controller:Controller ) {
deleteController(controller: Controller ) {
this.bottomSheet.open(ConfirmationBottomSheetComponent);
let bottomSheetRef = this.bottomSheet._openedBottomSheetRef;
bottomSheetRef.instance.message = 'Do you want to delete the controller?';
@ -151,11 +151,11 @@ export class ControllersComponent implements OnInit, OnDestroy {
});
}
async startController(controller:Controller ) {
async startController(controller: Controller ) {
await this.controllerManagement.start(controller);
}
async stopController(controller:Controller ) {
async stopController(controller: Controller ) {
await this.controllerManagement.stop(controller);
}
}

View File

@ -0,0 +1,8 @@
<h1 mat-dialog-title>{{ data.title }}</h1>
<div mat-dialog-content>
<p>{{ data.question }}</p>
</div>
<div mat-dialog-actions>
<button mat-button (click)="onNoClick()">No</button>
<button mat-button (click)="onYesClick()">Yes</button>
</div>

View File

@ -0,0 +1,21 @@
import { Component, Inject } from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
@Component({
selector: 'app-question-dialog',
templateUrl: './question-dialog.component.html',
})
export class QuestionDialogComponent {
constructor(
public dialogRef: MatDialogRef<QuestionDialogComponent>,
@Inject(MAT_DIALOG_DATA) public data: { title: string, question: string}
) {}
onNoClick(): void {
this.dialogRef.close(false);
}
onYesClick(): void {
this.dialogRef.close(true);
}
}

View File

@ -1,10 +1,10 @@
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
import { Controller } from '../../models/controller';
import { ControllerDatabase } from '../../services/controller.database';
import { ControllerService } from '../../services/controller.service';
import { ToasterService } from '../../services/toaster.service';
import { Controller } from '@models/controller';
import { ControllerDatabase } from '@services/controller.database';
import { ControllerService } from '@services/controller.service';
import { ToasterService } from '@services/toaster.service';
@Component({
selector: 'app-direct-link',
@ -72,7 +72,7 @@ export class DirectLinkComponent implements OnInit {
return;
}
let controllerToAdd:Controller = new Controller ();
let controllerToAdd: Controller = new Controller ();
controllerToAdd.host = this.controllerIp;
controllerToAdd.port = this.controllerPort;
@ -80,7 +80,7 @@ export class DirectLinkComponent implements OnInit {
controllerToAdd.location = this.controllerForm.get('location').value;
controllerToAdd.protocol = this.controllerForm.get('protocol').value;
this.controllerService.create(controllerToAdd).then((addedController:Controller ) => {
this.controllerService.create(controllerToAdd).then((addedController: Controller ) => {
this.router.navigate(['/controller', addedController.id, 'project', this.projectId]);
});
}

View File

@ -9,8 +9,8 @@ import { EllipseElementFactory } from '../../../cartography/helpers/drawings-fac
import { LineElementFactory } from '../../../cartography/helpers/drawings-factory/line-element-factory';
import { RectangleElementFactory } from '../../../cartography/helpers/drawings-factory/rectangle-element-factory';
import { TextElementFactory } from '../../../cartography/helpers/drawings-factory/text-element-factory';
import { Project } from '../../../models/project';
import { DrawingService } from '../../../services/drawing.service';
import { Project } from '@models/project';
import { DrawingService } from '@services/drawing.service';
import { MockedDrawingsDataSource, MockedDrawingService } from '../../project-map/project-map.component.spec';
import { DrawingAddedComponent } from './drawing-added.component';

View File

@ -6,9 +6,9 @@ import { DrawingsEventSource } from '../../../cartography/events/drawings-event-
import { AddedDataEvent } from '../../../cartography/events/event-source';
import { DefaultDrawingsFactory } from '../../../cartography/helpers/default-drawings-factory';
import { Drawing } from '../../../cartography/models/drawing';
import { Project } from '../../../models/project';
import { Controller } from '../../../models/controller';
import { DrawingService } from '../../../services/drawing.service';
import { Project } from '@models/project';
import { Controller } from '@models/controller';
import { DrawingService } from '@services/drawing.service';
@Component({
selector: 'app-drawing-added',

View File

@ -5,7 +5,7 @@ import { DrawingsEventSource } from '../../../cartography/events/drawings-event-
import { DraggedDataEvent } from '../../../cartography/events/event-source';
import { DrawingElement } from '../../../cartography/models/drawings/drawing-element';
import { MapDrawing } from '../../../cartography/models/map/map-drawing';
import { DrawingService } from '../../../services/drawing.service';
import { DrawingService } from '@services/drawing.service';
import { MockedDrawingsDataSource, MockedDrawingService } from '../../project-map/project-map.component.spec';
import { DrawingDraggedComponent } from './drawing-dragged.component';

View File

@ -5,9 +5,9 @@ import { DrawingsEventSource } from '../../../cartography/events/drawings-event-
import { DraggedDataEvent } from '../../../cartography/events/event-source';
import { Drawing } from '../../../cartography/models/drawing';
import { MapDrawing } from '../../../cartography/models/map/map-drawing';
import { Project } from '../../../models/project';
import { Controller } from '../../../models/controller';
import { DrawingService } from '../../../services/drawing.service';
import { Project } from '@models/project';
import { Controller } from '@models/controller';
import { DrawingService } from '@services/drawing.service';
@Component({
selector: 'app-drawing-dragged',
@ -15,7 +15,7 @@ import { DrawingService } from '../../../services/drawing.service';
styleUrls: ['./drawing-dragged.component.scss'],
})
export class DrawingDraggedComponent implements OnInit, OnDestroy {
@Input() controller:Controller ;
@Input() controller: Controller;
@Input() project: Project;
private drawingDragged: Subscription;

View File

@ -6,7 +6,7 @@ import { DrawingsEventSource } from '../../../cartography/events/drawings-event-
import { ResizedDataEvent } from '../../../cartography/events/event-source';
import { DrawingElement } from '../../../cartography/models/drawings/drawing-element';
import { MapDrawing } from '../../../cartography/models/map/map-drawing';
import { DrawingService } from '../../../services/drawing.service';
import { DrawingService } from '@services/drawing.service';
import { MockedDrawingsDataSource, MockedDrawingService } from '../../project-map/project-map.component.spec';
import { DrawingResizedComponent } from './drawing-resized.component';

View File

@ -6,8 +6,8 @@ import { DrawingsEventSource } from '../../../cartography/events/drawings-event-
import { ResizedDataEvent } from '../../../cartography/events/event-source';
import { Drawing } from '../../../cartography/models/drawing';
import { MapDrawing } from '../../../cartography/models/map/map-drawing';
import { Controller } from '../../../models/controller';
import { DrawingService } from '../../../services/drawing.service';
import { Controller } from '@models/controller';
import { DrawingService } from '@services/drawing.service';
@Component({
selector: 'app-drawing-resized',
@ -15,7 +15,7 @@ import { DrawingService } from '../../../services/drawing.service';
styleUrls: ['./drawing-resized.component.scss'],
})
export class DrawingResizedComponent implements OnInit, OnDestroy {
@Input() controller:Controller ;
@Input() controller: Controller;
private drawingResized: Subscription;
constructor(

View File

@ -6,8 +6,8 @@ import { LinksEventSource } from '../../../cartography/events/links-event-source
import { Label } from '../../../cartography/models/label';
import { MapLabel } from '../../../cartography/models/map/map-label';
import { MapLinkNode } from '../../../cartography/models/map/map-link-node';
import { Link } from '../../../models/link';
import { LinkService } from '../../../services/link.service';
import { Link } from '@models/link';
import { LinkService } from '@services/link.service';
import { MockedLinkService } from '../../project-map/project-map.component.spec';
import { InterfaceLabelDraggedComponent } from './interface-label-dragged.component';

View File

@ -4,9 +4,9 @@ import { LinksDataSource } from '../../../cartography/datasources/links-datasour
import { DraggedDataEvent } from '../../../cartography/events/event-source';
import { LinksEventSource } from '../../../cartography/events/links-event-source';
import { MapLinkNode } from '../../../cartography/models/map/map-link-node';
import { Link } from '../../../models/link';
import { Controller } from '../../../models/controller';
import { LinkService } from '../../../services/link.service';
import { Link } from '@models/link';
import { Controller } from '@models/controller';
import { LinkService } from '@services/link.service';
@Component({
selector: 'app-interface-label-dragged',
@ -14,7 +14,7 @@ import { LinkService } from '../../../services/link.service';
styleUrls: ['./interface-label-dragged.component.scss'],
})
export class InterfaceLabelDraggedComponent {
@Input() controller:Controller ;
@Input() controller: Controller;
private interfaceDragged: Subscription;
constructor(

View File

@ -12,10 +12,10 @@ import { FontFixer } from '../../../cartography/helpers/font-fixer';
import { MapLabel } from '../../../cartography/models/map/map-label';
import { MapNode } from '../../../cartography/models/map/map-node';
import { MapPort } from '../../../cartography/models/map/map-port';
import { Project } from '../../../models/project';
import { LinkService } from '../../../services/link.service';
import { ProjectService } from '../../../services/project.service';
import { MockedProjectService } from '../../../services/project.service.spec';
import { Project } from '@models/project';
import { LinkService } from '@services/link.service';
import { ProjectService } from '@services/project.service';
import { MockedProjectService } from '@services/project.service.spec';
import { MockedLinkService } from '../../project-map/project-map.component.spec';
import { LinkCreatedComponent } from './link-created.component';
@ -79,6 +79,7 @@ describe('LinkCreatedComponent', () => {
portNameFormat: 'samplePortNameFormat',
portSegmentSize: 0,
ports: [],
properties: undefined,
projectId: 'sampleProjectId',
status: 'sampleStatus',
symbol: 'sampleSymbol',

View File

@ -5,11 +5,11 @@ import { MapPortToPortConverter } from '../../../cartography/converters/map/map-
import { LinksDataSource } from '../../../cartography/datasources/links-datasource';
import { MapLinkCreated } from '../../../cartography/events/links';
import { LinksEventSource } from '../../../cartography/events/links-event-source';
import { Link } from '../../../models/link';
import { Project } from '../../../models/project';
import { Controller } from '../../../models/controller';
import { LinkService } from '../../../services/link.service';
import { ProjectService } from '../../../services/project.service';
import { Link } from '@models/link';
import { Project } from '@models/project';
import { Controller } from '@models/controller';
import { LinkService } from '@services/link.service';
import { ProjectService } from '@services/project.service';
@Component({
selector: 'app-link-created',
@ -17,7 +17,7 @@ import { ProjectService } from '../../../services/project.service';
styleUrls: ['./link-created.component.scss'],
})
export class LinkCreatedComponent implements OnInit, OnDestroy {
@Input() controller:Controller ;
@Input() controller: Controller;
@Input() project: Project;
private linkCreated: Subscription;

View File

@ -5,7 +5,7 @@ import { DraggedDataEvent } from '../../../cartography/events/event-source';
import { NodesEventSource } from '../../../cartography/events/nodes-event-source';
import { MapLabel } from '../../../cartography/models/map/map-label';
import { MapNode } from '../../../cartography/models/map/map-node';
import { NodeService } from '../../../services/node.service';
import { NodeService } from '@services/node.service';
import { MockedNodesDataSource, MockedNodeService } from '../../project-map/project-map.component.spec';
import { NodeDraggedComponent } from './node-dragged.component';
@ -59,6 +59,7 @@ describe('NodeDraggedComponent', () => {
portNameFormat: 'samplePortNameFormat',
portSegmentSize: 0,
ports: [],
properties: undefined,
projectId: 'sampleProjectId',
status: 'sampleStatus',
symbol: 'sampleSymbol',

View File

@ -5,9 +5,9 @@ import { DraggedDataEvent } from '../../../cartography/events/event-source';
import { NodesEventSource } from '../../../cartography/events/nodes-event-source';
import { MapNode } from '../../../cartography/models/map/map-node';
import { Node } from '../../../cartography/models/node';
import { Project } from '../../../models/project';
import { Controller } from '../../../models/controller';
import { NodeService } from '../../../services/node.service';
import { Project } from '@models/project';
import { Controller } from '@models/controller';
import { NodeService } from '@services/node.service';
@Component({
selector: 'app-node-dragged',
@ -15,7 +15,7 @@ import { NodeService } from '../../../services/node.service';
styleUrls: ['./node-dragged.component.scss'],
})
export class NodeDraggedComponent implements OnInit, OnDestroy {
@Input() controller:Controller ;
@Input() controller: Controller;
@Input() project: Project;
private nodeDragged: Subscription;

View File

@ -8,7 +8,7 @@ import { CssFixer } from '../../../cartography/helpers/css-fixer';
import { FontBBoxCalculator } from '../../../cartography/helpers/font-bbox-calculator';
import { FontFixer } from '../../../cartography/helpers/font-fixer';
import { MapLabel } from '../../../cartography/models/map/map-label';
import { NodeService } from '../../../services/node.service';
import { NodeService } from '@services/node.service';
import { MockedNodesDataSource, MockedNodeService } from '../../project-map/project-map.component.spec';
import { NodeLabelDraggedComponent } from './node-label-dragged.component';

View File

@ -6,8 +6,8 @@ import { DraggedDataEvent } from '../../../cartography/events/event-source';
import { NodesEventSource } from '../../../cartography/events/nodes-event-source';
import { MapLabel } from '../../../cartography/models/map/map-label';
import { Node } from '../../../cartography/models/node';
import { Controller } from '../../../models/controller';
import { NodeService } from '../../../services/node.service';
import { Controller } from '@models/controller';
import { NodeService } from '@services/node.service';
@Component({
selector: 'app-node-label-dragged',
@ -15,7 +15,7 @@ import { NodeService } from '../../../services/node.service';
styleUrls: ['./node-label-dragged.component.scss'],
})
export class NodeLabelDraggedComponent implements OnInit, OnDestroy {
@Input() controller:Controller ;
@Input() controller: Controller;
private nodeLabelDragged: Subscription;
constructor(

View File

@ -10,8 +10,8 @@ import { LineElementFactory } from '../../../cartography/helpers/drawings-factor
import { RectangleElementFactory } from '../../../cartography/helpers/drawings-factory/rectangle-element-factory';
import { TextElementFactory } from '../../../cartography/helpers/drawings-factory/text-element-factory';
import { Context } from '../../../cartography/models/context';
import { Project } from '../../../models/project';
import { DrawingService } from '../../../services/drawing.service';
import { Project } from '@models/project';
import { DrawingService } from '@services/drawing.service';
import { MockedDrawingsDataSource, MockedDrawingService } from '../../project-map/project-map.component.spec';
import { TextAddedComponent } from './text-added.component';

View File

@ -8,9 +8,9 @@ import { DefaultDrawingsFactory } from '../../../cartography/helpers/default-dra
import { Context } from '../../../cartography/models/context';
import { Drawing } from '../../../cartography/models/drawing';
import { TextElement } from '../../../cartography/models/drawings/text-element';
import { Project } from '../../../models/project';
import { Controller } from '../../../models/controller';
import { DrawingService } from '../../../services/drawing.service';
import { Project } from '@models/project';
import { Controller } from '@models/controller';
import { DrawingService } from '@services/drawing.service';
@Component({
selector: 'app-text-added',

View File

@ -5,7 +5,7 @@ import { DrawingsDataSource } from '../../../cartography/datasources/drawings-da
import { DrawingsEventSource } from '../../../cartography/events/drawings-event-source';
import { TextEditedDataEvent } from '../../../cartography/events/event-source';
import { TextElement } from '../../../cartography/models/drawings/text-element';
import { DrawingService } from '../../../services/drawing.service';
import { DrawingService } from '@services/drawing.service';
import { MockedDrawingsDataSource, MockedDrawingService } from '../../project-map/project-map.component.spec';
import { TextEditedComponent } from './text-edited.component';

View File

@ -7,8 +7,8 @@ import { TextEditedDataEvent } from '../../../cartography/events/event-source';
import { Drawing } from '../../../cartography/models/drawing';
import { TextElement } from '../../../cartography/models/drawings/text-element';
import { MapDrawing } from '../../../cartography/models/map/map-drawing';
import { Controller } from '../../../models/controller';
import { DrawingService } from '../../../services/drawing.service';
import { Controller } from '@models/controller';
import { DrawingService } from '@services/drawing.service';
@Component({
selector: 'app-text-edited',

View File

@ -7,10 +7,10 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { MatSelectModule } from '@angular/material/select';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { ProjectService } from '../../services/project.service';
import { MockedProjectService } from '../../services/project.service.spec';
import { ToasterService } from '../../services/toaster.service';
import { MockedToasterService } from '../../services/toaster.service.spec';
import { ProjectService } from '@services/project.service';
import { MockedProjectService } from '@services/project.service.spec';
import { ToasterService } from '@services/toaster.service';
import { MockedToasterService } from '@services/toaster.service.spec';
import { ExportPortableProjectComponent } from './export-portable-project.component';
describe('ExportPortableProjectComponent', () => {

View File

@ -1,9 +1,9 @@
import { Component, Inject, OnInit } from '@angular/core';
import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { Project } from '../../models/project';
import { Controller } from '../../models/controller';
import { ProjectService } from '../../services/project.service';
import { Project } from '@models/project';
import { Controller } from '@models/controller';
import { ProjectService } from '@services/project.service';
@Component({
selector: 'app-export-portable-project',
@ -16,7 +16,7 @@ export class ExportPortableProjectComponent implements OnInit {
compression_methods: any = [];
compression_level: any = [];
compression_filter_value: any = [];
controller:Controller ;
controller: Controller;
project: Project;
index: number = 4;
fileName: string;

View File

@ -15,8 +15,8 @@ import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';
import {UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators} from "@angular/forms";
import {groupNameAsyncValidator} from "@components/group-management/add-group-dialog/groupNameAsyncValidator";
import {GroupNameValidator} from "@components/group-management/add-group-dialog/GroupNameValidator";
import {GroupService} from "../../../services/group.service";
import {Controller} from "../../../models/controller";
import {GroupService} from "@services/group.service";
import {Controller} from "@models/controller";
import {BehaviorSubject, forkJoin, timer} from "rxjs";
import {User} from "@models/users/user";
import {UserService} from "@services/user.service";

View File

@ -13,8 +13,8 @@
import { UntypedFormControl } from '@angular/forms';
import { timer } from 'rxjs';
import { map, switchMap, tap } from 'rxjs/operators';
import { Controller } from "../../../models/controller";
import { GroupService } from "../../../services/group.service";
import { Controller } from "@models/controller";
import { GroupService } from "@services/group.service";
export const groupNameAsyncValidator = (controller: Controller, groupService: GroupService) => {
return (control: UntypedFormControl) => {

View File

@ -12,11 +12,11 @@
*/
import {Component, OnInit, QueryList, ViewChild, ViewChildren} from '@angular/core';
import {ActivatedRoute, Router} from "@angular/router";
import {ControllerService} from "../../services/controller.service";
import {ToasterService} from "../../services/toaster.service";
import {GroupService} from "../../services/group.service";
import {Controller} from "../../models/controller";
import {Group} from "../../models/groups/group";
import {ControllerService} from "@services/controller.service";
import {ToasterService} from "@services/toaster.service";
import {GroupService} from "@services/group.service";
import {Controller} from "@models/controller";
import {Group} from "@models/groups/group";
import {MatSort, Sort} from "@angular/material/sort";
import {MatDialog} from "@angular/material/dialog";
import {AddGroupDialogComponent} from "@components/group-management/add-group-dialog/add-group-dialog.component";

View File

@ -39,7 +39,7 @@
<div class="col-md-4 txt-align" *ngIf="uploaderImage.queue.length <= 0">
<input
type="file"
accept=".bin,.image,.qcow2,.vmdk"
accept=".bin,.image,.iol,.qcow2,.vmdk"
multiple
#file
class="non-visible"

View File

@ -5,10 +5,10 @@ import { MatIconModule } from '@angular/material/icon';
import { MatMenuModule } from '@angular/material/menu';
import { MatToolbarModule } from '@angular/material/toolbar';
import { ImageManagerService } from 'app/services/image-manager.service';
import { ControllerService } from '../../../services/controller.service';
import { MockedControllerService } from '../../../services/controller.service.spec';
import { ControllerService } from '@services/controller.service';
import { MockedControllerService } from '@services/controller.service.spec';
import { of } from 'rxjs';
import { Controller } from '../../../models/controller';
import { Controller } from '@models/controller';
import { AddImageDialogComponent } from './add-image-dialog.component';
import { NO_ERRORS_SCHEMA } from '@angular/core';
@ -17,7 +17,7 @@ import { MockedToasterService } from 'app/services/toaster.service.spec';
import { MatSnackBarModule } from '@angular/material/snack-bar';
export class MockedImageManagerService {
public getImages(controller:Controller ) {
public getImages(controller: Controller ) {
return of();
}

View File

@ -3,9 +3,9 @@ import { Component, Inject, OnInit } from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { UploadServiceService } from 'app/common/uploading-processbar/upload-service.service';
import { FileItem, FileUploader, ParsedResponseHeaders } from 'ng2-file-upload';
import { Controller } from '../../../models/controller';
import { ImageManagerService } from '../../../services/image-manager.service';
import { ToasterService } from '../../../services/toaster.service';
import { Controller } from '@models/controller';
import { ImageManagerService } from '@services/image-manager.service';
import { ToasterService } from '@services/toaster.service';
@Component({
selector: 'app-add-image-dialog',
@ -20,7 +20,7 @@ import { ToasterService } from '../../../services/toaster.service';
],
})
export class AddImageDialogComponent implements OnInit {
controller:Controller ;
controller: Controller;
isInstallAppliance: boolean = false;
install_appliance: boolean = false;
selectFile: any = [];

View File

@ -9,9 +9,9 @@ import { ToasterService } from 'app/services/toaster.service';
import { MockedToasterService } from 'app/services/toaster.service.spec';
import { Server } from 'http';
import { of } from 'rxjs';
import { ImageManagerService } from '../../../services/image-manager.service';
import { ControllerService } from '../../../services/controller.service';
import { MockedControllerService } from '../../../services/controller.service.spec';
import { ImageManagerService } from '@services/image-manager.service';
import { ControllerService } from '@services/controller.service';
import { MockedControllerService } from '@services/controller.service.spec';
import { ImageManagerComponent } from '../image-manager.component';
import { DeleteAllImageFilesDialogComponent } from './deleteallfiles-dialog.component';

View File

@ -1,10 +1,10 @@
import { Component, Inject, OnInit } from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { ImageManagerService } from '../../../services/image-manager.service';
import { ToasterService } from '../../../services/toaster.service';
import { ImageManagerService } from '@services/image-manager.service';
import { ToasterService } from '@services/toaster.service';
import { Observable, of } from 'rxjs';
import { catchError } from 'rxjs/operators';
import { ImageData } from '../../../models/images';
import { ImageData } from '@models/images';
@Component({
selector: 'app-deleteallfiles-dialog',

View File

@ -4,7 +4,7 @@ import { DataSource, SelectionModel } from '@angular/cdk/collections';
import { MatSort } from '@angular/material/sort';
import { BehaviorSubject, Observable, Subscription, merge } from 'rxjs';
import { map } from 'rxjs/operators';
import { Image } from '../../models/images';
import { Image } from '@models/images';
export class imageDatabase {

View File

@ -1,19 +1,19 @@
<div class="content">
<div class="default-header">
<div class="row">
<div class="col-md-9">
<h1>Image Manager</h1>
</div>
<div class="col-md-3 btn-box">
<button class="img-btn" mat-button
(click)="addImageDialog()">
<mat-icon>add</mat-icon> Add Image
</button>
</div>
<h1 class="col">Image Manager</h1>
<button mat-raised-button color="primary" (click)="installAllImages()" class="install-all-button">
<mat-icon>done_all</mat-icon> Install all images
</button>
<button mat-raised-button color="primary" (click)="pruneImages()" class="prune-button">
<mat-icon>delete</mat-icon> Prune Images
</button>
<button mat-raised-button color="primary" (click)="addImageDialog()" class="add-button">
<mat-icon>add</mat-icon> Add Image
</button>
</div>
</div>
<div class="default-content">
<app-controller-discovery></app-controller-discovery>
@ -49,9 +49,9 @@
<mat-header-cell *matHeaderCellDef> Image Size </mat-header-cell>
<mat-cell *matCellDef="let row"> {{ (row.image_size/1000000).toFixed()}} MB </mat-cell>
</ng-container>
<ng-container matColumnDef="delete" >
<mat-header-cell *matHeaderCellDef>
<mat-header-cell *matHeaderCellDef>
<button mat-button *ngIf="(selection.hasValue() && isAllSelected()) || selection.selected.length > 1" (click)="deleteAllFiles()" aria-label="Example icon button with a delete icon">
<mat-icon>delete</mat-icon>
</button>
@ -67,4 +67,4 @@
</mat-table>
</div>
</div>
</div>
</div>

View File

@ -2,12 +2,22 @@
display: none;
}
.img-btn{
margin: auto;
}
.btn-box{
display: flex;
margin-top: 10px;
.install-all-button {
height: 40px;
width: 160px;
margin: 20px;
}
.prune-button {
height: 40px;
width: 160px;
margin: 20px;
}
.add-button {
height: 40px;
width: 160px;
margin: 20px;
}
mat-header-cell, mat-cell {
@ -21,4 +31,3 @@ mat-cell, mat-header-cell, mat-footer-cell {
min-height: inherit;
}

View File

@ -9,25 +9,25 @@ import { ImageManagerService } from 'app/services/image-manager.service';
import { ControllerService } from 'app/services/controller.service';
import { MockedControllerService } from 'app/services/controller.service.spec';
import { of } from 'rxjs';
import { Controller } from '../../models/controller';
import { Controller } from '@models/controller';
import { ImageManagerComponent } from './image-manager.component';
import { Image } from '../../models/images';
import { Image } from '@models/images';
import { ProgressService } from 'app/common/progress/progress.service';
import { MockedProgressService } from '../project-map/project-map.component.spec';
import { MockedActivatedRoute } from '../preferences/preferences.component.spec';
import { ActivatedRoute } from '@angular/router';
import { MockedVersionService } from '../../services/version.service.spec';
import { MockedVersionService } from '@services/version.service.spec';
import { VersionService } from 'app/services/version.service';
import { ToasterService } from 'app/services/toaster.service';
import { MockedToasterService } from 'app/services/toaster.service.spec';
export class MockedImageManagerService {
public getImages(controller:Controller ) {
public getImages(controller: Controller ) {
return of();
}
public deleteFile(controller:Controller , image_path) {
public deleteFile(controller: Controller, image_path) {
return of();
}

View File

@ -1,17 +1,18 @@
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { ControllerService } from '../../services/controller.service';
import { VersionService } from '../../services/version.service';
import { ControllerService } from '@services/controller.service';
import { VersionService } from '@services/version.service';
import { ProgressService } from 'app/common/progress/progress.service';
import { Image } from '../../models/images';
import { Controller } from '../../models/controller';
import { ImageManagerService } from "../../services/image-manager.service";
import { DataSource, SelectionModel } from '@angular/cdk/collections';
import { Image } from '@models/images';
import { Controller } from '@models/controller';
import { ImageManagerService } from "@services/image-manager.service";
import { SelectionModel } from '@angular/cdk/collections';
import { AddImageDialogComponent } from './add-image-dialog/add-image-dialog.component';
import { MatDialog } from '@angular/material/dialog';
import { ToasterService } from '../../services/toaster.service';
import { ToasterService } from '@services/toaster.service';
import { DeleteAllImageFilesDialogComponent } from './deleteallfiles-dialog/deleteallfiles-dialog.component';
import { imageDataSource, imageDatabase } from "./image-database-file";
import { QuestionDialogComponent } from "@components/dialogs/question-dialog/question-dialog.component";
@Component({
selector: 'app-image-manager',
@ -19,7 +20,7 @@ import { imageDataSource, imageDatabase } from "./image-database-file";
styleUrls: ['./image-manager.component.scss']
})
export class ImageManagerComponent implements OnInit {
controller:Controller ;
controller: Controller;
public version: string;
dataSource: imageDataSource;
imageDatabase = new imageDatabase();
@ -36,12 +37,11 @@ export class ImageManagerComponent implements OnInit {
private versionService: VersionService,
private dialog: MatDialog,
private toasterService: ToasterService,
) { }
ngOnInit(): void {
let controller_id = parseInt(this.route.snapshot.paramMap.get('controller_id'));
this.controllerService.get(controller_id).then((controller:Controller ) => {
this.controllerService.get(controller_id).then((controller: Controller ) => {
this.controller = controller;
if (controller.authToken) {
this.getImages()
@ -60,7 +60,6 @@ export class ImageManagerComponent implements OnInit {
},
(error) => {
this.toasterService.error(error.error.message)
}
);
}
@ -100,6 +99,49 @@ export class ImageManagerComponent implements OnInit {
this.isAllDelete = true;
}
installAllImages() {
const dialogRef = this.dialog.open(QuestionDialogComponent, {
width: '450px',
data: { title: 'Install all images', question: 'This will attempt to automatically create templates based on image checksums. Continue?'}
});
dialogRef.afterClosed().subscribe((result: boolean) => {
if (result) {
this.imageService.installImages(this.controller).subscribe(() => {
this.toasterService.success('Images installed');
},
(error) => {
this.toasterService.error(error.error.message)
}
);
}
});
}
pruneImages() {
const dialogRef = this.dialog.open(QuestionDialogComponent, {
width: '450px',
data: { title: 'Prune images', question: 'Delete all images not used by a template? This cannot be reverted.'}
});
dialogRef.afterClosed().subscribe((result: boolean) => {
if (result) {
this.imageService.pruneImages(this.controller).subscribe(
() => {
this.getImages()
this.unChecked()
this.toasterService.success('Images pruned');
},
(error) => {
this.getImages()
this.unChecked()
this.toasterService.error(error.error.message)
}
);
}
});
}
public addImageDialog() {
const dialogRef = this.dialog.open(AddImageDialogComponent, {
width: '600px',

View File

@ -1,7 +1,7 @@
import { DataSource } from '@angular/cdk/table';
import { ChangeDetectorRef, Component, OnInit } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
import { InstalledSoftwareService } from '../../services/installed-software.service';
import { InstalledSoftwareService } from '@services/installed-software.service';
@Component({
selector: 'app-installed-software',

View File

@ -1,15 +1,15 @@
import { Component, DoCheck, OnInit, ViewEncapsulation } from '@angular/core';
import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
import { AuthResponse } from '../../models/authResponse';
import { Controller } from '../../models/controller';
import { Version } from '../../models/version';
import { LoginService } from '../../services/login.service';
import { ControllerDatabase } from '../../services/controller.database';
import { ControllerService } from '../../services/controller.service';
import { ThemeService } from '../../services/theme.service';
import { ToasterService } from '../../services/toaster.service';
import { VersionService } from '../../services/version.service';
import { AuthResponse } from '@models/authResponse';
import { Controller } from '@models/controller';
import { Version } from '@models/version';
import { LoginService } from '@services/login.service';
import { ControllerDatabase } from '@services/controller.database';
import { ControllerService } from '@services/controller.service';
import { ThemeService } from '@services/theme.service';
import { ToasterService } from '@services/toaster.service';
import { VersionService } from '@services/version.service';
@Component({
selector: 'app-login',
@ -18,7 +18,7 @@ import { VersionService } from '../../services/version.service';
encapsulation: ViewEncapsulation.None,
})
export class LoginComponent implements OnInit, DoCheck {
private controller:Controller ;
private controller: Controller;
public version: string;
public isLightThemeEnabled: boolean = false;
public loginError: boolean = false;
@ -45,7 +45,7 @@ export class LoginComponent implements OnInit, DoCheck {
async ngOnInit() {
const controller_id = this.route.snapshot.paramMap.get('controller_id');
this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/';
this.controllerService.get(parseInt(controller_id, 10)).then((controller:Controller ) => {
this.controllerService.get(parseInt(controller_id, 10)).then((controller: Controller ) => {
this.controller = controller;
if (controller.authToken) {
@ -94,6 +94,7 @@ export class LoginComponent implements OnInit, DoCheck {
}
},
(error) => {
this.isRememberMe = false;
this.loginError = true;
}
);

View File

@ -10,21 +10,21 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ActivatedRoute } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { Controller } from '../../../../../models/controller';
import { CloudTemplate } from '../../../../../models/templates/cloud-template';
import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service';
import { ComputeService } from '../../../../../services/compute.service';
import { ControllerService } from '../../../../../services/controller.service';
import { MockedControllerService } from '../../../../../services/controller.service.spec';
import { TemplateMocksService } from '../../../../../services/template-mocks.service';
import { ToasterService } from '../../../../../services/toaster.service';
import { MockedToasterService } from '../../../../../services/toaster.service.spec';
import { Controller } from '@models/controller';
import { CloudTemplate } from '@models/templates/cloud-template';
import { BuiltInTemplatesService } from '@services/built-in-templates.service';
import { ComputeService } from '@services/compute.service';
import { ControllerService } from '@services/controller.service';
import { MockedControllerService } from '@services/controller.service.spec';
import { TemplateMocksService } from '@services/template-mocks.service';
import { ToasterService } from '@services/toaster.service';
import { MockedToasterService } from '@services/toaster.service.spec';
import { MockedComputeService } from '../../../../preferences/vpcs/add-vpcs-template/add-vpcs-template.component.spec';
import { MockedActivatedRoute } from '../../../preferences.component.spec';
import { CloudNodesAddTemplateComponent } from './cloud-nodes-add-template.component';
export class MockedBuiltInTemplatesService {
public addTemplate(controller:Controller , cloudTemplate: CloudTemplate) {
public addTemplate(controller: Controller, cloudTemplate: CloudTemplate) {
return of(cloudTemplate);
}
}
@ -80,7 +80,7 @@ describe('CloudNodesAddTemplateComponent', () => {
it('should call add template', () => {
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as CloudTemplate));
component.templateName = 'sample name';
component.controller = { id: 1 } as Controller ;
component.controller = { id: 1 } as Controller;
component.formGroup.controls['templateName'].setValue('template name');
component.addTemplate();
@ -92,7 +92,7 @@ describe('CloudNodesAddTemplateComponent', () => {
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as CloudTemplate));
spyOn(mockedToasterService, 'error');
component.templateName = '';
component.controller = { id: 1 } as Controller ;
component.controller = { id: 1 } as Controller;
component.addTemplate();

View File

@ -2,14 +2,14 @@ import { Component, OnInit } from '@angular/core';
import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
import { v4 as uuid } from 'uuid';
import { Compute } from '../../../../../models/compute';
import { Controller } from '../../../../../models/controller';
import { CloudTemplate } from '../../../../../models/templates/cloud-template';
import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service';
import { ComputeService } from '../../../../../services/compute.service';
import { ControllerService } from '../../../../../services/controller.service';
import { TemplateMocksService } from '../../../../../services/template-mocks.service';
import { ToasterService } from '../../../../../services/toaster.service';
import { Compute } from '@models/compute';
import { Controller } from '@models/controller';
import { CloudTemplate } from '@models/templates/cloud-template';
import { BuiltInTemplatesService } from '@services/built-in-templates.service';
import { ComputeService } from '@services/compute.service';
import { ControllerService } from '@services/controller.service';
import { TemplateMocksService } from '@services/template-mocks.service';
import { ToasterService } from '@services/toaster.service';
@Component({
selector: 'app-cloud-nodes-add-template',
@ -17,7 +17,7 @@ import { ToasterService } from '../../../../../services/toaster.service';
styleUrls: ['./cloud-nodes-add-template.component.scss', '../../../preferences.component.scss'],
})
export class CloudNodesAddTemplateComponent implements OnInit {
controller:Controller ;
controller: Controller;
templateName: string = '';
formGroup: UntypedFormGroup;
isLocalComputerChosen: boolean = true;
@ -39,7 +39,7 @@ export class CloudNodesAddTemplateComponent implements OnInit {
ngOnInit() {
const controller_id = this.route.snapshot.paramMap.get('controller_id');
this.controllerService.get(parseInt(controller_id, 10)).then((controller:Controller ) => {
this.controllerService.get(parseInt(controller_id, 10)).then((controller: Controller ) => {
this.controller = controller;
});
}

View File

@ -11,23 +11,23 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ActivatedRoute } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { Controller } from '../../../../../models/controller';
import { CloudTemplate } from '../../../../../models/templates/cloud-template';
import { BuiltInTemplatesConfigurationService } from '../../../../../services/built-in-templates-configuration.service';
import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service';
import { ControllerService } from '../../../../../services/controller.service';
import { MockedControllerService } from '../../../../../services/controller.service.spec';
import { ToasterService } from '../../../../../services/toaster.service';
import { MockedToasterService } from '../../../../../services/toaster.service.spec';
import { Controller } from '@models/controller';
import { CloudTemplate } from '@models/templates/cloud-template';
import { BuiltInTemplatesConfigurationService } from '@services/built-in-templates-configuration.service';
import { BuiltInTemplatesService } from '@services/built-in-templates.service';
import { ControllerService } from '@services/controller.service';
import { MockedControllerService } from '@services/controller.service.spec';
import { ToasterService } from '@services/toaster.service';
import { MockedToasterService } from '@services/toaster.service.spec';
import { MockedActivatedRoute } from '../../../preferences.component.spec';
import { CloudNodesTemplateDetailsComponent } from './cloud-nodes-template-details.component';
export class MockedBuiltInTemplatesService {
public getTemplate(controller:Controller , template_id: string) {
public getTemplate(controller: Controller, template_id: string) {
return of({ ports_mapping: [] } as CloudTemplate);
}
public saveTemplate(controller:Controller , cloudTemplate: CloudTemplate) {
public saveTemplate(controller: Controller, cloudTemplate: CloudTemplate) {
return of(cloudTemplate);
}
}

View File

@ -1,12 +1,12 @@
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { PortsMappingEntity } from '../../../../../models/ethernetHub/ports-mapping-enity';
import { Controller } from '../../../../../models/controller';
import { CloudTemplate } from '../../../../../models/templates/cloud-template';
import { BuiltInTemplatesConfigurationService } from '../../../../../services/built-in-templates-configuration.service';
import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service';
import { ControllerService } from '../../../../../services/controller.service';
import { ToasterService } from '../../../../../services/toaster.service';
import { PortsMappingEntity } from '@models/ethernetHub/ports-mapping-enity';
import { Controller } from '@models/controller';
import { CloudTemplate } from '@models/templates/cloud-template';
import { BuiltInTemplatesConfigurationService } from '@services/built-in-templates-configuration.service';
import { BuiltInTemplatesService } from '@services/built-in-templates.service';
import { ControllerService } from '@services/controller.service';
import { ToasterService } from '@services/toaster.service';
@Component({
selector: 'app-cloud-nodes-template-details',
@ -14,7 +14,7 @@ import { ToasterService } from '../../../../../services/toaster.service';
styleUrls: ['../../../preferences.component.scss'],
})
export class CloudNodesTemplateDetailsComponent implements OnInit {
controller:Controller ;
controller: Controller;
cloudNodeTemplate: CloudTemplate;
isSymbolSelectionOpened: boolean = false;
@ -49,7 +49,7 @@ export class CloudNodesTemplateDetailsComponent implements OnInit {
ngOnInit() {
const controller_id = this.route.snapshot.paramMap.get('controller_id');
const template_id = this.route.snapshot.paramMap.get('template_id');
this.controllerService.get(parseInt(controller_id, 10)).then((controller:Controller ) => {
this.controllerService.get(parseInt(controller_id, 10)).then((controller: Controller ) => {
this.controller = controller;
this.getConfiguration();

View File

@ -9,16 +9,16 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ActivatedRoute } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { Controller } from '../../../../../models/controller';
import { CloudTemplate } from '../../../../../models/templates/cloud-template';
import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service';
import { ControllerService } from '../../../../../services/controller.service';
import { MockedControllerService } from '../../../../../services/controller.service.spec';
import { Controller } from '@models/controller';
import { CloudTemplate } from '@models/templates/cloud-template';
import { BuiltInTemplatesService } from '@services/built-in-templates.service';
import { ControllerService } from '@services/controller.service';
import { MockedControllerService } from '@services/controller.service.spec';
import { MockedActivatedRoute } from '../../../preferences.component.spec';
import { CloudNodesTemplatesComponent } from './cloud-nodes-templates.component';
export class MockedBuiltInTemplatesService {
public getTemplates(controller:Controller ) {
public getTemplates(controller: Controller ) {
return of([{} as CloudTemplate]);
}
}

View File

@ -1,9 +1,9 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Controller } from '../../../../../models/controller';
import { CloudTemplate } from '../../../../../models/templates/cloud-template';
import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service';
import { ControllerService } from '../../../../../services/controller.service';
import { Controller } from '@models/controller';
import { CloudTemplate } from '@models/templates/cloud-template';
import { BuiltInTemplatesService } from '@services/built-in-templates.service';
import { ControllerService } from '@services/controller.service';
import { DeleteTemplateComponent } from '../../../common/delete-template-component/delete-template.component';
@Component({
@ -12,7 +12,7 @@ import { DeleteTemplateComponent } from '../../../common/delete-template-compone
styleUrls: ['./cloud-nodes-templates.component.scss', '../../../preferences.component.scss'],
})
export class CloudNodesTemplatesComponent implements OnInit {
controller:Controller ;
controller: Controller;
cloudNodesTemplates: CloudTemplate[] = [];
@ViewChild(DeleteTemplateComponent) deleteComponent: DeleteTemplateComponent;
@ -24,7 +24,7 @@ export class CloudNodesTemplatesComponent implements OnInit {
ngOnInit() {
const controller_id = this.route.snapshot.paramMap.get('controller_id');
this.controllerService.get(parseInt(controller_id, 10)).then((controller:Controller ) => {
this.controllerService.get(parseInt(controller_id, 10)).then((controller: Controller ) => {
this.controller = controller;
this.getTemplates();
});

View File

@ -10,21 +10,21 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ActivatedRoute } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { Controller } from '../../../../../models/controller';
import { EthernetHubTemplate } from '../../../../../models/templates/ethernet-hub-template';
import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service';
import { ComputeService } from '../../../../../services/compute.service';
import { ControllerService } from '../../../../../services/controller.service';
import { MockedControllerService } from '../../../../../services/controller.service.spec';
import { TemplateMocksService } from '../../../../../services/template-mocks.service';
import { ToasterService } from '../../../../../services/toaster.service';
import { MockedToasterService } from '../../../../../services/toaster.service.spec';
import { Controller } from '@models/controller';
import { EthernetHubTemplate } from '@models/templates/ethernet-hub-template';
import { BuiltInTemplatesService } from '@services/built-in-templates.service';
import { ComputeService } from '@services/compute.service';
import { ControllerService } from '@services/controller.service';
import { MockedControllerService } from '@services/controller.service.spec';
import { TemplateMocksService } from '@services/template-mocks.service';
import { ToasterService } from '@services/toaster.service';
import { MockedToasterService } from '@services/toaster.service.spec';
import { MockedComputeService } from '../../../../preferences/vpcs/add-vpcs-template/add-vpcs-template.component.spec';
import { MockedActivatedRoute } from '../../../preferences.component.spec';
import { EthernetHubsAddTemplateComponent } from './ethernet-hubs-add-template.component';
export class MockedBuiltInTemplatesService {
public addTemplate(controller:Controller , ethernetHubTemplate: EthernetHubTemplate) {
public addTemplate(controller: Controller, ethernetHubTemplate: EthernetHubTemplate) {
return of(ethernetHubTemplate);
}
}
@ -83,7 +83,7 @@ describe('EthernetHubsAddTemplateComponent', () => {
it('should call add template', () => {
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetHubTemplate));
component.templateName = 'sample name';
component.controller = { id: 1 } as Controller ;
component.controller = { id: 1 } as Controller;
component.formGroup.controls['templateName'].setValue('template name');
component.formGroup.controls['numberOfPorts'].setValue('1');
@ -96,7 +96,7 @@ describe('EthernetHubsAddTemplateComponent', () => {
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetHubTemplate));
spyOn(mockedToasterService, 'error');
component.templateName = '';
component.controller = { id: 1 } as Controller ;
component.controller = { id: 1 } as Controller;
component.addTemplate();
@ -108,7 +108,7 @@ describe('EthernetHubsAddTemplateComponent', () => {
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetHubTemplate));
spyOn(mockedToasterService, 'error');
component.templateName = 'sample name';
component.controller = { id: 1 } as Controller ;
component.controller = { id: 1 } as Controller;
component.addTemplate();

Some files were not shown because too many files have changed in this diff Show More