summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArundathi Patil <arundpil@in.ibm.com>2019-03-07 21:34:43 +0530
committerIBM602-PC0F1E3C\Arundathi <arundpil@in.ibm.com>2019-03-07 21:34:56 +0530
commitc2ac1e52d88e4d590e2fa0e29b9af1431afef0dc (patch)
tree24c855e2a14a42cab9bf2194c5edcf7d34526a5b
parent7e06008a45d6767919fccdffb6d95e591a78a680 (diff)
File Download
Added file download functionality Issue-ID: CCSDK-759 Change-Id: I9106ce4f6229c7d848e5bef9a1842444ca828934 Signed-off-by: Arundathi Patil <arundpil@in.ibm.com>
-rw-r--r--cds-ui/client/package.json1
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.html7
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.ts131
3 files changed, 103 insertions, 36 deletions
diff --git a/cds-ui/client/package.json b/cds-ui/client/package.json
index 9ad47413d..0eea31ec1 100644
--- a/cds-ui/client/package.json
+++ b/cds-ui/client/package.json
@@ -31,6 +31,7 @@
"core-js": "^2.5.4",
"d3": "^5.9.1",
"font-awesome": "^4.7.0",
+ "file-saver": "^2.0.1",
"hammerjs": "^2.0.8",
"jszip": "^3.2.0",
"material-design-icons": "^3.0.1",
diff --git a/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.html b/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.html
index 4c1a7dc9e..d7ba14072 100644
--- a/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.html
+++ b/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.html
@@ -25,7 +25,7 @@ limitations under the License.
<mat-tree-node *matTreeNodeDef="let node" matTreeNodePadding>
<!-- use a disabled button to provide padding for tree leaf -->
<button mat-icon-button disabled></button>
- <span (click)="fileClicked(node.name)">{{node.name}}</span>
+ <button mat-icon-button (click)="selectFileToView(node)">{{node.name}}</button>
</mat-tree-node>
<!-- This is the tree node template for expandable nodes -->
<mat-tree-node *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding>
@@ -34,7 +34,7 @@ limitations under the License.
{{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
</mat-icon>
</button>
- <span (click)="fileClicked(node.name)">{{node.name}}</span>
+ <button mat-icon-button (click)="selectFileToView(node)">{{node.name}}</button>
</mat-tree-node>
</mat-tree>
</div>
@@ -43,5 +43,6 @@ limitations under the License.
</div>
</div>
<div style="position:relative">
- <button mat-button class="savebtn" (click)="updateBlueprint()">Save</button>
+ <button mat-button class="savebtn" (click)="updateBlueprint();SaveToBackend()">Save</button>
+ <button mat-button class="savebtn" (click)="download();">Download</button>
</div> \ No newline at end of file
diff --git a/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.ts b/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.ts
index 46dca73dd..96aececcf 100644
--- a/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.ts
+++ b/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.ts
@@ -27,18 +27,61 @@ import "ace-builds/webpack-resolver";
import 'brace';
import 'brace/ext/language_tools';
import 'ace-builds/src-min-noconflict/snippets/html';
+import * as JSZip from 'jszip';
+import { saveAs } from 'file-saver';
+
import { IAppState } from '../../../../common/core/store/state/app.state';
import { Store } from '@ngrx/store';
import { Observable } from 'rxjs';
import { IBlueprintState } from 'src/app/common/core/store/models/blueprintState.model';
-import { LoadBlueprintSuccess } from '../../../../common/core/store/actions/blueprint.action';
+import { LoadBlueprintSuccess } from '../../../../common/core/store/actions/blueprint.action'
interface FoodNode {
name: string;
children?: FoodNode[];
+ data?: any
}
+// const TREE_DATA: FoodNode[] = [
+// {
+// name: 'Definitions',
+// children: [
+// { name: 'activation-blueprint.json' },
+// { name: 'artifacts_types.json' },
+// { name: 'data_types.json' },
+// ]
+// },
+// {
+// name: 'Scripts',
+// children: [
+// {
+// name: 'kotlin',
+// children: [
+// { name: 'ScriptComponent.cba.kts' },
+// { name: 'ResourceAssignmentProcessor.cba.kts' },
+// ]
+// }
+// ]
+// },
+// {
+// name: 'Templates',
+// children: [
+// {
+// name: 'baseconfig-template'
+// }
+// ]
+// },
+// {
+// name: 'TOSCA-Metada',
+// children: [
+// {
+// name: 'TOSCA.meta'
+// }
+// ]
+// },
+// ];
+
const TREE_DATA: FoodNode[] = [
{
name: 'Definitions',
@@ -47,35 +90,7 @@ const TREE_DATA: FoodNode[] = [
{ name: 'artifacts_types.json' },
{ name: 'data_types.json' },
]
- },
- {
- name: 'Scripts',
- children: [
- {
- name: 'kotlin',
- children: [
- { name: 'ScriptComponent.cba.kts' },
- { name: 'ResourceAssignmentProcessor.cba.kts' },
- ]
- }
- ]
- },
- {
- name: 'Templates',
- children: [
- {
- name: 'baseconfig-template'
- }
- ]
- },
- {
- name: 'TOSCA-Metada',
- children: [
- {
- name: 'TOSCA.meta'
- }
- ]
- },
+ }
];
/** Flat node with expandable and level information */
@@ -98,6 +113,11 @@ export class EditorComponent implements OnInit {
blueprint: IBlueprint;
bpState: Observable<IBlueprintState>;
text: string;
+ filesTree: any = [];
+ filesData: any = [];
+ selectedFile: string;
+ zipFolder: any;
+ private zipFile: JSZip = new JSZip();
private transformer = (node: FoodNode, level: number) => {
return {
@@ -118,12 +138,14 @@ export class EditorComponent implements OnInit {
constructor(private store: Store<IAppState>) {
this.dataSource.data = TREE_DATA;
this.bpState = this.store.select('blueprint');
+ // this.dataSource.data = TREE_DATA;
}
hasChild = (_: number, node: ExampleFlatNode) => node.expandable;
ngOnInit() {
this.editorContent();
+ this.dataSource.data = this.filesTree;
}
fileClicked(file) {
@@ -147,6 +169,9 @@ export class EditorComponent implements OnInit {
blueprintdata => {
var blueprintState: IBlueprintState = { blueprint: blueprintdata.blueprint, isLoadSuccess: blueprintdata.isLoadSuccess, isSaveSuccess: blueprintdata.isSaveSuccess, isUpdateSuccess: blueprintdata.isUpdateSuccess };
this.blueprintdata = blueprintState.blueprint;
+ this.filesTree = blueprintdata.files;
+ this.filesData = blueprintdata.filesData;
+ this.dataSource.data = this.filesTree;
let blueprint = [];
for (let key in this.blueprintdata) {
if (this.blueprintdata.hasOwnProperty(key)) {
@@ -161,10 +186,50 @@ export class EditorComponent implements OnInit {
// console.log(this.text);
})
}
-
- updateBlueprint(){
+
+ updateBlueprint() {
+ if (this.selectedFile == 'activation-blueprint.json') {
+ // to do
+ } else {
+ // to do
+ }
this.blueprint = JSON.parse(this.text);
this.store.dispatch(new LoadBlueprintSuccess(this.blueprint));
// console.log(this.text);
- }
+ }
+
+ selectFileToView(file) {
+ this.selectedFile = file.name;
+ this.filesData.forEach((fileNode) => {
+ if (fileNode.name.includes(file.name)) {
+ this.text = fileNode.data;
+ }
+ })
+ }
+
+ SaveToBackend() {
+ this.zipFile.generateAsync({ type: "blob" })
+ .then(blob => {
+
+ });
+ }
+
+ deploy() {
+ // to do
+ }
+
+ create() {
+ this.filesData.forEach((path) => {
+ this.zipFile.file(path.name, path.data);
+ });
+ }
+
+ download() {
+ this.create();
+ var zipFilename = "baseconfiguration.zip";
+ this.zipFile.generateAsync({ type: "blob" })
+ .then(blob => {
+ saveAs(blob, zipFilename);
+ });
+ }
}