diff --git a/src/Main.kt b/src/Main.kt index 302150e..3ede6c9 100644 --- a/src/Main.kt +++ b/src/Main.kt @@ -1,7 +1,7 @@ import ActiveMQ.ActiveMQClient import Other.Config import Web.WebUI -import database.MySQLInjector +import database.MySQLAdapter import org.tinylog.provider.ProviderRegistry import java.util.function.Consumer @@ -13,7 +13,7 @@ fun main() { webUI.Start() val activeclient = ActiveMQClient() //activeclient.Start() - val mysql = MySQLInjector() + val mysql = MySQLAdapter() mysql.Start() activeclient.MessageConsumer = Consumer{ message -> diff --git a/src/database/MySQLAdapter.kt b/src/database/MySQLAdapter.kt new file mode 100644 index 0000000..d1d47d0 --- /dev/null +++ b/src/database/MySQLAdapter.kt @@ -0,0 +1,110 @@ +package database + +import java.sql.Connection +import java.sql.DriverManager +import config +import org.tinylog.Logger +import java.util.function.BiConsumer + +@Suppress("UNUSED") +/** + * MySQL Adapter for AAS + * @param aas_id The AAS ID (1, 2, or 3) + */ +class MySQLAdapter(val aas_id: Int) { + + init{ + require(aas_id in 1..3){ + "aas_id must be between 1 and 3" + } + } + + /** + * Try to connect to MySQL Database + * @param cb Callback function with parameters (success: Boolean, connection: Connection) + */ + private fun Connect(cb : BiConsumer){ + try { + val conn = when(aas_id){ + 1 -> DriverManager.getConnection(config.MySQL_AAS1, config.MySQL_AAS1_Username, config.MySQL_AAS1_Password) + 2 -> DriverManager.getConnection(config.MySQL_AAS2, config.MySQL_AAS2_Username, config.MySQL_AAS2_Password) + 3 -> DriverManager.getConnection(config.MySQL_AAS3, config.MySQL_AAS3_Username, config.MySQL_AAS3_Password) + else -> null + } + if (conn != null){ + cb.accept(true, conn) + } else throw Exception("Connection is null") + } catch (e : Exception){ + Logger.error { "Failed to connect MySQL Adapter for AAS$aas_id: ${e.message}" } + cb.accept(false, null) + } + } + + /** + * Get Airline Codes + * @param cb Callback function with parameters (success: Boolean, codes: ArrayList) + */ + fun GetAirlineCode(cb: BiConsumer>){ + Connect { success, connection -> + if (success){ + try { + connection!!.prepareStatement("SELECT DISTINCT TAG from aas.soundbank").use { statement -> + val result = ArrayList() + statement.executeQuery().use { rs -> + while (rs.next()){ + result.add(rs.getString("TAG")) + } + } + connection.close() + Logger.info { "GetAirlineCode succeeded, found ${result.size} codes" } + cb.accept(true, result) + } + } catch (e: Exception){ + Logger.error { "GetAirlineCode failed, exception: ${e.message}" } + cb.accept(false, arrayListOf()) + } + + } else { + Logger.error { "GetAirlineCode failed, no Connection" } + cb.accept(false, arrayListOf()) + } + } + } + + /** + * Insert records to Queue Table + * @param queue Vararg of QueueTableData to insert + */ + fun InsertToQueueTable(vararg queue: QueueTableData){ + Connect { success, connection -> + if (success){ + var updatecount : IntArray + try{ + connection!!.prepareStatement("INSERT INTO aas.queue_table (Date_Time, Source, Type, Message, SB_TAGS, BroadcastZones, Repeat, Language) VALUES (?,?,?,?,?,?,?,?)").use { ps -> + queue.forEach { data -> + ps.setString(1, data.Date_Time) + ps.setString(2, data.Source) + ps.setString(3, data.Tipe) + ps.setString(4, data.Message) + ps.setString(5, data.SB_Tags) + ps.setString(6, data.BroadcastZones) + ps.setInt(7, 1) + ps.setString(8, data.Language) + ps.addBatch() + } + updatecount = ps.executeBatch() + ps.close() + } + + connection.close() + Logger.info { "Inserted ${queue.size} records to AAS$aas_id Queue Table, update counts: ${updatecount.joinToString()}" } + } catch (e : Exception){ + Logger.error { "Failed to insert MySQL Adapter for AAS$aas_id: ${e.message}" } + } + + } else Logger.error { "InsertToQueueTable failed , no Connection" } + } + } + + +} \ No newline at end of file diff --git a/src/database/MySQLInjector.kt b/src/database/MySQLInjector.kt deleted file mode 100644 index a326e96..0000000 --- a/src/database/MySQLInjector.kt +++ /dev/null @@ -1,19 +0,0 @@ -package database - -@Suppress("UNUSED") -class MySQLInjector { - - /** - * Start MySQL Injector - */ - fun Start(){ - - } - - /** - * Stop MySQL Injector - */ - fun Stop(){ - - } -} \ No newline at end of file diff --git a/src/database/QueueTableData.kt b/src/database/QueueTableData.kt new file mode 100644 index 0000000..75031cd --- /dev/null +++ b/src/database/QueueTableData.kt @@ -0,0 +1,3 @@ +package database + +data class QueueTableData(val Date_Time: String, val Source: String, val Tipe: String, val Message: String, val SB_Tags: String, val BroadcastZones: String, val Language: String)