Esempio n. 1
0
        protected IIntermediateObject CreateObject(Map map)
        {
            if (!profiles.ContainsKey(map.From) || !profiles.ContainsKey(map.To))
            {
                return(null); // handle better
            }
            var from = profiles[map.From];
            var to   = profiles[map.To];

            var propertyMap = new List <PropertyMapItem>();

            foreach (var item in map.Items)
            {
                propertyMap.Add(PropertyMapItem.Create(item.Name, from, to, item.From, item.To));
            }



            var obj = IntermediateObject.Create(from, to, propertyMap.ToArray());



            //Raise event to get data - populate object
            obj.GenerateProperties(GetData(map).ToArray());


            return(obj);
        }
 private void collection_CollectionChanged(object sender, XPCollectionChangedEventArgs e)
 {
     if (e.CollectionChangedType == XPCollectionChangedType.BeforeRemove)
     {
         IntermediateObject intermediateObject;
         if (intermediateObjectHash.TryGetValue(e.ChangedObject, out intermediateObject))
         {
             intermediateObject.Delete();
             intermediateObjectHash.Remove(e.ChangedObject);
         }
         else
         {
             hiddenCollection.BaseRemove(e.ChangedObject);
         }
     }
     if (e.CollectionChangedType == XPCollectionChangedType.AfterAdd)
     {
         IntermediateObject intermediateObject = null;
         if (!owner.Session.IsNewObject(e.ChangedObject))
         {
             var criteria = new GroupOperator();
             foreach (XPMemberInfo memberInfo in intermediateClassInfo.PersistentProperties)
             {
                 if (memberInfo.MemberType.IsAssignableFrom(owner.GetType()))
                 {
                     criteria.Operands.Add(new BinaryOperator(memberInfo.Name, owner));
                 }
                 if (memberInfo.MemberType.IsAssignableFrom(e.ChangedObject.GetType()))
                 {
                     criteria.Operands.Add(new BinaryOperator(memberInfo.Name, e.ChangedObject));
                 }
             }
             intermediateObject = owner.Session.FindObject(intermediateClassInfo, criteria) as IntermediateObject;
             if (intermediateObject != null && intermediateObject.IsDeleted)
             {
                 var newIntermediateObject = new IntermediateObject(owner.Session, intermediateClassInfo);
                 intermediateObject = newIntermediateObject;
                 newIntermediateObject.LeftIntermediateObjectField  = intermediateObject.LeftIntermediateObjectField;
                 newIntermediateObject.RightIntermediateObjectField = intermediateObject.RightIntermediateObjectField;
             }
         }
         if (intermediateObject == null)
         {
             intermediateObject = new IntermediateObject(owner.Session, intermediateClassInfo);
             foreach (XPMemberInfo memberInfo in intermediateClassInfo.PersistentProperties)
             {
                 if (memberInfo.MemberType.IsAssignableFrom(owner.GetType()))
                 {
                     memberInfo.SetValue(intermediateObject, owner);
                 }
                 if (memberInfo.MemberType.IsAssignableFrom(e.ChangedObject.GetType()))
                 {
                     memberInfo.SetValue(intermediateObject, e.ChangedObject);
                 }
             }
         }
         intermediateObjectHash.Add(e.ChangedObject, intermediateObject);
     }
 }
Esempio n. 3
0
    public CoreLogic()
    {
        const int numberIntermediateObjects = 1000;

        transformBlock = new TransformBlock <List <InputObject>, Tuple <List <InputObject>, Dictionary <int, IntermediateObject> > >(input =>
        {
            //please ignore the fact that `input` is not utilized here, the point is to generate a collection of IntermediateObject and return
            Dictionary <int, IntermediateObject> ret = new Dictionary <int, IntermediateObject>();
            for (int i = 0; i < numberIntermediateObjects; i++)
            {
                IntermediateObject value = new IntermediateObject(i);
                ret.Add(i, value);
            }
            var tuple = new Tuple <List <InputObject>, Dictionary <int, IntermediateObject> >(input, ret);
            return(tuple);
        });
    }