public SavePresentationResult SavePresentationChanges(UserIdentity userIdentity, PresentationInfo presentationInfo, Slide[] newSlideArr, out ResourceDescriptor[] resourcesNotExists, out DeviceResourceDescriptor[] deviceResourcesNotExists, out int[] labelNotExists, out UserIdentity[] whoLock, out int[] slidesAlreadyExistsId) { resourcesNotExists = new ResourceDescriptor[] { }; deviceResourcesNotExists = new DeviceResourceDescriptor[] {}; whoLock = new UserIdentity[] { }; slidesAlreadyExistsId = new int[] { }; labelNotExists = presentationInfo.GetUsedLabels().Except( _configuration.LabelStorageAdapter.GetLabelStorage().Select(lb => lb.Id)).ToArray(); if (labelNotExists.Length != 0) return SavePresentationResult.LabelNotExists; if (!IsStandAlone) { // необходим лок уровня презентации LockingInfo info = _lockService.GetLockInfo(ObjectKeyCreator.CreatePresentationKey(presentationInfo)); if (info == null || !info.UserIdentity.Equals(userIdentity)) return SavePresentationResult.PresentationNotLocked; } string[] deletedEquipment; Presentation presentationStored = _presentationDAL.GetPresentation( presentationInfo.UniqueName, _sourceDAL, _deviceSourceDAL, out deletedEquipment); if (presentationStored == null) return SavePresentationResult.PresentationNotExists; resourcesNotExists = GetNotExistedResource(newSlideArr); deviceResourcesNotExists = GetNotExistedDeviceResource(newSlideArr, presentationInfo); if (resourcesNotExists.Length != 0 || deviceResourcesNotExists.Length != 0) return SavePresentationResult.ResourceNotExists; LockingInfo[] lockedSlides; Slide[] slideAlreadyExists; presentationStored = Merge(userIdentity, presentationInfo, newSlideArr, presentationStored, out lockedSlides, out slideAlreadyExists); if (presentationStored == null) { SavePresentationResult result = SavePresentationResult.Unknown; if (lockedSlides.Length != 0) { whoLock = lockedSlides.Select(li => li.UserIdentity).ToArray(); result = SavePresentationResult.SlideLocked; } if (slideAlreadyExists.Length != 0) { slidesAlreadyExistsId = slideAlreadyExists.Select(sl => sl.Id).ToArray(); result = SavePresentationResult.SlideAlreadyExists; } return result; } bool isSuccess = _presentationDAL.SavePresentation(userIdentity, presentationStored); if (isSuccess) { PresentationKey presentationKey = ObjectKeyCreator.CreatePresentationKey(presentationStored); ObjectChanged(userIdentity, new List<ObjectInfo> { new ObjectInfo(userIdentity, presentationKey) }, new PresentationInfo(presentationStored), true); } else { return SavePresentationResult.Unknown; } return SavePresentationResult.Ok; }
public CreatePresentationResult CreatePresentation(UserIdentity sender, PresentationInfo presentationInfo, out int[] labelNotExists) { labelNotExists = presentationInfo.GetUsedLabels().Except( _configuration.LabelStorageAdapter.GetLabelStorage().Select(lb => lb.Id)).ToArray(); if (labelNotExists.Length != 0) return CreatePresentationResult.LabelNotExists; if (null != _presentationDAL.GetPresentationInfo(presentationInfo.UniqueName)) return CreatePresentationResult.SameUniqueNameExists; if (null != _presentationDAL.GetPresentationInfoByPresentationName(presentationInfo.Name)) return CreatePresentationResult.SameNameExists; bool isSuccess = _presentationDAL.SavePresentation(sender, presentationInfo.CreatePresentationStub()); if (isSuccess) return CreatePresentationResult.Ok; else return CreatePresentationResult.SameNameExists; }