Beispiel #1
0
        /// <summary>
        /// Initializes a new instance of the Database class.
        /// </summary>
        /// <param name="databaseFilename">Specifies a path to use for creating or opening a database file to use with the engine.</param>
        /// <param name="customConfig">A custom config set to use with the engine.</param>
        public Database(string databaseFilename, IConfigSet customConfig)
        {
            if (string.IsNullOrEmpty(databaseFilename) && customConfig == null)
            {
                throw new ArgumentException("Must specify a valid databaseFilename or customConfig");
            }

            this.config = new DatabaseConfig();
            if (!string.IsNullOrEmpty(databaseFilename))
            {
                this.config.DatabaseFilename = databaseFilename;
                string systemPath = Path.GetDirectoryName(databaseFilename);
                this.config.SystemPath  = systemPath;
                this.config.LogFilePath = systemPath;
                this.config.TempPath    = systemPath;
                this.config.AlternateDatabaseRecoveryPath = systemPath;
            }

            if (customConfig != null)
            {
                this.config.Merge(customConfig);    // throw on conflicts
            }

            if (string.IsNullOrEmpty(this.config.Identifier))
            {
                this.config.Identifier = Guid.NewGuid().ToString();
            }

            if (string.IsNullOrEmpty(this.config.DisplayName))
            {
                this.config.DisplayName = string.Format("Database Inst{0:D2}", Interlocked.Increment(ref Database.instanceCounter) - 1);
            }

            this.Start();
        }
Beispiel #2
0
        public static IEnvironment CreateEnvironment(this IConfigSet configSet, ConfigurationContext context, string name, bool isImport = false)
        {
            var environment = context.Environments.Create();

            environment.ConfigSet       = configSet;
            environment.ConfigSetNameId = configSet.Id;
            environment.Name            = name;
            foreach (var serviceParameter in ServiceParameters)
            {
                environment.CreateSubstitutionParameters(context, serviceParameter, isImport);
            }
            context.SaveChanges();
            foreach (var service in configSet.Services)
            {
                var addressOverride = string.Format("{0}_Address", service.Name);
                var overrideProp    = environment.SubstitutionParameters.SingleOrDefault(x => string.Equals(x.Name, addressOverride, StringComparison.OrdinalIgnoreCase));
                if (overrideProp.IsNull())
                {
                    var subParam = environment.CreateSubstitutionParameters(context, addressOverride);
                    if (isImport)
                    {
                        subParam.ItemValue = "{0}";
                    }
                }
            }
            configSet.Environments.Add(environment);
            context.SaveChanges();
            AddToChildren(configSet, context, environment);
            return(environment);
        }
 public static IEnvironment CreateChild(this IEnvironment environment, ConfigurationContext context, ref IConfigSet configSet)
 {
     var newEnvironment = context.Environments.Create();
     newEnvironment.ConfigSetNameId = configSet.Id;
     newEnvironment.ConfigSet = configSet;
     newEnvironment.ParentEnvironment = environment;
     newEnvironment.Name = environment.Name;
     configSet.Environments.Add(newEnvironment);
     context.SaveChanges();
     foreach (var substitutionParameter in environment.SubstitutionParameters)
     {
         var child = CreateChild(substitutionParameter, context, ref newEnvironment);
         if (newEnvironment.SubstitutionParameters.All(sp => !string.Equals(sp.Name, substitutionParameter.Name, StringComparison.OrdinalIgnoreCase)))
             newEnvironment.SubstitutionParameters.Add(child);
     }
     foreach (var service in configSet.Services)
     {
         var addressOverride = string.Format("{0}_Address", service.Name);
         var overrideProp = newEnvironment.SubstitutionParameters.SingleOrDefault(x => string.Equals(x.Name, addressOverride, StringComparison.OrdinalIgnoreCase));
         if (overrideProp.IsNull())
             newEnvironment.CreateSubstitutionParameters(context, addressOverride);
     }
     foreach (var environmentParameter in environment.EnvironmentParameters)
     {
         newEnvironment.EnvironmentParameters.Add(CreateChild(environmentParameter, context, ref newEnvironment));
     }
     return newEnvironment;
 }
Beispiel #4
0
 public static List <BreadCrumbItem> GetTrail(this IConfigSet self)
 {
     return(new List <BreadCrumbItem>
     {
         ConfigSet(self),
     });
 }
        public ActionResult Create(string id1, string id2)
        {
            IConfigSet parent = null;

            if (id1.ContainsCharacters())
            {
                parent = reader.GetConfigSet(id1, id2);
            }
            if (parent == null)
            {
                if (ConfigReaderFactory.CurrentUser.AdministratorType != AdministratorTypes.SystemAdmin)
                {
                    throw new UnauthorizedAccessException("Access denied to configset");
                }
                ViewBag.IsNew      = true;
                ViewBag.CreateType = "new";
            }
            else
            {
                if (!parent.UserHasAccessTo())
                {
                    throw new UnauthorizedAccessException("Access denied to configset");
                }
                ViewBag.IsNew      = false;
                ViewBag.CreateType = string.Format("child for {0}.{1}", id1, id2);
            }
            return(View(parent));
        }
 public IEnvironment CreatEnvironment(IConfigSet cs, string environmentName)
 {
     var env = cs.CreateEnvironment(Repository, environmentName);
     cs.LastUpdate = DateTime.UtcNow;
     Repository.SaveChanges();
     return env;
 }
Beispiel #7
0
        /// <summary>
        /// Merges two config sets into one and throws an exception if there are any conflicts.
        /// </summary>
        /// <param name="source">The source config set to user.</param>
        protected void MergeThrowOnConflicts(IConfigSet source)
        {
            var mergeable = new Dictionary <int, object>();

            foreach (var kvp in source)
            {
                object currValue;
                if (this.TryGetValue(kvp.Key, out currValue))
                {
                    if (!currValue.Equals(kvp.Value))
                    {
                        throw new ConfigSetMergeException(source, this, string.Format("Conflict on param {0}. Dest = {1}, Source = {2}", kvp.Key, currValue, kvp.Value));
                    }
                }
                else
                {
                    mergeable.Add(kvp.Key, kvp.Value);
                }
            }

            foreach (var kvp in mergeable)
            {
                this.SetParam(kvp.Key, kvp.Value);
            }
        }
        public IEnvironment CreatEnvironment(IConfigSet cs, string environmentName)
        {
            var env = cs.CreateEnvironment(Repository, environmentName);

            cs.LastUpdate = DateTime.UtcNow;
            Repository.SaveChanges();
            return(env);
        }
Beispiel #9
0
        public IServiceHostSettings CreateServiceHost(IConfigSet configSet, string name)
        {
            var serviceHost = configSet.CreateServiceHost(Repository, name);

            configSet.LastUpdate = DateTime.UtcNow;
            Repository.SaveChanges();
            return(serviceHost);
        }
Beispiel #10
0
 private static BreadCrumbItem ConfigSet(IConfigSet self)
 {
     return(new BreadCrumbItem
     {
         Url = string.Format("/ConfigSet/Details?name={0}&system={1}", self.Name, self.System),
         Name = self.Id
     });
 }
Beispiel #11
0
        public IServiceDescription CreateService(IConfigSet cs, string servicename)
        {
            var service = cs.CreateService(Repository, servicename);

            service.ConfigSet.LastUpdate = DateTime.UtcNow;
            Repository.SaveChanges();
            return(service);
        }
Beispiel #12
0
 /// <summary>
 /// Merges two config sets into one and throws an exception if there are any conflicts.
 /// </summary>
 /// <param name="source">The source config set to user.</param>
 public void Merge(IConfigSet source)
 {
     // Merges between different types don't yield anything
     if (this.GetType() == source.GetType())
     {
         this.MergeThrowOnConflicts(source);
     }
 }
Beispiel #13
0
 private static BreadCrumbItem ConfigSet(IConfigSet self)
 {
     return new BreadCrumbItem
                {
                    Url = string.Format("/ConfigSet/Details?name={0}&system={1}", self.Name, self.System),
                    Name = self.Id
                };
 }
Beispiel #14
0
        public bool CreateConfigSet(string name, string systemName, IConfigSet parent)
        {
            var configSets = from cs in Repository.ConfigSets where cs.Name == name && cs.System == systemName select cs;
            if (configSets.Count() != 0)
                throw new AmbiguousMatchException(string.Format("Config set '{0}\\{1}' already exists", name, systemName));
            if (parent.IsNull())
            {
                configSets = from cs in Repository.ConfigSets where cs.System == systemName select cs;
                if (configSets.Count() != 0)
                    throw new AmbiguousMatchException(string.Format(
                        "Config set '{0}\\{1}'... system {1} already exists", name, systemName));
            }
            var configSet = Repository.ConfigSets.Create();
            if (parent.IsInstance())
            {
                foreach (var administrator in parent.Administrators)
                {
                    configSet.Administrators.Add(administrator);
                }
            }
            else
            {
                if (ConfigReaderFactory.CurrentUser != null)
                    configSet.Administrators.Add(ConfigReaderFactory.CurrentUser);
            }

            configSet.Name = name;
            configSet.Created = DateTime.UtcNow;
            configSet.System = systemName;
            configSet.LastUpdate = DateTime.UtcNow;
            Repository.SaveChanges();
            if (parent.IsInstance())
            {

                configSet.ParentConfigSet = parent;
                foreach (var serviceDescription in parent.Services)
                {
                    var c = serviceDescription.CreateChild(Repository, ref configSet);
                    configSet.Services.Add(c);
                    Repository.SaveChanges();
                }
                foreach (var serviceHostSettingse in parent.ServiceHosts)
                {
                    var hostChild = serviceHostSettingse.CreateChild(Repository, ref configSet);
                    configSet.ServiceHosts.Add(hostChild);
                    Repository.SaveChanges();
                }
                foreach (var environment in parent.Environments)
                {
                    var child = environment.CreateChild(Repository, ref configSet);
                    configSet.Environments.Add(child);
                    Repository.SaveChanges();
                }
                Repository.SaveChanges();
            }

            return true;
        }
 private static void AddToChildren(IConfigSet configSet, ConfigurationContext context, IServiceHostSettings service)
 {
     foreach (var childConfigSet in configSet.ChildConfigSets)
     {
         var c            = childConfigSet;
         var childService = service.CreateChild(context, ref c);
         AddToChildren(c, context, childService);
     }
 }
 private static void AddToChildren(IConfigSet configSet, ConfigurationContext context, IServiceDescription service)
 {
     foreach (var childConfigSet in configSet.ChildConfigSets)
     {
         var c     = childConfigSet;
         var child = service.CreateChild(context, ref c);
         c.Services.Add(child);
         AddToChildren(c, context, child);
     }
 }
 private static void AddToChildren(IConfigSet configSet, ConfigurationContext context, IEnvironment environment)
 {
     foreach (var childConfigSet in configSet.ChildConfigSets)
     {
         var c = childConfigSet;
         var child = environment.CreateChild(context, ref c);
         context.SaveChanges();
         AddToChildren(c, context, child);
     }
 }
Beispiel #18
0
 private static void AddToChildren(IConfigSet configSet, ConfigurationContext context, IEnvironment environment)
 {
     foreach (var childConfigSet in configSet.ChildConfigSets)
     {
         var c     = childConfigSet;
         var child = environment.CreateChild(context, ref c);
         context.SaveChanges();
         AddToChildren(c, context, child);
     }
 }
        public static bool UserHasAccessTo(this IConfigSet self)
        {
            if (ConfigReaderFactory.CurrentUser.AdministratorType == AdministratorTypes.SystemAdmin)
            {
                return(true);
            }
            var cnt = (from u in self.Administrators where u.NameId == ConfigReaderFactory.CurrentUser.NameId select u).Count();

            return(cnt > 0);
        }
Beispiel #20
0
        public static void GetUris(this IConfigSet configSet, ConfigurationContext context, ConfigurationSettings settings)
        {
            settings.ReplicationBusUri = string.Format(
                configSet.ServiceHosts.Single(s => s.Name == settings.DataCenterServiceHostName)
                .GetRawConfigData(settings.Environment)
                .GetConfigParameter(settings.ReplicationUriBusKeyName), settings.DataCenterName, "<KEY>");

            settings.ServiceBusUri = string.Format(
                configSet.ServiceHosts.Single(s => s.Name == settings.DataCenterServiceHostName)
                .GetRawConfigData(settings.Environment)
                .GetConfigParameter(settings.ServiceBusUriKeyName), settings.DataCenterName, "<KEY>");

            settings.DatabaseUri = string.Format(
                configSet.ServiceHosts.Single(s => s.Name == settings.DataCenterServiceHostName)
                .GetRawConfigData(settings.Environment)
                .GetConfigParameter(settings.DatabaseUriKeyName), settings.DataCenterName, "<KEY>");
        }
        public static IServiceHostSettings CreateServiceHost(this IConfigSet configSet, ConfigurationContext context, string serviceName)
        {
            var service = context.ServiceHostSettingss.Create();

            service.Name            = serviceName;
            service.ConfigSetNameId = configSet.Id;
            service.ConfigSet       = configSet;
            foreach (var environment in configSet.Environments)
            {
                var addressOverride = string.Format("{0}_Address", serviceName);
                var overrideProp    = environment.SubstitutionParameters.SingleOrDefault(x => string.Equals(x.Name, addressOverride, StringComparison.OrdinalIgnoreCase));
                if (overrideProp.IsNull())
                {
                    environment.CreateSubstitutionParameters(context, addressOverride);
                }
            }
            AddToChildren(configSet, context, service);
            return(service);
        }
Beispiel #22
0
        /// <summary>
        /// Initializes a new instance of the Database class.
        /// </summary>
        /// <param name="instance">An initialized instance to be used with Database. The instance should have a database attached and ready to use.</param>
        /// <param name="ownsInstance">True if the instance handle passed into the constructur should be owned by the Database.</param>
        /// <param name="customConfig">A custom config set to use with the engine. The config set should atleast contain the attached database filename.</param>
        /// <remarks>Database will only manage the handle lifetime if ownsInstance is set to true. If its set to false, the caller is responsible for managing the teardown of the instance.</remarks>
        public Database(JET_INSTANCE instance, bool ownsInstance, IConfigSet customConfig)
        {
            this.config = new DatabaseConfig();
            this.config.Merge(customConfig);
            this.instance     = instance;
            this.ownsInstance = ownsInstance;

            // Ensure that there is an attached database at a path specified by the config set
            using (var session = new Session(this.instance))
            {
                JET_DBID dbid;
                JET_wrn  wrn = Api.JetOpenDatabase(session, this.config.DatabaseFilename, null, out dbid, OpenDatabaseGrbit.ReadOnly);
                Contract.Ensures(wrn == JET_wrn.Success);
                Api.JetCloseDatabase(session, dbid, CloseDatabaseGrbit.None);
            }

            // The config set is live now
            this.config.GetParamDelegate = this.TryGetParam;
            this.config.SetParamDelegate = this.SetParam;
        }
Beispiel #23
0
        /// <summary>
        /// Merges two config sets into one.
        /// </summary>
        /// <param name="source">The source config set to user.</param>
        /// <param name="mergeRule">The merge rule to use.</param>
        public void Merge(IConfigSet source, MergeRules mergeRule)
        {
            // Merges between different types don't yield anything
            if (this.GetType() != source.GetType())
            {
                return;
            }

            if (mergeRule == MergeRules.ThrowOnConflicts)
            {
                this.MergeThrowOnConflicts(source);
                return;
            }

            foreach (var kvp in source)
            {
                object currValue;
                if (this.TryGetValue(kvp.Key, out currValue))
                {
                    if (!currValue.Equals(kvp.Value))
                    {
                        switch (mergeRule)
                        {
                        case MergeRules.Overwrite:
                            this.SetParam(kvp.Key, kvp.Value);
                            break;

                        case MergeRules.KeepExisting:
                            break;

                        default:
                            throw new ArgumentException("Unsupported merge rule!", "mergeRule");
                        }
                    }
                }
                else
                {
                    this.SetParam(kvp.Key, kvp.Value);
                }
            }
        }
        public ActionResult Create(string id1, string id2, ConfigSet model)
        {
            IConfigSet parent = null;

            if (id1.ContainsCharacters())
            {
                parent = reader.GetConfigSet(id1, id2);
                if (!parent.UserHasAccessTo())
                {
                    throw new UnauthorizedAccessException("Access denied to configset");
                }
            }
            else
            {
                if (ConfigReaderFactory.CurrentUser.AdministratorType != AdministratorTypes.SystemAdmin)
                {
                    throw new UnauthorizedAccessException("Access denied to configset");
                }
            }
            reader.CreateConfigSet(model.Name, string.IsNullOrEmpty(model.System) ? id2 : model.System, parent);
            var csId = reader.GetConfigSet(model.Name, string.IsNullOrEmpty(model.System) ? id2 : model.System);

            return(RedirectToAction("Details", "ConfigSet", new { name = csId.Name, system = csId.System }));
        }
        public static IServiceDescription CreateChild(this IServiceDescription service, ConfigurationContext context, ref IConfigSet configSet)
        {
            var child = context.ServiceDescriptions.Create();
            child.Name = service.Name;
            child.ConfigSetNameId = configSet.Id;
            child.ConfigSet = configSet;
            child.PatentServiceDescription = service;
            service.ChildServiceDescriptions.Add(child);
            context.SaveChanges();
            foreach (var endpoint in service.Endpoints)
            {
                var newEndpoint = endpoint.CreateChild(context, ref child);
                child.Endpoints.Add(newEndpoint);

            }
            foreach (var environment in configSet.Environments)
            {
                var addressOverride = string.Format("{0}_Address", service.Name);
                var overrideProp = environment.SubstitutionParameters.SingleOrDefault(x => String.Equals(x.Name, addressOverride, StringComparison.OrdinalIgnoreCase));
                if (overrideProp.IsNull())
                    environment.CreateSubstitutionParameters(context, addressOverride);
            }
            return child;
        }
Beispiel #26
0
 public void UpdateConfigSet(IConfigSet configSet)
 {
     Repository.SaveChanges();
 }
Beispiel #27
0
 /// <summary>
 /// Initializes a new instance of the Database class.
 /// </summary>
 /// <param name="customConfig">A custom config set to use with the engine.</param>
 public Database(IConfigSet customConfig) : this(null, customConfig)
 {
 }
Beispiel #28
0
 public void DeleteConfigSet(IConfigSet cs)
 {
     Repository.DeleteObject(cs);
     Repository.SaveChanges();
 }
Beispiel #29
0
 public string GenerateReaderKey(IConfigSet configSet)
 {
     configSet.ReaderKey = UniqueIdGenerator.CreateNewId(20).Encrypt(KeySalt);
     return(configSet.ReaderKey);
 }
        public static IServiceHostSettings CreateChild(this IServiceHostSettings service, ConfigurationContext context, ref IConfigSet configSet)
        {
            var child = context.ServiceHostSettingss.Create();

            child.Name            = service.Name;
            child.ConfigSetNameId = configSet.Id;
            child.ConfigSet       = configSet;
            child.Parent          = service;
            foreach (var parameter in service.Parameters)
            {
                parameter.CreateChild(context, child);
            }
            return(child);
        }
Beispiel #31
0
        /// <summary>
        /// Initializes a new instance of the Database class.
        /// </summary>
        /// <param name="instance">An initialized instance to be used with Database. The instance should have a database attached and ready to use.</param>
        /// <param name="ownsInstance">True if the instance handle passed into the constructur should be owned by the Database.</param>
        /// <param name="customConfig">A custom config set to use with the engine. The config set should atleast contain the attached database filename.</param>
        /// <remarks>Database will only manage the handle lifetime if ownsInstance is set to true. If its set to false, the caller is responsible for managing the teardown of the instance.</remarks>
        public Database(JET_INSTANCE instance, bool ownsInstance, IConfigSet customConfig)
        {
            this.config = new DatabaseConfig();
            this.config.Merge(customConfig);
            this.instance = instance;
            this.ownsInstance = ownsInstance;

            // Ensure that there is an attached database at a path specified by the config set
            using (var session = new Session(this.instance))
            {
                JET_DBID dbid;
                JET_wrn wrn = Api.JetOpenDatabase(session, this.config.DatabaseFilename, null, out dbid, OpenDatabaseGrbit.ReadOnly);
                Contract.Ensures(wrn == JET_wrn.Success);
                Api.JetCloseDatabase(session, dbid, CloseDatabaseGrbit.None);
            }

            // The config set is live now
            this.config.GetParamDelegate = this.TryGetParam;
            this.config.SetParamDelegate = this.SetParam;
        }
 private static void EnsureUriFormat(string format, string propertyName, ConfigurationSettings settings, IConfigSet configSet, ConfigurationContext context)
 {
     var hostSettings = configSet.ServiceHosts.Single(s => String.Equals(s.Name, settings.DataCenterServiceHostName, StringComparison.OrdinalIgnoreCase));
     var param = hostSettings.Parameters.SingleOrDefault(p => string.Equals(p.Name, propertyName, StringComparison.OrdinalIgnoreCase));
     if (param.IsNull())
     {
         param=hostSettings.CreateParameter(context, propertyName, false, true);
         param.ItemValue = "{0}";
         if (param.IsEnvironmental)
         {
             foreach (var environment in hostSettings.ConfigSet.Environments)
             {
                 environment.CreateSubstitutionParameters(context, hostSettings.Name + "_" + param.Name);
             }
         }
     }
     var env = configSet.Environments.Single(e => e.Name == settings.Environment);
     
     var subPar = env.SubstitutionParameters.SingleOrDefault(sp => sp.Name == hostSettings.Name + "_" + propertyName);
     if (subPar.IsNull())
     {
         subPar = env.CreateSubstitutionParameters(context, hostSettings.Name + "_" + propertyName);
     }
     subPar.ItemValue = format;
     context.SaveChanges();
 }
 private static void AddToChildren(IConfigSet configSet, ConfigurationContext context, IServiceHostSettings service)
 {
     foreach (var childConfigSet in configSet.ChildConfigSets)
     {
         var c = childConfigSet;
         var childService = service.CreateChild(context, ref c);
         AddToChildren(c, context, childService);
     }
 }
Beispiel #34
0
        private static void EnsureUriFormat(string format, string propertyName, ConfigurationSettings settings, IConfigSet configSet, ConfigurationContext context)
        {
            var hostSettings = configSet.ServiceHosts.Single(s => String.Equals(s.Name, settings.DataCenterServiceHostName, StringComparison.OrdinalIgnoreCase));
            var param        = hostSettings.Parameters.SingleOrDefault(p => string.Equals(p.Name, propertyName, StringComparison.OrdinalIgnoreCase));

            if (param.IsNull())
            {
                param           = hostSettings.CreateParameter(context, propertyName, false, true);
                param.ItemValue = "{0}";
                if (param.IsEnvironmental)
                {
                    foreach (var environment in hostSettings.ConfigSet.Environments)
                    {
                        environment.CreateSubstitutionParameters(context, hostSettings.Name + "_" + param.Name);
                    }
                }
            }
            var env = configSet.Environments.Single(e => e.Name == settings.Environment);

            var subPar = env.SubstitutionParameters.SingleOrDefault(sp => sp.Name == hostSettings.Name + "_" + propertyName);

            if (subPar.IsNull())
            {
                subPar = env.CreateSubstitutionParameters(context, hostSettings.Name + "_" + propertyName);
            }
            subPar.ItemValue = format;
            context.SaveChanges();
        }
Beispiel #35
0
 public IServiceDescription CreateService(IConfigSet cs, string servicename)
 {
     var service = cs.CreateService(Repository, servicename);
     service.ConfigSet.LastUpdate = DateTime.UtcNow;
     Repository.SaveChanges();
     return service;
 }
Beispiel #36
0
 public void DeleteConfigSet(IConfigSet cs)
 {
     Repository.DeleteObject(cs);
     Repository.SaveChanges();
 }
        public static IServiceDescription CreateChild(this IServiceDescription service, ConfigurationContext context, ref IConfigSet configSet)
        {
            var child = context.ServiceDescriptions.Create();

            child.Name                     = service.Name;
            child.ConfigSetNameId          = configSet.Id;
            child.ConfigSet                = configSet;
            child.PatentServiceDescription = service;
            service.ChildServiceDescriptions.Add(child);
            context.SaveChanges();
            foreach (var endpoint in service.Endpoints)
            {
                var newEndpoint = endpoint.CreateChild(context, ref child);
                child.Endpoints.Add(newEndpoint);
            }
            foreach (var environment in configSet.Environments)
            {
                var addressOverride = string.Format("{0}_Address", service.Name);
                var overrideProp    = environment.SubstitutionParameters.SingleOrDefault(x => String.Equals(x.Name, addressOverride, StringComparison.OrdinalIgnoreCase));
                if (overrideProp.IsNull())
                {
                    environment.CreateSubstitutionParameters(context, addressOverride);
                }
            }
            return(child);
        }
Beispiel #38
0
 public void UpdateConfigSet(IConfigSet configSet)
 {
     Repository.SaveChanges();
 }
Beispiel #39
0
        public bool CreateConfigSet(string name, string systemName, IConfigSet parent)
        {
            var configSets = from cs in Repository.ConfigSets where cs.Name == name && cs.System == systemName select cs;

            if (configSets.Count() != 0)
            {
                throw new AmbiguousMatchException(string.Format("Config set '{0}\\{1}' already exists", name, systemName));
            }
            if (parent.IsNull())
            {
                configSets = from cs in Repository.ConfigSets where cs.System == systemName select cs;
                if (configSets.Count() != 0)
                {
                    throw new AmbiguousMatchException(string.Format(
                                                          "Config set '{0}\\{1}'... system {1} already exists", name, systemName));
                }
            }
            var configSet = Repository.ConfigSets.Create();

            if (parent.IsInstance())
            {
                foreach (var administrator in parent.Administrators)
                {
                    configSet.Administrators.Add(administrator);
                }
            }
            else
            {
                if (ConfigReaderFactory.CurrentUser != null)
                {
                    configSet.Administrators.Add(ConfigReaderFactory.CurrentUser);
                }
            }

            configSet.Name       = name;
            configSet.Created    = DateTime.UtcNow;
            configSet.System     = systemName;
            configSet.LastUpdate = DateTime.UtcNow;
            Repository.SaveChanges();
            if (parent.IsInstance())
            {
                configSet.ParentConfigSet = parent;
                foreach (var serviceDescription in parent.Services)
                {
                    var c = serviceDescription.CreateChild(Repository, ref configSet);
                    configSet.Services.Add(c);
                    Repository.SaveChanges();
                }
                foreach (var serviceHostSettingse in parent.ServiceHosts)
                {
                    var hostChild = serviceHostSettingse.CreateChild(Repository, ref configSet);
                    configSet.ServiceHosts.Add(hostChild);
                    Repository.SaveChanges();
                }
                foreach (var environment in parent.Environments)
                {
                    var child = environment.CreateChild(Repository, ref configSet);
                    configSet.Environments.Add(child);
                    Repository.SaveChanges();
                }
                Repository.SaveChanges();
            }

            return(true);
        }
Beispiel #40
0
        public static IEnvironment CreateChild(this IEnvironment environment, ConfigurationContext context, ref IConfigSet configSet)
        {
            var newEnvironment = context.Environments.Create();

            newEnvironment.ConfigSetNameId   = configSet.Id;
            newEnvironment.ConfigSet         = configSet;
            newEnvironment.ParentEnvironment = environment;
            newEnvironment.Name = environment.Name;
            configSet.Environments.Add(newEnvironment);
            context.SaveChanges();
            foreach (var substitutionParameter in environment.SubstitutionParameters)
            {
                var child = CreateChild(substitutionParameter, context, ref newEnvironment);
                if (newEnvironment.SubstitutionParameters.All(sp => !string.Equals(sp.Name, substitutionParameter.Name, StringComparison.OrdinalIgnoreCase)))
                {
                    newEnvironment.SubstitutionParameters.Add(child);
                }
            }
            foreach (var service in configSet.Services)
            {
                var addressOverride = string.Format("{0}_Address", service.Name);
                var overrideProp    = newEnvironment.SubstitutionParameters.SingleOrDefault(x => string.Equals(x.Name, addressOverride, StringComparison.OrdinalIgnoreCase));
                if (overrideProp.IsNull())
                {
                    newEnvironment.CreateSubstitutionParameters(context, addressOverride);
                }
            }
            foreach (var environmentParameter in environment.EnvironmentParameters)
            {
                newEnvironment.EnvironmentParameters.Add(CreateChild(environmentParameter, context, ref newEnvironment));
            }
            return(newEnvironment);
        }
 public static IServiceHostSettings CreateChild(this IServiceHostSettings service, ConfigurationContext context, ref IConfigSet configSet)
 {
     var child = context.ServiceHostSettingss.Create();
     child.Name = service.Name;
     child.ConfigSetNameId = configSet.Id;
     child.ConfigSet = configSet;
     child.Parent = service;
     foreach (var parameter in service.Parameters)
     {
         parameter.CreateChild(context, child);
     }
     return child;
 }
 private static void AddToChildren(IConfigSet configSet, ConfigurationContext context, IServiceDescription service)
 {
     foreach (var childConfigSet in configSet.ChildConfigSets)
     {
         var c = childConfigSet;
         var child = service.CreateChild(context, ref c);
         c.Services.Add(child);
         AddToChildren(c, context, child);
     }
 }
 private IEnvironment GetEnvironmentSettings(IConfigSet config, string environment)
 {
     return (from e in config.Environments where e.Name == environment select e).Single();
 }
Beispiel #44
0
 public string GenerateReaderKey(IConfigSet configSet)
 {
     configSet.ReaderKey = UniqueIdGenerator.CreateNewId(20).Encrypt(KeySalt);
     return configSet.ReaderKey;
 }
Beispiel #45
0
 private IEnvironment GetEnvironmentSettings(IConfigSet config, string environment)
 {
     return((from e in config.Environments where e.Name == environment select e).Single());
 }
Beispiel #46
0
 public IServiceHostSettings CreateServiceHost(IConfigSet configSet, string name)
 {
     var serviceHost = configSet.CreateServiceHost(Repository, name);
     configSet.LastUpdate = DateTime.UtcNow;
     Repository.SaveChanges();
     return serviceHost;
 }
Beispiel #47
0
 /// <summary>
 /// Initializes a new instance of the Database class.
 /// </summary>
 /// <param name="customConfig">A custom config set to use with the engine.</param>
 public Database(IConfigSet customConfig)
     : this(null, customConfig)
 {
 }
Beispiel #48
0
        /// <summary>
        /// Initializes a new instance of the Database class.
        /// </summary>
        /// <param name="databaseFilename">Specifies a path to use for creating or opening a database file to use with the engine.</param>
        /// <param name="customConfig">A custom config set to use with the engine.</param>
        public Database(string databaseFilename, IConfigSet customConfig)
        {
            if (string.IsNullOrEmpty(databaseFilename) && customConfig == null)
            {
                throw new ArgumentException("Must specify a valid databaseFilename or customConfig");
            }

            this.config = new DatabaseConfig();
            if (!string.IsNullOrEmpty(databaseFilename))
            {
                this.config.DatabaseFilename = databaseFilename;
                string systemPath = Path.GetDirectoryName(databaseFilename);
                this.config.SystemPath = systemPath;
                this.config.LogFilePath = systemPath;
                this.config.TempPath = systemPath;
                this.config.AlternateDatabaseRecoveryPath = systemPath;
            }

            if (customConfig != null)
            {
                this.config.Merge(customConfig);    // throw on conflicts
            }

            if (string.IsNullOrEmpty(this.config.Identifier))
            {
                this.config.Identifier = Guid.NewGuid().ToString();
            }

            if (string.IsNullOrEmpty(this.config.DisplayName))
            {
                this.config.DisplayName = string.Format("Database Inst{0:D2}", Interlocked.Increment(ref Database.instanceCounter) - 1);
            }

            this.Start();
        }
Beispiel #49
0
 private void ConnectToHost(ServiceRegistrationServer.ServiceRegistrationMessage data, IConfigSet cs, IServiceDescription service)
 {
     if (data.ServiceHost != null)
     {
         var host = cs.ServiceHosts.SingleOrDefault(s => s.Name == data.ServiceHost);
         if (host != null)
         {
             service.ServiceHost   = host;
             service.ServiceHostId = host.Id;
             configSetTasks.UpdateService(service);
         }
     }
 }