[jboss-svn-commits] JBL Code SVN: r20967 - 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
Tue Jul 8 22:21:15 EDT 2008
Author: michael.neale at jboss.com
Date: 2008-07-08 22:21:14 -0400 (Tue, 08 Jul 2008)
New Revision: 20967
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 meta data searching feature
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-08 19:13:09 UTC (rev 20966)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java 2008-07-09 02:21:14 UTC (rev 20967)
@@ -7,6 +7,7 @@
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.StringTokenizer;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@@ -715,7 +716,7 @@
public AssetPageList findAssetsByCategory(String categoryTag, boolean seekArchivedAsset, int skip, int numRowsToReturn) throws RulesRepositoryException {
return findAssetsByCategory(categoryTag, seekArchivedAsset, skip, numRowsToReturn, null);
}
-
+
/**
* This will retrieve a list of RuleItem objects - that are allocated to the
* provided category. Only the latest versions of each RuleItem will be
@@ -743,12 +744,12 @@
public AssetPageList findAssetsByState(String stateName, boolean seekArchivedAsset, int skip, int numRowsToReturn) throws RulesRepositoryException {
return findAssetsByState(stateName, seekArchivedAsset, skip, numRowsToReturn, null);
}
-
+
/**
* Finds the AssetItem's linked to the requested state.
* Similar to finding by category.
* @param filter an AssetItem filter
- *
+ *
*/
public AssetPageList findAssetsByState(String stateName, boolean seekArchivedAsset, int skip, int numRowsToReturn, RepositoryFilter filter) throws RulesRepositoryException {
StateItem item = this.getState(stateName);
@@ -759,7 +760,7 @@
throw new RulesRepositoryException( e );
}
}
-
+
private AssetPageList loadLinkedAssets(boolean seekArchivedAsset, int skip,
int numRowsToReturn, Node n, RepositoryFilter filter)
throws RepositoryException {
@@ -1068,6 +1069,70 @@
}
}
+
+ /**
+ * This will search assets, looking for matches against the name.
+ */
+ public NodeIterator queryFullText(String qry) {
+ try {
+ String searchPath = "//*[jcr:contains(., '" + qry + "')]";
+ Query q = this.session.getWorkspace().getQueryManager().createQuery( searchPath, Query.XPATH );
+ QueryResult res = q.execute();
+ return res.getNodes();
+ } catch ( RepositoryException e ) {
+ System.out.println( e.getMessage() );
+ throw new RulesRepositoryException( e );
+ }
+ }
+
+
+ /**
+ * This will do a general predicate search.
+ * @param params - a map of field to a list of possible values (which are or-ed together if there is more then one).
+ * @param position - where to start returning results from.
+ * @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) {
+ try {
+
+ String sql = "SELECT " + AssetItem.TITLE_PROPERTY_NAME + ", " + AssetItem.DESCRIPTION_PROPERTY_NAME + ", " + AssetItem.CONTENT_PROPERTY_ARCHIVE_FLAG + " FROM " + AssetItem.RULE_NODE_TYPE_NAME;
+ sql += " WHERE jcr:path LIKE '/" + RULES_REPOSITORY_NAME + "/" + RULE_PACKAGE_AREA + "/%'";
+ 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 ";
+ }
+ }
+ sql += ")";
+ } else {
+ sql += " AND " + fld + " LIKE '" + options[0] + "'";
+ }
+
+ }
+
+ if ( seekArchived == false ) {
+ sql += " AND " + AssetItem.CONTENT_PROPERTY_ARCHIVE_FLAG + " = 'false'";
+ }
+ System.out.println(sql);
+
+ Query q = this.session.getWorkspace().getQueryManager().createQuery( sql, Query.SQL );
+
+ QueryResult res = q.execute();
+
+ return new AssetItemIterator( res.getNodes(),
+ this );
+ } catch ( RepositoryException e ) {
+ System.out.println( e.getMessage() );
+ throw new RulesRepositoryException( e );
+ }
+ }
+
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-08 19:13:09 UTC (rev 20966)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java 2008-07-09 02:21:14 UTC (rev 20967)
@@ -4,11 +4,15 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
@@ -172,7 +176,50 @@
}
+ public void testQuery() throws Exception {
+ RulesRepository repo = RepositorySessionUtil.getRepository();
+ AssetItem asset = repo.loadDefaultPackage().addAsset( "testQuery", "wanklerotaryengine1cc" );
+
+ //asset.updateBinaryContentAttachment(new ByteArrayInputStream("testingSearchWankle".getBytes()));
+ asset.updateContent("testingSearchWankle");
+ asset.updateSubject("testQueryXXX42");
+ asset.checkin("");
+
+ Map<String, String[]> q = new HashMap<String, String[]>();
+ q.put("drools:subject", new String[] {"testQueryXXX42"});
+
+ AssetItemIterator asit = repo.query(q, false);
+ List<AssetItem> results = iteratorToList(asit);
+ assertEquals(1, results.size());
+ AssetItem as = results.get(0);
+ assertEquals("testQuery", as.getName());
+
+
+ asset.updateExternalSource("database");
+ asset.checkin("");
+
+ 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));
+ 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));
+ assertEquals(1, results.size());
+ as = results.get(0);
+ assertEquals("testQuery", as.getName());
+
+
+ }
+
+
public void testLoadRuleByUUIDWithConcurrentSessions() throws Exception {
RulesRepository repo = RepositorySessionUtil.getRepository();
@@ -320,7 +367,7 @@
assertTrue(found);
}
-
+
public void testFindAssetsByState() throws Exception {
RulesRepository repo = RepositorySessionUtil.getRepository();
repo.loadCategory( "/" ).addCategory( "testFindAssetsByStateCat", "X" );
@@ -328,15 +375,15 @@
PackageItem pkg = repo.createPackage( "testFindAssetsByStatePac", "");
pkg.addAsset( "testCat1", "x", "/testFindAssetsByStateCat", "drl");
pkg.addAsset( "testCat2", "x", "/testFindAssetsByStateCat", "drl");
-
+
repo.save();
-
+
AssetPageList apl = repo.findAssetsByState( "Draft", false, 0, -1, new RepositoryFilter() {
public boolean accept(Object artifact, String action) {
- if (!(artifact instanceof AssetItem))
+ if (!(artifact instanceof AssetItem))
return false;
-
+
if (((AssetItem)artifact).getName().equalsIgnoreCase("testCat1")) {
return true;
} else {
@@ -346,10 +393,10 @@
});
assertEquals(1, apl.assets.size());
- assertEquals("testCat1", ((AssetItem)apl.assets.get(0)).getName());
+ assertEquals("testCat1", ((AssetItem)apl.assets.get(0)).getName());
}
-
-
+
+
public void testFindAssetsByCategory() throws Exception {
RulesRepository repo = RepositorySessionUtil.getRepository();
repo.loadCategory( "/" ).addCategory( "testFindAssetsByCategoryUsingFilterCat", "X" );
@@ -357,18 +404,18 @@
PackageItem pkg = repo.createPackage( "testFindAssetsByCategoryUsingFilterPack", "");
pkg.addAsset( "testCat1", "x", "/testFindAssetsByCategoryUsingFilterCat", "drl");
pkg.addAsset( "testCat2", "x", "/testFindAssetsByCategoryUsingFilterCat", "drl");
-
+
repo.save();
List items = repo.findAssetsByCategory( "/testFindAssetsByCategoryUsingFilterCat", 0, -1 ).assets;
assertEquals(2, items.size());
-
+
AssetPageList apl = repo.findAssetsByCategory( "/testFindAssetsByCategoryUsingFilterCat", false, 0, -1, new RepositoryFilter() {
public boolean accept(Object artifact, String action) {
- if (!(artifact instanceof AssetItem))
+ if (!(artifact instanceof AssetItem))
return false;
-
+
if (((AssetItem)artifact).getName().equalsIgnoreCase("testCat1")) {
return true;
} else {
@@ -378,9 +425,9 @@
});
assertEquals(1, apl.assets.size());
- assertEquals("testCat1", ((AssetItem)apl.assets.get(0)).getName());
+ assertEquals("testCat1", ((AssetItem)apl.assets.get(0)).getName());
}
-
+
/**
* Here we are testing to make sure that category links don't pick up stuff in snapshots area.
*/
More information about the jboss-svn-commits
mailing list