697cd8fd246e5b4ae2d113f4f12c09195d34ca97
[arvados-workbench2.git] / src / services / ancestors-service / ancestors-service.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { GroupsService } from "~/services/groups-service/groups-service";
6 import { UserService } from '../user-service/user-service';
7 import { GroupResource } from '~/models/group';
8 import { UserResource } from '~/models/user';
9 import { extractUuidObjectType, ResourceObjectType, TrashableResource } from "~/models/resource";
10
11 export class AncestorService {
12     constructor(
13         private groupsService: GroupsService,
14         private userService: UserService
15     ) { }
16
17     async ancestors(uuid: string, rootUuid: string, previousUuid = ''): Promise<Array<UserResource | GroupResource>> {
18
19         if (uuid === previousUuid) {
20             return [];
21         }
22
23         const service = this.getService(extractUuidObjectType(uuid));
24         if (service) {
25             try {
26                 const resource = await service.get(uuid);
27                 if (uuid === rootUuid) {
28                     return [resource];
29                 } else {
30                     return [
31                         ...await this.ancestors(resource.ownerUuid, rootUuid, uuid),
32                         resource
33                     ];
34                 }
35             } catch (e) {
36                 return [];
37             }
38         } else {
39             return [];
40         }
41     }
42
43     private getService = (objectType?: string) => {
44         switch (objectType) {
45             case ResourceObjectType.GROUP:
46                 return this.groupsService;
47             case ResourceObjectType.USER:
48                 return this.userService;
49             default:
50                 return undefined;
51         }
52     }
53 }