Skip to content

Commit

Permalink
Merge pull request #53 from smeup/patch/klint
Browse files Browse the repository at this point in the history
Patch/klint
  • Loading branch information
foresti-smeup committed Nov 29, 2023
2 parents 99e1872 + 6c8b74a commit bf25f0b
Show file tree
Hide file tree
Showing 53 changed files with 1,402 additions and 1,247 deletions.
1 change: 1 addition & 0 deletions .mvn/jvm.config
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--add-opens java.base/java.lang=ALL-UNNAMED
16 changes: 12 additions & 4 deletions base/src/main/kotlin/com/smeup/dbnative/DBMManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,24 @@ import com.smeup.dbnative.model.FileMetadata
* A datasource can contains either only tables(views) or only documents.
* File is an abstraction of table, view or document.
* */
interface DBMManager : AutoCloseable{
val connectionConfig : ConnectionConfig

interface DBMManager : AutoCloseable {
val connectionConfig: ConnectionConfig

fun existFile(name: String): Boolean
fun registerMetadata(metadata: FileMetadata, overwrite: Boolean)

fun registerMetadata(
metadata: FileMetadata,
overwrite: Boolean,
)

fun metadataOf(name: String): FileMetadata

fun openFile(name: String): DBFile

fun closeFile(name: String)

fun unregisterMetadata(name: String)

/**
* Validate connectionConfig. If validation fails, implementation has to throw an IllegalArgumentException
* */
Expand Down
37 changes: 24 additions & 13 deletions base/src/main/kotlin/com/smeup/dbnative/DBManagerBaseImpl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@
*
*/


package com.smeup.dbnative

import com.smeup.dbnative.log.Logger
import com.smeup.dbnative.metadata.MetadataRegister
import com.smeup.dbnative.metadata.file.FSMetadataRegisterImpl
import com.smeup.dbnative.model.FileMetadata
import java.util.*

abstract class DBManagerBaseImpl : DBMManager {
var logger: Logger? = null
Expand All @@ -34,14 +34,20 @@ abstract class DBManagerBaseImpl : DBMManager {
*/

override fun metadataOf(name: String): FileMetadata {
return getMetadataRegister().getMetadata(name.toUpperCase())
return getMetadataRegister().getMetadata(name.uppercase(Locale.getDefault()))
}

override fun registerMetadata(metadata: FileMetadata, overwrite: Boolean) {
override fun registerMetadata(
metadata: FileMetadata,
overwrite: Boolean,
) {
if (getMetadataRegister().contains(metadata.name)) {
if (overwrite) getMetadataRegister().remove(metadata.name)
else return
//TODO: send exception (existent metadata and no overwrite)
if (overwrite) {
getMetadataRegister().remove(metadata.name)
} else {
return
}
// TODO: send exception (existent metadata and no overwrite)
}

getMetadataRegister().registerMetadata(metadata, overwrite)
Expand All @@ -54,11 +60,10 @@ abstract class DBManagerBaseImpl : DBMManager {
}

override fun existFile(name: String): Boolean {
return getMetadataRegister().contains(name.toUpperCase())
return getMetadataRegister().contains(name.uppercase())
}

companion object {

val register: MetadataRegister
get() {
return FSMetadataRegisterImpl
Expand All @@ -68,11 +73,17 @@ abstract class DBManagerBaseImpl : DBMManager {
return register
}

fun staticRegisterMetadata(metadata: FileMetadata, overwrite: Boolean) {
fun staticRegisterMetadata(
metadata: FileMetadata,
overwrite: Boolean,
) {
if (getMetadataRegister().contains(metadata.name)) {
if (overwrite) getMetadataRegister().remove(metadata.name)
else return
//TODO: send exception (existent metadata and no overwrite)
if (overwrite) {
getMetadataRegister().remove(metadata.name)
} else {
return
}
// TODO: send exception (existent metadata and no overwrite)
}

getMetadataRegister().registerMetadata(metadata, overwrite)
Expand All @@ -85,7 +96,7 @@ abstract class DBManagerBaseImpl : DBMManager {
}

fun staticGetMetadata(name: String): FileMetadata {
return getMetadataRegister().getMetadata(name);
return getMetadataRegister().getMetadata(name)
}
}
}
10 changes: 5 additions & 5 deletions base/src/main/kotlin/com/smeup/dbnative/DBNativeAccessConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ package com.smeup.dbnative

import com.smeup.dbnative.log.Logger

data class DBNativeAccessConfig (val connectionsConfig: List<ConnectionConfig>, val logger: Logger? = null){
constructor(connectionsConfig: List<ConnectionConfig>):this(connectionsConfig, null)
data class DBNativeAccessConfig(val connectionsConfig: List<ConnectionConfig>, val logger: Logger? = null) {
constructor(connectionsConfig: List<ConnectionConfig>) : this(connectionsConfig, null)
}

/**
Expand All @@ -34,12 +34,12 @@ data class DBNativeAccessConfig (val connectionsConfig: List<ConnectionConfig>,
* @param impl DBMManager implementation. If doesn't specified is assumed by url
* @param properties Others connection properties
* */
data class ConnectionConfig (
data class ConnectionConfig(
val fileName: String,
val url: String,
val user: String,
val password: String,
val driver: String? = null,
val impl: String? = null,
val properties : Map<String, String> = mutableMapOf())

val properties: Map<String, String> = mutableMapOf(),
)
15 changes: 12 additions & 3 deletions base/src/main/kotlin/com/smeup/dbnative/file/DBFile.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,35 +23,44 @@ import com.smeup.dbnative.model.FileMetadata
/**
* DBFile is an abstraction of table or view (in sql database) or document (in nosql database).
* */
interface DBFile: AutoCloseable {
interface DBFile : AutoCloseable {
var name: String
var fileMetadata: FileMetadata
var logger: Logger?

// Control functions
fun eof(): Boolean

fun equal(): Boolean

// Pointing functions
fun setll(key: String): Boolean

fun setll(keys: List<String>): Boolean

fun setgt(key: String): Boolean
fun setgt(keys: List<String>): Boolean

fun setgt(keys: List<String>): Boolean

// Read functions
fun chain(key: String): Result

fun chain(keys: List<String>): Result

fun read(): Result

fun readPrevious(): Result

fun readEqual(): Result

fun readEqual(key: String): Result

fun readEqual(keys: List<String>): Result

fun readPreviousEqual(): Result

fun readPreviousEqual(key: String): Result

fun readPreviousEqual(keys: List<String>): Result

// Write functions
Expand All @@ -64,4 +73,4 @@ interface DBFile: AutoCloseable {
fun delete(record: Record): Result

override fun close() {}
}
}
16 changes: 8 additions & 8 deletions base/src/main/kotlin/com/smeup/dbnative/file/Record.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,20 @@ class Record(vararg fields: RecordField) : LinkedHashMap<String, String>() {
}
}

fun matches(keyFields: List<RecordField>) = keyFields.all {
fun matches(keyFields: List<RecordField>) =
keyFields.all {
val value1 = this[it.name]?.trim()
val value2 = it.value.trim()

var value1 = this[it.name]?.trim()
var value2 = it.value.trim();

value1.equals(value2.trim())
}
value1.equals(value2.trim())
}

fun add(field: RecordField) {
put(field.name, field.value)
}

fun duplicate(): Record{
fun duplicate(): Record {
val thisMap = this
return Record().apply { this.putAll(thisMap) }
}
}
}
2 changes: 1 addition & 1 deletion base/src/main/kotlin/com/smeup/dbnative/file/Result.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@

package com.smeup.dbnative.file

data class Result(var record: Record = Record(), var indicatorHI: Boolean = false, var indicatorLO: Boolean = false, var indicatorEQ: Boolean = false, var errorMsg: String = "")
data class Result(var record: Record = Record(), var indicatorHI: Boolean = false, var indicatorLO: Boolean = false, var indicatorEQ: Boolean = false, var errorMsg: String = "")
100 changes: 62 additions & 38 deletions base/src/main/kotlin/com/smeup/dbnative/log/Logging.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,71 +3,95 @@ package com.smeup.dbnative.log
import java.text.SimpleDateFormat
import java.util.*

enum class LoggingLevel{
OFF, ERROR, WARN, INFO, DEBUG, TRACE, ALL
enum class LoggingLevel {
OFF,
ERROR,
WARN,
INFO,
DEBUG,
TRACE,
ALL,
}

enum class LoggingKey(val level: LoggingLevel){
enum class LoggingKey(val level: LoggingLevel) {
native_access_method(LoggingLevel.TRACE),
read_data(LoggingLevel.TRACE),
execute_inquiry(LoggingLevel.DEBUG),
search_data(LoggingLevel.DEBUG),
connection(LoggingLevel.DEBUG)
connection(LoggingLevel.DEBUG),
}

enum class NativeMethod(){
equal, setll, setgt, chain, read, readPrevious, readEqual, readPreviousEqual, write, update, delete;
enum class NativeMethod() {
equal,
setll,
setgt,
chain,
read,
readPrevious,
readEqual,
readPreviousEqual,
write,
update,
delete,
}

data class LoggingEvent(val eventKey: LoggingKey,
val message: String,
val callerMethod: String? = null,
val elapsedTime: Long? = null,
val nativeMethodCall: NativeMethod? = null,
val fileName: String? = null){
data class LoggingEvent(
val eventKey: LoggingKey,
val message: String,
val callerMethod: String? = null,
val elapsedTime: Long? = null,
val nativeMethodCall: NativeMethod? = null,
val fileName: String? = null,
) {
val issueTime: Date = Date()

fun isMeasuredEvent() = elapsedTime != null
}

open class Logger(val level:LoggingLevel = LoggingLevel.OFF,
var loggingFunction: ((LoggingEvent) -> Unit)?)
{
companion object{
open class Logger(
val level: LoggingLevel = LoggingLevel.OFF,
var loggingFunction: ((LoggingEvent) -> Unit)?,
) {
companion object {
@JvmStatic
fun getSimpleInstance(level:LoggingLevel = LoggingLevel.DEBUG): Logger{
fun getSimpleInstance(level: LoggingLevel = LoggingLevel.DEBUG): Logger {
return Logger(level, loggingFunction = {
val logged = "[%s][%s][%s][%s][%s] * %s %s"
println(logged.format(SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(it.issueTime),
it.eventKey.level,
it.eventKey.name,
it.nativeMethodCall?:"",
it.fileName?:"",
it.message,
if(it.isMeasuredEvent()) "(${it.elapsedTime} ms)" else "")
)
println(
logged.format(
SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(it.issueTime),
it.eventKey.level,
it.eventKey.name,
it.nativeMethodCall ?: "",
it.fileName ?: "",
it.message,
if (it.isMeasuredEvent()) "(${it.elapsedTime} ms)" else "",
),
)
})
}
}

fun logEvent(eventKey: LoggingKey,
message: String,
elapsedTime: Long? = null,
nativeMethodCall: NativeMethod? = null,
fileName: String? = null): LoggingEvent?{
return if(eventKey.level.ordinal <= level.ordinal) {
val caller = Thread.currentThread().getStackTrace().getOrNull(2)?.let {
"${it.className} ${it.methodName}:${it.lineNumber}"
}?:""
fun logEvent(
eventKey: LoggingKey,
message: String,
elapsedTime: Long? = null,
nativeMethodCall: NativeMethod? = null,
fileName: String? = null,
): LoggingEvent? {
return if (eventKey.level.ordinal <= level.ordinal) {
val caller =
Thread.currentThread().getStackTrace().getOrNull(2)?.let {
"${it.className} ${it.methodName}:${it.lineNumber}"
} ?: ""
logEvent(LoggingEvent(eventKey, message, caller, elapsedTime, nativeMethodCall, fileName))
}
else{
} else {
null
}
}

internal fun logEvent(ev: LoggingEvent): LoggingEvent{
internal fun logEvent(ev: LoggingEvent): LoggingEvent {
loggingFunction?.invoke(ev)
return ev
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,14 @@ package com.smeup.dbnative.metadata
import com.smeup.dbnative.model.FileMetadata

interface MetadataRegister {
fun registerMetadata(
metadata: FileMetadata,
overwrite: Boolean,
)

fun registerMetadata(metadata: FileMetadata, overwrite: Boolean)
fun getMetadata(filename:String): FileMetadata
fun contains(fileName:String): Boolean
fun remove(fileName:String)
}
fun getMetadata(filename: String): FileMetadata

fun contains(fileName: String): Boolean

fun remove(fileName: String)
}
Loading

0 comments on commit bf25f0b

Please sign in to comment.