2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 Nokia. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 import {Component, Input, ViewEncapsulation} from "@angular/core";
22 import {GabService, IServerResponse} from "../../../services/gab.service";
23 import {PathsAndNamesDefinition} from "../../../../models/paths-and-names";
25 const COLUMN_PREFIX: string = 'col';
29 templateUrl: './generic-artifact-browser.component.html',
30 styleUrls:['./generic-artifact-browser.component.less'],
31 encapsulation: ViewEncapsulation.None
33 export class GenericArtifactBrowserComponent {
35 pathsandnames: PathsAndNamesDefinition[];
41 columns: ColumnDefinition[];
47 constructor(private gabService: GabService) {
52 this.isLoading = true;
54 let paths: string[] = this.pathsandnames.map(item => item.path);
55 this.gabService.getArtifact(this.artifactid, this.resourceid, paths)
58 let typedServerResponse:IServerResponse = <IServerResponse>response.json();
59 this.normalizeDataForNgxDatatable(typedServerResponse.data);
61 err => console.log(err),
64 this.isLoading = false;
69 private normalizeDataForNgxDatatable(data: [{ [key: string]: string }]) {
70 let result: NormalizationResult = this.getNormalizationResult(data, this.pathsandnames);
71 this.rows = result.rows;
72 this.columns = result.columns;
75 private getNormalizationResult(data: [{ [key: string]: string }],
76 pathsAndNames: PathsAndNamesDefinition[]): NormalizationResult {
77 //Prepare column names and column data property names
78 let mappingsPathToProp = new Map<string,string>();
79 let columnsDefinitions = this.normalizeColumns(pathsAndNames, mappingsPathToProp);
81 //Convert rows from { "string": "string" } to { prop : "string" } format
82 //This is required by NgxDatatable component
83 let arrayOfRows = this.normalizeRows(data, mappingsPathToProp);
85 return new NormalizationResult(arrayOfRows, columnsDefinitions);
88 private normalizeColumns(pathsAndNames: PathsAndNamesDefinition[], mappingsPathToProp: Map<string,string>) {
89 let columnsDefinitions: ColumnDefinition[] = [];
90 let index: number = 1;
92 pathsAndNames.forEach(function (col) {
93 let columnDataPropertyName: string = COLUMN_PREFIX + index;
94 mappingsPathToProp.set(col.path, columnDataPropertyName);
95 let cell: ColumnDefinition = new ColumnDefinition(col.friendlyName, columnDataPropertyName);
96 columnsDefinitions.push(cell);
99 return columnsDefinitions;
102 private normalizeRows(data: [{ [key: string]: string }], mappingsPathToProp: Map<string,string>) {
103 let arrayOfRows = [];
104 data.forEach(function (col) {
106 for (let key in col) {
107 if (col.hasOwnProperty(key)) {
108 let columnNameAsProp = mappingsPathToProp.get(key);
109 row[columnNameAsProp] = col[key];
112 arrayOfRows.push(row);
118 class NormalizationResult {
119 constructor(public rows: any[], public columns: ColumnDefinition[]) {}
122 export class ColumnDefinition {
123 constructor(public name: string, public prop: string) {}