{"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/mappings/custom-action-mapping.ts","../../protocol-opcua/mappings/default-mappings.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-device-protocol-data-reporting.component.ts","../../protocol-opcua/opcua-device-protocol-data-reporting.html","../../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-description.component.ts","../../protocol-opcua/opcua-device-protocol-description.html","../../protocol-opcua/opcua-auto-apply-settings.component.ts","../../protocol-opcua/opcua-auto-apply-settings.component.html","../../protocol-opcua/opcua-device-protocol-detail.component.ts","../../protocol-opcua/opcua-device-protocol-detail.html","../../protocol-opcua/opcua-address-space.component.ts","../../protocol-opcua/opcua-address-space.component.html","../../protocol-opcua/opcua-microservice.guard.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';\n\n@Component({\n  selector: 'opcua-address-space-detail',\n  templateUrl: './opcua-address-space-detail.component.html'\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 { FetchClient, IFetchOptions, InventoryService, InventoryBinaryService } from '@c8y/client';\nimport { OpcuaServer } from './opcua-server.interface';\nimport { Router } from '@angular/router';\nimport { AlertService } from '@c8y/ngx-components';\n\n@Injectable()\nexport class OpcuaService {\n  private binaryService: InventoryBinaryService;\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/server';\n    this.deviceTypeProtocolUrl = '/service/opcua-mgmt-service/deviceTypes';\n    this.header = { 'Content-Type': 'application/json' };\n    this.binaryService = inventoryService.binary;\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.microserviceUrl}/${id}`, options);\n    }\n  }\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.microserviceUrl}`, 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.microserviceUrl}`, 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.microserviceUrl}/${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  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 { gettext } from '@c8y/ngx-components';\nimport { BaseObjectMapping } from '@c8y/ngx-components/device-protocol-object-mappings';\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`, ${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';\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 { 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  Component,\n  Input,\n  Output,\n  OnInit,\n  EventEmitter,\n  OnDestroy,\n  OnChanges,\n  SimpleChanges\n} from '@angular/core';\nimport { AddressSpaceNode, AddressSpaceService, NodeNavigationData } from './address-space.service';\nimport { OpcuaService } from './opcuaService';\nimport { AlertService } from '@c8y/ngx-components';\nimport { DynamicDataSource } from './dynamic-data-source';\nimport { NestedTreeControl } from '@angular/cdk/tree';\nimport { clone } from 'lodash';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n  selector: 'opcua-address-space-tree',\n  templateUrl: './opcua-address-space-tree.component.html'\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 { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { set, unset, toInteger } from 'lodash';\nimport { gettext } from '@c8y/ngx-components';\nimport { ControlContainer, NgModelGroup } from '@angular/forms';\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})\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 { Directive, ElementRef, Injector, Input } from '@angular/core';\nimport { UpgradeComponent } from '@angular/upgrade/static';\n\n@Directive({\n  selector: 'c8y-object-mapping-status-icons'\n})\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 } 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';\n\n@Component({\n  selector: 'opcua-device-protocol-mapping',\n  templateUrl: './opcua-device-protocol-mapping.html',\n  viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }]\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, Input } from '@angular/core';\r\nimport { NgForm, ControlContainer } from '@angular/forms';\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})\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 { 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';\nimport { reject } from 'lodash-es';\n@Component({\n  selector: 'opcua-auto-apply',\n  templateUrl: './opcua-auto-apply-settings.component.html'\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, OnInit, ViewChildren, QueryList, ChangeDetectorRef } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { OpcuaService } from './opcuaService';\nimport { AlertService, gettext } 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';\n\n@Component({\n  selector: 'opcua-device-protocol-detail',\n  templateUrl: './opcua-device-protocol-detail.html'\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 { Component, OnInit, Output, EventEmitter, OnDestroy } from '@angular/core';\nimport { AddressSpaceService, AddressSpaceNode } from './address-space.service';\nimport { gettext } from '@c8y/ngx-components';\nimport { DynamicDataSource } from './dynamic-data-source';\nimport { OpcuaService } from './opcuaService';\n\n@Component({\n  selector: 'opcua-address-space',\n  templateUrl: './opcua-address-space.component.html'\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\n  @Output() focusStatus: EventEmitter<AddressSpaceNode> = new EventEmitter<AddressSpaceNode>();\n  private moId = '';\n  constructor(\n    private addressSpaceService: AddressSpaceService,\n    private opcuaService: OpcuaService\n  ) {}\n\n  async ngOnInit() {\n    this.filterLabel = gettext('Filter…');\n    this.moId = this.opcuaService.getMoId();\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}\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=\"card-block separator-bottom 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>\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 { 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","import {\n  Component,\n  Input,\n  OnInit,\n  Output,\n  EventEmitter,\n  OnChanges,\n  ViewChild\n} from '@angular/core';\nimport {\n  gettext,\n  DroppedFile,\n  DropAreaComponent,\n  ModalService,\n  Status,\n  AlertService\n} from '@c8y/ngx-components';\nimport { OpcuaServer, OpcuaServerConfig } from './opcua-server.interface';\nimport { cloneDeep, has } from 'lodash-es';\nimport { OpcuaService } from './opcuaService';\n\n@Component({\n  selector: 'opcua-server-config',\n  templateUrl: './opcua-server-config.component.html'\n})\nexport class OpcuaServerConfigComponent implements OnInit, OnChanges {\n  currentSecMode: string;\n  fileName = '';\n  targetConnectionState = '1';\n  minIntervalNumber = 1;\n  connectionStatusLabel = '';\n  @ViewChild('opcuaConfigForm', { static: false }) opcuaConfigForm: any;\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  @Input() set server(server: OpcuaServer) {\n    this._server = cloneDeep(server);\n    if (server) {\n      this.model = cloneDeep(server);\n      this.fileName = this.model.config.keystoreFilename;\n\n      if (server.id && server.id === 'new') {\n        // enabled connection state\n        this.targetConnectionState = '1';\n        this.model.config.targetConnectionState = 'enabled';\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\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 opcuaService: OpcuaService;\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\n  constructor(\n    opcuaService: OpcuaService,\n    private modalService: ModalService,\n    private alertService: AlertService\n  ) {\n    this.opcuaService = opcuaService;\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  cancel() {\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 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      // dropped more than one file\n      console.warn('Tried to import... Import aborted.');\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          console.warn('Invalid authentication id', data.id);\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","<div class=\"c8y-empty-state m-t-4\" *ngIf=\"!server\">\n  <h1 class=\"c8y-icon c8y-icon-duocolor\" c8yIcon=\"server\"></h1>\n  <div>\n    <p class=\"text-medium\">{{ 'No server to display.' | translate }}</p>\n    <p>{{ 'Add or select a server.' | translate }}</p>\n  </div>\n</div>\n\n<form #opcuaConfigForm=\"ngForm\" class=\"d-contents\" *ngIf=\"server\">\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      (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>\n          {{ 'Server name' | translate }}\n        </label>\n        <input\n          type=\"text\"\n          class=\"form-control\"\n          placeholder=\"{{ 'e.g. My server' | translate }}\"\n          id=\"name\"\n          name=\"name\"\n          [(ngModel)]=\"model.name\"\n          required\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 class=\"fit-w\" translate>Server connection</label>\n          <button\n            type=\"button\"\n            class=\"btn m-t-4\"\n            name=\"serverConnection\"\n            [(ngModel)]=\"targetConnectionState\"\n            (ngModelChange)=\"setServerConnection($event)\"\n            btnCheckbox\n            btnCheckboxTrue=\"1\"\n            btnCheckboxFalse=\"0\"\n          >\n            <span title=\"{{ 'Enabled' | translate }}\" [hidden]=\"targetConnectionState !== '1'\">\n              {{ 'Enabled' | translate }}\n            </span>\n            <span title=\"{{ 'Disabled' | translate }}\" [hidden]=\"targetConnectionState !== '0'\">\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 class=\"p-r-8\" [mo]=\"server\"></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 for=\"configServerUrl\" translate>Server URL</label>\n        <input\n          type=\"text\"\n          class=\"form-control\"\n          id=\"configServerUrl\"\n          name=\"serverUrl\"\n          [(ngModel)]=\"model.config.serverUrl\"\n          c8yDefaultValidation=\"opcuaBrowsePath\"\n          required\n        />\n      </c8y-form-group>\n\n      <!-- TIMEOUT & STATUS-CHECK-INTERVAL-->\n      <div class=\"content-flex-32\">\n        <div class=\"col-6\">\n          <c8y-form-group>\n            <label for=\"config.timeout\" translate>Timeout</label>\n            <div class=\"input-group\">\n              <input\n                type=\"number\"\n                class=\"form-control\"\n                id=\"config.timeout\"\n                name=\"timeout\"\n                [min]=\"minIntervalNumber\"\n                placeholder=\"{{ 'e.g.' | translate }} 30\"\n                [(ngModel)]=\"model.config.timeout\"\n                required\n              />\n              <span class=\"input-group-addon units\" translate>seconds</span>\n            </div>\n          </c8y-form-group>\n        </div>\n        <div class=\"col-6\">\n          <c8y-form-group>\n            <label for=\"config.statusCheckInterval\" translate>Status check interval</label>\n            <div class=\"input-group\">\n              <input\n                type=\"number\"\n                class=\"form-control\"\n                id=\"config.statusCheckInterval\"\n                name=\"statusCheckInterval\"\n                [min]=\"minIntervalNumber\"\n                placeholder=\"{{ 'e.g.' | translate }} 40\"\n                [(ngModel)]=\"model.config.statusCheckInterval\"\n                required\n              />\n              <span class=\"input-group-addon units\" translate>seconds</span>\n            </div>\n          </c8y-form-group>\n        </div>\n      </div>\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 for=\"config.securityMode\" translate>Security mode</label>\n            <div class=\"c8y-select-wrapper\">\n              <select\n                class=\"form-control\"\n                id=\"config.securityMode\"\n                [(ngModel)]=\"currentSecMode\"\n                (ngModelChange)=\"setPolicy($event)\"\n                name=\"securityMode\"\n                required\n              >\n                <option *ngFor=\"let mode of securityModes\" [ngValue]=\"mode\">{{ mode }}</option>\n              </select>\n              <span></span>\n            </div>\n          </div>\n        </div>\n        <div *ngIf=\"currentSecMode === NONE\" class=\"col-md-6\">\n          <div class=\"form-group\">\n            <label for=\"config.securityPolicy\" translate>Security policy</label>\n            <input\n              type=\"text\"\n              class=\"form-control\"\n              id=\"config.securityPolicy\"\n              name=\"securityPolicy\"\n              [readonly]=\"true\"\n              [(ngModel)]=\"model.config.securityMode\"\n              required\n            />\n          </div>\n        </div>\n        <div *ngIf=\"currentSecMode !== NONE\" class=\"col-md-6\">\n          <div class=\"form-group\">\n            <label for=\"config.securityPolicy\" translate>Security policy</label>\n            <div class=\"c8y-select-wrapper\">\n              <select\n                *ngIf=\"currentSecMode === SIGN\"\n                class=\"form-control\"\n                id=\"config.securityPolicy\"\n                [(ngModel)]=\"model.config.securityMode\"\n                name=\"securityPolicy\"\n                required\n              >\n                <option *ngFor=\"let policy of securityPolicies.sign\" [ngValue]=\"policy\">\n                  {{ policy }}\n                </option>\n              </select>\n              <select\n                *ngIf=\"currentSecMode === SIGN_ENC\"\n                class=\"form-control\"\n                id=\"config.securityPolicy\"\n                [(ngModel)]=\"model.config.securityMode\"\n                name=\"securityPolicy\"\n                required\n              >\n                <option *ngFor=\"let policy of securityPolicies.sign_enc\" [ngValue]=\"policy\">\n                  {{ policy }}\n                </option>\n              </select>\n              <span></span>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- AUTHENTICATION -->\n      <div class=\"form-group\">\n        <label for=\"config.authenticationMode\" translate>Authentication</label>\n        <div class=\"c8y-select-wrapper\">\n          <select\n            class=\"form-control\"\n            id=\"config.authenticationMode\"\n            [(ngModel)]=\"authenticationMode\"\n            name=\"authenticationMode\"\n            (ngModelChange)=\"updateAuthentication($event)\"\n            required\n          >\n            <option *ngFor=\"let auth of authenticationModes\" [ngValue]=\"auth\">\n              {{ auth.value | translate }}\n            </option>\n          </select>\n          <span></span>\n        </div>\n      </div>\n\n      <!-- User/Pw-->\n      <div *ngIf=\"authenticationMode.id === 2\" class=\"tight-grid\">\n        <div class=\"col-md-12\">\n          <div class=\"form-group\">\n            <label for=\"config.userName\" translate>Username</label>\n            <input\n              type=\"text\"\n              class=\"form-control\"\n              id=\"config.userName\"\n              name=\"userName\"\n              placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n              [(ngModel)]=\"model.config.userName\"\n              autocomplete=\"new-password\"\n              required\n            />\n          </div>\n        </div>\n        <!-- change password section BEGINS-->\n        <div class=\"col-md-6\">\n          <div class=\"form-group\" *ngIf=\"!initialPasswordRequired\">\n            <button type=\"button\" class=\"btn btn-default\" (click)=\"toggleChangePassword()\">\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 for=\"config.password\" translate>Password</label>\n              <input\n                type=\"password\"\n                class=\"form-control\"\n                id=\"config.userPassword\"\n                name=\"password\"\n                [(ngModel)]=\"model.config.userPassword\"\n                autocomplete=\"new-password\"\n                required\n              />\n            </div>\n          </div>\n        </div>\n        <!-- change password section ENDS-->\n      </div>\n      <!-- Key-based -->\n      <div *ngIf=\"authenticationMode.id === 3\" class=\"tight-grid\">\n        <!-- KEYSTORE PASSWORD -->\n        <div class=\"col-md-6\">\n          <div class=\"form-group\">\n            <label for=\"config.keystorePass\" translate>Keystore password</label>\n            <input\n              type=\"password\"\n              class=\"form-control\"\n              id=\"config.keystorePass\"\n              name=\"keystorePass\"\n              [(ngModel)]=\"model.config.keystorePass\"\n              required\n            />\n          </div>\n        </div>\n        <div class=\"col-md-6\">\n          <div class=\"form-group\">\n            <label for=\"config.certificatePass\" translate>Certificate password</label>\n            <input\n              type=\"password\"\n              class=\"form-control\"\n              id=\"config.certificatePass\"\n              name=\"keystorePass\"\n              [(ngModel)]=\"model.config.certificatePass\"\n              required\n            />\n          </div>\n        </div>\n        <!-- UPLOAD KEYSTORE -->\n        <div class=\"col-md-12\">\n          <div class=\"form-group\">\n            <label for=\"certificateUpload\" translate>Upload keystore</label>\n            <input\n              type=\"text\"\n              [readonly]=\"true\"\n              name=\"certificateUpload\"\n              class=\"form-control m-b-8\"\n              [ngModel]=\"fileName\"\n              placeholder=\"{{ 'e.g.' | translate }} yourKeystore.jks\"\n              required\n            />\n            <c8y-drop-area\n              (dropped)=\"uploadFile($event)\"\n              [loadingMessage]=\"'Importing, please wait.' | translate\"\n              [title]=\"'Import keystore with jks file extension' | translate\"\n            ></c8y-drop-area>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  <div class=\"card-footer large-padding separator sticky-bottom\">\n    <button\n      title=\"{{ 'Cancel' | translate }}\"\n      type=\"button\"\n      class=\"btn btn-default\"\n      (click)=\"cancel()\"\n    >\n      {{ 'Cancel' | translate }}\n    </button>\n    <button\n      title=\"{{ 'Remove' | translate }}\"\n      type=\"button\"\n      class=\"btn btn-danger\"\n      (click)=\"remove()\"\n    >\n      {{ 'Remove' | translate }}\n    </button>\n    <button\n      title=\"{{ 'Save' | translate }}\"\n      type=\"submit\"\n      class=\"btn btn-primary\"\n      (click)=\"save()\"\n      [disabled]=\"!opcuaConfigForm.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';\n\n@Component({\n  selector: 'opcua-server-list',\n  templateUrl: './opcua-server-list.component.html'\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 { AlertService, ContextRouteComponent, gettext } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { OpcuaServer } from './opcua-server.interface';\nimport { OpcuaService } from './opcuaService';\n\n@Component({\n  selector: 'opcua-servers',\n  templateUrl: './opcua-servers.component.html'\n})\nexport class OpcuaServersComponent implements OnInit {\n  serverObjectList: OpcuaServer[] = [];\n  initialServerObject: OpcuaServer = {\n    id: '',\n    name: '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: null,\n      autoReconnect: true,\n      statusCheckInterval: null,\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: string;\n  private NEW_SERVER_ID: string;\n\n  constructor(\n    private opcuaService: OpcuaService,\n    private alertService: AlertService,\n    private translateService: TranslateService,\n    @Optional() private context: ContextRouteComponent\n  ) {\n    this.moId = '';\n    this.NEW_SERVER_ID = 'new';\n    this.initialServerObject.id = this.NEW_SERVER_ID;\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]);\n      }\n    }\n  }\n\n  localServerObjectExist() {\n    return !!this.serverObjectList.find(server => server.id === this.NEW_SERVER_ID);\n  }\n\n  addServer() {\n    const server: OpcuaServer = 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 === this.NEW_SERVER_ID) {\n        this.createServer(server);\n      } else {\n        this.updateServer(server);\n      }\n    }\n  }\n\n  reloadTabs() {\n    if (this.context) {\n      this.context.refreshTabs();\n    }\n  }\n\n  onCanceled(server: OpcuaServer) {\n    if (server && server.id && server.id === this.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 === this.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) {\n    if (\n      server &&\n      server.id !== this.NEW_SERVER_ID &&\n      server.config &&\n      server.config.keystoreBinaryId\n    ) {\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        console.log('Could not get existing keystore:', ex);\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      this.server = Object.assign({}, server);\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(this.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      console.log('Could not remove OPC UA server:', ex);\n    }\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      type=\"button\"\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    ></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    [server]=\"server\"\n  ></opcua-server-config>\n</div>\n","import { CdkTreeModule } from '@angular/cdk/tree';\nimport { RouterModule } from '@angular/router';\nimport { NgModule } from '@angular/core';\nimport {\n  CoreModule,\n  DeviceStatusModule,\n  DropAreaModule,\n  FormsModule,\n  DynamicFormsModule,\n  gettext,\n  hookRoute,\n  Route,\n  ViewContext\n} from '@c8y/ngx-components';\nimport { ObjectMappingComponent } from '@c8y/ngx-components/device-protocol-object-mappings';\nimport { ButtonsModule } from 'ngx-bootstrap/buttons';\nimport { AddressSpaceService } from './address-space.service';\nimport { OpcuaAddressSpaceDetailComponent } from './opcua-address-space-detail.component';\nimport { OpcuaDeviceProtocolDetailComponent } from './opcua-device-protocol-detail.component';\nimport { OpcuaDeviceProtocolDataReportingComponent } from './opcua-device-protocol-data-reporting.component';\nimport { OpcuaDeviceProtocolMapping } from './opcua-device-protocol-mapping.component';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { OpcuaDeviceProtocolObjectMappingStatus } from './opcua-device-protocol-object-mapping-status-icon.component';\nimport { OpcuaAddressSpaceComponent } from './opcua-address-space.component';\nimport { OpcuaAgentGuard } from './opcua-agent.guard';\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';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { OpcuaDeviceProtocolDescription } from './opcua-device-protocol-description.component';\nimport { OpcuaAddressSpaceTreeComponent } from './opcua-address-space-tree.component';\nimport { OpcuaAutoApplySettingsComponent } from './opcua-auto-apply-settings.component';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { OpcuaDeviceProtocolBrowsePathValidation } from './opcua-device-protocol-browse-path-validation.directive';\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  declarations: [\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  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    BrowserAnimationsModule,\n    CollapseModule.forRoot(),\n    BsDropdownModule.forRoot(),\n    ObjectMappingComponent,\n    DynamicFormsModule\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","i2.OpcuaService","i4","i1","unset","set","i5","i6","i9.OpcuaAddressSpaceTreeComponent","i10.OpcuaDeviceProtocolDataReportingComponent","i11.OpcuaDeviceProtocolObjectMappingStatus","i12.OpcuaDeviceProtocolBrowsePathValidation","i1.OpcuaService","i6.OpcuaDeviceProtocolDescription","i7.OpcuaDeviceProtocolDataReportingComponent","i8.OpcuaDeviceProtocolMapping","i9.OpcuaAutoApplySettingsComponent","i6.OpcuaAddressSpaceTreeComponent","i7.OpcuaAddressSpaceDetailComponent","i6.OpcuaServerListComponent","i7.OpcuaServerConfigComponent"],"mappings":"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"}