Exemple #1
0
        private void FillNameToRule()
        {
            Type factoryType = ruleFactory.GetType();

            MethodInfo[] methods = factoryType.GetMethods();
            foreach (MethodInfo method in methods)
            {
                if (method.ReturnType == typeof(Rule))
                {
                    string ruleName = method.Name.Replace("Create", "");
                    nameToRule.Add(ruleName, (Rule)method.Invoke(ruleFactory, null));
                }
            }
        }
Exemple #2
0
        public Task Load(IRuleFactory factory, IBoardType boardType)
        {
            try
            {
                var manifest = Common.Update.Plugin.GetEmbeddedPluginManifest(_logger, factory.GetType().Assembly);

                if (manifest == null)
                {
                    throw new NoManifestFoundException();
                }


                _store.Add(manifest.Automatica.PluginGuid, manifest);

                _logicFactoryStore.Add(factory.RuleGuid, factory);
                _logger.LogDebug($"Init logic {factory.RuleName} {factory.RuleVersion}...");

                var driverDbVersion =
                    _dbContext.VersionInformations.SingleOrDefault(a => a.RuleGuid == factory.RuleGuid);
                var initNodeTemplates = false;

                if (driverDbVersion == null)
                {
                    driverDbVersion = new VersionInformation
                    {
                        Name     = factory.RuleName,
                        Version  = factory.RuleVersion.ToString(),
                        RuleGuid = factory.RuleGuid
                    };
                    initNodeTemplates = true;
                    _dbContext.VersionInformations.Add(driverDbVersion);
                }
                else if (factory.RuleVersion > driverDbVersion.VersionData)
                {
                    initNodeTemplates       = true;
                    driverDbVersion.Name    = factory.RuleName;
                    driverDbVersion.Version = factory.RuleVersion.ToString();
                }

                _localizationProvider.LoadFromAssembly(factory.GetType().Assembly);
                if (initNodeTemplates || factory.InDevelopmentMode)
                {
                    _logger.LogDebug($"InitRuleTemplates for {factory.RuleName}...");

                    using (var db = new AutomaticaContext(_config))
                    {
                        factory.InitTemplates(new RuleTemplateFactory(db, _config));
                        db.SaveChanges();
                    }
                    _logger.LogDebug($"InitRuleTemplates for {factory.RuleName}...done");
                }

                _dbContext.SaveChanges(true);
            }
            catch (NoManifestFoundException)
            {
                // ignore
            }
            catch (Exception e)
            {
                _logger.LogError($"Could not load Rule {factory.RuleName} {e}", e);
            }
            return(Task.CompletedTask);

            ;
        }