re base code
[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 {HttpService} from "./http.service";
5 import {SdcConfigToken, ISdcConfig} from "../config/sdc-config.config";
6 import {GroupInstance} from '../../models/graph/zones/group-instance';
7 import {UiBaseObject} from "../../models/ui-models/ui-base-object";
8 import {IZoneService} from "../../models/graph/zones/zone";
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:HttpService, @Inject(SdcConfigToken) sdcConfig:ISdcConfig) {
21         this.baseUrl = sdcConfig.api.root;
22     }
23
24     public createGroupInstance(componentType:string, componentUniqueId:string, groupType:string) {
25         return this.http.post(this.baseUrl + '/v1/catalog/' + this.mapApiDirections[componentType.toUpperCase()] + '/' + componentUniqueId + '/groups/' + groupType, {}).map(resp => {
26             return resp.json();
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(this.baseUrl + '/v1/catalog/' + this.mapApiDirections[topologyTemplateType.toUpperCase()] + '/' + topologyTemplateId + '/groups/' + groupId + '/members', members)
44             .map(response => response.json());
45     }
46
47     public updateMembers(topologyTemplateType:string, topologyTemplateId:string, groupId:string, members:Array<UiBaseObject>):Observable<Array<string>> {
48         let membersIds:Array<string> = members.map(member => member.uniqueId);
49         return this.updateGroupMembers(topologyTemplateType, topologyTemplateId, groupId, membersIds);
50     }
51
52     public getSpecificGroup(topologyTemplateType:string, topologyTemplateId:string, groupId:string):Observable<GroupInstance> {
53         return this.http.get(this.baseUrl + '/v1/catalog/' + this.mapApiDirections[topologyTemplateType.toUpperCase()] + '/' + topologyTemplateId + '/groups/' + groupId)
54             .map(res => {
55                 return new GroupInstance(res.json());
56             });
57     }
58
59     public updateName(topologyTemplateType:string, topologyTemplateId:string, groupId:string, newName:string):Observable<GroupInstance> {
60         return this.http.put(this.baseUrl + '/v1/catalog/' + this.mapApiDirections[topologyTemplateType.toUpperCase()] + '/' + topologyTemplateId + '/groups/' + groupId, {name: newName}).map(resp => {
61             return resp.json();
62         });
63     };
64
65     public deleteGroup(topologyTemplateType:string, topologyTemplateId:string, groupId:string) {
66         return this.http.delete(this.baseUrl + '/v1/catalog/' + this.mapApiDirections[topologyTemplateType.toUpperCase()] + '/' + topologyTemplateId + '/groups/' + groupId).map(resp => {
67             return resp.json();
68         });
69     };
70
71     public updateZoneInstanceAssignments(topologyTemplateType:string, topologyTemplateId:string, policyId:string, members:Array<IZoneInstanceAssignment>):Observable<any> {
72         return this.updateMembers(topologyTemplateType, topologyTemplateId, policyId, members);
73     };
74
75     public deleteZoneInstance(topologyTemplateType:string, topologyTemplateId:string, policyId:string):Observable<any> {
76         return this.deleteGroup(topologyTemplateType, topologyTemplateId, policyId);
77     };
78 }