1 import {PolicyInstance} from "app/models/graph/zones/policy-instance";
2 import {GroupInstance} from "./group-instance";
3 import {Component as TopologyTemplate} from "app/models";
4 import {IUiBaseObject} from "../../ui-models/ui-base-object";
5 import { Subject } from "rxjs";
7 export enum ZoneInstanceMode {
14 export enum ZoneInstanceType {
19 export enum ZoneInstanceAssignmentType {
24 export interface IZoneInstanceMethod {
26 getSavedAssignments():Array<IZoneInstanceAssignment>;
27 setSavedAssignments(newAssignments:Array<IZoneInstanceAssignment>):void;
30 export interface IZoneInstanceAssignment extends IUiBaseObject{
31 type: ZoneInstanceAssignmentType
34 export class ZoneInstance {
36 parentComponentType:string;
37 parentComponentID:string;
38 instanceData: PolicyInstance | GroupInstance;
39 mode:ZoneInstanceMode;
40 type:ZoneInstanceType;
42 assignments:Array<IZoneInstanceAssignment>; //temp assignments visible on the UI; not the saved values on the BE
44 forceSave:Subject<Function>;
46 constructor(instance: PolicyInstance | GroupInstance, topologyTemplate:TopologyTemplate) {
48 this.instanceData = instance;
49 this.parentComponentType = topologyTemplate.componentType;
50 this.parentComponentID = topologyTemplate.uniqueId;
52 if (instance instanceof PolicyInstance) {
53 this.type = ZoneInstanceType.POLICY;
55 this.type = ZoneInstanceType.GROUP;
58 this.assignments = this.instanceData.getSavedAssignments();
59 this.mode = ZoneInstanceMode.NONE;
61 this.forceSave = new Subject();
64 public isAlreadyAssigned = (nodeId:string):boolean => {
65 let matchingAssignments = this.assignments.filter((assignment) => {
66 return assignment.uniqueId == nodeId;
68 return matchingAssignments && matchingAssignments.length > 0;
71 public addOrRemoveAssignment = (nodeId:string, nodeType:ZoneInstanceAssignmentType)=> { //change temp assignments, unsaved but visible in UI.
73 if (!this.isAlreadyAssigned(nodeId)) {
74 this.assignments.push(<IZoneInstanceAssignment>{uniqueId: nodeId, type: nodeType});
76 this.assignments = this.assignments.filter(assignment => assignment.uniqueId != nodeId);
80 public isZoneAssignmentChanged(oldAssignments:Array<IZoneInstanceAssignment>, newAssignments:Array<IZoneInstanceAssignment>):boolean {
81 if (oldAssignments.length != newAssignments.length) {
84 let difference:Array<IZoneInstanceAssignment> = oldAssignments.filter((oldAssignment) => {
85 return !newAssignments.find(newAssignment => newAssignment.uniqueId == oldAssignment.uniqueId);
87 if (difference.length) {
94 public updateInstanceData (instanceData: PolicyInstance | GroupInstance):void {
95 this.instanceData = instanceData;
96 this.assignments = this.instanceData.getSavedAssignments();
99 public showHandle = (handleId:string) => {
100 this.handle = handleId;
103 public hideHandle = ():void => {