summaryrefslogtreecommitdiffstats
path: root/sdc-workflow-designer-ui/src/app/services
diff options
context:
space:
mode:
authorLvbo163 <lv.bo163@zte.com.cn>2017-08-30 09:21:09 +0800
committerLvbo163 <lv.bo163@zte.com.cn>2017-08-30 09:29:32 +0800
commita53dbd4f12ddd206c2ce9dc0a8ff14a08aadc1fe (patch)
treea5565b63067331dc9cde0a1285bcef640868abf6 /sdc-workflow-designer-ui/src/app/services
parentce786628733cb20ff806fa5bb8e061400c7213ef (diff)
save and query workflow definition
add in memory web api to mock backend rest api to save and load workflow definition. Issue-ID: SDC-257 Change-Id: Ibedcbe5db5706773de9f6d1093babbcbd7b73297 Signed-off-by: Lvbo163 <lv.bo163@zte.com.cn>
Diffstat (limited to 'sdc-workflow-designer-ui/src/app/services')
-rw-r--r--sdc-workflow-designer-ui/src/app/services/data-access/catalog.service.ts31
-rw-r--r--sdc-workflow-designer-ui/src/app/services/data-access/data-access.service.ts27
-rw-r--r--sdc-workflow-designer-ui/src/app/services/data-access/in-memory-data.service.ts33
-rw-r--r--sdc-workflow-designer-ui/src/app/services/data-access/sdc.service.ts49
-rw-r--r--sdc-workflow-designer-ui/src/app/services/workflow.service.ts30
5 files changed, 160 insertions, 10 deletions
diff --git a/sdc-workflow-designer-ui/src/app/services/data-access/catalog.service.ts b/sdc-workflow-designer-ui/src/app/services/data-access/catalog.service.ts
new file mode 100644
index 00000000..5eaf6351
--- /dev/null
+++ b/sdc-workflow-designer-ui/src/app/services/data-access/catalog.service.ts
@@ -0,0 +1,31 @@
+/**
+ * Copyright (c) 2017 ZTE Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * and the Apache License 2.0 which both accompany this distribution,
+ * and are available at http://www.eclipse.org/legal/epl-v10.html
+ * and http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Contributors:
+ * ZTE - initial API and implementation and/or initial documentation
+ */
+
+import { Injectable } from '@angular/core';
+import { WorkflowNode } from "../../model/workflow-node";
+import { Observable } from "rxjs/Observable";
+import { HttpService } from "../../util/http.service";
+import { Workflow } from "../../model/workflow";
+
+/**
+ * CatalogService
+ * provides data access from backend
+ */
+@Injectable()
+export abstract class CatalogService {
+
+ constructor(protected httpService: HttpService) {}
+
+ public abstract loadWorkflow(workflowId: string): Observable<Workflow>;
+
+ public abstract saveWorkflow(workflow: Workflow): Observable<boolean>;
+}
diff --git a/sdc-workflow-designer-ui/src/app/services/data-access/data-access.service.ts b/sdc-workflow-designer-ui/src/app/services/data-access/data-access.service.ts
new file mode 100644
index 00000000..451d7a2b
--- /dev/null
+++ b/sdc-workflow-designer-ui/src/app/services/data-access/data-access.service.ts
@@ -0,0 +1,27 @@
+/**
+ * Copyright (c) 2017 ZTE Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * and the Apache License 2.0 which both accompany this distribution,
+ * and are available at http://www.eclipse.org/legal/epl-v10.html
+ * and http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Contributors:
+ * ZTE - initial API and implementation and/or initial documentation
+ */
+
+import { Injectable } from '@angular/core';
+import { CatalogService } from "./catalog.service";
+import { SdcService } from "./sdc.service";
+import { HttpService } from "../../util/http.service";
+
+/**
+ * DataAccessService
+ * provides data access from backend
+ */
+@Injectable()
+export class DataAccessService {
+ constructor(private httpService: HttpService) {}
+
+ public catalogService: CatalogService = new SdcService(this.httpService);
+}
diff --git a/sdc-workflow-designer-ui/src/app/services/data-access/in-memory-data.service.ts b/sdc-workflow-designer-ui/src/app/services/data-access/in-memory-data.service.ts
new file mode 100644
index 00000000..1609c948
--- /dev/null
+++ b/sdc-workflow-designer-ui/src/app/services/data-access/in-memory-data.service.ts
@@ -0,0 +1,33 @@
+/**
+ * Copyright (c) 2017 ZTE Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * and the Apache License 2.0 which both accompany this distribution,
+ * and are available at http://www.eclipse.org/legal/epl-v10.html
+ * and http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Contributors:
+ * ZTE - initial API and implementation and/or initial documentation
+ */
+
+import { Injectable } from '@angular/core';
+import { InMemoryDbService } from 'angular-in-memory-web-api';
+/**
+ * InMemeoryDataService
+ * Mock backend data
+ */
+export class InMemoryDataService implements InMemoryDbService {
+ createDb() {
+ const workflows = [{
+ id: 'workflow1',
+ name:'workflow1',
+ nodes: []
+ },{
+ id:'workflow2',
+ name: 'workflow2',
+ nodes: []
+ }
+ ];
+ return {workflows};
+ }
+}
diff --git a/sdc-workflow-designer-ui/src/app/services/data-access/sdc.service.ts b/sdc-workflow-designer-ui/src/app/services/data-access/sdc.service.ts
new file mode 100644
index 00000000..cec6ae25
--- /dev/null
+++ b/sdc-workflow-designer-ui/src/app/services/data-access/sdc.service.ts
@@ -0,0 +1,49 @@
+/**
+ * Copyright (c) 2017 ZTE Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * and the Apache License 2.0 which both accompany this distribution,
+ * and are available at http://www.eclipse.org/legal/epl-v10.html
+ * and http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Contributors:
+ * ZTE - initial API and implementation and/or initial documentation
+ */
+
+import { Injectable } from '@angular/core';
+import { CatalogService } from "./catalog.service";
+import { Observable } from "rxjs/Observable";
+import { WorkflowNode } from "../../model/workflow-node";
+import { HttpService } from "../../util/http.service";
+import { Workflow } from "../../model/workflow";
+
+/**
+ * SdcService
+ * provides data access from sdc
+ */
+@Injectable()
+export class SdcService extends CatalogService {
+
+ constructor(protected httpService: HttpService) {
+ super(httpService);
+ }
+
+ public loadWorkflows(): Observable<WorkflowNode[]> {
+ // TODO load data from sdc
+ const url = 'api/workflows';
+ return this.httpService.get(url);
+ }
+
+ public loadWorkflow(workflowId: string): Observable<Workflow> {
+ // TODO load data from sdc
+ const url = `api/workflows/${workflowId}`;
+ return this.httpService.get(url).map(response => response.data);
+ }
+
+ public saveWorkflow(workflow: Workflow): Observable<boolean> {
+ // TODO save workflow design to sdc
+ const url = `api/workflows/${workflow.id}`;
+ return this.httpService.put(url, JSON.stringify(workflow)).map(() => true);
+ }
+
+}
diff --git a/sdc-workflow-designer-ui/src/app/services/workflow.service.ts b/sdc-workflow-designer-ui/src/app/services/workflow.service.ts
index 59e1fd54..d9a949ea 100644
--- a/sdc-workflow-designer-ui/src/app/services/workflow.service.ts
+++ b/sdc-workflow-designer-ui/src/app/services/workflow.service.ts
@@ -12,6 +12,9 @@
import { Injectable } from '@angular/core';
import { WorkflowNode } from "../model/workflow-node";
+import { DataAccessService } from "./data-access/data-access.service";
+import { Observable } from "rxjs/Observable";
+import { Workflow } from "../model/workflow";
/**
* WorkflowService
@@ -19,34 +22,41 @@ import { WorkflowNode } from "../model/workflow-node";
*/
@Injectable()
export class WorkflowService {
- public nodes: WorkflowNode[] = [];
- public getNodes(): WorkflowNode[] {
- return this.nodes;
+ public workflow: Workflow;
+
+ constructor(private dataAccessService: DataAccessService) {
+
+ }
+
+ public save(): Observable<boolean> {
+ return this.dataAccessService.catalogService.saveWorkflow(this.workflow);
}
- public addNode(name: string, type: string, top: number, left: number) {
- this.nodes.push(new WorkflowNode(this.createId(), name, type, top, left));
+ public addNode(name: string, type: string, top: number, left: number): WorkflowNode {
+ const node = new WorkflowNode(this.createId(), name, type, top, left);
+ this.workflow.nodes.push(node);
+ return node;
}
public deleteNode(nodeId: string): WorkflowNode {
// delete current node
- const index = this.nodes.findIndex(node => node.id === nodeId);
+ const index = this.workflow.nodes.findIndex(node => node.id === nodeId);
if (index !== -1) {
- const node = this.nodes.splice(index, 1)[0];
+ const node = this.workflow.nodes.splice(index, 1)[0];
return node;
}
return undefined;
}
- public getNode(sourceId: string): WorkflowNode {
- return this.nodes.find(node => node.id === sourceId);
+ public getNodeById(sourceId: string): WorkflowNode {
+ return this.workflow.nodes.find(node => node.id === sourceId);
}
private createId() {
const idSet = new Set();
- this.nodes.forEach(node => idSet.add(node.id));
+ this.workflow.nodes.forEach(node => idSet.add(node.id));
for (let i = 0; i < idSet.size; i++) {
if (!idSet.has('node' + i)) {