Skip to content
Snippets Groups Projects
Commit 02be9048 authored by cmaeder's avatar cmaeder
Browse files

separated querying and initialization

parent a2c39b29
Branches
No related tags found
No related merge requests found
......@@ -50,7 +50,7 @@
</execution>
</executions>
<configuration>
<mainClass>CamelTest</mainClass>
<mainClass>TestQueryDB</mainClass>
<classpathScope>test</classpathScope>
<cleanupDaemonThreads>false</cleanupDaemonThreads>
<killAfter>-1</killAfter>
......
import java.util
import org.apache.camel.CamelContext
import org.apache.camel.component.sql.SqlComponent
import org.apache.camel.impl.DefaultCamelContext
import org.apache.camel.scala.dsl.builder.RouteBuilder
import org.sqlite.SQLiteDataSource
import scala.collection.JavaConverters._
class PopulateDB extends RouteBuilder {
val insertRoute = "direct:insertRow"
val initRoute = "direct:initTable"
......@@ -22,31 +17,23 @@ class PopulateDB extends RouteBuilder {
getContext.createProducerTemplate().sendBody(initRoute, null)
insertRoute -->
("db:insert into " + Table.name + Table.columns.mkString(" (", ", ", ") values ") +
("db:INSERT INTO " + Table.name + Table.columns.mkString(" (", ", ", ") VALUES ") +
Table.columns.map(":#" + _).mkString("(", ", ", ")"))
initRoute --> ("db:drop table if exists " + Table.name) -->
("db:create table " + Table.name +
Table.columns.map(_ + " STRING").mkString(" (id integer primary key, ", ", ", ")"))
initRoute --> ("db:DROP TABLE IF EXISTS " + Table.name) -->
("db:CREATE TABLE " + Table.name +
Table.columns.map(_ + " STRING").mkString(" (id INTEGER PRIMARY KEY, ", ", ", ")"))
}
object PopulateDB {
def main(args: scala.Array[String]): Unit = {
val sqlComponent: SqlComponent = new SqlComponent()
val ds: SQLiteDataSource = new SQLiteDataSource()
val name = if (args.isEmpty) Table.name else args(0)
val dbName = if (name.endsWith(".db")) name else name + ".db"
ds.setDatabaseName(dbName)
ds.setUrl("jdbc:sqlite:" + dbName)
sqlComponent.setDataSource(ds)
val (context, dir) = Table.initArgs(args)
val dbBuilder = new PopulateDB()
val context: CamelContext = new DefaultCamelContext()
context.addRoutes(dbBuilder)
context.addComponent("db", sqlComponent)
context.start()
dbBuilder.initTable()
val pa = new ParseXML(dbBuilder)
val dir = if (args.length > 1) args(1) else System.getProperty("user.dir")
pa.parseDir(dir)
}
}
import java.util
import org.apache.camel.model.RouteDefinition
import org.apache.camel.scala.dsl.builder.RouteBuilder
import scala.collection.JavaConverters._
class QueryDB extends RouteBuilder {
def body2str(dirPrefix: String, count: Boolean, subString: String, field: String, b: Object): String = {
try {
(b.asInstanceOf[util.ArrayList[_]].asScala map {
case jm if count =>
"count where " + field + " contains " + subString + ": " +
jm.asInstanceOf[util.HashMap[String, Integer]].asScala.getOrElse("COUNT(*)", 0)
case jm if !count =>
val sm = jm.asInstanceOf[util.HashMap[String, String]].asScala
sm.getOrElse(Table.columns(0), "").stripPrefix(dirPrefix) +
": " + sm.getOrElse(field, "")
}).mkString("\n")
} catch {
case x: ClassCastException => "unexpected body type: " + b.getClass
}
}
def queryValues(dirPrefix: String, count: Boolean, subString: String, field: String): Unit = {
val w = field + " LIKE '%" + subString + "%'"
val q = "db:SELECT " + (if (count) "COUNT(*)" else "*") + " FROM " + Table.name + " WHERE " + w
val d = "direct:" + q
val r: RouteDefinition = d ==> {
-->(q).transform(ex =>
body2str(dirPrefix, count, subString, field, ex.getIn.getBody))
-->("stream:out")
}
getContext.addRouteDefinition(r)
getContext.createProducerTemplate().sendBody(d, null)
getContext.removeRouteDefinition(r)
}
}
import org.apache.camel.CamelContext
import org.apache.camel.component.sql.SqlComponent
import org.apache.camel.impl.DefaultCamelContext
import org.sqlite.SQLiteDataSource
object Table {
val columns = List("fileName", "errType", "shortMsg", "errLevel", "longMsg")
val name = "errors"
def initArgs(args: scala.Array[String]): (CamelContext, String) = {
val sqlComponent: SqlComponent = new SqlComponent()
val ds: SQLiteDataSource = new SQLiteDataSource()
val name = if (args.isEmpty) Table.name else args(0)
val dbName = if (name.endsWith(".db")) name else name + ".db"
ds.setDatabaseName(dbName)
ds.setUrl("jdbc:sqlite:" + dbName)
sqlComponent.setDataSource(ds)
val context: CamelContext = new DefaultCamelContext()
context.addComponent("db", sqlComponent)
val dir = if (args.length > 1) args(1) else System.getProperty("user.dir")
(context, dir)
}
}
object TestQueryDB {
def main(args: scala.Array[String]): Unit = {
val (context, dir) = Table.initArgs(args)
val dbSearch = new QueryDB()
context.addRoutes(dbSearch)
context.start()
val dirPrefix = if (dir.endsWith("/")) dir else dir + "/"
dbSearch.queryValues(dirPrefix, false, "skipped", "shortMsg")
dbSearch.queryValues(dirPrefix, false, "", "errType")
dbSearch.queryValues(dirPrefix, true, "LocalError", "errType")
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment