Ejemplo n.º 1
0
        public static bool CheckConfigurationCount(Core.DomainModel.Business business)
        {
            if ((business != null) && (business.Configurations != null))
            {
                if (business.Configurations.Length > 3)
                {
                    return(false);
                }
            }

            return(true);
        }
        Core.DomainModel.Business[] IBusinessManager.ListBusiness(bool IsIncludingConfigurations)
        {
            List <Core.DomainModel.Business>      businesses     = new List <Core.DomainModel.Business>();
            List <Core.DomainModel.Configuration> configurations = null;

            using (DataModelContainer container = new DataModelContainer())
            {
                Core.DomainModel.Business business = null;

                foreach (var biz in container.Businesses)
                {
                    business = new Core.DomainModel.Business()
                    {
                        ID   = biz.Id,
                        Name = biz.Name,
                        //ReferenceID = cust.ReferenceId
                    };

                    if (!String.IsNullOrEmpty(biz.ReferenceId))
                    {
                        business.ReferenceID = biz.ReferenceId.Split(new string[] { "," }, StringSplitOptions.None);
                    }

                    if (IsIncludingConfigurations)
                    {
                        var confs = container.Configurations.Where((o) => (o.BusinessId.ToLower() == biz.Id.ToLower())).ToArray();

                        if ((confs != null) && (confs.Length > 0))
                        {
                            configurations = new List <Core.DomainModel.Configuration>();

                            foreach (var conf in confs)
                            {
                                configurations.Add(new Core.DomainModel.Configuration()
                                {
                                    ID = conf.Id,
                                    ConfigurationType  = ((ConfigurationType)(conf.TypeId)),
                                    DbConnectionString = conf.DbConnectionString
                                });
                            }

                            business.Configurations = configurations.ToArray();
                        }
                    }

                    businesses.Add(business);
                }
            }

            return(businesses.ToArray());
        }
Ejemplo n.º 3
0
        public static bool ValidateConfigurationDBConnectionString(Core.DomainModel.Business business)
        {
            if ((business != null) && (business.Configurations != null))
            {
                List <Core.DomainModel.Configuration> configurations = new List <Core.DomainModel.Configuration>(business.Configurations);

                string dbConnectionString = "";

                string[] fields    = null;
                string[] subFields = null;

                string[] separator = new string[] { ";" };

                string[] subSeparator = new string[] { "=" };

                for (int i = 0; i < configurations.Count; i++)
                {
                    dbConnectionString = configurations[i].DbConnectionString.ToLower();

                    fields = dbConnectionString.Split(separator, StringSplitOptions.None);

                    if ((fields == null) || (fields.Length < 4))
                    {
                        return(false);
                    }

                    subFields = fields[0].Split(subSeparator, StringSplitOptions.None);

                    if ((subFields == null) || (subFields.Length < 2))
                    {
                        return(false);
                    }

                    if (subFields[1].StartsWith(".") || subFields[1].StartsWith("localhost") || subFields[1].StartsWith("(local)") || (subFields[1].StartsWith("127.")) || (subFields[1].StartsWith("(.)")))
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
Ejemplo n.º 4
0
        public static bool CheckConfigurationType(Core.DomainModel.Business business)
        {
            if ((business != null) && (business.Configurations != null))
            {
                List <Core.DomainModel.Configuration> configurations = new List <Core.DomainModel.Configuration>(business.Configurations);

                configurations.Sort(new ConfigurationTypeComparer());

                for (int i = 0; i < configurations.Count; i++)
                {
                    if (i != (configurations.Count - 1))
                    {
                        if (configurations[i].ConfigurationType == configurations[i + 1].ConfigurationType)
                        {
                            return(false);
                        }
                    }
                }
            }

            return(true);
        }
        Core.DomainModel.Business IBusinessManager.GetBusiness(string BusinessID)
        {
            Core.DomainModel.Business business = new Core.DomainModel.Business();

            using (DataModelContainer container = new DataModelContainer())
            {
                var biz = container.Businesses.First((o) => (o.Id.ToLower() == BusinessID.ToLower()));

                business.ID   = biz.Id;
                business.Name = biz.Name;
                //customer.ReferenceID = cust.ReferenceId;

                if (!String.IsNullOrEmpty(biz.ReferenceId))
                {
                    business.ReferenceID = biz.ReferenceId.Split(new string[] { "," }, StringSplitOptions.None);
                }

                var confs = container.Configurations.Where((o) => (o.BusinessId.ToLower() == BusinessID.ToLower()));

                List <Core.DomainModel.Configuration> configurations = new List <Core.DomainModel.Configuration>();

                foreach (var conf in confs)
                {
                    configurations.Add(new Core.DomainModel.Configuration()
                    {
                        ID = conf.Id,
                        ConfigurationType  = (ConfigurationType)(conf.TypeId),
                        DbConnectionString = conf.DbConnectionString
                    });
                }

                business.Configurations = configurations.ToArray();
            }

            return(business);
        }
Ejemplo n.º 6
0
        public static bool CheckConfigurationDBConnectionString(Core.DomainModel.Business business, out Dictionary <string, string> suspectConfigurations)
        {
            suspectConfigurations = null;

            if ((business != null) && (business.Configurations != null))
            {
                List <Core.DomainModel.Configuration> configurations = new List <Core.DomainModel.Configuration>(business.Configurations);

                configurations.Sort(new ConfigurationDBConnectionStringComparer());

                string databaseName = "", serverName = "", userName = "", password = "", existingDBName = "", existingServerName = "";

                for (int i = 0; i < configurations.Count; i++)
                {
                    if (i != (configurations.Count - 1))
                    {
                        if (configurations[i].DbConnectionString.ToLower() == configurations[i + 1].DbConnectionString.ToLower())
                        {
                            ParseConnectionString(configurations[i].DbConnectionString.ToLower(), out serverName, out databaseName, out userName, out password);

                            if (suspectConfigurations == null)
                            {
                                suspectConfigurations = new Dictionary <string, string>();
                            }

                            if (!suspectConfigurations.ContainsKey(business.Name))
                            {
                                suspectConfigurations.Add(business.Name, serverName);
                            }

                            return(false);
                        }
                        else
                        {
                            ParseConnectionString(configurations[i].DbConnectionString.ToLower(), out serverName, out databaseName, out userName, out password);
                            ParseConnectionString(configurations[i + 1].DbConnectionString.ToLower(), out existingServerName, out existingDBName, out userName, out password);

                            if (suspectConfigurations == null)
                            {
                                suspectConfigurations = new Dictionary <string, string>();
                            }

                            if ((serverName == existingServerName) && (databaseName == existingDBName))
                            {
                                if (!suspectConfigurations.ContainsKey(business.Name))
                                {
                                    suspectConfigurations.Add(business.Name, serverName);
                                }

                                return(false);
                            }
                            else if (databaseName == existingDBName)
                            {
                                if (!suspectConfigurations.ContainsKey(business.Name))
                                {
                                    suspectConfigurations.Add(business.Name, existingServerName);
                                }
                            }
                        }
                    }
                }
            }

            return(true);
        }
        public Core.DomainModel.Business[] SearchBusiness(Func <IList <SearchingArgument>, object> QueryExpressionFunction, IList <SearchingArgument> SearchingArguments, PagingArgument PagingArgument, bool IsIncludingConfigurations)
        {
            List <Core.DomainModel.Business>      businesses     = new List <Core.DomainModel.Business>();
            List <Core.DomainModel.Configuration> configurations = null;

            using (DataModelContainer container = new DataModelContainer())
            {
                Core.DomainModel.Business business = null;

                //var bizArray = new Business[] { };//container.Businesses.ToArray();

                //if (PagingArgument != null)
                //{
                //    PagingArgument.Reset(bizArray.Length);

                //    var bizQueryResult = container.Businesses.OrderByDescending(b => b.CreationTime).Skip(PagingArgument.CurrentPageIndex * PagingArgument.EachPageSize).Take(PagingArgument.EachPageSize);

                //    if (QueryExpressionFunction != null && SearchingArguments != null)
                //    {
                //        var filterExpression = QueryExpressionFunction(SearchingArguments);

                //        if (filterExpression != null && filterExpression is Expression<Func<Business, bool>>)
                //        {
                //            bizQueryResult = bizQueryResult.Where((filterExpression as Expression<Func<Business, bool>>));
                //        }
                //    }

                //    bizArray = bizQueryResult.ToArray();
                //}

                var bizQueryResult = container.Businesses.OrderByDescending(b => b.CreationTime).AsQueryable();

                if (QueryExpressionFunction != null && SearchingArguments != null)
                {
                    var filterExpression = QueryExpressionFunction(SearchingArguments);

                    if (filterExpression != null && filterExpression is Expression <Func <Business, bool> > )
                    {
                        bizQueryResult = bizQueryResult.Where((filterExpression as Expression <Func <Business, bool> >));
                    }
                }

                if (PagingArgument != null)
                {
                    //PagingArgument.Reset(bizQueryResult.Count(b => true));

                    //bizQueryResult = bizQueryResult.Skip(PagingArgument.CurrentPageIndex * PagingArgument.EachPageSize).Take(PagingArgument.EachPageSize);

                    var futureCount  = bizQueryResult.FutureCount();
                    var futureResult = bizQueryResult.Skip(PagingArgument.CurrentPageIndex * PagingArgument.EachPageSize).Take(PagingArgument.EachPageSize).Future();

                    PagingArgument.Reset(futureCount.Value);
                    bizQueryResult = futureResult.AsQueryable();
                }

                var bizArray = bizQueryResult.ToArray();

                foreach (var biz in bizArray)//foreach (var biz in container.Businesses)
                {
                    business = new Core.DomainModel.Business()
                    {
                        ID   = biz.Id,
                        Name = biz.Name,
                        //ReferenceID = cust.ReferenceId
                    };

                    if (!String.IsNullOrEmpty(biz.ReferenceId))
                    {
                        business.ReferenceID = biz.ReferenceId.Split(new string[] { "," }, StringSplitOptions.None);
                    }

                    if (IsIncludingConfigurations)
                    {
                        var confs = container.Configurations.Where((o) => (o.BusinessId.ToLower() == biz.Id.ToLower())).ToArray();

                        if ((confs != null) && (confs.Length > 0))
                        {
                            configurations = new List <Core.DomainModel.Configuration>();

                            foreach (var conf in confs)
                            {
                                configurations.Add(new Core.DomainModel.Configuration()
                                {
                                    ID = conf.Id,
                                    ConfigurationType  = ((ConfigurationType)(conf.TypeId)),
                                    DbConnectionString = conf.DbConnectionString
                                });
                            }

                            business.Configurations = configurations.ToArray();
                        }
                    }

                    businesses.Add(business);
                }
            }

            return(businesses.ToArray());
        }
        public string AddBusinessConfiguration(Core.DomainModel.Business Business)
        {
            if (!BusinessRule.CheckConfigurationCount(Business))
            {
                throw new ConfigurationCountLimitExceededException("1 configuration set should not have more than 3 configurations!");
            }

            if (!BusinessRule.CheckConfigurationType(Business))
            {
                throw new DuplicatedConfigurationTypeException("1 configuration set should not have 2 or more configurations that are of the same type!");
            }

            Dictionary <string, string> suspectConfs = null;

            if (!BusinessRule.CheckConfigurationDBConnectionString(Business, out suspectConfs))
            {
                throw new DuplicatedDatabaseException("1 configuration set should not have 2 or more configurations that are using the same database!");
            }
            else if ((suspectConfs != null) && (suspectConfs.Count > 0))
            {
                string message = "Suspect databases found in the bindings of the following configurations, please double check to make sure that they are not the same database:";

                string suspectConfListTemplate = "Business Name: \"{0}\", Server Name: \"{1}\"; ";

                message += System.Environment.NewLine;

                foreach (string bizName in suspectConfs.Keys)
                {
                    message += string.Format(suspectConfListTemplate, bizName, suspectConfs[bizName]);
                    message += System.Environment.NewLine;
                }

                throw new DuplicatedDatabaseException(message);
            }

            if (!BusinessRule.ValidateConfigurationDBConnectionString(Business))
            {
                throw new InvalidConnectionStringException("Connection string is invalid! Make sure each field of the connection string has its value assigned, and also make sure loopback address is not used.");
            }

            DateTime creationTime = DateTime.Now;

            using (DataModelContainer container = new DataModelContainer())
            {
                Business biz = new Business()
                {
                    Id               = Business.ID,
                    Name             = Business.Name,
                    CreationTime     = creationTime,
                    ModificationTime = creationTime
                };

                //if (String.IsNullOrEmpty(Customer.ReferenceID))
                //{
                //    cust.ReferenceId = Customer.ReferenceID;
                //}

                if (Business.ReferenceID != null)
                {
                    biz.ReferenceId = "";

                    for (int i = 0; i < Business.ReferenceID.Length; i++)
                    {
                        biz.ReferenceId += Business.ReferenceID[i];

                        if (i != (Business.ReferenceID.Length - 1))
                        {
                            biz.ReferenceId += ",";
                        }
                    }
                }

                container.Businesses.Add(biz);

                foreach (var conf in Business.Configurations)
                {
                    if (conf != null)
                    {
                        Configuration configuration = new Configuration()
                        {
                            Business           = biz,
                            Id                 = conf.ID,
                            BusinessId         = biz.Id,
                            DbConnectionString = conf.DbConnectionString,
                            TypeId             = (int)(conf.ConfigurationType),
                            CreationTime       = creationTime,
                            ModificationTime   = creationTime
                        };

                        container.Configurations.Add(configuration);
                    }
                }

                container.SaveChanges();
            }

            return(Business.ID);
        }
        public int UpdateBusinessConfiguration(Core.DomainModel.Business Business)
        {
            if (!BusinessRule.CheckConfigurationCount(Business))
            {
                throw new ConfigurationCountLimitExceededException("1 configuration set should not have more than 3 configurations!");
            }

            if (!BusinessRule.CheckConfigurationType(Business))
            {
                throw new DuplicatedConfigurationTypeException("1 configuration set should not have 2 or more configurations that are of the same type!");
            }

            Dictionary <string, string> suspectConfs = null;

            if (!BusinessRule.CheckConfigurationDBConnectionString(Business, out suspectConfs))
            {
                throw new DuplicatedDatabaseException("1 configuration set should not have 2 or more configurations that are using the same database!");
            }
            else if ((suspectConfs != null) && (suspectConfs.Count > 0))
            {
                string message = "Suspect databases found in the bindings of the following configurations, please double check to make sure that they are not the same database:";

                string suspectConfListTemplate = "Business Name: \"{0}\", Server Name: \"{1}\"; ";

                message += System.Environment.NewLine;

                foreach (string bizName in suspectConfs.Keys)
                {
                    message += string.Format(suspectConfListTemplate, bizName, suspectConfs[bizName]);
                    message += System.Environment.NewLine;
                }

                throw new DuplicatedDatabaseException(message);
            }

            if (!BusinessRule.ValidateConfigurationDBConnectionString(Business))
            {
                throw new InvalidConnectionStringException("Connection string is invalid! Make sure each field of the connection string has its value assigned, and also make sure loopback address is not used.");
            }

            int returnValue = -9;

            DateTime modificationTime = DateTime.Now;

            using (DataModelContainer container = new DataModelContainer())
            {
                Business biz = container.Businesses.First((o) => (o.Id.ToLower() == Business.ID.ToLower()));

                biz.Name             = Business.Name;
                biz.ModificationTime = modificationTime;

                //cust.ReferenceId = Customer.ReferenceID;

                if (Business.ReferenceID != null)
                {
                    biz.ReferenceId = "";

                    for (int i = 0; i < Business.ReferenceID.Length; i++)
                    {
                        biz.ReferenceId += Business.ReferenceID[i];

                        if (i != (Business.ReferenceID.Length - 1))
                        {
                            biz.ReferenceId += ",";
                        }
                    }
                }

                var confs = container.Configurations.Where((o) => (o.BusinessId == Business.ID)).ToArray();

                List <Core.DomainModel.Configuration> bizConfList = new List <Core.DomainModel.Configuration>(Business.Configurations);

                for (int i = 0; i < confs.Length; i++)
                {
                    for (int j = 0; j < bizConfList.Count; j++)
                    {
                        if ((confs[i] != null) && (bizConfList[j] != null))
                        {
                            if (confs[i].Id.ToLower() == bizConfList[j].ID.ToLower())
                            {
                                confs[i].DbConnectionString = bizConfList[j].DbConnectionString;
                                confs[i].TypeId             = ((int)(bizConfList[j].ConfigurationType));
                                confs[i].ModificationTime   = modificationTime;

                                bizConfList.RemoveAt(j);
                                j--;
                            }
                        }
                    }
                }

                if (bizConfList.Count > 0)
                {
                    foreach (var conf in bizConfList)
                    {
                        if (conf != null)
                        {
                            Configuration configuration = new Configuration()
                            {
                                Business           = biz,
                                Id                 = conf.ID,
                                BusinessId         = biz.Id,
                                DbConnectionString = conf.DbConnectionString,
                                TypeId             = (int)(conf.ConfigurationType),
                                CreationTime       = modificationTime,
                                ModificationTime   = modificationTime
                            };

                            container.Configurations.Add(configuration);
                        }
                    }
                }

                returnValue = container.SaveChanges();
            }

            return(returnValue);
        }