Esempio n. 1
0
        public GXDeviceDeleteResponse Post(GXDeviceDeleteRequest request)
        {
            IAuthSession s  = this.GetSession(false);
            int          id = Convert.ToInt32(s.Id);

            if (id == 0)
            {
                throw new ArgumentException("Remove failed. Invalid session ID.");
            }
            //Normal user can't remove device.
            if (!GuruxAMI.Server.GXBasicAuthProvider.CanUserEdit(s))
            {
                throw new ArgumentException("Access denied.");
            }
            bool superAdmin            = GuruxAMI.Server.GXBasicAuthProvider.IsSuperAdmin(s);
            List <GXEventsItem> events = new List <GXEventsItem>();
            bool permanently           = request.Permanently;
            List <GXAmiDevice> devices = new List <GXAmiDevice>();

            lock (Db)
            {
                foreach (ulong it in request.DeviceIDs)
                {
                    if (it == 0)
                    {
                        throw new ArgumentException("ID is required");
                    }
                    if (!superAdmin && !CanUserAccessDevice(Db, id, it))
                    {
                        throw new ArgumentException("Access denied.");
                    }
#if !SS4
                    GXAmiDevice device = Db.QueryById <GXAmiDevice>(it);
#else
                    GXAmiDevice device = Db.SingleById <GXAmiDevice>(it);
#endif
                    devices.Add(device);
                    events.Add(new GXEventsItem(ActionTargets.Device, Actions.Remove, device));
                }
            }
            //Notify before delete or DC is not notified because device is not found from the DB.
            AppHost host = this.ResolveService <AppHost>();
            host.SetEvents(Db, this.Request, id, events);
            lock (Db)
            {
                foreach (GXAmiDevice it in devices)
                {
                    if (permanently)
                    {
                        Db.DeleteById <GXAmiDevice>(it.Id);
                    }
                    else
                    {
                        it.Removed = DateTime.Now.ToUniversalTime();
                        Db.UpdateOnly(it, p => p.Removed, p => p.Id == it.Id);
                    }
                }
            }
            return(new GXDeviceDeleteResponse());
        }
        /// <summary>
        /// Update trace level for selected devices or Data Collectors.
        /// </summary>
        public GXTraceUpdateResponse Post(GXTraceUpdateRequest request)
        {
            List <GXEventsItem> events = new List <GXEventsItem>();

            lock (Db)
            {
                if (request.DataCollectorIDs != null)
                {
                    foreach (ulong id in request.DataCollectorIDs)
                    {
#if !SS4
                        GXAmiDataCollector it = Db.GetById <GXAmiDataCollector>(id);
#else
                        GXAmiDataCollector it = Db.SingleById <GXAmiDataCollector>(id);
#endif
                        it.TraceLevel = request.Level;
                        Db.UpdateOnly(it, p => p.TraceLevelAsInt, p => p.Id == id);
                        events.Add(new GXEventsItem(ActionTargets.Trace, Actions.Edit, it));
                    }
                }
                if (request.DeviceIDs != null)
                {
                    foreach (ulong id in request.DeviceIDs)
                    {
#if !SS4
                        GXAmiDevice it = Db.GetById <GXAmiDevice>(id);
#else
                        GXAmiDevice it = Db.SingleById <GXAmiDevice>(id);
#endif
                        it.TraceLevel = request.Level;
                        Db.UpdateOnly(it, p => p.TraceLevelAsInt, p => p.Id == id);
                        events.Add(new GXEventsItem(ActionTargets.Trace, Actions.Edit, it));
                    }
                }
            }
            AppHost host = this.ResolveService <AppHost>();
            host.SetEvents(Db, this.Request, 0, events);
            return(new GXTraceUpdateResponse());
        }
Esempio n. 3
0
        /// <summary>
        /// Update new device state.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public GXDeviceStateUpdateResponse Put(GXDeviceStateUpdateRequest request)
        {
            List <GXEventsItem> events = new List <GXEventsItem>();

            lock (Db)
            {
                foreach (var it in request.States)
                {
#if !SS4
                    GXAmiDevice device = Db.GetById <GXAmiDevice>(it.Key);
#else
                    GXAmiDevice device = Db.SingleById <GXAmiDevice>(it.Key);
#endif
                    device.State = it.Value;
                    Db.UpdateOnly(device, p => p.StatesAsInt, p => p.Id == it.Key);
                    events.Add(new GXEventsItem(ActionTargets.Device, Actions.State, device));
                }
            }
            AppHost host = this.ResolveService <AppHost>();
            host.SetEvents(Db, this.Request, 0, events);
            return(new GXDeviceStateUpdateResponse());
        }
        void IJob.Execute(IJobExecutionContext context)
        {
            GXAmiClient client = context.JobDetail.JobDataMap["Client"] as GXAmiClient;
            ulong id = (ulong)context.JobDetail.JobDataMap["Target"];
            GXAmiDevice device = new GXAmiDevice();
            //Get schedule
            GXAmiSchedule schedule = client.GetSchedule(id);

            //Notify that schedule task is started.            
            client.NotifyScheduleStateChange(schedule, ScheduleState.TaskStart);
            //Add tasks.            
            foreach (GXAmiScheduleTarget t in schedule.Targets)
            {
                if (t.TargetType == TargetType.Device)
                {
                    device.Id = t.TargetID;
                    client.Read(device);
                }
            }            
            //Notify that schedule task is ended.
            client.NotifyScheduleStateChange(schedule, ScheduleState.TaskFinish);
        }
 /// <summary>
 /// Get trace level state.
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 public GXTraceLevelResponse Get(GXTraceLevelRequest request)
 {
     lock (Db)
     {
         List <System.Diagnostics.TraceLevel> list = new List <System.Diagnostics.TraceLevel>();
         if (request.DataCollectors != null)
         {
             foreach (Guid guid in request.DataCollectors)
             {
                 GXAmiDataCollector it = Db.Select <GXAmiDataCollector>(q => q.Guid == guid)[0];
                 list.Add(it.TraceLevel);
             }
         }
         if (request.DeviceIDs != null)
         {
             foreach (ulong id in request.DeviceIDs)
             {
                 GXAmiDevice it = Db.Select <GXAmiDevice>(q => q.Id == id)[0];
                 list.Add(it.TraceLevel);
             }
         }
         return(new GXTraceLevelResponse(list.ToArray()));
     }
 }
 /// <summary>
 /// Create new device from the device template.
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 public GXCreateDeviceResponse Get(GXCreateDeviceRequest request)
 {
     lock (Db)
     {
         //Create devices from the device templates.
         List <GXAmiDevice> devices = new List <GXAmiDevice>();
         foreach (ulong id in request.Ids)
         {
             List <GXAmiDeviceProfile> tmp = Db.Select <GXAmiDeviceProfile>(q => q.Id == id);
             if (tmp.Count != 1)
             {
                 throw new ArgumentException("Access denied.");
             }
             GXAmiDevice dev = tmp[0] as GXAmiDevice;
             dev.Guid      = Guid.NewGuid();
             dev.Id        = 0;
             dev.ProfileId = id;
             List <GXAmiParameterTemplate> list = Db.Select <GXAmiParameterTemplate>(q => q.ParentID == id << 16);
             dev.Parameters = list.ConvertAll <GXAmiParameter>(new Converter <GXAmiParameterTemplate, GXAmiParameter>(p => p.ToParameter())).ToArray();
             devices.Add(dev);
         }
         return(new GXCreateDeviceResponse(devices.ToArray()));
     }
 }
		public GXDevicesResponse(GXAmiDevice[] devices)
		{
			this.Devices = devices;
		}
Esempio n. 8
0
        internal static void UpdateContent(IDbConnection Db, GXAmiDevice device, DeviceContentType content)
        {
            string query;

            if (content == DeviceContentType.All)
            {
                device.ProfileGuid = Db.Select <GXAmiDeviceProfile>(q => q.Id == device.ProfileId)[0].Guid;
                SortedList <ulong, object> items = new SortedList <ulong, object>();
                //Get categories.
                device.Categories = Db.Select <GXAmiCategory>(q => q.DeviceID == device.Id).ToArray();
                foreach (GXAmiCategory cat in device.Categories)
                {
                    items.Add(cat.Id, cat);
                }
                //Get tables.
                device.Tables = Db.Select <GXAmiDataTable>(q => q.DeviceID == device.Id).ToArray();
                foreach (GXAmiDataTable table in device.Tables)
                {
                    items.Add(table.Id, table);
                }
                //Get properties.
                query = string.Format("SELECT * FROM {0} WHERE DeviceID = {1} ORDER BY ParentID, ID",
                                      GuruxAMI.Server.AppHost.GetTableName <GXAmiProperty>(Db),
                                      device.Id);
                List <GXAmiProperty> properties = Db.SqlList <GXAmiProperty>(query);
                ulong id = 0;
                List <GXAmiProperty> list = new List <GXAmiProperty>();
                foreach (GXAmiProperty it in properties)
                {
                    //If parent changes.
                    if (it.ParentID != id)
                    {
                        if (id != 0)
                        {
                            object target = items[id];
                            if (target is GXAmiCategory)
                            {
                                (target as GXAmiCategory).Properties = list.ToArray();
                            }
                            else if (target is GXAmiDataTable)
                            {
                                (target as GXAmiDataTable).Columns = list.ToArray();
                            }
                        }
                        id = it.ParentID;
                        list.Clear();
                    }
                    list.Add(it);
                }
                if (list.Count != 0 && id != 0)
                {
                    object target = items[id];
                    if (target is GXAmiCategory)
                    {
                        (target as GXAmiCategory).Properties = list.ToArray();
                    }
                    else if (target is GXAmiDataTable)
                    {
                        (target as GXAmiDataTable).Columns = list.ToArray();
                    }
                }

                foreach (GXAmiProperty it in properties)
                {
                    items.Add(it.Id, it);
                }
                items.Add(device.Id, device);
                //Get Parameters.
                query = string.Format("SELECT * FROM {0} WHERE DeviceID = {1} ORDER BY ParentID, ID",
                                      GuruxAMI.Server.AppHost.GetTableName <GXAmiParameter>(Db),
                                      device.Id);
                List <GXAmiParameter> parameters = Db.SqlList <GXAmiParameter>(query);
                id = 0;
                List <GXAmiParameter> paramList = new List <GXAmiParameter>();
                foreach (GXAmiParameter it in parameters)
                {
                    //If parent changes.
                    if (it.ParentID != id)
                    {
                        if (id != 0)
                        {
                            object target = items[id];
                            if (target is GXAmiDevice)
                            {
                                (target as GXAmiDevice).Parameters = paramList.ToArray();
                            }
                            else if (target is GXAmiCategory)
                            {
                                (target as GXAmiCategory).Parameters = paramList.ToArray();
                            }
                            else if (target is GXAmiDataTable)
                            {
                                (target as GXAmiDataTable).Parameters = paramList.ToArray();
                            }
                            else if (target is GXAmiProperty)
                            {
                                (target as GXAmiProperty).Parameters = paramList.ToArray();
                            }
                            else
                            {
                                throw new Exception("Unknown target.");
                            }
                        }
                        id = it.ParentID;
                        paramList.Clear();
                    }
                    paramList.Add(it);
                }
                if (paramList.Count != 0 && id != 0)
                {
                    object target = items[id];
                    if (target is GXAmiDevice)
                    {
                        (target as GXAmiDevice).Parameters = paramList.ToArray();
                    }
                    else if (target is GXAmiCategory)
                    {
                        (target as GXAmiCategory).Parameters = paramList.ToArray();
                    }
                    else if (target is GXAmiDataTable)
                    {
                        (target as GXAmiDataTable).Parameters = paramList.ToArray();
                    }
                    else if (target is GXAmiProperty)
                    {
                        (target as GXAmiProperty).Parameters = paramList.ToArray();
                    }
                    else
                    {
                        throw new Exception("Unknown target.");
                    }
                }
                items.Clear();
                foreach (GXAmiParameter it in parameters)
                {
                    items.Add(it.TemplateId, it);
                }
                //Get Parameters.
                query = string.Format("SELECT * FROM {0} WHERE ProfileId = {1} ORDER BY ParameterId, ID",
                                      GuruxAMI.Server.AppHost.GetTableName <GXAmiValueItem>(Db),
                                      device.ProfileId);
                List <GXAmiValueItem> values = Db.SqlList <GXAmiValueItem>(query);
                id = 0;
                List <GXAmiValueItem> valueList = new List <GXAmiValueItem>();
                foreach (GXAmiValueItem it in values)
                {
                    //If parent changes.
                    if (it.ParameterId != null && it.ParameterId != id)
                    {
                        if (id != 0)
                        {
                            if (items.ContainsKey(id))
                            {
                                object target = items[id];
                                (target as GXAmiParameter).Values = valueList.ToArray();
                            }
                            else
                            {
                                System.Diagnostics.Debug.WriteLine("Failed to find value item parent: " + it.UIValue);
                            }
                        }
                        id = it.ParameterId.Value;
                        valueList.Clear();
                    }
                    valueList.Add(it);
                }
            }
            //Get Media settings.
            query = "SELECT * FROM " + GuruxAMI.Server.AppHost.GetTableName <GXAmiDeviceMedia>(Db) +
                    " WHERE DeviceId = " + device.Id.ToString();
            List <GXAmiDeviceMedia> list2 = Db.Select <GXAmiDeviceMedia>(query);

            device.Medias = list2.ToArray();
        }
Esempio n. 9
0
        /// <summary>
        /// Add or update device.
        /// </summary>
        public GXDeviceUpdateResponse Put(GXDeviceUpdateRequest request)
        {
            List <GXEventsItem> events = new List <GXEventsItem>();
            IAuthSession        s      = this.GetSession(false);

            //Normal user can't change device group name or add new one.
            if (!GuruxAMI.Server.GXBasicAuthProvider.CanUserEdit(s))
            {
                throw new ArgumentException("Access denied.");
            }
            long adderId = Convert.ToInt64(s.Id);

            lock (Db)
            {
                using (var trans = Db.OpenTransaction(IsolationLevel.ReadCommitted))
                {
                    bool newDevice;
                    bool superAdmin = GuruxAMI.Server.GXBasicAuthProvider.IsSuperAdmin(s);
                    //Add new device groups
                    foreach (GXAmiDevice it in request.Devices)
                    {
                        if (string.IsNullOrEmpty(it.Name))
                        {
                            throw new ArgumentException("Invalid name.");
                        }
                        //If new device.
                        newDevice = it.Id == 0;
                        if (newDevice)
                        {
                            it.Id          = GXAmiSettings.GetNewDeviceID(Db);
                            it.Added       = DateTime.Now.ToUniversalTime();
                            it.ProfileGuid = Db.Select <GXAmiDeviceProfile>(q => q.Id == it.ProfileId)[0].Guid;
                            Db.Insert(it);
                            events.Add(new GXEventsItem(ActionTargets.Device, Actions.Add, it));
                            //Add adder to user group if adder is not super admin.
                            foreach (ulong dgId in request.DeviceGroups)
                            {
                                //Can user access to the device group.
                                if (!superAdmin && dgId != 0 && !GXDeviceGroupService.CanUserAccessDeviceGroup(Db, adderId, dgId))
                                {
                                    throw new ArgumentException("Access denied.");
                                }
                                GXAmiDeviceGroupDevice g = new GXAmiDeviceGroupDevice();
                                g.DeviceGroupID = dgId;
                                g.DeviceID      = it.Id;
                                g.Added         = DateTime.Now.ToUniversalTime();
                                Db.Insert(g);
                                events.Add(new GXEventsItem(ActionTargets.DeviceGroup, Actions.Edit, dgId));
                            }
                            it.Categories = null;
                            it.Tables     = null;
                        }
                        else //Update device.
                        {
                            if (request.DeviceGroups != null)
                            {
                                foreach (ulong dgId in request.DeviceGroups)
                                {
                                    //Can user access to the device group.
                                    if (!superAdmin && !GXDeviceGroupService.CanUserAccessDeviceGroup(Db, adderId, dgId))
                                    {
                                        throw new ArgumentException("Access denied.");
                                    }
                                    if (dgId == 0)
                                    {
                                        GXAmiDeviceGroupDevice g = new GXAmiDeviceGroupDevice();
                                        g.DeviceGroupID = dgId;
                                        g.DeviceID      = it.Id;
                                        g.Added         = DateTime.Now.ToUniversalTime();
                                        Db.Insert(g);
                                        events.Add(new GXEventsItem(ActionTargets.DeviceGroup, Actions.Edit, dgId));
                                    }
                                }
                            }
                            //Get Added time.
#if !SS4
                            GXAmiDevice orig = Db.GetById <GXAmiDevice>(it.Id);
#else
                            GXAmiDevice orig = Db.SingleById <GXAmiDevice>(it.Id);
#endif
                            it.Added = orig.Added;
                            Db.Update(it);
                            events.Add(new GXEventsItem(ActionTargets.Device, Actions.Edit, it));
                        }
                        //Bind user groups to the device groups.
                        if (request.DeviceGroups != null)
                        {
                            foreach (ulong dgId in request.DeviceGroups)
                            {
                                string query = string.Format("SELECT DeviceID FROM " +
                                                             GuruxAMI.Server.AppHost.GetTableName <GXAmiDeviceGroupDevice>(Db) +
                                                             "WHERE DeviceID = {0} AND DeviceGroupID = {1}", it.Id, dgId);
                                if (Db.Select <GXAmiUserGroupDeviceGroup>(query).Count == 0)
                                {
                                    GXAmiDeviceGroupDevice item = new GXAmiDeviceGroupDevice();
                                    item.DeviceGroupID = dgId;
                                    item.DeviceID      = it.Id;
                                    item.Added         = DateTime.Now.ToUniversalTime();
                                    Db.Insert <GXAmiUserGroupDeviceGroup>();
                                    events.Add(new GXEventsItem(ActionTargets.Device, Actions.Edit, it));
                                    events.Add(new GXEventsItem(ActionTargets.DeviceGroup, Actions.Edit, dgId));
                                }
                            }
                        }
                        ///////////////////////////////////////////////
                        //Update device parameters.
                        UpdateParameters(Db, it.Id, it.Id, it.Parameters, newDevice);

                        //Update device Media Settings.
                        Db.Delete <GXAmiDeviceMedia>(q => q.DeviceId == it.Id);
                        foreach (GXAmiDeviceMedia m in it.Medias)
                        {
                            if (m.DataCollectorId == 0)
                            {
                                m.DataCollectorId = null;
                            }
                            m.DeviceId = it.Id;
                            Db.Insert <GXAmiDeviceMedia>(m);
                        }

                        ///////////////////////////////////////////////
                        //Update categories
                        if (it.Categories == null)
                        {
                            GXAmiCategoryTemplate[] tmp22      = Db.Select <GXAmiCategoryTemplate>(q => q.DeviceID == it.ProfileId).ToArray();
                            List <GXAmiCategory>    categories = new List <GXAmiCategory>();
                            foreach (GXAmiCategoryTemplate tmp in tmp22)
                            {
                                GXAmiCategory cat = tmp.ToCategory();
                                cat.DeviceID = it.Id;
                                Db.Insert(cat);
                                categories.Add(cat);
                                List <GXAmiParameterTemplate> list = Db.Select <GXAmiParameterTemplate>(q => q.ParentID == tmp.Id);
                                cat.Parameters = list.ConvertAll <GXAmiParameter>(new Converter <GXAmiParameterTemplate, GXAmiParameter>(p => p.ToParameter())).ToArray();
                                UpdateParameters(Db, it.Id, cat.Id, cat.Parameters, true);
                                GXAmiPropertyTemplate[] tmp23      = Db.Select <GXAmiPropertyTemplate>(q => q.ParentID == tmp.Id).ToArray();
                                List <GXAmiProperty>    properties = new List <GXAmiProperty>();
                                foreach (GXAmiPropertyTemplate tmp2 in tmp23)
                                {
                                    GXAmiProperty p = tmp2.ToProperty();
                                    p.ParentID = cat.Id;
                                    p.DeviceID = it.Id;
                                    Db.Insert(p);
                                    list         = Db.Select <GXAmiParameterTemplate>(q => q.ParentID == tmp2.Id);
                                    p.Parameters = list.ConvertAll <GXAmiParameter>(new Converter <GXAmiParameterTemplate, GXAmiParameter>(q => q.ToParameter())).ToArray();
                                    UpdateParameters(Db, it.Id, p.Id, p.Parameters, true);
                                    properties.Add(p);
                                }
                                cat.Properties = properties.ToArray();
                            }
                            it.Categories = categories.ToArray();
                        }
                        else
                        {
                            foreach (GXAmiCategory cat in it.Categories)
                            {
                                //User can change category so it is not updated. Db.Update(cat);
                                //Update category parameters.
                                UpdateParameters(Db, cat.Id, cat.Id, cat.Parameters, false);
                                //Update properties
                                foreach (GXAmiProperty p in cat.Properties)
                                {
                                    //User can change property so it is not updated. Db.Update(p);
                                    //Update property parameters.
                                    UpdateParameters(Db, p.Id, p.Id, p.Parameters, false);
                                }
                            }
                        }
                        ///////////////////////////////////////////////
                        //Update tables
                        if (it.Tables == null)
                        {
                            GXAmiDataTableTemplate[] tmp22  = Db.Select <GXAmiDataTableTemplate>(q => q.DeviceID == it.ProfileId).ToArray();
                            List <GXAmiDataTable>    tables = new List <GXAmiDataTable>();
                            foreach (GXAmiDataTableTemplate tmp in tmp22)
                            {
                                GXAmiDataTable table = tmp.ToTable();
                                table.DeviceID = it.Id;
                                Db.Insert(table);
                                tables.Add(table);
                                List <GXAmiParameterTemplate> list = Db.Select <GXAmiParameterTemplate>(q => q.ParentID == tmp.Id);
                                table.Parameters = list.ConvertAll <GXAmiParameter>(new Converter <GXAmiParameterTemplate, GXAmiParameter>(p => p.ToParameter())).ToArray();
                                UpdateParameters(Db, it.Id, table.Id, table.Parameters, true);
                                GXAmiPropertyTemplate[] tmp23      = Db.Select <GXAmiPropertyTemplate>(q => q.ParentID == tmp.Id).ToArray();
                                List <GXAmiProperty>    properties = new List <GXAmiProperty>();
                                foreach (GXAmiPropertyTemplate tmp2 in tmp23)
                                {
                                    GXAmiProperty p = tmp2.ToProperty();
                                    p.ParentID = table.Id;
                                    p.DeviceID = it.Id;
                                    Db.Insert(p);
                                    list         = Db.Select <GXAmiParameterTemplate>(q => q.ParentID == tmp2.Id);
                                    p.Parameters = list.ConvertAll <GXAmiParameter>(new Converter <GXAmiParameterTemplate, GXAmiParameter>(q => q.ToParameter())).ToArray();
                                    UpdateParameters(Db, it.Id, p.Id, p.Parameters, true);
                                    properties.Add(p);
                                }
                                table.Columns = properties.ToArray();
                            }
                            it.Tables = tables.ToArray();
                        }
                        else
                        {
                            foreach (GXAmiDataTable table in it.Tables)
                            {
                                //User can change table so it is not updated. Db.Update(table);
                                //Update category parameters.
                                UpdateParameters(Db, table.Id, table.Id, table.Parameters, false);
                                //Update properties
                                foreach (GXAmiProperty p in table.Columns)
                                {
                                    //User can change category so it is not updated. Db.Update(p);
                                    //Update property parameters.
                                    UpdateParameters(Db, p.Id, p.Id, p.Parameters, false);
                                }
                            }
                        }
                    }
                    trans.Commit();
                }
            }
            AppHost host = this.ResolveService <AppHost>();
            host.SetEvents(Db, this.Request, adderId, events);
            return(new GXDeviceUpdateResponse(request.Devices));
        }
        internal static void UpdateContent(IDbConnection Db, GXAmiDevice device, DeviceContentType content)
        {
            string query;
            if (content == DeviceContentType.All)
            {
                device.ProfileGuid = Db.Select<GXAmiDeviceProfile>(q => q.Id == device.ProfileId)[0].Guid;
                SortedList<ulong, object> items = new SortedList<ulong, object>();
                //Get categories.
                device.Categories = Db.Select<GXAmiCategory>(q => q.DeviceID == device.Id).ToArray();
                foreach(GXAmiCategory cat in device.Categories)
                {
                    items.Add(cat.Id, cat);
                }
                //Get tables.
                device.Tables = Db.Select<GXAmiDataTable>(q => q.DeviceID == device.Id).ToArray();
                foreach(GXAmiDataTable table in device.Tables)
                {
                    items.Add(table.Id, table);
                }
                //Get properties.
                query = string.Format("SELECT * FROM {0} WHERE DeviceID = {1} ORDER BY ParentID, ID",
                                                    GuruxAMI.Server.AppHost.GetTableName<GXAmiProperty>(Db),
                                                    device.Id);
                List<GXAmiProperty> properties = Db.SqlList<GXAmiProperty>(query);
                ulong id = 0;
                List<GXAmiProperty> list = new List<GXAmiProperty>();
                foreach (GXAmiProperty it in properties)
                {
                    //If parent changes.
                    if (it.ParentID != id)
                    {
                        if (id != 0)
                        {
                            object target = items[id];
                            if (target is GXAmiCategory)
                            {
                                (target as GXAmiCategory).Properties = list.ToArray();
                            }
                            else if (target is GXAmiDataTable)
                            {
                                (target as GXAmiDataTable).Columns = list.ToArray();
                            }
                        }
                        id = it.ParentID;
                        list.Clear();
                    }
                    list.Add(it);
                }
                if (list.Count != 0 && id != 0)
                {
                    object target = items[id];
                    if (target is GXAmiCategory)
                    {
                        (target as GXAmiCategory).Properties = list.ToArray();
                    }
                    else if (target is GXAmiDataTable)
                    {
                        (target as GXAmiDataTable).Columns = list.ToArray();
                    }
                }

                foreach (GXAmiProperty it in properties)
                {
                    items.Add(it.Id, it);
                }
                items.Add(device.Id, device);
                //Get Parameters.                
                query = string.Format("SELECT * FROM {0} WHERE DeviceID = {1} ORDER BY ParentID, ID",
                                                    GuruxAMI.Server.AppHost.GetTableName<GXAmiParameter>(Db),
                                                    device.Id);
                List<GXAmiParameter> parameters = Db.SqlList<GXAmiParameter>(query);
                id = 0;
                List<GXAmiParameter> paramList = new List<GXAmiParameter>();                
                foreach (GXAmiParameter it in parameters)
                {
                    //If parent changes.
                    if (it.ParentID != id)
                    {
                        if (id != 0)
                        {
                            object target = items[id];
                            if (target is GXAmiDevice)
                            {
                                (target as GXAmiDevice).Parameters = paramList.ToArray();
                            }
                            else if (target is GXAmiCategory)
                            {
                                (target as GXAmiCategory).Parameters = paramList.ToArray();
                            }
                            else if (target is GXAmiDataTable)
                            {
                                (target as GXAmiDataTable).Parameters = paramList.ToArray();
                            }
                            else if (target is GXAmiProperty)
                            {
                                (target as GXAmiProperty).Parameters = paramList.ToArray();
                            }
                            else
                            {
                                throw new Exception("Unknown target.");
                            }
                        }
                        id = it.ParentID;
                        paramList.Clear();
                    }
                    paramList.Add(it);
                }
                if (paramList.Count != 0 && id != 0)
                {
                    object target = items[id];
                    if (target is GXAmiDevice)
                    {
                        (target as GXAmiDevice).Parameters = paramList.ToArray();
                    } 
                    else if (target is GXAmiCategory)
                    {
                        (target as GXAmiCategory).Parameters = paramList.ToArray();
                    }
                    else if (target is GXAmiDataTable)
                    {
                        (target as GXAmiDataTable).Parameters = paramList.ToArray();
                    }
                    else if (target is GXAmiProperty)
                    {
                        (target as GXAmiProperty).Parameters = paramList.ToArray();
                    }
                    else
                    {
                        throw new Exception("Unknown target.");
                    }
                }
                items.Clear();
                foreach (GXAmiParameter it in parameters)
                {
                    items.Add(it.TemplateId, it);
                }
                //Get Parameters.                
                query = string.Format("SELECT * FROM {0} WHERE ProfileId = {1} ORDER BY ParameterId, ID",
                                                    GuruxAMI.Server.AppHost.GetTableName<GXAmiValueItem>(Db),
                                                    device.ProfileId);
                List<GXAmiValueItem> values = Db.SqlList<GXAmiValueItem>(query);
                id = 0;
                List<GXAmiValueItem> valueList = new List<GXAmiValueItem>();
                foreach (GXAmiValueItem it in values)
                {
                    //If parent changes.
                    if (it.ParameterId != null && it.ParameterId != id)
                    {
                        if (id != 0)
                        {
                            if (items.ContainsKey(id))
                            {
                                object target = items[id];
                                (target as GXAmiParameter).Values = valueList.ToArray();
                            }
                            else
                            {
                                System.Diagnostics.Debug.WriteLine("Failed to find value item parent: " + it.UIValue);
                            }
                        }
                        id = it.ParameterId.Value;
                        valueList.Clear();
                    }
                    valueList.Add(it);
                }

            }
            //Get Media settings.         
            query = "SELECT * FROM " + GuruxAMI.Server.AppHost.GetTableName<GXAmiDeviceMedia>(Db) + 
                            " WHERE DeviceId = " + device.Id.ToString();
            List<GXAmiDeviceMedia> list2 = Db.Select<GXAmiDeviceMedia>(query);            
            device.Medias = list2.ToArray();
        }
Esempio n. 11
0
 /// <summary>
 /// Search device.
 /// </summary>
 void SearchDevice()
 {
     try
     {
         DeviceSearchBtn.Enabled = false;
         object[] tmp = Client.Search(new string[] { DeviceSearchBtn.Text }, ActionTargets.Device, SearchType.All);
         //Remove exists devices.
         PropertyList.Items.Clear();
         PropertyToListItem.Clear();
         DevicesList.Items.Clear();
         DeviceToListItem.Clear();       
         GXAmiDevice[] dcs = new GXAmiDevice[tmp.Length];
         Array.Copy(tmp, dcs, tmp.Length);
         OnDevicesAdded(null, null, dcs);
     }
     catch (Exception ex)
     {
         GXCommon.ShowError(this.ParentComponent, Gurux.DeviceSuite.Properties.Resources.GuruxDeviceSuiteTxt, ex);
     }
     DeviceSearchBtn.Enabled = true;
     DeviceSearchBtn.Focus();
 }
 /// <summary>
 /// Device settings are changed.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="devices"></param>
 void DC_OnDevicesUpdated(object sender, GXAmiDevice[] devices)
 {
     return;
 }        
 /// <summary>
 /// If device is removed remove device templates.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="devices"></param>
 void DC_OnDevicesRemoved(object sender, GXAmiDevice[] devices)
 {
     //TODO: Delete template files.
 }
 public GXCreateDeviceResponse(GXAmiDevice[] devices)
 {
     Devices = devices;
 }
 /// <summary>
 /// Schedule is started or stopped.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="schedules"></param>
 void Client_OnSchedulesStateChanged(object sender, GXAmiSchedule[] schedules)
 {
     //Update schedule state.
     lock (Schedules)
     {
         GXAmiDevice device = new GXAmiDevice();
         foreach (GXAmiSchedule it in schedules)
         {
             if (Schedules[it.Id].Status != it.Status)
             {
                 Schedules[it.Id].Status = it.Status;
                 if (it.Status == ScheduleState.Run)
                 {
                     foreach (GXAmiScheduleTarget t in Schedules[it.Id].Targets)
                     {
                         if (t.TargetType == TargetType.Device)
                         {               
                             device.Id = t.TargetID;
                             Client.Read(device);
                         }
                     }
                 }
                 else if (it.Status == ScheduleState.Start)
                 {
                     System.Collections.Generic.IDictionary<string, object> data = new Dictionary<string, object>();
                     data.Add(new KeyValuePair<string, object>("Client", Client));
                     //Target is added by ID because devices can be added or removed from it.
                     data.Add(new KeyValuePair<string, object>("Target", it.Id));
                     JobKey id = new JobKey(it.Name + it.Id.ToString(), it.Name + it.Id.ToString());
                     IJobDetail job = JobBuilder.Create(typeof(GXScheduleJob)).WithIdentity(new JobKey(it.Name + it.Id.ToString(), it.Name + it.Id.ToString()))
                         .WithIdentity(id)
                         .SetJobData(new JobDataMap(data))
                         .Build();
                     ITrigger t = GetTrigger(it);
                     m_sched.ScheduleJob(job, t);
                 }
                 else if (it.Status == ScheduleState.End)
                 {
                     if ((it.Status & ScheduleState.Run) != 0)
                     {
                         it.Status = ScheduleState.None;
                         m_sched.DeleteJob(new JobKey(it.Name + it.Id.ToString(), it.Name + it.Id.ToString()));
                     }
                 }
             }
         }
     }
     if (m_ScheduleStateChanged != null)
     {
         m_ScheduleStateChanged(sender, schedules);
     }
 }