import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { ConfigService } from '../config/config.service';
import { VisualizationDataDTO } from '../DTOs/visualization-data-dto';
import { VisualizationData } from '../models/visualization-data';
import { VisualizationDataApi } from './visualization-data-api.service';
import { ClusterVisualizationDataMapper } from '../mappers/cluster-visualization-data-mapper';
import { RadarChartDataMapper } from '../mappers/radar-chart-data-mapper';
import { SseDataMapper } from '../mappers/sse-data-mapper';
import { SseDTO } from '../DTOs/sse-dto';
/**
* Default implementation of service abstracting http communication with visualization data endpoints.
*/
@Injectable()
export class VisualizationDataDefaultApi extends VisualizationDataApi {
headers: HttpHeaders = new HttpHeaders({
'Access-Control-Allow-Credentials': 'true',
'Access-Control-Allow-Methods': 'GET, POST, PATCH, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token',
'Access-Control-Allow-Origin': '*',
});
options = { headers: this.headers };
constructor(
private http: HttpClient,
private configService: ConfigService,
) {
/**
* Sends http request to retrieve all data for visualizations
*/
getVisualizationData(
trainingDefinitionId: number,
featureType: string,
numberOfClusters: number,
instanceIds: number[],
): Observable<VisualizationData> {
return this.http
.get<VisualizationDataDTO>(
this.configService.config.trainingServiceUrl +
`clusters/training-definitions/${trainingDefinitionId}/${featureType}`,
{ params: this.addParams(numberOfClusters, instanceIds, level) },
.pipe(map((response) => ClusterVisualizationDataMapper.fromDTO(response)));
/**
* Sends http request to retrieve data for radar chart
*/
getRadarChartData(
trainingDefinitionId: number,
numberOfClusters: number,
instanceIds: number[],
): Observable<VisualizationData> {
.get<VisualizationDataDTO>(
this.configService.config.trainingServiceUrl +
`clusters/training-definitions/${trainingDefinitionId}/n-dimensional`,
{ params: this.addParams(numberOfClusters, instanceIds, level) },
)
.pipe(map((response) => RadarChartDataMapper.fromDTO(response)));
getFeatureSSE(
trainingDefinitionId: number,
featureType: string,
numberOfClusters: number,
instanceIds: number[],
): Observable<SseDataMapper> {
return this.http
.get<SseDTO>(
this.configService.config.trainingServiceUrl +
`clusters/training-definitions/${trainingDefinitionId}/${featureType}/sse`,
{ params: this.addParams(numberOfClusters, instanceIds, level) },
)
.pipe(map((response) => SseDataMapper.fromDTO(response)));
private addParams(numberOfClusters: number, instanceIds: number[], level: number) {
params['numberOfClusters'] = numberOfClusters;
if (instanceIds !== undefined && instanceIds.length !== 0) params['instanceIds'] = instanceIds;
if (level) params['levelId'] = level;