{"version":3,"file":"hslayers-ng-services-save-map.mjs","sources":["../../../projects/hslayers/services/save-map/layman.service.ts","../../../projects/hslayers/services/save-map/save-map.service.ts","../../../projects/hslayers/services/save-map/layer-synchronizer.service.ts","../../../projects/hslayers/services/save-map/hslayers-ng-services-save-map.ts"],"sourcesContent":["import Resumable from 'resumablejs';\n\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {computed, Injectable, inject} from '@angular/core';\n\nimport {\n  Observable,\n  Subscription,\n  catchError,\n  forkJoin,\n  lastValueFrom,\n  map,\n  of,\n} from 'rxjs';\n\nimport {Feature} from 'ol';\nimport {GeoJSON} from 'ol/format';\nimport {GeoJSONFeatureCollection} from 'ol/format/GeoJSON';\nimport {Geometry} from 'ol/geom';\nimport {Layer, Vector as VectorLayer} from 'ol/layer';\nimport {Source, Vector as VectorSource} from 'ol/source';\n\nimport {\n  AccessRightsModel,\n  AsyncUpload,\n  CompoData,\n  HsLaymanLayerDescriptor,\n  MapComposition,\n  UpsertLayerObject,\n  WfsSyncParams,\n} from 'hslayers-ng/types';\nimport {\n  DeleteAllLayersResponse,\n  DeleteSingleLayerResponse,\n  HsCommonLaymanService,\n  PREFER_RESUMABLE_SIZE_LIMIT,\n  SUPPORTED_SRS_LIST,\n  getLayerName,\n  getLaymanFriendlyLayerName,\n  getSupportedSrsList,\n  wfsNotAvailable,\n  PostPatchLayerResponse,\n  HsCommonLaymanLayerService,\n  isAtLeastVersions,\n} from 'hslayers-ng/common/layman';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsSaverService} from './saver-service.interface';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {\n  createGetFeatureRequest,\n  createPostFeatureRequest,\n} from 'hslayers-ng/common/layers';\nimport {\n  getAccessRights,\n  getLaymanLayerDescriptor,\n  getQml,\n  getSld,\n  getTitle,\n  getWorkspace,\n  setHsLaymanSynchronizing,\n  setLaymanLayerDescriptor,\n} from 'hslayers-ng/common/extensions';\nimport {normalizeSldComparisonOperators} from 'hslayers-ng/services/utils';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsLaymanService implements HsSaverService {\n  private http = inject(HttpClient);\n  private hsMapService = inject(HsMapService);\n  private hsLogService = inject(HsLogService);\n  private hsToastService = inject(HsToastService);\n  private hsLanguageService = inject(HsLanguageService);\n  private hsCommonLaymanService = inject(HsCommonLaymanService);\n  private hsCommonLaymanLayerService = inject(HsCommonLaymanLayerService);\n\n  crs: string;\n  totalProgress = 0;\n  deleteQuery: Subscription;\n  supportedCRRList = computed(() => {\n    const laymanEP = this.hsCommonLaymanService.layman();\n    if (laymanEP) {\n      return getSupportedSrsList(laymanEP);\n    }\n    return SUPPORTED_SRS_LIST;\n  });\n\n  /**\n   * Update composition's access rights\n   * @param compName - Composition's name\n   * @param endpoint - Endpoint's description\n   * @param access_rights - Composition's new access rights\n   * @returns Promise result of composition's PATCH request\n   */\n  async updateCompositionAccessRights(\n    compName: string,\n    access_rights: AccessRightsModel,\n  ): Promise<any> {\n    const rights = this.parseAccessRightsForLayman(access_rights);\n    const formdata = new FormData();\n    formdata.append('name', compName);\n    formdata.append('access_rights.read', rights.read);\n    formdata.append('access_rights.write', rights.write);\n    return await this.makeMapPostPatchRequest(\n      this.hsCommonLaymanService.user(),\n      compName,\n      formdata,\n      false,\n    );\n  }\n  /**\n   * Save composition to Layman's database\n   * @param compositionJson - Json with composition's definition\n   * @param compoData - Additional data for composition\n   * @param saveAsNew - Save as new composition\n   * @returns Promise result of POST\n   */\n  async save(\n    compositionJson: MapComposition,\n    compoData: CompoData,\n    saveAsNew: boolean,\n  ): Promise<any> {\n    const rights = this.parseAccessRightsForLayman(compoData.access_rights);\n    const formdata = new FormData();\n    formdata.append(\n      'file',\n      new Blob([JSON.stringify(compositionJson)], {\n        type: 'application/json',\n      }),\n      'blob.json',\n    );\n    formdata.append('name', compoData.name);\n    formdata.append('title', compoData.title);\n    formdata.append('abstract', compoData.abstract);\n    formdata.append('access_rights.read', rights.read);\n    formdata.append('access_rights.write', rights.write);\n\n    const user = this.hsCommonLaymanService.user();\n    const workspace =\n      compoData.workspace === user\n        ? user\n        : saveAsNew\n          ? user\n          : compoData.workspace;\n\n    return await this.makeMapPostPatchRequest(\n      workspace,\n      compoData.name,\n      formdata,\n      saveAsNew,\n      compositionJson,\n    );\n  }\n\n  /**\n   * Save composition to Layman's database\n   * @param endpoint - Endpoint's description\n   * @param access_rights - Provided access rights\n   * @returns Access rights object as two strings, one for read access and the other for write access\n   */\n  parseAccessRightsForLayman(access_rights: AccessRightsModel): {\n    write: string;\n    read: string;\n  } {\n    const user = this.hsCommonLaymanService.user();\n    const write =\n      access_rights['access_rights.write'] == 'private'\n        ? user\n        : access_rights['access_rights.write'];\n    const read =\n      access_rights['access_rights.read'] == 'private'\n        ? user\n        : access_rights['access_rights.read'];\n    return {write, read};\n  }\n\n  /**\n   * Save composition to Layman's database\n   * @param endpoint - Endpoint's description\n   * @param workspace - Current Layman's workspace\n   * @param mapName - Map composition's name\n   * @param formdata - FormData object used for sending data over HTTP request\n   * @param saveAsNew - Save as new composition\n   * @param compositionJson - JSON with composition's definition\n   * @returns Promise result of POST/PATCH request\n   */\n  async makeMapPostPatchRequest(\n    workspace: string,\n    mapName: string,\n    formdata: FormData,\n    saveAsNew: boolean,\n    compositionJson?: MapComposition,\n  ): Promise<any> {\n    const headers = new HttpHeaders();\n    headers.append('Content-Type', null);\n    headers.append('Accept', 'application/json');\n    try {\n      let response: any;\n      let success = false;\n      //Need safety against infinite loop when fixing errors and retrying\n      let amendmentsApplied = false;\n      //If at First You Don't Succeed, Try, Try Again\n      while (!success) {\n        const options = {\n          headers: headers,\n          withCredentials: true,\n        };\n        const endpoint = this.hsCommonLaymanService.layman();\n        response = await lastValueFrom(\n          this.http[saveAsNew ? 'post' : 'patch'](\n            `${endpoint.url}/rest/workspaces/${workspace}/maps${\n              saveAsNew ? `?${Math.random()}` : `/${mapName}`\n            }`,\n            formdata,\n            options,\n          ),\n        ).catch((err) => {\n          return err;\n        });\n        //Unsuccessful request response contains code, detail and message properties\n        if (!response.code) {\n          success = true;\n        } else {\n          if (amendmentsApplied) {\n            break;\n          }\n          if (compositionJson) {\n            featuresTypeFallback(response, compositionJson);\n          }\n          amendmentsApplied = true;\n        }\n      }\n      return response;\n    } catch (err) {\n      throw err;\n    }\n  }\n\n  /**\n   * Send layer's definition and features to Layman\n   * @param endpoint - Endpoint's description\n   * @param geojson - Geojson's object with features to send to server\n   * @param description - Object containing \\{name, title, crs, workspace, access_rights\\} of\n   * layer to retrieve\n   * @returns Promise result of POST/PATCH\n   */\n  async makeUpsertLayerRequest(\n    geojson: GeoJSONFeatureCollection,\n    description: UpsertLayerObject,\n  ): Promise<PostPatchLayerResponse> {\n    const formData = new FormData();\n    let asyncUpload: AsyncUpload;\n    if (geojson) {\n      formData.append(\n        'file',\n        new Blob([JSON.stringify(geojson)], {type: 'application/geo+json'}),\n        'blob.geojson',\n      );\n      asyncUpload = this.prepareAsyncUpload(formData);\n    }\n\n    //Empty blob causes Layman to return \"Internal Server Error\"\n    if (description.style) {\n      formData.append(\n        'style',\n        new Blob([description.style], {type: 'application/octet-stream'}),\n        'file.sld',\n      );\n    }\n\n    formData.append('name', description.name);\n    formData.append('title', description.title);\n    //https://github.com/LayerManager/layman/commit/48f2cb2e68a906e050c2309f2d6087e3340da0ba\n    if (description.crs && geojson) {\n      formData.append('crs', description.crs);\n    }\n    if (description.access_rights) {\n      const rights = this.parseAccessRightsForLayman(description.access_rights);\n\n      formData.append('access_rights.write', rights.write);\n      formData.append('access_rights.read', rights.read);\n    }\n\n    try {\n      let layerDesc;\n      try {\n        layerDesc = await this.hsCommonLaymanLayerService.describeLayer(\n          description.name,\n          description.workspace,\n        );\n      } catch (ex) {\n        this.hsLogService.log(`Creating layer ${description.name}`);\n      }\n      const exists = !!layerDesc?.name;\n      const res = await this.tryLoadLayer(\n        formData,\n        asyncUpload,\n        layerDesc?.name ? description.name : '',\n        exists,\n      );\n      return res;\n    } catch (err) {\n      throw err;\n    }\n  }\n\n  /**\n   * Try to load layer to Layman's server\n   * @param formData - A set of key/value pairs representing layer fields and values, for HTTP request\n   * @param asyncUpload - Async upload data: Async upload state and files to upload\n   * @param layerName - Existing layer's name\n   * @param overwrite - (Optional) Should overwrite existing layer\n   * @returns Promise result of POST/PATCH\n   */\n  async tryLoadLayer(\n    formData: FormData,\n    asyncUpload: AsyncUpload,\n    layerName: string,\n    overwrite?: boolean,\n  ): Promise<PostPatchLayerResponse> {\n    layerName = getLaymanFriendlyLayerName(layerName);\n    try {\n      const postOrPatch = overwrite ? 'patch' : 'post';\n      const workspace = this.hsCommonLaymanService.user();\n      const endpoint = this.hsCommonLaymanService.layman();\n      const url = `${endpoint.url}/rest/workspaces/${workspace}/layers${\n        overwrite ? `/${layerName}` : `?${Math.random()}`\n      }`;\n      let data: PostPatchLayerResponse = await lastValueFrom(\n        this.http[postOrPatch](url, formData, {\n          observe: 'body',\n          responseType: 'json',\n          withCredentials: true,\n        }),\n      ).catch((err) => {\n        this.hsToastService.createToastPopupMessage(\n          this.hsLanguageService.getTranslation(\n            'COMMON.setPermissionsError',\n            undefined,\n          ),\n          this.hsLanguageService.getTranslationIgnoreNonExisting(\n            'COMMON',\n            'somethingWentWrong',\n          ),\n          {serviceCalledFrom: 'HsLaymanService'},\n        );\n        return err;\n      });\n      data = Array.isArray(data) ? data[0] : data;\n      //CHECK IF OK not auth etc.\n      if (data && !data.code) {\n        if (asyncUpload?.async) {\n          const promise = await this.asyncUpload(\n            asyncUpload.filesToAsyncUpload,\n            data,\n          );\n          return promise;\n        }\n        return data;\n      }\n      return data;\n    } catch (error) {\n      this.hsLogService.error(error);\n    }\n  }\n\n  /**\n   * Prepare files for async upload if needed\n   * @param formData - FormData object for HTTP request\n   * @returns File array for async upload\n   */\n  prepareAsyncUpload(formData: FormData): AsyncUpload {\n    const asyncUpload: AsyncUpload = {filesToAsyncUpload: []};\n    const sumFileSize = formData\n      .getAll('file')\n      .filter((f) => (f as File).name)\n      .reduce((prev, f) => prev + (f as File).size, 0);\n    const async_upload = sumFileSize >= PREFER_RESUMABLE_SIZE_LIMIT;\n    if (async_upload) {\n      asyncUpload.async = async_upload;\n      this.switchFormDataToFileNames(formData, asyncUpload.filesToAsyncUpload);\n    }\n    return asyncUpload;\n  }\n\n  /**\n   * Saves files for later upload and switches from files to file names in form data\n   * @param formdata - File that will be uploaded\n   * @param files_to_async_upload - File array that will get uploaded asynchronously\n   */\n  switchFormDataToFileNames(\n    formdata: FormData,\n    files_to_async_upload: File[],\n  ): void {\n    const files = formdata.getAll('file').filter((f) => (f as any).name);\n    files_to_async_upload.push(...(files as File[]));\n\n    const file_names = files.map((f) => (f as any).name);\n    formdata.delete('file');\n    file_names.forEach((fn) => formdata.append('file', fn));\n  }\n\n  /**\n   * Use resumable to chunk upload data larger than PREFER_RESUMABLE_SIZE_LIMIT(2MB)\n   * @param files_to_async_upload - File array that will get uploaded asynchronously\n   * @param data - Layman's response after posting layer\n   */\n  asyncUpload(\n    files_to_async_upload: File[],\n    data: PostPatchLayerResponse,\n  ): Promise<any> {\n    return new Promise((resolve, reject) => {\n      files_to_async_upload = files_to_async_upload.filter(\n        (file_to_upload) =>\n          !!data['files_to_upload'].find(\n            (expected_file) => file_to_upload.name === expected_file.file,\n          ),\n      );\n      const layername = data['name'];\n      const workspace = this.hsCommonLaymanService.user();\n      const endpoint = this.hsCommonLaymanService.layman();\n      const resumable = new Resumable({\n        target: `${endpoint.url}/rest/workspaces/${workspace}/layers/${layername}/chunk`,\n        query: {\n          'layman_original_parameter': 'file',\n        },\n        testChunks: false,\n        maxFiles: 3,\n        withCredentials: true,\n      });\n\n      const chunksProgress = [];\n      resumable.on('complete', () => {\n        this.hsLogService.log(`Async upload finished successfully!`);\n        resolve(data);\n      });\n      resumable.on('fileError', (file, message) => {\n        this.hsLogService.log('fileError', message);\n        reject(message);\n      });\n      resumable.on('fileSuccess', (file, message) => {\n        this.hsLogService.log(message);\n      });\n      resumable.on('fileProgress', (file) => {\n        chunksProgress[file.uniqueIdentifier] = file.progress(false);\n        const sum = Object.values(chunksProgress).reduce((a, b) => a + b);\n        this.totalProgress = sum / files_to_async_upload.length;\n      });\n      resumable.on('filesAdded', (files) => {\n        this.hsLogService.log(\n          `${files.length} files added to Resumable.js, starting async upload.`,\n        );\n        resumable.upload();\n      });\n\n      // add files to Resumable.js, it will fire 'filesAdded' event\n      resumable.addFiles(files_to_async_upload);\n    });\n  }\n\n  /**\n   * Create Layman layer if needed and send all features\n   * @param layer - Layer to get Layman friendly name for\n   * in order to get features\n   * @param withFeatures - Layer state, whether or not it has features\n   */\n  public async upsertLayer(\n    layer: VectorLayer<VectorSource<Feature>>,\n    withFeatures: boolean,\n  ): Promise<void> {\n    if (layer.getSource().loading) {\n      return;\n    }\n    const layerName = getLayerName(layer);\n    const layerTitle = getTitle(layer);\n    const crsSupported = this.supportedCRRList().includes(this.crs);\n\n    setHsLaymanSynchronizing(layer, true);\n    const normalizedSld = normalizeSldComparisonOperators(getSld(layer));\n    const data: UpsertLayerObject = {\n      title: layerTitle,\n      name: layerName,\n      crs: crsSupported ? this.crs : 'EPSG:3857',\n      workspace: getWorkspace(layer),\n      access_rights: getAccessRights(layer),\n      style: normalizedSld || getQml(layer),\n    };\n    await this.makeUpsertLayerRequest(\n      this.getFeatureGeoJSON(\n        layer.getSource().getFeatures(),\n        crsSupported,\n        withFeatures,\n      ),\n      data,\n    );\n    setTimeout(async () => {\n      await this.makeGetLayerRequest(layer);\n      setHsLaymanSynchronizing(layer, false);\n    }, 2000);\n  }\n\n  /**\n   * Converts OL Feature objects into a GeoJSON\n   * @param features - Array of OL Features\n   * @param crsSupported - True if current CRS is supported by Layman\n   * @param withFeatures FIXME: What is this good for?\n   * @returns GeoJSON representation of the input features\n   */\n  getFeatureGeoJSON(\n    features: Feature<Geometry>[],\n    crsSupported: boolean,\n    withFeatures: boolean,\n  ) {\n    const f = new GeoJSON();\n    let geojson: GeoJSONFeatureCollection;\n    if (!withFeatures) {\n      return;\n    }\n    if (!crsSupported) {\n      geojson = f.writeFeaturesObject(\n        features.map((f) => {\n          const f2 = f.clone();\n          f2.getGeometry().transform(this.crs, 'EPSG:3857');\n          return f2;\n        }),\n      );\n    } else {\n      geojson = f.writeFeaturesObject(features);\n    }\n    return geojson;\n  }\n\n  /**\n   * Sync WFS features using transaction. Publish layer first if needed\n   * @param param0 - Object describing endpoint, layer and arrays\n   * for each of the methods: update, del, insert containing the features to be processed\n   * @param add - Features being added\n   * @param upd - Features being uploaded\n   * @param del - Features being deleted\n   * @param layer - Layer interacted with\n   * @returns Promise result of POST\n   */\n  async sync({add, upd, del, layer}: WfsSyncParams): Promise<string> {\n    try {\n      let desc = getLaymanLayerDescriptor(layer);\n      const name = getLayerName(layer);\n      try {\n        if (!desc) {\n          desc = await this.hsCommonLaymanLayerService.describeLayer(\n            name,\n            getWorkspace(layer),\n          );\n          this.cacheLaymanDescriptor(layer, desc);\n        }\n        if (desc.name == undefined || desc.wfs.url == undefined) {\n          throw `Layer or its name/url didn't exist`;\n        }\n      } catch (ex) {\n        this.hsLogService.warn(`Layer ${name} didn't exist. Creating..`);\n        this.upsertLayer(layer, true);\n        return;\n      }\n      desc.wfs.url = desc.wfs.url;\n      return this.makeWfsRequest({add, upd, del, layer}, desc.wfs.url);\n    } catch (ex) {\n      throw ex;\n    }\n  }\n\n  /**\n   * Get feature type (layer identifiactor) l_<uuid>\n   * from changes array (add, upd, or del ) or layer\n   */\n  private getFeatureType(\n    add: Feature[],\n    upd: Feature[],\n    del: Feature[],\n    layer: VectorLayer<VectorSource<Feature>>,\n  ) {\n    const feature = add?.[0] ?? upd?.[0] ?? del?.[0];\n    const featureId = feature?.getId() as string;\n    if (featureId !== undefined && featureId !== null) {\n      return featureId.split('.')[0];\n    }\n    if (feature) {\n      this.hsLogService.warn(\n        'First feature found has no ID. Falling back to layer name for featureType.',\n      );\n    }\n    const desc = getLaymanLayerDescriptor(layer);\n    return isAtLeastVersions(this.hsCommonLaymanService.layman(), '2.0')\n      ? `l_${desc.uuid}`\n      : desc.name;\n  }\n\n  /**\n   * Make WFS transaction request\n   * @param param0 - Object describing endpoint, layer and arrays\n   * for each of the methods: update, del, insert containing the features to be processed\n   * @param add - Features being added\n   * @param upd - Features being uploaded\n   * @param del - Features being deleted\n   * @param layer - Layer interacted with\n   * @returns Promise result of POST\n   */\n  private async makeWfsRequest(\n    {add, upd, del, layer}: WfsSyncParams,\n    url: string,\n  ): Promise<string> {\n    try {\n      const srsName = this.hsMapService.getCurrentProj().getCode();\n      const featureType = this.getFeatureType(add, upd, del, layer);\n\n      const isAtLeast20 = isAtLeastVersions(\n        this.hsCommonLaymanService.layman(),\n        '2.0',\n      );\n      const featurePrefix = isAtLeast20\n        ? 'layman'\n        : getWorkspace(layer) || this.hsCommonLaymanService.user();\n\n      const featureNS = isAtLeast20\n        ? 'http://layman'\n        : 'http://' + getWorkspace(layer) || this.hsCommonLaymanService.user();\n\n      const {default: WFS} = await import('ol/format/WFS');\n      const wfsFormat = new WFS();\n      const options = {\n        featureNS: featureNS,\n        featurePrefix: featurePrefix,\n        featureType: String(featureType), // Ensure featureType is a string for WFS options\n        srsName,\n        nativeElements: null,\n      };\n      const featureNode: any = wfsFormat.writeTransaction(\n        add,\n        upd,\n        del,\n        options,\n      );\n      const headers = new HttpHeaders();\n      headers.append('Content-Type', 'application/xml');\n      headers.append('Accept', 'application/xml');\n      const httpOptions: any = {\n        headers,\n        responseType: 'text',\n        withCredentials: true,\n      };\n      const body = featureNode.outerHTML\n        .replace(/<geometry>/gm, '<wkb_geometry>')\n        .replace(/<\\/geometry>/gm, '</wkb_geometry>');\n      const r: any = await lastValueFrom(\n        this.http.post(url, body, httpOptions),\n      );\n      return r;\n    } catch (ex) {\n      this.hsLogService.error(ex);\n    }\n  }\n\n  /**\n   * Cache Layman's layer descriptor so it can be used later on\n   * @param layer - Layer interacted with\n   * @param layer - Layman's layer descriptor\n   */\n  private cacheLaymanDescriptor(\n    layer: VectorLayer<VectorSource<Feature>>,\n    desc: HsLaymanLayerDescriptor,\n  ): void {\n    if (this.hsCommonLaymanService.user() != 'browser') {\n      setLaymanLayerDescriptor(layer, desc);\n    }\n  }\n\n  /**\n   * Retrieve layer's features from server\n   * @param layer - Layer interacted with\n   * @returns Promise with WFS xml (GML3.1) response\n   * with features for a specified layer\n   */\n  async makeGetLayerRequest(\n    layer: VectorLayer<VectorSource<Feature>>,\n  ): Promise<string> {\n    let desc: HsLaymanLayerDescriptor;\n    const layerName = getLayerName(layer);\n    try {\n      desc = await this.hsCommonLaymanLayerService.describeLayer(\n        layerName,\n        getWorkspace(layer),\n      );\n      if (\n        desc === null || //In case of response?.code == 15 || 32\n        (desc.wfs.status == desc.wms.status && wfsNotAvailable(desc))\n      ) {\n        return null;\n      }\n      if (desc?.name && !wfsNotAvailable(desc)) {\n        this.cacheLaymanDescriptor(layer, desc);\n      }\n    } catch (ex) {\n      //If Layman returned 404\n      return null;\n    }\n\n    try {\n      const requestOptions = await this.buildLayerRequestOptions(layer, desc);\n      const response = await lastValueFrom(\n        this.http.post(desc.wfs.url, requestOptions.body, {\n          responseType: 'text',\n          withCredentials: true,\n          headers: requestOptions.headers,\n        }),\n      );\n      return response;\n    } catch (ex) {\n      this.hsLogService.error('Error in makeGetLayerRequest:', ex);\n      return null;\n    }\n  }\n\n  /**\n   * Builds request options for Layman's WFS request\n   */\n  private async buildLayerRequestOptions(\n    layer: VectorLayer<VectorSource<Feature>>,\n    desc: HsLaymanLayerDescriptor,\n  ): Promise<{body: string; headers?: {[key: string]: string}}> {\n    const source = layer.getSource();\n    const filter: string = source.get('filter');\n    const srsName = this.hsMapService.getCurrentProj().getCode();\n    const workspace = getWorkspace(layer);\n    //Backwards compatibility for Layman version less than 2.0\n    const laymanUuid = isAtLeastVersions(\n      this.hsCommonLaymanService.layman(),\n      '2.0',\n    )\n      ? `l_${desc.uuid}`\n      : desc.name;\n\n    let body: string;\n    if (filter) {\n      body = await createPostFeatureRequest(\n        laymanUuid,\n        '2.0.0',\n        srsName,\n        workspace,\n        'GML32',\n        undefined,\n        srsName,\n        filter,\n        source.get('geometryAttribute'),\n      );\n    } else {\n      body = createGetFeatureRequest(\n        laymanUuid,\n        '2.0.0',\n        srsName,\n        'GML32',\n        undefined,\n        srsName,\n      );\n    }\n\n    const headers = filter\n      ? undefined\n      : {'Content-Type': 'application/x-www-form-urlencoded'};\n\n    return {body, headers};\n  }\n\n  /**\n   * Removes selected layer from Layman's database\n   * @param layer - (Optional) Layer to be removed. DELETE all layers when not provided\n   */\n  async removeLayer(layer?: Layer<Source> | string): Promise<boolean> {\n    let success: boolean;\n    return new Promise((resolve, reject): void => {\n      if (this.deleteQuery) {\n        this.deleteQuery.unsubscribe();\n        delete this.deleteQuery;\n      }\n      const observables: Observable<any>[] = [];\n\n      const ds = this.hsCommonLaymanService.layman();\n      const workspace = this.hsCommonLaymanService.user();\n      let url;\n      if (layer) {\n        const layerName =\n          typeof layer == 'string' ? layer : getLayerName(layer);\n        url = `${ds.url}/rest/workspaces/${workspace}/layers/${layerName}`;\n      } else {\n        url = `${ds.url}/rest/workspaces/${workspace}/layers`;\n      }\n\n      const response = this.http\n        .delete(url, {\n          withCredentials: true,\n        })\n        .pipe(\n          map((res: DeleteSingleLayerResponse | DeleteAllLayersResponse[]) => {\n            const response = Array.isArray(res) ? res[0] : res;\n            if (response?.code) {\n              this.hsCommonLaymanService.displayLaymanError(\n                ds,\n                'LAYMAN.deleteLayersRequest',\n                response,\n              );\n              success = false;\n            } else {\n              let message = 'LAYMAN.layerSuccessfullyRemoved';\n              if (!layer) {\n                message = 'LAYMAN.allLayersSuccessfullyRemoved';\n              }\n              const details = Array.isArray(res)\n                ? res.map((item) => item.name)\n                : [res.name];\n              this.hsToastService.createToastPopupMessage(\n                'LAYMAN.deleteLayersRequest',\n                message,\n                {\n                  type: 'success',\n                  details,\n                },\n              );\n              success = true;\n            }\n          }),\n          catchError((e) => {\n            this.hsToastService.createToastPopupMessage(\n              this.hsLanguageService.getTranslation(\n                'LAYMAN.deleteLayersRequest',\n                undefined,\n              ),\n              this.hsLanguageService.getTranslationIgnoreNonExisting(\n                'SAVECOMPOSITION',\n                'removeLayerError',\n                {\n                  error: e.error.message ?? e.message,\n                  layer:\n                    layer instanceof Layer\n                      ? (layer as Layer<Source>).get('title')\n                      : layer,\n                },\n              ),\n              {serviceCalledFrom: 'HsLaymanService'},\n            );\n            success = false;\n            return of(e);\n          }),\n        );\n      observables.push(response);\n      this.deleteQuery = forkJoin(observables).subscribe(() => {\n        resolve(success);\n      });\n    });\n  }\n}\n\n/**\n * Mend error when features are not encoded as string.\n * They would not need to be encoded in the future, but for now Layman\n * and composition schema requires them to be.\n * @param response - Response containing error about features\n * @param compositionJson  - Composition json being sent on first try\n */\nfunction featuresTypeFallback(\n  response: any,\n  compositionJson: MapComposition,\n): void {\n  if (\n    response.code == 2 &&\n    response.detail &&\n    response.detail['validation-errors'] &&\n    response.detail['validation-errors'].some((er) =>\n      er.message.startsWith(\"{'type': 'FeatureCollection'\"),\n    )\n  ) {\n    for (const layer of compositionJson.layers.filter(\n      (l) => l.features && typeof l.features !== 'string',\n    )) {\n      layer.features = JSON.stringify(layer.features);\n    }\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {Circle, Icon, RegularShape, Style} from 'ol/style';\nimport {\n  Cluster,\n  ImageArcGISRest,\n  ImageStatic,\n  ImageWMS,\n  Source,\n  TileArcGISRest,\n  WMTS,\n  XYZ,\n  Vector as VectorSource,\n} from 'ol/source';\nimport {EsriJSON, GeoJSON} from 'ol/format';\nimport {Feature, Map} from 'ol';\nimport {FeatureUrlFunction} from 'ol/featureloader';\nimport {GeoJSONFeatureCollection} from 'ol/format/GeoJSON';\nimport {Geometry} from 'ol/geom';\nimport {Image as ImageLayer, Tile, Layer} from 'ol/layer';\nimport {transformExtent} from 'ol/proj';\n\nimport {\n  COMPOSITION_VERSION,\n  CurrentBaseLayer,\n  HslayersLayerJSON,\n  SerializedStyle,\n  CompoData,\n  LayerJSON,\n  MapComposition,\n  SerializedImage,\n  UserData,\n} from 'hslayers-ng/types';\nimport {\n  getLayerParams,\n  getURL,\n  HsProxyService,\n  instOf,\n  isLayerClustered,\n  isLayerVectorLayer,\n  isLayerWMS,\n  normalizeSldComparisonOperators,\n  getBboxFromObject,\n} from 'hslayers-ng/services/utils';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsShareThumbnailService} from 'hslayers-ng/services/share';\nimport {\n  getAttribution,\n  getBase,\n  getDefinition,\n  getDimensions,\n  getGreyscale,\n  getLaymanLayerDescriptor,\n  getLegends,\n  getMetadata,\n  getName,\n  getOrigLayers,\n  getPath,\n  getQml,\n  getShowInLayerManager,\n  getSld,\n  getSubLayers,\n  getSwipeSide,\n  getTitle,\n  getWfsUrl,\n  getWorkspace,\n} from 'hslayers-ng/common/extensions';\nimport {HsCommonLaymanService} from 'hslayers-ng/common/layman';\n\nconst LOCAL_STORAGE_EXPIRE = 5000;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsSaveMapService {\n  private hsMapService = inject(HsMapService);\n  private hsLogService = inject(HsLogService);\n  private hsShareThumbnailService = inject(HsShareThumbnailService);\n  private hsCommonLaymanService = inject(HsCommonLaymanService);\n  private hsProxyService = inject(HsProxyService);\n\n  public internalLayers: Layer<Source>[] = [];\n\n  /**\n   * Create JSON object, which stores information about composition, user, map state and map layers (including layer data)\n   * @param map - Selected OL map object\n   * @param compoData - Composition general metadata\n   * @param userData - Metadata about user, organisation and point of contact\n   * @returns - JSON object with all required map composition's metadata\n   */\n  map2json(map: Map, compoData: CompoData, userData: UserData): MapComposition {\n    const bbox = getBboxFromObject(compoData.bbox);\n    const json: MapComposition = {\n      abstract: compoData.abstract,\n      title: compoData.name,\n      keywords: compoData.keywords,\n      nativeExtent: transformExtent(\n        bbox,\n        'EPSG:4326',\n        this.hsMapService.getCurrentProj(),\n      ),\n      extent: bbox,\n      user: userData.user,\n      contact: userData.contact,\n      organization: userData.organization,\n      describedBy: `https://raw.githubusercontent.com/hslayers/map-compositions/${COMPOSITION_VERSION}/schema.json`,\n      schema_version: COMPOSITION_VERSION,\n    };\n\n    // Map properties\n    const currentProj = this.hsMapService.getCurrentProj();\n    json.scale = currentProj.getMetersPerUnit();\n    json.projection = currentProj.getCode().toLowerCase();\n    const center = map.getView().getCenter();\n    if (center) {\n      json.center = [center[0], center[1]];\n    }\n    json.units = currentProj.getUnits();\n\n    //json.minResolution = map.minResolution;\n    //json.maxResolution = map.maxResolution;\n    //json.numZoomLevels = map.numZoomLevels;\n\n    //json.resolutions = map.resolutions;\n    //json.scales = map.scales;\n\n    // Layers properties\n    json.layers = this.layers2json(compoData.layers);\n    json.current_base_layer = this.getCurrentBaseLayer();\n    return json;\n  }\n\n  /**\n   * Get currently selected base layer from the OL map\n   * @returns Object with currently selected base layer's title as attribute\n   */\n  getCurrentBaseLayer(): CurrentBaseLayer {\n    let current_base_layer = null;\n    for (const lyr of this.hsMapService.getLayersArray()) {\n      if (\n        (getShowInLayerManager(lyr) == undefined ||\n          getShowInLayerManager(lyr) == true) &&\n        getBase(lyr) == true &&\n        lyr.getVisible()\n      ) {\n        current_base_layer = {\n          title: getTitle(lyr),\n        };\n      }\n    }\n    return current_base_layer;\n  }\n\n  /**\n   * Convert map layers into a JSON object\n   * Uses layer2json().\n   * @param layers - All map layers\n   * @returns JSON object representing the layers\n   */\n  layers2json(layers: Layer[]): LayerJSON[] {\n    const json: LayerJSON[] = [];\n    layers.forEach((layer) => {\n      const l = this.layer2json(layer);\n      if (l) {\n        json.unshift(l);\n      }\n    });\n    return json;\n  }\n\n  /**\n   * Convert layer's style object into JSON object, partial function of layer2style\n   * (saves Fill color, Stroke color/width, Image fill, stroke, radius, src and type)\n   * @deprecated Parse style to old custom JSON, should not be used and will be removed. Use SLD or QML instead\n   * @param style - Style to convert\n   * @returns Converted JSON object replacing OL style\n   */\n  serializeStyle(style: Style | Style[]): SerializedStyle {\n    const s = Array.isArray(style) ? style[0] : style;\n    const o: SerializedStyle = {};\n    const ima: SerializedImage = {};\n    if (s.getFill() && s.getFill() !== null) {\n      o.fill = s.getFill().getColor();\n    }\n    if (s.getStroke() && s.getStroke() !== null) {\n      o.stroke = {\n        color: s.getStroke().getColor(),\n        width: s.getStroke().getWidth(),\n      };\n    }\n    if (s.getImage() && s.getImage() !== null) {\n      const style_img = s.getImage();\n      if (instOf(style_img, RegularShape)) {\n        const regShape = style_img as RegularShape;\n        if (regShape.getFill()) {\n          ima.fill = regShape.getFill().getColor();\n        }\n\n        if (regShape.getStroke()) {\n          ima.stroke = {\n            color: regShape.getStroke().getColor(),\n            width: regShape.getStroke().getWidth(),\n          };\n        }\n        ima.radius = regShape.getRadius();\n      }\n\n      if (\n        instOf(style_img, Icon) &&\n        typeof (style_img as Icon).getSrc() === 'string' &&\n        !(style_img as Icon).getSrc().startsWith('data:image')\n      ) {\n        ima.src = this.hsProxyService.proxify((style_img as Icon).getSrc());\n      }\n\n      if (instOf(style_img, Circle)) {\n        ima.type = 'circle';\n      }\n\n      if (instOf(style_img, Icon)) {\n        ima.type = 'icon';\n      }\n\n      o.image = ima;\n    }\n    return o;\n  }\n\n  /**\n   * Convert map layer into a JSON object (only for ol.layer.Layer)\n   * Layer properties covered:  (CLASS_NAME), name, url, params,\n   *                            group, displayInLayerSwitcher, *visibility, *opacity\n   *                            attribution, transitionEffect,\n   *                             isBaseLayer, minResolution,\n   *                            maxResolution, metadata,\n   *                            abstract, opacity, singleTile, removable,\n   *                            queryable, legend, projections,\n   *                            wmsMinScale, wmsMaxScale\n   *\n   * The layer index is not covered, as we assume\n   * that it is corresponding to the layers order.\n   *\n   * @param layer - Map layer that should be converted\n   * @returns JSON object representing the layer\n   */\n  layer2json(layer: Layer<Source>): HslayersLayerJSON {\n    const json: HslayersLayerJSON = {\n      metadata: getMetadata(layer) || {},\n    };\n    // Common stuff\n    // options\n    json.visibility = layer.getVisible();\n    json.swipeSide = getSwipeSide(layer);\n    json.opacity = layer.getOpacity();\n    json.base = getBase(layer) ?? false;\n    if (json.base) {\n      json.greyscale = getGreyscale(layer);\n    }\n    json.title = getTitle(layer);\n    if (getTitle(layer) == undefined) {\n      this.hsLogService.warn('Layer title undefined', layer);\n    }\n    //json.index = layer.map.getLayerIndex(layer);\n    json.path = getPath(layer);\n\n    if (layer.getExtent()) {\n      const ex = layer.getExtent();\n      json.maxExtent = {\n        left: ex[0],\n        bottom: ex[3],\n        right: ex[2],\n        top: ex[1],\n      };\n    }\n\n    const maxResolution = layer.getMaxResolution();\n    const minResolution = layer.getMinResolution();\n    if (maxResolution !== undefined) {\n      json.maxResolution = maxResolution;\n    }\n    if (minResolution !== undefined) {\n      json.minResolution = minResolution;\n    }\n\n    // HTTPRequest\n    if (instOf(layer, Tile) || instOf(layer, ImageLayer)) {\n      const src = layer.getSource();\n      json.displayInLayerSwitcher = getShowInLayerManager(layer);\n      if (getDimensions(layer)) {\n        json.dimensions = getDimensions(layer);\n      }\n      if (instOf(src, XYZ)) {\n        json.className = getURL(layer).includes('/rest/services')\n          ? 'ArcGISRest'\n          : 'XYZ';\n        if (json.className === 'XYZ') {\n          const maxZoom = layer.get('maxZoom');\n          const minZoom = layer.get('minZoom');\n          if (maxZoom !== undefined) {\n            json.maxResolution = maxZoom;\n          }\n          if (minZoom !== undefined) {\n            json.minResolution = minZoom;\n          }\n        }\n      }\n      if (instOf(src, ImageArcGISRest) || instOf(src, TileArcGISRest)) {\n        json.className = 'ArcGISRest';\n        json.singleTile = instOf(src, ImageArcGISRest);\n        if (getSubLayers(layer)) {\n          json.subLayers = getSubLayers(layer);\n        }\n      }\n      if (instOf(src, ImageStatic)) {\n        json.className = 'StaticImage';\n        json.extent = (src as ImageStatic).getImageExtent();\n      }\n      if (isLayerWMS(layer)) {\n        json.className = 'WMS';\n        json.singleTile = instOf(src, ImageWMS);\n        const legends = getLegends(layer);\n        if (legends) {\n          // Convert legends to array if it's a string; if it's empty string, make it []\n          const normalized = Array.isArray(legends)\n            ? legends\n            : typeof legends == 'string' && legends !== ''\n              ? [legends]\n              : [];\n\n          // Finally, remove any empty strings\n          json.legends = normalized.filter((l) => l !== '');\n        }\n        if (src.getProjection()) {\n          json.projection = src.getProjection().getCode().toLowerCase();\n        }\n        json.params = getLayerParams(layer);\n        if (getOrigLayers(layer)) {\n          json.params.LAYERS = getOrigLayers(layer);\n        }\n        json.subLayers = getSubLayers(layer);\n        json.metadata.styles = src.get('styles');\n      }\n      let url = getURL(layer);\n      url =\n        json.className === 'ArcGISRest'\n          ? url.replace('/tile/{z}/{y}/{x}', '')\n          : url;\n      json.url = url;\n      if (getAttribution(layer)) {\n        json.attributions = getAttribution(layer);\n      }\n\n      if (instOf(src, WMTS)) {\n        const wmts = src as WMTS;\n        json.className = 'WMTS';\n        json.matrixSet = wmts.getMatrixSet();\n        json.layer = wmts.getLayer();\n        json.format = wmts.getFormat();\n        json.info_format = layer.get('info_format');\n        json.url = wmts.getUrls()[0];\n      }\n    }\n\n    // Vector\n    if (isLayerVectorLayer(layer)) {\n      let src = layer.getSource() as VectorSource;\n\n      if (isLayerClustered(layer)) {\n        src = (src as Cluster<Feature>).getSource();\n      }\n      const layerDescriptor = getLaymanLayerDescriptor(layer);\n      if (layerDescriptor) {\n        json.name = layerDescriptor.wfs.name;\n      } else {\n        json.name = getName(layer);\n      }\n      json.className = 'Vector';\n      const definition = getDefinition(layer);\n      if (definition && definition.url) {\n        json.workspace = getWorkspace(layer);\n        json.protocol = {\n          url: definition.url.includes(`/geoserver/${json.workspace}/`)\n            ? definition.url\n            : `${definition.url}/geoserver/${json.workspace}/wfs`,\n          format: definition.format,\n        };\n        delete json.features;\n      } else {\n        if (getWfsUrl(layer)) {\n          json.protocol = {\n            url: getWfsUrl(layer),\n            format: 'externalWFS',\n          };\n        } else if (src.getFormat() instanceof EsriJSON) {\n          /**\n           * ArcGIS Rest feature service\n           */\n          json.className = 'ArcGISRest';\n          json.singleTile = false;\n          const urlFunc = src.getUrl() as FeatureUrlFunction;\n          const serviceUrl = urlFunc(undefined, undefined, undefined);\n          json.url = serviceUrl.split('FeatureServer')[0] + 'FeatureServer';\n          /**\n           * Layer that will be selected to be added\n           */\n          json.subLayers = this.extractLayerIdFromUrl(serviceUrl)?.toString();\n        } else {\n          try {\n            json.features = this.getFeaturesJson(\n              (src as VectorSource).getFeatures(),\n            );\n          } catch (ex) {\n            //Do nothing\n          }\n        }\n      }\n      json.projection = this.hsMapService.getCurrentProj().getCode();\n\n      if (json.protocol?.format == 'WFS') {\n        /**\n         * Do not store style directly in composition for Layman vector layers\n         */\n        json.style =\n          this.hsCommonLaymanService.layman().url +\n          '/rest/workspaces/' +\n          json.workspace +\n          '/layers/' +\n          //Layer name expected here not uuid that's why not json.name\n          getName(layer) +\n          '/style';\n      } else {\n        if (getSld(layer) != undefined) {\n          json.style = normalizeSldComparisonOperators(getSld(layer));\n        } else if (getQml(layer) != undefined) {\n          json.style = getQml(layer);\n        } else {\n          this.hsLogService.warn(\n            `Vector layer ${layer.get('title')} is missing style definition`,\n          );\n        }\n      }\n    }\n    return json;\n  }\n\n  /**\n   * Convert feature array to GeoJSON string\n   *\n   * @param features - Array of features\n   * @returns GeoJSON\n   */\n  getFeaturesJson(features: Feature<Geometry>[]): GeoJSONFeatureCollection {\n    const f = new GeoJSON();\n    const featureProjection = this.hsMapService.getCurrentProj().getCode();\n    return f.writeFeaturesObject(features, {\n      dataProjection: 'EPSG:4326',\n      featureProjection,\n    });\n  }\n\n  /**\n   * Create thumbnail of the map view and save it into selected element\n   * @param $element - Selected element\n   * @param newRender - Force new render\n   */\n  generateThumbnail($element: Element, newRender?): void {\n    if ($element === null) {\n      return;\n    }\n    $element.setAttribute('crossOrigin', 'Anonymous');\n    const map = this.hsMapService.getMap();\n    map.once('postcompose', () =>\n      this.hsShareThumbnailService.rendered($element, newRender),\n    );\n    if (newRender) {\n      map.renderSync();\n    } else {\n      this.hsShareThumbnailService.rendered($element, newRender);\n    }\n  }\n\n  /**\n   * Save map layers to browsers' local storage\n   */\n  save2storage(): void {\n    const data = {\n      expires: new Date().getTime() + LOCAL_STORAGE_EXPIRE,\n      layers: this.hsMapService\n        .getLayersArray()\n        .filter(\n          (lyr) =>\n            !this.internalLayers.includes(lyr) &&\n            (getShowInLayerManager(lyr) == undefined ||\n              getShowInLayerManager(lyr) == true),\n        )\n        .map((lyr: Layer<Source>) => this.layer2json(lyr)),\n    };\n    //TODO: Set the item sooner, so it can be reloaded after accidental browser crash\n    // but remove it if leaving the site for good\n    localStorage.setItem('hs_layers', JSON.stringify(data));\n  }\n\n  /**\n   * Extract layer ID from FeatureServer URL\n   * @param url - FeatureServer URL (e.g., .../FeatureServer/0/query)\n   * @returns Layer ID number or null if not found\n   */\n  private extractLayerIdFromUrl(url: string): number | null {\n    const match = url.match(/FeatureServer\\/(\\d+)(?:\\/|$)/i);\n    return match ? parseInt(match[1], 10) : null;\n  }\n}\n","import * as xml2Json from 'xml-js';\n\nimport {Injectable, DestroyRef, inject} from '@angular/core';\nimport {filter, switchMap} from 'rxjs/operators';\nimport {fromEvent} from 'rxjs';\n\nimport {Feature} from 'ol';\nimport {Geometry} from 'ol/geom';\nimport {ObjectEvent} from 'ol/Object';\nimport {Vector as VectorLayer} from 'ol/layer';\nimport {Vector as VectorSource} from 'ol/source';\n\nimport {\n  HsCommonLaymanService,\n  isLayerSynchronizable,\n  HsCommonLaymanLayerService,\n} from 'hslayers-ng/common/layman';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLaymanService} from './layman.service';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {debounce, instOf} from 'hslayers-ng/services/utils';\nimport {\n  getDefinition,\n  getEventsSuspended,\n  getName,\n  getWorkspace,\n  setEditor,\n  setEventsSuspended,\n  setHsLaymanSynchronizing,\n  setLaymanLayerDescriptor,\n} from 'hslayers-ng/common/extensions';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsLayerSynchronizerService {\n  private hsLaymanService = inject(HsLaymanService);\n  private hsMapService = inject(HsMapService);\n  private hsCommonLaymanService = inject(HsCommonLaymanService);\n  private hsCommonLaymanLayerService = inject(HsCommonLaymanLayerService);\n  private hsToastService = inject(HsToastService);\n  private hsLanguageService = inject(HsLanguageService);\n  private hsLogService = inject(HsLogService);\n  private hsEventBusService = inject(HsEventBusService);\n  private destroyRef = inject(DestroyRef);\n\n  debounceInterval = 1000;\n  crs: string;\n  syncedLayers: VectorLayer<VectorSource<Feature>>[] = [];\n\n  constructor() {\n    this.hsMapService.loaded().then((map) => {\n      const layerAdded = (e) => this.addLayer(e.element);\n      map.getLayers().on('add', layerAdded);\n      map.getLayers().on('remove', (e) => {\n        this.removeLayer(e.element as VectorLayer<VectorSource<Feature>>);\n      });\n      map.getLayers().forEach((lyr) => {\n        layerAdded({\n          element: lyr,\n        });\n      });\n\n      this.crs = this.hsMapService.getCurrentProj().getCode();\n      this.hsLaymanService.crs = this.crs;\n    });\n\n    this.hsCommonLaymanService.authState$\n      .pipe(\n        filter((authState) => authState && authState.authenticated),\n        takeUntilDestroyed(),\n      )\n      .subscribe(() => {\n        this.reloadLayersOnAuthChange();\n      });\n\n    this.hsEventBusService.refreshLaymanLayer\n      .pipe(takeUntilDestroyed())\n      .subscribe((layer) => {\n        this.pull(layer, layer.getSource());\n      });\n  }\n  /**\n   * Reload all the synchronized layers after Layman's authorization change\n   * to true.\n   * Log out should not force the geometry clearnce\n   */\n  private reloadLayersOnAuthChange(): void {\n    if (this.syncedLayers.length > 0) {\n      for (const layer of this.syncedLayers) {\n        const layerSource = layer.getSource();\n        setLaymanLayerDescriptor(layer, undefined);\n        layerSource.clear();\n        this.pull(layer, layerSource);\n      }\n    }\n  }\n\n  /**\n   * Start synchronizing layer to database\n   * @param layer - Layer to add\n   */\n  addLayer(layer: VectorLayer<VectorSource<Feature>>): void {\n    if (isLayerSynchronizable(layer, instOf)) {\n      this.syncedLayers.push(layer);\n      this.startMonitoringIfNeeded(layer);\n    }\n  }\n\n  /**\n   * Make 'maxRetryCount' attempts to wait until the layer is available on Layman before returning.\n   * Used for tasks which require layer presence on server\n   */\n  async layerExistsOnLayman(\n    layer: VectorLayer<VectorSource<Feature>>,\n    maxRetryCount = 5,\n    retryCount = 0,\n    desc = undefined,\n  ) {\n    if (!desc) {\n      if (retryCount < maxRetryCount) {\n        const desc = await this.hsCommonLaymanLayerService.describeLayer(\n          getName(layer),\n          getWorkspace(layer),\n        );\n        await new Promise((r) => setTimeout(r, 3000));\n        return this.layerExistsOnLayman(\n          layer,\n          maxRetryCount,\n          retryCount + 1,\n          desc,\n        );\n      }\n      return false;\n    }\n    return desc;\n  }\n\n  /**\n   * Keep track of synchronized vector layers by listening to\n   * VectorSources change events. Initially also get features from server\n   * @param layer - Layer to add\n   */\n  async startMonitoringIfNeeded(layer: VectorLayer<VectorSource<Feature>>) {\n    const layerSource = layer.getSource();\n    await this.pull(layer, layerSource);\n\n    fromEvent<ObjectEvent>(layer, 'propertychange')\n      .pipe(\n        filter((e) => e.key === 'sld' || e.key === 'title'),\n        switchMap(async () => {\n          await this.layerExistsOnLayman(layer);\n          return this.hsLaymanService.upsertLayer(layer, false);\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n\n    layerSource.forEachFeature((f) => this.observeFeature(f));\n    layerSource.on('addfeature', (e) => {\n      this.sync(\n        Array.isArray(e.feature) ? e.feature : [e.feature],\n        [],\n        [],\n        layer,\n      );\n    });\n    layerSource.on('removefeature', (e) => {\n      this.sync([], [], [e.feature], layer);\n    });\n  }\n\n  /**\n   * Check if the layer is a Layman layer\n   */\n  isLaymanLayer(layer: VectorLayer<VectorSource<Feature>>): boolean {\n    const definitionUrl = getDefinition(layer).url;\n    if (!definitionUrl) {\n      return false;\n    }\n    const laymanEp = this.hsCommonLaymanService?.layman();\n    return this.hsCommonLaymanService.isLaymanUrl(definitionUrl, laymanEp);\n  }\n\n  /**\n   * Get features from Layman's endpoint service as WFS string, parse them and add\n   * them to OL VectorSource\n   * @param layer - Layer to get Layman friendly name for\n   * @param source - OL VectorSource to store features in\n   */\n  async pull(layer: VectorLayer<VectorSource<Feature>>, source: VectorSource) {\n    try {\n      setEventsSuspended(layer, (getEventsSuspended(layer) || 0) + 1);\n      if (\n        this.isLaymanLayer(layer) &&\n        this.hsCommonLaymanService.isAuthenticated()\n      ) {\n        setHsLaymanSynchronizing(layer, true);\n        let featureString: string =\n          await this.hsLaymanService.makeGetLayerRequest(layer);\n        setHsLaymanSynchronizing(layer, false);\n        if (featureString) {\n          source.loading = true;\n          const {default: WFS} = await import('ol/format/WFS');\n          const format = new WFS({version: '2.0.0'});\n          featureString = featureString.replace(\n            /urn:x-ogc:def:crs:EPSG:3857/gm,\n            'EPSG:3857',\n          );\n\n          featureString = featureString.replace(\n            /http:\\/\\/www\\.opengis\\.net\\/gml\\/srs\\/epsg\\.xml#/g,\n            'EPSG:',\n          );\n\n          try {\n            const features = format.readFeatures(featureString).map((f) => {\n              //boundedBy property generated by Geoserver breaks WFS-T\n              f.unset('boundedBy', true);\n              return f;\n            });\n            source.addFeatures(features);\n            features.forEach((f) => this.observeFeature(f));\n          } catch (ex) {\n            this.hsLogService.warn(featureString, ex);\n          }\n          source.loading = false;\n        }\n      }\n    } catch (ex) {\n      this.hsLogService.warn(`Layer ${layer} could not be pulled.`);\n    } finally {\n      setEventsSuspended(layer, (getEventsSuspended(layer) || 0) - 1);\n    }\n  }\n\n  /**\n   * Observe feature changes and execute handler for them\n   * @param f - Feature to observe\n   */\n  observeFeature(f: Feature<Geometry>): void {\n    f.getGeometry().on(\n      'change',\n      debounce(\n        () => {\n          this.handleFeatureChange(f);\n        },\n        this.debounceInterval,\n        false,\n        this,\n      ),\n    );\n    f.on('propertychange', (e: ObjectEvent) =>\n      this.handleFeaturePropertyChange(e.target as Feature<Geometry>),\n    );\n  }\n\n  /**\n   * Handler for feature change event\n   * @param feature - Feature whose change event was captured\n   */\n  handleFeatureChange(feature: Feature<Geometry>): void {\n    this.sync([], [feature], [], this.hsMapService.getLayerForFeature(feature));\n  }\n\n  /**\n   * Handler for feature property change event\n   * @param feature - Feature whose property change event was captured\n   */\n  handleFeaturePropertyChange(feature: Feature<Geometry>): void {\n    //NOTE Due to WFS specification, attribute addition is not possible, so we must delete the feature before.\n    this.sync([], [], [feature], this.hsMapService.getLayerForFeature(feature));\n    //NOTE only then we can add feature with new attributes again.\n    this.sync([feature], [], [], this.hsMapService.getLayerForFeature(feature));\n  }\n\n  /**\n   * Sync any feature changes inside a layer, that is being stored on Layman's service database\n   * @param add - Features being added\n   * @param upd - Features being uploaded\n   * @param del - Features being deleted\n   * @param layer - Layer interacted with\n   */\n  sync(\n    add: Feature<Geometry>[],\n    upd: Feature<Geometry>[],\n    del: Feature<Geometry>[],\n    layer: VectorLayer<VectorSource<Feature>>,\n  ): void {\n    if ((getEventsSuspended(layer) || 0) > 0) {\n      return;\n    }\n    if (this.hsCommonLaymanService.isAuthenticated()) {\n      setHsLaymanSynchronizing(layer, true);\n      this.hsLaymanService\n        .sync({add, upd, del, layer})\n        .then((response: string) => {\n          if (response?.includes('Exception')) {\n            this.displaySyncErrorDialog(response, layer);\n            setHsLaymanSynchronizing(layer, false);\n            return;\n          }\n          if (add[0] && response) {\n            const id = new DOMParser()\n              .parseFromString(response, 'application/xml')\n              .getElementsByTagName('ogc:FeatureId')[0]\n              .getAttribute('fid');\n            add[0].setId(id);\n\n            const geometry = add[0].getGeometry();\n            add[0].setGeometryName('wkb_geometry');\n            add[0].setGeometry(geometry);\n            add[0].unset('geometry', true);\n\n            this.observeFeature(add[0]);\n          }\n          setHsLaymanSynchronizing(layer, false);\n        });\n    }\n  }\n\n  /**\n   * Display error dialog on synchronization failure\n   * @param error - Error captured\n   */\n  displaySyncErrorDialog(\n    error: string,\n    layer: VectorLayer<VectorSource<Feature>>,\n  ): void {\n    const exception: xml2Json.Element | xml2Json.ElementCompact =\n      xml2Json.xml2js(error, {compact: true});\n    let text =\n      exception['ows:ExceptionReport']['ows:Exception']['ows:ExceptionText']\n        ._text;\n\n    if (text.includes('is read-only')) {\n      text = this.hsLanguageService.getTranslation(\n        'SAVECOMPOSITION.syncErrorDialog.layerReadOnly',\n        {layer: layer.get('title')},\n      );\n      setEditor(layer, {editable: false});\n    }\n\n    this.hsToastService.createToastPopupMessage(\n      this.hsLanguageService.getTranslation(\n        'SAVECOMPOSITION.syncErrorDialog.errorWhenSyncing',\n        undefined,\n      ),\n      text,\n      {\n        disableLocalization: true,\n        serviceCalledFrom: 'HsLayerSynchronizerService',\n      },\n    );\n  }\n\n  /**\n   * Stop synchronizing layer to database\n   * @param layer - Layer to remove from synched layers list\n   */\n  removeLayer(layer: VectorLayer<VectorSource<Feature>>) {\n    for (let i = 0; i < this.syncedLayers.length; i++) {\n      if (this.syncedLayers[i] == layer) {\n        this.syncedLayers.splice(i, 1);\n        break;\n      }\n    }\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ImageLayer"],"mappings":"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"}