public MaterialRepository Build(ElectricaSettings electricaSettings, MaterialType materialType, bool includeAnnul, string profileID, bool needShowError)
        {
            MaterialRepository materialRepository = null;

            DataSourceProfile profile = electricaSettings.DataSourceSettings.GetProfileById(profileID);

            if (profile == null)
            {
                if (needShowError)
                {
                    MsgBox.Show(Resources.DataProfileDoesNotExist, MessageBoxButton.OK, MessageBoxImage.Error);
                }
                return(materialRepository);
            }

            string message = string.Empty;

            var dataSourceAnalizer = new DataSourceAnalizer();
            var result             = dataSourceAnalizer.AnalizeDataSource(profile, out message);

            if (!result && needShowError)
            {
                logger.Error(message);

                MsgBox.Show(message, MessageBoxButton.OK, MessageBoxImage.Error);
            }
            else
            {
                if (profile.Type == DataSourceType.SwePdm)
                {
                    try
                    {
                        var dataBaseProfile = profile as DataBaseProfile;

                        if (dataBaseProfile != null)
                        {
                            var pdmController = new PdmController();

                            string vaultName = pdmController.GetVaultNameByPath(dataBaseProfile.Path);

                            var registryService    = new RegistryService();
                            var registryController = new RegistryController(registryService);

                            string dbName     = "";
                            var    serverName = registryController.GetDBName(vaultName, out dbName);

                            var databaseParameters = new DatabaseParameters()
                            {
                                DataSource     = serverName,
                                InitialCatalog = dbName,
                                UserID         = dataBaseProfile.UserName,
                                Password       = dataBaseProfile.Password
                            };

                            var rootFolderPath = pdmController.GetRootFolderOfVault(vaultName);

                            var folder = dataBaseProfile.Path.Substring(rootFolderPath.Count());

                            var pdmDBService = new PdmDBService();

                            var dataContext     = pdmDBService.GetDbContext(databaseParameters);
                            var pdmModelBuilder = new PdmModelBuilder();

                            MaterialRepository materialRepos = null;

                            materialRepos = pdmModelBuilder.Build(dataContext, folder, materialType,
                                                                  dataBaseProfile.UseLastReduction,
                                                                  dataBaseProfile.AnnulVariableName,
                                                                  includeAnnul);



                            materialRepository = materialRepos;
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.ErrorException(Resources.PdmDataBaseError, ex);
                        if (needShowError)
                        {
                            MsgBox.Show(Resources.PdmDataBaseError, MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                    }
                }

                if (profile.Type == DataSourceType.SdfFile)
                {
                    try
                    {
                        var dataBasePath = profile.Path;

                        var sdfDBService = new SdfDBService();

                        using (var connection = sdfDBService.GetConnection(dataBasePath))
                        {
                            var sdfModelBuilder = new SdfModelBuilder();

                            MaterialRepository materialRepos = null;

                            materialRepos = sdfModelBuilder.Build(connection, materialType, includeAnnul);

                            materialRepository = materialRepos;
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.ErrorException(Resources.SdfDataBaseError, ex);
                        if (needShowError)
                        {
                            MsgBox.Show(Resources.SdfDataBaseError, MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                    }
                }
            }

            if (materialRepository != null && materialRepository.Materials.Count == 0)
            {
                logger.Warn("Профиль данных " + profile.Name + "(" + profile.Path + ") не найдены материалы. Тип материала: " + materialType + ", выбирать аннулированные: " + includeAnnul);
                MessageBox.Show("В указанном источнике данных не обнаружены материалы.",
                                Constants.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
                materialRepository = null;
            }

            return(materialRepository);
        }
        public ColorRepository BuildColorRepository(ElectricaSettings electricaSettings)
        {
            //TODO DB использовать DataSourceAnalizer как в функции Build
            //TODO DB понять нужны ли вообще репозитории цветов
            ColorRepository colorRepository = null;

            var defaultProfile = electricaSettings.DataSourceSettings.GetDefaultProfile();

            if (defaultProfile.Type == DataSourceType.SwePdm)
            {
                try
                {
                    var dataBaseProfile = defaultProfile as DataBaseProfile;

                    if (dataBaseProfile != null)
                    {
                        string vaultName = string.Empty;

                        var pdmController = new SwePdmServices();

                        if (pdmController.ObjectSaveInSwePdm(dataBaseProfile.Path, out vaultName))
                        {
                            var registryService    = new RegistryService();
                            var registryController = new RegistryController(registryService);

                            string dbName     = "";
                            var    serverName = registryController.GetDBName(vaultName, out dbName);

                            var databaseParameters = new DatabaseParameters()
                            {
                                DataSource     = serverName,
                                InitialCatalog = dbName,
                                UserID         = dataBaseProfile.UserName,
                                Password       = dataBaseProfile.Password
                            };

                            string warning = string.Empty;

                            var pdmDBService          = new PdmDBService();
                            var isConnectionAvaliable = pdmDBService.IsConnectionAvaliable(databaseParameters, out warning);

                            if (isConnectionAvaliable)
                            {
                                var dataContext     = pdmDBService.GetDbContext(databaseParameters);
                                var pdmModelBuilder = new PdmModelBuilder();

                                ColorRepository colorRepos = pdmModelBuilder.BuildColorRepository(dataContext);

                                colorRepository = colorRepos;
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    logger.ErrorException(Resources.PdmDataBaseError, ex);
                    MessageBox.Show(Resources.PdmDataBaseError, Constants.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }


            if (defaultProfile.Type == DataSourceType.SdfFile)
            {
                var dataBasePath = defaultProfile.Path;

                var sdfDBService = new SdfDBService();

                var connection = sdfDBService.GetConnection(dataBasePath);

                var sdfModelBuilder = new SdfModelBuilder();

                ColorRepository colorRepos = sdfModelBuilder.BuildColorRepository(connection);


                colorRepository = colorRepos;
            }


            return(colorRepository);
        }