[jboss-svn-commits] JBL Code SVN: r20969 - in labs/jbossrules/trunk/drools-repository/src: test/java/org/drools/repository and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jul 9 02:18:28 EDT 2008


Author: michael.neale at jboss.com
Date: 2008-07-09 02:18:28 -0400 (Wed, 09 Jul 2008)
New Revision: 20969

Modified:
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java
Log:
JBRULES-1626 search API

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2008-07-09 02:30:32 UTC (rev 20968)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2008-07-09 06:18:28 UTC (rev 20969)
@@ -1073,12 +1073,12 @@
     /**
      * This will search assets, looking for matches against the name.
      */
-    public NodeIterator queryFullText(String qry) {
+    public AssetItemIterator queryFullText(String qry) {
         try {
-        	String searchPath = "//*[jcr:contains(., '" + qry + "')]";
+        	String searchPath = "/jcr:root/" + RULES_REPOSITORY_NAME + "/" + RULE_PACKAGE_AREA +"//element(*, " +AssetItem.RULE_NODE_TYPE_NAME + ")[jcr:contains(., '" + qry + "')]";
             Query q = this.session.getWorkspace().getQueryManager().createQuery( searchPath, Query.XPATH );
             QueryResult res = q.execute();
-            return res.getNodes();
+            return new AssetItemIterator(res.getNodes(), this);
         } catch ( RepositoryException e ) {
             System.out.println( e.getMessage() );
             throw new RulesRepositoryException( e );
@@ -1093,7 +1093,7 @@
      * @param maxRows - maximum number of rows to return;
      * @param seekArchived - include archived stuff in the results.
      */
-    public AssetItemIterator query(Map<String,String[]> params, boolean seekArchived) {
+    public AssetItemIterator query(Map<String,String[]> params, boolean seekArchived, DateQuery[] dates) {
         try {
 
             String sql = "SELECT " + AssetItem.TITLE_PROPERTY_NAME + ", " + AssetItem.DESCRIPTION_PROPERTY_NAME + ", " + AssetItem.CONTENT_PROPERTY_ARCHIVE_FLAG + " FROM " + AssetItem.RULE_NODE_TYPE_NAME;
@@ -1101,24 +1101,38 @@
             for (Iterator<String> iterator = params.keySet().iterator(); iterator.hasNext();) {
 				String fld = iterator.next();
 				String[] options = params.get(fld);
-				if (options.length > 1) {
-					sql += " AND (";
-					for (int i = 0; i < options.length; i++) {
-						sql += fld + " LIKE '" + options[i] + "'";
-						if (i < options.length -1) {
-							sql += " OR ";
+				if (options != null && options.length > 0) {
+					if (options.length > 1) {
+						sql += " AND (";
+						for (int i = 0; i < options.length; i++) {
+							sql += fld + " LIKE '" + options[i] + "'";
+							if (i < options.length -1) {
+								sql += " OR ";
+							}
 						}
+						sql += ")";
+					} else {
+						sql += " AND " + fld + " LIKE '" + options[0] + "'";
 					}
-					sql += ")";
-				} else {
-					sql += " AND " + fld + " LIKE '" + options[0] + "'";
 				}
-
 			}
-
             if ( seekArchived == false ) {
                 sql += " AND " + AssetItem.CONTENT_PROPERTY_ARCHIVE_FLAG + " = 'false'";
             }
+
+            if (dates != null) {
+            	for (int i = 0; i < dates.length; i++) {
+					DateQuery d = dates[i];
+					if (d.after != null) {
+						sql += " AND " + d.field + " > TIMESTAMP '" + d.after + "'";
+					}
+					if (d.before != null) {
+						sql += " AND " + d.field + " < TIMESTAMP '" + d.before + "'";
+					}
+				}
+            }
+
+
             System.out.println(sql);
 
             Query q = this.session.getWorkspace().getQueryManager().createQuery( sql, Query.SQL );
@@ -1133,6 +1147,22 @@
         }
     }
 
+    /**
+     * Used for querying based on date.
+     * @author Michael Neale
+     */
+    public static class DateQuery {
+		private String after;
+		private String before;
+		private String field;
+		public DateQuery(String field, String after, String before) {
+			this.field = field;
+    		this.after = after;
+    		this.before = before;
+    	}
+    }
+
+
     public AssetItemIterator findAssetsByName(String name) {
         return this.findAssetsByName( name, false );
     }

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java	2008-07-09 02:30:32 UTC (rev 20968)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java	2008-07-09 06:18:28 UTC (rev 20969)
@@ -18,6 +18,7 @@
 import javax.jcr.Session;
 import javax.jcr.SimpleCredentials;
 
+import org.drools.repository.RulesRepository.DateQuery;
 import org.drools.repository.migration.MigrateDroolsPackage;
 
 
@@ -176,6 +177,34 @@
 
     }
 
+    public void testQueryText() throws Exception {
+    	RulesRepository repo = RepositorySessionUtil.getRepository();
+    	PackageItem pkg = repo.createPackage("testQueryTest", "");
+    	AssetItem asset = pkg.addAsset("asset1", "testQueryText1");
+    	asset.updateSubject("testQueryText42");
+    	asset.checkin("firstCheckintestQueryTest");
+    	asset.updateFormat("drl");
+    	asset.checkin("firstCheckintestQueryTest2");
+    	pkg.addAsset("asset2", "testQueryText2");
+    	repo.save();
+
+    	List<AssetItem> ls = iteratorToList(repo.queryFullText("testQueryText*"));
+    	assertEquals(2, ls.size());
+
+    	AssetItem as = ls.get(0);
+    	assertEquals("asset1", as.getName());
+
+    	as = ls.get(1);
+    	assertEquals("asset2", as.getName());
+
+
+    	ls = iteratorToList(repo.queryFullText("firstCheckintestQueryTest2"));
+    	assertEquals(1, ls.size());
+
+    	ls = iteratorToList(repo.queryFullText("firstCheckintestQueryTest"));
+    	assertEquals(0, ls.size());
+    }
+
     public void testQuery() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
 
@@ -189,7 +218,7 @@
         Map<String, String[]> q = new HashMap<String, String[]>();
         q.put("drools:subject", new String[] {"testQueryXXX42"});
 
-        AssetItemIterator asit = repo.query(q, false);
+        AssetItemIterator asit = repo.query(q, false, null);
         List<AssetItem> results = iteratorToList(asit);
         assertEquals(1, results.size());
         AssetItem as = results.get(0);
@@ -202,7 +231,7 @@
         q = new HashMap<String, String[]>();
         q.put("drools:subject", new String[] {"testQueryXXX42"});
         q.put(AssetItem.SOURCE_PROPERTY_NAME, new String[] {"database"});
-        results = iteratorToList(repo.query(q, true));
+        results = iteratorToList(repo.query(q, true, null));
         assertEquals(1, results.size());
         as = results.get(0);
         assertEquals("testQuery", as.getName());
@@ -211,12 +240,59 @@
         q = new HashMap<String, String[]>();
         q.put("drools:subject", new String[] {"testQueryXXX42", "wankle"});
         q.put(AssetItem.SOURCE_PROPERTY_NAME, new String[] {"database", "wankle"});
-        results = iteratorToList(repo.query(q, false));
+        results = iteratorToList(repo.query(q, false, null));
         assertEquals(1, results.size());
         as = results.get(0);
         assertEquals("testQuery", as.getName());
 
+        q = new HashMap<String, String[]>();
+        q.put("drools:subject", null);
+        q.put("cruddy", new String[0]);
+        q.put(AssetItem.SOURCE_PROPERTY_NAME, new String[] {"database", "wankle"});
+        results = iteratorToList(repo.query(q, false, null));
+        assertEquals(1, results.size());
 
+
+        //now dates
+        q = new HashMap<String, String[]>();
+        q.put("drools:subject", new String[] {"testQueryXXX42", "wankle"});
+        q.put(AssetItem.SOURCE_PROPERTY_NAME, new String[] {"database", "wankle"});
+        results = iteratorToList(repo.query(q, false, new DateQuery[] {new DateQuery("jcr:created", "1974-07-10T00:00:00.000-05:00", "3074-07-10T00:00:00.000-05:00")}));
+        assertEquals(1, results.size());
+        as = results.get(0);
+        assertEquals("testQuery", as.getName());
+
+        q = new HashMap<String, String[]>();
+        q.put("drools:subject", new String[] {"testQueryXXX42", "wankle"});
+        q.put(AssetItem.SOURCE_PROPERTY_NAME, new String[] {"database", "wankle"});
+        results = iteratorToList(repo.query(q, false, new DateQuery[] {new DateQuery("jcr:created", "1974-07-10T00:00:00.000-05:00", null)}));
+        assertEquals(1, results.size());
+        as = results.get(0);
+        assertEquals("testQuery", as.getName());
+
+        q = new HashMap<String, String[]>();
+        q.put("drools:subject", new String[] {"testQueryXXX42", "wankle"});
+        q.put(AssetItem.SOURCE_PROPERTY_NAME, new String[] {"database", "wankle"});
+        results = iteratorToList(repo.query(q, false, new DateQuery[] {new DateQuery("jcr:created", null, "3074-07-10T00:00:00.000-05:00")}));
+        assertEquals(1, results.size());
+        as = results.get(0);
+        assertEquals("testQuery", as.getName());
+
+
+        //should return nothing:
+        q = new HashMap<String, String[]>();
+        q.put("drools:subject", new String[] {"testQueryXXX42", "wankle"});
+        q.put(AssetItem.SOURCE_PROPERTY_NAME, new String[] {"database", "wankle"});
+        results = iteratorToList(repo.query(q, false, new DateQuery[] {new DateQuery("jcr:created", "3074-07-10T00:00:00.000-05:00", null)}));
+        assertEquals(0, results.size());
+
+        q = new HashMap<String, String[]>();
+        q.put("drools:subject", new String[] {"testQueryXXX42", "wankle"});
+        q.put(AssetItem.SOURCE_PROPERTY_NAME, new String[] {"database", "wankle"});
+        results = iteratorToList(repo.query(q, false, new DateQuery[] {new DateQuery("jcr:created", null, "1974-07-10T00:00:00.000-05:00")}));
+        assertEquals(0, results.size());
+
+
     }
 
 




More information about the jboss-svn-commits mailing list