Exemplo n.º 1
0
        public static Schema GetSchemaFromForm(ConfigureWriteFormData formData)
        {
            var tableName = new DirectoryInfo(formData.TargetFileName).Name;

            var schema = new Schema
            {
                Id   = tableName,
                Name = tableName,
                DataFlowDirection = Schema.Types.DataFlowDirection.Write,
                Query             = tableName,
                PublisherMetaJson = JsonConvert.SerializeObject(formData),
            };

            var properties = new List <Property>();

            foreach (var column in formData.Columns)
            {
                if (properties.Exists(p => p.Id == column.Name))
                {
                    throw new Exception($"Duplicate column {column.Name} defined.");
                }

                properties.Add(new Property
                {
                    Id   = column.Name,
                    Name = column.Name,
                    Type = PropertyType.String,
                    PublisherMetaJson = JsonConvert.SerializeObject(column)
                });
            }

            schema.Properties.AddRange(properties);

            return(schema);
        }
Exemplo n.º 2
0
        public static void WriteToDisk(IImportExportFile targetImportExport, ConfigureWriteFormData config, Settings settings, bool forceWrite = false)
        {
            // check if 5 seconds have passed since last write to disk
            if (forceWrite || (DateTime.Now - LastWriteTime).TotalSeconds >= 5 && PendingWrites)
            {
                // write out to disk
                targetImportExport.ExportTable(config.GetLocalTargetFilePath());
                PendingWrites = false;

                // write to Remote
                if (config.FileWriteMode != Constants.FileModeLocal)
                {
                    var localFileName  = config.GetLocalTargetFilePath();
                    var remoteFileName = config.GetRemoteTargetFilePath();

                    switch (config.FileWriteMode)
                    {
                    case Constants.FileModeFtp:
                        using (var client = Utility.Utility.GetFtpClient())
                        {
                            try
                            {
                                var status = client.UploadFile(localFileName, remoteFileName);
                                if (status == FtpStatus.Failed)
                                {
                                    throw new Exception($"Could not write file to remote {remoteFileName}");
                                }
                            }
                            finally
                            {
                                client.Disconnect();
                            }
                        }

                        break;

                    case Constants.FileModeSftp:
                        using (var client = Utility.Utility.GetSftpClient())
                        {
                            try
                            {
                                var fileStream = Utility.Utility.GetStream(localFileName, Constants.FileModeLocal, true);
                                client.UploadFile(fileStream.Stream, remoteFileName);
                                fileStream.Close();
                            }
                            catch
                            {
                                throw new Exception($"Could not write file to remote {remoteFileName}");
                            }
                            finally
                            {
                                client.Disconnect();
                            }
                        }

                        break;
                    }
                }
            }
        }
Exemplo n.º 3
0
 public static void DeleteFileAtPath(string path, ConfigureWriteFormData config, Settings settings, bool deleteRemote)
 {
     DeleteFileAtPath(path, config.FileWriteMode, settings, deleteRemote);
 }
Exemplo n.º 4
0
        public DelimitedImportExport(SqlDatabaseConnection sqlDatabaseConnection, string tableName, string schemaName, ConfigureWriteFormData writeFormData)
        {
            if (string.IsNullOrWhiteSpace(tableName))
            {
                throw new Exception("TableName parameter is required.");
            }

            if (string.IsNullOrWhiteSpace(schemaName))
            {
                throw new Exception("SchemaName parameter is required.");
            }

            if (sqlDatabaseConnection.State == System.Data.ConnectionState.Closed)
            {
                sqlDatabaseConnection.Open();
            }

            SQLDatabaseConnection = sqlDatabaseConnection;
            TableName             = tableName;
            SchemaName            = schemaName;
            Delimiter             = writeFormData.GetDelimiter();
            ReplicationFormData   = writeFormData.GetReplicationFormData();
        }
Exemplo n.º 5
0
 public IImportExportFile MakeImportExportFile(SqlDatabaseConnection sqlDatabaseConnection,
                                               ConfigureWriteFormData writeFormData, string tableName, string schemaName)
 {
     return(new DelimitedImportExport(sqlDatabaseConnection, tableName, schemaName, writeFormData));
 }
Exemplo n.º 6
0
        public static List <string> ValidateWriteFormData(this ConfigureWriteFormData data,
                                                          Settings settings)
        {
            var errors = new List <string>();

            if (string.IsNullOrWhiteSpace(data.TargetFileDirectory))
            {
                errors.Add("Target file directory is empty.");
            }

            if (string.IsNullOrWhiteSpace(data.TargetFileName))
            {
                errors.Add("Target file name is empty.");
            }

            if (string.IsNullOrWhiteSpace(data.FileWriteMode))
            {
                errors.Add("File Write Mode is empty.");
            }

            if (string.IsNullOrWhiteSpace(data.NullValue))
            {
                data.NullValue = "";
            }

            if (string.IsNullOrWhiteSpace(data.CustomHeader))
            {
                data.CustomHeader = "";
            }

            if (data.FileWriteMode != Constants.FileModeLocal)
            {
                var testFileName             = "test.txt";
                var remoteTargetDirectory    = data.GetRemoteTargetDirectory();
                var remoteTargetTestFileName = Path.Join(remoteTargetDirectory, testFileName);
                var localTestDirectory       = data.GetLocalTargetDirectory();
                var localTestFileName        = Path.Join(localTestDirectory, testFileName);

                Directory.CreateDirectory(localTestDirectory);
                var testFile = new StreamWriter(localTestFileName);
                testFile.WriteLine("test");
                testFile.Close();

                switch (data.FileWriteMode)
                {
                case Constants.FileModeFtp:
                    using (var client = Utility.Utility.GetFtpClient())
                    {
                        try
                        {
                            if (!client.DirectoryExists(remoteTargetDirectory))
                            {
                                errors.Add($"{remoteTargetDirectory} is not a directory on remote FTP");
                            }
                            else
                            {
                                var status = client.UploadFile(localTestFileName, remoteTargetTestFileName);
                                if (status == FtpStatus.Failed)
                                {
                                    errors.Add($"Could not write to target directory {remoteTargetDirectory}");
                                }
                            }

                            Utility.Utility.DeleteFileAtPath(localTestFileName, data, settings, true);
                        }
                        finally
                        {
                            client.Disconnect();
                        }
                    }

                    break;

                case Constants.FileModeSftp:
                    using (var client = Utility.Utility.GetSftpClient())
                    {
                        try
                        {
                            try
                            {
                                if (!client.Exists(remoteTargetDirectory))
                                {
                                    errors.Add($"{remoteTargetDirectory} is not a directory on remote FTP");
                                }
                                else
                                {
                                    var fileStream = Utility.Utility.GetStream(localTestFileName, Constants.FileModeLocal, true);
                                    client.UploadFile(fileStream.Stream, remoteTargetTestFileName);
                                    fileStream.Close();
                                    Utility.Utility.DeleteFileAtPath(localTestFileName, data, settings, true);
                                }
                            }
                            catch
                            {
                                errors.Add($"Could not write to target directory {remoteTargetDirectory}");
                            }
                        }
                        finally
                        {
                            client.Disconnect();
                        }
                    }

                    break;
                }
            }

            return(errors);
        }
Exemplo n.º 7
0
 public IImportExportFile MakeImportExportFile(SqlDatabaseConnection sqlDatabaseConnection,
                                               ConfigureWriteFormData writeFormData, string tableName, string schemaName)
 {
     throw new System.NotImplementedException();
 }