Exemplo n.º 1
0
        public ExportResultPack Export(OutputFormat format, IEnumerable <ISearchResult> result, ServiceKind serviceKind)
        {
            ExportResultPack pack = new ExportResultPack();


            if (format.HasFlag(OutputFormat.Json))
            {
                string folder   = SettingManager.ExportOptionSetting.JsonFolderLocation;
                string fileName = SettingManager.ExportOptionSetting.JsonFileName;

                if (fileName.IsNullOrEmpty())
                {
                    AddLog("파일을 Json 형식으로 내보내기 실패했습니다. [파일명 입력란이 비어있습니다.]", TaskLogType.Failed);
                    Dispatcher.Invoke(() => pack.JsonExportResult = JsonExportResult.Fail_FileNameNull);
                }
                else
                {
                    if (Directory.Exists(folder))
                    {
                        try
                        {
                            string fullPath = Path.Combine(folder, $"{fileName}{GetServiceString(serviceKind)}.json");

                            if (ExportManager.JsonExport(fullPath, result, SettingManager.ExportOptionSetting.JsonSort))
                            {
                                AddLog($"Json으로 성공적으로 내보냈습니다. 저장 위치 : {fullPath}", TaskLogType.Complete);
                                pack.JsonExportResult = JsonExportResult.Success;
                            }
                            else
                            {
                                AddLog($"Json으로 내보낼 파일 위치에 접근 실패했습니다. 위치 : {fullPath}", TaskLogType.Failed);
                                pack.JsonExportResult = JsonExportResult.Fail_FileAccessDenied;
                            }
                        }
                        catch (Exception ex)
                        {
                            AddLog($"Json으로 내보내던 중 알 수 없는 오류가 발생했습니다.{Environment.NewLine}{Environment.NewLine}{ex.ToString()}", TaskLogType.System);
                            pack.JsonExportResult = JsonExportResult.Unknown;
                        }
                    }
                    else
                    {
                        if (folder.IsNullOrEmpty())
                        {
                            AddLog("파일을 Json 형식으로 내보내기 실패했습니다. [폴더 입력란이 비어있습니다.]", TaskLogType.Failed);
                            pack.JsonExportResult = JsonExportResult.Fail_FileDirectoryNull;
                        }
                        else if (!Directory.Exists(folder))
                        {
                            AddLog("파일을 Json 형식으로 내보내기 실패했습니다. [해당하는 경로가 없습니다.]", TaskLogType.Failed);
                            pack.JsonExportResult = JsonExportResult.Fail_FileDirectoryNotExists;
                        }
                    }
                }
            }
            if (format.HasFlag(OutputFormat.CSV))
            {
                string folder   = SettingManager.ExportOptionSetting.CSVFolderLocation;
                string fileName = SettingManager.ExportOptionSetting.CSVFileName;

                if (fileName.IsNullOrEmpty())
                {
                    AddLog("파일을 CSV 형식으로 내보내기 실패했습니다. [파일명 입력란이 비어있습니다.]", TaskLogType.Failed);
                    pack.CSVExportResult = CSVExportResult.Fail_FileNameNull;
                }
                else
                {
                    if (Directory.Exists(folder))
                    {
                        try
                        {
                            string fullPath = Path.Combine(folder, $"{fileName}{GetServiceString(serviceKind)}.csv");

                            if (ExportManager.CSVExport(fullPath, result))
                            {
                                AddLog($"CSV로 성공적으로 내보냈습니다. 저장 위치 : {fullPath}", TaskLogType.Complete);
                                pack.CSVExportResult = CSVExportResult.Success;
                            }
                            else
                            {
                                AddLog($"CSV로 내보낼 파일 위치에 접근 실패했습니다. 위치 : {fullPath}", TaskLogType.Failed);
                                pack.CSVExportResult = CSVExportResult.Fail_FileAccessDenied;
                            }
                        }
                        catch (Exception ex)
                        {
                            AddLog($"CSV로 내보내던 중 알 수 없는 오류가 발생했습니다.{Environment.NewLine}{Environment.NewLine}{ex.ToString()}", TaskLogType.System);
                            pack.CSVExportResult = CSVExportResult.Unknown;
                        }
                    }
                    else
                    {
                        if (folder.IsNullOrEmpty())
                        {
                            AddLog("파일을 CSV 형식으로 내보내기 실패했습니다. [폴더 입력란이 비어있습니다.]", TaskLogType.Failed);
                            pack.CSVExportResult = CSVExportResult.Fail_FileDirectoryNull;
                        }
                        else if (!Directory.Exists(folder))
                        {
                            AddLog("파일을 CSV 형식으로 내보내기 실패했습니다. [해당하는 경로가 없습니다.]", TaskLogType.Failed);
                            pack.CSVExportResult = CSVExportResult.Fail_FileDirectoryNotExists;
                        }
                    }
                }
            }
            if (format.HasFlag(OutputFormat.MySQL))
            {
                pack.MySQLExportResult = MySQLExportResult.NotSet;

                MySQLFormat <ISearchResult> mySQLFormat = null;
                try
                {
                    if (SettingManager.ExportOptionSetting.MySQLManualInput)
                    {
                        if (SettingManager.ExportOptionSetting.MySQLConnString.IsNullOrEmpty())
                        {
                            AddLog("파일을 MySQL로 내보내기 실패했습니다. [데이터베이스 연결문이 입력되지 않았습니다.]", TaskLogType.Failed);
                            pack.MySQLExportResult = MySQLExportResult.Fail_NotEnoughConnectData;
                        }

                        if (pack.MySQLExportResult == MySQLExportResult.NotSet)
                        {
                            mySQLFormat = new MySQLFormat <ISearchResult>(SettingManager.ExportOptionSetting.MySQLConnString);
                        }
                    }
                    else
                    {
                        if (SettingManager.ExportOptionSetting.MySQLConnAddr.IsNullOrEmpty())
                        {
                            AddLog("파일을 MySQL로 내보내기 실패했습니다. [연결 주소가 입력되지 않았습니다.]", TaskLogType.Failed);
                            pack.MySQLExportResult = MySQLExportResult.Fail_NotEnoughConnectData;
                        }
                        else if (SettingManager.ExportOptionSetting.MySQLDatabaseName.IsNullOrEmpty())
                        {
                            AddLog("파일을 MySQL로 내보내기 실패했습니다. [데이터베이스 이름이 입력되지 않았습니다.]", TaskLogType.Failed);
                            pack.MySQLExportResult = MySQLExportResult.Fail_NotEnoughConnectData;
                        }
                        else if (SettingManager.ExportOptionSetting.MySQLUserID.IsNullOrEmpty())
                        {
                            AddLog("파일을 MySQL로 내보내기 실패했습니다. [데이터베이스 사용자 이름이 입력되지 않았습니다.]", TaskLogType.Failed);
                            pack.MySQLExportResult = MySQLExportResult.Fail_NotEnoughConnectData;
                        }
                        else if (SettingManager.ExportOptionSetting.MySQLUserPassword.IsNullOrEmpty())
                        {
                            AddLog("파일을 MySQL로 내보내기 실패했습니다. [데이터베이스 사용자 비밀번호가 입력되지 않았습니다.]", TaskLogType.Failed);
                            pack.MySQLExportResult = MySQLExportResult.Fail_NotEnoughConnectData;
                        }

                        if (pack.MySQLExportResult == MySQLExportResult.NotSet)
                        {
                            mySQLFormat = new MySQLFormat <ISearchResult>(SettingManager.ExportOptionSetting.MySQLConnAddr,
                                                                          SettingManager.ExportOptionSetting.MySQLUserID,
                                                                          SettingManager.ExportOptionSetting.MySQLUserPassword,
                                                                          SettingManager.ExportOptionSetting.MySQLDatabaseName);
                        }
                    }
                }
                catch (Exception)
                {
                }

                if (mySQLFormat == null)
                {
                    AddLog("파일을 MySQL로 내보내기 실패했습니다. [데이터베이스 연결 정보중 하나가 잘못되었습니다.]", TaskLogType.Failed);
                }
                else
                {
                    try
                    {
                        ExportManager.MySQLExport(result, mySQLFormat);
                        AddLog("MySQL로 성공적으로 내보냈습니다.", TaskLogType.Complete);
                        pack.MySQLExportResult = MySQLExportResult.Success;
                    }
                    catch (Exception ex)
                    {
                        AddLog("파일을 MySQL로 내보내기 실패했습니다. [알 수 없는 오류가 발생했습니다.]", TaskLogType.Failed);
                        AddLog(ex.ToString(), TaskLogType.Failed);
                        pack.MySQLExportResult = MySQLExportResult.Fail_UnkownError;
                    }
                }
            }
            if (format.HasFlag(OutputFormat.AccessDB))
            {
                string folder   = SettingManager.ExportOptionSetting.AccessFolderLocation;
                string fileName = SettingManager.ExportOptionSetting.AccessFileName;

                if (fileName.IsNullOrEmpty())
                {
                    AddLog("파일을 Access DB 형식으로 내보내기 실패했습니다. [파일명 입력란이 비어있습니다.]", TaskLogType.Failed);
                    pack.AccessExportResult = AccessExportResult.Fail_FileNameNull;
                }
                else
                {
                    if (Directory.Exists(folder))
                    {
                        try
                        {
                            string fullPath = Path.Combine(folder, $"{fileName}.accdb");
                            if (ExportManager.AccessDBExport(fullPath, result))
                            {
                                AddLog($"Access DB로 성공적으로 내보냈습니다. 저장 위치 : {fullPath}", TaskLogType.Complete);
                                pack.AccessExportResult = AccessExportResult.Success;
                            }
                            else
                            {
                                AddLog($"Access DB로 내보낼 파일 위치에 접근 실패했습니다. 위치 : {fullPath}", TaskLogType.Failed);
                                pack.AccessExportResult = AccessExportResult.Fail_FileAccessDenied;
                            }
                        }
                        catch (Exception ex)
                        {
                            AddLog($"파일을 Access DB로 내보내기 실패했습니다. [알 수 없는 오류가 발생했습니다.]", TaskLogType.Failed);
                            AddLog(ex.ToString(), TaskLogType.Failed);

                            pack.AccessExportResult = AccessExportResult.Unknown;
                        }
                    }
                    else
                    {
                        if (folder.IsNullOrEmpty())
                        {
                            AddLog("파일을 Access DB 형식으로 내보내기 실패했습니다. [폴더 입력란이 비어있습니다.]", TaskLogType.Failed);
                            pack.AccessExportResult = AccessExportResult.Fail_FileDirectoryNull;
                        }
                        else if (!Directory.Exists(folder))
                        {
                            AddLog("파일을 Access DB 형식으로 내보내기 실패했습니다. [해당하는 경로가 없습니다.]", TaskLogType.Failed);
                            pack.AccessExportResult = AccessExportResult.Fail_FileDirectoryNotExists;
                        }
                    }
                }
            }

            return(pack);
        }