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