Catalog alignment
[sdc.git] / catalog-ui / src / app / ng2 / services / groups.service.ts
1 import {IZoneInstanceAssignment} from '../../models/graph/zones/zone-instance';
2 import {Injectable, Inject} from "@angular/core";
3 import {Observable} from "rxjs/Observable";
4 import {SdcConfigToken, ISdcConfig} from "../config/sdc-config.config";
5 import {GroupInstance} from '../../models/graph/zones/group-instance';
6 import {UiBaseObject} from "../../models/ui-models/ui-base-object";
7 import {IZoneService} from "../../models/graph/zones/zone";
8 import { HttpClient } from '@angular/common/http';
9
10 @Injectable()
11 export class GroupsService implements IZoneService {
12
13     protected baseUrl;
14
15     private mapApiDirections = {
16         'RESOURCE': 'resources',
17         'SERVICE': 'services'
18     }
19
20     constructor(private http: HttpClient, @Inject(SdcConfigToken) sdcConfig:ISdcConfig) {
21         this.baseUrl = sdcConfig.api.root;
22     }
23
24     public createGroupInstance(componentType:string, componentUniqueId:string, groupType:string): Observable<GroupInstance>{
25         return this.http.post<GroupInstance>(this.baseUrl + '/v1/catalog/' + this.mapApiDirections[componentType.toUpperCase()] + '/' + componentUniqueId + '/groups/' + groupType, {}).map(resp => {
26             return new GroupInstance(resp);
27         });
28     };
29
30     public addGroupMember(topologyTemplateType:string, topologyTemplateId:string, group:GroupInstance, memberId:string) {
31         let members:Array<string> = Object.assign({}, group.members);
32         members.push(memberId);
33         return this.updateGroupMembers(topologyTemplateType, topologyTemplateId, group.uniqueId, members);
34     }
35
36     public deleteGroupMember(topologyTemplateType:string, topologyTemplateId:string, group:GroupInstance, memberId:string) {
37         let _members:Array<string> = angular.copy(group.members);
38         _members =_.without(_members, memberId);
39         return this.updateGroupMembers(topologyTemplateType, topologyTemplateId, group.uniqueId, _members);
40     }
41
42     public updateGroupMembers(topologyTemplateType:string, topologyTemplateId:string, groupId:string, members:Array<string>):Observable<Array<string>> {
43         return this.http.post<Array<string>>(this.baseUrl + '/v1/catalog/' + this.mapApiDirections[topologyTemplateType.toUpperCase()] + '/' + topologyTemplateId + '/groups/' + groupId + '/members', members);
44     }
45
46     public updateMembers(topologyTemplateType:string, topologyTemplateId:string, groupId:string, members:Array<UiBaseObject>):Observable<Array<string>> {
47         let membersIds:Array<string> = members.map(member => member.uniqueId);
48         return this.updateGroupMembers(topologyTemplateType, topologyTemplateId, groupId, membersIds);
49     }
50
51     public getSpecificGroup(topologyTemplateType:string, topologyTemplateId:string, groupId:string):Observable<GroupInstance> {
52         return this.http.get<GroupInstance>(this.baseUrl + '/v1/catalog/' + this.mapApiDirections[topologyTemplateType.toUpperCase()] + '/' + topologyTemplateId + '/groups/' + groupId)
53             .map(res => {
54                 return new GroupInstance(res);
55             });
56     }
57
58     public updateName(topologyTemplateType:string, topologyTemplateId:string, groupId:string, newName:string):Observable<GroupInstance> {
59         return this.http.put<GroupInstance>(this.baseUrl + '/v1/catalog/' + this.mapApiDirections[topologyTemplateType.toUpperCase()] + '/' + topologyTemplateId + '/groups/' + groupId, {name: newName});
60     };
61
62     public deleteGroup(topologyTemplateType:string, topologyTemplateId:string, groupId:string) {
63         return this.http.delete<GroupInstance>(this.baseUrl + '/v1/catalog/' + this.mapApiDirections[topologyTemplateType.toUpperCase()] + '/' + topologyTemplateId + '/groups/' + groupId);
64     };
65
66     public updateZoneInstanceAssignments(topologyTemplateType:string, topologyTemplateId:string, policyId:string, members:Array<IZoneInstanceAssignment>):Observable<any> {
67         return this.updateMembers(topologyTemplateType, topologyTemplateId, policyId, members);
68     };
69
70     public deleteZoneInstance(topologyTemplateType:string, topologyTemplateId:string, policyId:string):Observable<any> {
71         return this.deleteGroup(topologyTemplateType, topologyTemplateId, policyId);
72     };
73
74
75 }