Example #1
0
        /// <summary>
        /// Extract information for a class.
        /// </summary>
        /// <param name="assembly"></param>
        /// <param name="className"></param>
        /// <param name="defaultLang"></param>
        /// <param name="element"></param>
        private static void ProcessClass(Assembly resources, string assembly, string className, string defaultLang, XElement element)
        {
            MasterObjectTable mot = Locator.Current.GetService <MasterObjectTable>();
            // Get the descriptions
            IEnumerable <XElement> nodes =
                from node in element.Descendants(DescriptionTag)
                select node;

            if (nodes.Count() > 0)
            {
                // Process the description
                LogHost.Default.Debug("Loading description definition for class '{0}'", className);
                ObjectDescription description = ProcessDescription(defaultLang, nodes.First());
                if ((description.Icon != null) && (description.Icon.Length > 0))
                {
                    description.Icon = CopyIconImage(resources, assembly, description.Icon);
                }
                mot.AddDescription(className, description);
            }
            // Get the configurations
            nodes =
                from node in element.Descendants(ConfigurationTag)
                select node;

            if (nodes.Count() > 0)
            {
                // Process the configuration
                LogHost.Default.Debug("Loading configuration definition for class '{0}'", className);
                IConfigurationDescription config = ProcessConfiguration(defaultLang, nodes.First());
                if (config != null)
                {
                    mot.AddConfigurationDescription(className, config);
                }
            }
        }
Example #2
0
        /// <summary>
        /// Initialise all the plugins.
        ///
        /// Every available plugin (added with <see cref="AddPlugin"/> or <see cref="LoadPlugins"/>)
        /// that is not marked as disabled will be initialised.
        /// </summary>
        public void InitialisePlugins()
        {
            MasterObjectTable mot = Locator.Current.GetService <MasterObjectTable>();

            lock (m_pluginsAvailable)
            {
                lock (m_pluginsEnabled)
                {
                    foreach (Guid uuid in m_pluginsAvailable.Keys)
                    {
                        // Create the IPluginHost for this plugin and enable it
                        PluginHost host = new PluginHost(m_pluginsAvailable[uuid]);
                        if (host.EnablePlugin())
                        {
                            this.Log().Debug("Enabled plugin {0} (ID = '{1}')", m_pluginsAvailable[uuid].GetType().Name, m_pluginsAvailable[uuid].UUID);
                            m_pluginsEnabled[uuid] = host;
                            mot.AddInstance(m_pluginsAvailable[uuid]);
                        }
                    }
                }
            }
        }
Example #3
0
        /// <summary>
        /// Enable the plugin
        /// </summary>
        /// <returns></returns>
        public bool EnablePlugin()
        {
            // Add the plugin to the MOT on the assumption it will work
            MasterObjectTable mot = Locator.Current.GetService <MasterObjectTable>();

            mot.AddInstance(m_plugin);
            // If the plugin supports configuration we need to give it one before
            // initialisation
            IConfigurable configurable = m_plugin as IConfigurable;

            if (configurable != null)
            {
                IConfigurationDescription    description = mot.GetConfigurationDescription(m_plugin.UUID);
                IDictionary <string, object> values      = mot.GetConfiguration(m_plugin.UUID);
                Dictionary <string, string>  failures    = new Dictionary <string, string>();
                if (!configurable.ValidateConfiguration(description, values, failures))
                {
                    StringBuilder sb        = new StringBuilder();
                    string        separator = "";
                    foreach (KeyValuePair <string, string> message in failures)
                    {
                        sb.Append(separator);
                        separator = ", ";
                        sb.Append(String.Format("'{0}' - {1}", message.Key, message.Value));
                    }
                    this.Log().Error("One or more configuration values are not applicable - " + sb.ToString());
                    mot.RemoveInstance(m_plugin.UUID);
                    return(false);
                }
                try
                {
                    configurable.ApplyConfiguration(description, values);
                }
                catch (Exception ex)
                {
                    this.Log().Error("Unable to apply configuration to plugin - {0}.", ex.ToString());
                    mot.RemoveInstance(m_plugin.UUID);
                    return(false);
                }
            }
            // Now try and initialise it
            bool initialised = false;

            try
            {
                initialised = m_plugin.Initialise(this);
                if (initialised)
                {
                    this.Log().Info("Initialised plugin");
                }
                else
                {
                    this.Log().Error("Failed to initialise plugin.");
                }
            }
            catch (Exception ex)
            {
                this.Log().Error("Failed to initialise plugin - {0}", ex.Message);
            }
            if (!initialised)
            {
                mot.RemoveInstance(m_plugin.UUID);
            }
            return(initialised);
        }