コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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;
        }