예제 #1
0
 /// <summary>
 /// Checks plugin dependecies
 /// </summary>
 /// <param name="plugin">Plugin to check</param>
 /// <returns>True if ok</returns>
 public bool CheckPluginDependecies(Plugin plugin)
 {
     if (plugin.Dependencies != null)
     {
         foreach (PluginConfig dep in plugin.Dependencies)
         {
             Plugin depPlugin = null;
             if (!ContainsPlugin(dep, out depPlugin))
             {
                 string msg = "Plugin [" + plugin.Config + "] definition in XML file is invalid. Dependency plugin [" + dep + "] is missing.";
                 InvalidPluginException ex = new InvalidPluginException(msg);
                 ex.Plugin = plugin.Config;
                 throw ex;
             }
             else if (!depPlugin.Enabled)
             {
                 string msg = "Plugin [" + plugin.Config + "] definition in XML file is invalid. Dependency plugin [" + dep + "] is disable.";
                 InvalidPluginException ex = new InvalidPluginException(msg);
                 ex.Plugin = plugin.Config;
                 throw ex;
             }
         }
     }
     return(true);
 }
예제 #2
0
        public static void InvalidPluginException() => Describe(nameof(InvalidPluginException), () =>
        {
            const string message = "Invalid Load";
            var attribute        = new TastyPluginAttribute(typeof(InvalidPluginExceptionTests), nameof(InvalidPluginException));
            var exception        = new InvalidPluginException(message, attribute, new Exception());

            It($"should provide {nameof(exception.TastyPluginType)}",
               () => exception.TastyPluginType == typeof(InvalidPluginExceptionTests).FullName
               );

            It($"should provide {nameof(exception.TastyPluginEntryPoint)}",
               () => exception.TastyPluginEntryPoint == nameof(InvalidPluginException)
               );

            Describe("should serialize and keep context", () =>
            {
                var serializedException = DeserializeFromBytes(SerializeToBytes(exception));

                It($"should provide {nameof(exception.TastyPluginType)}",
                   () => serializedException.TastyPluginType == typeof(InvalidPluginExceptionTests).FullName
                   );

                It($"should provide {nameof(exception.TastyPluginEntryPoint)}",
                   () => serializedException.TastyPluginEntryPoint == nameof(InvalidPluginException)
                   );
            });

            Describe($"throws {nameof(ArgumentNullException)}", () =>
            {
                It($"for {nameof(TastyPluginAttribute)}",
                   () => Should.Throw <ArgumentNullException>(
                       () => new InvalidPluginException(string.Empty, null !, null !)
                       )
                   );
예제 #3
0
 /// <summary>
 /// Check plugin
 /// </summary>
 /// <param name="plugin">Plugin to check</param>
 /// <returns>True if ok</returns>
 public bool CheckPlugin(Plugin plugin)
 {
     if (plugins.Contains(plugin))
     {
         InvalidPluginException ex = new InvalidPluginException("There is multiple plugin [" + plugin + "]");
         ex.Plugin = plugin.Config;
         throw ex;
     }
     return(true);
 }
예제 #4
0
파일: Plugin.cs 프로젝트: jozpys/MUTDOD
        public static Plugin Read(string fileName)
        {
            XmlDocument doc = new XmlDocument();

            try
            {
                doc.Load(fileName);
            }
            catch (Exception)
            {
                InvalidPluginException e = new InvalidPluginException("Error while parsing plugin file: " + fileName);
                throw e;
            }
            XmlNode pluginNode = doc.GetElementsByTagName("Plugin").Item(0);

            if (pluginNode == null)
            {
                InvalidPluginException e = new InvalidPluginException("There is no plugin definition in file: " + fileName);
                throw e;
            }

            XStream xs = new XStream();

            xs.Alias("Plugin", typeof(PluginConfig));
            PluginConfig pluginXML = null;

            try
            {
                pluginXML = xs.FromXml(pluginNode.OuterXml) as PluginConfig;
            }
            catch (Exception)
            {
                InvalidPluginException e = new InvalidPluginException("Wrong plugin definition in file: " + fileName);
                throw e;
            }

            try
            {
                pluginXML.Valid();
            }
            catch (InvalidPluginException ex)
            {
                InvalidPluginException e = new InvalidPluginException(ex.Message + " in file: " + fileName, ex);
                e.Plugin = pluginXML;
                throw e;
            }

            Plugin plugin = new Plugin(pluginXML);

            plugin.Xml = pluginNode.OuterXml;
            return(plugin);
        }
예제 #5
0
파일: Plugin.cs 프로젝트: jozpys/MUTDOD
        public bool Valid(bool isDependency = false)
        {
            if (string.IsNullOrEmpty(Id))
            {
                string msg = "Plugin definition in XML file is invalid. There is no Id";
                if (isDependency)
                {
                    msg += " for dependency";
                }
                InvalidPluginException ex = new InvalidPluginException(msg);
                ex.Plugin = this;
                throw ex;
            }
            if (string.IsNullOrEmpty(Version))
            {
                string msg = "Plugin definition in XML file is invalid. There is no Version";
                if (isDependency)
                {
                    msg += " for dependency";
                }
                InvalidPluginException ex = new InvalidPluginException(msg);
                ex.Plugin = this;
                throw ex;
            }

            if (!isDependency && string.IsNullOrEmpty(File))
            {
                InvalidPluginException ex = new InvalidPluginException("Plugin definition in XML file is invalid. There is no File");
                ex.Plugin = this;
                throw ex;
            }

            if (Dependencies != null)
            {
                foreach (PluginConfig plugin in Dependencies)
                {
                    if (!plugin.Valid(true))
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }