1 /* Copyright (c) 2019 AT&T Intellectual Property. #
\r
3 # Licensed under the Apache License, Version 2.0 (the "License"); #
\r
4 # you may not use this file except in compliance with the License. #
\r
5 # You may obtain a copy of the License at #
\r
7 # http://www.apache.org/licenses/LICENSE-2.0 #
\r
9 # Unless required by applicable law or agreed to in writing, software #
\r
10 # distributed under the License is distributed on an "AS IS" BASIS, #
\r
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
\r
12 # See the License for the specific language governing permissions and #
\r
13 # limitations under the License. #
\r
14 ##############################################################################*/
\r
17 import { Injectable } from '@angular/core';
\r
18 import { FileTransferService } from '../services/file-transfer.service';
\r
19 import { TestDefinitionService } from '../services/test-definition.service';
\r
20 import { Observable } from 'rxjs';
\r
21 import { Buffer } from 'buffer';
\r
22 import { BpmnOptions, Bpmn } from '../models/bpmn.model';
\r
24 interface BpmnFactoryOptions extends BpmnOptions {
\r
26 testDefinitionId?: String,
\r
34 export class BpmnFactoryService {
\r
37 private filesTransfer: FileTransferService,
\r
38 private testDefinition: TestDefinitionService
\r
41 public async setup(options: BpmnFactoryOptions): Promise<any> {
\r
42 return new Promise(async (resolve, reject) => {
\r
43 //check for required options
\r
44 if (!options.mode) {
\r
45 console.error('Bpmn options require: mode');
\r
46 reject('Bpmn options require: mode')
\r
49 let xml = await this.getXml(options);
\r
51 let instance = new Bpmn(xml, {
\r
53 options: options.options
\r
61 public async getXml(options): Promise<any> {
\r
62 return new Promise(async (resolve, reject) => {
\r
65 //handle the way to retrieve bpmn xml
\r
68 } else if (options.fileId) {
\r
69 xml = await this.loadFile(options.fileId);
\r
70 } else if (options.testDefinitionId && options.version) {
\r
71 let fileId = await this.getFileId(options.testDefinitionId, options.version);
\r
72 xml = await this.loadFile(fileId);
\r
73 } else if (options.testDefinitionId) {
\r
74 let fileId = await this.getFileId(options.testDefinitionId);
\r
75 xml = await this.loadFile(fileId);
\r
77 console.warn('Either xml, fileId, testDefinitionId and version, or testDefinitionId is required to render the bpmn');
\r
86 private getFileId(id, version?): Observable<Object> {
\r
87 return new Observable(observer => {
\r
88 this.testDefinition.get(id).subscribe(
\r
90 if (data['bpmnInstances']) {
\r
93 for (let i = 0; i < data['bpmnInstances'].length; i++) {
\r
94 if (version == data['bpmnInstances'][i].version) {
\r
100 observer.next(data['bpmnInstances'][index].bpmnFileId);
\r
102 observer.error('No bpmn file');
\r
106 if (data['bpmnInstances'][data['bpmnInstances'].length - 1].bpmnFileId) {
\r
107 observer.next(data['bpmnInstances'][data['bpmnInstances'].length - 1].bpmnFileId);
\r
109 observer.error('No bpmn file');
\r
113 observer.error('No bpmn instances');
\r
117 observer.error('No test definition found');
\r
123 public loadFile(bpmnFileId) {
\r
124 return new Promise((resolve, reject) => {
\r
125 this.filesTransfer.get(bpmnFileId).subscribe(content => {
\r
126 resolve(new Buffer(content as Buffer).toString());
\r