private static void RemoveLockingInformation(EntityToken entityToken, object ownerId) { LockingInformation lockingInformation; if (!_lockingInformations.TryGetValue(entityToken, out lockingInformation)) { return; } if (Equals(lockingInformation.OwnerId, ownerId)) { _lockingInformations.Remove(entityToken); } string serializedOwnerId = SerializeOwnerId(ownerId); string serializedEntityToken = EntityTokenSerializer.Serialize(entityToken); ILockingInformation lockingInformationDataItem = DataFacade.GetData <ILockingInformation>() .SingleOrDefault(f => f.SerializedEntityToken == serializedEntityToken && f.SerializedOwnerId == serializedOwnerId); if (lockingInformationDataItem == null) { Log.LogWarning(LogTitle, "Failed to find entity token lock. EntityToken: " + serializedEntityToken); return; } DataFacade.Delete(lockingInformationDataItem); }
private static void AddLockingInformation(EntityToken entityToken, object ownerId) { LockingInformation lockingInformation; if (_lockingInformations.TryGetValue(entityToken, out lockingInformation)) { if (object.Equals(lockingInformation.OwnerId, ownerId)) { // NO OP: The owner may acquire a lock multiple times return; } // This will only happen if an entity token subclass is not rightly implemented throw new ActionLockingException("This item is used by another user, try again."); } lockingInformation = new LockingInformation { Username = UserValidationFacade.GetUsername(), OwnerId = ownerId }; string serializedOwnerId = SerializeOwnerId(lockingInformation.OwnerId); ILockingInformation li = DataFacade.BuildNew <ILockingInformation>(); li.Id = Guid.NewGuid(); li.SerializedEntityToken = EntityTokenSerializer.Serialize(entityToken); li.SerializedOwnerId = serializedOwnerId; li.Username = lockingInformation.Username; DataFacade.AddNew <ILockingInformation>(li); _lockingInformations.Add(entityToken, lockingInformation); }
private static void UpdateLockingInformation(EntityToken entityToken, object newOwnerId) { LockingInformation lockingInformation; if (!_lockingInformations.TryGetValue(entityToken, out lockingInformation)) { throw new InvalidOperationException("LockingInformation record missing"); } string serializedEntityToken = EntityTokenSerializer.Serialize(entityToken); ILockingInformation lockingInformationDataItem = DataFacade.GetData <ILockingInformation>(). Single(f => f.SerializedEntityToken == serializedEntityToken); lockingInformationDataItem.SerializedOwnerId = SerializeOwnerId(newOwnerId); DataFacade.Update(lockingInformationDataItem); lockingInformation.OwnerId = newOwnerId; }