public void Import(MigrationToolSettings settings) { var sourceImportFilePath = Path.Combine(settings.SourceDirectory, "localization-resource-translations.sql"); if (!File.Exists(sourceImportFilePath)) { throw new IOException($"Source file '{sourceImportFilePath}' for import not found!"); } // create DB structures in target database using (var db = new LanguageEntities(settings.ConnectionString)) { var resource = db.LocalizationResources.Where(r => r.Id == 0); } var fileInfo = new FileInfo(sourceImportFilePath); var script = fileInfo.OpenText().ReadToEnd(); using (var connection = new SqlConnection(settings.ConnectionString)) { connection.Open(); using (var command = new SqlCommand(script, connection)) { command.ExecuteNonQuery(); } } }
internal ICollection <LocalizationResource> Extract(MigrationToolSettings settings) { if (settings.ExportFromDatabase) { using (var db = new LanguageEntities(settings.ConnectionString)) { return(db.LocalizationResources.Include(r => r.Translations).ToList()); } } // test few default conventions (lazy enough to read from EPiServer Framework configuration file) string resourceFilesSourceDir; if (!string.IsNullOrEmpty(settings.ResourceDirectory)) { resourceFilesSourceDir = Path.Combine(settings.SourceDirectory, settings.ResourceDirectory); } else { resourceFilesSourceDir = Path.Combine(settings.SourceDirectory, "Resources\\LanguageFiles"); if (!Directory.Exists(resourceFilesSourceDir)) { resourceFilesSourceDir = Path.Combine(settings.SourceDirectory, "lang"); } } if (!Directory.Exists(resourceFilesSourceDir)) { throw new IOException($"Default resource directory '{resourceFilesSourceDir}' does not exist or can't be found. Use `-resourceDir` argument"); } var resourceFiles = Directory.GetFiles(resourceFilesSourceDir, "*.xml"); if (!resourceFiles.Any()) { Console.WriteLine($"No resource files found in '{resourceFilesSourceDir}'"); } var fileProcessor = new ResourceFileProcessor(); var resources = fileProcessor.ParseFiles(resourceFiles); // initialize DB - to generate data structures try { using (var db = new LanguageEntities(settings.ConnectionString)) { var resource = db.LocalizationResources.Where(r => r.Id == 0); } } catch { // it's OK to have exception here } return(resources); }
private static void ReadConnectionString(MigrationToolSettings settings) { var vdm = new VirtualDirectoryMapping(_settings.SourceDirectory, true); var wcfm = new WebConfigurationFileMap(); wcfm.VirtualDirectories.Add("/", vdm); var config = WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/"); var connectionString = config.ConnectionStrings.ConnectionStrings["EPiServerDB"].ConnectionString; if (string.IsNullOrWhiteSpace(connectionString)) { throw new ConfigurationErrorsException("Cannot find EPiServer database connection"); } settings.ConnectionString = connectionString; }
public static void Main(string[] args) { _settings = ParseArguments(args); if (_settings.ShowHelp) { ShowHelp(_settings.OptionSet); return; } if (string.IsNullOrEmpty(_settings.SourceDirectory)) { Console.WriteLine("ERROR: Source directory parameter is missing!"); Console.WriteLine(); ShowHelp(_settings.OptionSet); return; } if (!Directory.Exists(_settings.SourceDirectory)) { throw new IOException($"Source directory `{_settings.SourceDirectory}` does not exist!"); } if (!File.Exists(Path.Combine(_settings.SourceDirectory, "web.config"))) { throw new IOException($"File `web.config` file not found in `{_settings.SourceDirectory}`!"); } Directory.SetCurrentDirectory(_settings.SourceDirectory); ReadConnectionString(_settings); AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(_settings.SourceDirectory, "App_Data")); if (_settings.ExportResources) { try { Console.WriteLine("Export started."); var extractor = new ResourceExtractor(); var resources = extractor.Extract(_settings); string generatedScript; if (_settings.Json) { var serializer = new JsonResourceExporter(); generatedScript = serializer.Export(resources).SerializedData; } else { var scriptGenerator = new SqlScriptGenerator(); generatedScript = scriptGenerator.Generate(resources, _settings.ScriptUpdate); } var scriptFileWriter = new ResultFileWriter(); var outputFile = scriptFileWriter.Write(generatedScript, _settings.TargetDirectory, _settings.Json); Console.WriteLine($"Output file: {outputFile}"); Console.WriteLine("Export completed!"); } catch (Exception e) { Console.WriteLine($"Error running tool: {e.Message}"); return; } } if (_settings.ImportResources) { Console.WriteLine("Import started!"); var importer = new ResourceImporter(); importer.Import(_settings); Console.WriteLine("Import completed!"); } if (!_settings.ExportResources && !_settings.ImportResources) { Console.WriteLine("No command specified."); Console.WriteLine("Try 'DbLocalizationProvider.MigrationTool.exe --help' for more information."); } if (Debugger.IsAttached) { Console.ReadLine(); } }
private static MigrationToolSettings ParseArguments(string[] args) { var showHelp = false; var sourceDirectory = string.Empty; var resourceDirectory = string.Empty; var targetDirectory = string.Empty; var scriptUpdate = false; var exportResources = false; var importResources = false; var exportFromDatabase = false; var jsonFormat = false; var p = new OptionSet { { "s|sourceDir=", "web application source directory", v => sourceDirectory = v }, { "t|targetDir=", "Target directory where to write import script (by default 'sourceDir')", v => targetDirectory = v }, { "resourceDir=", "Xml language resource directory (relative to `sourceDir`, by default `Resources\\LanguageFiles`)", v => resourceDirectory = v }, { "o|overwriteResources", "Generate update script statements for existing resources", k => scriptUpdate = true }, { "e|exportResources", "Export localization resources", k => exportResources = true }, { "from-db|fromDatabase", "Export localization resources from SQL database", k => exportFromDatabase = true }, { "json|jsonFormat", "Use JSON format", k => jsonFormat = true }, { "i|importResources", "Import localization resources from SQL file into database", k => importResources = true }, { "h|help", "show this message and exit", v => showHelp = v != null } }; var result = new MigrationToolSettings(p); try { var extra = p.Parse(args); result.SourceDirectory = sourceDirectory; result.ResourceDirectory = resourceDirectory; result.TargetDirectory = targetDirectory; result.ScriptUpdate = scriptUpdate; result.ExportResources = exportResources; result.ExportFromDatabase = exportFromDatabase; result.ImportResources = importResources; result.ShowHelp = showHelp; result.Json = jsonFormat; } catch (OptionException e) { Console.Write("DbLocalizationProvider.MigrationTool: "); Console.WriteLine(e.Message); Console.WriteLine("Try 'DbLocalizationProvider.MigrationTool.exe --help' for more information."); } if (string.IsNullOrEmpty(result.TargetDirectory)) { result.TargetDirectory = result.SourceDirectory; } return(result); }