[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