Author: bendewey
Date: Thu Jul 30 03:26:43 2009
New Revision: 799159

URL: http://svn.apache.org/viewvc?rev=799159&view=rev
Log:
STONEHENGE-95, Additionally I made a pretty major refactor to the SetupActions 
class.

Added:
    
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/XmlLoadData.cs
Modified:
    
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/App.config
    
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/Program.cs
    
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupAction.cs
    
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupActions.csproj

Modified: 
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/App.config
URL: 
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/App.config?rev=799159&r1=799158&r2=799159&view=diff
==============================================================================
--- 
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/App.config
 (original)
+++ 
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/App.config
 Thu Jul 30 03:26:43 2009
@@ -21,7 +21,6 @@
       <!--This is the input parameters for the db setup routine. -->
       <add key="dbServer" value="." />
       <add key="installPath" value="C:\StockTraderDemo\" />
-      <add key="createDBs"  value="StockTraderDB" />
       <add key="dbAdmin" value="sa" />
       <add key="dbPassword" value="Abc.123" />
       <add key="authType" value="SQL" />

Modified: 
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/Program.cs
URL: 
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/Program.cs?rev=799159&r1=799158&r2=799159&view=diff
==============================================================================
--- 
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/Program.cs
 (original)
+++ 
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/Program.cs
 Thu Jul 30 03:26:43 2009
@@ -21,42 +21,25 @@
 using System.Text;
 using System.Configuration;
 
-namespace SetupAction
+namespace SetupActions
 {
     class Program
-    {
-        public static string INSTALL_PATH = null;
-        public static string dbServer = null;
-        public static string installPath = null;
-        public static string createDBs = null;
-        public static string dbAdmin = null;
-        public static string dbPassword = null;
-        public static string authType = null;
-        
+    {        
         static void Main()
         {
             Console.WriteLine("Setting up Database");
+            
             //These are only for display
-            //The install method wil get them again.
-            dbServer = ConfigurationManager.AppSettings.Get("dbServer");
-            installPath = ConfigurationManager.AppSettings.Get("installPath");
-            //not used createDBs = 
ConfigurationManager.AppSettings.Get("createDBs");
-            dbAdmin = ConfigurationManager.AppSettings.Get("dbAdmin");
-            dbPassword = ConfigurationManager.AppSettings.Get("dbPassword");
-            authType = ConfigurationManager.AppSettings.Get("authType");
-
+            //The install method will get them again.
             Console.WriteLine("Config.AppSettings:");
-            Console.WriteLine("dbServer  is {0}",dbServer );
-            Console.WriteLine("installPath  is {0}", installPath);
-            //not used Console.WriteLine("createDBs  is {0}", createDBs);
-            Console.WriteLine("dbAdmin  is {0}", dbAdmin);
-            Console.WriteLine("authType  is {0}", authType);
-
-            
+            Console.WriteLine("dbServer  is {0}", 
ConfigurationManager.AppSettings.Get("dbServer"));
+            Console.WriteLine("installPath  is {0}", 
ConfigurationManager.AppSettings.Get("installPath"));
+            Console.WriteLine("dbAdmin  is {0}", 
ConfigurationManager.AppSettings.Get("dbAdmin"));
+            Console.WriteLine("authType  is {0}", 
ConfigurationManager.AppSettings.Get("authType"));
 
-            SetupAction s = new SetupAction();
             try
             {
+                SetupAction s = new SetupAction();
                 s.Install();
                 Console.WriteLine();
                 Console.WriteLine("Setup completed. Press Enter to continue");
@@ -64,7 +47,9 @@
             catch (Exception ex)
             {
                 Console.WriteLine();
+                Console.ForegroundColor = ConsoleColor.Red;
                 Console.WriteLine(ex.ToString());
+                Console.ForegroundColor = ConsoleColor.Gray;
                 Console.WriteLine("Setup Failed. Press Enter to continue");
             }
             Console.ReadLine();

Modified: 
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupAction.cs
URL: 
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupAction.cs?rev=799159&r1=799158&r2=799159&view=diff
==============================================================================
--- 
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupAction.cs
 (original)
+++ 
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupAction.cs
 Thu Jul 30 03:26:43 2009
@@ -16,186 +16,103 @@
 //
 
 using System;
-using System.DirectoryServices;
-using System.Data;
-using System.ComponentModel;
-using System.Collections.Generic;
-using System.Text;
-using System.Net;
-using System.Threading;
-using System.Diagnostics;
-using System.IO;
-using System.Reflection;
 using System.Configuration;
+using System.Data;
 using System.Data.SqlClient;
-using Microsoft.SqlServer.Management;
-using Microsoft.SqlServer.Management.Smo;
-using Microsoft.SqlServer.Management.Common;
-
-
+using System.IO;
+using System.Collections.Generic;
 
-namespace SetupAction
+namespace SetupActions
 {
     /// <summary>
     /// This is a custom setup action that overrides Installer base and is 
called after setup copies filed, automatically
     /// by the setup program. It will create IIS virtual directories based on 
WMI, register script maps, and create the databases.
     /// </summary>
-    public partial class SetupAction 
+    internal sealed class SetupAction 
     {
-        private string SQL_CONN = null;
-        public static readonly string CONNSTRING_SQLAUTH = 
"server={0};Database={1};user id={2};password={3};Pooling=false;";
-        public static readonly string CONNSTRING_WINAUTH = 
@"server={0};Database={1};Integrated Security=SSPI;";
-        //newstrings 
-        string CREATE_LOADACCOUNTPROFILEXML = 
@"setup_utilities\DATALOAD\CreateInsertXMLAccountProfileProc.sql";
-        string CREATE_LOADACCOUNTXML = 
@"setup_utilities\DATALOAD\CreateInsertXMLAccountProc.sql";
-        string CREATE_LOADHOLDINGXML = 
@"setup_utilities\DATALOAD\CreateInsertXMLHoldingProc.sql";
-        string CREATE_LOADORDERSXML = 
@"setup_utilities\DATALOAD\CreateInsertXMLOrdersProc.sql";
-        string CREATE_LOADQUOTEXML = 
@"setup_utilities\DATALOAD\CreateInsertXMLQuoteProc.sql";
-        string MSG_CHECK_SQL_AUTH = string.Empty;
+        // Connection Strings
+        private readonly string CONNSTRING_SQLAUTH = 
@"server={0};Database={1};user id={2};password={3};Pooling=false;";
+        private readonly string CONNSTRING_WINAUTH = 
@"server={0};Database={1};Integrated Security=SSPI;";
+
+        // DB Create/Load Scripts
+        private readonly string TRADEDB_CREATE_FILE = 
@"setup_utilities\DataLoad\createdb.sql";
+        private readonly string TRADEDB_CREATE_DBCONFIG = 
@"setup_utilities\DataLoad\createdbconfig.sql";
+        private readonly string TRADEDB_INSERT_DBCONFIG = 
@"setup_utilities\DataLoad\insertdbconfig.sql";
+
+        // Xml Loading Stored Proc Scripts
+        private readonly List<string> CREATE_PROC_SCRIPTS = new List<string>() 
{ 
+            @"setup_utilities\DataLoad\CreateInsertXMLAccountProfileProc.sql",
+            @"setup_utilities\DataLoad\CreateInsertXMLAccountProc.sql",
+            @"setup_utilities\DataLoad\CreateInsertXMLHoldingProc.sql",
+            @"setup_utilities\DataLoad\CreateInsertXMLOrdersProc.sql",
+            @"setup_utilities\DataLoad\CreateInsertXMLQuoteProc.sql"
+        };
         
-        public static string dbServer = null;
-        private string installPath = null;
-        //private string createDBs = null;
-        public string dbAdmin = null;
-        public string dbPassword = null;
-        public string authType = null;
-        public static readonly string tradeuser = "trade";
-        public static readonly string tradepassword = "yyy";
-        public static readonly string TRADEDB = "StockTraderDB";
-        public const string TRADEDB_CREATE_FILE = "createdb.sql";
-        public const string TRADEDB_CREATE_DBCONFIG = "createdbconfig.sql";
-        public const string TRADEDB_INSERT_DBCONFIG = "insertdbconfig.sql";
+        // Xml Files to Load
+        private readonly List<XmlLoadData> XML_LOAD_DATA = new 
List<XmlLoadData>() {
+            new XmlLoadData { 
Filename=@"setup_utilities\DataLoad\StockTraderDB\Account.xml", 
StoredProcName="InsertAccountFromXML", Table="dbo.ACCOUNT" },
+            new XmlLoadData { 
Filename=@"setup_utilities\DataLoad\StockTraderDB\AccountProfile.xml", 
StoredProcName="InsertAccountProfileFromXML" },
+            new XmlLoadData { 
Filename=@"setup_utilities\DataLoad\StockTraderDB\Holding.xml", 
StoredProcName="InsertHoldingFromXML", Table="dbo.HOLDING" },
+            new XmlLoadData { 
Filename=@"setup_utilities\DataLoad\StockTraderDB\Quote.xml", 
StoredProcName="InsertQuoteFromXML" },
+            new XmlLoadData { 
Filename=@"setup_utilities\DataLoad\StockTraderDB\Orders.xml", 
StoredProcName="InsertOrdersFromXML", Table="dbo.ORDERS" }
+        };
+
+        // Error Messages
+        private readonly string CREATE_LOGIN_FAILED_MSG = "Unable to login 
with the newly created trade user account.";
+
+        // DB Creation Configuration
+        private readonly string _dbServer;
+        private readonly string _installPath;
+        private readonly string _dbAdmin;
+        private readonly string _dbPassword;
+        private readonly string _authType;
+        private readonly string _tradeUser = "trade";
+        private readonly string _tradePassword = "yyy";
+        private readonly string _tradeDb = "StockTraderDB";
 
-        string GetConnectionString(string databaseName)
+        private string _connectionString = null;
+
+        public SetupAction()
         {
-            if (authType != null && authType.Equals("Integrated", 
StringComparison.InvariantCultureIgnoreCase))
-                return string.Format(CONNSTRING_WINAUTH, new object[] { 
dbServer, databaseName });
-            
-            return string.Format(CONNSTRING_SQLAUTH, new object[] { dbServer, 
databaseName, dbAdmin, dbPassword });
+            //Get values from config
+            _dbServer = ConfigurationManager.AppSettings.Get("dbServer");
+            _installPath = ConfigurationManager.AppSettings.Get("installPath");
+            _dbAdmin = ConfigurationManager.AppSettings.Get("dbAdmin");
+            _dbPassword = ConfigurationManager.AppSettings.Get("dbPassword");
+            _authType = ConfigurationManager.AppSettings.Get("authType");
         }
 
-        //public void Install(System.Collections.IDictionary stateSaver)
         public void Install()
         {
-
-            //Get values from config
-            dbServer = ConfigurationManager.AppSettings.Get("dbServer");
-            installPath = ConfigurationManager.AppSettings.Get("installPath");
-            //not used createDBs = 
ConfigurationManager.AppSettings.Get("createDBs");
-            dbAdmin = ConfigurationManager.AppSettings.Get("dbAdmin");
-            dbPassword = ConfigurationManager.AppSettings.Get("dbPassword");
-            authType = ConfigurationManager.AppSettings.Get("authType");
-
-            //string CREATE_LOADACCOUNTPROFILEXML = 
@"setup_utilities\DATALOAD\" + createfilename;
-            //string CREATE_LOADACCOUNTXML = string.Empty;
-            //string CREATE_LOADHOLDINGXML = string.Empty;
-            //string CREATE_LOADORDERSXML = string.Empty;
-            //string CREATE_LOADQUOTEXML = string.Empty;
-
-            try
-            {
-                createDatabase(installPath, TRADEDB_CREATE_FILE, TRADEDB, 
tradeuser, tradepassword);
-                createLoadXmlStockTraderDBProcs(installPath, TRADEDB);
-                loadStockTraderDB(installPath, TRADEDB);
-                addDBConfig(installPath, TRADEDB, TRADEDB_CREATE_DBCONFIG, 
TRADEDB_INSERT_DBCONFIG);
-            }
-            catch (Exception e)
-            {
-                throw new Exception("MSG_DBFAIL " + e.Message);
-            }
+            CreateDatabase(_tradeDb, _tradeUser, _tradePassword);
+            CreateLoadXmlStoredProcs(_tradeDb);
+            LoadStockTraderDB(_tradeDb);
+            AddDBConfig(_tradeDb);
         }
 
         /// <summary>
-        /// Creates the tables needed for the database configuration system
-        /// i.e. SERVICE, CLIENTTOBS, BSTOOPS, DBCONFIG
+        /// Gets a Connection string based on the authentication Type and 
supplied DB Name
         /// </summary>
-        /// <param name="installPath"></param>
-        /// <param name="databaseName"></param>
-        private void addDBConfig(string installPath, string databaseName, 
string createdbconfigfilename, string insertdbconfigfilename)
+        /// <param name="databaseName">The database name to connect</param>
+        /// <returns>A SQL Server ConnectionString</returns>
+        private string GetConnectionString(string databaseName)
         {
-            SQL_CONN = GetConnectionString(databaseName);
-            SqlConnection sqlConnection = new SqlConnection(SQL_CONN);
-            sqlConnection.Open();
-
-            //creates the necessary tables: CLIENTTOBS, BSTOOPS, SERVICE, 
DBCONFIG
-            System.IO.StreamReader file = new 
System.IO.StreamReader(installPath + @"setup_utilities\DATALOAD\" + 
createdbconfigfilename);
-            string createCommand = file.ReadToEnd();
-            file.Close();
-            SqlCommand sqlCommand = new SqlCommand(createCommand, 
sqlConnection);
-            sqlCommand.CommandType = CommandType.Text;
-            sqlCommand.ExecuteNonQuery();
-            Console.Write(".");
-
-            //inserts the config info into these tables
-            file = new System.IO.StreamReader(installPath + 
@"setup_utilities\DATALOAD\" + insertdbconfigfilename);
-            createCommand = file.ReadToEnd();
-            file.Close();
-            sqlCommand = new SqlCommand(createCommand, sqlConnection);
-            sqlCommand.CommandType = CommandType.Text;
-            sqlCommand.ExecuteNonQuery();
-            Console.Write(".");
-
-            sqlConnection.Close();
-            return;
+            return GetConnectionString(databaseName, _dbAdmin, _dbPassword);
         }
-        
+
         /// <summary>
-        /// Similar to createLoadXmlRepositoryProcs, except for StockTraderDB 
tables.
+        /// Gets a Connection string based on the authentication Type and 
supplied DB Name
         /// </summary>
-        /// <param name="installPath"></param>
-        /// <param name="databaseName"></param>
-        public void createLoadXmlStockTraderDBProcs(string installPath, string 
databaseName)
+        /// <param name="databaseName">The database name to connect</param>
+        /// <param name="username">The username to use when connecting to the 
database</param>
+        /// <param name="password">The password for the supplied 
username</param>
+        /// <returns>A SQL Server ConnectionString</returns>
+        private string GetConnectionString(string databaseName, string 
username, string password)
         {
-            SQL_CONN = GetConnectionString(databaseName);
-            SqlConnection sqlConnection = new SqlConnection(SQL_CONN);
-            sqlConnection.Open();
-
-            ///ACCOUNT_PROFILE_LOAD_XML
-            System.IO.StreamReader file = new 
System.IO.StreamReader(installPath + CREATE_LOADACCOUNTPROFILEXML);
-            string createCommand = file.ReadToEnd();
-            file.Close();
-            SqlCommand sqlCommand = new SqlCommand(createCommand, 
sqlConnection);
-            sqlCommand.CommandType = CommandType.Text;
-            sqlCommand.ExecuteNonQuery();
-            Console.Write(".");
-
-            ///ACCOUNT_LOAD_XML
-            file = new System.IO.StreamReader(installPath + 
CREATE_LOADACCOUNTXML);
-            createCommand = file.ReadToEnd();
-            file.Close();
-            sqlCommand = new SqlCommand(createCommand, sqlConnection);
-            sqlCommand.CommandType = CommandType.Text;
-            sqlCommand.ExecuteNonQuery();
-            Console.Write(".");
-
-            ///HOLDING_LOAD_XML
-            file = new System.IO.StreamReader(installPath + 
CREATE_LOADHOLDINGXML);
-            createCommand = file.ReadToEnd();
-            file.Close();
-            sqlCommand = new SqlCommand(createCommand, sqlConnection);
-            sqlCommand.CommandType = CommandType.Text;
-            sqlCommand.ExecuteNonQuery();
-            Console.Write(".");
-
-            ///ORDERS_LOAD_XML
-            file = new System.IO.StreamReader(installPath + 
CREATE_LOADORDERSXML);
-            createCommand = file.ReadToEnd();
-            file.Close();
-            sqlCommand = new SqlCommand(createCommand, sqlConnection);
-            sqlCommand.CommandType = CommandType.Text;
-            sqlCommand.ExecuteNonQuery();
-            Console.Write(".");
-
-            ///QUOTE_LOAD_XML
-            file = new System.IO.StreamReader(installPath + 
CREATE_LOADQUOTEXML);
-            createCommand = file.ReadToEnd();
-            file.Close();
-            sqlCommand = new SqlCommand(createCommand, sqlConnection);
-            sqlCommand.CommandType = CommandType.Text;
-            sqlCommand.ExecuteNonQuery();
-            Console.Write(".");
+            if (_authType != null && _authType.Equals("Integrated", 
StringComparison.InvariantCultureIgnoreCase))
+                return string.Format(CONNSTRING_WINAUTH, new object[] { 
_dbServer, databaseName });
 
-            sqlConnection.Close();
+            return string.Format(CONNSTRING_SQLAUTH, new object[] { _dbServer, 
databaseName, username, password });
         }
 
         /// <summary>
@@ -206,224 +123,258 @@
         /// <param name="repositoryName"></param>
         /// <param name="userid"></param>
         /// <param name="password"></param>
-        public void createDatabase(string installPath, string createfilename, 
string repositoryName, string userid, string password)
+        private void CreateDatabase(string databaseName, string userid, string 
password)
         {
-            string configDB = "IF (1 = 
FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) EXEC [" + repositoryName + 
"].[dbo].[sp_fulltext_database] @action = 'enable';" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET ANSI_NULL_DEFAULT OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET ANSI_NULLS OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET ANSI_PADDING OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET ANSI_WARNINGS OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET ARITHABORT OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET AUTO_CLOSE OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET AUTO_CREATE_STATISTICS ON;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET AUTO_SHRINK OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET AUTO_UPDATE_STATISTICS ON;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET CURSOR_CLOSE_ON_COMMIT OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET CURSOR_DEFAULT  GLOBAL;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET CONCAT_NULL_YIELDS_NULL OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET NUMERIC_ROUNDABORT OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET QUOTED_IDENTIFIER OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET RECURSIVE_TRIGGERS OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET  ENABLE_BROKER;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET AUTO_UPDATE_STATISTICS_ASYNC OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET DATE_CORRELATION_OPTIMIZATION OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET TRUSTWORTHY OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET ALLOW_SNAPSHOT_ISOLATION OFF;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET PARAMETERIZATION SIMPLE;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET  READ_WRITE;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET RECOVERY FULL;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET  MULTI_USER;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET PAGE_VERIFY CHECKSUM;" +
-                                         "ALTER DATABASE [" + repositoryName + 
"] SET DB_CHAINING OFF;";
-
-            string dropDB = null;
-            SQL_CONN = GetConnectionString("master");
-            SqlConnection sqlConnection = new SqlConnection(SQL_CONN);
+            _connectionString = GetConnectionString("master");
+            SqlConnection sqlConnection = new SqlConnection(_connectionString);
             try
             {
+                // Connect to master
                 sqlConnection.Open();
-                dropDB = "IF  EXISTS (SELECT name FROM sys.databases WHERE 
name = N'" + repositoryName + "') DROP DATABASE [" + repositoryName + "]";
-                SqlCommand sqlCommand = new SqlCommand(dropDB, sqlConnection);
-                sqlCommand.CommandTimeout = 1200;
-                sqlCommand.CommandType = CommandType.Text;
 
                 //Drop DB
+                string dropDB = "IF  EXISTS (SELECT name FROM sys.databases 
WHERE name = N'" + databaseName + "') DROP DATABASE [" + databaseName + "]";
+                SqlCommand sqlCommand = new SqlCommand(dropDB, sqlConnection);
                 sqlCommand.ExecuteNonQuery();
 
                 //Create DB
-                string strCreateDB = "CREATE DATABASE [" + repositoryName + 
"];";
-                sqlCommand.CommandText = strCreateDB;
+                string createDB = "CREATE DATABASE [" + databaseName + "];";
+                sqlCommand.CommandText = createDB;
                 sqlCommand.ExecuteNonQuery();
                 Console.Write(".");
 
                 //Config DB
+                string configDB = "IF (1 = 
FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) EXEC [" + databaseName + 
"].[dbo].[sp_fulltext_database] @action = 'enable';" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET ANSI_NULL_DEFAULT OFF;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET ANSI_NULLS OFF;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET ANSI_PADDING OFF;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET ANSI_WARNINGS OFF;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET ARITHABORT OFF;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET AUTO_CLOSE OFF;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET AUTO_CREATE_STATISTICS ON;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET AUTO_SHRINK OFF;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET AUTO_UPDATE_STATISTICS ON;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET CURSOR_CLOSE_ON_COMMIT OFF;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET CURSOR_DEFAULT  GLOBAL;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET CONCAT_NULL_YIELDS_NULL OFF;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET NUMERIC_ROUNDABORT OFF;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET QUOTED_IDENTIFIER OFF;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET RECURSIVE_TRIGGERS OFF;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET  ENABLE_BROKER;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET AUTO_UPDATE_STATISTICS_ASYNC OFF;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET DATE_CORRELATION_OPTIMIZATION OFF;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET TRUSTWORTHY OFF;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET ALLOW_SNAPSHOT_ISOLATION OFF;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET PARAMETERIZATION SIMPLE;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET  READ_WRITE;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET RECOVERY FULL;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET  MULTI_USER;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET PAGE_VERIFY CHECKSUM;" +
+                                         "ALTER DATABASE [" + databaseName + 
"] SET DB_CHAINING OFF;";
+
                 sqlCommand.CommandText = configDB;
                 sqlCommand.ExecuteNonQuery();
                 Console.Write(".");
 
-                string createlogin = "IF NOT EXISTS (SELECT * FROM 
sys.server_principals WHERE name = N'" + userid + "') " +
+                // Create Login
+                string createLogin = "IF NOT EXISTS (SELECT * FROM 
sys.server_principals WHERE name = N'" + userid + "') " +
                                          "CREATE LOGIN [" + userid + "] WITH 
PASSWORD='" + password + "', DEFAULT_DATABASE=" +
-                                         "[" + repositoryName + "], 
DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;";
-                string createuser = "IF NOT EXISTS (SELECT * FROM 
sys.database_principals WHERE name = N'" + userid + "') CREATE USER" +
-                                             "[" + userid + "] FOR LOGIN [" + 
userid + "] WITH DEFAULT_SCHEMA=[dbo];";
+                                         "[" + databaseName + "], 
DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;";
 
-                //create login
-                sqlCommand.CommandText = createlogin;
+                sqlCommand.CommandText = createLogin;
                 sqlCommand.ExecuteNonQuery();
                 Console.Write(".");
 
-                //Logout of Master
-
+                // Logout of Master
                 sqlConnection.Close();
 
-                //Now create user for new DB by logging in to new DB with 
admin rights
+                // Login to the databaseName using the Master Account
+                _connectionString = GetConnectionString(databaseName);
+                sqlConnection = new SqlConnection(_connectionString);
+                sqlConnection.Open();
 
-                SQL_CONN = GetConnectionString(repositoryName);
-                sqlConnection = new SqlConnection(SQL_CONN);
-                Server server = new Server(new 
ServerConnection(sqlConnection));
-                server.ConnectionContext.ExecuteNonQuery(createuser);
-                Console.Write(".");
+                // Create User
+                string createUser = "IF NOT EXISTS (SELECT * FROM 
sys.database_principals WHERE name = N'" + userid + "') CREATE USER" +
+                                             "[" + userid + "] FOR LOGIN [" + 
userid + "] WITH DEFAULT_SCHEMA=[dbo];";
 
-                //Logout of Trade DB
-                sqlConnection.Close();
-                System.Data.SqlClient.SqlConnection.ClearAllPools();
+                sqlCommand = new SqlCommand(createUser, sqlConnection);
+                sqlCommand.ExecuteNonQuery();
+                Console.Write(".");
 
-                //Login to Master and use SMO to create role mapping of DBO
-                sqlConnection = new SqlConnection(SQL_CONN);
-                //new SMO functionality
-                server = new Server(new ServerConnection(sqlConnection));
-                server.ConnectionContext.ExecuteNonQuery("exec 
sp_addrolemember 'db_owner','" + userid + "'");
+                // Add Role
+                string addRole = "EXEC sp_addrolemember 'db_owner', '" + 
userid + "'";
+                sqlCommand.CommandText = addRole;
+                sqlCommand.ExecuteNonQuery();
                 Console.Write(".");
 
-                //Logout
+                // Logout of databaseName with Master credentials
                 sqlConnection.Close();
 
-                //Login as newly created user.  Don't need to but rather test 
connectivity here right away to make sure DB in good state for new trade user.
-                SQL_CONN = GetConnectionString(repositoryName);
-                sqlConnection = new SqlConnection(SQL_CONN);
+                // Login as newly created user.  
+                // Don't need to but rather test connectivity here right away 
to make sure 
+                // the DB is in good state for the new trade user.
+                _connectionString = GetConnectionString(databaseName, userid, 
password);
+                sqlConnection = new SqlConnection(_connectionString);
                 try
                 {
                     sqlConnection.Open();
                 }
                 catch (Exception e)
                 {
-                    throw new Exception(MSG_CHECK_SQL_AUTH + ". Exc: " + 
e.Message);
+                    throw new Exception(CREATE_LOGIN_FAILED_MSG + "  Error: " 
+ e.Message);
                 }
 
                 ///Create Schema for DB
-                System.IO.StreamReader file = new 
System.IO.StreamReader(installPath + @"setup_utilities\DATALOAD\" + 
createfilename);
-                string createCommand = file.ReadToEnd();
-                file.Close();
+                string createCommand = ReadTextFile(Path.Combine(_installPath, 
TRADEDB_CREATE_FILE));
                 sqlCommand = new SqlCommand(createCommand, sqlConnection);
-                sqlCommand.CommandType = CommandType.Text;
                 sqlCommand.ExecuteNonQuery();
                 Console.Write(".");
-                sqlConnection.Close();
-                return;
             }
-            catch (Exception e)
+            finally
             {
+                // Close the connection
                 if (sqlConnection.State == ConnectionState.Open)
                     sqlConnection.Close();
-                System.Data.SqlClient.SqlConnection.ClearAllPools();
                 sqlConnection.Dispose();
-                throw new Exception(e.Message);
+
+                // Clear all pools so we don't get any master connections 
going forward
+                SqlConnection.ClearAllPools();
             }
         }
 
-       
         /// <summary>
-        /// Loads the StockTraderDB tables with initial data from XML files.
+        /// Similar to createLoadXmlRepositoryProcs, except for StockTraderDB 
tables.
         /// </summary>
-        /// <param name="installPath"></param>
-        /// <param name="repository"></param>
-        public void loadStockTraderDB(string installPath, string repository)
+        /// 
+        /// <param name="databaseName"></param>
+        private void CreateLoadXmlStoredProcs(string databaseName)
         {
-            SQL_CONN = GetConnectionString(repository);
-            string xmlFile = null;
-            string sql = null;
-            string table = null;
-            for (int i = 0; i < 5; i++)
+            _connectionString = GetConnectionString(databaseName);
+            SqlConnection sqlConnection = new SqlConnection(_connectionString);
+            try
             {
-                switch (i)
-                {
-                    case 0:
-                        {
-                            xmlFile = installPath + 
"setup_utilities\\DATALOAD\\" + repository + "\\Account.xml";
-                            sql = "InsertAccountFromXML";
-                            table = "dbo.ACCOUNT";
-                            break;
-                        }
-                    case 1:
-                        {
-                            xmlFile = installPath + 
"setup_utilities\\DATALOAD\\" + repository + "\\AccountProfile.xml";
-                            sql = "InsertAccountProfileFromXML";
-                            table = null;
-                            break;
-                        }
-                    case 2:
-                        {
-                            xmlFile = installPath + 
"setup_utilities\\DATALOAD\\" + repository + "\\Quote.xml";
-                            sql = "InsertQuoteFromXML";
-                            table = null;
-                            break;
-                        }
-                    case 3:
-                        {
-                            xmlFile = installPath + 
"setup_utilities\\DATALOAD\\" + repository + "\\Holding.xml";
-                            sql = "InsertHoldingFromXML";
-                            table = "dbo.HOLDING";
-                            break;
-                        }
-                    case 4:
-                        {
-                            xmlFile = installPath + 
"setup_utilities\\DATALOAD\\" + repository + "\\Orders.xml";
-                            sql = "InsertOrdersFromXML";
-                            table = "dbo.ORDERS";
-                            break;
-                        }
-                }
-                SqlConnection conn = new SqlConnection(SQL_CONN);
-                conn.Open();
-                string configContent = null;
-                if (table != null)
-                {
-                    //Need to turn off identities first for certain tables.
-                    SqlCommand cmd = new SqlCommand("SET IDENTITY_INSERT " + 
table + " ON");
-                    cmd.Connection = conn;
-                    cmd.CommandType = CommandType.Text;
-                    cmd.ExecuteNonQuery();
-                    Console.Write(".");
-                }
-                using (StreamReader sr = new StreamReader(xmlFile))
-                {
-                    configContent = sr.ReadToEnd();
-                }
-                SqlParameter parmDoc = new SqlParameter("sXML", 
SqlDbType.NText, 60000000);
-                parmDoc.Value = configContent;
-                SqlCommand cmd2 = new SqlCommand(sql);
-                cmd2.CommandType = CommandType.StoredProcedure;
-                cmd2.Connection = conn;
-                cmd2.Parameters.Add(parmDoc);
-                try
+                sqlConnection.Open();
+
+                foreach (string file in CREATE_PROC_SCRIPTS)
                 {
-                    cmd2.ExecuteNonQuery();
+                    // Create Store
+                    string createCommand = 
ReadTextFile(Path.Combine(_installPath, file));
+                    SqlCommand sqlCommand = new SqlCommand(createCommand, 
sqlConnection);
+                    sqlCommand.ExecuteNonQuery();
                     Console.Write(".");
                 }
-                catch (Exception e)
-                {
-                    throw new Exception(e.Message);
-                }
-                if (table != null)
+            }
+            finally
+            {
+                // Close the connection
+                if (sqlConnection.State == ConnectionState.Open)
+                    sqlConnection.Close();
+                sqlConnection.Dispose();
+            }
+        }
+       
+        /// <summary>
+        /// Loads the StockTraderDB tables with initial data from XML files.
+        /// </summary>
+        /// 
+        /// <param name="repository"></param>
+        private void LoadStockTraderDB(string repository)
+        {
+            _connectionString = GetConnectionString(repository);
+            SqlConnection sqlConnection = new SqlConnection(_connectionString);
+            try
+            {
+                sqlConnection.Open();
+
+                foreach (var xmlData in XML_LOAD_DATA)
                 {
-                    cmd2 = new SqlCommand("SET IDENTITY_INSERT " + table + " 
OFF");
-                    cmd2.Connection = conn;
-                    cmd2.CommandType = CommandType.Text;
-                    cmd2.ExecuteNonQuery();
+                    SqlCommand identityCommand;
+                    if (xmlData.Table != null)
+                    {
+                        // Need to turn off identities first for certain 
tables.
+                        identityCommand = new SqlCommand("SET IDENTITY_INSERT 
" + xmlData.Table + " ON", sqlConnection);
+                        identityCommand.ExecuteNonQuery();
+                        Console.Write(".");
+                    }
+
+                    // Create the sql parameter with the xml data from the file
+                    SqlParameter xmlParameter = new SqlParameter("sXML", 
SqlDbType.NText, 60000000);
+                    xmlParameter.Value = 
ReadTextFile(Path.Combine(_installPath, xmlData.Filename));
+
+                    // execute the load xml Stored Procedure
+                    SqlCommand insertProcCommand = new 
SqlCommand(xmlData.StoredProcName, sqlConnection);
+                    insertProcCommand.CommandType = 
CommandType.StoredProcedure;
+                    insertProcCommand.Parameters.Add(xmlParameter);
+                    insertProcCommand.ExecuteNonQuery();
                     Console.Write(".");
+
+                    if (xmlData.Table != null)
+                    {
+                        // reset the identities for certain tables
+                        identityCommand = new SqlCommand("SET IDENTITY_INSERT 
" + xmlData.Table + " OFF", sqlConnection);
+                        identityCommand.ExecuteNonQuery();
+                        Console.Write(".");
+                    }
                 }
-                conn.Close();
             }
+            finally
+            {
+                // Close the connection
+                if (sqlConnection.State == ConnectionState.Open)
+                    sqlConnection.Close();
+                sqlConnection.Dispose();
+            }
+        }
+
+        /// <summary>
+        /// Creates the tables needed for the database configuration system
+        /// i.e. SERVICE, CLIENTTOBS, BSTOOPS, DBCONFIG
+        /// </summary>
+        /// <param name="installPath"></param>
+        /// <param name="databaseName"></param>
+        private void AddDBConfig(string databaseName)
+        {
+            _connectionString = GetConnectionString(databaseName);
+            SqlConnection sqlConnection = new SqlConnection(_connectionString);
+            try
+            {
+                sqlConnection.Open();
+
+                //creates the necessary tables: CLIENTTOBS, BSTOOPS, SERVICE, 
DBCONFIG
+                string createCommand = ReadTextFile(Path.Combine(_installPath, 
TRADEDB_CREATE_DBCONFIG));
+                SqlCommand sqlCommand = new SqlCommand(createCommand, 
sqlConnection);
+                sqlCommand.ExecuteNonQuery();
+                Console.Write(".");
+
+                //inserts the config info into these tables
+                createCommand = ReadTextFile(Path.Combine(_installPath, 
TRADEDB_INSERT_DBCONFIG));
+                sqlCommand = new SqlCommand(createCommand, sqlConnection);
+                sqlCommand.ExecuteNonQuery();
+                Console.Write(".");
+            }
+            finally
+            {
+                // Close the connection
+                if (sqlConnection.State == ConnectionState.Open)
+                    sqlConnection.Close();
+                sqlConnection.Dispose();
+            }
+        }
+
+        /// <summary>
+        /// Use a StreamReader to return the string value of a text document.
+        /// </summary>
+        /// <param name="filename">The text file to load</param>
+        /// <returns>A string of the contents in the text file</returns>
+        private static string ReadTextFile(string filename)
+        {
+            string fileContents = string.Empty;
+            using (StreamReader file = new StreamReader(filename))
+            {
+                fileContents = file.ReadToEnd();
+                file.Close();
+            }
+            return fileContents;
         }
     }
 }

Modified: 
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupActions.csproj
URL: 
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupActions.csproj?rev=799159&r1=799158&r2=799159&view=diff
==============================================================================
--- 
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupActions.csproj
 (original)
+++ 
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/SetupActions.csproj
 Thu Jul 30 03:26:43 2009
@@ -31,12 +31,6 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Microsoft.SqlServer.ConnectionInfo, Version=10.0.0.0, 
Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" />
-    <Reference Include="Microsoft.SqlServer.Management.Sdk.Sfc, 
Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, 
processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\Util\Microsoft.SqlServer.Management.Sdk.Sfc.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.SqlServer.Smo, Version=10.0.0.0, 
Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" />
     <Reference Include="System" />
     <Reference Include="System.configuration" />
     <Reference Include="System.Core">
@@ -56,6 +50,7 @@
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="SetupAction.cs" />
+    <Compile Include="XmlLoadData.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="App.config" />

Added: 
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/XmlLoadData.cs
URL: 
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/XmlLoadData.cs?rev=799159&view=auto
==============================================================================
--- 
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/XmlLoadData.cs
 (added)
+++ 
incubator/stonehenge/trunk/stocktrader/dotnet/setup_utilities/SetupActions/XmlLoadData.cs
 Thu Jul 30 03:26:43 2009
@@ -0,0 +1,26 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+namespace SetupActions
+{
+    internal class XmlLoadData
+    {
+        public string Filename { get; set; }
+        public string StoredProcName { get; set; }
+        public string Table { get; set; }
+    }
+}


Reply via email to