/// <summary> /// Get the requestes connection. /// </summary> /// <param name="id">Connection unique identifier (DB).</param> /// <returns>The requested instance of <see cref="ControlModuleConnection"/> or <c>null</c> if the connection cannot be found.</returns> public ControlModuleConnection GetByID(Int64 id) { string sql = string.Empty; Logger.LogDebug(this, "[CLASS].GetByID({0})", id); try { Connect(); sql = @"SELECT " + ControlModuleConnectionManager.SQL_FIELDS_SELECT + @" FROM " + ControlModuleConnectionManager.SQL_TABLE + @" WHERE id = @id"; SetParameter("id", id); using (SQLiteDataReader reader = ExecuteReader(sql)) { if (reader.Read()) { return(ControlModuleConnectionManager.ReadEntityRecord(reader)); } } return(null); } catch (Exception ex) { Logger.LogError(this, ex); throw; } finally { Disconnect(); } }
/// <summary> /// Gets all connections using the same digital address. /// </summary> /// <param name="address">Digital address.</param> /// <returns>The requested list of <see cref="ControlModuleConnection"/> related to the specified address.</returns> public List <ControlModuleConnection> GetDuplicated(int address) { string sql = string.Empty; ControlModuleConnection item = null; List <long> repeated = new List <long>(); List <ControlModuleConnection> items = new List <ControlModuleConnection>(); Logger.LogDebug(this, "[CLASS].GetDuplicated({0})", address); try { Connect(); // Get repeated addresses sql = @"SELECT address, COUNT(*) c FROM " + ControlModuleConnectionManager.SQL_TABLE + @" GROUP BY address HAVING c > 1 And address = @address;"; SetParameter("address", address); using (SQLiteDataReader reader = ExecuteReader(sql)) { while (reader.Read()) { repeated.Add(reader.GetInt64(0)); } } // Get connections with repeated addresses sql = @"SELECT " + ControlModuleConnectionManager.SQL_FIELDS_SELECT + @" FROM " + ControlModuleConnectionManager.SQL_TABLE + @" WHERE address = @address ORDER BY id"; SetParameter("address", address); using (SQLiteDataReader reader = ExecuteReader(sql)) { while (reader.Read()) { item = ControlModuleConnectionManager.ReadEntityRecord(reader); if (item != null) { items.Add(item); } } } return(items); } catch (Exception ex) { Logger.LogError(this, ex); throw; } finally { Disconnect(); } }
/// <summary> /// Gets connections of the specified type for the specified element. /// </summary> /// <param name="element">Element.</param> /// <param name="type">Type of element.</param> /// <returns>The requested list of <see cref="ControlModuleConnection"/> related to the specified element.</returns> public ControlModuleConnection[] GetByElement(ElementBase element, ControlModule.ModuleType type) { string sql = string.Empty; ControlModuleConnection item = null; ControlModuleConnection[] items = null; Logger.LogDebug(this, "[CLASS].GetByElement([{0}], {1})", (element != null ? element.ID.ToString() : "null"), type); // Return an empty array if element is null or doesn't have outputs if (element == null) { return(new ControlModuleConnection[0]); } else if (type == ControlModule.ModuleType.Accessory && (element.AccessoryConnections == null || element.AccessoryConnections.Length <= 0)) { return(new ControlModuleConnection[0]); } else if (type == ControlModule.ModuleType.Sensor && (element.FeedbackConnections == null || element.FeedbackConnections.Length <= 0)) { return(new ControlModuleConnection[0]); } try { switch (type) { case ControlModule.ModuleType.Accessory: items = new ControlModuleConnection[element.AccessoryConnections.Length]; break; case ControlModule.ModuleType.Sensor: items = new ControlModuleConnection[element.FeedbackConnections.Length]; break; } Connect(); sql = @"SELECT " + ControlModuleConnectionManager.SQL_FIELDS_SELECT + @" FROM " + ControlModuleConnectionManager.SQL_TABLE + @" con WHERE blockid = @blockid And @type = (SELECT type FROM " + ControlModuleManager.SQL_TABLE + @" deco WHERE con.decoderid = deco.id) ORDER BY [index] Asc, id Asc"; SetParameter("blockid", element.ID); SetParameter("type", (int)type); using (SQLiteDataReader reader = ExecuteReader(sql)) { while (reader.Read()) { item = ControlModuleConnectionManager.ReadEntityRecord(reader); if (item != null && item.Index <= items.Length) { items[item.Index - 1] = item; } } } return(items); } catch (Exception ex) { Logger.LogError(this, ex); throw; } finally { Disconnect(); } }
/// <summary> /// Gets all blocks from a specified switchboard panel. /// </summary> /// <param name="decoderId">The switchboard panel unique identifier (DB).</param> /// <returns>The requested list of <see cref="ElementBase"/>.</returns> public List <ControlModuleConnection> GetByDecoder(int decoderId) { string sql = string.Empty; ControlModule module = null; ControlModuleConnection item = null; List <ControlModuleConnection> items = new List <ControlModuleConnection>(); Logger.LogDebug(this, "[CLASS].GetByDecoder({0})", decoderId); try { Connect(); sql = @"SELECT " + ControlModuleManager.SQL_FIELDS_SELECT + @" FROM " + ControlModuleManager.SQL_TABLE + @" WHERE id = @id"; SetParameter("id", decoderId); using (SQLiteDataReader reader = ExecuteReader(sql)) { if (reader.Read()) { module = ControlModuleManager.ReadEntityRecord(reader); } } if (module == null) { return(items); } sql = @"SELECT " + ControlModuleConnectionManager.SQL_FIELDS_SELECT + @" FROM " + ControlModuleConnectionManager.SQL_TABLE + @" WHERE decoderid = @decoderid ORDER BY name"; SetParameter("decoderid", decoderId); using (SQLiteDataReader reader = ExecuteReader(sql)) { while (reader.Read()) { item = ControlModuleConnectionManager.ReadEntityRecord(reader); if (item != null) { items.Add(item); } } } return(items); } catch (Exception ex) { Logger.LogError(this, ex); throw; } finally { Disconnect(); } }