From d1267ba2f812e518d1bcbbf7dc74097bc2baef98 Mon Sep 17 00:00:00 2001 From: cmaeder <c.maeder@jacobs-university.de> Date: Mon, 2 Feb 2015 16:52:19 +0100 Subject: [PATCH] added package, moved and extended CamelTest to SearchDB made a db-route per field name added search in selectable fields pom-stuff and BundleStart is not finished yet --- pom.xml | 18 ++++++++++-- src/main/resource/search.html | 3 +- src/main/resource/static/search.js | 12 ++++++-- src/main/scala/ParseXML.scala | 2 ++ src/main/scala/PopulateDB.scala | 2 ++ src/main/scala/QueryDB.scala | 35 +++++++++++++++++++++++ src/main/scala/SearchDB.scala | 45 ++++++++++++++++++++++++++++++ src/main/scala/Table.scala | 2 ++ src/test/scala/CamelTest.scala | 37 ------------------------ src/test/scala/ErrorStore.scala | 2 ++ src/test/scala/TestQueryDB.scala | 2 ++ 11 files changed, 117 insertions(+), 43 deletions(-) create mode 100644 src/main/scala/SearchDB.scala delete mode 100644 src/test/scala/CamelTest.scala diff --git a/pom.xml b/pom.xml index 30c84d1..d95da23 100644 --- a/pom.xml +++ b/pom.xml @@ -4,6 +4,13 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> + <packaging>bundle</packaging> + <parent> + <groupId>info.kwarc.sally4</groupId> + <artifactId>sally4-osgi</artifactId> + <version>1.0.0</version> + </parent> + <groupId>info.kwarc.mmt</groupId> <artifactId>mmt-errorview</artifactId> <version>1.0</version> @@ -50,8 +57,7 @@ </execution> </executions> <configuration> - <mainClass>TestQueryDB</mainClass> - <classpathScope>test</classpathScope> + <mainClass>info.kwarc.mmt.errorview.SearchDB</mainClass> <cleanupDaemonThreads>false</cleanupDaemonThreads> <killAfter>-1</killAfter> </configuration> @@ -66,8 +72,16 @@ <properties> <scala-version>2.11.5</scala-version> <camel-version>2.14.1</camel-version> + <bundle.export-package>info.kwarc.mmt.errorview*</bundle.export-package> +<!-- <bundle.embed-dependency>sqlite-jdbc</bundle.embed-dependency> --> + <bundle.import-package>!org.sqlite;*</bundle.import-package> </properties> <dependencies> + <dependency> + <groupId>info.kwarc.sally4</groupId> + <artifactId>sally4-docmanager</artifactId> + <version>1.0.0</version> + </dependency> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> diff --git a/src/main/resource/search.html b/src/main/resource/search.html index edfdb20..e234796 100644 --- a/src/main/resource/search.html +++ b/src/main/resource/search.html @@ -7,7 +7,7 @@ <link rel="stylesheet" href="static/search.css"/> </head> <body> -<h3>Search</h3> +<h3>Show</h3> <div ng-controller="SearchController"> <li><input type="checkbox" ng-model="columns.id"/>row id</li> @@ -16,6 +16,7 @@ <li><input type="checkbox" ng-model="columns.errType"/>error type</li> <li><input type="checkbox" ng-model="columns.shortMsg"/>short message</li> <li><input type="checkbox" ng-model="columns.longMsg"/>long message</li> + <hr>search in <select ng-model="field" ng-init="shortMsg" ng-options="key for key in colProps"></select> <p>number of records: {{number}}</p> <form ng-submit="search()"> <p>maximal entries: <input type="integer" ng-model="maxNumber" size="5"/></p> diff --git a/src/main/resource/static/search.js b/src/main/resource/static/search.js index be39481..885d730 100644 --- a/src/main/resource/static/search.js +++ b/src/main/resource/static/search.js @@ -7,21 +7,27 @@ angular.module('searchApp', []).controller('SearchController', , fileName : true , shortMsg : true , longMsg : false }; + $scope.colProps = []; + for (k in $scope.columns) if (k != 'id') { $scope.colProps.push(k)} ; + $scope.field = 'shortMsg'; $scope.results = []; $scope.number = 0; $scope.maxNumber = 100; $scope.searchText = ''; + $scope.query = function () { return '/' + $scope.field + + '?limit=' + $scope.maxNumber + + '&text=' + $scope.searchText; + }; $scope.search = function() { if ($scope.searchText) { - $http.get('search?limit=' + $scope.maxNumber + - '&text=' + $scope.searchText).success(function(data) { + $http.get('search' + $scope.query()).success(function(data) { $scope.results = data; }); }; $scope.count(); }; $scope.count = function() { - $http.get('count?text=' + $scope.searchText).success(function(data) { + $http.get('count' + $scope.query()).success(function(data) { $scope.number = data[0].count; }); }; diff --git a/src/main/scala/ParseXML.scala b/src/main/scala/ParseXML.scala index 626cb31..394b57c 100644 --- a/src/main/scala/ParseXML.scala +++ b/src/main/scala/ParseXML.scala @@ -1,3 +1,5 @@ +package info.kwarc.mmt.errorview + import java.io.File import org.slf4j.{Logger, LoggerFactory} diff --git a/src/main/scala/PopulateDB.scala b/src/main/scala/PopulateDB.scala index 81a70de..6fc3855 100644 --- a/src/main/scala/PopulateDB.scala +++ b/src/main/scala/PopulateDB.scala @@ -1,3 +1,5 @@ +package info.kwarc.mmt.errorview + import java.util import org.apache.camel.scala.dsl.builder.RouteBuilder diff --git a/src/main/scala/QueryDB.scala b/src/main/scala/QueryDB.scala index fb18773..d3a26fe 100644 --- a/src/main/scala/QueryDB.scala +++ b/src/main/scala/QueryDB.scala @@ -1,9 +1,13 @@ +package info.kwarc.mmt.errorview + import java.util +import org.apache.camel.Exchange import org.apache.camel.model.RouteDefinition import org.apache.camel.scala.dsl.builder.RouteBuilder import scala.collection.JavaConverters._ +import scala.io.StdIn class QueryDB extends RouteBuilder { @@ -36,4 +40,35 @@ class QueryDB extends RouteBuilder { getContext.createProducerTemplate().sendBody(d, null) getContext.removeRouteDefinition(r) } + + def processIn(ex: Exchange): Unit = { + val input = ex.getIn.getBody.toString + queryValues(QueryDB.dirPrefix, false, input, QueryDB.field) + } + + // ("stream:in?scanStream=true&promptMessage=Enter field or search string: " transform processIn) --> ("log:" + this.getClass) +} + +object QueryDB { + var dirPrefix = "" + var field = Table.columns(2) + + def main(args: scala.Array[String]): Unit = { + val (context, dir) = Table.initArgs(args) + val dbBuilder = new PopulateDB() + val dbSearch = new QueryDB() + context.addRoutes(dbSearch) + context.start() + dirPrefix = if (dir.endsWith("/")) dir else dir + "/" + var ok = true + while (ok) { + println("Enter field or search string:") + val ln = StdIn.readLine + ok = ln != null + if (ok) { + dbSearch.queryValues(QueryDB.dirPrefix, false, ln, QueryDB.field) + dbSearch.queryValues(QueryDB.dirPrefix, true, ln, QueryDB.field) + } + } + } } diff --git a/src/main/scala/SearchDB.scala b/src/main/scala/SearchDB.scala new file mode 100644 index 0000000..77ebe06 --- /dev/null +++ b/src/main/scala/SearchDB.scala @@ -0,0 +1,45 @@ +package info.kwarc.mmt.errorview + +import java.util + +import org.apache.camel.Exchange +import org.apache.camel.component.jackson.JacksonDataFormat +import org.apache.camel.model.DataFormatDefinition +import org.apache.camel.scala.dsl.builder.RouteBuilder +import org.apache.camel.util.jndi.JndiContext +import org.eclipse.jetty.server.handler.ResourceHandler + +class SearchDB extends RouteBuilder { + + def query2HashMap(ex: Exchange): util.HashMap[String, String] = { + val hm = new util.HashMap[String, String]() + hm.put("text", "%" + ex.getIn.getHeader("text") + "%") + hm.put("limit", ex.getIn.getHeader("limit").toString) + hm + } + + Table.columns.map { col => + (("jetty:http://localhost:8383/count/" + col) transform + (ex => "%" + ex.getIn.getHeader("text") + "%")) --> + ("db:SELECT COUNT(*) as count FROM errors WHERE " + col + " LIKE #") marshal + new DataFormatDefinition(new JacksonDataFormat()) + (("jetty:http://localhost:8383/search/" + col) transform query2HashMap) --> + ("db:SELECT * FROM errors WHERE " + col + " LIKE :#text LIMIT :#limit") marshal + new DataFormatDefinition(new JacksonDataFormat()) + } + "jetty:http://localhost:8383/static?matchOnUriPrefix=true&handlers=#staticHandler" --> "log:a" +} + +object SearchDB { + + def main(args: scala.Array[String]) { + val (context, _) = Table.initArgs(args) + val resHandler = new ResourceHandler() + resHandler.setResourceBase("src/main/resource") + val jdni = new JndiContext() + jdni.bind("staticHandler", resHandler) + context.setJndiContext(jdni) + context.addRoutes(new SearchDB()) + context.start() + } +} diff --git a/src/main/scala/Table.scala b/src/main/scala/Table.scala index aac0ba7..9b31f21 100644 --- a/src/main/scala/Table.scala +++ b/src/main/scala/Table.scala @@ -1,3 +1,5 @@ +package info.kwarc.mmt.errorview + import org.apache.camel.component.sql.SqlComponent import org.apache.camel.impl.DefaultCamelContext import org.sqlite.SQLiteDataSource diff --git a/src/test/scala/CamelTest.scala b/src/test/scala/CamelTest.scala deleted file mode 100644 index 138ff8b..0000000 --- a/src/test/scala/CamelTest.scala +++ /dev/null @@ -1,37 +0,0 @@ -import java.util - -import org.apache.camel.Exchange -import org.apache.camel.component.jackson.JacksonDataFormat -import org.apache.camel.model.DataFormatDefinition -import org.apache.camel.scala.dsl.builder.RouteBuilder -import org.apache.camel.util.jndi.JndiContext -import org.eclipse.jetty.server.handler.ResourceHandler - -object CamelTest { - - def query2HashMap(ex: Exchange) : util.HashMap[String, String] = { - val hm = new util.HashMap[String, String]() - hm.put("shortMsg", "%" + ex.getIn.getHeader("text") + "%") - hm.put("limit", ex.getIn.getHeader("limit").toString) - hm - } - - class MyRouteBuilder extends RouteBuilder { - ("jetty:http://localhost:8383/count" transform (ex => "%" + ex.getIn.getHeader("text") + "%")) --> - "db:SELECT COUNT(*) as count FROM errors WHERE shortMsg LIKE #" marshal new DataFormatDefinition(new JacksonDataFormat()) - ("jetty:http://localhost:8383/search" transform query2HashMap) --> - "db:SELECT * FROM errors WHERE shortMsg LIKE :#shortMsg LIMIT :#limit" marshal new DataFormatDefinition(new JacksonDataFormat()) - "jetty:http://localhost:8383/static?matchOnUriPrefix=true&handlers=#staticHandler" --> "log:a" - } - - def main(args: scala.Array[String]) { - val (context, _) = Table.initArgs(args) - val resHandler = new ResourceHandler() - resHandler.setResourceBase("src/main/resource") - val jdni = new JndiContext() - jdni.bind("staticHandler", resHandler) - context.setJndiContext(jdni) - context.addRoutes(new MyRouteBuilder()) - context.start() - } -} diff --git a/src/test/scala/ErrorStore.scala b/src/test/scala/ErrorStore.scala index b000ad6..96137df 100644 --- a/src/test/scala/ErrorStore.scala +++ b/src/test/scala/ErrorStore.scala @@ -1,3 +1,5 @@ +package info.kwarc.mmt.errorview + import java.util import org.apache.camel.model.RouteDefinition diff --git a/src/test/scala/TestQueryDB.scala b/src/test/scala/TestQueryDB.scala index 91bd420..3bdcc63 100644 --- a/src/test/scala/TestQueryDB.scala +++ b/src/test/scala/TestQueryDB.scala @@ -1,3 +1,5 @@ +package info.kwarc.mmt.errorview + object TestQueryDB { def main(args: scala.Array[String]): Unit = { val (context, dir) = Table.initArgs(args) -- GitLab