re base code
[sdc.git] / catalog-ui / src / app / models / graph / zones / policy-instance.ts
1 import { PropertyModel } from "app/models";
2 import { CommonUtils } from "app/utils";
3 import {IZoneInstanceMethod, IZoneInstanceAssignment} from "./zone-instance";
4 import {GroupInstance} from "./group-instance";
5 import {ComponentInstance} from "../../componentsInstances/componentInstance";
6 import {TargetUiObject} from "../../ui-models/ui-target-object";
7 import {TargetOrMemberType} from "../../../utils/constants";
8
9 /* The request and response should be same model, need to fix in BE */
10 export class PolicyTargetsMap {
11     COMPONENT_INSTANCES:Array<string>;
12     GROUPS:Array<string>;
13 }
14 //TODO remove this
15 export class PolicyTargetsRequest {
16
17     requestItems:Array<PolicyTargetsRequestItem>;
18
19     constructor(groups:Array<string>,instances:Array<string>){
20
21         this.requestItems = [];
22
23         if (instances && instances.length>0) {
24             let instancesObj:PolicyTargetsRequestItem = {
25                 type: "component_Instances",
26                 uniqueIds: instances
27             };
28             this.requestItems.push(instancesObj);
29         }
30         if (groups && groups.length>0) {
31             let groupsObj:PolicyTargetsRequestItem = {
32                 type: "groups",
33                 uniqueIds: groups
34             };
35             this.requestItems.push(groupsObj);
36         }
37     }
38 }
39
40 export class PolicyTargetsRequestItem {
41     type: string;
42     uniqueIds:Array<String>;
43 }
44     
45 export class PolicyInstance implements IZoneInstanceMethod {
46     componentName:string;
47     description:string;
48     empty:boolean;
49     invariantName:string;
50     invariantUUID:string;
51     isFromCsar:boolean;
52
53     name:string;
54     normalizedName:string;
55     type:string;
56     policyTypeUid:string;
57     policyUUID:string;
58     properties:Array<PropertyModel>;
59     targets:PolicyTargetsMap;
60     uniqueId:string;
61     version:string;
62     iconSprite:string;
63     icon:string;
64     originArchived:boolean;
65
66
67     constructor(policy?:PolicyInstance) {
68         this.componentName = policy.componentName;
69         this.description = policy.description;
70         this.empty = policy.empty;
71         this.invariantName = policy.invariantName;
72         this.invariantUUID = policy.invariantUUID;
73         this.isFromCsar = policy.isFromCsar;
74         
75         this.name = policy.name;
76         this.normalizedName =policy.normalizedName;
77         this.type = policy.type;
78         this.policyTypeUid = policy.policyTypeUid;
79         this.policyUUID = policy.policyUUID;
80         this.properties = CommonUtils.initProperties(policy.properties);
81         this.targets = policy.targets;
82         this.uniqueId = policy.uniqueId;
83         this.version = policy.version;
84
85         this.iconSprite = '';
86         this.icon = 'icon-policy';
87     }
88
89     public getTargetsAsUiObject(componentInstances?:Array<ComponentInstance>, groupInstances?:Array<GroupInstance>):Array<TargetUiObject> {
90         let savedItems:Array<TargetUiObject> = [];
91
92         //get all targets from component instances
93         if (!_.isEmpty(this.targets.COMPONENT_INSTANCES)) {
94             this.targets.COMPONENT_INSTANCES.forEach((targetInstanceId:string)=> {
95                 let componentInstance:ComponentInstance;
96                 if (componentInstances) {
97                     componentInstance = _.find(componentInstances, function (_componentInstance:ComponentInstance) {
98                         return _componentInstance.uniqueId === targetInstanceId;
99                     })
100                 }
101                 savedItems.push(new TargetUiObject(targetInstanceId, TargetOrMemberType.COMPONENT_INSTANCES, componentInstance ? componentInstance.name : undefined));
102             });
103         }
104
105         //get all targets from groupInstances
106         if (!_.isEmpty(this.targets.GROUPS)) {
107             this.targets.GROUPS.forEach((groupsTargetId:string)=> {
108                 let groupInstance:GroupInstance;
109                 if (groupInstances) {
110                     groupInstance = _.find(groupInstances, function (_groupInstance:GroupInstance) {
111                         return _groupInstance.uniqueId === groupsTargetId;
112                     })
113                 }
114                 savedItems.push(new TargetUiObject(groupsTargetId, TargetOrMemberType.GROUPS, groupInstance? groupInstance.name : undefined));
115             });
116         }
117         return savedItems;
118     };
119
120     public saveTargets = (newTargets:Array<TargetUiObject>):void => {
121         this.targets.COMPONENT_INSTANCES = newTargets.filter(target => target.type === TargetOrMemberType.COMPONENT_INSTANCES).map(target => target.uniqueId);
122         this.targets.GROUPS = newTargets.filter(target => target.type === TargetOrMemberType.GROUPS).map(target => target.uniqueId);
123     }
124
125     // This function is used for the zone to get and set the assignment
126     public getSavedAssignments = ():Array<IZoneInstanceAssignment> => {
127         return this.getTargetsAsUiObject();
128     };
129
130     public setSavedAssignments = (newMembers:Array<IZoneInstanceAssignment>):void => {
131         this.saveTargets(newMembers);
132     }
133
134     public get iconClass() {
135         return this.iconSprite + ' ' + this.icon;
136     }
137
138 }