import {Injectable} from '@angular/core'; import { RecordCollection, IRecord, ISerializedRecordCollection } from '../record-collection'; import _ from 'lodash'; import {IRecordTransformer} from './record-transformer.interface'; @Injectable() export class OwsRecordTransformer implements IRecordTransformer { constructor() {} transform( data: IOwsSearchResult, opts: ISerializedRecordCollection = {}) : RecordCollection { return new RecordCollection( _.defaults( { fields: data.columns, records: _.map( data.data, record => this.transformRecord(record, opts, data.columns) ), geoTransformStrategy: 'owsKml' }, opts ) ); } private transformRecord( recordValues: string[], opts: ISerializedRecordCollection, fields: IOwsSearchResultColumn[]) : IRecord { const record = _(recordValues) .transform( (record, val, idx) => { this._copyFieldValueToRecord(record, val, idx, fields); }, {} ).value(); record['record-type'] = opts.name; record['timespan'] = {begin: this._getRecordMapDate(record)}; return record; } private _copyFieldValueToRecord( record: {}, fieldValue: any, idx: number, fields: IOwsSearchResultColumn[]) : any { const field = fields[idx]; record[field.name] = fieldValue; return record; } private _getRecordMapDate(record: any): {begin: string} { return record['map_date'] || record['completion_date']; } } export interface IOwsSearchResult { columns: IOwsSearchResultColumn[]; data: string[][]; } export interface IOwsSearchResultColumn { name: string; label: string; type: string; visible: boolean; }