diff --git a/src/MainExtension01.kt b/src/MainExtension01.kt index 4a259cc..102d265 100644 --- a/src/MainExtension01.kt +++ b/src/MainExtension01.kt @@ -260,7 +260,7 @@ class MainExtension01 { val value = variables["AL"].orEmpty() if (ValidString(value)) { val airplane = - sb.firstOrNull { it.Category == Category.Airline_Name.name && it.TAG == value } + sb.firstOrNull { it.Category == Category.Airplane_Name.name && it.TAG == value } if (airplane != null) { if (ValidFile(airplane.Path)) { files.add(airplane.Path) diff --git a/src/barix/BarixConnection.kt b/src/barix/BarixConnection.kt index ff170be..bf64281 100644 --- a/src/barix/BarixConnection.kt +++ b/src/barix/BarixConnection.kt @@ -111,11 +111,13 @@ class BarixConnection(val index: UInt, var channel: String, val ipaddress: Strin try { val chunk = ByteArray(if (bb.remaining() > maxUDPsize) maxUDPsize else bb.remaining()) bb.get(chunk) + println("Buffer remain: $bufferRemain, sending chunk size: ${chunk.size}") while(bufferRemain0){ - val bb = ByteArray(din.available()) - din.read(bb) - // B4A format, 4 bytes di depan adalah size - val str = String(bb, 4, bb.size - 4) - if (ValidString(str)) { - // Valid command from Barix is in format $"STATUSBARIX;VU;BuffRemain;StatusData"$ - pattern.find(str)?.let { matchResult -> - val (vu, buffremain, statusdata) = matchResult.destructured - val status = BarixStatus( - socket.inetAddress.hostAddress, - vu.toInt(), - buffremain.toInt(), - statusdata.toIntOrNull() ?: 0 - ) - //Logger.info { "Received valid command from $key : $status" } - cb.accept(status) - } ?: run { - Logger.warn { "Invalid command format from $key : $str" } + try{ + val din = socket.getInputStream() + while (isActive) { + + if (din.available()>0){ + val bb = ByteArray(din.available()) + din.read(bb) + // B4A format, 4 bytes di depan adalah size + val str = String(bb, 4, bb.size - 4) + if (ValidString(str)) { + // Valid command from Barix is in format $"STATUSBARIX;VU;BuffRemain;StatusData"$ + pattern.find(str)?.let { matchResult -> + val (vu, buffremain, statusdata) = matchResult.destructured + val status = BarixStatus( + socket.inetAddress.hostAddress, + vu.toInt(), + buffremain.toInt(), + statusdata.toIntOrNull() ?: 0 + ) + //Logger.info { "Received valid command from $key : $status" } + cb.accept(status) + } ?: run { + Logger.warn { "Invalid command format from $key : $str" } + } } } } + } catch (ex:Exception){ + Logger.error { "Error in communication with Streamer Output with IP $key, Message : ${ex.message}" } } + Logger.info { "Finished communicating with Streamer Output with IP $key" } socketMap.remove(key) diff --git a/src/commandServer/TCP_Android_Command_Server.kt b/src/commandServer/TCP_Android_Command_Server.kt index c3ccc6b..e7d47a0 100644 --- a/src/commandServer/TCP_Android_Command_Server.kt +++ b/src/commandServer/TCP_Android_Command_Server.kt @@ -349,7 +349,7 @@ class TCP_Android_Command_Server { .filter { it.isNotBlank() } .forEach { al -> val sb = db.soundDB.List - .filter { it.Category.equals(Category.Airline_Name.name, true) } + .filter { it.Category.equals(Category.Airplane_Name.name, true) } .filter { it.TAG.equals(al, true)} .distinctBy { it.TAG } VARAPTOTAL.addAll(sb) diff --git a/src/content/Category.kt b/src/content/Category.kt index 10f18a9..dc4f965 100644 --- a/src/content/Category.kt +++ b/src/content/Category.kt @@ -3,7 +3,7 @@ package content @Suppress("unused") enum class Category(name: String) { Airline_Code("Airline_Code"), - Airline_Name("Airline_Name"), + Airplane_Name("Airplane_Name"), AlphabetNumeric("AlphabetNumeric"), City("City"), Phrase("Phrase"), diff --git a/src/database/MariaDB.kt b/src/database/MariaDB.kt index f1fa8f0..bbf8125 100644 --- a/src/database/MariaDB.kt +++ b/src/database/MariaDB.kt @@ -2280,7 +2280,7 @@ class MariaDB( fun Find_Soundbank_AirplaneName(tag: String) : List{ return soundDB.List - .filter{ it.Category== Category.Airline_Name.name } + .filter{ it.Category== Category.Airplane_Name.name } .filter { it.TAG.equals(tag,true)} } diff --git a/src/web/WebApp.kt b/src/web/WebApp.kt index c2d8e93..7c43f46 100644 --- a/src/web/WebApp.kt +++ b/src/web/WebApp.kt @@ -20,6 +20,7 @@ import database.BroadcastZones import database.LanguageLink import database.MariaDB import database.Messagebank +import database.ScheduleBank import database.SoundChannel import database.Soundbank import database.UserDB @@ -75,15 +76,13 @@ class WebApp(val listenPort: Int, val userlist: List>) { val username = it.formParam("username") val password = it.formParam("password") if (username == null || password == null) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Username and password are required"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Username and password are required"))) return@post } // Check if user exists in userlist val user = userlist.find { it.first == username && it.second == password } if (user == null) { - it.status(401) - .result(objectmapper.writeValueAsString(resultMessage("Invalid username or password"))) + it.status(401).result(objectmapper.writeValueAsString(resultMessage("Invalid username or password"))) return@post } // Set user session @@ -135,28 +134,16 @@ class WebApp(val listenPort: Int, val userlist: List>) { SendReply(wsMessageContext, cmd.command, "OK") } - "getPagingQueue" -> { - SendReply( - wsMessageContext, - cmd.command, - objectmapper.writeValueAsString(db.queuepagingDB.List) - ) + "getPagingQueue" ->{ + SendReply(wsMessageContext, cmd.command, objectmapper.writeValueAsString(db.queuepagingDB.List)) } - "getAASQueue" -> { - SendReply( - wsMessageContext, - cmd.command, - objectmapper.writeValueAsString(db.queuetableDB.List) - ) + "getAASQueue" ->{ + SendReply(wsMessageContext, cmd.command, objectmapper.writeValueAsString(db.queuetableDB.List)) } "getStreamerOutputs" -> { - SendReply( - wsMessageContext, - cmd.command, - objectmapper.writeValueAsString(StreamerOutputs.values.toList()) - ) + SendReply(wsMessageContext, cmd.command, objectmapper.writeValueAsString(StreamerOutputs.values.toList())) } else -> { @@ -194,19 +181,19 @@ class WebApp(val listenPort: Int, val userlist: List>) { before { CheckUsers(it) } } path("api") { - path("VoiceType") { - get { + path("VoiceType"){ + get{ it.result(objectmapper.writeValueAsString(VoiceType.entries.map { vt -> vt.name })) } } path("Category") { get { - it.result(objectmapper.writeValueAsString(Category.entries.map { cat -> cat.name })) + it.result(objectmapper.writeValueAsString(Category.entries.map { cat -> cat.name}) ) } } path("Language") { get { - it.result(objectmapper.writeValueAsString(Language.entries.map { lang -> lang.name })) + it.result(objectmapper.writeValueAsString(Language.entries.map { lang -> lang.name }) ) } } path("ScheduleDay") { @@ -250,7 +237,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { } get("AirlineTags") { ctx -> val value = db.soundDB.List - .filter { it.Category == Category.Airline_Name.name } + .filter { it.Category == Category.Airplane_Name.name } .distinctBy { it.TAG } .sortedBy { it.TAG } .map { KeyValueMessage(it.TAG, it.Description) } @@ -280,32 +267,20 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (ValidFile(addvalue.Path)) { if (db.soundDB.Add(addvalue)) { db.soundDB.Resort() - it.result( - objectmapper.writeValueAsString( - resultMessage( - "OK" - ) - ) - ) + it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else it.status(500) .result(objectmapper.writeValueAsString(resultMessage("Failed to add soundbank to database"))) } else it.status(400) .result(objectmapper.writeValueAsString(resultMessage("Invalid Path, file does not exist"))) } else it.status(400) .result(objectmapper.writeValueAsString(resultMessage("TAG=${addvalue.TAG} already exists for the same Language=${addvalue.Language} and Category=${addvalue.Category}"))) - } else it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Path"))) - } else it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Language"))) - } else it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Category"))) - } else it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid TAG"))) - } else it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Description"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Path"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Language"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Category"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid TAG"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Description"))) } catch (_: Exception) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid request body"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid request body"))) } } delete("List") { @@ -314,8 +289,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.soundDB.Get() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to truncate soundbank table"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate soundbank table"))) } } delete("DeleteByIndex/{index}") { @@ -328,8 +302,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.soundDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to delete soundbank with index $index"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete soundbank with index $index"))) } } } @@ -343,14 +316,12 @@ class WebApp(val listenPort: Int, val userlist: List>) { val sb = db.soundDB.List.find { xx -> xx.index == index } if (sb == null) { // soundbank dengan index tersebut tidak ditemukan - it.status(404) - .result(objectmapper.writeValueAsString(resultMessage("Soundbank with index $index not found"))) + it.status(404).result(objectmapper.writeValueAsString(resultMessage("Soundbank with index $index not found"))) } else { // soundbank dengan index tersebut ditemukan, sekarang update val json: JsonNode = objectmapper.readTree(it.body()) if (json.isEmpty) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body"))) } else { val _description = json.get("Description").asText("") val _tag = json.get("TAG").asText("") @@ -373,8 +344,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { sb.Category = _category changed = true } else { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Category"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Category"))) return@patch } } @@ -387,8 +357,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { sb.Path = _path changed = true } else { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Path, file does not exist"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Path, file does not exist"))) return@patch } } @@ -396,8 +365,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.soundDB.UpdateByIndex(index.toInt(), sb)) { db.soundDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) - } else it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to update soundbank with index $index"))) + } else it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to update soundbank with index $index"))) } else it.status(400) .result(objectmapper.writeValueAsString(resultMessage("Nothing has changed for soundbank with index $index"))) } @@ -416,15 +384,13 @@ class WebApp(val listenPort: Int, val userlist: List>) { xlsxdata.write(out) } } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to export soundbank to XLSX"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export soundbank to XLSX"))) } } post("ImportXLSX") { val uploaded = it.uploadedFile("file") if (uploaded == null) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("No file uploaded"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("No file uploaded"))) return@post } try { @@ -433,12 +399,10 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.soundDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to import soundbank from XLSX"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to import soundbank from XLSX"))) } } catch (e: Exception) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file"))) } } } @@ -462,38 +426,23 @@ class WebApp(val listenPort: Int, val userlist: List>) { val voice_type = json.get("Voice_Type")?.asText("") ?: "" val message_detail = json.get("Message_Detail")?.asText("") ?: "" val message_tags = json.get("Message_TAGS")?.asText("") ?: "" - if (description.isNotEmpty()) { - if (language.isNotEmpty() && Language.entries.any { lang -> lang.name == language }) { - if (ann_id > 0u) { - if (voice_type.isNotEmpty() && VoiceType.entries.any { vt -> vt.name == voice_type }) { - if (message_detail.isNotEmpty()) { - if (message_tags.isNotEmpty()) { - val mb = Messagebank( - 0u, - description, - language, - ann_id, - voice_type, - message_detail, - message_tags - ) - if (db.messageDB.Add(mb)) { + if (description.isNotEmpty()){ + if (language.isNotEmpty() && Language.entries.any{ lang -> lang.name == language }){ + if (ann_id>0u){ + if (voice_type.isNotEmpty() && VoiceType.entries.any{ vt -> vt.name == voice_type }){ + if (message_detail.isNotEmpty()){ + if (message_tags.isNotEmpty()){ + val mb = Messagebank(0u, description, language, ann_id, voice_type, message_detail, message_tags) + if (db.messageDB.Add(mb)){ db.messageDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) - } else it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to add messagebank to database"))) - } else it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Message_TAGS"))) - } else it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Message_Detail"))) - } else it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Voice_Type"))) - } else it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid ANN_ID"))) - } else it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Language"))) - } else it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Description"))) + } else it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to add messagebank to database"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Message_TAGS"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Message_Detail"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Voice_Type"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid ANN_ID"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Language"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Description"))) } delete("List") { // truncate messagebank table @@ -501,8 +450,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.messageDB.Get() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to truncate messagebank table"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate messagebank table"))) } } delete("DeleteByIndex/{index}") { @@ -515,8 +463,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.messageDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to delete messagebank with index $index"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete messagebank with index $index"))) } } } @@ -528,13 +475,11 @@ class WebApp(val listenPort: Int, val userlist: List>) { } else { val mb = db.messageDB.List.find { xx -> xx.index == index } if (mb == null) { - it.status(404) - .result(objectmapper.writeValueAsString(resultMessage("Messagebank with index $index not found"))) + it.status(404).result(objectmapper.writeValueAsString(resultMessage("Messagebank with index $index not found"))) } else { val json: JsonNode = objectmapper.readTree(it.body()) if (json.isEmpty) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body"))) } else { val _description = json.get("Description").asText("") val _language = json.get("Language").asText("") @@ -561,8 +506,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { mb.Voice_Type = _voice_type changed = true } else { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Voice_Type"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Voice_Type"))) return@patch } } @@ -598,15 +542,13 @@ class WebApp(val listenPort: Int, val userlist: List>) { xlsxdata.write(out) } } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to export messagebank to XLSX"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export messagebank to XLSX"))) } } post("ImportXLSX") { val uploaded = it.uploadedFile("file") if (uploaded == null) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("No file uploaded"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("No file uploaded"))) return@post } try { @@ -615,12 +557,10 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.messageDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to import messagebank from XLSX"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to import messagebank from XLSX"))) } } catch (e: Exception) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file"))) } } } @@ -629,37 +569,33 @@ class WebApp(val listenPort: Int, val userlist: List>) { // get language link list it.result(MariaDB.ArrayListtoString(db.languageDB.List)) } - post("Add") { + post("Add"){ // Parse JSON from request body val json: JsonNode = objectmapper.readTree(it.body()) val tag = json.get("tag").asText("") val languages = json.get("language").asText("").split(";") println("Add Language Link, tag=$tag, languages=$languages") - if (ValidString(tag)) { - if (languages.all { xx -> Language.entries.any { yy -> yy.name.equals(xx, true) } }) { - if (!db.languageDB.List.any { ll -> ll.TAG.equals(tag, true) }) { + if (ValidString(tag)){ + if (languages.all { xx -> Language.entries.any { yy -> yy.name.equals(xx,true)} }){ + if (!db.languageDB.List.any { ll -> ll.TAG.equals(tag,true) }) { val newvalue = LanguageLink(0u, tag, languages.joinToString(";")) - if (db.languageDB.Add(newvalue)) { + if (db.languageDB.Add(newvalue)){ db.languageDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to add language link to database"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to add language link to database"))) println("Failed to add language link to database") } } else { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("TAG=$tag already exists"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("TAG=$tag already exists"))) println("TAG=$tag already exists") } } else { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Contains unsupported language"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Contains unsupported language"))) println("Contains unsupported language") } } else { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid tag or language"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid tag or language"))) println("Invalid tag") } } @@ -669,8 +605,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.languageDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to truncate language link table"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate language link table"))) } } delete("DeleteByIndex/{index}") { @@ -683,8 +618,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.languageDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to delete language link with index $index"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete language link with index $index"))) } } } @@ -696,13 +630,11 @@ class WebApp(val listenPort: Int, val userlist: List>) { } else { val ll = db.languageDB.List.find { xx -> xx.index == index } if (ll == null) { - it.status(404) - .result(objectmapper.writeValueAsString(resultMessage("Language link with index $index not found"))) + it.status(404).result(objectmapper.writeValueAsString(resultMessage("Language link with index $index not found"))) } else { val json: JsonNode = objectmapper.readTree(it.body()) if (json.isEmpty) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body"))) } else { val _tag = json.get("tag").asText("") val _language = json.get("language").asText("") @@ -739,15 +671,13 @@ class WebApp(val listenPort: Int, val userlist: List>) { xlsxdata.write(out) } } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to export language link to XLSX"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export language link to XLSX"))) } } post("ImportXLSX") { val uploaded = it.uploadedFile("file") if (uploaded == null) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("No file uploaded"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("No file uploaded"))) return@post } try { @@ -756,12 +686,10 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.languageDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to import language link from XLSX"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to import language link from XLSX"))) } } catch (e: Exception) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file"))) } } } @@ -776,12 +704,53 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.scheduleDB.Get() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to truncate schedulebank table"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate schedulebank table"))) } } - post("Add") { + post("Add"){ // TODO add new schedule + // recheck lagi tambahan steph + val json: JsonNode = objectmapper.readTree(it.body()) + val description = json.get("Description")?.asText("") ?: "" + val day = json.get("Day")?.asText("") ?: "" + val time = json.get("Time")?.asText("") ?: "" + val soundpath = json.get("Soundpath")?.asText("") ?: "" + val repeat = json.get("Repeat")?.asInt()?.toUByte() ?: 0u + val enable = json.get("Enable")?.asBoolean() ?: false + val broadcast_zones = json.get("BroadcastZones")?.asText("") ?: "" + val language = json.get("Language")?.asText("") ?: "" + if (ValidString(description)){ + if (ValidString(day) && ValidScheduleDay(day)){ + if (ValidString(time) && ValidScheduleTime(time)){ + if (ValidString(soundpath) && ValidFile(soundpath)){ + if (repeat in 0u..127u){ + if (ValidString(broadcast_zones)){ + val zones = broadcast_zones.split(";") + if (zones.all { zz -> db.broadcastDB.List.any { xx -> xx.description.equals(zz,true) } }){ + if (ValidString(language) && Language.entries.any{ lang -> lang.name == language }){ + val newvalue = ScheduleBank( + 0u, + description, + day, + time, + soundpath, + repeat, + enable, + broadcast_zones, + language + ) + if (db.scheduleDB.Add(newvalue)){ + db.scheduleDB.Resort() + it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + } else it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to add schedule to database"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Language"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Contains unsupported BroadcastZones"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid BroadcastZones"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Repeat, must be between 0-127"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Soundpath"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Time format, must be HH:mm"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Day format"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Description"))) } delete("DeleteByIndex/{index}") { // delete by index @@ -793,8 +762,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.scheduleDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to delete schedule with index $index"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete schedule with index $index"))) } } } @@ -806,13 +774,11 @@ class WebApp(val listenPort: Int, val userlist: List>) { } else { val sb = db.scheduleDB.List.find { xx -> xx.index == index } if (sb == null) { - it.status(404) - .result(objectmapper.writeValueAsString(resultMessage("Schedule with index $index not found"))) + it.status(404).result(objectmapper.writeValueAsString(resultMessage("Schedule with index $index not found"))) } else { val json: JsonNode = objectmapper.readTree(it.body()) if (json.isEmpty) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body"))) } else { val _description = json.get("Description").asText("") val _time = json.get("Time").asText("") @@ -832,8 +798,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { sb.Time = _time changed = true } else { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Time format, must be HH:mm"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Time format, must be HH:mm"))) return@patch } } @@ -842,8 +807,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { sb.Day = _day changed = true } else { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Day format"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Day format"))) return@patch } } @@ -864,12 +828,11 @@ class WebApp(val listenPort: Int, val userlist: List>) { changed = true } if (ValidString(_language) && _language != sb.Language) { - if (Language.entries.any { lang -> lang.name == _language }) { + if (Language.entries.any{ lang -> lang.name == _language }) { sb.Language = _language changed = true } else { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Language"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Language"))) return@patch } } @@ -897,15 +860,13 @@ class WebApp(val listenPort: Int, val userlist: List>) { xlsxdata.write(out) } } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to export schedulebank to XLSX"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export schedulebank to XLSX"))) } } post("ImportXLSX") { val uploaded = it.uploadedFile("file") if (uploaded == null) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("No file uploaded"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("No file uploaded"))) return@post } try { @@ -1085,10 +1046,20 @@ class WebApp(val listenPort: Int, val userlist: List>) { .result(objectmapper.writeValueAsString(resultMessage("Failed to import user table from XLSX"))) } } catch (e: Exception) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file"))) } } + + //TODO kirim list message dan broadcast zones untuk ADD/Edit schedule + get("GetMessageAndBroadcastZones") { + val result = object { + //TODO filter message without input variable + val messages = db.messageDB.List + + val broadcastzones = db.broadcastDB.List + } + it.result(objectmapper.writeValueAsString(result)) + } } path("Log") { get("List") { get1 -> @@ -1108,8 +1079,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { } } else { println("Invalid logdate=$logdate") - get1.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid logdate"))) + get1.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid logdate"))) } } get("ExportXLSX") { get1 -> @@ -1118,9 +1088,9 @@ class WebApp(val listenPort: Int, val userlist: List>) { println("Export log to XLSX, date=$logdate, filter=$logfilter") if (ValiDateForLogHtml(logdate)) { val xlsxdata = if (ValidString(logfilter)) { - db.Export_Log_XLSX(logdate.replace('-', '/'), logfilter) + db.Export_Log_XLSX(logdate.replace('-','/'), logfilter) } else { - db.Export_Log_XLSX(logdate.replace('-', '/'), "") + db.Export_Log_XLSX(logdate.replace('-','/'), "") } if (xlsxdata != null) { get1.header( @@ -1132,14 +1102,12 @@ class WebApp(val listenPort: Int, val userlist: List>) { xlsxdata.write(out) } } else { - get1.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to export log to XLSX"))) + get1.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export log to XLSX"))) } - } else get1.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid logdate"))) + } else get1.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid logdate"))) } } - path("BroadcastZones") { + path("BroadcastZones"){ get("List") { it.result(MariaDB.ArrayListtoString(db.broadcastDB.List)) } @@ -1155,34 +1123,28 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.broadcastDB.Get() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to truncate broadcast zones table"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate broadcast zones table"))) } } post("Add") { - val json: JsonNode = objectmapper.readTree(it.body()) + val json : JsonNode = objectmapper.readTree(it.body()) val _description = json.get("description").asText("") val _soundchannel = json.get("SoundChannel").asText("") val _box = json.get("Box").asText("") val _relay = json.get("Relay").asText("") - if (ValidString(_description)) { - if (ValidString(_soundchannel)) { - if (ValidString(_box)) { - if (ValidString(_relay)) { - val newbp = BroadcastZones(0u, _description, _soundchannel, _box, _relay) - if (db.broadcastDB.Add(newbp)) { + if (ValidString(_description)){ + if (ValidString(_soundchannel)){ + if (ValidString(_box)){ + if (ValidString(_relay)){ + val newbp = BroadcastZones(0u,_description,_soundchannel,_box,_relay) + if (db.broadcastDB.Add(newbp)){ db.broadcastDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) - } else it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to add broadcast zone to database"))) - } else it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Relay"))) - } else it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid Box"))) - } else it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid SoundChannel"))) - } else it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid description"))) + } else it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to add broadcast zone to database"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Relay"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Box"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid SoundChannel"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid description"))) } delete("DeleteByIndex/{index}") { // delete by index @@ -1194,8 +1156,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.broadcastDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to delete broadcast zone with index $index"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete broadcast zone with index $index"))) } } } @@ -1207,13 +1168,11 @@ class WebApp(val listenPort: Int, val userlist: List>) { } else { val bz = db.broadcastDB.List.find { xx -> xx.index == index } if (bz == null) { - it.status(404) - .result(objectmapper.writeValueAsString(resultMessage("Broadcast zone with index $index not found"))) + it.status(404).result(objectmapper.writeValueAsString(resultMessage("Broadcast zone with index $index not found"))) } else { val json: JsonNode = objectmapper.readTree(it.body()) if (json.isEmpty) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body"))) } else { val _description = json.get("description").asText("") val _soundchannel = json.get("SoundChannel").asText("") @@ -1261,15 +1220,13 @@ class WebApp(val listenPort: Int, val userlist: List>) { xlsxdata.write(out) } } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to export broadcast zones to XLSX"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export broadcast zones to XLSX"))) } } post("ImportXLSX") { val uploaded = it.uploadedFile("file") if (uploaded == null) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("No file uploaded"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("No file uploaded"))) return@post } try { @@ -1278,18 +1235,16 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.broadcastDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to import broadcast zones from XLSX"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to import broadcast zones from XLSX"))) } } catch (e: Exception) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file"))) } } } - path("SoundChannel") { - get("List") { + path("SoundChannel"){ + get("List"){ it.result(MariaDB.ArrayListtoString(db.soundchannelDB.List)) } get("SoundChannelDescriptions") { @@ -1301,11 +1256,10 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.soundchannelDB.Get() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to truncate sound channel table"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate sound channel table"))) } } - patch("UpdateByIndex/{index}") { + patch("UpdateByIndex/{index}"){ val index = it.pathParam("index").toUIntOrNull() if (index == null) { @@ -1314,25 +1268,22 @@ class WebApp(val listenPort: Int, val userlist: List>) { val sc = db.soundchannelDB.List.find { xx -> xx.index == index } if (sc == null) { println("Sound channel with index $index not found") - it.status(404) - .result(objectmapper.writeValueAsString(resultMessage("Sound channel with index $index not found"))) + it.status(404).result(objectmapper.writeValueAsString(resultMessage("Sound channel with index $index not found"))) } else { val json: JsonNode = objectmapper.readTree(it.body()) println("Received JSON: $json") if (json.isEmpty) { println("UpdateByIndex with index=$index has empty body") - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body"))) } else { val _channel = json.get("description").asText("") val _ip = json.get("ip").asText("") println("Update sound channel with index $index, channel=$_channel, ip=$_ip") - if (ValidString(_channel)) { - if (ValidIPV4(_ip)) { + if (ValidString(_channel)){ + if (ValidIPV4(_ip)){ if (_channel.equals(sc.channel) && _ip.equals(sc.ip)) { println("Nothing has changed for sound channel with index $index") - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Nothing has changed for sound channel with index $index"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Nothing has changed for sound channel with index $index"))) return@patch } else { @@ -1359,13 +1310,11 @@ class WebApp(val listenPort: Int, val userlist: List>) { } else { println("Invalid IP address") - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid IP address"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid IP address"))) } } else { println("Invalid channel") - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("Invalid channel"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid channel"))) } } } @@ -1374,7 +1323,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { } - get("ExportXLSX") { + get("ExportXLSX"){ val xlsxdata = db.soundchannelDB.Export_XLSX() if (xlsxdata != null) { it.header( @@ -1386,15 +1335,13 @@ class WebApp(val listenPort: Int, val userlist: List>) { xlsxdata.write(out) } } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to export sound channel to XLSX"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export sound channel to XLSX"))) } } - post("ImportXLSX") { + post("ImportXLSX"){ val uploaded = it.uploadedFile("file") if (uploaded == null) { - it.status(400) - .result(objectmapper.writeValueAsString(resultMessage("No file uploaded"))) + it.status(400).result(objectmapper.writeValueAsString(resultMessage("No file uploaded"))) return@post } try { @@ -1403,8 +1350,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.soundchannelDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500) - .result(objectmapper.writeValueAsString(resultMessage("Failed to import sound channel from XLSX"))) + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to import sound channel from XLSX"))) } } catch (e: Exception) { it.status(400) @@ -1444,6 +1390,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { } + // Steph : coba tambah untuk QueueTable Table. Belum ada di JS file(?) path("QueueTable"){ get("List"){ @@ -1473,6 +1420,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { } } } + } } }.start(listenPort)