/// <summary>Checks if something in the Map has changed, if yes, stores the change</summary>
        /// <param name="nnoi1">
        /// The first Object meta representation (nnoi =
        /// NonNativeObjectInfo)
        /// </param>
        /// <param name="nnoi2">The second object meta representation</param>
        /// <param name="fieldIndex">The field index that this map represents</param>
        /// <param name="moi1">The Meta representation of the map 1 (moi = MapObjectInfo)</param>
        /// <param name="moi2">The Meta representation of the map 2</param>
        /// <param name="objectRecursionLevel"></param>
        /// <returns>true if the 2 map representations are different</returns>
        private bool ManageMapChanges(NonNativeObjectInfo
                                      nnoi1, NonNativeObjectInfo nnoi2, int fieldId
                                      , MapObjectInfo moi1, MapObjectInfo
                                      moi2, int objectRecursionLevel)
        {
            if (true)
            {
                return(true);
            }
            IDictionary <AbstractObjectInfo
                         , AbstractObjectInfo> map1 = moi1.GetMap();
            IDictionary <AbstractObjectInfo
                         , AbstractObjectInfo> map2 = moi2.GetMap();

            if (map1.Count != map2.Count)
            {
                System.Text.StringBuilder buffer = new System.Text.StringBuilder();
                buffer.Append("Map size has changed oldsize=").Append(map1.Count).Append("/newsize="
                                                                                         ).Append(map2.Count);
                StoreChangedObject(nnoi1, nnoi2, fieldId, moi1, moi2, buffer.ToString(), objectRecursionLevel
                                   );
                return(true);
            }
            IEnumerator <AbstractObjectInfo
                         > keys1 = map1.Keys.GetEnumerator();
            IEnumerator <AbstractObjectInfo
                         >     keys2  = map2.Keys.GetEnumerator();
            AbstractObjectInfo key1   = null;
            AbstractObjectInfo key2   = null;
            AbstractObjectInfo value1 = null;
            AbstractObjectInfo value2 = null;
            int index = 0;

            while (keys1.MoveNext())
            {
                keys2.MoveNext();
                key1 = keys1.Current;
                key2 = keys2.Current;
                bool keysHaveChanged = this.HasChanged(key1, key2, objectRecursionLevel);
                if (keysHaveChanged)
                {
                    StoreChangedObject(nnoi1, nnoi2, fieldId, key1, key2, "Map key index " + index +
                                       " has changed", objectRecursionLevel);
                    return(true);
                }
                value1 = map1[key1];
                value2 = map2[key2];
                bool valuesHaveChanged = this.HasChanged(value1, value2, objectRecursionLevel);
                if (valuesHaveChanged)
                {
                    StoreChangedObject(nnoi1, nnoi2, fieldId, value1, value2, "Map value index " + index
                                       + " has changed", objectRecursionLevel);
                    return(true);
                }
                index++;
            }
            return(false);
        }
Beispiel #2
0
        public virtual object BuildGenericMapInstance(MapObjectInfo mapObjectInfo, Type t)
        {
            System.Collections.Generic.IDictionary <AbstractObjectInfo, AbstractObjectInfo> map = mapObjectInfo.GetMap();
            Type   genericType = t.GetGenericTypeDefinition();
            object newMap      = null;

            try
            {
                newMap = System.Activator.CreateInstance(t);
            }
            catch (System.Exception e)
            {
                Console.WriteLine(e);
                throw new ODBRuntimeException(NeoDatisError.MapInstanciationError.AddParameter(map.GetType().FullName), e);
            }

            int i = 0;

            System.Collections.Generic.IEnumerator <AbstractObjectInfo> iterator = map.Keys.GetEnumerator();
            AbstractObjectInfo key    = null;
            MethodInfo         method = t.GetMethod("Add", t.GetGenericArguments());

            while (iterator.MoveNext())
            {
                key = iterator.Current;
                object realKey   = BuildOneInstance(key);
                object realValue = BuildOneInstance(map[key]);
                method.Invoke(newMap, new object[] { realKey, realValue });
            }
            return(newMap);
        }
Beispiel #3
0
        public virtual IDictionary BuildNonGenericMapInstance(MapObjectInfo mapObjectInfo, Type t)
        {
            System.Collections.Generic.IDictionary <AbstractObjectInfo, AbstractObjectInfo> map = mapObjectInfo.GetMap();
            IDictionary newMap;

            try
            {
                newMap = (IDictionary)System.Activator.CreateInstance(t);
            }
            catch (System.Exception e)
            {
                throw new ODBRuntimeException(NeoDatisError.MapInstanciationError.AddParameter(map.GetType().FullName), e);
            }
            int i = 0;

            System.Collections.Generic.IEnumerator <AbstractObjectInfo> iterator = map.Keys.GetEnumerator();
            AbstractObjectInfo key = null;

            while (iterator.MoveNext())
            {
                key = iterator.Current;
                object realKey   = BuildOneInstance(key);
                object realValue = BuildOneInstance(map[key]);
                newMap[realKey] = realValue;
            }
            return(newMap);
        }