[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