예제 #1
0
        public int AddIdentityToSequence(Sequence sequence, int position, Identity identity, DataServiceTransaction dataServiceTransaction)
        {
            lock (_objLock)
            {
                if (position == -1 || position > sequence.Size)
                {
                    position = sequence.Add(identity);
                }
                else
                {
                    sequence.Insert(position, identity);
                }

                IDictionary sequenceIdMap = _itemIdToSequenceIdMapHash[identity] as IDictionary;
                if (sequenceIdMap == null)
                {
                    sequenceIdMap = new Hashtable();
                    _itemIdToSequenceIdMapHash[identity] = sequenceIdMap;
                }
                sequenceIdMap[sequence.Id] = sequence;

                if (dataServiceTransaction != null)
                {
                    dataServiceTransaction.GenerateUpdateCollectionMessage(UpdateCollectionRange.InsertIntoCollection, _dataDestination, sequence, position, identity);
                }

                return(position);
            }
        }
예제 #2
0
 public int AddIdentityToSequence(Sequence sequence, int position, Identity identity, DataServiceTransaction dataServiceTransaction)
 {
     lock (_objLock)
     {
         if ((position == -1) || (position > sequence.Size))
         {
             position = sequence.Add(identity);
         }
         else
         {
             sequence.Insert(position, identity);
         }
         IDictionary dictionary = this._itemIdToSequenceIdMapHash[identity] as IDictionary;
         if (dictionary == null)
         {
             dictionary = new Hashtable();
             this._itemIdToSequenceIdMapHash[identity] = dictionary;
         }
         dictionary[sequence.Id] = sequence;
         if (dataServiceTransaction != null)
         {
             dataServiceTransaction.GenerateUpdateCollectionMessage(0, this._dataDestination, sequence, position, identity);
         }
         return(position);
     }
 }
예제 #3
0
        public void RemoveIdentityFromSequence(Sequence sequence, Identity identity, int position, DataServiceTransaction dataServiceTransaction)
        {
            if (position == -1)
            {
                return;
            }
            lock (_objLock)
            {
                IDictionary sequenceIdMap = _itemIdToSequenceIdMapHash[identity] as IDictionary;
                if (sequenceIdMap != null)
                {
                    sequenceIdMap.Remove(sequence.Id);
                    //Release the item if it does'n occur in any sequence
                    if (sequenceIdMap.Count == 0)
                    {
                        _itemIdToItemHash.Remove(identity);
                        _itemIdToSequenceIdMapHash.Remove(identity);
                    }
                    if (sequence[position].Equals(identity))
                    {
                        sequence.RemoveAt(position);
                    }
                    else
                    {
                        sequence.Remove(identity);
                    }

                    if (dataServiceTransaction != null)
                    {
                        dataServiceTransaction.GenerateUpdateCollectionMessage(UpdateCollectionRange.DeleteFromCollection, _dataDestination, sequence, position, identity);
                    }
                }
                else
                {
                    _itemIdToItemHash.Remove(identity);
                    sequence.Remove(identity);
                }
            }
        }
예제 #4
0
 public void RemoveIdentityFromSequence(Sequence sequence, Identity identity, int position, DataServiceTransaction dataServiceTransaction)
 {
     if (position != -1)
     {
         lock (_objLock)
         {
             IDictionary dictionary = this._itemIdToSequenceIdMapHash[identity] as IDictionary;
             if (dictionary != null)
             {
                 dictionary.Remove(sequence.Id);
                 if (dictionary.Count == 0)
                 {
                     this._itemIdToItemHash.Remove(identity);
                     this._itemIdToSequenceIdMapHash.Remove(identity);
                 }
                 if (sequence[position].Equals(identity))
                 {
                     sequence.RemoveAt(position);
                 }
                 else
                 {
                     sequence.Remove(identity);
                 }
                 if (dataServiceTransaction != null)
                 {
                     dataServiceTransaction.GenerateUpdateCollectionMessage(1, this._dataDestination, sequence, position, identity);
                 }
             }
             else
             {
                 this._itemIdToItemHash.Remove(identity);
                 sequence.Remove(identity);
             }
         }
     }
 }
예제 #5
0
		public void RemoveIdentityFromSequence(Sequence sequence, Identity identity, int position, DataServiceTransaction dataServiceTransaction)
		{
			if( position == -1 )
				return;
			lock(_objLock)
			{
                IDictionary sequenceIdMap = _itemIdToSequenceIdMapHash[identity] as IDictionary;
                if (sequenceIdMap != null)
                {
                    sequenceIdMap.Remove(sequence.Id);
                    //Release the item if it does'n occur in any sequence
                    if (sequenceIdMap.Count == 0)
                    {
                        _itemIdToItemHash.Remove(identity);
                        _itemIdToSequenceIdMapHash.Remove(identity);
                    }
                    if (sequence[position].Equals(identity))
                        sequence.RemoveAt(position);
                    else
                        sequence.Remove(identity);

                    if (dataServiceTransaction != null)
                        dataServiceTransaction.GenerateUpdateCollectionMessage(UpdateCollectionRange.DeleteFromCollection, _dataDestination, sequence, position, identity);
                }
                else
                {
                    _itemIdToItemHash.Remove(identity);
                    sequence.Remove(identity);
                }
			}
		}
예제 #6
0
		public int AddIdentityToSequence(Sequence sequence, int position, Identity identity, DataServiceTransaction dataServiceTransaction)
		{
			lock(_objLock)
			{
				if(position == -1 || position > sequence.Size)
					position = sequence.Add(identity);
				else
					sequence.Insert(position, identity);

                IDictionary sequenceIdMap = _itemIdToSequenceIdMapHash[identity] as IDictionary;
				if( sequenceIdMap == null )
				{
					sequenceIdMap = new Hashtable();
					_itemIdToSequenceIdMapHash[identity] = sequenceIdMap;
				}
				sequenceIdMap[sequence.Id] = sequence;

				if(dataServiceTransaction != null)
					dataServiceTransaction.GenerateUpdateCollectionMessage(UpdateCollectionRange.InsertIntoCollection, _dataDestination, sequence, position, identity);

				return position;
			}
		}