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); } }
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); }); }