{"version":3,"file":"c8y-ngx-components-protocol-opcua.mjs","sources":["../../protocol-opcua/address-space.service.ts","../../protocol-opcua/opcua-address-space-detail.component.ts","../../protocol-opcua/opcua-address-space-detail.component.html","../../protocol-opcua/opcuaService.ts","../../protocol-opcua/opcua-agent.guard.ts","../../protocol-opcua/opcua-device-protocol-browse-path-validation.directive.ts","../../protocol-opcua/dynamic-data-source.ts","../../protocol-opcua/opcua-address-space-tree.component.ts","../../protocol-opcua/opcua-address-space-tree.component.html","../../protocol-opcua/opcua-address-space.component.ts","../../protocol-opcua/opcua-address-space.component.html","../../protocol-opcua/opcua-auto-apply-settings.component.ts","../../protocol-opcua/opcua-auto-apply-settings.component.html","../../protocol-opcua/opcua-device-protocol-data-reporting.component.ts","../../protocol-opcua/opcua-device-protocol-data-reporting.html","../../protocol-opcua/opcua-device-protocol-description.component.ts","../../protocol-opcua/opcua-device-protocol-description.html","../../protocol-opcua/mappings/custom-action-mapping.ts","../../protocol-opcua/mappings/default-mappings.ts","../../protocol-opcua/opcua-device-protocol-object-mapping-status-icon.component.ts","../../protocol-opcua/opcua-device-protocol-mapping.component.ts","../../protocol-opcua/opcua-device-protocol-mapping.html","../../protocol-opcua/opcua-device-protocol-detail.component.ts","../../protocol-opcua/opcua-device-protocol-detail.html","../../protocol-opcua/opcua-microservice.guard.ts","../../protocol-opcua/opcua-server.interface.ts","../../protocol-opcua/opcua-server-config.component.ts","../../protocol-opcua/opcua-server-config.component.html","../../protocol-opcua/opcua-server-list.component.ts","../../protocol-opcua/opcua-server-list.component.html","../../protocol-opcua/opcua-server.guard.ts","../../protocol-opcua/opcua-servers.component.ts","../../protocol-opcua/opcua-servers.component.html","../../protocol-opcua/opcua-protocol.module.ts","../../protocol-opcua/ng1/downgraded.components.ts","../../protocol-opcua/ng1/index.ts","../../protocol-opcua/c8y-ngx-components-protocol-opcua.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { FetchClient, IFetchOptions } from '@c8y/client';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable()\nexport class AddressSpaceService {\n  private nodeNavigationData$: BehaviorSubject<NodeNavigationData>;\n  private client: FetchClient;\n  private microserviceUrl: string;\n  private header: any;\n\n  constructor(fetchClient: FetchClient) {\n    this.client = fetchClient;\n    this.microserviceUrl = '/service/opcua-mgmt-service/address-space';\n    this.header = { 'Content-Type': 'application/json' };\n    this.nodeNavigationData$ = new BehaviorSubject<NodeNavigationData>({\n      node: undefined,\n      selectedAncestorIds: []\n    });\n  }\n\n  resetTreeToRootNode() {\n    this.triggerNodeToOpen({ node: undefined, selectedAncestorIds: [] });\n  }\n\n  triggerNodeToOpen(nodeNavigationData: NodeNavigationData) {\n    this.nodeNavigationData$.next(nodeNavigationData);\n  }\n\n  getNodeNavData$(): Observable<NodeNavigationData> {\n    return this.nodeNavigationData$.asObservable();\n  }\n\n  getNode(serverId: string, nodeId?: string) {\n    if (serverId && serverId.length > 0) {\n      if (nodeId && nodeId.length > 0) {\n        return this.getNodeById(serverId, nodeId);\n      }\n      return this.getRootNode(serverId);\n    }\n  }\n\n  getRootNode(serverId: string) {\n    if (serverId && serverId.length > 0) {\n      const options: IFetchOptions = {\n        method: 'GET',\n        headers: this.header\n      };\n      return this.client.fetch(`${this.microserviceUrl}/${serverId}`, options);\n    }\n  }\n\n  getNodeById(serverId: string, nodeId: string) {\n    if (serverId && nodeId && serverId.length > 0 && nodeId.length > 0) {\n      const options: IFetchOptions = {\n        method: 'GET',\n        headers: this.header\n      };\n      const param = encodeURIComponent(nodeId);\n      return this.client.fetch(`${this.microserviceUrl}/${serverId}?nodeId=${param}`, options);\n    }\n  }\n\n  getChildrenOf(node: AddressSpaceNode, serverId: string) {\n    if (serverId && node.nodeId && serverId.length > 0 && node.nodeId.length > 0) {\n      const options: IFetchOptions = {\n        method: 'GET',\n        headers: this.header\n      };\n      const param = encodeURIComponent(node.nodeId);\n      return this.client.fetch(\n        `${this.microserviceUrl}/${serverId}/children?nodeId=${param}`,\n        options\n      );\n    }\n  }\n\n  childrenAvailable(nodeReferences: AdressSpaceNodeReference[]): boolean {\n    if (!nodeReferences || nodeReferences.length === 0) {\n      return false;\n    }\n    return nodeReferences.some(ref => !ref.inverse && ref.hierarchical);\n  }\n\n  async getSearchedNodes(searchKey: string, serverId: string) {\n    const url = `service/opcua-mgmt-service/search/${serverId}/`;\n    const options: IFetchOptions = {\n      headers: this.header,\n      params: {\n        searchString: '*' + searchKey + '*'\n      }\n    };\n    const res = await this.client.fetch(url, options);\n    return res.json();\n  }\n\n  getIcon(nodeClassName: string) {\n    const iconList = {\n      Object: 'cube',\n      Variable: 'th-list',\n      Method: 'random',\n      View: 'window-maximize',\n      ObjectType: 'c8y-group',\n      VariableType: 'c8y-group',\n      ReferenceType: 'c8y-group',\n      DataType: 'c8y-group'\n    };\n    return iconList[nodeClassName] || 'circle';\n  }\n}\n\nexport interface AddressSpaceNode {\n  nodeId: string;\n  currentlyLoadingChildren?: boolean;\n  nodeClass?: number;\n  nodeClassName?: string;\n  browseName?: string;\n  displayName?: string;\n  description?: any;\n  references?: AdressSpaceNodeReference[];\n  ancestorNodeIds?: [string[]];\n  children: AddressSpaceNode[];\n  expanded: boolean;\n  absolutePaths: [string[]];\n  relativePath?: string[];\n  parentNode?: AddressSpaceNode;\n}\n\nexport interface AdressSpaceNodeReference {\n  referenceId: string;\n  targetId: string;\n  inverse: boolean;\n  hierarchical: boolean;\n}\n\nexport interface SearchedNode {\n  absolutePath: string[];\n  ancestorNodeIds: [string[]];\n  displayName: string;\n  nodeClassName: string;\n  nodeId: string;\n}\n\nexport interface NodeNavigationData {\n  node: AddressSpaceNode;\n  selectedAncestorIds: string[];\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { AddressSpaceNode, AddressSpaceService, NodeNavigationData } from './address-space.service';\nimport { omit } from 'lodash-es';\nimport { NgClass, NgFor, NgIf, JsonPipe, KeyValuePipe } from '@angular/common';\nimport { C8yTranslatePipe } from '@c8y/ngx-components';\n\n@Component({\n  selector: 'opcua-address-space-detail',\n  templateUrl: './opcua-address-space-detail.component.html',\n  imports: [NgClass, NgFor, NgIf, C8yTranslatePipe, JsonPipe, KeyValuePipe]\n})\nexport class OpcuaAddressSpaceDetailComponent {\n  @Input() set node(n) {\n    this._node = n;\n    if (n) {\n      this.setNodeData(n);\n    } else {\n      // remove details from current view\n      this.showDetails = false;\n    }\n  }\n  nodeDataAttr: Map<string, string>;\n  nodeDataRef: object[];\n  selected = false;\n  showDetails = false;\n\n  @Output() toggleAttrDetail: EventEmitter<AddressSpaceNode> = new EventEmitter<AddressSpaceNode>();\n\n  private _node: AddressSpaceNode;\n\n  constructor(private addressSpaceService: AddressSpaceService) {}\n  setNodeData(nodeData) {\n    this.showDetails = true;\n    const { attributes, references } = nodeData;\n    this.nodeDataRef = references;\n    const omitList = [\n      'attributes',\n      'references',\n      'children',\n      'currentlyLoadingChildren',\n      'expanded',\n      'browsePath',\n      'relativePath',\n      'parentNode'\n    ];\n    this.nodeDataAttr = Object.assign({}, attributes, omit(nodeData, omitList));\n  }\n\n  toggleDetail(node) {\n    this.showDetails = !this.showDetails;\n    this.toggleAttrDetail.emit(node);\n  }\n\n  navigateTo(ancestors: string[]) {\n    const nodeNavData: NodeNavigationData = {\n      node: this._node,\n      selectedAncestorIds: ancestors\n    };\n\n    this.toggleDetail(this._node);\n    this.addressSpaceService.triggerNodeToOpen(nodeNavData);\n  }\n}\n","<div\n  class=\"card m-b-4 split-row-2 animated fast pointer-all\"\n  [ngClass]=\"{ fadeInRightBig: showDetails, fadeOutRightBig: !showDetails }\"\n>\n  <div class=\"card-header separator\">\n    <h4>{{ 'Attributes' | translate }}</h4>\n    <button\n      class=\"close m-l-auto visible-sm visible-xs\"\n      title=\"{{ 'Close' | translate }}\"\n      (click)=\"toggleDetail(nodeDataAttr)\"\n    >\n      &times;\n    </button>\n  </div>\n  <div\n    class=\"card-inner-scroll\"\n    tabindex=\"0\"\n  >\n    <div\n      class=\"card-block\"\n      tabindex=\"-1\"\n    >\n      <table class=\"table table-striped table-condensed\">\n        <colgroup>\n          <col width=\"50%\" />\n          <col width=\"50%\" />\n        </colgroup>\n        <thead>\n          <tr>\n            <th>{{ 'Attribute' | translate }}</th>\n            <th>{{ 'Value' | translate }}</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr *ngFor=\"let item of nodeDataAttr | keyvalue\">\n            <td>{{ item.key }}</td>\n            <td\n              class=\"text-break-word\"\n              *ngIf=\"item.key === 'absolutePaths'\"\n            >\n              {{ item.value | json }}\n            </td>\n            <td\n              class=\"text-break-word\"\n              *ngIf=\"item.key === 'ancestorNodeIds'\"\n            >\n              <a\n                *ngFor=\"let value of item.value\"\n                (click)=\"navigateTo(value)\"\n              >\n                {{ value | json }}\n              </a>\n            </td>\n            <td *ngIf=\"item.key !== 'absolutePaths' && item.key !== 'ancestorNodeIds'\">\n              {{ item.value }}\n            </td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n  </div>\n</div>\n<div\n  class=\"card split-row-2 animated fast pointer-all\"\n  style=\"height: calc(50% - 4px)\"\n  [ngClass]=\"{ fadeInRightBig: showDetails, fadeOutRightBig: !showDetails }\"\n>\n  <div class=\"card-header separator\">\n    <h4>{{ 'References' | translate }}</h4>\n  </div>\n  <div\n    class=\"card-inner-scroll\"\n    tabindex=\"0\"\n  >\n    <div\n      class=\"card-block\"\n      tabindex=\"-1\"\n    >\n      <table class=\"table table-striped table-condensed\">\n        <colgroup>\n          <col width=\"50%\" />\n          <col width=\"50%\" />\n        </colgroup>\n        <thead>\n          <tr>\n            <th>{{ 'Attribute' | translate }}</th>\n            <th>{{ 'Value' | translate }}</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr *ngFor=\"let item of nodeDataRef\">\n            <td>{{ item.referenceLabel }}</td>\n            <td class=\"text-break-word\">{{ item.targetLabel }}</td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n  </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n  FetchClient,\n  IFetchOptions,\n  IFetchResponse,\n  InventoryBinaryService,\n  InventoryService\n} from '@c8y/client';\nimport { AlertService } from '@c8y/ngx-components';\nimport { OpcuaServer } from './opcua-server.interface';\n\n@Injectable()\nexport class OpcuaService {\n  private binaryService: InventoryBinaryService;\n  private microserviceUrlDepr: string;\n  private microserviceUrl: string;\n  private deviceTypeProtocolUrl: string;\n  private header: any;\n\n  constructor(\n    private client: FetchClient,\n    private inventoryService: InventoryService,\n    private router: Router,\n    private alertService: AlertService\n  ) {\n    this.microserviceUrl = '/service/opcua-mgmt-service';\n    this.microserviceUrlDepr = '/service/opcua-mgmt-service/server';\n    this.deviceTypeProtocolUrl = '/service/opcua-mgmt-service/deviceTypes';\n    this.header = { 'Content-Type': 'application/json' };\n    this.binaryService = inventoryService.binary;\n  }\n  createServer(data: OpcuaServer) {\n    if (this.doesGatewayIdExist(data)) {\n      this.cleanUpPayload(data);\n      const options: IFetchOptions = {\n        method: 'POST',\n        headers: this.header,\n        body: JSON.stringify(data)\n      };\n      return this.client.fetch(`${this.microserviceUrlDepr}`, options);\n    }\n  }\n\n  async updateServer(server: OpcuaServer) {\n    if (this.doesGatewayIdExist(server) && this.doesIdExist(server)) {\n      this.cleanUpPayload(server);\n      const options: IFetchOptions = {\n        method: 'POST',\n        headers: this.header,\n        body: JSON.stringify(server)\n      };\n      const res = await this.client.fetch(`${this.microserviceUrlDepr}`, options);\n      let data;\n      try {\n        data = await res.json();\n      } catch (e) {\n        // nothing\n      }\n\n      if (res.status !== 200) {\n        this.alertService.addServerFailure({ data, res });\n      } else {\n        return data;\n      }\n    }\n  }\n\n  removeServer(data: OpcuaServer) {\n    if (this.doesGatewayIdExist(data) && this.doesIdExist(data)) {\n      const options: IFetchOptions = {\n        method: 'DELETE'\n      };\n      return this.client.fetch(`${this.microserviceUrlDepr}/${data.gatewayId}/${data.id}`, options);\n    }\n  }\n\n  getKeystore(binaryId: string) {\n    if (binaryId && binaryId.length > 0) {\n      return this.inventoryService.detail(binaryId);\n    }\n    return null;\n  }\n\n  uploadKeystore(file: File) {\n    if (file && file.size > 0) {\n      return this.binaryService.create(file);\n    }\n    return Promise.reject('Invalid file');\n  }\n\n  async updateKeystore(id: string, file: File) {\n    if (id && id.length > 0 && file && file.size > 0) {\n      const { res } = await this.removeKeystore(id);\n      if (res && res.status === 204) {\n        return this.uploadKeystore(file);\n      }\n    }\n    return Promise.reject('Invalid file');\n  }\n\n  removeKeystore(id: string) {\n    if (id && id.length > 0) {\n      return this.binaryService.delete(id);\n    }\n  }\n\n  getMoId() {\n    const currentUrl: string = this.router.routerState.snapshot.url;\n    const isDevice: boolean = new RegExp(/device\\/\\d+/).test(currentUrl);\n    if (isDevice) {\n      return currentUrl.match(/\\d+/)[0];\n    }\n    return '';\n  }\n\n  getId() {\n    const currentUrl: string = this.router.routerState.snapshot.url;\n    const isDeviceprotocol: boolean = new RegExp(/deviceprotocols/).test(currentUrl);\n    if (isDeviceprotocol && RegExp(/\\d+$/).test(currentUrl)) {\n      return currentUrl.match(/\\d+$/)[0];\n    }\n  }\n\n  async getDeviceProtocol(id: string) {\n    const options: IFetchOptions = {\n      method: 'GET',\n      headers: this.header\n    };\n    return this.client.fetch(`${this.deviceTypeProtocolUrl}/${id}`, options);\n  }\n\n  async updateDeviceProtocol(data) {\n    const options: IFetchOptions = {\n      method: 'PUT',\n      headers: this.header,\n      body: JSON.stringify(data)\n    };\n    return this.client.fetch(`${this.deviceTypeProtocolUrl}/${data.id}`, options);\n  }\n\n  async createDeviceProtocol(data) {\n    const options: IFetchOptions = {\n      method: 'POST',\n      headers: this.header,\n      body: JSON.stringify(data)\n    };\n    return this.client.fetch(`${this.deviceTypeProtocolUrl}`, options);\n  }\n\n  getServers(id: string) {\n    if (id && id.length > 0) {\n      const options: IFetchOptions = {\n        method: 'GET',\n        headers: this.header\n      };\n      return this.client.fetch(`${this.microserviceUrlDepr}/${id}`, options);\n    }\n  }\n\n  getServer(id: string): Promise<IFetchResponse> {\n    if (id && id.length > 0) {\n      const options: IFetchOptions = {\n        method: 'GET',\n        headers: this.header\n      };\n      return this.client\n        .fetch(`${this.microserviceUrl}/servers/${id}`, options)\n        .then(this.handleErrorStatusCodes);\n    }\n  }\n\n  /**\n   * Checks the response for errors and throws exceptions, otherwise returns the response as is.\n   *\n   * @param response The response from server.\n   *\n   * @returns If no errors are detected, it returns the same response.\n   *\n   * @throws If an error is detected, it throws `{ res, data }`, where `data` contains error details from server.\n   */\n\n  protected async handleErrorStatusCodes(response: IFetchResponse): Promise<IFetchResponse> {\n    if (response.status >= 400) {\n      let data = null;\n      try {\n        data = await response.json();\n      } catch (ex) {\n        try {\n          data = await response.text();\n        } catch (ex) {\n          // do nothing\n        }\n      }\n      throw { res: response, data };\n    }\n    return response;\n  }\n\n  private doesGatewayIdExist(data: OpcuaServer) {\n    return data && data.gatewayId && data.gatewayId.length > 0;\n  }\n\n  private doesIdExist(data: OpcuaServer) {\n    return data && data.id && data.id.length > 0 && data.id !== 'new';\n  }\n\n  private cleanUpPayload(data: OpcuaServer) {\n    if (data) {\n      if (data.id && data.id === 'new') {\n        delete data.id;\n      }\n      if (data.quickInfo) {\n        delete data.quickInfo;\n      }\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class OpcuaAgentGuard {\n  type = 'c8y_OPCUA_Device_Agent';\n  canActivate({ data }) {\n    const { contextData } = data;\n    return contextData && contextData.type === this.type;\n  }\n}\n","import { Directive, forwardRef, ElementRef, Input } from '@angular/core';\nimport { Validator, AbstractControl, NG_VALIDATORS } from '@angular/forms';\nimport { some, isEqual, isEmpty } from 'lodash-es';\n\n@Directive({\n  selector: '[c8yBrowsePathValidator][ngModel]',\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => OpcuaDeviceProtocolBrowsePathValidation),\n      multi: true\n    }\n  ]\n})\nexport class OpcuaDeviceProtocolBrowsePathValidation implements Validator {\n  @Input() getMappings: () => [];\n  @Input() model: any;\n\n  constructor(private el: ElementRef) {}\n\n  validate(control: AbstractControl): { [key: string]: any } {\n    if (control.value) {\n      if (!this.isValidJson(control.value)) {\n        return { invalidBrowsePathNotation: true };\n      } else {\n        if (this.isBrowsePathUnique(control.value)) {\n          return { browsePathNotUnique: true };\n        }\n      }\n    }\n    return null;\n  }\n\n  isValidJson(value) {\n    try {\n      const browsePath = JSON.parse(value);\n      return !isEmpty(browsePath);\n    } catch (error) {\n      return false;\n    }\n  }\n\n  toArray(str) {\n    return JSON.parse(str);\n  }\n\n  isBrowsePathUnique(value): boolean {\n    const mappings = this.getMappings();\n    const found = some(mappings, item => {\n      if (isEqual(item.browsePath, this.toArray(value)) && item.id !== this.model.id) {\n        return item;\n      }\n    });\n    return found ? true : false;\n  }\n}\n","import { BehaviorSubject, Observable, merge } from 'rxjs';\nimport { NestedTreeControl } from '@angular/cdk/tree';\nimport { CollectionViewer, SelectionChange } from '@angular/cdk/collections';\nimport { AddressSpaceService, AddressSpaceNode } from './address-space.service';\nimport { map } from 'rxjs/operators';\n\nexport class DynamicDataSource {\n  dataChange = new BehaviorSubject<AddressSpaceNode[]>([]);\n\n  get data(): AddressSpaceNode[] {\n    return this.dataChange.value;\n  }\n  set data(value: AddressSpaceNode[]) {\n    this.treeControl.dataNodes = value;\n    this.dataChange.next(value);\n  }\n\n  constructor(\n    public treeControl: NestedTreeControl<AddressSpaceNode>,\n    private addressSpaceService: AddressSpaceService,\n    private serverId: string\n  ) {\n    this.treeControl.isExpanded = (node: AddressSpaceNode) => node.expanded;\n  }\n\n  connect(collectionViewer: CollectionViewer): Observable<AddressSpaceNode[]> {\n    this.treeControl.expansionModel.changed.subscribe(\n      (change: SelectionChange<AddressSpaceNode>) => {\n        if (change.added || change.removed) {\n          this.handleTreeControl(change);\n        }\n      }\n    );\n    return merge(collectionViewer.viewChange, this.dataChange).pipe(map(() => this.data));\n  }\n\n  /** Handle expand/collapse behaviors */\n  handleTreeControl(change: SelectionChange<AddressSpaceNode>) {\n    if (change.added) {\n      change.added.forEach(node => this.toggleNode(node, true));\n    }\n    if (change.removed) {\n      change.removed\n        .slice()\n        .reverse()\n        .forEach(node => this.toggleNode(node, false));\n    }\n  }\n\n  /**\n   * Toggle the node, remove from display list\n   */\n  async toggleNode(addressSpaceNode: AddressSpaceNode, expand: boolean) {\n    if (!addressSpaceNode.children || addressSpaceNode.children.length === 0) {\n      addressSpaceNode.currentlyLoadingChildren = true;\n\n      const res = await this.addressSpaceService.getChildrenOf(addressSpaceNode, this.serverId);\n      const children = (await res.json()) as AddressSpaceNode[];\n\n      addressSpaceNode.children = children || [];\n      addressSpaceNode.children = addressSpaceNode.children.map((node: AddressSpaceNode) => {\n        node.parentNode = addressSpaceNode;\n        return node;\n      });\n      addressSpaceNode.currentlyLoadingChildren = false;\n\n      this.treeControl.expand(addressSpaceNode);\n    }\n\n    addressSpaceNode.expanded = expand && addressSpaceNode.children.length > 0;\n    this.refreshNestedTree(this.data);\n\n    return Promise.resolve(addressSpaceNode);\n  }\n  catch() {\n    // do nothing\n  }\n\n  private refreshNestedTree(treeData: AddressSpaceNode[]) {\n    // necessary to rerender tree, otherwise new nodes will not\n    // appear, but they are added to the list.\n    this.data = [];\n    this.dataChange.next(treeData);\n    this.triggerResize(); // to resize the modal window when creating a new device protocol\n  }\n\n  private triggerResize() {\n    setTimeout(() => {\n      try {\n        window.dispatchEvent(new Event('resize'));\n      } catch (error) {\n        // do nothing\n      }\n    }, 200);\n  }\n}\n","import {\n  NestedTreeControl,\n  CdkTree,\n  CdkTreeNodeDef,\n  CdkNestedTreeNode,\n  CdkTreeNodeToggle,\n  CdkTreeNodeOutlet\n} from '@angular/cdk/tree';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges\n} from '@angular/core';\nimport {\n  AlertService,\n  IconDirective,\n  LoadingComponent,\n  C8yTranslateDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { clone } from 'lodash';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { AddressSpaceNode, AddressSpaceService, NodeNavigationData } from './address-space.service';\nimport { DynamicDataSource } from './dynamic-data-source';\nimport { OpcuaService } from './opcuaService';\nimport { NgIf, NgClass } from '@angular/common';\n\n@Component({\n  selector: 'opcua-address-space-tree',\n  templateUrl: './opcua-address-space-tree.component.html',\n  imports: [\n    NgIf,\n    CdkTree,\n    CdkTreeNodeDef,\n    CdkNestedTreeNode,\n    NgClass,\n    IconDirective,\n    CdkTreeNodeToggle,\n    CdkTreeNodeOutlet,\n    LoadingComponent,\n    C8yTranslateDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class OpcuaAddressSpaceTreeComponent implements OnInit, OnDestroy, OnChanges {\n  @Input()\n  set moId(id: string) {\n    this._moId = id || undefined;\n  }\n\n  @Input() node;\n  @Input() focusEmitter: EventEmitter<AddressSpaceNode> = new EventEmitter<AddressSpaceNode>();\n  @Output() selectedNode: EventEmitter<AddressSpaceNode> = new EventEmitter<AddressSpaceNode>();\n  nestedTreeControl: NestedTreeControl<AddressSpaceNode>;\n  dataSource: DynamicDataSource = null;\n  focused: AddressSpaceNode;\n  loading = false;\n  subscriptionRef: Subscription;\n  nodeNavDataSubscription: Subscription;\n  private _moId: string;\n  private destroy$: Subject<void> = new Subject<void>();\n\n  constructor(\n    private addressSpaceService: AddressSpaceService,\n    private opcuaService: OpcuaService,\n    private alertService: AlertService\n  ) {}\n\n  getChildren = (node: AddressSpaceNode) => (node.expanded ? node.children : []);\n  hasChild = (_: number, _nodeData: AddressSpaceNode) =>\n    this.addressSpaceService.childrenAvailable(_nodeData.references);\n\n  ngOnInit() {\n    this.initializeDataSet();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (\n      changes.moId &&\n      changes.moId.previousValue &&\n      changes.moId.currentValue !== changes.moId.previousValue\n    ) {\n      this.initializeDataSet();\n    }\n  }\n\n  initializeDataSet() {\n    this.nodeNavDataSubscription = this.addressSpaceService\n      .getNodeNavData$()\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(nodeNavData => this.openNode(nodeNavData));\n    this.subscriptionRef = this.focusEmitter.subscribe(node => {\n      this.focused = this.isFocusedNode(node) ? undefined : node;\n    });\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n    // clean up the address-space-tree\n    this.addressSpaceService.resetTreeToRootNode();\n\n    if (this.nodeNavDataSubscription && !this.nodeNavDataSubscription.closed) {\n      this.nodeNavDataSubscription.unsubscribe();\n    }\n\n    if (this.subscriptionRef && !this.subscriptionRef.closed) {\n      this.subscriptionRef.unsubscribe();\n    }\n  }\n\n  async openNode(nodeNavData: NodeNavigationData) {\n    const { node, selectedAncestorIds } = nodeNavData;\n    let nodeId;\n\n    // We just set the nodeId when the selectedAncestorIds variable an empty array.\n    // If selectedAncestorIds contain any id we assume that the tree should be travsersed beginning\n    // from the root node.\n    if (node && node.nodeId && selectedAncestorIds && selectedAncestorIds.length === 0) {\n      nodeId = node.nodeId;\n    }\n    // Always recreate the tree when routing to a specific nested node,\n    // because previous modifications to the tree-structure could cause errors\n    // while traversing with 'old' tree-data\n    // -----------------\n    // setupTree is able to handle nodeId = undefined\n    await this.setupTree(nodeId);\n\n    if (!selectedAncestorIds || selectedAncestorIds.length === 0) {\n      return;\n    }\n\n    if (nodeNavData && this.dataSource) {\n      const clonedAncestors = clone(selectedAncestorIds);\n      clonedAncestors.shift();\n\n      const n = await this.dataSource.toggleNode(this.dataSource.data[0], true);\n      this.setChildNodes(n.children, clonedAncestors);\n\n      this.toggleFocusedNode(node);\n    }\n  }\n\n  setChildNodes(nodes: AddressSpaceNode[], ids: string[]) {\n    if (nodes) {\n      ids.forEach(async id => {\n        const match = nodes.find(n => n.nodeId === id);\n        if (match && ids.length > 0) {\n          const idx = ids.findIndex(value => value === id);\n          if (idx >= 0) {\n            ids.splice(idx, 1);\n          }\n          const toggledNode = await this.dataSource.toggleNode(match, true);\n          this.setChildNodes(toggledNode.children, ids);\n        }\n      });\n    }\n  }\n\n  async setupTree(nodeId?: string) {\n    this.loading = true;\n\n    if (!this._moId || this._moId.length === 0) {\n      this._moId = this.opcuaService.getMoId();\n    }\n\n    // addressSpaceService.getNode returns either the root node of the server (moId)\n    // or if nodeId !== undefined the node with given nodeId\n    const res = await this.addressSpaceService.getNode(this._moId, nodeId);\n    if (res) {\n      if (res.status !== 200) {\n        const data = res.json ? await res.json() : undefined;\n        this.alertService.addServerFailure({ data, res });\n        this.dataSource = undefined;\n      } else {\n        const rootNode = (await res.json()) as AddressSpaceNode;\n        this.nestedTreeControl = new NestedTreeControl<AddressSpaceNode>(this.getChildren);\n        this.dataSource = new DynamicDataSource(\n          this.nestedTreeControl,\n          this.addressSpaceService,\n          this._moId\n        );\n        this.dataSource.data = [rootNode];\n      }\n      this.loading = false;\n    } else {\n      this.loading = false;\n    }\n  }\n\n  getMoId() {\n    if (!this._moId || this._moId.length === 0) {\n      return this.opcuaService.getMoId();\n    }\n    return this._moId;\n  }\n\n  getIcon(nodeClassName) {\n    return this.addressSpaceService.getIcon(nodeClassName);\n  }\n\n  toggleFocusedNode(node) {\n    const relativePath = [];\n    this.getRelativePath(node, relativePath);\n    node.relativePath = relativePath;\n\n    this.selectedNode.emit(node);\n    this.focused = this.isFocusedNode(node) ? undefined : node;\n  }\n\n  isFocusedNode(node: AddressSpaceNode) {\n    if (this.focused) {\n      return node.nodeId === this.focused.nodeId;\n    }\n    return false;\n  }\n\n  private getRelativePath(node: AddressSpaceNode, relativePath: string[]) {\n    if (node.parentNode) {\n      relativePath.unshift(node.browseName);\n      this.getRelativePath(node.parentNode, relativePath);\n    }\n  }\n}\n","<div\n  class=\"card-block\"\n  *ngIf=\"dataSource && !loading\"\n>\n  <cdk-tree\n    [dataSource]=\"dataSource\"\n    [treeControl]=\"nestedTreeControl\"\n  >\n    <!-- This is the tree node template for leaf nodes -->\n    <cdk-nested-tree-node\n      class=\"interact\"\n      *cdkTreeNodeDef=\"let node\"\n      (click)=\"toggleFocusedNode(node)\"\n      [ngClass]=\"{ strong: isFocusedNode(node) }\"\n    >\n      <span>\n        <i\n          class=\"m-r-4 interact\"\n          [c8yIcon]=\"getIcon(node.nodeClassName)\"\n          [ngClass]=\"{ strong: isFocusedNode(node) }\"\n        ></i>\n        {{ node.displayName }}\n      </span>\n    </cdk-nested-tree-node>\n    <!-- This is the tree node template for expandable nodes -->\n    <cdk-nested-tree-node *cdkTreeNodeDef=\"let node; when: hasChild\">\n      <div role=\"group\">\n        <div class=\"d-flex a-i-center\">\n          <button\n            class=\"btn-clean text-primary m-r-4\"\n            title=\"{{ 'Expand node' | translate }}\"\n            cdkTreeNodeToggle\n            [disabled]=\"node.currentlyLoadingChildren\"\n          >\n            <i\n              [ngClass]=\"{\n                'dlt-c8y-icon-plus-square': !node.expanded,\n                'dlt-c8y-icon-minus-square': node.expanded\n              }\"\n            ></i>\n          </button>\n          <i\n            class=\"m-r-4 interact\"\n            [c8yIcon]=\"getIcon(node.nodeClassName)\"\n          ></i>\n          <span\n            class=\"interact\"\n            (click)=\"toggleFocusedNode(node)\"\n            [ngClass]=\"{ strong: isFocusedNode(node) }\"\n          >\n            {{ node.displayName }}\n          </span>\n          <span\n            class=\"m-l-4\"\n            [style.visibility]=\"node.currentlyLoadingChildren ? 'visible' : 'hidden'\"\n          >\n            <i class=\"dlt-c8y-icon-circle-o-notch icon-spin\"></i>\n          </span>\n        </div>\n        <ng-container cdkTreeNodeOutlet></ng-container>\n      </div>\n    </cdk-nested-tree-node>\n  </cdk-tree>\n</div>\n<div\n  class=\"p-t-8\"\n  *ngIf=\"loading\"\n>\n  <c8y-loading></c8y-loading>\n</div>\n<div\n  class=\"alert alert-info m-t-16\"\n  *ngIf=\"!dataSource && !loading\"\n  translate\n>\n  No source data available to fetch address space.\n</div>\n","import {\n  Component,\n  DestroyRef,\n  EventEmitter,\n  inject,\n  OnDestroy,\n  OnInit,\n  Output,\n  signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IOperation, OperationService, OperationStatus } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  ModalService,\n  OperationRealtimeService,\n  IconDirective,\n  LoadingComponent,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { isEmpty } from 'lodash-es';\nimport { filter, map } from 'rxjs/operators';\nimport { AddressSpaceNode, AddressSpaceService } from './address-space.service';\nimport { DynamicDataSource } from './dynamic-data-source';\nimport { OpcuaServer, OpcuaServerConfig } from './opcua-server.interface';\nimport { OpcuaService } from './opcuaService';\nimport { NgIf, NgFor, NgClass } from '@angular/common';\nimport { OperationDetailsComponent } from '@c8y/ngx-components/operations/operation-details';\nimport { FormsModule } from '@angular/forms';\nimport { OpcuaAddressSpaceTreeComponent } from './opcua-address-space-tree.component';\nimport { OpcuaAddressSpaceDetailComponent } from './opcua-address-space-detail.component';\n\n@Component({\n  selector: 'opcua-address-space',\n  templateUrl: './opcua-address-space.component.html',\n  imports: [\n    NgIf,\n    OperationDetailsComponent,\n    FormsModule,\n    IconDirective,\n    LoadingComponent,\n    NgFor,\n    NgClass,\n    OpcuaAddressSpaceTreeComponent,\n    OpcuaAddressSpaceDetailComponent,\n    C8yTranslatePipe\n  ]\n})\nexport class OpcuaAddressSpaceComponent implements OnInit, OnDestroy {\n  currentNode: AddressSpaceNode;\n  selectednode = false;\n  searchKey: string;\n  isSearch: boolean;\n  loading = false;\n  searchInProgress = false;\n  filterLabel: string;\n  dataSource: DynamicDataSource;\n  nodeList;\n  operation?: IOperation;\n  isOperationRunning = signal(false);\n  destroyRef = inject(DestroyRef);\n\n  @Output() focusStatus: EventEmitter<AddressSpaceNode> = new EventEmitter<AddressSpaceNode>();\n  private moId = '';\n  constructor(\n    private addressSpaceService: AddressSpaceService,\n    private opcuaService: OpcuaService,\n    private operationService: OperationService,\n    private operationRealtimeService: OperationRealtimeService,\n    private alert: AlertService,\n    private modalService: ModalService\n  ) {}\n\n  async ngOnInit() {\n    this.filterLabel = gettext('Filter…');\n    this.moId = this.opcuaService.getMoId();\n\n    this.operation = await this.getRunningScanAddressSpaceOperation();\n    this.isOperationRunning.set(!!this.operation);\n\n    this.operationRealtimeService\n      .onAll$(this.moId)\n      .pipe(\n        map(({ data }) => data as IOperation),\n        filter(operation => operation.c8y_ua_command_ScanAddressSpace),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe(operation => {\n        this.operation = operation;\n        this.isOperationRunning.set(\n          operation.status == OperationStatus.EXECUTING ||\n            operation.status == OperationStatus.PENDING\n        );\n        if (operation.status == OperationStatus.SUCCESSFUL) {\n          this.addressSpaceService.resetTreeToRootNode();\n        }\n      });\n  }\n\n  async getRunningScanAddressSpaceOperation(): Promise<IOperation | undefined> {\n    const filter: object = {\n      deviceId: this.moId,\n      fragmentType: 'c8y_ua_command_ScanAddressSpace',\n      dateFrom: new Date(0).toISOString(),\n      revert: true,\n      pageSize: 1\n    };\n    const [operation] = (await this.operationService.list(filter)).data ?? [];\n\n    return operation?.status == OperationStatus.EXECUTING ||\n      operation?.status == OperationStatus.PENDING\n      ? operation\n      : undefined;\n  }\n\n  ngOnDestroy() {\n    // The BehaviourSubject will store the last array of ancestorNodes from the previous search\n    // this would cause the component while subscribing in the init-phase to the subject to travers\n    // to the last searched node again. From user perspective it does not make sense, because the user\n    // left the Address space (tab) and should loose the context and just request a new search or\n    // browse the tree manually.\n    this.addressSpaceService.resetTreeToRootNode();\n  }\n\n  async searchNodes() {\n    this.searchInProgress = true;\n    this.clearNodeListAndCheckSearchString();\n    if (this.isSearch) {\n      this.currentNode = undefined;\n      this.nodeList = await this.addressSpaceService.getSearchedNodes(this.searchKey, this.moId);\n      this.searchInProgress = false;\n      this.nodeList.resultLabel = gettext('Results found');\n    }\n  }\n\n  clearNodeListAndCheckSearchString() {\n    this.isSearch = this.searchKey !== undefined && this.searchKey !== '' ? true : false;\n    if (!this.isSearch) {\n      this.searchInProgress = false;\n    }\n  }\n\n  clearSearch() {\n    this.isSearch = false;\n    this.searchKey = '';\n    this.currentNode = undefined;\n  }\n\n  getIcon(nodeClassName: string) {\n    return this.addressSpaceService.getIcon(nodeClassName);\n  }\n\n  async selectNode(node) {\n    if (node && node.nodeId && node.nodeId.length > 0) {\n      const res = await this.addressSpaceService.getNodeById(this.moId, node.nodeId);\n      this.toggleCurrentNode((await res.json()) as AddressSpaceNode);\n    }\n  }\n\n  toggleCurrentNode(node: AddressSpaceNode) {\n    this.currentNode = this.isNodeSet(node) ? undefined : node;\n  }\n\n  backHandler(node) {\n    this.isSearch = false;\n    this.focusStatus.emit(node);\n    this.toggleCurrentNode(node);\n  }\n\n  isNodeSet(node: AddressSpaceNode) {\n    if (this.currentNode !== undefined && this.currentNode.nodeId === node.nodeId) {\n      return true;\n    }\n    return false;\n  }\n  async rescanAddressSpace() {\n    const serverResponse = await this.opcuaService.getServer(this.moId);\n    const server = (await serverResponse.json()) as OpcuaServer;\n    let warning: string = gettext(\n      'Rescanning address space from root node might take several hours. Do you want to proceed?'\n    );\n\n    if (server) {\n      if (server.config.partialAddressScan && !isEmpty(server.config.partialAddressScanNodeIds)) {\n        warning = gettext(\n          'Rescanning from nodes ' +\n            server.config.partialAddressScanNodeIds?.join(';') +\n            '. Address space rescan might take several hours. Do you want to proceed?'\n        );\n      }\n    }\n\n    const doit = await this.modalService.confirm(\n      gettext('Rescan address space'),\n      warning,\n      'warning',\n      { ok: gettext('Rescan'), cancel: gettext('Cancel') }\n    );\n    if (!doit) {\n      return;\n    }\n\n    const operation = await this.createConfigurationAwareScanAdressSpaceOperation(server.config);\n    try {\n      this.operation = (await this.operationService.create(operation)).data;\n      this.isOperationRunning.set(true);\n    } catch (error) {\n      this.alert.add({\n        text: gettext('Error creating rescan operation'),\n        detailedData: error,\n        type: 'danger',\n        timeout: 8000\n      });\n      this.isOperationRunning.set(false);\n    }\n  }\n\n  async createConfigurationAwareScanAdressSpaceOperation(\n    config: OpcuaServerConfig\n  ): Promise<IOperation> {\n    const result: IOperation = {\n      deviceId: this.moId,\n      description: gettext('[RESCAN] Address space import from Root node'),\n      c8y_ua_command_ScanAddressSpace: {\n        skipSync: false\n      }\n    };\n\n    if (config) {\n      if (config.partialAddressScan && config.partialAddressScanNodeIds) {\n        const nodeIds = config.partialAddressScanNodeIds;\n        result.c8y_ua_command_ScanAddressSpace.nodeIds = config.partialAddressScanNodeIds;\n        result.description = gettext(`[RESCAN] Address space from node[s] ${nodeIds.join(';')}`);\n      }\n    }\n    return result;\n  }\n}\n","<div class=\"row split-scroll\">\n  <div class=\"col-md-5 col-xs-12 scroll-column no-gutter-r\">\n    <div class=\"card bg-level-2 split-scroll overflow-auto\">\n      <div class=\"flex-grow\">\n        <fieldset\n          class=\"card-block large-padding bg-level-2 p-0\"\n          id=\"operation-block\"\n          *ngIf=\"!!operation\"\n        >\n          <c8y-operation-details [operation]=\"operation\"></c8y-operation-details>\n        </fieldset>\n      </div>\n      <div class=\"card-block separator sticky-top\">\n        <div class=\"input-group input-group-search\">\n          <input\n            class=\"form-control\"\n            placeholder=\"{{ filterLabel | translate }}\"\n            type=\"search\"\n            (keydown.enter)=\"searchNodes()\"\n            [(ngModel)]=\"searchKey\"\n          />\n          <span class=\"input-group-btn\">\n            <button\n              class=\"btn btn-dot\"\n              title=\"{{ 'Search' | translate }}\"\n              type=\"submit\"\n              *ngIf=\"!isSearch\"\n              (click)=\"searchNodes()\"\n            >\n              <i c8yIcon=\"search\"></i>\n            </button>\n            <button\n              class=\"btn btn-dot\"\n              title=\"{{ 'Clear`input`' | translate }}\"\n              type=\"button\"\n              *ngIf=\"isSearch\"\n              (click)=\"clearSearch()\"\n            >\n              <i c8yIcon=\"times\"></i>\n            </button>\n          </span>\n        </div>\n        <div\n          class=\"p-t-16\"\n          *ngIf=\"isSearch && !loading\"\n        >\n          <p *ngIf=\"!searchInProgress\">\n            <em>{{ nodeList.resultLabel | translate }}</em>\n            &nbsp;\n            <span class=\"badge badge-info\">{{ nodeList?.length }}</span>\n          </p>\n        </div>\n      </div>\n\n      <div\n        class=\"p-t-8\"\n        *ngIf=\"(isSearch && loading) || searchInProgress\"\n      >\n        <c8y-loading></c8y-loading>\n      </div>\n\n      <div\n        class=\"inner-scroll\"\n        *ngIf=\"isSearch && !loading && !searchInProgress\"\n      >\n        <div\n          class=\"list-group list-group-links\"\n          *ngIf=\"isSearch && !loading\"\n        >\n          <button\n            *ngFor=\"let nodeItem of nodeList\"\n            (click)=\"selectNode(nodeItem)\"\n            [ngClass]=\"{ 'list-group-item d-flex': true }\"\n          >\n            <div class=\"list-group-icon m-r-4\">\n              <i\n                class=\"m-r-4\"\n                [c8yIcon]=\"getIcon(nodeItem.nodeClassName)\"\n              ></i>\n            </div>\n            <div class=\"list-item-body text-truncate\">\n              <span tile=\"nodeId\">{{ nodeItem.nodeId }}</span>\n              {{ nodeItem.displayName }}\n            </div>\n          </button>\n        </div>\n      </div>\n      <div\n        class=\"inner-scroll\"\n        *ngIf=\"!isSearch\"\n      >\n        <opcua-address-space-tree\n          (selectedNode)=\"toggleCurrentNode($event)\"\n          [focusEmitter]=\"focusStatus\"\n        ></opcua-address-space-tree>\n      </div>\n      <div class=\"card-footer separator-top\">\n        <button\n          class=\"btn btn-default\"\n          [class.btn-pending]=\"isOperationRunning()\"\n          type=\"button\"\n          (click)=\"rescanAddressSpace()\"\n          [disabled]=\"isOperationRunning()\"\n        >\n          {{ 'Rescan' | translate }}\n        </button>\n      </div>\n    </div>\n  </div>\n  <opcua-address-space-detail\n    class=\"col-md-7 col-xs-12 scroll-column no-gutter-l no-pointer\"\n    [node]=\"currentNode\"\n    (toggleAttrDetail)=\"backHandler($event)\"\n  ></opcua-address-space-detail>\n</div>\n","import { Component, Input, OnInit, EventEmitter } from '@angular/core';\nimport { AutoApplyConstraints } from './opcua-protocol-device-type.interface';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  C8yTranslateDirective,\n  FormGroupComponent,\n  SelectLegacyComponent,\n  ListItemComponent,\n  FilterInputComponent,\n  ListItemBodyComponent,\n  ListItemCheckboxComponent,\n  InputGroupListContainerDirective,\n  InputGroupListComponent,\n  RequiredInputPlaceholderDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { reject } from 'lodash-es';\nimport { CollapseDirective } from 'ngx-bootstrap/collapse';\nimport { NgIf, NgFor } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n@Component({\n  selector: 'opcua-auto-apply',\n  templateUrl: './opcua-auto-apply-settings.component.html',\n  imports: [\n    C8yTranslateDirective,\n    CollapseDirective,\n    FormGroupComponent,\n    SelectLegacyComponent,\n    NgIf,\n    ListItemComponent,\n    FilterInputComponent,\n    ListItemBodyComponent,\n    NgFor,\n    ListItemCheckboxComponent,\n    FormsModule,\n    InputGroupListContainerDirective,\n    InputGroupListComponent,\n    RequiredInputPlaceholderDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class OpcuaAutoApplySettingsComponent implements OnInit {\n  opcuaServers: IManagedObject[] = [];\n  selectedItems: IManagedObject[] = [];\n  filteredList: IManagedObject[] = [];\n  checked = {};\n  readonly sizeToShowFilter: number = 5;\n  constraints: AutoApplyConstraints = {\n    browsePathMatchesRegex: '',\n    matchesNodeIds: [],\n    serverObjectHasFragment: '',\n    matchesServerIds: []\n  };\n  placeholderSelectServerIds: string = gettext('Select server IDs from list');\n  showServerIds: boolean;\n  showBrowsePath: boolean;\n  showServerFragment: boolean;\n  showRootNodes: boolean;\n  updateSelectedItem: EventEmitter<boolean> = new EventEmitter();\n  private _model: IManagedObject;\n\n  constructor(private inventoryService: InventoryService) {}\n\n  async ngOnInit() {\n    const { data } = await this.inventoryService.list({\n      pageSize: 1000,\n      withTotalPages: true,\n      type: 'c8y_OpcuaServer'\n    });\n\n    this.opcuaServers = data;\n    this.filteredList = data;\n    this.selectedItems = [];\n\n    const { matchesServerIds } = this.constraints;\n\n    data.forEach(server => {\n      if (\n        matchesServerIds &&\n        matchesServerIds.length > 0 &&\n        matchesServerIds.find(itemId => itemId === server.id)\n      ) {\n        this.selectedItems.push(server);\n        this.checked[server.id] = true;\n        this.showServerIds = true;\n      }\n    });\n  }\n\n  @Input() set model(model) {\n    if (model && model.applyConstraints) {\n      this.constraints = model.applyConstraints as AutoApplyConstraints;\n    }\n    this._model = model;\n  }\n\n  get model() {\n    return this._model;\n  }\n\n  serverIdsSelected(items: IManagedObject[]) {\n    if (this.constraints) {\n      this.constraints.matchesServerIds = items.map((item: IManagedObject) => item.id);\n    }\n    this.selectedItems = items;\n  }\n\n  onChangeNodeId(event) {\n    if (event.target.checked) {\n      this.showRootNodes = true;\n      this.add();\n    } else {\n      this.showRootNodes = false;\n      this.constraints.matchesNodeIds = [];\n    }\n  }\n\n  onChangeShowServerIds(event) {\n    if (!event.target.checked) {\n      this.constraints.matchesServerIds = [];\n      this.showServerIds = false;\n      this.selectedItems = [];\n      this.checked = {};\n    } else {\n      this.showServerIds = true;\n    }\n  }\n\n  onChangeShowBrowsePath(event) {\n    if (!event.target.checked) {\n      this.constraints.browsePathMatchesRegex = '';\n      this.showBrowsePath = false;\n    } else {\n      this.showBrowsePath = true;\n    }\n  }\n\n  onChangeShowServerFragment(event) {\n    if (!event.target.checked) {\n      this.constraints.serverObjectHasFragment = '';\n      this.showServerFragment = false;\n    } else {\n      this.showServerFragment = true;\n    }\n  }\n\n  add() {\n    this.constraints.matchesNodeIds.push('');\n  }\n\n  remove(index) {\n    this.constraints.matchesNodeIds.splice(index, 1);\n  }\n\n  trackByFn(index: any, _item: any) {\n    return index;\n  }\n\n  updateConstraints(items) {\n    if (this.constraints) {\n      this.constraints.matchesServerIds = items.map((item: IManagedObject) => item.id);\n    }\n  }\n\n  filterItems(filterText) {\n    if (filterText.length !== 0) {\n      const search = new RegExp(filterText, 'i');\n      this.filteredList = this.opcuaServers.filter(({ name, id }) => {\n        return search.test(name) || search.test(id);\n      });\n    } else {\n      this.filteredList = this.opcuaServers;\n    }\n  }\n\n  isChecked(item) {\n    return this.checked[item.id];\n  }\n\n  onSelect(selected, item) {\n    if (!selected) {\n      this.selectedItems = reject(this.selectedItems, { id: item.id });\n      delete this.checked[item.id];\n    } else {\n      this.selectedItems.push(item);\n      this.checked[item.id] = selected;\n    }\n    this.updateSelectedItem.emit(true);\n    this.updateConstraints(this.selectedItems);\n  }\n}\n","<div class=\"row\">\n  <div class=\"col-md-4\">\n    <p translate>\n      Specifying auto-apply constraints allows you to limit the scope where the device protocols are\n      applied, for example by specifying a set of possible servers or node IDs.\n    </p>\n    <p translate>\n      If no constraints are set, device protocols are applied at any fitting location on the OPC UA\n      server.\n    </p>\n  </div>\n\n  <div class=\"col-md-6\">\n    <ul class=\"list-group\" style=\"box-shadow: none;\">\n      <!-- Limit device type to a set of servers -->\n      <li class=\"list-group-item\">\n        <label\n          title=\"{{ 'Limit device protocol to a set of servers' | translate }}\"\n          class=\"c8y-checkbox\"\n        >\n          <input\n            type=\"checkbox\"\n            [checked]=\"\n              constraints.matchesServerIds !== null && constraints.matchesServerIds.length > 0\n            \"\n            (change)=\"onChangeShowServerIds($event)\"\n          />\n          <span></span>\n          <span class=\"m-l-8\">\n            {{ 'Limit device protocol to a set of servers' | translate }}\n          </span>\n        </label>\n        <div\n          class=\"collapse\"\n          [collapse]=\"\n            (!showServerIds &&\n              (constraints.matchesServerIds !== null && constraints.matchesServerIds.length < 1)) ||\n            (!showServerIds && constraints.matchesServerIds === null)\n          \"\n          [isAnimated]=\"true\"\n        >\n          <c8y-form-group class=\"m-t-8 m-b-8\">\n            <c8y-select-legacy\n              [items]=\"opcuaServers\"\n              [selected]=\"selectedItems\"\n              [placeholder]=\"placeholderSelectServerIds\"\n              (onChange)=\"serverIdsSelected($event)\"\n              [updateItems]=\"updateSelectedItem\"\n            >\n            \n              <c8y-li *ngIf=\"opcuaServers.length > sizeToShowFilter\" class=\"sticky-top\">\n                <c8y-filter [icon]=\"'search'\"  (onSearch)=\"filterItems($event)\"></c8y-filter>\n              </c8y-li>\n              <c8y-li *ngIf=\"filteredList && filteredList.length === 0\">\n                <c8y-li-body> \n                  <div class=\"c8y-empty-state text-left\">\n                  <p>{{ 'No items to display.' | translate }}</p>\n                </div>\n                </c8y-li-body>\n              </c8y-li>\n              <c8y-li *ngFor=\"let item of filteredList\">\n                <c8y-li-checkbox\n                  [selected]=\"isChecked(item)\"\n                  (onSelect)=\"onSelect($event, item)\"\n                ></c8y-li-checkbox>\n                <c8y-li-body>{{ item.name | translate }}<br>\n                  <span class=\"text-label-small m-r-4\" translate>ID</span> <small>{{ item.id }}</small>\n                </c8y-li-body>\n              </c8y-li>\n            </c8y-select-legacy>\n          </c8y-form-group>\n        </div>\n      </li>\n      <!-- Limit device type scope in the address space -->\n      <li class=\"list-group-item\">\n        <label\n          title=\"{{ 'Limit device protocol scope in the address space' | translate }}\"\n          class=\"c8y-checkbox\"\n        >\n          <input\n            type=\"checkbox\"\n            [checked]=\"\n              constraints.browsePathMatchesRegex !== null &&\n              constraints.browsePathMatchesRegex.length > 0\n            \"\n            (change)=\"onChangeShowBrowsePath($event)\"\n          />\n          <span></span>\n          <span class=\"m-l-8\">\n            {{ 'Limit device protocol scope in the address space' | translate }}\n          </span>\n        </label>\n        <div\n          class=\"collapse\"\n          [isAnimated]=\"true\"\n          [collapse]=\"\n            (!showBrowsePath &&\n              constraints.browsePathMatchesRegex !== null &&\n              constraints.browsePathMatchesRegex.length < 1) ||\n            (!showBrowsePath && constraints.browsePathMatchesRegex === null)\n          \"\n        >\n          <c8y-form-group class=\"m-t-8 m-b-8\">\n            <input\n              name=\"browsePath\"\n              type=\"text\"\n              class=\"form-control\"\n              placeholder=\"{{ 'e.g.' | translate }} /objects/devices/.*\"\n              [(ngModel)]=\"constraints.browsePathMatchesRegex\"\n              ngDefaultControl\n            />\n          </c8y-form-group>\n        </div>\n      </li>\n      <!-- Limit device type to servers with a certain fragment-->\n      <li class=\"list-group-item\">\n        <label\n          title=\"{{ 'Limit device protocol to servers with a certain fragment' | translate }}\"\n          class=\"c8y-checkbox\"\n        >\n          <input\n            type=\"checkbox\"\n            [checked]=\"constraints.serverObjectHasFragment !== null && constraints.serverObjectHasFragment.length > 0\"\n            (change)=\"onChangeShowServerFragment($event)\"\n          />\n          <span></span>\n          <span class=\"m-l-8\">\n            {{ 'Limit device protocol to servers with a certain fragment' | translate }}\n          </span>\n        </label>\n        <div\n          class=\"collapse\"\n          [isAnimated]=\"true\"\n          [collapse]=\"(!showServerFragment && constraints.serverObjectHasFragment !== null && constraints.serverObjectHasFragment.length < 1) || (!showServerFragment && constraints.serverObjectHasFragment === null)\"\n        >\n          <c8y-form-group class=\"m-t-8 m-b-8\">\n            <input\n              name=\"serverFragment\"\n              type=\"text\"\n              class=\"form-control\"\n              placeholder=\"{{ 'e.g.' | translate }} c8y_SomeServerMarker\"\n              [(ngModel)]=\"constraints.serverObjectHasFragment\"\n              ngDefaultControl\n            />\n          </c8y-form-group>\n        </div>\n      </li>\n      <!-- Limit device type to a specific root node ID -->\n      <li class=\"list-group-item\">\n        <label\n          title=\"{{ 'Limit device protocol to specific root nodes ID' | translate }}\"\n          class=\"c8y-checkbox\"\n        >\n          <input\n            type=\"checkbox\"\n            [checked]=\"constraints.matchesNodeIds !== null && constraints.matchesNodeIds.length > 0\"\n            (change)=\"onChangeNodeId($event)\"\n          />\n          <span></span>\n          <span class=\"m-l-8\">\n            {{ 'Limit device protocol to specific root nodes ID' | translate }}\n          </span>\n        </label>\n        <div\n          class=\"collapse\"\n          [isAnimated]=\"true\"\n          [collapse]=\"(!showRootNodes && constraints.matchesNodeIds !== null && constraints.matchesNodeIds.length < 1) || ( !showRootNodes && constraints.matchesNodeIds === null)\"\n        >\n            <ul c8yInputGroupListContainer class=\"list-unstyled p-t-16\">\n              <li\n                class=\"m-b-8\"\n                *ngFor=\"let item of constraints.matchesNodeIds; let i = index; trackBy: trackByFn\"\n              >\n                <c8y-input-group-list [index]=\"i\" (onAdd)=\"add()\" (onRemove)=\"remove($event)\">\n                  <c8y-form-group class=\"form-group--tooltip-validation\">\n                    <input\n                      type=\"text\"\n                      class=\"form-control\"\n                      placeholder=\"{{ 'e.g.' | translate }} nodeId\"\n                      [(ngModel)]=\"constraints.matchesNodeIds[i]\"\n                      [required]=\"true\"\n                    />\n                  </c8y-form-group>\n                </c8y-input-group-list>\n              </li>\n            </ul> \n        </div>\n      </li>\n    </ul>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { set, unset, toInteger } from 'lodash';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  FormGroupComponent,\n  C8yTranslateDirective,\n  RequiredInputPlaceholderDirective,\n  MinValidationDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { ControlContainer, NgModelGroup, FormsModule } from '@angular/forms';\nimport { NgFor } from '@angular/common';\nimport { CollapseDirective } from 'ngx-bootstrap/collapse';\n\n@Component({\n  selector: 'opcua-device-protocol-data-reporting',\n  templateUrl: './opcua-device-protocol-data-reporting.html',\n  viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }],\n  imports: [\n    FormGroupComponent,\n    C8yTranslateDirective,\n    NgFor,\n    FormsModule,\n    RequiredInputPlaceholderDirective,\n    CollapseDirective,\n    MinValidationDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class OpcuaDeviceProtocolDataReportingComponent {\n  @Input() set model(_model) {\n    if (_model.subscriptionType) {\n      this.subscription = _model.subscriptionType;\n      if (this.subscription.type === 'CyclicRead') {\n        this.cyclicReadParameters = _model.subscriptionType.cyclicReadParameters;\n        this.requireCyclic = true;\n        this.requireSubscription = false;\n      }\n\n      if (this.subscription.type === 'Subscription') {\n        this.subscriptionParameters = _model.subscriptionType.subscriptionParameters;\n        this.requireCyclic = false;\n        this.requireSubscription = true;\n      }\n\n      if (this.subscription.type === 'None') {\n        this.requireCyclic = false;\n        this.requireSubscription = false;\n      }\n    }\n    this._model = _model;\n    this.subscriptionTypeName = 'subscriptionType' + _model.id;\n  }\n  @Input() groupName;\n\n  _model: object;\n  @Output() onSubscriptionChange: EventEmitter<any> = new EventEmitter<any>();\n\n  subscription = {\n    type: 'None'\n  };\n  subscriptionParameters = {\n    samplingRate: undefined,\n    deadbandType: 'None',\n    deadbandValue: undefined,\n    ranges: '',\n    queueSize: undefined,\n    dataChangeTrigger: 'Status',\n    discardOldest: true\n  };\n\n  cyclicReadParameters = {\n    rate: undefined\n  };\n\n  types: any[] = [\n    { value: 'None', label: gettext('None') },\n    { value: 'CyclicRead', label: gettext('Cyclic read') },\n    { value: 'Subscription', label: gettext('Subscription') }\n  ];\n\n  filters: any[] = [\n    { value: 'None', label: gettext('None') },\n    { value: 'Absolute', label: gettext('Absolute') },\n    { value: 'Percent', label: gettext('Percent') }\n  ];\n\n  triggers: any[] = [\n    { value: 'Status', label: gettext('Status') },\n    { value: 'StatusValue', label: gettext('Status/Value') },\n    { value: 'StatusValueTimestamp', label: gettext('Status/Value/Timestamp') }\n  ];\n\n  discard: any[] = [\n    { value: true, label: gettext('oldest`data`') },\n    { value: false, label: gettext('newest`data`') }\n  ];\n\n  requireCyclic = false;\n  requireSubscription = false;\n  subscriptionTypeName = 'subscriptionType';\n\n  parseReadingInterval = $event => toInteger($event.target.value);\n\n  updateModel() {\n    setTimeout(() => {\n      unset(this.subscription, 'subscriptionParameters');\n      unset(this.subscription, 'cyclicReadParameters');\n      if (this.subscription.type === 'CyclicRead') {\n        this.requireCyclic = true;\n        this.requireSubscription = false;\n        set(this.subscription, 'cyclicReadParameters', this.cyclicReadParameters);\n      } else if (this.subscription.type === 'Subscription') {\n        this.requireCyclic = false;\n        this.requireSubscription = true;\n        set(this.subscription, 'subscriptionParameters', this.subscriptionParameters);\n      } else if (this.subscription.type === 'None') {\n        this.requireCyclic = false;\n        this.requireSubscription = false;\n      }\n      this.onSubscriptionChange.emit(this.subscription);\n    });\n  }\n}\n","<c8y-form-group>\n  <label translate>Mechanism</label>\n  <label\n    title=\"{{ mechanism.label | translate }}\"\n    class=\"c8y-radio radio-inline\"\n    *ngFor=\"let mechanism of types\"\n  >\n    <input\n      type=\"radio\"\n      name=\"{{subscriptionTypeName}}\"\n      [value]=\"mechanism.value\"\n      [(ngModel)]=\"subscription.type\"\n      (change)=\"updateModel()\"\n      required\n      [attr.data-cy]=\"mechanism.value\"\n    />\n    <span></span>\n    <span>{{ mechanism.label | translate }}</span>\n  </label>\n</c8y-form-group>\n\n<div class=\"row collapse\" [collapse]=\"subscription.type != 'CyclicRead'\" [isAnimated]=\"true\">\n  <div class=\"col-sm-6 col-md-4 col-lg-3\">\n    <c8y-form-group>\n      <label translate>Reading interval</label>\n      <div class=\"input-group\">\n        <input\n          class=\"form-control\"\n          type=\"number\"\n          name=\"rate\"\n          [(ngModel)]=\"cyclicReadParameters.rate\"\n          placeholder=\"{{ 'e.g.' | translate }} 50\"\n          [required]=\"requireCyclic\"\n          min=\"50\"\n          [attr.data-cy]=\"'cyclicReadRate'\"\n        />\n        <span class=\"input-group-addon units\" title=\"{{ 'Milliseconds' | translate }}\">\n          {{ 'msec' | translate }}\n        </span>\n      </div>\n    </c8y-form-group>\n  </div>\n</div>\n\n<div class=\"row collapse\" [collapse]=\"subscription.type != 'Subscription'\" [isAnimated]=\"true\">\n  <div class=\"col-sm-6 col-lg-4\">\n    <c8y-form-group>\n      <label translate>Sampling interval</label>\n      <div class=\"input-group\">\n        <input\n          class=\"form-control\"\n          type=\"number\"\n          name=\"samplingRate\"\n          [(ngModel)]=\"subscriptionParameters.samplingRate\"\n          placeholder=\"{{ 'e.g.' | translate }} 500\"\n          [required]=\"requireSubscription\"\n          min=\"0\"\n          [attr.data-cy]=\"'subscriptionSamplingRate'\"\n        />\n        <span class=\"input-group-addon units\" title=\"{{ 'Milliseconds' | translate }}\" translate>\n          msec\n        </span>\n      </div>\n    </c8y-form-group>\n  </div>\n  <div class=\"col-sm-6 col-lg-4\">\n    <c8y-form-group>\n      <label translate>Queue size</label>\n      <div class=\"input-group\">\n        <input\n          class=\"form-control\"\n          type=\"number\"\n          name=\"queueSize\"\n          [(ngModel)]=\"subscriptionParameters.queueSize\"\n          placeholder=\"{{ 'e.g.' | translate }} 10\"\n          min=\"1\"\n          [attr.data-cy]=\"'subscriptionQueueSize'\"\n        />\n        <span class=\"input-group-addon\">\n          <strong translate>Discard</strong>&nbsp;\n          <label\n            *ngFor=\"let discardOption of discard\"\n            title=\"{{ discardOption.label | translate }}\"\n            class=\"c8y-radio radio-inline\"\n          >\n            <input\n              type=\"radio\"\n              name=\"discard{{ _model.id }}\"\n              [value]=\"discardOption.value\"\n              [(ngModel)]=\"subscriptionParameters.discardOldest\"\n              [required]=\"requireSubscription\"\n              [attr.data-cy]=\"discardOption.label\"\n              [attr.data-name]=\"'discard' + _model.id\"\n            />\n            <span></span>\n            <span>{{ discardOption.label | translate }}</span>\n          </label>\n        </span>\n      </div>\n    </c8y-form-group>\n  </div>\n  <div class=\"clearfix\"></div>\n  <div class=\"col-sm-6 col-lg-4\">\n    <c8y-form-group>\n      <label translate>Data change trigger</label>\n      <label\n        *ngFor=\"let trigger of triggers\"\n        title=\"{{ trigger.label | translate }}\"\n        class=\"c8y-radio radio-inline\"\n      >\n        <input\n          type=\"radio\"\n          name=\"dataChangeTrigger{{ _model.id }}\"\n          [value]=\"trigger.value\"\n          [(ngModel)]=\"subscriptionParameters.dataChangeTrigger\"\n          [required]=\"requireSubscription\"\n          [attr.data-cy]=\"trigger.label\"\n          [attr.data-name]=\"'dataChangeTrigger' + _model.id\"\n        />\n        <span></span>\n        <span>{{ trigger.label | translate }}</span>\n      </label>\n    </c8y-form-group>\n  </div>\n  <div class=\"col-sm-6 col-lg-4\">\n    <c8y-form-group>\n      <label translate>Deadband filter</label>\n      <label\n        *ngFor=\"let deadbandFilter of filters\"\n        title=\"{{ deadbandFilter.label | translate }}\"\n        class=\"c8y-radio radio-inline\"\n      >\n        <input\n          type=\"radio\"\n          name=\"deadbandType{{ _model.id }}\"\n          [value]=\"deadbandFilter.value\"\n          [(ngModel)]=\"subscriptionParameters.deadbandType\"\n          [required]=\"requireSubscription\"\n          [attr.data-cy]=\"deadbandFilter.label\"\n          [attr.data-name]=\"'deadbandType' + _model.id\"\n        />\n        <span></span>\n        <span>{{ deadbandFilter.label | translate }}</span>\n      </label>\n    </c8y-form-group>\n    <div [collapse]=\"subscriptionParameters.deadbandType == 'None'\" [isAnimated]=\"true\">\n      <c8y-form-group>\n        <label translate>Deadband value</label>\n        <input\n          class=\"form-control\"\n          type=\"number\"\n          name=\"deadbandValue\"\n          [(ngModel)]=\"subscriptionParameters.deadbandValue\"\n          placeholder=\"{{ 'e.g.' | translate }} 10\"\n          [required]=\"subscriptionParameters.deadbandType != 'None'\"\n          min=\"0\"\n          [attr.data-cy]=\"'deadbandValue'\"\n        />\n      </c8y-form-group>\n    </div>\n  </div>\n</div>\n","import { Component, Input } from '@angular/core';\r\nimport { NgForm, ControlContainer, FormsModule } from '@angular/forms';\r\nimport {\r\n  C8yTranslateDirective,\r\n  IconDirective,\r\n  C8yTranslatePipe,\r\n  DatePipe\r\n} from '@c8y/ngx-components';\r\nimport { NgClass, NgIf } from '@angular/common';\r\nimport { ButtonCheckboxDirective } from 'ngx-bootstrap/buttons';\r\n\r\n@Component({\r\n  selector: 'opcua-device-protocol-description',\r\n  templateUrl: './opcua-device-protocol-description.html',\r\n  viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\r\n  imports: [\r\n    C8yTranslateDirective,\r\n    NgClass,\r\n    FormsModule,\r\n    NgIf,\r\n    ButtonCheckboxDirective,\r\n    IconDirective,\r\n    C8yTranslatePipe,\r\n    DatePipe\r\n  ]\r\n})\r\nexport class OpcuaDeviceProtocolDescription {\r\n  _model: any;\r\n  autoScan: string;\r\n  @Input() set model(_model) {\r\n    this.moId = _model.referencedServerId;\r\n    this._model = _model;\r\n    this.autoScan = _model.enabled ? '1' : '0';\r\n  }\r\n\r\n  private moId = '';\r\n\r\n  setAutoScanOption(data: string) {\r\n    this._model.enabled = data !== '0' ? true : false;\r\n  }\r\n}\r\n","<div class=\"card-block bg-level-1 flex-no-shrink p-t-24 p-b-24\">\n  <div class=\"content-flex-70\">\n    <div class=\"text-center\">\n      <i class=\"c8y-icon-duocolor icon-48 c8y-icon c8y-icon-device-protocols\"></i>\n      <p>\n        <small class=\"label label-info\">{{ _model.fieldbusType }}</small>\n      </p>\n    </div>\n    <div class=\"flex-grow col-10\">\n      <div class=\"content-flex-80\">\n        <div class=\"col-9\">\n          <div class=\"form-group form-group-lg m-b-0\">\n            <label class=\"sr-only\" translate>Name</label>\n            <label class=\"editable\" [ngClass]=\"{ updated: ctrlName.dirty }\">\n              <input\n                type=\"text\"\n                class=\"form-control\"\n                name=\"name\"\n                #ctrlName=\"ngModel\"\n                [(ngModel)]=\"_model.name\"\n                style=\"max-width:calc( {{ _model.name.length || 10 }} * 1ch + 14px)\"\n              />\n            </label>\n          </div>\n          <div class=\"form-group\">\n            <label class=\"sr-only\" translate>Description</label>\n            <label class=\"editable\" [ngClass]=\"{ updated: ctrlDescription.dirty }\">\n              <textarea\n                class=\"form-control\"\n                rows=\"1\"\n                name=\"description\"\n                placeholder=\"{{ 'e.g. My protocol description' | translate }}\"\n                #ctrlDescription=\"ngModel\"\n                [(ngModel)]=\"_model.description\"\n                style=\"max-width:calc( {{ _model.description?.length || 25 }} * 1ch + 14px)\"\n              ></textarea>\n              <span *ngIf=\"_model.description\">\n                {{ _model.description }}\n              </span>\n            </label>\n          </div>\n          <div class=\"d-flex\">\n            <div>\n              <button\n                type=\"button\"\n                class=\"btn\"\n                name=\"autoScanAddressSpace\"\n                [(ngModel)]=\"autoScan\"\n                (ngModelChange)=\"setAutoScanOption($event)\"\n                btnCheckbox\n                btnCheckboxTrue=\"1\"\n                btnCheckboxFalse=\"0\"\n                ngDefaultControl\n              >\n                <i *ngIf=\"autoScan === '1'\" c8yIcon=\"check\" class=\"text-success\"></i>\n                <span *ngIf=\"autoScan === '1'\">\n                  {{ 'Active`auto scanning`' | translate }}\n                </span>\n\n                <i *ngIf=\"autoScan === '0'\" c8yIcon=\"ban\" class=\"text-danger\"></i>\n                <span *ngIf=\"autoScan === '0'\">\n                  {{ 'Inactive`auto scanning`' | translate }}\n                </span>\n              </button>\n            </div>\n            <small class=\"m-l-16 text-muted\">\n              {{\n                'When active, the gateway scans the address space of all servers and automatically applies this device protocol to all nodes matching the criteria.'\n                  | translate\n              }}\n            </small>\n          </div>\n        </div>\n        <div class=\"flex-grow\">\n          <ul class=\"list-unstyled small\">\n            <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n              <label class=\"small m-b-0 m-r-8\" translate>ID</label>\n              <span class=\"m-l-auto\">{{ _model.id }}</span>\n            </li>\n            <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n              <label class=\"small m-b-0 m-r-8\" translate>Date created</label>\n              <span class=\"m-l-auto\">{{ _model.creationTime | c8yDate }}</span>\n            </li>\n            <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n              <label class=\"small m-b-0 m-r-8\" translate>Last update</label>\n              <span class=\"m-l-auto\">{{ _model.lastUpdated | c8yDate }}</span>\n            </li>\n            <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n              <label class=\"small m-b-0 m-r-8\" translate>Fieldbus version</label>\n              <span class=\"m-l-auto\">{{ _model.fieldbusVersion }}</span>\n            </li>\n          </ul>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n","import { BaseObjectMapping } from '@c8y/ngx-components/device-protocol-object-mappings';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport class OpcuaCustomActionObjectMapping extends BaseObjectMapping {\n  constructor() {\n    super({\n      icon: 'bell',\n      label: gettext('Custom action'),\n      formlyFieldConfig: {\n        key: 'customAction',\n        fieldGroup: [\n          {\n            type: 'array',\n            key: 'headers',\n            props: {\n              label: gettext('headers'),\n              addText: gettext('Add Header'),\n              required: true\n            },\n            className: 'formly-group-array-cols d-block min-height-fit',\n            fieldArray: {\n              fieldGroup: [\n                {\n                  key: 'key',\n                  type: 'string',\n                  focus: true,\n                  props: {\n                    placeholder: 'Authorization',\n                    label: gettext('Key'),\n                    required: true,\n                    smallFormGroup: true\n                  },\n                  wrappers: ['c8y-form-field']\n                },\n                {\n                  key: 'value',\n                  type: 'string',\n                  props: {\n                    placeholder: 'Basic <credentials>',\n                    label: gettext('Value'),\n                    required: true,\n                    smallFormGroup: true\n                  }\n                }\n              ]\n            }\n          },\n          {\n            className: 'row',\n            wrappers: ['c8y-legend-wrapper'],\n            props: {\n              label: gettext('Action')\n            },\n            fieldGroup: [\n              {\n                type: 'string',\n                key: 'endpoint',\n                props: {\n                  label: gettext('Endpoint'),\n                  smallFormGroup: true,\n                  required: true\n                },\n                className: 'col-md-6 p-0'\n              },\n              {\n                type: 'textarea',\n                key: 'bodyTemplate',\n                props: {\n                  label: gettext('Body template'),\n                  smallFormGroup: true,\n                  required: true,\n                  description: gettext(\n                    'The following placeholders are available: ${value}`KEEP_ORIGINAL`, ${receivedTimestampInMs}`KEEP_ORIGINAL`, ${serverId}`KEEP_ORIGINAL`, ${nodeId}`KEEP_ORIGINAL`, ${deviceId}`KEEP_ORIGINAL`.'\n                  )\n                },\n                className: 'col-md-6'\n              }\n            ]\n          }\n        ]\n      }\n    });\n  }\n}\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlarmObjectMapping,\n  ALARM_SEVERITY,\n  EventObjectMapping,\n  MeasurementObjectMapping\n} from '@c8y/ngx-components/device-protocol-object-mappings';\n\nexport class OpcuaMeasurementObjectMapping extends MeasurementObjectMapping {\n  constructor(protected smallFormGroup = true) {\n    super(null, 'measurementCreation', smallFormGroup);\n  }\n}\n\nexport class OpcuaEventObjectMapping extends EventObjectMapping {\n  constructor(protected smallFormGroup = true) {\n    super(null, 'eventCreation', smallFormGroup, undefined, [\n      {\n        key: 'type',\n        type: 'string',\n        props: {\n          label: gettext('Type'),\n          required: true,\n          smallFormGroup\n        },\n        className: 'col-md-3 col-sm-6'\n      },\n      {\n        key: 'text',\n        type: 'string',\n        props: {\n          label: gettext('Text'),\n          required: true,\n          smallFormGroup\n        },\n        className: 'col-md-3 col-sm-6'\n      }\n    ]);\n  }\n}\n\nexport class OpcuaAlarmObjectMapping extends AlarmObjectMapping {\n  constructor(protected smallFormGroup = true) {\n    super(null, 'alarmCreation', smallFormGroup, undefined, [\n      {\n        key: 'severity',\n        type: 'select',\n        props: {\n          label: gettext('Severity'),\n          options: [...Object.values(ALARM_SEVERITY).map(value => ({ label: value, value }))],\n          required: true,\n          smallFormGroup\n        },\n        className: 'col-md-3 col-sm-6'\n      },\n      {\n        key: 'type',\n        type: 'string',\n        props: {\n          label: gettext('Type'),\n          smallFormGroup,\n          required: true\n        },\n        className: 'col-md-3 col-sm-6'\n      },\n      {\n        key: 'text',\n        type: 'string',\n        props: {\n          label: gettext('Text'),\n          smallFormGroup,\n          required: true\n        },\n        className: 'col-md-3 col-sm-6'\n      }\n    ]);\n  }\n}\n","import { Directive, ElementRef, Injector, Input } from '@angular/core';\nimport { UpgradeComponent } from '@angular/upgrade/static';\n\n@Directive({ selector: 'c8y-object-mapping-status-icons' })\nexport class OpcuaDeviceProtocolObjectMappingStatus extends UpgradeComponent {\n  @Input() mapping: any;\n  constructor(elementRef: ElementRef, injector: Injector) {\n    super('c8yObjectMappingStatusIcons', elementRef, injector);\n  }\n}\n","import {\n  Component,\n  OnInit,\n  EventEmitter,\n  Input,\n  Output,\n  ViewChild,\n  OnChanges,\n  SimpleChanges\n} from '@angular/core';\nimport { ControlContainer, NgModelGroup, FormsModule } from '@angular/forms';\nimport { isNil, isEmpty, assign, unset, get, set, cloneDeep, isEqual } from 'lodash-es';\nimport { AddressSpaceService } from './address-space.service';\nimport {\n  OpcuaMeasurementObjectMapping,\n  OpcuaCustomActionObjectMapping,\n  OpcuaAlarmObjectMapping,\n  OpcuaEventObjectMapping\n} from './mappings';\nimport { NgClass, NgIf, JsonPipe } from '@angular/common';\nimport {\n  IconDirective,\n  FormGroupComponent,\n  RequiredInputPlaceholderDirective,\n  MessagesComponent,\n  MessageDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { OpcuaDeviceProtocolObjectMappingStatus } from './opcua-device-protocol-object-mapping-status-icon.component';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\nimport { CollapseDirective } from 'ngx-bootstrap/collapse';\nimport {\n  BsDropdownDirective,\n  BsDropdownToggleDirective,\n  BsDropdownMenuDirective\n} from 'ngx-bootstrap/dropdown';\nimport { OpcuaDeviceProtocolBrowsePathValidation } from './opcua-device-protocol-browse-path-validation.directive';\nimport { OpcuaAddressSpaceTreeComponent } from './opcua-address-space-tree.component';\nimport { OpcuaDeviceProtocolDataReportingComponent } from './opcua-device-protocol-data-reporting.component';\nimport { ObjectMappingComponent } from '@c8y/ngx-components/device-protocol-object-mappings';\n\n@Component({\n  selector: 'opcua-device-protocol-mapping',\n  templateUrl: './opcua-device-protocol-mapping.html',\n  viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }],\n  imports: [\n    NgClass,\n    IconDirective,\n    NgIf,\n    OpcuaDeviceProtocolObjectMappingStatus,\n    TooltipDirective,\n    CollapseDirective,\n    FormsModule,\n    FormGroupComponent,\n    BsDropdownDirective,\n    RequiredInputPlaceholderDirective,\n    OpcuaDeviceProtocolBrowsePathValidation,\n    BsDropdownToggleDirective,\n    BsDropdownMenuDirective,\n    OpcuaAddressSpaceTreeComponent,\n    MessagesComponent,\n    MessageDirective,\n    OpcuaDeviceProtocolDataReportingComponent,\n    ObjectMappingComponent,\n    C8yTranslatePipe,\n    JsonPipe\n  ]\n})\nexport class OpcuaDeviceProtocolMapping implements OnInit, OnChanges {\n  @ViewChild('variableForm', { static: false }) subFormRef: NgModelGroup;\n  @ViewChild('browsePathModel', { static: false }) browsePathModel: any;\n\n  @Input('resource') _model;\n  @Input() index;\n  @Input() getParentAttr;\n  @Input() referencedServerId;\n  @Input() referencedRootNodeId;\n  @Output() onAction: EventEmitter<any> = new EventEmitter<any>();\n\n  mapping;\n\n  isDetailOpen;\n  referencedNode;\n  isPathFocused = false;\n  groupName: string;\n  browsePath: string;\n  nodeDisplayName: string;\n  isBrowsePathUniq = true;\n  dataReporting = 'default';\n  isTreeOpen = false;\n  isNew = false;\n  resetModel = false;\n  dataReportingName;\n\n  mappingTypes = [\n    OpcuaMeasurementObjectMapping,\n    OpcuaAlarmObjectMapping,\n    OpcuaEventObjectMapping,\n    OpcuaCustomActionObjectMapping\n  ];\n\n  private objectMappingState = {\n    valid: false,\n    dirty: false\n  };\n  constructor(private addressSpaceService: AddressSpaceService) {}\n\n  toggleDetail() {\n    this.isDetailOpen = !this.isDetailOpen;\n    if (this.resetModel) {\n      this.initialFormSetup();\n    }\n  }\n\n  getMappings = () => this.getParentAttr('mappings');\n\n  ngOnInit() {\n    this.dataReportingName = 'ReportingMode' + this.index;\n    this.initialFormSetup();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    // this is done to keep the \"onDelete\" logic in\n    // opcua-device-protocol-detail.component intact\n    if (\n      !isNil(get(changes, '_model.previousValue')) &&\n      !isEqual(this._model, changes._model.previousValue)\n    ) {\n      if (this.mapping && this.mapping.name === this._model.name) {\n        this.mapping.id = this._model.id;\n      }\n    }\n  }\n\n  onMappingUpdate({ dirty, valid }: { dirty: boolean; valid: boolean; touched?: boolean }) {\n    this.objectMappingState = {\n      valid,\n      dirty\n    };\n  }\n\n  initialFormSetup() {\n    const mapping = {\n      id: '',\n      browsePath: [],\n      name: '',\n      subscriptionType: {\n        type: 'None'\n      }\n    };\n\n    this.mapping = assign({}, mapping, cloneDeep(this._model));\n\n    if (isEmpty(this.mapping.browsePath)) {\n      this.isNew = true;\n      this.isDetailOpen = true;\n    } else {\n      this.browsePath = this.stringfyBrowsePath(this.mapping.browsePath);\n      this.nodeDisplayName = this.mapping.name;\n    }\n\n    if (this.referencedRootNodeId) {\n      this.referencedNode = { nodeId: this.referencedRootNodeId };\n      this.addressSpaceService.triggerNodeToOpen({\n        node: {\n          nodeId: this.referencedRootNodeId,\n          children: [],\n          expanded: false,\n          absolutePaths: [[]]\n        },\n        selectedAncestorIds: []\n      });\n    } else {\n      this.referencedNode = { nodeId: '' };\n    }\n\n    if (this.mapping?.customAction) {\n      Object.assign(this.mapping, {\n        customAction: {\n          ...this.mapping.customAction,\n          headers: this.mapHeadersObjectToList(this.mapping?.customAction?.headers)\n        }\n      });\n    }\n\n    if (get(this._model, 'subscriptionType')) {\n      this.dataReporting = 'custom';\n    } else {\n      this.dataReporting = 'default';\n    }\n    this.resetModel = false;\n  }\n\n  showAddressSpaceTree() {\n    return !isEmpty(this.referencedServerId);\n  }\n\n  ngAfterViewInit() {\n    if (\n      get(this.mapping, 'subscriptionType') &&\n      get(this.mapping, 'subscriptionType.type') !== 'None'\n    ) {\n      this.dataReporting = 'custom';\n    }\n  }\n\n  mapHeadersObjectToList(headers) {\n    if (Object.keys(headers).length > 0) {\n      return Object.keys(headers).map(item => {\n        return { key: item, value: headers[item] };\n      });\n    }\n  }\n\n  stringfyBrowsePath(path) {\n    return JSON.stringify(path);\n  }\n\n  updateBrowsePath(node) {\n    this.mapping.browsePath = node.relativePath;\n    this.nodeDisplayName = node.displayName;\n    this.mapping.name = this.nodeDisplayName;\n    this.browsePath = this.stringfyBrowsePath(this.mapping.browsePath);\n    this.browsePathModel.control.markAsDirty();\n  }\n\n  updateDisplayname() {\n    this.mapping.name = this.nodeDisplayName;\n  }\n\n  updateBrowsePathInput() {\n    if (this.browsePath) {\n      try {\n        this.mapping.browsePath = JSON.parse(this.browsePath);\n      } catch (error) {\n        return;\n      }\n    }\n  }\n\n  save() {\n    if (this.dataReporting === 'default') {\n      unset(this.mapping, 'subscriptionType');\n    }\n\n    if (get(this.mapping, 'measurementCreation')) {\n      const { measurementCreation } = this.mapping;\n      set(measurementCreation, 'fragmentName', get(measurementCreation, 'type'));\n    }\n\n    if (this.mapping.customAction) {\n      this.mapping.customAction.headers = this.mapping.customAction.headers.reduce(\n        (result, item) => {\n          result[item.key] = item.value;\n          return result;\n        },\n        {}\n      );\n    }\n\n    this.onAction.emit({\n      action: 'save',\n      data: this.mapping\n    });\n    this.isDetailOpen = false;\n  }\n\n  cancel() {\n    this.isDetailOpen = false;\n    this.resetModel = true;\n\n    if (this.mapping.id === 'new') {\n      this.onAction.emit({\n        action: 'delete',\n        data: assign({}, this.mapping)\n      });\n    }\n  }\n\n  onDelete() {\n    this.onAction.emit({ action: 'delete', data: this.mapping });\n  }\n\n  canSave({ valid, dirty }) {\n    const areValid = (): boolean => valid && this.objectMappingState.valid;\n    const areDirty = (): boolean => dirty || this.objectMappingState.dirty;\n    return areValid() && areDirty();\n  }\n\n  isActive() {\n    return this.isDetailOpen;\n  }\n\n  setTreeFromRefNode() {\n    if (this.referencedRootNodeId) {\n      this.addressSpaceService.triggerNodeToOpen({\n        node: {\n          nodeId: this.referencedRootNodeId,\n          children: [],\n          expanded: false,\n          absolutePaths: [[]]\n        },\n        selectedAncestorIds: []\n      });\n    }\n  }\n\n  updateSubscriptionType(value) {\n    this.mapping.subscriptionType = value;\n  }\n}\n","<div\n  class=\"c8y-list__item\"\n  [ngClass]=\"{ expanded: isDetailOpen }\"\n  [attr.data-cy]=\"mapping.browsePath | json\"\n>\n  <div class=\"c8y-list__item__block\">\n    <div class=\"c8y-list__item__icon\">\n      <i c8yIcon=\"sliders\"></i>\n    </div>\n    <div class=\"c8y-list__item__body\">\n      <div class=\"content-flex-70\">\n        <div class=\"col-5\">\n          <p\n            class=\"text-truncate\"\n            title=\" {{ nodeDisplayName }} {{\n              mapping.browsePath.length > 0 ? (mapping.browsePath | json) : ''\n            }}\"\n            (click)=\"toggleDetail()\"\n          >\n            {{ nodeDisplayName }}\n            <small\n              class=\"text-muted\"\n              *ngIf=\"mapping.browsePath.length > 0\"\n            >\n              {{ mapping.browsePath | json }}\n            </small>\n          </p>\n        </div>\n        <div class=\"col-5\">\n          <div class=\"list-functionalities\">\n            <label class=\"small m-r-8 m-b-0 hidden-xs\">\n              {{ 'Functionalities' | translate }}\n            </label>\n            <c8y-object-mapping-status-icons [mapping]=\"mapping\"></c8y-object-mapping-status-icons>\n          </div>\n        </div>\n        <div class=\"flex-grow d-flex p-r-8\">\n          <button\n            class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto\"\n            [attr.aria-label]=\"'Remove' | translate\"\n            tooltip=\"{{ 'Remove' | translate }}\"\n            type=\"button\"\n            [delay]=\"500\"\n          >\n            <i\n              c8yIcon=\"minus-circle\"\n              (click)=\"onDelete()\"\n            ></i>\n          </button>\n        </div>\n      </div>\n    </div>\n    <div class=\"c8y-list__item__actions\">\n      <button\n        class=\"collapse-btn\"\n        title=\"{{ 'Expand' | translate }}\"\n        type=\"button\"\n        [ngClass]=\"{ active: isDetailOpen }\"\n        (click)=\"toggleDetail()\"\n        [attr.data-cy]=\"'toggleDetail'\"\n      >\n        <i c8yIcon=\"chevron-down\"></i>\n      </button>\n    </div>\n  </div>\n  <div\n    class=\"collapse\"\n    [collapse]=\"!isDetailOpen\"\n    [isAnimated]=\"true\"\n  >\n    <div class=\"c8y-list__item__collapse--container\">\n      <div\n        class=\"form\"\n        [ngModelGroup]=\"index\"\n        #variableForm=\"ngModelGroup\"\n        *ngIf=\"isDetailOpen\"\n      >\n        <div class=\"row p-t-8\">\n          <c8y-form-group\n            class=\"col-md-4\"\n            [status]=\"!isBrowsePathUniq ? 'error' : ''\"\n            *ngIf=\"showAddressSpaceTree(); else simpleInput\"\n          >\n            <label>{{ 'Path' | translate }}</label>\n            <div\n              class=\"dropdown fit-w\"\n              dropdown\n              #dropdown=\"bs-dropdown\"\n              [insideClick]=\"true\"\n            >\n              <div class=\"input-group\">\n                <input\n                  class=\"form-control\"\n                  placeholder=\"{{ 'e.g.' | translate }} {{ ['2:Node1', '2:SubNode1'] | json }}\"\n                  name=\"browsePath\"\n                  type=\"text\"\n                  autocomplete=\"off\"\n                  required\n                  c8yBrowsePathValidator\n                  [getMappings]=\"getMappings\"\n                  [model]=\"mapping\"\n                  [(ngModel)]=\"browsePath\"\n                  (change)=\"updateBrowsePathInput()\"\n                  (focus)=\"setTreeFromRefNode()\"\n                  #browsePathModel=\"ngModel\"\n                />\n                <span class=\"input-group-btn\">\n                  <button\n                    class=\"btn btn-default\"\n                    title=\"{{ 'Toggle address space' | translate }}\"\n                    type=\"button\"\n                    dropdownToggle\n                  >\n                    <i [c8yIcon]=\"'caret-down'\"></i>\n                  </button>\n                </span>\n              </div>\n              <div\n                class=\"dropdown-menu panel-inner-scroll fit-w\"\n                style=\"max-height: 240px\"\n                *dropdownMenu\n              >\n                <opcua-address-space-tree\n                  [node]=\"referencedNode\"\n                  [moId]=\"referencedServerId\"\n                  (selectedNode)=\"updateBrowsePath($event); dropdown.hide()\"\n                ></opcua-address-space-tree>\n              </div>\n            </div>\n            <c8y-messages>\n              <c8y-message\n                name=\"invalidBrowsePathNotation\"\n                text=\"{{ 'Must be a valid array of strings.' | translate }}\"\n              ></c8y-message>\n              <c8y-message\n                name=\"browsePathNotUnique\"\n                text=\"{{ 'Variable with this path is already added.' | translate }}\"\n              ></c8y-message>\n            </c8y-messages>\n          </c8y-form-group>\n\n          <ng-template #simpleInput>\n            <c8y-form-group class=\"col-md-4\">\n              <label>{{ 'Path' | translate }}</label>\n              <input\n                class=\"form-control\"\n                placeholder=\"{{ 'e.g.' | translate }} {{ ['2:Node1', '2:SubNode1'] | json }}\"\n                name=\"browsePath\"\n                type=\"text\"\n                autocomplete=\"off\"\n                required\n                c8yBrowsePathValidator\n                [getMappings]=\"getMappings\"\n                [model]=\"mapping\"\n                [(ngModel)]=\"browsePath\"\n                (change)=\"updateBrowsePathInput()\"\n                #browsePathModel=\"ngModel\"\n              />\n              <c8y-messages>\n                <c8y-message\n                  name=\"invalidBrowsePathNotation\"\n                  text=\"{{ 'Must be a valid array of strings.' | translate }}\"\n                ></c8y-message>\n                <c8y-message\n                  name=\"browsePathNotUnique\"\n                  text=\"{{ 'Variable with this path is already added.' | translate }}\"\n                ></c8y-message>\n              </c8y-messages>\n            </c8y-form-group>\n          </ng-template>\n\n          <c8y-form-group class=\"col-md-4\">\n            <label>{{ 'Name' | translate }}</label>\n            <div class=\"input-group\">\n              <input\n                class=\"form-control\"\n                placeholder=\"{{ 'e.g. childDevice2' | translate }} \"\n                name=\"displayName\"\n                type=\"text\"\n                autocomplete=\"off\"\n                required\n                [(ngModel)]=\"nodeDisplayName\"\n                (change)=\"updateDisplayname()\"\n              />\n            </div>\n          </c8y-form-group>\n        </div>\n        <div\n          class=\"row\"\n          ngModelGroup=\"dataReportingSection\"\n        >\n          <c8y-form-group class=\"col-sm-4 col-md-3 col-lg-2\">\n            <label>\n              <span>{{ 'Data reporting' | translate }}</span>\n            </label>\n            <div class=\"input-group\">\n              <label\n                class=\"c8y-radio radio-inline\"\n                title=\"{{ 'Default' | translate }}\"\n              >\n                <input\n                  name=\"{{ dataReportingName }}\"\n                  type=\"radio\"\n                  value=\"default\"\n                  [(ngModel)]=\"dataReporting\"\n                />\n                <span></span>\n                <span>{{ 'Default' | translate }}</span>\n              </label>\n              <label\n                class=\"c8y-radio radio-inline\"\n                title=\"{{ 'Custom' | translate }}\"\n              >\n                <input\n                  name=\"{{ dataReportingName }}\"\n                  type=\"radio\"\n                  value=\"custom\"\n                  [(ngModel)]=\"dataReporting\"\n                />\n                <span></span>\n                <span>{{ 'Custom' | translate }}</span>\n              </label>\n            </div>\n          </c8y-form-group>\n          <div\n            class=\"col-sm-8 col-md-9 col-lg-10\"\n            *ngIf=\"dataReporting === 'custom'\"\n            ngModelGroup=\"overriddenSubscription\"\n          >\n            <opcua-device-protocol-data-reporting\n              [model]=\"mapping\"\n              (onSubscriptionChange)=\"updateSubscriptionType($event)\"\n            ></opcua-device-protocol-data-reporting>\n          </div>\n        </div>\n\n        <c8y-device-protocol-object-mappings\n          [data]=\"mapping\"\n          [objectMappingTypes]=\"mappingTypes\"\n          (onUpdate)=\"onMappingUpdate($event)\">\n        </c8y-device-protocol-object-mappings>\n\n        <button\n          class=\"btn btn-default m-t-16 m-b-16\"\n          title=\"{{ 'Cancel' | translate }}\"\n          id=\"cancelBtn\"\n          type=\"button\"\n          (click)=\"cancel()\"\n        >\n          {{ 'Cancel' | translate }}\n        </button>\n        <button\n          class=\"btn btn-primary m-t-16 m-b-16\"\n          title=\"{{ 'Save' | translate }}\"\n          id=\"saveBtn\"\n          type=\"button\"\n          (click)=\"save()\"\n          [disabled]=\"!canSave(variableForm)\"\n        >\n          {{ 'Save' | translate }}\n        </button>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, OnInit, ViewChildren, QueryList, ChangeDetectorRef } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { OpcuaService } from './opcuaService';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  TitleComponent,\n  BreadcrumbComponent,\n  BreadcrumbItemComponent,\n  C8yTranslateDirective,\n  EmptyStateComponent,\n  IconDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { OpcuaDeviceType } from './opcua-protocol-device-type.interface';\nimport { find, assign, omit, findIndex, pick, get, isNil } from 'lodash-es';\nimport { OpcuaDeviceProtocolMapping } from './opcua-device-protocol-mapping.component';\nimport { NgIf, NgFor } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { OpcuaDeviceProtocolDescription } from './opcua-device-protocol-description.component';\nimport { OpcuaDeviceProtocolDataReportingComponent } from './opcua-device-protocol-data-reporting.component';\nimport { OpcuaAutoApplySettingsComponent } from './opcua-auto-apply-settings.component';\n\n@Component({\n  selector: 'opcua-device-protocol-detail',\n  templateUrl: './opcua-device-protocol-detail.html',\n  imports: [\n    NgIf,\n    TitleComponent,\n    BreadcrumbComponent,\n    BreadcrumbItemComponent,\n    FormsModule,\n    OpcuaDeviceProtocolDescription,\n    C8yTranslateDirective,\n    NgFor,\n    OpcuaDeviceProtocolMapping,\n    EmptyStateComponent,\n    IconDirective,\n    OpcuaDeviceProtocolDataReportingComponent,\n    OpcuaAutoApplySettingsComponent,\n    C8yTranslatePipe\n  ]\n})\nexport class OpcuaDeviceProtocolDetailComponent implements OnInit {\n  @ViewChildren(OpcuaDeviceProtocolMapping) instanceList: QueryList<OpcuaDeviceProtocolMapping>;\n\n  initialModel: OpcuaDeviceType = {\n    id: '',\n    fieldbusType: 'opcuaV2',\n    description: '',\n    unit: '',\n    fieldbusVersion: 4,\n    name: '',\n    referencedServerId: '',\n    referencedRootNodeId: '',\n    subscriptionType: {\n      type: 'None'\n    },\n    mappings: [],\n    overriddenSubscriptions: [],\n    applyConstraints: {\n      browsePathMatchesRegex: '',\n      matchesNodeIds: [],\n      serverObjectHasFragment: '',\n      matchesServerIds: []\n    },\n    enabled: ''\n  };\n\n  model: any;\n  server: any;\n  selectedNode: any;\n  isLoaded = true;\n\n  constructor(\n    private changeDetectorRef: ChangeDetectorRef,\n    private opcuaService: OpcuaService,\n    private alertService: AlertService,\n    private router: Router\n  ) {}\n\n  ngAfterContentChecked() {\n    this.changeDetectorRef.detectChanges();\n  }\n\n  getParentAttr = key => get(this.model, key);\n\n  getMapping() {\n    return this.model.mappings;\n  }\n\n  getEmptyMappingObject() {\n    const { mappings } = this.model;\n    return {\n      id: mappings.length > 0 ? Math.max(...mappings.map(m => m.id)) + 1 : 0,\n      browsePath: []\n    };\n  }\n\n  getOverriddenSubscriptionsByPath(browsePath: string[]): any {\n    if (isNil(browsePath) || browsePath.length === 0) {\n      return undefined;\n    }\n    return find(this.model.overriddenSubscriptions, { browsePath });\n  }\n\n  getStructuredResource(resource) {\n    const overriddenSubscriptions: any = this.getOverriddenSubscriptionsByPath(resource.browsePath);\n    let result = assign({}, resource);\n    if (overriddenSubscriptions) {\n      result = assign({}, resource, { subscriptionType: overriddenSubscriptions.subscriptionType });\n    }\n    return result;\n  }\n\n  async ngOnInit() {\n    const id = this.opcuaService.getId();\n\n    if (id) {\n      const res = await this.opcuaService.getDeviceProtocol(id);\n      if (res && res.status !== 200) {\n        const data = res.json ? await res.json() : undefined;\n        this.alertService.addServerFailure({ data, res });\n        this.isLoaded = false;\n      } else {\n        const data = await res.json();\n        if (data && data.applyConstraints === null) {\n          delete data.applyConstraints;\n        }\n        if (data && data.subscriptionType === null) {\n          delete data.subscriptionType;\n        }\n        this.model = assign(this.initialModel, data);\n        if (!this.model.mappings) {\n          this.model.mappings = [];\n        }\n        this.model = assign(this.initialModel, this.updateViableMapping(data));\n        this.isLoaded = false;\n      }\n    }\n  }\n\n  updateViableMapping(model) {\n    const { mappings } = model;\n    let result = [];\n    if (mappings) {\n      result = mappings.map((item, i) => {\n        return assign(this.getStructuredResource(item), { id: i });\n      });\n    }\n    return assign(model, { mappings: result });\n  }\n\n  trackById(_index: number, el: any): number {\n    return get(el, 'id');\n  }\n\n  addVariable() {\n    this.model.mappings.push(this.getEmptyMappingObject());\n  }\n\n  updateVariable(mappingObject) {\n    const { mappings } = this.model;\n    const { id } = mappingObject;\n    const index = findIndex(mappings, { id });\n    mappings[index > -1 ? index : 0] = mappingObject;\n  }\n\n  removeVariable(mappingObject) {\n    const { mappings } = this.model;\n    const { id } = mappingObject;\n    let index = -1;\n\n    // id typeof string || number\n    if (!isNil(id) && (id.length > 0 || id > -1)) {\n      index = findIndex(mappings, { id });\n    }\n\n    if (index > -1) {\n      mappings.splice(index, 1);\n    }\n  }\n\n  actionHandler(actionObject) {\n    switch (actionObject.action) {\n      case 'save':\n        this.updateVariable(actionObject.data);\n        break;\n      case 'delete':\n        this.removeVariable(actionObject.data);\n        break;\n    }\n  }\n\n  extractOverridSubscriptionType(_mapping) {\n    const overriddenSubscriptions = [];\n\n    const variableMapping = [];\n    _mapping.forEach(element => {\n      if (element.id !== 'new') {\n        if (element.subscriptionType) {\n          overriddenSubscriptions.push(\n            assign(\n              { browsePath: element.browsePath },\n              { subscriptionType: element.subscriptionType }\n            )\n          );\n        }\n        variableMapping.push(omit(element, ['subscriptionType']));\n      }\n    });\n    return [variableMapping, overriddenSubscriptions];\n  }\n\n  prepareRequestJson(_model) {\n    let requestJson = {};\n    const [mappings, overriddenSubscriptions] = this.extractOverridSubscriptionType(\n      _model.mappings\n    );\n    requestJson = assign(requestJson, pick(_model, Object.keys(this.initialModel)), {\n      mappings,\n      overriddenSubscriptions\n    });\n    return requestJson;\n  }\n\n  async save() {\n    try {\n      const res = await this.opcuaService.updateDeviceProtocol(this.prepareRequestJson(this.model));\n      const data = await res.json();\n\n      if (res && res.status === 200) {\n        this.router.navigate(['deviceprotocols']);\n        this.alertService.success(gettext('Device protocol saved.'));\n      } else {\n        const { details } = data;\n        this.alertService.addServerFailure({ res, data: details });\n      }\n    } catch (ex) {\n      this.alertService.danger(gettext('Failed to save. Try again.'));\n    }\n  }\n\n  canSave(deviceTypeForm) {\n    if (this.instanceList) {\n      const activeInstances = this.instanceList.filter(item => item.isActive());\n\n      if (activeInstances.length > 0) {\n        return true;\n      }\n    }\n    return !deviceTypeForm.form.valid;\n  }\n}\n","<c8y-title *ngIf=\"!isLoaded\">{{ model.name }}</c8y-title>\n<c8y-breadcrumb>\n  <c8y-breadcrumb-item\n    [icon]=\"'c8y-device-protocols'\"\n    [label]=\"'Device types' | translate\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item\n    [icon]=\"'c8y-device-protocols'\"\n    [label]=\"'Device protocols' | translate\"\n    [path]=\"'deviceprotocols'\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item [icon]=\"'c8y-device-protocols'\" [label]=\"model?.name\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n<div class=\"row\">\n  <div class=\"col-lg-12 col-lg-max\">\n    <form #deviceTypeForm=\"ngForm\" name=\"detailForm\" *ngIf=\"!isLoaded\" class=\"card card--fullpage\">\n      <opcua-device-protocol-description [model]=\"model\"></opcua-device-protocol-description>\n      <div class=\"inner-scroll\">\n        <div class=\"d-contents\">\n          <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n            <div class=\"h4\" translate>Variables</div>\n          </div>\n          <div class=\"p-l-16 p-r-16\">\n            <div class=\"c8y-list__group\" *ngIf=\"model.mappings.length > 0\" ngModelGroup=\"variable\">\n              <opcua-device-protocol-mapping\n                *ngFor=\"let resource of getMapping(); index as i; trackBy: trackById\"\n                [index]=\"i\"\n                [referencedServerId]=\"model.referencedServerId\"\n                [referencedRootNodeId]=\"model.referencedRootNodeId\"\n                [resource]=\"getStructuredResource(resource)\"\n                [getParentAttr]=\"getParentAttr\"\n                (onAction)=\"actionHandler($event)\"\n              ></opcua-device-protocol-mapping>\n            </div>\n          </div>\n          <div class=\"p-l-16 p-r-16 p-t-16\">\n            <c8y-ui-empty-state\n              *ngIf=\"model.mappings.length === 0\"\n              [icon]=\"'sliders'\"\n              [title]=\"'No variables to display.' | translate\"\n              [subtitle]=\"'Click below to add your first variable.' | translate\"\n            ></c8y-ui-empty-state>\n\n            <div class=\"card-footer\">\n              <button\n                type=\"button\"\n                title=\"{{ 'Add variable' | translate }}\"\n                class=\"btn btn-default addVariableBtn\"\n                (click)=\"addVariable()\"\n              >\n                <i c8yIcon=\"plus-circle\"></i>\n                {{ 'Add variable' | translate }}\n              </button>\n            </div>\n          </div>\n        </div>\n        <div class=\"d-contents\">\n          <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n            <div class=\"h4\" translate>Data reporting</div>\n          </div>\n          <div class=\"p-l-16 p-r-16 p-t-16\" ngModelGroup=\"subscription\">\n            <opcua-device-protocol-data-reporting\n              [groupName]=\"'subscription'\"\n              [model]=\"model\"\n            ></opcua-device-protocol-data-reporting>\n          </div>\n        </div>\n        <div class=\"d-contents\">\n          <div class=\"card-header separator-top-bottom sticky-top\">\n            <div class=\"h4\" translate>Auto apply constraints</div>\n          </div>\n          <div class=\"p-l-16 p-r-16 p-t-16 overflow-visible\" ngModelGroup=\"autoApply\">\n            <opcua-auto-apply [model]=\"model\"></opcua-auto-apply>\n          </div>\n        </div>\n\n        <div class=\"card-footer sticky-bottom separator\" style=\"z-index: 101\">\n          <button\n            title=\"{{ 'Save' | translate }}\"\n            id=\"deviceTypeSave\"\n            class=\"btn btn-primary\"\n            (click)=\"save()\"\n            [disabled]=\"canSave(deviceTypeForm)\"\n            type=\"button\"\n          >\n            {{ 'Save' | translate }}\n          </button>\n        </div>\n      </div>\n    </form>\n  </div>\n</div>\n","import { Injectable } from '@angular/core';\n\nimport { AppStateService } from '@c8y/ngx-components';\n\n@Injectable()\nexport class OpcuaMicroserviceGuard {\n  microserviceName = 'opcua-mgmt-service';\n  checkApp: Promise<boolean>;\n\n  constructor(private app: AppStateService) {}\n\n  canActivate() {\n    if (!this.checkApp) {\n      this.checkApp = this.app.isApplicationAvailable(this.microserviceName);\n    }\n    return this.checkApp;\n  }\n}\n","export const NEW_SERVER_ID = 'new';\nexport interface OpcuaServer {\n  name: string;\n  id: string;\n  gatewayId?: string;\n  subtitle?: string;\n  connectionStatus?: any;\n  enabeled?: any;\n  config: OpcuaServerConfig;\n  quickInfo?: {\n    padlock?: string;\n    padlockMsg?: string;\n  };\n  active: true | false;\n}\n\nexport interface OpcuaServerConfig {\n  securityMode: string;\n  keystorePass?: any;\n  keystoreFilename?: string;\n  keystoreBinaryId?: any;\n  certificatePass?: any;\n  userIdentityMode?: string;\n  serverUrl?: string;\n  userName?: string;\n  userPassword?: string;\n  passwordEncrypted?: boolean;\n  rescanCron?: any;\n  timeout?: number;\n  autoReconnect?: boolean;\n  targetConnectionState?: 'enabled' | 'disabled' | null;\n  statusCheckInterval?: number;\n  valid?: boolean;\n  autoScanAddressSpace?: boolean;\n  partialAddressScanNodeIds?: Array<string>;\n  partialAddressScan?: boolean;\n}\n","import {\n  ChangeDetectorRef,\n  Component,\n  DestroyRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  signal,\n  ViewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormGroup, NgForm, FormsModule } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  DropAreaComponent,\n  DroppedFile,\n  ModalService,\n  Status,\n  EmptyStateComponent,\n  IconDirective,\n  FormGroupComponent,\n  RequiredInputPlaceholderDirective,\n  MessagesComponent,\n  MessageDirective,\n  C8yTranslateDirective,\n  DeviceStatusComponent,\n  DefaultValidationDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\nimport { cloneDeep, has } from 'lodash-es';\nimport { debounceTime, merge, Subject } from 'rxjs';\nimport { NEW_SERVER_ID, OpcuaServer, OpcuaServerConfig } from './opcua-server.interface';\nimport { OpcuaService } from './opcuaService';\nimport { NgIf, NgFor, NgClass } from '@angular/common';\nimport { ButtonCheckboxDirective } from 'ngx-bootstrap/buttons';\nimport { CollapseDirective } from 'ngx-bootstrap/collapse';\n\n@Component({\n  selector: 'opcua-server-config',\n  templateUrl: './opcua-server-config.component.html',\n  imports: [\n    NgIf,\n    EmptyStateComponent,\n    FormsModule,\n    IconDirective,\n    FormGroupComponent,\n    RequiredInputPlaceholderDirective,\n    MessagesComponent,\n    MessageDirective,\n    C8yTranslateDirective,\n    ButtonCheckboxDirective,\n    DeviceStatusComponent,\n    DefaultValidationDirective,\n    NgFor,\n    DropAreaComponent,\n    NgClass,\n    CollapseDirective,\n    FormlyModule,\n    C8yTranslatePipe\n  ]\n})\nexport class OpcuaServerConfigComponent implements OnInit, OnChanges {\n  currentSecMode: string;\n  fileName = '';\n  targetConnectionState = '1';\n  minIntervalNumber = 1;\n  connectionStatusLabel = '';\n  autoScanAddressSpace = '0';\n  advancedSettings = false;\n  advancedSettingsForm = new FormGroup({});\n  advancedSettingsFields: FormlyFieldConfig[] = [];\n  isNew = signal<boolean>(false);\n  @ViewChild('opcuaConfigForm', { static: false }) set opcuaConfigForm(opcuaConfigForm: NgForm) {\n    if (opcuaConfigForm) {\n      opcuaConfigForm.form.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(e => {\n        this.opcuaConfigFormValueChange$.next(e);\n      });\n    }\n  }\n  @ViewChild(DropAreaComponent, { static: false }) dropArea: DropAreaComponent;\n  @Output() canceled = new EventEmitter<OpcuaServer>();\n  @Output() removed = new EventEmitter<OpcuaServer>();\n  @Output() saved = new EventEmitter<OpcuaServer>();\n  @Output() updated = new EventEmitter<OpcuaServer>();\n  @Input() set server(server: OpcuaServer) {\n    this._server = cloneDeep(server);\n    if (server) {\n      this.isNew.set(server.id === NEW_SERVER_ID);\n      this.model = cloneDeep(server);\n      this.fileName = this.model.config.keystoreFilename;\n\n      if (this.isNew()) {\n        // enabled connection state\n        this.targetConnectionState = this.targetConnectionState ?? '1';\n        this.model.config.targetConnectionState =\n          this.model.config.targetConnectionState ?? 'enabled';\n        this.model.config.statusCheckInterval = this.model.config.statusCheckInterval ?? 40;\n        this.model.config.timeout = this.model.config.timeout ?? 30;\n        this.model.config.autoScanAddressSpace = this.model.config.autoScanAddressSpace ?? true;\n        this.model.config.partialAddressScan = this.model.config.partialAddressScan ?? false;\n      } else {\n        this.targetConnectionState =\n          this.model.config.targetConnectionState === 'enabled' ? '1' : '0';\n      }\n      this.updateConnectionStatusLabel(this._server);\n      this.setNewPassword();\n    }\n  }\n\n  get server(): OpcuaServer {\n    return this._server;\n  }\n  model: OpcuaServer;\n  changePassword = false;\n  initialPasswordRequired = true;\n  securityModes: string[];\n  authenticationMode: any;\n  authenticationModes: any[];\n  NONE = 'NONE';\n  SIGN = 'SIGN';\n  SIGN_ENC = 'SIGN_ENCRYPT';\n  securityPolicies: any = {\n    sign: [`BASIC256_${this.SIGN}`, `BASIC128RSA15_${this.SIGN}`, `BASIC256SHA256_${this.SIGN}`],\n    sign_enc: [\n      `BASIC256_${this.SIGN_ENC}`,\n      `BASIC128RSA15_${this.SIGN_ENC}`,\n      `BASIC256SHA256_${this.SIGN_ENC}`\n    ]\n  };\n  private ANONYM = {\n    id: 1,\n    value: gettext('Anonymous')\n  };\n  private USER_PASSWORD = {\n    id: 2,\n    value: gettext('Username/Password')\n  };\n  private KEY_BASED = {\n    id: 3,\n    value: gettext('Key-based Authentication')\n  };\n  private _server: OpcuaServer;\n  private initialKeystore = {\n    lastModified: 0,\n    name: '',\n    type: '',\n    slice: null,\n    size: 0\n  } as File;\n  private keystore: File = this.initialKeystore;\n  private authSwitch = false;\n  private opcuaConfigFormValueChange$ = new Subject();\n  private opcuaConfigFormChangesSubscribed = false;\n  private destroyRef = inject(DestroyRef);\n\n  constructor(\n    private opcuaService: OpcuaService,\n    private modalService: ModalService,\n    private alertService: AlertService,\n    private readonly changeDetectorRef: ChangeDetectorRef\n  ) {\n    this.advancedSettingsFields = this.getAdvancedSettingsFields();\n  }\n\n  async ngOnInit() {\n    this.authSwitch = false;\n\n    this.securityModes = [this.NONE, this.SIGN, this.SIGN_ENC];\n\n    this.authenticationModes = [this.ANONYM, this.USER_PASSWORD, this.KEY_BASED];\n\n    this.setCurrentAuthenticationMode();\n    this.setCurrentSecurityMode();\n  }\n\n  ngOnChanges() {\n    this.setCurrentSecurityMode();\n    this.setCurrentAuthenticationMode();\n  }\n\n  ngAfterViewChecked(): void {\n    this.changeDetectorRef.detectChanges();\n\n    if (!this.opcuaConfigFormChangesSubscribed) {\n      merge(this.opcuaConfigFormValueChange$, this.advancedSettingsForm.valueChanges)\n        .pipe(debounceTime(300), takeUntilDestroyed(this.destroyRef))\n        .subscribe(() => this.updated.emit(this.model));\n      this.opcuaConfigFormChangesSubscribed = true;\n    }\n  }\n\n  cancel(): void {\n    this.advancedSettingsForm.reset();\n    this.canceled.emit(this.model);\n    this._server = null;\n  }\n\n  async remove() {\n    try {\n      await this.modalService.confirm(\n        gettext('Delete server'),\n        gettext(\"You're about to delete server. Do you want to proceed?\"),\n        Status.DANGER,\n        {\n          ok: gettext('Delete'),\n          cancel: gettext('Cancel')\n        }\n      );\n      await this.removeKeystore(this.model);\n      this.removed.emit(this.model);\n      this._server = null;\n    } catch (ex) {\n      if (ex) {\n        this.alertService.addServerFailure(ex);\n      }\n    }\n  }\n\n  async save() {\n    if (\n      this.keystore &&\n      this.keystore.size > 0 &&\n      this.keystore.name &&\n      this.keystore.name.length > 0\n    ) {\n      const response = await this.uploadKeystore(this.model.config.keystoreBinaryId);\n\n      if (response && response.data && response.data.id) {\n        this.model.config.keystoreBinaryId = response.data.id;\n      }\n\n      // if the keystore was uploaded successful we can remove\n      // the local keystore. This will prevent another request to binary api\n      // when the user will edit other inputs in the form and hit save again.\n      this.keystore = this.initialKeystore;\n    }\n\n    // will remove any empty or undefined strings from the UI before saving it to the config\n    function notEmpty<TValue>(value: TValue | null | undefined | string): value is TValue {\n      return value !== null && value !== undefined && value != '';\n    }\n\n    // clean up array of empty strings\n    this.model.config.partialAddressScanNodeIds = (\n      this.model.config.partialAddressScanNodeIds || []\n    ).filter(notEmpty);\n\n    // will remove keystore (binary) when the user switched\n    // authentication settings from key-based to anonymous or username/password\n    if (this.authSwitch) {\n      this.removeKeystore(this.server);\n    }\n\n    // when the user sets a new password, make sure to mark it as\n    // \"not encrypted\" by setting passwordEncrypted to false\n    const userPassword: string = this.getModelConfig('userPassword');\n    if (userPassword && userPassword.length > 0) {\n      this.model.config.passwordEncrypted = false;\n    }\n\n    this.saved.emit(this.model);\n  }\n\n  uploadFile(droppedFiles: DroppedFile[]) {\n    if (droppedFiles.length === 1) {\n      this.keystore = droppedFiles[0].file;\n      this.fileName = this.keystore.name;\n    } else {\n    }\n  }\n\n  setPolicy(data: any) {\n    if (data === this.NONE) {\n      this.model.config.securityMode = this.NONE;\n    } else if (data === this.SIGN) {\n      this.model.config.securityMode = this.securityPolicies.sign[0];\n    } else if (data === this.SIGN_ENC) {\n      this.model.config.securityMode = this.securityPolicies.sign_enc[0];\n    }\n  }\n\n  setServerConnection(data: string) {\n    this.model.config.targetConnectionState = data !== '0' ? 'enabled' : 'disabled';\n  }\n\n  updateAuthentication(data: any) {\n    if (data && data.id) {\n      switch (data.id) {\n        // Anonymous\n        case 1:\n          this.resetUserAuthentication();\n          this.resetKeyBasedAuthentication();\n          break;\n\n        // User/Password\n        case 2:\n          this.resetKeyBasedAuthentication();\n          this.restoreUserData();\n          this.setNewPassword();\n          break;\n\n        // Key-based\n        case 3:\n          this.resetUserAuthentication();\n          this.restoreKeyBasedData();\n          break;\n\n        default:\n          break;\n      }\n    }\n  }\n\n  updateConnectionStatusLabel(server) {\n    const connected = server.c8y_Connection && server.c8y_Connection.status === 'CONNECTED';\n    const label = connected ? gettext('Connected') : gettext('Disconnected');\n    this.connectionStatusLabel = label;\n  }\n\n  setNewPassword() {\n    const username: string = this.getModelConfig('userName');\n    if (username && username.length > 0) {\n      // userName is given, NO need to change the password because it is already set\n      this.changePassword = false;\n      this.initialPasswordRequired = false;\n    } else {\n      // no userName in response, so require the user to set the initial pw\n      this.changePassword = true;\n      this.initialPasswordRequired = true;\n    }\n  }\n\n  toggleChangePassword() {\n    this.changePassword = !this.changePassword;\n    // When the user hides the pw-input field but has entered a\n    // string to it before, we need to discard the changes reflected in the model\n    // otherwise we PUT it with the model when user hits the save button\n    if (!this.changePassword) {\n      if (this.getModelConfig('userPassword')) {\n        delete this.model.config.userPassword;\n      }\n    }\n  }\n\n  private uploadKeystore(binaryId?: string) {\n    if (!binaryId) {\n      return this.opcuaService.uploadKeystore(this.keystore);\n    } else if (binaryId && binaryId.length > 0) {\n      // update existing binary\n      return this.opcuaService.updateKeystore(binaryId, this.keystore);\n    }\n  }\n\n  private removeKeystore(server: OpcuaServer) {\n    if (\n      server &&\n      server.config &&\n      server.config.keystoreBinaryId &&\n      server.config.keystoreBinaryId.length > 0\n    ) {\n      this.authSwitch = false;\n      return this.opcuaService.removeKeystore(this.server.config.keystoreBinaryId);\n    }\n  }\n\n  private resetUserAuthentication() {\n    this.model.config.userName = null;\n    this.model.config.userPassword = null;\n    this.model.config.userIdentityMode = 'none';\n  }\n\n  private resetKeyBasedAuthentication() {\n    this.authSwitch = true;\n\n    this.model.config.keystorePass = null;\n    this.model.config.certificatePass = null;\n    this.model.config.keystoreBinaryId = '';\n    this.model.config.keystoreFilename = '';\n    this.model.config.userIdentityMode = 'none';\n  }\n\n  private restoreUserData() {\n    this.model.config.userName = this._server.config.userName;\n    this.model.config.userIdentityMode = 'userAndPassword';\n  }\n\n  private restoreKeyBasedData() {\n    this.authSwitch = false;\n    this.model.config.keystorePass = this._server.config.keystorePass;\n    this.model.config.certificatePass = this._server.config.certificatePass;\n    this.model.config.keystoreBinaryId = this._server.config.keystoreBinaryId;\n    this.model.config.keystoreFilename = this._server.config.keystoreFilename;\n    this.model.config.userIdentityMode = 'certificate';\n  }\n\n  private getServerConfig(): OpcuaServerConfig {\n    let cfg: OpcuaServerConfig = {\n      securityMode: this.NONE,\n      userIdentityMode: 'none'\n    };\n    if (this.server && this.server.config) {\n      cfg = this.server.config;\n    }\n    return cfg;\n  }\n\n  private setCurrentSecurityMode() {\n    const { securityMode } = this.getServerConfig();\n    if (securityMode) {\n      const foundInSign = this.securityPolicies.sign.find(el => el === securityMode);\n      if (foundInSign) {\n        this.currentSecMode = this.SIGN;\n      } else {\n        const foundInSignEncrypt = this.securityPolicies.sign_enc.find(el => el === securityMode);\n        foundInSignEncrypt\n          ? (this.currentSecMode = this.SIGN_ENC)\n          : (this.currentSecMode = this.NONE);\n      }\n    }\n  }\n\n  private setCurrentAuthenticationMode() {\n    const { userIdentityMode } = this.getServerConfig();\n\n    switch (userIdentityMode) {\n      case 'certificate':\n        this.authenticationMode = this.KEY_BASED;\n        break;\n\n      case 'userAndPassword':\n        this.authenticationMode = this.USER_PASSWORD;\n        break;\n\n      case 'Anonymous':\n        this.authenticationMode = this.ANONYM;\n        break;\n\n      case 'UserName':\n        this.authenticationMode = this.USER_PASSWORD;\n        break;\n\n      case 'Certificate':\n        this.authenticationMode = this.KEY_BASED;\n        break;\n\n      default:\n        this.authenticationMode = this.ANONYM;\n        break;\n    }\n  }\n\n  private getModelConfig(fragment: string) {\n    if (this.model && this.model.config) {\n      if (fragment && fragment.length > 0) {\n        return has(this.model.config, fragment) ? this.model.config[`${fragment}`] : undefined;\n      }\n    }\n    return undefined;\n  }\n\n  private getAdvancedSettingsFields(): FormlyFieldConfig[] {\n    return [\n      {\n        fieldGroupClassName: 'tight-grid',\n        fieldGroup: [\n          {\n            key: 'timeout',\n            type: 'number',\n            className: 'col-xs-6',\n            props: {\n              label: gettext('Timeout'),\n              placeholder: '30',\n              required: true,\n              min: this.minIntervalNumber,\n              addonRight: {\n                text: gettext('seconds')\n              }\n            }\n          },\n          {\n            key: 'statusCheckInterval',\n            type: 'number',\n            className: 'col-xs-6',\n            props: {\n              label: gettext('Status check interval'),\n              placeholder: '40',\n              required: true,\n              min: this.minIntervalNumber,\n              addonRight: {\n                text: gettext('seconds')\n              }\n            }\n          }\n        ]\n      },\n      {\n        fieldGroupClassName: 'row',\n        fieldGroup: [\n          {\n            key: 'autoScanAddressSpace',\n            type: 'checkbox',\n            className: 'col-sm-6',\n            props: {\n              label: gettext('Auto scan address space'),\n              indeterminate: false\n            }\n          },\n          {\n            key: 'partialAddressScan',\n            type: 'radio',\n            className: 'col-sm-6',\n            props: {\n              label: gettext('Address scan type'),\n              options: [\n                { label: gettext('Partial'), value: true },\n                { label: gettext('Full'), value: false }\n              ]\n            }\n          }\n        ]\n      },\n      {\n        key: 'partialAddressScanNodeIds',\n        type: 'array',\n        props: {\n          label: gettext('Partial address scan nodes'),\n          description: gettext(\n            'Add node IDs to be scanned in the address space of the OPC UA server'\n          ),\n          required: true\n        },\n        fieldArray: {\n          type: 'string',\n          props: {\n            label: gettext('Node ID'),\n            placeholder: 'ns=2;s=Node1',\n            required: true\n          }\n        },\n        expressions: {\n          hide: ({ parent }) => !parent?.model?.partialAddressScan\n        }\n      }\n    ];\n  }\n}\n","<c8y-ui-empty-state\n  [icon]=\"'server'\"\n  [title]=\"'No server to display.' | translate\"\n  [subtitle]=\"'Add or select a server.' | translate\"\n  *ngIf=\"!server\"\n></c8y-ui-empty-state>\n\n<form\n  class=\"d-contents\"\n  #opcuaConfigForm=\"ngForm\"\n  *ngIf=\"server\"\n>\n  <div class=\"card-header large-padding separator sticky-top visible-sm visible-xs\">\n    <button\n      class=\"btn btn-clean text-primary visible-sm visible-xs\"\n      title=\"{{ 'Back' | translate }}\"\n      type=\"button\"\n      (click)=\"cancel()\"\n    >\n      <i c8yIcon=\"chevron-left\"></i>\n      {{ 'Back' | translate }}\n    </button>\n  </div>\n  <div class=\"flex-grow\">\n    <div class=\"card-block large-padding\">\n      <!-- SERVER NAME -->\n      <c8y-form-group class=\"m-b-8\">\n        <label>{{ 'Server name' | translate }}</label>\n        <input\n          class=\"form-control\"\n          id=\"name\"\n          placeholder=\"{{ 'e.g. My server' | translate }}\"\n          name=\"name\"\n          type=\"text\"\n          required\n          [(ngModel)]=\"model.name\"\n        />\n        <c8y-messages>\n          <c8y-message\n            name=\"required\"\n            text=\"{{ 'Server name is required' | translate }}\"\n          ></c8y-message>\n        </c8y-messages>\n      </c8y-form-group>\n    </div>\n\n    <div class=\"card-block large-padding bg-level-2\">\n      <div class=\"tight-grid\">\n        <div class=\"col-sm-6\">\n          <label\n            class=\"fit-w\"\n            translate\n          >\n            Server connection\n          </label>\n          <button\n            class=\"btn m-t-4\"\n            name=\"serverConnection\"\n            type=\"button\"\n            [(ngModel)]=\"targetConnectionState\"\n            (ngModelChange)=\"setServerConnection($event)\"\n            btnCheckbox\n            btnCheckboxTrue=\"1\"\n            btnCheckboxFalse=\"0\"\n          >\n            <span\n              title=\"{{ 'Enabled' | translate }}\"\n              [hidden]=\"targetConnectionState !== '1'\"\n            >\n              {{ 'Enabled' | translate }}\n            </span>\n            <span\n              title=\"{{ 'Disabled' | translate }}\"\n              [hidden]=\"targetConnectionState !== '0'\"\n            >\n              {{ 'Disabled' | translate }}\n            </span>\n          </button>\n        </div>\n        <div class=\"col-sm-6\">\n          <label translate>Connection status</label>\n          <div class=\"form-control-static\">\n            <device-status\n              class=\"p-r-8\"\n              [mo]=\"server\"\n            ></device-status>\n            <span>{{ connectionStatusLabel | translate }}</span>\n          </div>\n        </div>\n      </div>\n    </div>\n    <div class=\"card-block large-padding\">\n      <!-- SERVER URL-->\n      <c8y-form-group>\n        <label\n          for=\"configServerUrl\"\n          translate\n        >\n          Server URL\n        </label>\n        <input\n          class=\"form-control\"\n          id=\"configServerUrl\"\n          name=\"serverUrl\"\n          type=\"text\"\n          required\n          [(ngModel)]=\"model.config.serverUrl\"\n          c8yDefaultValidation=\"opcuaBrowsePath\"\n        />\n      </c8y-form-group>\n\n      <!-- SECURITY MODE -->\n      <div class=\"tight-grid\">\n        <div class=\"col-md-6\">\n          <div class=\"form-group\">\n            <!-- NONE, SIGN, SIGN & ENCRYPT-->\n            <label\n              for=\"config.securityMode\"\n              translate\n            >\n              Security mode\n            </label>\n            <div class=\"c8y-select-wrapper\">\n              <select\n                class=\"form-control\"\n                id=\"config.securityMode\"\n                name=\"securityMode\"\n                required\n                [(ngModel)]=\"currentSecMode\"\n                (ngModelChange)=\"setPolicy($event)\"\n              >\n                <option\n                  *ngFor=\"let mode of securityModes\"\n                  [ngValue]=\"mode\"\n                >\n                  {{ mode }}\n                </option>\n              </select>\n              <span></span>\n            </div>\n          </div>\n        </div>\n        <div\n          class=\"col-md-6\"\n          *ngIf=\"currentSecMode === NONE\"\n        >\n          <div class=\"form-group\">\n            <label\n              for=\"config.securityPolicy\"\n              translate\n            >\n              Security policy\n            </label>\n            <input\n              class=\"form-control\"\n              id=\"config.securityPolicy\"\n              name=\"securityPolicy\"\n              type=\"text\"\n              required\n              [readonly]=\"true\"\n              [(ngModel)]=\"model.config.securityMode\"\n            />\n          </div>\n        </div>\n        <div\n          class=\"col-md-6\"\n          *ngIf=\"currentSecMode !== NONE\"\n        >\n          <div class=\"form-group\">\n            <label\n              for=\"config.securityPolicy\"\n              translate\n            >\n              Security policy\n            </label>\n            <div class=\"c8y-select-wrapper\">\n              <select\n                class=\"form-control\"\n                id=\"config.securityPolicy\"\n                name=\"securityPolicy\"\n                required\n                *ngIf=\"currentSecMode === SIGN\"\n                [(ngModel)]=\"model.config.securityMode\"\n              >\n                <option\n                  *ngFor=\"let policy of securityPolicies.sign\"\n                  [ngValue]=\"policy\"\n                >\n                  {{ policy }}\n                </option>\n              </select>\n              <select\n                class=\"form-control\"\n                id=\"config.securityPolicy\"\n                name=\"securityPolicy\"\n                required\n                *ngIf=\"currentSecMode === SIGN_ENC\"\n                [(ngModel)]=\"model.config.securityMode\"\n              >\n                <option\n                  *ngFor=\"let policy of securityPolicies.sign_enc\"\n                  [ngValue]=\"policy\"\n                >\n                  {{ policy }}\n                </option>\n              </select>\n              <span></span>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- AUTHENTICATION -->\n      <div class=\"row tight-grid\">\n        <div class=\"col-md-6\">\n          <div class=\"form-group\">\n            <label\n              for=\"config.authenticationMode\"\n              translate\n            >\n              Authentication\n            </label>\n            <div class=\"c8y-select-wrapper\">\n              <select\n                class=\"form-control\"\n                id=\"config.authenticationMode\"\n                name=\"authenticationMode\"\n                required\n                [(ngModel)]=\"authenticationMode\"\n                (ngModelChange)=\"updateAuthentication($event)\"\n              >\n                <option\n                  *ngFor=\"let auth of authenticationModes\"\n                  [ngValue]=\"auth\"\n                >\n                  {{ auth.value | translate }}\n                </option>\n              </select>\n              <span></span>\n            </div>\n          </div>\n        </div>\n      </div>\n      <!-- User/Pw-->\n      <div\n        class=\"tight-grid\"\n        *ngIf=\"authenticationMode.id === 2\"\n      >\n        <div class=\"col-md-6\">\n          <div class=\"form-group\">\n            <label\n              for=\"config.userName\"\n              translate\n            >\n              Username\n            </label>\n            <input\n              class=\"form-control\"\n              id=\"config.userName\"\n              placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n              name=\"userName\"\n              type=\"text\"\n              autocomplete=\"new-password\"\n              required\n              [(ngModel)]=\"model.config.userName\"\n            />\n          </div>\n        </div>\n\n        <!-- change password section BEGINS-->\n        <div class=\"col-md-6\">\n          <div\n            class=\"form-group\"\n            *ngIf=\"!initialPasswordRequired\"\n          >\n            <button\n              class=\"btn btn-default\"\n              type=\"button\"\n              (click)=\"toggleChangePassword()\"\n            >\n              <ng-container *ngIf=\"!changePassword\">\n                {{ 'Change password' | translate }}\n              </ng-container>\n              <ng-container *ngIf=\"changePassword\">\n                {{ 'Cancel password change' | translate }}\n              </ng-container>\n            </button>\n          </div>\n\n          <div class=\"form-group\">\n            <div *ngIf=\"changePassword\">\n              <label\n                for=\"config.password\"\n                translate\n              >\n                Password\n              </label>\n              <input\n                class=\"form-control\"\n                id=\"config.userPassword\"\n                name=\"password\"\n                type=\"password\"\n                autocomplete=\"new-password\"\n                required\n                [(ngModel)]=\"model.config.userPassword\"\n              />\n            </div>\n          </div>\n        </div>\n        <!-- change password section ENDS-->\n      </div>\n\n      <!-- Key-based -->\n      <div\n        class=\"tight-grid\"\n        *ngIf=\"authenticationMode.id === 3\"\n      >\n        <!-- KEYSTORE PASSWORD -->\n        <div class=\"col-md-6\">\n          <div class=\"form-group\">\n            <label\n              for=\"config.keystorePass\"\n              translate\n            >\n              Keystore password\n            </label>\n            <input\n              class=\"form-control\"\n              id=\"config.keystorePass\"\n              name=\"keystorePass\"\n              type=\"password\"\n              required\n              [(ngModel)]=\"model.config.keystorePass\"\n            />\n          </div>\n        </div>\n        <div class=\"col-md-6\">\n          <div class=\"form-group\">\n            <label\n              for=\"config.certificatePass\"\n              translate\n            >\n              Certificate password\n            </label>\n            <input\n              class=\"form-control\"\n              id=\"config.certificatePass\"\n              name=\"keystorePass\"\n              type=\"password\"\n              required\n              [(ngModel)]=\"model.config.certificatePass\"\n            />\n          </div>\n        </div>\n        <!-- UPLOAD KEYSTORE -->\n        <div class=\"col-md-12\">\n          <div class=\"form-group\">\n            <label\n              for=\"certificateUpload\"\n              translate\n            >\n              Upload keystore\n            </label>\n            <input\n              class=\"form-control m-b-8\"\n              placeholder=\"{{ 'e.g.' | translate }} yourKeystore.jks\"\n              name=\"certificateUpload\"\n              type=\"text\"\n              required\n              [readonly]=\"true\"\n              [ngModel]=\"fileName\"\n            />\n            <c8y-drop-area\n              [title]=\"'Import keystore with jks file extension' | translate\"\n              (dropped)=\"uploadFile($event)\"\n              [loadingMessage]=\"'Importing, please wait.' | translate\"\n            ></c8y-drop-area>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"form-group m-b-0 d-flex a-i-center\">\n        <button\n          class=\"btn btn-dot collapse-btn\"\n          title=\"{{ (advancedSettings ? collapse : expand) | translate }}\"\n          [attr.aria-label]=\"(advancedSettings ? collapse : expand) | translate\"\n          [attr.aria-expanded]=\"advancedSettings\"\n          [ngClass]=\"{ active: advancedSettings }\"\n          (click)=\"advancedSettings = !advancedSettings\"\n          data-cy=\"opcua-server-config--advanced-settings-toggle\"\n        >\n          <i c8yIcon=\"chevron-right\"></i>\n        </button>\n        <label class=\"m-0\">\n          <span>{{ 'Advanced settings' | translate }}</span>\n        </label>\n      </div>\n    </div>\n\n    <div\n      class=\"card-block collapse\"\n      [collapse]=\"!advancedSettings\"\n      [isAnimated]=\"true\"\n      [ngClass]=\"{ 'bg-level-1': advancedSettings }\"\n    >\n      <formly-form\n        [form]=\"advancedSettingsForm\"\n        [fields]=\"advancedSettingsFields\"\n        [model]=\"model.config\"\n      ></formly-form>\n    </div>\n  </div>\n  <div class=\"card-footer large-padding separator sticky-bottom\">\n    <button\n      class=\"btn btn-default\"\n      title=\"{{ 'Cancel' | translate }}\"\n      type=\"button\"\n      (click)=\"cancel()\"\n    >\n      {{ 'Cancel' | translate }}\n    </button>\n    <button\n      class=\"btn btn-danger\"\n      title=\"{{ 'Remove' | translate }}\"\n      type=\"button\"\n      (click)=\"remove()\"\n      [disabled]=\"isNew()\"\n    >\n      {{ 'Remove' | translate }}\n    </button>\n    <button\n      class=\"btn btn-primary\"\n      title=\"{{ 'Save' | translate }}\"\n      type=\"submit\"\n      (click)=\"save()\"\n      [disabled]=\"!opcuaConfigForm.valid || !advancedSettingsForm.valid\"\n    >\n      {{ 'Save' | translate }}\n    </button>\n  </div>\n</form>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { OpcuaServer } from './opcua-server.interface';\nimport { NgIf, NgFor } from '@angular/common';\nimport {\n  EmptyStateComponent,\n  IconDirective,\n  DeviceStatusComponent,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\n\n@Component({\n  selector: 'opcua-server-list',\n  templateUrl: './opcua-server-list.component.html',\n  imports: [\n    NgIf,\n    EmptyStateComponent,\n    NgFor,\n    IconDirective,\n    DeviceStatusComponent,\n    TooltipDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class OpcuaServerListComponent {\n  @Input() serverList: OpcuaServer[] = [];\n  @Output() present = new EventEmitter<OpcuaServer>();\n\n  presentConfig(server: OpcuaServer) {\n    server.active = true;\n    this.present.emit(server);\n  }\n}\n","<!-- add active class to c8y-stacked-item when clicked -->\n<div class=\"card-block\" *ngIf=\"serverList.length === 0\">\n  <c8y-ui-empty-state\n    class=\"m-l-auto p-l-8 d-flex p-r-16\"\n    [icon]=\"'server'\"\n    [title]=\"'No servers found.' | translate\"\n    [subtitle]=\"'Click below to add a new server.' | translate\"\n  ></c8y-ui-empty-state>\n</div>\n<div\n  class=\"c8y-stacked-item\"\n  [class.active]=\"server.active\"\n  *ngFor=\"let server of serverList\"\n  (click)=\"presentConfig(server)\"\n>\n  <i [c8yIcon]=\"'server'\" class=\"icon-20\"></i>\n  <div class=\"p-l-16 text-truncate\">\n    <p id=\"serverName\" class=\"text-truncate\">{{ server.name }}</p>\n    <small id=\"serverUrl\" class=\"text-truncate text-muted\">{{ server.config.serverUrl }}</small>\n  </div>\n  <div class=\"m-l-auto p-l-8 d-flex p-r-16 a-i-center\">\n    <device-status class=\"p-r-8\" [mo]=\"server\"></device-status>\n    <button\n      class=\"btn btn-dot text-gray-darker\"\n      type=\"button\"\n      [attr.aria-label]=\"server.quickInfo.padlockMsg | translate\"\n      tooltip=\"{{ server.quickInfo.padlockMsg | translate }}\"\n      placement=\"left\"\n      container=\"body\"\n    >\n      <i [c8yIcon]=\"server.quickInfo.padlock\"></i>\n    </button>\n  </div>\n</div>\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class OpcuaServerGuard {\n  type = 'c8y_OpcuaServer';\n  canActivate({ data }) {\n    const { contextData } = data;\n    return contextData && contextData.type === this.type;\n  }\n}\n","import { Component, OnInit, Optional } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  ContextRouteComponent,\n  IconDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep } from 'lodash';\nimport { NEW_SERVER_ID, OpcuaServer } from './opcua-server.interface';\nimport { OpcuaService } from './opcuaService';\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\nimport { OpcuaServerListComponent } from './opcua-server-list.component';\nimport { OpcuaServerConfigComponent } from './opcua-server-config.component';\nimport { NgClass } from '@angular/common';\n\n@Component({\n  selector: 'opcua-servers',\n  templateUrl: './opcua-servers.component.html',\n  imports: [\n    PopoverDirective,\n    OpcuaServerListComponent,\n    IconDirective,\n    OpcuaServerConfigComponent,\n    NgClass,\n    C8yTranslatePipe\n  ]\n})\nexport class OpcuaServersComponent implements OnInit {\n  serverObjectList: OpcuaServer[] = [];\n  initialServerObject: OpcuaServer = {\n    id: NEW_SERVER_ID,\n    name: gettext('New Server'),\n    config: {\n      securityMode: 'NONE',\n      keystorePass: null,\n      keystoreBinaryId: null,\n      keystoreFilename: '',\n      certificatePass: null,\n      serverUrl: '',\n      userName: '',\n      userPassword: '',\n      rescanCron: null,\n      timeout: 30,\n      statusCheckInterval: 40,\n      autoReconnect: true,\n      autoScanAddressSpace: true,\n      partialAddressScan: false,\n      valid: true\n    },\n    quickInfo: {\n      padlock: 'unlock',\n      padlockMsg: ''\n    },\n    active: true\n  };\n  server: OpcuaServer;\n  active = false;\n  private moId = '';\n\n  constructor(\n    private opcuaService: OpcuaService,\n    private alertService: AlertService,\n    private translateService: TranslateService,\n    @Optional() private context: ContextRouteComponent\n  ) {}\n\n  async ngOnInit() {\n    this.moId = this.opcuaService.getMoId();\n    if (this.moId && this.moId.length > 0) {\n      const res = await this.opcuaService.getServers(this.moId);\n      if (res && res.status !== 200) {\n        const data = res.json ? await res.json() : undefined;\n        this.alertService.addServerFailure({ data, res });\n      } else {\n        this.serverObjectList = (await res.json()) as OpcuaServer[];\n        this.serverObjectList.map(server => this.setQuickInfo(server));\n        this.onPresent(this.serverObjectList[0], false);\n      }\n    }\n  }\n\n  localServerObjectExist() {\n    return !!this.serverObjectList.find(server => server.id === NEW_SERVER_ID);\n  }\n\n  addServer() {\n    const server: OpcuaServer = cloneDeep(this.initialServerObject);\n    this.serverObjectList.push(server);\n    this.onPresent(server);\n  }\n\n  onSaved(server: OpcuaServer) {\n    if (server && server.id) {\n      server.gatewayId = this.moId;\n      if (server.id === NEW_SERVER_ID) {\n        this.createServer(server);\n      } else {\n        this.updateServer(server);\n      }\n    }\n  }\n\n  onUpdated(server: OpcuaServer) {\n    if (server.id === NEW_SERVER_ID) {\n      this.serverObjectList.forEach(item => {\n        if (item.id === server.id) {\n          item.name = server.name;\n          item.config = server.config;\n          this.setQuickInfo(item);\n        }\n      });\n    }\n  }\n\n  reloadTabs() {\n    if (this.context) {\n      this.context.refreshTabs();\n    }\n  }\n\n  onCanceled(server: OpcuaServer) {\n    if (server?.id === NEW_SERVER_ID) {\n      this.removeServerObjectListById(server.id);\n    } else {\n      // update activity status for UI\n      this.serverObjectList.forEach(item => {\n        if (item.id === server.id) {\n          item.active = false;\n        }\n      });\n      // When server id is not 'new' we just close the details\n      delete this.server;\n    }\n  }\n\n  onRemoved(server: OpcuaServer) {\n    if (server.id === NEW_SERVER_ID) {\n      this.onCanceled(server);\n    } else {\n      this.removeServer(server);\n    }\n  }\n\n  async getKeystore(binaryId: string) {\n    const { data } = await this.opcuaService.getKeystore(binaryId);\n    return data;\n  }\n\n  async onPresent(server: OpcuaServer, overridePresent = true) {\n    if (server && server.id !== NEW_SERVER_ID && server.config && server.config.keystoreBinaryId) {\n      try {\n        const mo = await this.getKeystore(server.config.keystoreBinaryId);\n        server.config.keystoreFilename = mo.name;\n      } catch (ex) {\n        this.server = Object.assign({}, server);\n      }\n    }\n    if (this.serverObjectList.length > 0) {\n      this.serverObjectList.forEach(item => {\n        item.active = false;\n\n        if (item.id === server.id) {\n          item.active = true;\n          server.active = item.active;\n        }\n      });\n      this.setQuickInfo(server);\n      if (overridePresent || !this.server) {\n        this.server = Object.assign({}, server);\n      }\n    }\n  }\n\n  private async createServer(server: OpcuaServer) {\n    const response = await this.opcuaService.createServer(server);\n    const svr = (await response.json()) as OpcuaServer;\n    this.updateServerObjectListById(NEW_SERVER_ID, svr);\n    this.onPresent(svr);\n    this.reloadTabs();\n  }\n\n  private async updateServer(server: OpcuaServer) {\n    const updatedServer = (await this.opcuaService.updateServer(server)) as OpcuaServer;\n    if (updatedServer) {\n      this.updateServerObjectListById(updatedServer.id, updatedServer);\n    }\n  }\n\n  private async removeServer(server: OpcuaServer) {\n    try {\n      await this.opcuaService.removeServer(server);\n      this.removeServerObjectListById(server.id);\n      this.reloadTabs();\n    } catch (ex) {}\n  }\n\n  private removeServerObjectListById(id: string) {\n    this.serverObjectList.forEach((item, index) => {\n      if (item.id === id) {\n        this.serverObjectList.splice(index, 1);\n        delete this.server;\n      }\n    });\n  }\n\n  private updateServerObjectListById(id: string, server: OpcuaServer) {\n    const idx = this.serverObjectList.findIndex(item => item.id === id);\n    if (idx > -1) {\n      this.setQuickInfo(server);\n      this.serverObjectList[idx] = server;\n    }\n    delete this.server;\n  }\n\n  private setQuickInfo(server: OpcuaServer) {\n    server.quickInfo = {\n      padlock: 'unlock',\n      padlockMsg: ''\n    };\n\n    if (server && server.config) {\n      if (server.config.securityMode) {\n        server.quickInfo.padlock = server.config.securityMode !== 'NONE' ? 'lock' : 'unlock';\n        server.quickInfo.padlockMsg = this.translateService.instant(\n          gettext('The security policy is set to {{param}}.'),\n          { param: server.config.securityMode }\n        );\n      }\n    }\n  }\n}\n","<div class=\"card content-fullpage split-view--5-7\">\n  <div class=\"card-header grid__col--fullspan separator\">\n    <div class=\"h4 card-title\">OPC UA servers</div>\n    <button\n      class=\"btn-help\"\n      [attr.aria-label]=\"'Help' | translate\"\n      popover=\"{{\n        'Below you can configure one or more OPC UA servers. The OPC UA agent will connect to these servers if they are enabled and the connection state is set to connected.'\n          | translate\n      }}\"\n      placement=\"right\"\n      triggers=\"focus\"\n      type=\"button\"\n    ></button>\n  </div>\n  <div class=\"inner-scroll split-view__list\">\n    <div class=\"bg-level-1 flex-grow\">\n      <div class=\"c8y-nav-stacked\">\n        <opcua-server-list\n          [serverList]=\"serverObjectList\"\n          (present)=\"onPresent($event)\"\n        ></opcua-server-list>\n      </div>\n    </div>\n    <div class=\"card-footer separator sticky-bottom\">\n      <button\n        class=\"btn btn-default\"\n        title=\"{{ 'Add server' | translate }}\"\n        type=\"button\"\n        [disabled]=\"localServerObjectExist()\"\n        (click)=\"addServer()\"\n      >\n        <i [c8yIcon]=\"'plus-circle'\"></i>\n        {{ 'Add server' | translate }}\n      </button>\n    </div>\n  </div>\n\n  <opcua-server-config\n    class=\"inner-scroll split-view__detail\"\n    [ngClass]=\"{ 'split-view__detail--selected': server }\"\n    (canceled)=\"onCanceled($event)\"\n    (removed)=\"onRemoved($event)\"\n    (saved)=\"onSaved($event)\"\n    (updated)=\"onUpdated($event)\"\n    [server]=\"server\"\n  ></opcua-server-config>\n</div>\n","import { CdkTreeModule } from '@angular/cdk/tree';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterModule } from '@angular/router';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  CoreModule,\n  DeviceStatusModule,\n  DropAreaModule,\n  DynamicFormsModule,\n  FormsModule,\n  hookRoute,\n  Route,\n  ViewContext\n} from '@c8y/ngx-components';\nimport { ObjectMappingComponent } from '@c8y/ngx-components/device-protocol-object-mappings';\nimport { OperationDetailsModule } from '@c8y/ngx-components/operations/operation-details';\nimport { ButtonsModule } from 'ngx-bootstrap/buttons';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { AddressSpaceService } from './address-space.service';\nimport { OpcuaAddressSpaceDetailComponent } from './opcua-address-space-detail.component';\nimport { OpcuaAddressSpaceTreeComponent } from './opcua-address-space-tree.component';\nimport { OpcuaAddressSpaceComponent } from './opcua-address-space.component';\nimport { OpcuaAgentGuard } from './opcua-agent.guard';\nimport { OpcuaAutoApplySettingsComponent } from './opcua-auto-apply-settings.component';\nimport { OpcuaDeviceProtocolBrowsePathValidation } from './opcua-device-protocol-browse-path-validation.directive';\nimport { OpcuaDeviceProtocolDataReportingComponent } from './opcua-device-protocol-data-reporting.component';\nimport { OpcuaDeviceProtocolDescription } from './opcua-device-protocol-description.component';\nimport { OpcuaDeviceProtocolDetailComponent } from './opcua-device-protocol-detail.component';\nimport { OpcuaDeviceProtocolMapping } from './opcua-device-protocol-mapping.component';\nimport { OpcuaDeviceProtocolObjectMappingStatus } from './opcua-device-protocol-object-mapping-status-icon.component';\nimport { OpcuaMicroserviceGuard } from './opcua-microservice.guard';\nimport { OpcuaServerConfigComponent } from './opcua-server-config.component';\nimport { OpcuaServerListComponent } from './opcua-server-list.component';\nimport { OpcuaServerGuard } from './opcua-server.guard';\nimport { OpcuaServersComponent } from './opcua-servers.component';\nimport { OpcuaService } from './opcuaService';\n\nconst opcuaRoutes: Route[] = [\n  {\n    context: ViewContext.Device,\n    path: 'opcua-servers',\n    component: OpcuaServersComponent,\n    label: gettext('OPC UA server'),\n    icon: 'server',\n    canActivate: [OpcuaAgentGuard, OpcuaMicroserviceGuard]\n  },\n  {\n    context: ViewContext.Device,\n    path: 'address-space',\n    component: OpcuaAddressSpaceComponent,\n    label: gettext('Address space'),\n    icon: 'cloud-network',\n    canActivate: [OpcuaServerGuard, OpcuaMicroserviceGuard]\n  }\n];\n\nconst deviceProtocolRoutes: Route[] = [\n  {\n    path: 'deviceprotocols/opcuaV2/:id',\n    component: OpcuaDeviceProtocolDetailComponent\n  }\n];\n\n@NgModule({\n  imports: [\n    CoreModule,\n    FormsModule,\n    ReactiveFormsModule,\n    DropAreaModule,\n    ButtonsModule,\n    CdkTreeModule,\n    RouterModule.forChild(deviceProtocolRoutes),\n    TooltipModule.forRoot(),\n    PopoverModule.forRoot(),\n    DeviceStatusModule,\n    OperationDetailsModule,\n    BrowserAnimationsModule,\n    CollapseModule.forRoot(),\n    BsDropdownModule.forRoot(),\n    ObjectMappingComponent,\n    DynamicFormsModule,\n    OpcuaServersComponent,\n    OpcuaServerListComponent,\n    OpcuaServerConfigComponent,\n    OpcuaAddressSpaceComponent,\n    OpcuaAddressSpaceTreeComponent,\n    OpcuaAddressSpaceDetailComponent,\n    OpcuaDeviceProtocolDescription,\n    OpcuaDeviceProtocolDetailComponent,\n    OpcuaDeviceProtocolDataReportingComponent,\n    OpcuaDeviceProtocolMapping,\n    OpcuaDeviceProtocolObjectMappingStatus,\n    OpcuaAutoApplySettingsComponent,\n    OpcuaDeviceProtocolBrowsePathValidation\n  ],\n  providers: [\n    OpcuaAgentGuard,\n    OpcuaServerGuard,\n    OpcuaMicroserviceGuard,\n    OpcuaService,\n    AddressSpaceService,\n    hookRoute(opcuaRoutes)\n  ]\n})\nexport class OpcuaProtocolModule {}\n","import { downgradeComponent } from '@angular/upgrade/static';\nimport { OpcuaAddressSpaceTreeComponent } from '../opcua-address-space-tree.component';\nexport const opcuaAddressSpaceTreeComponentDowngradedComponent = downgradeComponent({\n  component: OpcuaAddressSpaceTreeComponent,\n  inputs: ['moId'],\n  outputs: ['selectedNode']\n});\n","import * as angular from 'angular';\nimport { registerNgModule } from '@c8y/ng1-modules';\nimport { opcuaAddressSpaceTreeComponentDowngradedComponent } from './downgraded.components';\n\nconst NAME_OPCUA = 'c8y.upgrade.opcua';\n\nangular\n  .module(NAME_OPCUA, [])\n  .directive('c8yOpcuaAddressSpaceTree', opcuaAddressSpaceTreeComponentDowngradedComponent);\n\nexport const ng1ModulesOPCUA = [NAME_OPCUA];\n\nregisterNgModule(ng1ModulesOPCUA);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.AddressSpaceService","i3","i2.OpcuaService","i4","i5","i2","i1","unset","set","i1.OpcuaService","cloneDeep","FormsModule"],"mappings":"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"}