All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.antwerkz.sofia.Method.kt Maven / Gradle / Ivy

The newest version!
package com.antwerkz.sofia

import java.text.DateFormat
import java.text.Format
import java.text.MessageFormat
import java.text.NumberFormat
import java.util.Locale

class Method(
    val language: String,
    val loggingType: LoggingType,
    val key: String,
    val value: String
) {
    var logOnce: Boolean = false
    var logged = java.lang.Boolean.FALSE
        private set
    var argCount: Int = 0
        private set
    val arguments = ArrayList()
    val parameters = ArrayList>()
    var logLevel: String? = null
        private set
    var name: String

    init {
        name = key
        if (key.startsWith("@")) {
            logged = java.lang.Boolean.TRUE
            var level = key.substring(1, key.indexOf(".")).lowercase(Locale.getDefault())
            if (level.endsWith("[once]") ?: false) {
                logOnce = true
                level = level.dropLast(6)
            }
            logLevel = level
            name = key.substring(key.indexOf(".") + 1)
        }
        countArguments()
    }

    private fun countArguments() {
        val messageFormat = MessageFormat(value)
        val formats = messageFormat.formats
        argCount = messageFormat.formats.size
        for (i in 0..argCount - 1) {
            parameters.add(Pair(getType(language, formats[i]), "arg${i}"))
            arguments.add("arg${i}")
        }
    }

    private fun getType(language: String, format: Format?): String {
        return when (format) {
            null -> if (language == "java") "Object" else "Any"
            is DateFormat -> "Date"
            is NumberFormat -> "Number"
            else -> "Object"
        }
    }

    val methodName: String
        get() {
            val parts = name.split("\\.".toRegex()).dropLastWhile({ it.isEmpty() }).toTypedArray()
            val name = StringBuilder()
            for (part in parts) {
                name.append(if (name.length != 0) LocalizerGenerator.capitalize(part) else part)
            }
            return name.toString()
        }

    val loggerName: String
        get() {
            val parts = name.split("\\.".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
            val name = StringBuilder()
            name.append("log")
            for (part in parts) {
                name.append(Character.toTitleCase(part.get(0))).append(part.substring(1))
            }
            return name.toString()
        }

    override fun toString(): String {
        return "Method {key='${key}', parameters=${parameters}', logged=${logged}', logLevel='${logLevel}, value='${value}'," +
            " argCount=${argCount}, arguments=${arguments}}"
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy