From a53dbd4f12ddd206c2ce9dc0a8ff14a08aadc1fe Mon Sep 17 00:00:00 2001 From: Lvbo163 Date: Wed, 30 Aug 2017 09:21:09 +0800 Subject: 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 --- .../app/services/data-access/catalog.service.ts | 31 ++++++++++++++ .../services/data-access/data-access.service.ts | 27 ++++++++++++ .../services/data-access/in-memory-data.service.ts | 33 +++++++++++++++ .../src/app/services/data-access/sdc.service.ts | 49 ++++++++++++++++++++++ .../src/app/services/workflow.service.ts | 30 ++++++++----- 5 files changed, 160 insertions(+), 10 deletions(-) create mode 100644 sdc-workflow-designer-ui/src/app/services/data-access/catalog.service.ts create mode 100644 sdc-workflow-designer-ui/src/app/services/data-access/data-access.service.ts create mode 100644 sdc-workflow-designer-ui/src/app/services/data-access/in-memory-data.service.ts create mode 100644 sdc-workflow-designer-ui/src/app/services/data-access/sdc.service.ts (limited to 'sdc-workflow-designer-ui/src/app/services') 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; + + public abstract saveWorkflow(workflow: Workflow): Observable; +} 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 { + // TODO load data from sdc + const url = 'api/workflows'; + return this.httpService.get(url); + } + + public loadWorkflow(workflowId: string): Observable { + // TODO load data from sdc + const url = `api/workflows/${workflowId}`; + return this.httpService.get(url).map(response => response.data); + } + + public saveWorkflow(workflow: Workflow): Observable { + // 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 { + 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)) { -- cgit 1.2.3-korg