Skip to content

Commit

Permalink
added sqlite as dependency
Browse files Browse the repository at this point in the history
  • Loading branch information
Liew Jun Tung committed Mar 26, 2017
1 parent cf2ba8e commit 8600558
Show file tree
Hide file tree
Showing 14 changed files with 218 additions and 91 deletions.
17 changes: 0 additions & 17 deletions .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 0 additions & 6 deletions .idea/copyright/MIT.xml

This file was deleted.

7 changes: 0 additions & 7 deletions .idea/copyright/profiles_settings.xml

This file was deleted.

4 changes: 2 additions & 2 deletions .idea/kotlinc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

102 changes: 50 additions & 52 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions .idea/modules/asxmlcsv_main.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion .idea/modules/asxmlcsv_test.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,14 @@ repositories {
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "org.apache.commons:commons-csv:1.4"
compile group: 'org.xerial', name: 'sqlite-jdbc', version: '3.7.2'
testCompile("org.junit.jupiter:junit-jupiter-api:5.0.0-M3")
testRuntime("org.junit.jupiter:junit-jupiter-engine:5.0.0-M3")
testCompile("org.junit.platform:junit-platform-launcher:1.0.0-M3")
}
compileTestKotlin {
kotlinOptions {
languageVersion = "1.1"
apiVersion = "1.1"
}
}
Empty file modified gradlew
100644 → 100755
Empty file.
14 changes: 14 additions & 0 deletions src/main/kotlin/org/pandawarrior/app/FileHelper.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.pandawarrior.app

/**
* Created by pandawarrior91 on 26/03/2017.
*/
class FileHelper {
fun readFromXML(){

}

fun readFromCSV(){

}
}
75 changes: 75 additions & 0 deletions src/main/kotlin/org/pandawarrior/app/SQLiteHelper.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package org.pandawarrior.app

import java.sql.Connection
import java.sql.DriverManager
import java.sql.SQLException
import java.sql.Statement
import java.util.concurrent.CopyOnWriteArrayList




/**
* Created by pandawarrior91 on 26/03/2017.
*/

inline fun lock(dbName: String, body: (statement:Statement)-> Unit) {
// ...
Class.forName("org.sqlite.JDBC")
var connection: Connection? = null
try {
connection = DriverManager.getConnection("jdbc:sqlite:${dbName}")
val statement = connection.createStatement()
body(statement)
val rs = statement.executeQuery("select * from translation")
while(rs.next())
{
// read the result set
System.out.println("name = " + rs.getString("name"))
System.out.println("value = " + rs.getInt("value"))
}

} catch (exception: SQLException) {
System.err.println(exception.message)
exception.printStackTrace()
} finally
{
try
{
if(connection != null)
connection.close()
}
catch(e:SQLException)
{
System.err.println(e.message)
}
}
}

fun writeFromCSV(dbName: String = "", headers: Array<String>, csvInputList: CopyOnWriteArrayList<Map<String, String>>) {
lock(dbName) { statement ->
val createHeaderString = headers.joinToString { "${it} string" }.replace('-', '_')
val headerString = headers.joinToString { it }.replace('-', '_')
statement.setQueryTimeout(30) // set timeout to 30 sec.
statement.executeUpdate("drop table if exists `translation`")
statement.executeUpdate("create table `translation` (${createHeaderString})")
csvInputList.forEach {
val values = it.values.joinToString { "\"${it}\"" }
println("insert into person (${headerString}) values(${values})")
statement.executeUpdate("insert into translation (${headerString}) values(${values})")
}
}
}

fun writeFromXML(dbName: String = "", currentHeader: String, data: List<AString>?){
lock(dbName) { statement ->
statement.setQueryTimeout(30) // set timeout to 30 sec.
data?.forEach {
val translatable =
if (it.translatable == null) "${it.translatable}"
else "\"${it.translatable}\""
println("insert into translation (name, translatable, $currentHeader) values('${it.name}', $translatable, '${it.text}')")
statement.executeUpdate("insert into translation (name, translatable, $currentHeader) values('${it.name}', $translatable, '${it.text}')")
}
}
}
29 changes: 25 additions & 4 deletions src/test/kotlin/org/pandawarrior/app/ReadCSVTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,11 @@ package org.pandawarrior.app

import org.apache.commons.csv.CSVFormat
import org.apache.commons.csv.CSVParser
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertNotNull
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
import java.io.StringReader
import java.util.*
import java.util.concurrent.CopyOnWriteArrayList
import java.util.LinkedHashMap



/**
Expand All @@ -53,6 +51,8 @@ class ReadCSVTest {
val headerList = CopyOnWriteArrayList<Map<String, Int>>()
val csvInputList = CopyOnWriteArrayList<Map<String, String>>()
headerList.add(headerMap)
println(Arrays.toString(headerMap.keys.toTypedArray()))

for (record in csvRecords){
val inputMap = LinkedHashMap<String, String>()
for (header in headerMap.entries) {
Expand All @@ -64,4 +64,25 @@ class ReadCSVTest {
}
csvInputList.forEach(System.out::println)
}

@Test
@DisplayName("Write into SQLite database")
fun writeToSQL(){
val format = CSVFormat.newFormat(',').withHeader()
val reader = StringReader(CSV)
val csvParser = CSVParser(reader, format)
val csvRecords = csvParser.records
val headerMap = csvParser.headerMap
val csvInputList = CopyOnWriteArrayList<Map<String, String>>()
for (record in csvRecords){
val inputMap = LinkedHashMap<String, String>()
for (header in headerMap.entries) {
inputMap.put(header.key, record.get(header.value))
}
if (!inputMap.isEmpty()) {
csvInputList.add(inputMap)
}
}
writeFromCSV("", headerMap.keys.toTypedArray(), csvInputList)
}
}
7 changes: 5 additions & 2 deletions src/test/kotlin/org/pandawarrior/app/ReadXMLTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class ReadXMLTest {
val XML_RESOURCES_SAMPLE = """<resources>
<string translatable="true" name="text_dog">Dog</string>
<string name="text_cat">Cat</string>
<string name="text_pig">Pig</string>
</resources>"""


Expand Down Expand Up @@ -85,12 +86,11 @@ class ReadXMLTest {
val jaxbUnmarchaller = jaxbContext.createUnmarshaller()
val reader = StringReader(XML_RESOURCES_SAMPLE)
val aResources = jaxbUnmarchaller.unmarshal(reader) as AResounce
assertEquals(2, aResources.aStringList?.size)
assertEquals(3, aResources.aStringList?.size)

val dogString:AString? = aResources.aStringList?.get(0)
assertEquals("text_dog", dogString?.name)
assertEquals("Dog", dogString?.text)
assertTrue(false)

val catString:AString? = aResources.aStringList?.get(1)
assertEquals("text_cat", catString?.name)
Expand All @@ -100,6 +100,9 @@ class ReadXMLTest {
if (catString != null){
assertNull(catString.translatable)
}
val headers:Array<String> = arrayOf("value")
writeFromXML("", headers.get(0), aResources.aStringList)
}

}
}
Loading

0 comments on commit 8600558

Please sign in to comment.