private IDictionary <string, object> RpcGetConfiguration(string uuid)
        {
            IUserObject instance = m_mot.GetInstance(Guid.Parse(uuid));

            if (instance == null)
            {
                throw new ArgumentException("No such object.");
            }
            IDictionary <string, object> config = m_mot.GetConfiguration(instance.UUID);

            if (config == null)
            {
                throw new ArgumentException("Object does not have a configuration.");
            }
            // Set up the result
            Dictionary <string, object> result = new Dictionary <string, object>();

            result["active"] = config;
            IConfigurationDescription            configDescription = m_mot.GetConfigurationDescription(instance.UUID);
            List <IDictionary <string, object> > details           = new List <IDictionary <string, object> >();

            foreach (IConfigurationValue value in configDescription)
            {
                details.Add(value.Pack());
            }
            result["details"] = details;
            return(result);
        }
        private IDictionary <string, string> RpcSetConfiguration(string uuid, IDictionary <string, object> config)
        {
            // Make sure the object ID is valid
            IUserObject instance = m_mot.GetInstance(Guid.Parse(uuid));

            if (instance == null)
            {
                throw new ArgumentException("No such object.");
            }
            // Make sure it is an object and it is configurable
            if (instance.ObjectType.IsFactory() || !(instance is IConfigurable))
            {
                throw new ArgumentException("Cannot apply configuration to this type of object.");
            }
            // Get the matching configuration description
            IConfigurationDescription desc = m_mot.GetConfigurationDescription(instance.UUID);

            if (desc == null)
            {
                throw new ArgumentException("No configuration description available for object.");
            }
            // Verify the configuration
            Dictionary <string, string> failures = new Dictionary <string, string>();

            config = desc.Verify(config, failures);
            if (config != null)
            {
                IConfigurable configurable = instance as IConfigurable;
                if (configurable.ValidateConfiguration(desc, config, failures))
                {
                    configurable.ApplyConfiguration(desc, config);
                }
            }
            return(failures);
        }
        public override AbstractAction CreateInstance(Guid id, IConfigurationDescription description, IDictionary <string, object> values)
        {
            ScriptAction action = new ScriptAction(id);

            action.ApplyConfiguration(description, values);
            return(action);
        }
Beispiel #4
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);
                }
            }
        }
        /// <summary>
        /// Constructor
        /// </summary>
        public ServiceManager()
        {
            // Add ourselves to the MOT
            MasterObjectTable mot = Locator.Current.GetService <MasterObjectTable>();

            mot.AddMetaData(Utilities.GetContainingAssembly <ServiceManager>());
            mot.AddInstance(this);
            // Load and apply our configuration (IFolder must be available by now)
            IConfigurationDescription    serverConfigDescription = mot.GetConfigurationDescription(UUID);
            IDictionary <string, object> serverConfig            = mot.GetConfigurationFromFile(UUID, "SensHub.json");

            ApplyConfiguration(serverConfigDescription, serverConfig);
        }
Beispiel #6
0
 /// <summary>
 /// Add a configuration description for a given class name
 /// </summary>
 /// <param name="clsName"></param>
 /// <param name="configuration"></param>
 internal void AddConfigurationDescription(string clsName, IConfigurationDescription configuration)
 {
     lock (m_configinfo)
     {
         if (m_configinfo.ContainsKey(clsName))
         {
             this.Log().Warn("Configuration information already registered for class '{0}'", clsName);
         }
         else
         {
             m_configinfo[clsName] = configuration;
         }
     }
 }
        /// <summary>
        /// Apply the configuration values
        /// </summary>
        /// <param name="description"></param>
        /// <param name="values"></param>
        public void ApplyConfiguration(IConfigurationDescription description, IDictionary <string, object> values)
        {
            // Get the logging level
            LogLevel logLevel;

            if (!Enum.TryParse <LogLevel>(description.GetAppliedValue(values, "logLevel").ToString(), out logLevel))
            {
                logLevel = LogLevel.Warn;
            }
            LogLevel = logLevel;
            // Get the HTTP port
            HttpPort = (int)description.GetAppliedValue(values, "httpPort");
            // Get the server password
            Password = (string)description.GetAppliedValue(values, "password");
        }
 public override void ApplyConfiguration(IConfigurationDescription description, IDictionary<string, object> values)
 {
     throw new NotImplementedException();
 }
 public override AbstractAction CreateInstance(Guid id, IConfigurationDescription description, IDictionary<string, object> values)
 {
     ScriptAction action = new ScriptAction(id);
     action.ApplyConfiguration(description, values);
     return action;
 }
 public bool ValidateConfiguration(IConfigurationDescription description, IDictionary<string, object> values, IDictionary<string, string> failures)
 {
     // TODO: Implement this
     return true;
 }
 /// <summary>
 /// Apply the configuration values
 /// </summary>
 /// <param name="description"></param>
 /// <param name="values"></param>
 public void ApplyConfiguration(IConfigurationDescription description, IDictionary<string, object> values)
 {
     // Get the logging level
     LogLevel logLevel;
     if (!Enum.TryParse<LogLevel>(description.GetAppliedValue(values, "logLevel").ToString(), out logLevel))
         logLevel = LogLevel.Warn;
     LogLevel = logLevel;
     // Get the HTTP port
     HttpPort = (int)description.GetAppliedValue(values, "httpPort");
     // Get the server password
     Password = (string)description.GetAppliedValue(values, "password");
 }
Beispiel #12
0
        /// <summary>
        /// Get information about an object.
        /// </summary>
        /// <param name="forInstance"></param>
        /// <param name="instance"></param>
        /// <param name="description"></param>
        /// <returns></returns>
        private bool GetObjectInformation(Guid forInstance, out IUserObject instance, out IConfigurationDescription description)
        {
            description = null;
            instance    = GetInstance(forInstance);
            if (instance == null)
            {
                this.Log().Warn("Requested configuration for non-existant object '{0}'", forInstance);
                return(false);
            }
            IConfigurable configurable = instance as IConfigurable;

            if (configurable == null)
            {
                this.Log().Warn("Requested configuration for unconfigurable object '{0}' (Class {1}.{2})", forInstance, instance.GetType().Namespace, instance.GetType().Name);
                return(false);
            }
            description = GetConfigurationDescription(forInstance);
            if (description == null)
            {
                this.Log().Warn("No configuration description for object '{0}' (Class {1}.{2})", forInstance, instance.GetType().Namespace, instance.GetType().Name);
                return(false);
            }
            return(true);
        }
Beispiel #13
0
 public abstract AbstractAction CreateInstance(Guid id, IConfigurationDescription description, IDictionary <string, object> values);
Beispiel #14
0
 public abstract void ApplyConfiguration(IConfigurationDescription description, System.Collections.Generic.IDictionary <string, object> values);
Beispiel #15
0
 public virtual bool ValidateConfiguration(IConfigurationDescription description, System.Collections.Generic.IDictionary <string, object> values, System.Collections.Generic.IDictionary <string, string> failures)
 {
     // Default is to do nothing
     return(true);
 }
 public bool ValidateConfiguration(IConfigurationDescription description, IDictionary <string, object> values, IDictionary <string, string> failures)
 {
     // TODO: Implement this
     return(true);
 }
Beispiel #17
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);
        }
 public override void ApplyConfiguration(IConfigurationDescription description, IDictionary <string, object> values)
 {
     throw new NotImplementedException();
 }