示例#1
0
        protected virtual PropertyDiff[] GetSignalDiff(IDiffAdaptor currentAdaptor, object currentObject, IDiffAdaptor newAdaptor, object newObject)
        {
            ArrayList changes = new ArrayList();
            Hashtable found   = new Hashtable();

            // Look for modified and deleted elements
            if (currentObject != null)
            {
                foreach (object oldProp in currentAdaptor.GetSignals(currentObject))
                {
                    string name;
                    string handler;
                    currentAdaptor.GetSignalInfo(oldProp, out name, out handler);
                    object newProp = newObject != null?newAdaptor.GetSignal(newObject, name, handler) : null;

                    if (newProp == null)
                    {
                        changes.Add(new PropertyDiff(DiffOperation.Remove, name, handler));
                    }
                    found [name + " " + handler] = found;
                }
            }

            // Look for new elements
            if (newObject != null)
            {
                foreach (object newProp in newAdaptor.GetSignals(newObject))
                {
                    string name;
                    string handler;
                    newAdaptor.GetSignalInfo(newProp, out name, out handler);
                    if (!found.ContainsKey(name + " " + handler))
                    {
                        changes.Add(new PropertyDiff(DiffOperation.Add, name, handler));
                    }
                }
            }

            if (changes.Count == 0)
            {
                return(null);
            }
            return((PropertyDiff[])changes.ToArray(typeof(PropertyDiff)));
        }
		protected virtual PropertyDiff[] GetSignalDiff (IDiffAdaptor currentAdaptor, object currentObject, IDiffAdaptor newAdaptor, object newObject)
		{
			ArrayList changes = new ArrayList ();
			Hashtable found = new Hashtable ();
			
			// Look for modified and deleted elements
			if (currentObject != null) {
				foreach (object oldProp in currentAdaptor.GetSignals (currentObject)) {
					string name;
					string handler;
					currentAdaptor.GetSignalInfo (oldProp, out name, out handler);
					object newProp = newObject != null ? newAdaptor.GetSignal (newObject, name, handler) : null;
					if (newProp == null)
						changes.Add (new PropertyDiff (DiffOperation.Remove, name, handler));
					found [name + " " + handler] = found;
				}
			}
			
			// Look for new elements
			if (newObject != null) {
				foreach (object newProp in newAdaptor.GetSignals (newObject)) {
					string name;
					string handler;
					newAdaptor.GetSignalInfo (newProp, out name, out handler);
					if (!found.ContainsKey (name + " " + handler))
						changes.Add (new PropertyDiff (DiffOperation.Add, name, handler));
				}
			}
			
			if (changes.Count == 0)
				return null;
			return (PropertyDiff[]) changes.ToArray (typeof(PropertyDiff));
		}