예제 #1
0
        /// <summary>
        /// Generate a default extension(".cs") file without renaming
        /// </summary>
        /// <param name="host"></param>
        /// <param name="engine"></param>
        /// <param name="fileName"></param>
        /// <param name="aliasName"></param>
        /// <param name="extension"></param>
        private void GenerateFileAsDefault(CustomerHost host, Engine engine, string fileName, string aliasName, string extension, int retryCount)
        {
            // if the extension is not null, then specify the output file extension
            // else use the default value(.cs) as the output file extension
            host.TemplateFileValue = fileName;
            if (extension != null)
            {
                host.SetFileExtension(extension);
            }


            string inputFileStreamName = fileName.Replace(templateRootDirection, "").TrimStart('\\').Replace('\\', '.');


            // if the aliasName is not null, then specify the output file as the alias name
            // else use the input file name(exclude the extension) as the fileName
            string outputFileName = aliasName ?? Path.GetFileNameWithoutExtension(fileName);

            // how to determine the output file's direction?
            // if the text template exists in the Assertion folder,then put the
            // output file to the Assertion folder, and if it exists in LTS folder,
            // put the output file to LTS folder, and so on
            // if the input file direction is null, then we define it ""
            string inputFileDirection = Path.GetDirectoryName(fileName) ?? string.Empty;

            string outputFileDirection;

            if (inputFileDirection.EndsWith("Main"))
            {
                outputFileDirection = solutionMainDirection;
            }
            else if (inputFileDirection.Contains("Main\\Properties"))
            {
                outputFileDirection = solutionMainPropertiesDirection;
            }
            else if (inputFileDirection.Contains("Properties"))
            {
                outputFileDirection = solutionPropertiesDirection;
            }
            else if (fileName.Contains("Assertions"))
            {
                // the assertions direction
                outputFileDirection = solutionAssertionDirection;
            }
            else if (fileName.Contains("Sample"))
            {
                // the LTS direction
                outputFileDirection = solutionLtsSampleDirection;
            }
            else if (fileName.Contains("LTS"))
            {
                // the LTS direction
                outputFileDirection = solutionLtsDirection;
            }
            else if (fileName.Contains("Ultility"))
            {
                // the ultility direction
                outputFileDirection = solutionUltilityDirection;
            }
            else if (fileName.EndsWith("PAT3 Source.ptt"))
            {
                // the ultility direction
                outputFileDirection = solutionRootDirection;
            }
            else
            {
                // if none of above, then put the output file to the home direction
                outputFileDirection = solutionHomeDirection;
            }

            outputFileName = Path.Combine(outputFileDirection, outputFileName) + host.FileExtension;

            Assembly myAssembly = Assembly.GetExecutingAssembly();
            Stream   myStream   = myAssembly.GetManifestResourceStream("PAT.GUI.Docs.Template." + inputFileStreamName);

            if (extension == "resources")
            {
                byte[] buf = new byte[myStream.Length]; //declare arraysize
                myStream.Read(buf, 0, buf.Length);      // read from stream to byte array

                File.WriteAllBytes(outputFileName, buf);
            }
            else
            {
                StreamReader reader = new StreamReader(myStream);
                string       text   = reader.ReadToEnd();

                // use the engine to transfor the template
                string output = engine.ProcessTemplate(text, host);

                // write the generated file into the output file specified before
                // use the encoding style set in host
                File.WriteAllText(outputFileName, output, host.FileEncoding);
            }

            // after the generate, add the classes in the local classes field which will be used to
            // generate the .csproj file
            if (!inputFileDirection.Contains("\\Main") && !fileName.EndsWith("PAT3 Source.ptt") && retryCount == 1)
            {
                solutionClasses += outputFileName.Replace(solutionHomeDirection, "").TrimStart('\\') + "|";
            }

            // reset the host extension property
            host.ResetFileExtension();

            if (host.Errors.Count > 0)
            {
                if (retryCount <= RetryBound)
                {
                    GenerateFileAsDefault(host, engine, fileName, aliasName, extension, retryCount + 1);
                }
                else
                {
                    foreach (var error in host.Errors)
                    {
                        MessageBox.Show(
                            string.Format("File[{0}] is Generated unsuccessfully for: {1}", outputFileName, error),
                            Common.Utility.Utilities.APPLICATION_NAME, MessageBoxButtons.OK);
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Generate a default extension(".cs") file without renaming
        /// </summary>
        /// <param name="host"></param>
        /// <param name="engine"></param>
        /// <param name="fileName"></param>
        /// <param name="aliasName"></param>
        /// <param name="extension"></param>
        private void GenerateFileAsDefault(CustomerHost host, Engine engine, string fileName, string aliasName, string extension, int retryCount)
        {
            // if the extension is not null, then specify the output file extension
            // else use the default value(.cs) as the output file extension
            host.TemplateFileValue = fileName;
            if(extension != null)
            {
                host.SetFileExtension(extension);
            }

            string inputFileStreamName = fileName.Replace(templateRootDirection, "").TrimStart('\\').Replace('\\', '.');

            // if the aliasName is not null, then specify the output file as the alias name
            // else use the input file name(exclude the extension) as the fileName
            string outputFileName = aliasName ?? Path.GetFileNameWithoutExtension(fileName);

            // how to determine the output file's direction?
            // if the text template exists in the Assertion folder,then put the
            // output file to the Assertion folder, and if it exists in LTS folder,
            // put the output file to LTS folder, and so on
            // if the input file direction is null, then we define it ""
            string inputFileDirection = Path.GetDirectoryName(fileName)??string.Empty;

            string outputFileDirection;
            if (inputFileDirection.EndsWith("Main"))
            {
                outputFileDirection = solutionMainDirection;
            }
            else if (inputFileDirection.Contains("Main\\Properties"))
            {
                outputFileDirection = solutionMainPropertiesDirection;
            }
            else if (inputFileDirection.Contains("Properties"))
            {
                outputFileDirection = solutionPropertiesDirection;
            }
            else if (fileName.Contains("Assertions"))
            {
                // the assertions direction
                outputFileDirection = solutionAssertionDirection;
            }
            else if (fileName.Contains("Sample"))
            {
                // the LTS direction
                outputFileDirection = solutionLtsSampleDirection;
            }
            else if (fileName.Contains("LTS"))
            {
                // the LTS direction
                outputFileDirection = solutionLtsDirection;
            }
            else if (fileName.Contains("Ultility"))
            {
                // the ultility direction
                outputFileDirection = solutionUltilityDirection;
            }
            else if (fileName.EndsWith("PAT3 Source.ptt"))
            {
                // the ultility direction
                outputFileDirection = solutionRootDirection;
            }
            else
            {
                // if none of above, then put the output file to the home direction
                outputFileDirection = solutionHomeDirection;
            }

            outputFileName = Path.Combine(outputFileDirection, outputFileName) + host.FileExtension;

            Assembly myAssembly = Assembly.GetExecutingAssembly();
            Stream myStream = myAssembly.GetManifestResourceStream("PAT.GUI.Docs.Template." + inputFileStreamName);

            if (extension == "resources")
            {
                byte[] buf = new byte[myStream.Length];  //declare arraysize
                myStream.Read(buf, 0, buf.Length); // read from stream to byte array

                File.WriteAllBytes(outputFileName, buf);
            }
            else
            {
                StreamReader reader = new StreamReader(myStream);
                string text = reader.ReadToEnd();

                // use the engine to transfor the template
                string output = engine.ProcessTemplate(text, host);

                // write the generated file into the output file specified before
                // use the encoding style set in host
                File.WriteAllText(outputFileName, output, host.FileEncoding);

            }

            // after the generate, add the classes in the local classes field which will be used to
            // generate the .csproj file
            if (!inputFileDirection.Contains("\\Main") && !fileName.EndsWith("PAT3 Source.ptt") && retryCount == 1)
            {
                solutionClasses += outputFileName.Replace(solutionHomeDirection, "").TrimStart('\\') + "|";
            }

            // reset the host extension property
            host.ResetFileExtension();

            if (host.Errors.Count > 0)
            {
                if (retryCount <= RetryBound)
                {
                    GenerateFileAsDefault(host, engine, fileName, aliasName, extension, retryCount + 1);
                }
                else
                {
                    foreach (var error in host.Errors)
                    {
                        MessageBox.Show(
                            string.Format("File[{0}] is Generated unsuccessfully for: {1}", outputFileName, error),
                            Common.Utility.Utilities.APPLICATION_NAME, MessageBoxButtons.OK);
                    }
                }
            }
        }