[jboss-svn-commits] JBL Code SVN: r20928 - 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
Sun Jul 6 11:27:36 EDT 2008


Author: jervisliu
Date: 2008-07-06 11:27:35 -0400 (Sun, 06 Jul 2008)
New Revision: 20928

Added:
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RepositoryFilter.java
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:
Return a list of artifacts using a filter. JBRULES-1018.

Added: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RepositoryFilter.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RepositoryFilter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RepositoryFilter.java	2008-07-06 15:27:35 UTC (rev 20928)
@@ -0,0 +1,6 @@
+package org.drools.repository;
+
+
+public interface RepositoryFilter {
+	boolean accept(Object artifact, String action);
+}

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-06 11:19:30 UTC (rev 20927)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2008-07-06 15:27:35 UTC (rev 20928)
@@ -711,14 +711,26 @@
      * returned (you will have to delve into the rules deepest darkest history
      * yourself... mahahahaha).
      *
+     */
+    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
+     * returned (you will have to delve into the rules deepest darkest history
+     * yourself... mahahahaha).
+     *
      * Pass in startRow of 0 to start at zero, numRowsToReturn can be set to -1 should you want it all.
+     * @param filter an AssetItem filter
      */
-    public AssetPageList findAssetsByCategory(String categoryTag, boolean seekArchivedAsset, int skip, int numRowsToReturn) throws RulesRepositoryException {
+    public AssetPageList findAssetsByCategory(String categoryTag, boolean seekArchivedAsset, int skip, int numRowsToReturn, RepositoryFilter filter) throws RulesRepositoryException {
         CategoryItem item = this.loadCategory( categoryTag );
 
         try {
             return loadLinkedAssets(seekArchivedAsset, skip, numRowsToReturn,
-					item.getNode());
+					item.getNode(), filter);
         } catch ( RepositoryException e ) {
             throw new RulesRepositoryException( e );
         }
@@ -729,17 +741,27 @@
      * Similar to finding by category.
      */
     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);
         try {
             return loadLinkedAssets(seekArchivedAsset, skip, numRowsToReturn,
-					item.getNode());
+					item.getNode(), filter);
         } catch ( RepositoryException e ) {
             throw new RulesRepositoryException( e );
         }
     }
-
+	
 	private AssetPageList loadLinkedAssets(boolean seekArchivedAsset, int skip,
-			int numRowsToReturn, Node n)
+			int numRowsToReturn, Node n, RepositoryFilter filter)
 			throws RepositoryException {
 		int rows = 0;
         List results = new ArrayList();
@@ -751,11 +773,13 @@
 		    Property ruleLink = (Property) it.next();
 		    Node parentNode = ruleLink.getParent();
 		    if ( isNotSnapshot( parentNode ) && parentNode.getPrimaryNodeType().getName().equals( AssetItem.RULE_NODE_TYPE_NAME ) ) {
-		        if ( seekArchivedAsset || !parentNode.getProperty( AssetItem.CONTENT_PROPERTY_ARCHIVE_FLAG ).getBoolean() )
-		        	{
-		        		results.add( new AssetItem( this, parentNode ) );
+		        if ( seekArchivedAsset || !parentNode.getProperty( AssetItem.CONTENT_PROPERTY_ARCHIVE_FLAG ).getBoolean() ) {
+		        	AssetItem ai = new AssetItem( this, parentNode );
+		        	if(filter == null || filter.accept(ai, "read")) {
+		        		results.add(ai);
 		        		rows++;
 		        	}
+		        }
 		    }
 		}
 

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-06 11:19:30 UTC (rev 20927)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java	2008-07-06 15:27:35 UTC (rev 20928)
@@ -16,6 +16,7 @@
 
 import org.drools.repository.migration.MigrateDroolsPackage;
 
+
 import junit.framework.TestCase;
 
 public class RulesRepositoryTest extends TestCase {
@@ -319,7 +320,67 @@
             assertTrue(found);
 
     }
+    
+    public void testFindAssetsByState() throws Exception {
+        RulesRepository repo = RepositorySessionUtil.getRepository();
+        repo.loadCategory( "/" ).addCategory( "testFindAssetsByStateCat", "X" );
 
+        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)) 
+        			return false;
+        		
+
+      			if (((AssetItem)artifact).getName().equalsIgnoreCase("testCat1")) {
+        	        return true;
+        		} else {
+        			return false;
+        		}
+        	}
+            });
+
+        assertEquals(1, apl.assets.size());
+        assertEquals("testCat1", ((AssetItem)apl.assets.get(0)).getName());        
+    }
+    
+    
+    public void testFindAssetsByCategory() throws Exception {
+        RulesRepository repo = RepositorySessionUtil.getRepository();
+        repo.loadCategory( "/" ).addCategory( "testFindAssetsByCategoryUsingFilterCat", "X" );
+
+        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)) 
+        			return false;
+        		
+
+      			if (((AssetItem)artifact).getName().equalsIgnoreCase("testCat1")) {
+        	        return true;
+        		} else {
+        			return false;
+        		}
+        	}
+            });
+
+        assertEquals(1, apl.assets.size());
+        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