/// <summary> /// The function creates a ddl.bat file which calls the back-end specific /// command line tool. /// </summary> /// <param name="processCmd">OS Process Command Object</param> /// <param name="processBatchFile">The batch file that will call the command line tool</param> /// <param name="cmdFileName">The command file name to parse</param> /// <returns>True indicates success; false indicates an error</returns> bool ProcessFile(Process processCmd, string processBatchFile, string cmdFileName) { bool insideCommentBlock = false; using (StreamReader sr = new StreamReader(cmdFileName)) { _results.Length = 0; string msg = string.Format("Parsing Command File: {0}{1}" , cmdFileName , Environment.NewLine); _results.Append(msg); FileMgr.WriteTextToFile(_outputFileName , msg , true , true); string line = sr.ReadLine(); while (!_exit && line != null) { while (_pause && !_exit) // have we been paused { Thread.Sleep(100); } line = line.Trim(); if (!insideCommentBlock && !line.StartsWith(Constants.CommentLineStart) && !line.StartsWith(Constants.CommentBlockEnd) && !line.StartsWith(Constants.CommentBlockStart) && line.Length > 0) { // check for the BreakWithMsg keyword if (line.ToLower().StartsWith(Constants.BreakWithMsg.ToLower())) { // display the message and wait for user input if (ContinueAfterPause(line)) { line = sr.ReadLine(); continue; } else { _exit = true; return(true); } } if (line.Contains('{') && line.Contains('}')) { line = ReplaceMacros(line); } // check for the call keyword to process another command file if (line.ToLower().StartsWith(Constants.RunCmdFile.ToLower())) { bool aborted = ProcessFile(processCmd, processBatchFile, _ddlSourceDir + "\\" + line.ToLower().Replace( Constants.RunCmdFile.ToLower(), "").Trim()); // check to see if we were aborted if (aborted) { return(aborted); } line = sr.ReadLine(); continue; } bool serverOnly = false; // check for the call keyword to process at server level only if (line.ToLower().StartsWith(Constants.ServerOnly.ToLower())) { serverOnly = true; line = line.ToLower().Replace(Constants.ServerOnly.ToLower(), "").Trim(); } string ddlObjectFile = _ddlSourceDir + "\\" + line; if (!File.Exists(ddlObjectFile)) // line is script filename { FileMgr.WriteTextToFile(_outputFileName, string.Format("Error; File: {0} could not be found. {1}" , ddlObjectFile, Environment.NewLine), true, true); } else { string cmdOutputFile = "cmdOutput.txt"; GenerateDDLBatch(ddlObjectFile, processBatchFile, serverOnly, cmdOutputFile); ProcessDDLBatch(processCmd); string results = null; if (File.Exists(cmdOutputFile)) { results = FileMgr.ReadTextFileIntoString(cmdOutputFile); if (!string.IsNullOrEmpty(results)) { _results.Append(results); FileMgr.WriteTextToFile(_outputFileName, results, true, true); _results.Append(results); } } else // there was some environment setup issue, because there was no cmdOutputFile found { results = string.Format("{0}Error; there was no output produced by the command.{0}" + " Possible errors include that the command line utility could not be found.{0}" + " Or that the listener for the database is not up or configured for tcpip.{0}" + " Or the input credentials are not correct.{0}" + " You can try executing the command listed from a dos prompt and viewing the results.{0}" + " Please refer to the GettingStarted document.{0}" , Environment.NewLine); FileMgr.WriteTextToFile(_outputFileName, results, true, true); _results.Append(results); return(true); // abort the process } } } if (line.StartsWith(Constants.CommentBlockStart)) { insideCommentBlock = true; } if (line.StartsWith(Constants.CommentBlockEnd)) { insideCommentBlock = false; } line = sr.ReadLine(); } } return(_exit ? true : false); }