Esempio n. 1
0
        /// <summary>
        /// Get available devices.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public GXDevicesResponse Post(GXDevicesRequest request)
        {
            lock (Db)
            {
                IAuthSession       s = this.GetSession(false);
                List <GXAmiDevice> list;
                //Returns all devices of the user.
                if (request.UserID != 0)
                {
                    list = GetDevices(s, Db, request.UserID, 0, 0, 0, request.Removed);
                }
                //Returns all devices from the user goup
                else if (request.UserGroupID != 0)
                {
                    list = GetDevices(s, Db, 0, request.UserGroupID, 0, 0, request.Removed);
                }
                //Returns all devices from the device goup
                else if (request.DeviceGroupID != 0)
                {
                    list = GetDevices(s, Db, 0, 0, request.DeviceGroupID, 0, request.Removed);
                }
                //Returns device
                else if (request.DeviceID != 0)
                {
                    list = GetDevices(s, Db, 0, 0, 0, request.DeviceID, request.Removed);
                }
                //Returns all devices that DC can access.
                else if (request.DataCollectorId != 0)
                {
                    string query = string.Format("SELECT DISTINCT {0}.* FROM {0} INNER JOIN {1} ON {0}.ID = {1}.DeviceID " +
                                                 "WHERE (DataCollectorID IS NULL OR DataCollectorID = {2}) AND Removed IS NULL",
                                                 GuruxAMI.Server.AppHost.GetTableName <GXAmiDevice>(Db),
                                                 GuruxAMI.Server.AppHost.GetTableName <GXAmiDeviceMedia>(Db),
                                                 request.DataCollectorId);
                    list = Db.Select <GXAmiDevice>(query);
                }
                //Return all devices.
                else
                {
                    list = GetDevices(s, Db, 0, 0, 0, 0, request.Removed);
                }
                //If devices are find by device profile.
                if (request.DeviceProfileIDs != null && request.DeviceProfileIDs.Length != 0)
                {
                    List <ulong> tmp = new List <ulong>(request.DeviceProfileIDs);
                    for (int pos = 0; pos != list.Count; ++pos)
                    {
                        if (tmp.Find(p => p == list[pos].Id) == 0)
                        {
                            list.Remove(list[pos]);
                            --pos;
                        }
                    }
                }

                //Remove excluded devices.
                if (request.Excluded != null && request.Excluded.Length != 0)
                {
                    List <ulong> ids = new List <ulong>(request.Excluded);
                    var          excludeUserGroups = from c in list where !ids.Contains(c.Id) select c;
                    list = excludeUserGroups.ToList();
                }
                //Get devices by range.
                if (request.Index != 0 || request.Count != 0)
                {
                    if (request.Count == 0 || request.Index + request.Count > list.Count)
                    {
                        request.Count = list.Count - request.Index;
                    }
                    list.RemoveRange(0, request.Index);
                    var limitUserGroups = list.Take(request.Count);
                    list = limitUserGroups.ToList();
                }

                if (request.Content != DeviceContentType.Main)
                {
                    foreach (GXAmiDevice it in list)
                    {
                        UpdateContent(Db, it, request.Content);
                    }
                }
                return(new GXDevicesResponse(list.ToArray()));
            }
        }
        /// <summary>
        /// Get available devices.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
		public GXDevicesResponse Post(GXDevicesRequest request)
		{
            lock (Db)
            {
                IAuthSession s = this.GetSession(false);
                List<GXAmiDevice> list;
                //Returns all devices of the user.
                if (request.UserID != 0)
                {
                    list = GetDevices(s, Db, request.UserID, 0, 0, 0, request.Removed);
                }
                //Returns all devices from the user goup
                else if (request.UserGroupID != 0)
                {
                    list = GetDevices(s, Db, 0, request.UserGroupID, 0, 0, request.Removed);
                }
                //Returns all devices from the device goup
                else if (request.DeviceGroupID != 0)
                {
                    list = GetDevices(s, Db, 0, 0, request.DeviceGroupID, 0, request.Removed);
                }
                //Returns device
                else if (request.DeviceID != 0)
                {
                    list = GetDevices(s, Db, 0, 0, 0, request.DeviceID, request.Removed);
                }
                //Returns all devices that DC can access.
                else if (request.DataCollectorId != 0)
                {
                    string query = string.Format("SELECT DISTINCT {0}.* FROM {0} INNER JOIN {1} ON {0}.ID = {1}.DeviceID " +
                                                "WHERE (DataCollectorID IS NULL OR DataCollectorID = {2}) AND Removed IS NULL",
                                    GuruxAMI.Server.AppHost.GetTableName<GXAmiDevice>(Db),
                                    GuruxAMI.Server.AppHost.GetTableName<GXAmiDeviceMedia>(Db),
                                    request.DataCollectorId);
                    list = Db.Select<GXAmiDevice>(query);
                }
                //Return all devices.
                else
                {
                    list = GetDevices(s, Db, 0, 0, 0, 0, request.Removed);                    
                }
                //If devices are find by device profile.
                if (request.DeviceProfileIDs != null && request.DeviceProfileIDs.Length != 0)
                {
                    List<ulong> tmp = new List<ulong>(request.DeviceProfileIDs);
                    for (int pos = 0; pos != list.Count; ++pos)
                    {
                        if (tmp.Find(p => p == list[pos].Id) == 0)
                        {
                            list.Remove(list[pos]);
                            --pos;
                        }

                    }
                }                

                //Remove excluded devices.
                if (request.Excluded != null && request.Excluded.Length != 0)
                {
                    List<ulong> ids = new List<ulong>(request.Excluded);
                    var excludeUserGroups = from c in list where !ids.Contains(c.Id) select c;
                    list = excludeUserGroups.ToList();
                }
                //Get devices by range.
                if (request.Index != 0 || request.Count != 0)
                {
                    if (request.Count == 0 || request.Index + request.Count > list.Count)
                    {
                        request.Count = list.Count - request.Index;
                    }
                    list.RemoveRange(0, request.Index);
                    var limitUserGroups = list.Take(request.Count);
                    list = limitUserGroups.ToList();
                }            
                
                if (request.Content != DeviceContentType.Main)
                {
                    foreach (GXAmiDevice it in list)
                    {
                        UpdateContent(Db, it, request.Content);
                    }
                }
                return new GXDevicesResponse(list.ToArray());
            }
		}