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';
11 export class GroupsService implements IZoneService {
15 private mapApiDirections = {
16 'RESOURCE': 'resources',
20 constructor(private http: HttpClient, @Inject(SdcConfigToken) sdcConfig:ISdcConfig) {
21 this.baseUrl = sdcConfig.api.root;
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);
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);
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);
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);
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);
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)
54 return new GroupInstance(res);
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});
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);
66 public updateZoneInstanceAssignments(topologyTemplateType:string, topologyTemplateId:string, policyId:string, members:Array<IZoneInstanceAssignment>):Observable<any> {
67 return this.updateMembers(topologyTemplateType, topologyTemplateId, policyId, members);
70 public deleteZoneInstance(topologyTemplateType:string, topologyTemplateId:string, policyId:string):Observable<any> {
71 return this.deleteGroup(topologyTemplateType, topologyTemplateId, policyId);