예제 #1
0
        internal static bool SwitchKeys(this ModelItemDictionary dictionary, ModelItem oldKey, ModelItem newKey)
        {
            if (null == dictionary)
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("dictionary"));
            }
            if (null == oldKey)
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("oldKey"));
            }
            if (null == newKey)
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("newKey"));
            }
            if (!dictionary.ContainsKey(oldKey))
            {
                throw FxTrace.Exception.AsError(new KeyNotFoundException(null == oldKey.GetCurrentValue() ? "oldKey" : oldKey.GetCurrentValue().ToString()));
            }
            bool result = false;

            if (!dictionary.ContainsKey(newKey))
            {
                ModelItem value = dictionary[oldKey];
                dictionary.Remove(oldKey);
                dictionary[newKey] = value;
                result             = true;
            }
            return(result);
        }
예제 #2
0
        internal static bool SwitchKeys(this ModelItemDictionary dictionary, object oldKey, object newKey, out ModelItem newKeyItem)
        {
            if (null == dictionary)
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("dictionary"));
            }
            if (null == oldKey)
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("oldKey"));
            }
            if (null == newKey)
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("newKey"));
            }
            if (!dictionary.ContainsKey(oldKey))
            {
                throw FxTrace.Exception.AsError(new KeyNotFoundException(oldKey.ToString()));
            }
            bool result = false;

            newKeyItem = null;
            if (typeof(ModelItem).IsAssignableFrom(oldKey.GetType()) && typeof(ModelItem).IsAssignableFrom(newKey.GetType()))
            {
                result     = SwitchKeys(dictionary, (ModelItem)oldKey, (ModelItem)newKey);
                newKeyItem = (ModelItem)newKey;
            }
            else
            {
                if (typeof(ModelItem).IsAssignableFrom(oldKey.GetType()))
                {
                    oldKey = ((ModelItem)oldKey).GetCurrentValue();
                    if (null == oldKey)
                    {
                        throw FxTrace.Exception.AsError(new InvalidOperationException("((ModelItem)oldKey).GetCurrentValue()"));
                    }
                }
                if (typeof(ModelItem).IsAssignableFrom(newKey.GetType()))
                {
                    newKey = ((ModelItem)newKey).GetCurrentValue();
                    if (null == newKey)
                    {
                        throw FxTrace.Exception.AsError(new InvalidOperationException("((ModelItem)newKey).GetCurrentValue()"));
                    }
                }
            }
            if (!dictionary.ContainsKey(newKey))
            {
                ModelItem value = dictionary[oldKey];
                dictionary.Remove(oldKey);
                dictionary[newKey] = value;
                newKeyItem         = dictionary.Keys.First <ModelItem>(p => object.Equals(p.GetCurrentValue(), newKey));
                result             = true;
            }
            return(result);
        }
예제 #3
0
 internal static string GetUniqueName(this ModelItemDictionary dictionary, string nameDefaultPrefix, Func <ModelItem, string> nameGetter)
 {
     if (dictionary != null)
     {
         return(dictionary.Keys.GetUniqueName(nameDefaultPrefix, nameGetter));
     }
     else
     {
         throw FxTrace.Exception.ArgumentNull("dictionary");
     }
 }
예제 #4
0
        internal static bool TryGetPropertyValue(this ModelItem item, out ModelItemDictionary value, params string[] path)
        {
            ModelItem temp;

            value = null;
            bool result = TryGetPropertyValue(item, out temp, path);

            if (null != item)
            {
                value = (ModelItemDictionary)temp;
            }
            return(result);
        }