diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 00752519..4a8a6c31 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,293 +1,293 @@ /* tslint:disable */ /* tslint:disable:max-line-length */ -import { DragDropModule } from '@angular/cdk/drag-drop'; -import { OverlayModule } from '@angular/cdk/overlay'; -import { CdkTableModule } from '@angular/cdk/table'; -import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; -import { ErrorHandler, NgModule } from '@angular/core'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { BrowserModule, Title } from '@angular/platform-browser'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { DragAndDropModule } from 'angular-draggable-droppable'; -import { ResizableModule } from 'angular-resizable-element'; -import { D3Service } from 'd3-ng2-service'; -import { NgCircleProgressModule } from 'ng-circle-progress'; -import { FileUploadModule } from 'ng2-file-upload'; -import { NgxChildProcessModule } from 'ngx-childprocess'; -import { NgxElectronModule } from 'ngx-electron'; -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; -import { CartographyModule } from './cartography/cartography.module'; -import { DrawingsDataSource } from './cartography/datasources/drawings-datasource'; -import { LinksDataSource } from './cartography/datasources/links-datasource'; -import { NodesDataSource } from './cartography/datasources/nodes-datasource'; -import { SymbolsDataSource } from './cartography/datasources/symbols-datasource'; -import { InRectangleHelper } from './cartography/helpers/in-rectangle-helper'; -import { SelectionManager } from './cartography/managers/selection-manager'; -import { ToasterErrorHandler } from './common/error-handlers/toaster-error-handler'; -import { ProgressDialogComponent } from './common/progress-dialog/progress-dialog.component'; -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 { BundledServerFinderComponent } from './components/bundled-server-finder/bundled-server-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 { 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 {DragDropModule} from '@angular/cdk/drag-drop'; +import {OverlayModule} from '@angular/cdk/overlay'; +import {CdkTableModule} from '@angular/cdk/table'; +import {HttpClientModule, HTTP_INTERCEPTORS} from '@angular/common/http'; +import {ErrorHandler, NgModule} from '@angular/core'; +import {FormsModule, ReactiveFormsModule} from '@angular/forms'; +import {MatSidenavModule} from '@angular/material/sidenav'; +import {BrowserModule, Title} from '@angular/platform-browser'; +import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; +import {DragAndDropModule} from 'angular-draggable-droppable'; +import {ResizableModule} from 'angular-resizable-element'; +import {D3Service} from 'd3-ng2-service'; +import {NgCircleProgressModule} from 'ng-circle-progress'; +import {FileUploadModule} from 'ng2-file-upload'; +import {NgxChildProcessModule} from 'ngx-childprocess'; +import {NgxElectronModule} from 'ngx-electron'; +import {AppRoutingModule} from './app-routing.module'; +import {AppComponent} from './app.component'; +import {CartographyModule} from './cartography/cartography.module'; +import {DrawingsDataSource} from './cartography/datasources/drawings-datasource'; +import {LinksDataSource} from './cartography/datasources/links-datasource'; +import {NodesDataSource} from './cartography/datasources/nodes-datasource'; +import {SymbolsDataSource} from './cartography/datasources/symbols-datasource'; +import {InRectangleHelper} from './cartography/helpers/in-rectangle-helper'; +import {SelectionManager} from './cartography/managers/selection-manager'; +import {ToasterErrorHandler} from './common/error-handlers/toaster-error-handler'; +import {ProgressDialogComponent} from './common/progress-dialog/progress-dialog.component'; +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 {BundledServerFinderComponent} from './components/bundled-server-finder/bundled-server-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 {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 { 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 { AddServerDialogComponent } from './components/servers/add-server-dialog/add-server-dialog.component'; -import { ServerDiscoveryComponent } from './components/servers/server-discovery/server-discovery.component'; -import { ServersComponent } from './components/servers/servers.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 { ServerResolve } from './resolvers/server-resolve'; -import { ApplianceService } from './services/appliances.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 { HttpServer, ServerErrorHandler } from './services/http-server.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 { ServerManagementService } from './services/server-management.service'; -import { ServerSettingsService } from './services/server-settings.service'; -import { ServerDatabase } from './services/server.database'; -import { ServerService } from './services/server.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 { 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 { 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 {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 {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 {AddServerDialogComponent} from './components/servers/add-server-dialog/add-server-dialog.component'; +import {ServerDiscoveryComponent} from './components/servers/server-discovery/server-discovery.component'; +import {ServersComponent} from './components/servers/servers.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 {ServerResolve} from './resolvers/server-resolve'; +import {ApplianceService} from './services/appliances.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 {HttpServer, ServerErrorHandler} from './services/http-server.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 {ServerManagementService} from './services/server-management.service'; +import {ServerSettingsService} from './services/server-settings.service'; +import {ServerDatabase} from './services/server.database'; +import {ServerService} from './services/server.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 {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 {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 {MatCheckboxModule} from "@angular/material/checkbox"; import { RoleManagementComponent } from './components/role-management/role-management.component'; import { RoleFilterPipe } from './components/role-management/role-filter.pipe'; @@ -300,6 +300,9 @@ import { PermissionEditorValidateDialogComponent } from './components/role-manag import { PermissionsManagementComponent } from './components/permissions-management/permissions-management.component'; import { PermissionEditLineComponent } from '@components/permissions-management/permission-edit-line/permission-edit-line.component'; import {MatSlideToggleModule} from '@angular/material/slide-toggle'; +import {MatAutocompleteModule} from "@angular/material/autocomplete"; +import {PathAutoCompleteComponent} from './components/permissions-management/add-permission-line/path-auto-complete/path-auto-complete.component'; +import {FilterCompletePipe} from './components/permissions-management/add-permission-line/path-auto-complete/filter-complete.pipe'; import { AddPermissionLineComponent } from './components/permissions-management/add-permission-line/add-permission-line.component'; import { MethodButtonComponent } from './components/permissions-management/method-button/method-button.component'; import { ActionButtonComponent } from './components/permissions-management/action-button/action-button.component'; @@ -523,7 +526,9 @@ import {MatFormFieldModule} from "@angular/material/form-field"; AddPermissionLineComponent, MethodButtonComponent, ActionButtonComponent, - DeletePermissionDialogComponent + DeletePermissionDialogComponent, + PathAutoCompleteComponent, + FilterCompletePipe ], imports: [ BrowserModule, @@ -537,21 +542,22 @@ import {MatFormFieldModule} from "@angular/material/form-field"; NgxElectronModule, FileUploadModule, MatSidenavModule, + MatFormFieldModule, ResizableModule, DragAndDropModule, DragDropModule, NgxChildProcessModule, - MatFormFieldModule, MATERIAL_IMPORTS, NgCircleProgressModule.forRoot(), OverlayModule, MatSlideToggleModule, MatCheckboxModule, + MatAutocompleteModule, ], providers: [ SettingsService, - { provide: ErrorHandler, useClass: ToasterErrorHandler }, - { provide: HTTP_INTERCEPTORS, useClass: HttpRequestsInterceptor, multi: true }, + {provide: ErrorHandler, useClass: ToasterErrorHandler}, + {provide: HTTP_INTERCEPTORS, useClass: HttpRequestsInterceptor, multi: true}, D3Service, VersionService, ProjectService, diff --git a/src/app/components/permissions-management/add-permission-line/add-permission-line.component.html b/src/app/components/permissions-management/add-permission-line/add-permission-line.component.html index 2a4a1032..219ebc2a 100644 --- a/src/app/components/permissions-management/add-permission-line/add-permission-line.component.html +++ b/src/app/components/permissions-management/add-permission-line/add-permission-line.component.html @@ -1,19 +1,48 @@ - - Type - - {{type}} - - - - - - {{elt.name ? elt.name : elt.filename}} - - - - - +
+
+
+
+
+ +
+
+ +
+ +
+
+ + + +
+
+
+
+ + +
+
+
+ +
+ +
+
+
diff --git a/src/app/components/permissions-management/add-permission-line/add-permission-line.component.scss b/src/app/components/permissions-management/add-permission-line/add-permission-line.component.scss index e69de29b..aed624da 100644 --- a/src/app/components/permissions-management/add-permission-line/add-permission-line.component.scss +++ b/src/app/components/permissions-management/add-permission-line/add-permission-line.component.scss @@ -0,0 +1,49 @@ +.box-border { + width: 100%; + margin-top: 20px; + border-bottom: 1px solid; +} + +.edit-mode { + display: flex; + flex-direction: row; + justify-content: flex-end; +} + +.information-box { + margin-left: 10px; + width: 100%; +} + +.information-box > div { + margin-bottom: 10px; +} + +.methods { + display: flex; + flex-direction: row; + align-items: center; +} + +.button-box { + display: flex; + flex-direction: column; + justify-content: space-around; +} + +.description { + width: 100%; + margin-left: 10px; + margin-right: 10px; +} + +.description > mat-form-field { + width: 100%; +} + +.not-edit { + display: flex; + flex-direction: row; + justify-content: flex-end; + align-items: center; +} diff --git a/src/app/components/permissions-management/add-permission-line/add-permission-line.component.ts b/src/app/components/permissions-management/add-permission-line/add-permission-line.component.ts index 1d4e58df..426e0b21 100644 --- a/src/app/components/permissions-management/add-permission-line/add-permission-line.component.ts +++ b/src/app/components/permissions-management/add-permission-line/add-permission-line.component.ts @@ -10,11 +10,12 @@ * * Author: Sylvain MATHIEU, Elise LEBEAU */ -import {Component, Input, OnInit, Output} from '@angular/core'; -import {ProjectService} from "@services/project.service"; +import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; import {Server} from "@models/server"; -import {ComputeService} from "@services/compute.service"; -import EventEmitter from "events"; +import {ApiInformationService} from "@services/api-information.service"; +import {Methods, Permission, PermissionActions} from "@models/api/permission"; +import {PermissionsService} from "@services/permissions.service"; +import {ToasterService} from "@services/toaster.service"; @Component({ selector: 'app-add-permission-line', @@ -23,51 +24,56 @@ import EventEmitter from "events"; }) export class AddPermissionLineComponent implements OnInit { - objectTypes = ['projects', 'images', 'templates', 'computes'] - elements = []; - selectedType = 'projects'; @Input() server: Server; + @Output() addPermissionEvent = new EventEmitter(); + permission: Permission = { + action: PermissionActions.ALLOW, + description: "", + methods: [], + path: "/", + }; + edit = false; - @Output() addPermissionEvent = new EventEmitter(); + constructor(public apiInformation: ApiInformationService, + private permissionService: PermissionsService, + private toasterService: ToasterService) { - constructor(private projectService: ProjectService, - private computeService: ComputeService) { } + } ngOnInit(): void { - this.projectService.list(this.server) - .subscribe(elts => { - this.elements = elts; - }) + } - changeType(value) { - console.log(value); - this.selectedType = value; - switch (this.selectedType) { - case 'projects': - this.projectService.list(this.server) - .subscribe(elts => { - this.elements = elts; - }) - break; - case 'computes': - this.computeService.getComputes(this.server) - .subscribe(elts => { - this.elements = elts; - }) - break; - default: - console.log("TODO"); - this.elements = []; + updateMethod(data: { name: Methods; enable: boolean }) { + const set = new Set(this.permission.methods); + if (data.enable) { + set.add(data.name); + } else { + set.delete(data.name); } + + this.permission.methods = Array.from(set); } - onSave() { - this.addPermissionEvent.emit('save'); + reset() { + this.permission = { + action: PermissionActions.ALLOW, + description: "", + methods: [], + path: "/", + }; + + this.edit = false; } - onCancel() { - this.addPermissionEvent.emit('cancel'); + save() { + this.permissionService.add(this.server, this.permission) + .subscribe(() => { + this.toasterService.success(`permission was created`); + this.reset(); + }, (error) => { + this.toasterService.error(error); + }); } } diff --git a/src/app/components/permissions-management/add-permission-line/path-auto-complete/filter-complete.pipe.spec.ts b/src/app/components/permissions-management/add-permission-line/path-auto-complete/filter-complete.pipe.spec.ts new file mode 100644 index 00000000..29e9810f --- /dev/null +++ b/src/app/components/permissions-management/add-permission-line/path-auto-complete/filter-complete.pipe.spec.ts @@ -0,0 +1,8 @@ +import { FilterCompletePipe } from './filter-complete.pipe'; + +describe('FilterCompletePipe', () => { + it('create an instance', () => { + const pipe = new FilterCompletePipe(); + expect(pipe).toBeTruthy(); + }); +}); diff --git a/src/app/components/permissions-management/add-permission-line/path-auto-complete/filter-complete.pipe.ts b/src/app/components/permissions-management/add-permission-line/path-auto-complete/filter-complete.pipe.ts new file mode 100644 index 00000000..94519809 --- /dev/null +++ b/src/app/components/permissions-management/add-permission-line/path-auto-complete/filter-complete.pipe.ts @@ -0,0 +1,17 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import {IFormatedList} from "@services/api-information.service"; + +@Pipe({ + name: 'filterComplete' +}) +export class FilterCompletePipe implements PipeTransform { + + transform(value: IFormatedList[], searchText: string): IFormatedList[] { + if (!searchText || searchText === '') { return value; } + + return value.filter((v) => { + return v.name.includes(searchText) || v.id.includes(searchText); + }); + } + +} diff --git a/src/app/components/permissions-management/add-permission-line/path-auto-complete/path-auto-complete.component.html b/src/app/components/permissions-management/add-permission-line/path-auto-complete/path-auto-complete.component.html new file mode 100644 index 00000000..dfae28fb --- /dev/null +++ b/src/app/components/permissions-management/add-permission-line/path-auto-complete/path-auto-complete.component.html @@ -0,0 +1,37 @@ +
+
Path: /
+
{{p}}/
+
+
+
+ + {{value}} + +
+
+ + + * + + {{data.name}} | + {{data.id}} + + +
+
+
+ cancel + add_circle_outline + check_circle +
+
+
diff --git a/src/app/components/permissions-management/add-permission-line/path-auto-complete/path-auto-complete.component.scss b/src/app/components/permissions-management/add-permission-line/path-auto-complete/path-auto-complete.component.scss new file mode 100644 index 00000000..2720f01e --- /dev/null +++ b/src/app/components/permissions-management/add-permission-line/path-auto-complete/path-auto-complete.component.scss @@ -0,0 +1,22 @@ +.path { + display: flex; + flex-direction: row; + justify-content: flex-start; +} + +mat-select { + width: 150px; +} + +.edit-area { + border: 1px solid; +} + +.command-button { + margin-left: 5px; +} + +.path-edit-line { + display: flex; + flex-direction: row; +} diff --git a/src/app/components/permissions-management/add-permission-line/path-auto-complete/path-auto-complete.component.spec.ts b/src/app/components/permissions-management/add-permission-line/path-auto-complete/path-auto-complete.component.spec.ts new file mode 100644 index 00000000..17452ee4 --- /dev/null +++ b/src/app/components/permissions-management/add-permission-line/path-auto-complete/path-auto-complete.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PathAutoCompleteComponent } from './path-auto-complete.component'; + +describe('PathAutoCompleteComponent', () => { + let component: PathAutoCompleteComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PathAutoCompleteComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PathAutoCompleteComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/permissions-management/add-permission-line/path-auto-complete/path-auto-complete.component.ts b/src/app/components/permissions-management/add-permission-line/path-auto-complete/path-auto-complete.component.ts new file mode 100644 index 00000000..5f9a8a2b --- /dev/null +++ b/src/app/components/permissions-management/add-permission-line/path-auto-complete/path-auto-complete.component.ts @@ -0,0 +1,74 @@ +import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; +import {ApiInformationService, IFormatedList} from "@services/api-information.service"; +import {Server} from "@models/server"; + +@Component({ + selector: 'app-path-auto-complete', + templateUrl: './path-auto-complete.component.html', + styleUrls: ['./path-auto-complete.component.scss'] +}) +export class PathAutoCompleteComponent implements OnInit { + + + @Output() update = new EventEmitter(); + @Input() server: Server; + path: string[] = []; + values: string[] = []; + private completeData: IFormatedList[]; + public mode: 'SELECT' | 'COMPLETE' | undefined; + completeField: string; + + constructor(private apiInformationService: ApiInformationService) { + + } + + updatePath(value: string) { + this.path.push(value); + this.update.emit(`/${this.path.join('/')}`); + } + + popPath() { + this.path.pop(); + this.update.emit(`/${this.path.join('/')}`); + } + + ngOnInit(): void { + } + + getNext() { + this.apiInformationService + .getPathNextElement(this.path) + .subscribe((next: string[]) => { + this.values = next; + this.mode = 'SELECT'; + }); + } + + removePrevious() { + if (this.mode) { + return this.mode = undefined; + } + if (this.path.length > 0) { + return this.popPath(); + } + } + + valueChanged(value: string) { + if (value.match(this.apiInformationService.bracketIdRegex)) { + this.apiInformationService.getListByObjectId(this.server, value) + .subscribe((data) => { + this.mode = 'COMPLETE'; + this.completeData = data; + }); + + } else { + this.updatePath(value); + this.mode = undefined; + } + } + + validComplete() { + this.updatePath(this.completeField); + this.mode = undefined; + } +} diff --git a/src/app/components/permissions-management/permissions-management.component.html b/src/app/components/permissions-management/permissions-management.component.html index c8f4fd7a..07049b82 100644 --- a/src/app/components/permissions-management/permissions-management.component.html +++ b/src/app/components/permissions-management/permissions-management.component.html @@ -1,15 +1,13 @@
-
-
- -
+
+
-
- +
= new ReplaySubject(1); - constructor(private httpClient: HttpClient) { + private allowed = ['projects', 'images', 'templates', 'computes', 'symbols', 'notifications']; + private data: ReplaySubject = new ReplaySubject(1); + private objs: ReplaySubject = new ReplaySubject(1); + public readonly bracketIdRegex = new RegExp("\{(.*?)\}"); + public readonly finalBracketIdRegex = new RegExp("\{(.*?)\}$"); + + constructor(private httpClient: HttpClient, + private httpServer: HttpServer) { this.loadLocalInformation(); this.data.subscribe((data) => { localStorage.setItem('api-definition', JSON.stringify(data)); }); + this.objs.subscribe((data) => { + localStorage.setItem('api-definition-objs', JSON.stringify(data)); + }); + this.httpClient .get(`https://apiv3.gns3.net/openapi.json`) .subscribe((openapi: any) => { - const data = this.apiModelAdapter(openapi); + const objs = this.apiObjectModelAdapter(openapi); + const data = this.apiPathModelAdapter(openapi); this.data.next(data); + this.objs.next(objs); }); } - private apiModelAdapter(openapi: any): IPathDict[] { + private apiObjectModelAdapter(openapi: any): IApiObject[] { + function haveGetMethod(path: string): boolean { + const obj = openapi.paths[path]; + if (obj) { + const methods = Object.keys(obj); + return methods.includes("get"); + } else { + return false; + } + } + + function extractId(originalPath: string): IApiObject { + const d = originalPath.split('/'); + + const name = d.pop(); + const path = d.join('/'); + + return {name, path}; + } + + const keys = Object.keys(openapi.paths); + return keys + .filter((path: string) => path.match(this.finalBracketIdRegex)) + .filter(haveGetMethod) + .map(extractId) + .filter((object) => haveGetMethod(object.path)); + } + + private apiPathModelAdapter(openapi: any): IPathDict[] { const keys = Object.keys(openapi.paths); return keys .map(path => { const subPaths = path.split('/').filter(elem => !(elem === '' || elem === 'v3')); return {originalPath: path, path: subPaths.join('/'), subPaths}; }) + .filter(d => this.allowed.includes(d.subPaths[0])) .map(path => { //FIXME // @ts-ignore @@ -69,7 +127,6 @@ export class ApiInformationService { .pipe( map((data: IPathDict[]) => { const availableMethods = new Set(); - data.forEach((p: IPathDict) => { p.methods.forEach(method => availableMethods.add(method)); }); @@ -83,24 +140,24 @@ export class ApiInformationService { .asObservable() .pipe( map((data) => { + const splinted = path + .split('/') + .filter(elem => !(elem === '' || elem === 'v3')); - const splinted = path.split('/').filter(elem => !(elem === '' || elem === 'v3')); let remains = data; splinted.forEach((value, index) => { if (value === '*') { - return remains; + return; } - remains = remains.filter((val => { - if (!val.subPaths[index]) { - return false; - } - if (val.subPaths[index].includes('{')) { - return true; - } - return val.subPaths[index] === value; - })); - }); + let matchUrl = remains.filter(val => val.subPaths[index]?.includes(value)); + if (matchUrl.length === 0) { + matchUrl = remains.filter(val => val.subPaths[index]?.match(this.bracketIdRegex)); + } + + remains = matchUrl; + + }); return remains; }) ); @@ -111,5 +168,63 @@ export class ApiInformationService { if (data) { this.data.next(data); } + const obj = JSON.parse(localStorage.getItem('api-definition-objs')); + if (obj) { + this.objs.next(obj); + } + } + + getPathNextElement(path: string[]): Observable { + + return this.getPath(path.join('/')) + .pipe(map((paths: IPathDict[]) => { + const set = new Set(); + paths.forEach((p) => { + if (p.subPaths[path.length]) { + set.add(p.subPaths[path.length]); + } + }); + + return Array.from(set); + })); + } + + getListByObjectId(server: Server, value: string) { + + function findElement(data: IApiObject[]): IApiObject { + const elem = data.find(d => d.name === value); + if (!elem) { + throw new Error('entry not found'); + } + return elem; + } + + return this.objs.pipe( + map(findElement), + switchMap(elem => { + const url = `${server.protocol}//${server.host}:${server.port}${elem.path}`; + return this.httpClient.get(url, {headers: {Authorization: `Bearer ${server.authToken}`}}); + } + ), + map(response => { + + if (response.length === 0) { + return []; + } + + const keys = Object.keys(response[0]); + const idKey = keys.find(k => k.match(/_id$|filename/)); + const nameKey = keys.find(k => k.match(/name/)); + + return response.map(o => { + return { + id: o[idKey], + name: o[nameKey] + }; + }); + })); + } } + +