protected virtual void OnPoolChanged(PoolEvent evt) { if (this.PoolChanged != null) { this.PoolChanged(this, evt); } }
protected override void UpdateController(Controller controller) { UpdateCompletedEvent updateCompletedEvent = new UpdateCompletedEvent(); SpacesController spacesController = new SpacesController(((SpacesController)controller).Id); StorApiStatus storApiStatus = spacesController.Update(); if (storApiStatus != StorApiStatusEnum.STOR_NO_ERROR) { updateCompletedEvent.updateStatus = storApiStatus; updateCompletedEvent.controller = controller; this.OnUpdateCompleted(updateCompletedEvent); return; } ListComparer <Drive> listComparer = new ListComparer <Drive>(); listComparer.Compare(controller.Drives, spacesController.Drives, new Func <Drive, Drive, bool>(SpacesDrive.CompareAndPreserve)); ListComparer <Volume> listComparer2 = new ListComparer <Volume>(); listComparer2.Compare(controller.Volumes, spacesController.Volumes, new Func <Volume, Volume, bool>(SpacesVolume.CompareInfo)); ListComparer <SpacesPool> listComparer3 = new ListComparer <SpacesPool>(); listComparer3.Compare(((SpacesController)controller).Pools, spacesController.Pools, new Func <SpacesPool, SpacesPool, bool>(SpacesPool.CompareInfo)); controller.Drives = spacesController.Drives; controller.Volumes = spacesController.Volumes; ((SpacesController)controller).Pools = spacesController.Pools; if (listComparer.AnythingChanged) { listComparer.removedItems.ForEach(delegate(ListComparer <Drive> .ItemData d) { DriveEvent driveEvent = new DriveEvent(); driveEvent.controller = controller; driveEvent.drive = d.newItem; driveEvent.oldDrive = d.oldItem; driveEvent.type = ControllerEventType.EVENT_TYPE_REMOVED; this.OnDriveChanged(driveEvent); }); listComparer.changedItems.ForEach(delegate(ListComparer <Drive> .ItemData d) { DriveEvent driveEvent = new DriveEvent(); driveEvent.controller = controller; driveEvent.drive = d.newItem; driveEvent.oldDrive = d.oldItem; driveEvent.type = ControllerEventType.EVENT_TYPE_CHANGED; this.OnDriveChanged(driveEvent); }); listComparer.addedItems.ForEach(delegate(ListComparer <Drive> .ItemData d) { DriveEvent driveEvent = new DriveEvent(); driveEvent.controller = controller; driveEvent.drive = d.newItem; driveEvent.oldDrive = d.oldItem; driveEvent.type = ControllerEventType.EVENT_TYPE_ADDED; this.OnDriveChanged(driveEvent); }); } if (listComparer2.AnythingChanged) { listComparer2.removedItems.ForEach(delegate(ListComparer <Volume> .ItemData d) { VolumeEvent volumeEvent = new VolumeEvent(); volumeEvent.controller = controller; volumeEvent.volume = d.newItem; volumeEvent.oldVolume = d.oldItem; volumeEvent.type = ControllerEventType.EVENT_TYPE_REMOVED; this.OnVolumeChanged(volumeEvent); }); listComparer2.changedItems.ForEach(delegate(ListComparer <Volume> .ItemData d) { VolumeEvent volumeEvent = new VolumeEvent(); volumeEvent.controller = controller; volumeEvent.volume = d.newItem; volumeEvent.oldVolume = d.oldItem; volumeEvent.type = ControllerEventType.EVENT_TYPE_CHANGED; this.OnVolumeChanged(volumeEvent); }); listComparer2.addedItems.ForEach(delegate(ListComparer <Volume> .ItemData d) { VolumeEvent volumeEvent = new VolumeEvent(); volumeEvent.controller = controller; volumeEvent.volume = d.newItem; volumeEvent.oldVolume = d.oldItem; volumeEvent.type = ControllerEventType.EVENT_TYPE_ADDED; this.OnVolumeChanged(volumeEvent); }); } if (listComparer3.AnythingChanged) { listComparer3.removedItems.ForEach(delegate(ListComparer <SpacesPool> .ItemData d) { PoolEvent poolEvent = new PoolEvent(); poolEvent.controller = controller; poolEvent.pool = d.newItem; poolEvent.oldPool = d.oldItem; poolEvent.type = ControllerEventType.EVENT_TYPE_REMOVED; this.OnPoolChanged(poolEvent); }); listComparer3.changedItems.ForEach(delegate(ListComparer <SpacesPool> .ItemData d) { PoolEvent poolEvent = new PoolEvent(); poolEvent.controller = controller; poolEvent.pool = d.newItem; poolEvent.oldPool = d.oldItem; poolEvent.type = ControllerEventType.EVENT_TYPE_CHANGED; this.OnPoolChanged(poolEvent); }); listComparer3.addedItems.ForEach(delegate(ListComparer <SpacesPool> .ItemData d) { PoolEvent poolEvent = new PoolEvent(); poolEvent.controller = controller; poolEvent.pool = d.newItem; poolEvent.oldPool = d.oldItem; poolEvent.type = ControllerEventType.EVENT_TYPE_ADDED; this.OnPoolChanged(poolEvent); }); } updateCompletedEvent.updateStatus = StorApiStatusEnum.STOR_NO_ERROR; updateCompletedEvent.controller = controller; this.OnUpdateCompleted(updateCompletedEvent); }