/// /// Copyright © 2016-2019 The Thingsboard Authors /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. /// You may obtain a copy of the License at /// /// http://www.apache.org/licenses/LICENSE-2.0 /// /// Unless required by applicable law or agreed to in writing, software /// distributed under the License is distributed on an "AS IS" BASIS, /// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. /// See the License for the specific language governing permissions and /// limitations under the License. /// import { Injectable } from '@angular/core'; import { defaultHttpOptions, defaultHttpOptionsFromConfig, RequestConfig } from './http-utils'; import { forkJoin, Observable, of } from 'rxjs/index'; import { HttpClient } from '@angular/common/http'; import { EntityId } from '@shared/models/id/entity-id'; import { AttributeData, AttributeScope } from '@shared/models/telemetry/telemetry.models'; @Injectable({ providedIn: 'root' }) export class AttributeService { constructor( private http: HttpClient ) { } public getEntityAttributes(entityId: EntityId, attributeScope: AttributeScope, config?: RequestConfig): Observable> { return this.http.get>(`/api/plugins/telemetry/${entityId.entityType}/${entityId.id}/values/attributes/` + `${attributeScope}`, defaultHttpOptionsFromConfig(config)); } public deleteEntityAttributes(entityId: EntityId, attributeScope: AttributeScope, attributes: Array, config?: RequestConfig): Observable { const keys = attributes.map(attribute => attribute.key).join(','); return this.http.delete(`/api/plugins/telemetry/${entityId.entityType}/${entityId.id}/${attributeScope}` + `?keys=${keys}`, defaultHttpOptionsFromConfig(config)); } public deleteEntityTimeseries(entityId: EntityId, timeseries: Array, config?: RequestConfig): Observable { const keys = timeseries.map(attribute => attribute.key).join(','); return this.http.delete(`/api/plugins/telemetry/${entityId.entityType}/${entityId.id}/timeseries/delete` + `?keys=${keys}`, defaultHttpOptionsFromConfig(config)); } public saveEntityAttributes(entityId: EntityId, attributeScope: AttributeScope, attributes: Array, config?: RequestConfig): Observable { const attributesData: {[key: string]: any} = {}; const deleteAttributes: AttributeData[] = []; attributes.forEach((attribute) => { if (attribute.value !== null) { attributesData[attribute.key] = attribute.value; } else { deleteAttributes.push(attribute); } }); let deleteEntityAttributesObservable: Observable; if (deleteAttributes.length) { deleteEntityAttributesObservable = this.deleteEntityAttributes(entityId, attributeScope, deleteAttributes, config); } else { deleteEntityAttributesObservable = of(null); } let saveEntityAttributesObservable: Observable; if (Object.keys(attributesData).length) { saveEntityAttributesObservable = this.http.post(`/api/plugins/telemetry/${entityId.entityType}/${entityId.id}/${attributeScope}`, attributesData, defaultHttpOptionsFromConfig(config)); } else { saveEntityAttributesObservable = of(null); } return forkJoin(saveEntityAttributesObservable, deleteEntityAttributesObservable); } public saveEntityTimeseries(entityId: EntityId, timeseriesScope: string, timeseries: Array, config?: RequestConfig): Observable { const timeseriesData: {[key: string]: any} = {}; const deleteTimeseries: AttributeData[] = []; timeseries.forEach((attribute) => { if (attribute.value !== null) { timeseriesData[attribute.key] = attribute.value; } else { deleteTimeseries.push(attribute); } }); let deleteEntityTimeseriesObservable: Observable; if (deleteTimeseries.length) { deleteEntityTimeseriesObservable = this.deleteEntityTimeseries(entityId, deleteTimeseries, config); } else { deleteEntityTimeseriesObservable = of(null); } let saveEntityTimeseriesObservable: Observable; if (Object.keys(timeseriesData).length) { saveEntityTimeseriesObservable = this.http.post(`/api/plugins/telemetry/${entityId.entityType}/${entityId.id}/timeseries/${timeseriesScope}`, timeseriesData, defaultHttpOptionsFromConfig(config)); } else { saveEntityTimeseriesObservable = of(null); } return forkJoin(saveEntityTimeseriesObservable, deleteEntityTimeseriesObservable); } }