Example #1
0
        void ImportMembers(InputObjectClassInfo inputObjectClassInfo, ICollection objectsToImport, List <object> keysToImport, UnitOfWork outputUow, List <InputMemberInfo> inputMemberInfos, UnitOfWork inputUow)
        {
            int keysCounter      = 0;
            var objectDictionary = GetObjectDictionary(inputObjectClassInfo.OutputClassInfo.ClassType);

            foreach (var objectToImport in objectsToImport)
            {
                object objectKey = keysToImport[keysCounter++];
                if (objectDictionary.ContainsKey(objectKey))
                {
                    continue;
                }
                var xpoObject = CreateInstance(inputObjectClassInfo.OutputClassInfo.ClassType, outputUow);
                AddObjectToCache(objectDictionary, objectKey, xpoObject);
                foreach (var inputMemberInfo in inputMemberInfos)
                {
                    var importedMemberInfo = new ImportedMemberInfo(inputObjectClassInfo, inputMemberInfo);
                    if (inputMemberInfo.IsAssociationList)
                    {
                        ImportManyToManyCollection(outputUow, inputUow, xpoObject, importedMemberInfo, objectToImport, inputMemberInfo);
                    }
                    else
                    {
                        ImportSimpleProperty(outputUow, inputUow, inputMemberInfo, importedMemberInfo, objectToImport, xpoObject);
                    }
                }
            }
        }
Example #2
0
 public void Map(XPDictionary outputDictionary, XPDictionary inputDictionary)
 {
     _outputClassInfos = outputDictionary.Classes.OfType <XPClassInfo>().Where(info => info.HasAttribute(typeof(InitialDataAttribute))).ToList();
     foreach (var classInfo in _outputClassInfos)
     {
         var initialDataAttribute = (InitialDataAttribute)classInfo.FindAttributeInfo(typeof(InitialDataAttribute));
         var objectClassInfo      = new InputObjectClassInfo(inputDictionary, initialDataAttribute.Name ?? classInfo.ClassType.Name, classInfo);
         _inputClassInfos.Add(objectClassInfo);
         MapManyToMany(outputDictionary, inputDictionary, classInfo);
     }
 }
Example #3
0
 public void Map(XPDictionary outputDictionary, XPDictionary inputDictionary) {
     _outputClassInfos = outputDictionary.Classes.OfType<XPClassInfo>().Where(info => info.HasAttribute(typeof(InitialDataAttribute))).ToList();
     foreach (var classInfo in _outputClassInfos) {
         var initialDataAttribute = (InitialDataAttribute)classInfo.FindAttributeInfo(typeof(InitialDataAttribute));
         var objectClassInfo = new InputObjectClassInfo(inputDictionary, initialDataAttribute.Name ?? classInfo.ClassType.Name, classInfo);
         _inputClassInfos.Add(objectClassInfo);
         MapManyToMany(outputDictionary, inputDictionary, classInfo);
     }
 }
Example #4
0
 DBTable GetTable(InputObjectClassInfo classInfo) {
     return _dbTables.SingleOrDefault(table => table.Name == classInfo.TableName);
 }
Example #5
0
 void ImportMembers(InputObjectClassInfo inputObjectClassInfo, ICollection objectsToImport, List<object> keysToImport, UnitOfWork outputUow, List<InputMemberInfo> inputMemberInfos, UnitOfWork inputUow) {
     int keysCounter = 0;
     var objectDictionary = GetObjectDictionary(inputObjectClassInfo.OutputClassInfo.ClassType);
     foreach (var objectToImport in objectsToImport) {
         object objectKey = keysToImport[keysCounter++];
         if (objectDictionary.ContainsKey(objectKey)) continue;
         var xpoObject = CreateInstance(inputObjectClassInfo.OutputClassInfo.ClassType, outputUow);
         AddObjectToCache(objectDictionary, objectKey, xpoObject);
         foreach (var inputMemberInfo in inputMemberInfos) {
             var importedMemberInfo = new ImportedMemberInfo(inputObjectClassInfo, inputMemberInfo);
             if (inputMemberInfo.IsAssociationList) {
                 ImportManyToManyCollection(outputUow, inputUow, xpoObject, importedMemberInfo, objectToImport, inputMemberInfo);
             } else {
                 ImportSimpleProperty(outputUow, inputUow, inputMemberInfo, importedMemberInfo, objectToImport, xpoObject);
             }
         }
     }
 }
Example #6
0
        void ImportCore(Func<UnitOfWork> createOutputUow, Func<UnitOfWork> createInputUow, InputObjectClassInfo inputObjectClassInfo) {
            UnitOfWork inputUow = createInputUow();
            UnitOfWork outputUow = createOutputUow();
            try {
                List<InputMemberInfo> inputMemberInfos =
                    MemberMapper.MemberInfos(inputObjectClassInfo).OfType<InputMemberInfo>().ToList();
                var keys = InputObjectKeys(inputObjectClassInfo, inputUow);
                int position = 0;
                int commitAccumulator = 0;
                int length = keys.Count;
                while (position < length) {
                    int chunkSize = XpoDefault.GetTerminalInSize(length - position);
                    var keysToImport = keys.GetRange(position, chunkSize);
                    var objectsToImport = inputUow.GetObjectsByKey(inputObjectClassInfo, keysToImport, false);
                    position += chunkSize;
                    commitAccumulator += chunkSize;
                    PrefetchDelayedMembers(inputMemberInfos, inputUow, objectsToImport);
                    ImportMembers(inputObjectClassInfo, objectsToImport, keysToImport, outputUow, inputMemberInfos,
                                  inputUow);
                    do {
                        var refsAndImports = RefsAndImports(outputUow);
                        foreach (KeyValuePair<InputMemberInfo, FillRefList> pair in refsAndImports) {
                            XPMemberInfo memberInfo = pair.Key.OutputMemberInfo;
                            FillRefList fillRefsList = pair.Value;
                            XPClassInfo classInfo = memberInfo.IsAssociationList
                                                        ? memberInfo.CollectionElementType
                                                        : memberInfo.ReferenceType;
                            var memberList =
                                MemberMapper.MemberInfos(pair.Key.ReferenceType).OfType<InputMemberInfo>().ToList();
                            var importClassInfo = pair.Key.ReferenceType;
                            var objects = inputUow.GetObjectsByKey(importClassInfo, fillRefsList.RefKeyList, false);
                            PrefetchDelayedMembers(inputMemberInfos, inputUow, objects);
                            ImportRefs(classInfo, objects, fillRefsList, outputUow, inputUow, memberList, memberInfo);
                        }
                    } while (_fillRefsDictionary.Count > 0 || _fillRefsAndImportDictionary.Count > 0);

                    if (commitAccumulator > 400) {
                        outputUow.CommitChanges();
                        GenerationNext(outputUow);
                        var ou = outputUow;
                        var iu = inputUow;
                        outputUow = createOutputUow();
                        inputUow = createInputUow();
                        ou.Dispose();
                        iu.Dispose();
                        commitAccumulator = 0;
                        OnTransformingRecords(new TransformingRecordsArgs(inputObjectClassInfo.FullName, position));
                    }
                }

            } catch (Exception e) {
                Debug.Assert(false);
                Debug.Print(e.ToString());

            } finally {
                OnTransformingRecords(new TransformingRecordsArgs(inputObjectClassInfo.FullName));
                outputUow.CommitChanges();
                GenerationNext(outputUow);
                outputUow.Dispose();
                inputUow.Dispose();


            }
        }
Example #7
0
 DBTable GetTable(InputObjectClassInfo classInfo)
 {
     return(_dbTables.SingleOrDefault(table => table.Name == classInfo.TableName));
 }
Example #8
0
        void ImportCore(Func <UnitOfWork> createOutputUow, Func <UnitOfWork> createInputUow, InputObjectClassInfo inputObjectClassInfo)
        {
            UnitOfWork inputUow  = createInputUow();
            UnitOfWork outputUow = createOutputUow();

            try {
                var inputMemberInfos  = MemberMapper.MemberInfos(inputObjectClassInfo).OfType <InputMemberInfo>().ToList();
                var keys              = InputObjectKeys(inputObjectClassInfo, inputUow);
                int position          = 0;
                int commitAccumulator = 0;
                int length            = keys.Count;
                while (position < length)
                {
                    int chunkSize       = XpoDefault.GetTerminalInSize(length - position);
                    var keysToImport    = keys.GetRange(position, chunkSize);
                    var objectsToImport = inputUow.GetObjectsByKey(inputObjectClassInfo, keysToImport, false);
                    position          += chunkSize;
                    commitAccumulator += chunkSize;
                    PrefetchDelayedMembers(inputMemberInfos, inputUow, objectsToImport);
                    ImportMembers(inputObjectClassInfo, objectsToImport, keysToImport, outputUow, inputMemberInfos, inputUow);
                    do
                    {
                        var refsAndImports = RefsAndImports(outputUow);
                        foreach (KeyValuePair <InputMemberInfo, FillRefList> pair in refsAndImports)
                        {
                            var memberInfo      = pair.Key.OutputMemberInfo;
                            var fillRefsList    = pair.Value;
                            var classInfo       = memberInfo.IsAssociationList? memberInfo.CollectionElementType: memberInfo.ReferenceType;
                            var memberList      = MemberMapper.MemberInfos(pair.Key.ReferenceType).OfType <InputMemberInfo>().ToList();
                            var importClassInfo = pair.Key.ReferenceType;
                            var objects         = inputUow.GetObjectsByKey(importClassInfo, fillRefsList.RefKeyList, false);
                            PrefetchDelayedMembers(inputMemberInfos, inputUow, objects);
                            ImportRefs(classInfo, objects, fillRefsList, outputUow, inputUow, memberList, memberInfo);
                        }
                    } while (_fillRefsDictionary.Count > 0 || _fillRefsAndImportDictionary.Count > 0);

                    if (commitAccumulator > 400)
                    {
                        outputUow.CommitChanges();
                        GenerationNext(outputUow);
                        var ou = outputUow;
                        var iu = inputUow;
                        outputUow = createOutputUow();
                        inputUow  = createInputUow();
                        ou.Dispose();
                        iu.Dispose();
                        commitAccumulator = 0;

                        OnTransformingRecords(new TransformingRecordsArgs(inputObjectClassInfo.FullName, inputObjectClassInfo.OutputClassInfo.FullName, position));
                    }
                }
            }  finally {
                outputUow.CommitChanges();
                OnTransformRecords(new TransformRecordsArgs(inputObjectClassInfo.FullName, inputObjectClassInfo.OutputClassInfo.FullName));
                GenerationNext(outputUow);
                outputUow.Dispose();
                inputUow.Dispose();
            }
        }