1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
import {Component, Input, OnInit, ViewChild} from "@angular/core";
import {ArtifactModel, DataTypeModel, IFileDownload} from "../../../../models";
import {Store} from "@ngxs/store";
import {DataTypesService} from "../../../../services/data-types-service";
@Component({
selector: 'app-type-workspace-tosca-artifact',
templateUrl: './type-workspace-tosca-artifact-page.component.html',
styleUrls: ['./type-workspace-tosca-artifact-page.component.less', '../../../../../assets/styles/table-style.less']
})
export class TypeWorkspaceToscaArtifactPageComponent implements OnInit {
@Input() dataType: DataTypeModel = new DataTypeModel();
@ViewChild('toscaArtifactsTable') table: any;
public toscaArtifacts: Array<ArtifactModel> = [];
public componentId: string;
public componentType: string;
public disabled: boolean;
public iconType: string;
public testId: string;
private DOWNLOAD_CSS_CLASSES = {
DOWNLOAD_ICON: "download-o",
LOADER_ICON: "spinner"
}
private DATATYPE_ARTIFACT = {
ARTIFACT_NAME : "Tosca Template",
ARTIFACT_TYPE : "TOSCA_TEMPLATE",
ARTIFACT_VERSION : "1"
}
constructor(private store: Store, private dataTypesService: DataTypesService) {
}
ngOnInit(): void {
this.iconType = this.DOWNLOAD_CSS_CLASSES.DOWNLOAD_ICON;
this.componentId = this.dataType.uniqueId;
this.componentType = 'datatype';
const artifactTemplateForDataType: ArtifactModel = new ArtifactModel();
artifactTemplateForDataType.artifactDisplayName = this.DATATYPE_ARTIFACT.ARTIFACT_NAME;
artifactTemplateForDataType.artifactType = this.DATATYPE_ARTIFACT.ARTIFACT_NAME;
artifactTemplateForDataType.artifactVersion = this.DATATYPE_ARTIFACT.ARTIFACT_VERSION;
this.toscaArtifacts.push(artifactTemplateForDataType);
}
onActivate(event) {
if (event.type === 'click') {
this.table.rowDetail.toggleExpandRow(event.row);
}
}
public download = (event) => {
event.stopPropagation();
this.dataTypesService.downloadDataType(this.componentId).then(
(file) => {
console.log("file", file.data);
if (file.data) {
let blob = this.base64toBlob(file.data.base64Contents, '');
let fileName = file.data.artifactName;
this.triggerFileDownload(blob, fileName);
}
}
);
};
private downloadFile = (file:IFileDownload):void => {
if (file) {
let blob = this.base64toBlob(file.base64Contents, '');
let fileName = file.artifactName;
this.triggerFileDownload(blob, fileName);
}
};
public base64toBlob = (base64Data, contentType):any => {
let byteCharacters = atob(base64Data);
return this.byteCharactersToBlob(byteCharacters, contentType);
};
public byteCharactersToBlob = (byteCharacters, contentType):any => {
contentType = contentType || '';
let sliceSize = 1024;
let bytesLength = byteCharacters.length;
let slicesCount = Math.ceil(bytesLength / sliceSize);
let byteArrays = new Array(slicesCount);
for (let sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {
let begin = sliceIndex * sliceSize;
let end = Math.min(begin + sliceSize, bytesLength);
let bytes = new Array(end - begin);
for (let offset = begin, i = 0; offset < end; ++i, ++offset) {
bytes[i] = byteCharacters[offset].charCodeAt(0);
}
byteArrays[sliceIndex] = new Uint8Array(bytes);
}
return new Blob(byteArrays, {type: contentType});
};
public triggerFileDownload = (blob, fileName):void=> {
let url = window.URL.createObjectURL(blob);
let downloadLink = document.createElement("a");
downloadLink.setAttribute('href', url);
downloadLink.setAttribute('download', fileName);
document.body.appendChild(downloadLink);
var clickEvent = new MouseEvent("click", {
"view": window,
"bubbles": true,
"cancelable": true
});
downloadLink.dispatchEvent(clickEvent);
}
}
|