aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-ui/src/app/ng2/components/logic/generic-artifact-browser/generic-artifact-browser.component.ts
diff options
context:
space:
mode:
authorPiotr Darosz <piotr.darosz@nokia.com>2019-03-27 15:25:50 +0100
committerOfir Sonsino <ofir.sonsino@intl.att.com>2019-04-07 07:50:41 +0000
commit2c25cbab17de51f9b9a688644be92d0afdb2fa42 (patch)
treec716d8e217a86487d4b6bce16834e5a784899149 /catalog-ui/src/app/ng2/components/logic/generic-artifact-browser/generic-artifact-browser.component.ts
parent71b5dc0a3b445c64f1b6144c3f086128d88e4902 (diff)
Generic Artifact Browser SDC UI
Introduce Generic Artifact Browser SDC UI in VF -> Deployment Artifacts view. Change-Id: I312c6c9d77f42ad2d073a8ad21c983ede39dfd0b Issue-ID: SDC-2211 Signed-off-by: Piotr Darosz <piotr.darosz@nokia.com>
Diffstat (limited to 'catalog-ui/src/app/ng2/components/logic/generic-artifact-browser/generic-artifact-browser.component.ts')
-rw-r--r--catalog-ui/src/app/ng2/components/logic/generic-artifact-browser/generic-artifact-browser.component.ts125
1 files changed, 125 insertions, 0 deletions
diff --git a/catalog-ui/src/app/ng2/components/logic/generic-artifact-browser/generic-artifact-browser.component.ts b/catalog-ui/src/app/ng2/components/logic/generic-artifact-browser/generic-artifact-browser.component.ts
new file mode 100644
index 0000000000..c87fb51162
--- /dev/null
+++ b/catalog-ui/src/app/ng2/components/logic/generic-artifact-browser/generic-artifact-browser.component.ts
@@ -0,0 +1,125 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2019 Nokia. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+import {Component, Input, ViewEncapsulation} from "@angular/core";
+import {GabService, IServerResponse} from "../../../services/gab.service";
+import {PathsAndNamesDefinition} from "../../../../models/paths-and-names";
+
+const COLUMN_PREFIX: string = 'col';
+
+@Component({
+ selector: 'gab',
+ templateUrl: './generic-artifact-browser.component.html',
+ styleUrls:['./generic-artifact-browser.component.less'],
+ encapsulation: ViewEncapsulation.None
+})
+export class GenericArtifactBrowserComponent {
+ @Input()
+ pathsandnames: PathsAndNamesDefinition[];
+ @Input()
+ artifactid: string;
+ @Input()
+ resourceid: string;
+
+ columns: ColumnDefinition[];
+ rows: any[];
+ selectedRows: any[];
+ isLoading: boolean;
+ ready: boolean;
+
+ constructor(private gabService: GabService) {
+ }
+
+ ngOnInit() {
+ this.ready = false;
+ this.isLoading = true;
+ this.columns = [];
+ let paths: string[] = this.pathsandnames.map(item => item.path);
+ this.gabService.getArtifact(this.artifactid, this.resourceid, paths)
+ .subscribe(
+ response => {
+ let typedServerResponse:IServerResponse = <IServerResponse>response.json();
+ this.normalizeDataForNgxDatatable(typedServerResponse.data);
+ },
+ err => console.log(err),
+ () => {
+ this.ready = true;
+ this.isLoading = false;
+ }
+ );
+ }
+
+ private normalizeDataForNgxDatatable(data: [{ [key: string]: string }]) {
+ let result: NormalizationResult = this.getNormalizationResult(data, this.pathsandnames);
+ this.rows = result.rows;
+ this.columns = result.columns;
+ }
+
+ private getNormalizationResult(data: [{ [key: string]: string }],
+ pathsAndNames: PathsAndNamesDefinition[]): NormalizationResult {
+ //Prepare column names and column data property names
+ let mappingsPathToProp = new Map<string,string>();
+ let columnsDefinitions = this.normalizeColumns(pathsAndNames, mappingsPathToProp);
+
+ //Convert rows from { "string": "string" } to { prop : "string" } format
+ //This is required by NgxDatatable component
+ let arrayOfRows = this.normalizeRows(data, mappingsPathToProp);
+
+ return new NormalizationResult(arrayOfRows, columnsDefinitions);
+ }
+
+ private normalizeColumns(pathsAndNames: PathsAndNamesDefinition[], mappingsPathToProp: Map<string,string>) {
+ let columnsDefinitions: ColumnDefinition[] = [];
+ let index: number = 1;
+
+ pathsAndNames.forEach(function (col) {
+ let columnDataPropertyName: string = COLUMN_PREFIX + index;
+ mappingsPathToProp.set(col.path, columnDataPropertyName);
+ let cell: ColumnDefinition = new ColumnDefinition(col.friendlyName, columnDataPropertyName);
+ columnsDefinitions.push(cell);
+ index += 1;
+ });
+ return columnsDefinitions;
+ }
+
+ private normalizeRows(data: [{ [key: string]: string }], mappingsPathToProp: Map<string,string>) {
+ let arrayOfRows = [];
+ data.forEach(function (col) {
+ let row = {};
+ for (let key in col) {
+ if (col.hasOwnProperty(key)) {
+ let columnNameAsProp = mappingsPathToProp.get(key);
+ row[columnNameAsProp] = col[key];
+ }
+ }
+ arrayOfRows.push(row);
+ });
+ return arrayOfRows;
+ }
+}
+
+class NormalizationResult {
+ constructor(public rows: any[], public columns: ColumnDefinition[]) {}
+}
+
+export class ColumnDefinition {
+ constructor(public name: string, public prop: string) {}
+}
+