[jboss-svn-commits] JBL Code SVN: r21003 - in labs/jbossrules/trunk/drools-guvnor/src: main/java/org/drools/guvnor/server and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 11 03:11:10 EDT 2008


Author: michael.neale at jboss.com
Date: 2008-07-11 03:11:10 -0400 (Fri, 11 Jul 2008)
New Revision: 21003

Added:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/MetaDataQuery.java
   labs/jbossrules/trunk/drools-guvnor/src/main/resources/searchresults.properties
Modified:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
   labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
Log:
JBRULES-1626 search API

Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/MetaDataQuery.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/MetaDataQuery.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/MetaDataQuery.java	2008-07-11 07:11:10 UTC (rev 21003)
@@ -0,0 +1,10 @@
+package org.drools.guvnor.client.rpc;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+public class MetaDataQuery implements IsSerializable {
+
+	public String attribute;
+	public String valueList;
+
+}


Property changes on: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/MetaDataQuery.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2008-07-10 21:21:26 UTC (rev 21002)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2008-07-11 07:11:10 UTC (rev 21003)
@@ -41,6 +41,7 @@
 import javax.jcr.RepositoryException;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.jackrabbit.util.ISO8601;
 import org.apache.log4j.Logger;
 import org.drools.FactHandle;
 import org.drools.RuleBase;
@@ -48,6 +49,12 @@
 import org.drools.RuleBaseFactory;
 import org.drools.SessionConfiguration;
 import org.drools.base.ClassTypeResolver;
+import org.drools.common.AbstractRuleBase;
+import org.drools.common.DroolsObjectOutputStream;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.compiler.DrlParser;
+import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.guvnor.client.common.AssetFormats;
 import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.guvnor.client.modeldriven.testing.Scenario;
@@ -57,6 +64,7 @@
 import org.drools.guvnor.client.rpc.DetailedSerializableException;
 import org.drools.guvnor.client.rpc.LogEntry;
 import org.drools.guvnor.client.rpc.MetaData;
+import org.drools.guvnor.client.rpc.MetaDataQuery;
 import org.drools.guvnor.client.rpc.PackageConfigData;
 import org.drools.guvnor.client.rpc.RepositoryService;
 import org.drools.guvnor.client.rpc.RuleAsset;
@@ -80,12 +88,6 @@
 import org.drools.guvnor.server.util.MetaDataMapper;
 import org.drools.guvnor.server.util.TableDisplayHandler;
 import org.drools.guvnor.server.util.VerifierRunner;
-import org.drools.common.AbstractRuleBase;
-import org.drools.common.DroolsObjectOutputStream;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.compiler.DrlParser;
-import org.drools.compiler.DroolsParserException;
-import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.lang.descr.TypeDeclarationDescr;
@@ -102,9 +104,11 @@
 import org.drools.repository.RulesRepositoryException;
 import org.drools.repository.StateItem;
 import org.drools.repository.VersionableItem;
+import org.drools.repository.RulesRepository.DateQuery;
 import org.drools.rule.Package;
 import org.drools.testframework.RuleCoverageListener;
 import org.drools.testframework.ScenarioRunner;
+import org.drools.util.DateUtils;
 import org.drools.util.DroolsStreamUtils;
 import org.jboss.seam.annotations.AutoCreate;
 import org.jboss.seam.annotations.In;
@@ -266,7 +270,7 @@
     	RepositoryFilter pf = new PackageFilter();
         return listPackages(true, pf);
     }
- 	
+
 	private PackageConfigData[] listPackages(boolean archive, RepositoryFilter filter) {
 		List<PackageConfigData> result = new ArrayList<PackageConfigData>();
 		PackageIterator pkgs = repository.listPackages();
@@ -322,7 +326,7 @@
     public TableDataResult loadRuleListForState(String stateName, int skip, int numRows, String tableConfig) throws SerializableException {
     	//love you
         //long time = System.currentTimeMillis();
-    	
+
     	RepositoryFilter filter = new AssetItemFilter();
         AssetPageList list = repository.findAssetsByState( stateName, false, skip, numRows, filter);
         TableDisplayHandler handler = new TableDisplayHandler(tableConfig);
@@ -348,12 +352,12 @@
     public RuleAsset loadRuleAsset(String uuid) throws SerializableException {
         AssetItem item = repository.loadAssetByUUID( uuid );
         RuleAsset asset = new RuleAsset();
-        
+
         asset.uuid = uuid;
 
         //load standard meta data
         asset.metaData = populateMetaData( item );
-        
+
     	if (Contexts.isSessionContextActive()) {
 			Identity.instance().checkPermission("ignoredanyway", "read",
 					asset.metaData.packageName);
@@ -361,7 +365,7 @@
 
         // get package header
         PackageItem pkgItem = repository.loadPackage( asset.metaData.packageName );
-      
+
         //load the content
         ContentHandler handler = ContentManager.getHandler( asset.metaData.format );
         handler.retrieveAssetContent(asset, pkgItem, item);
@@ -487,12 +491,12 @@
         List<TableDataRow> result = new ArrayList<TableDataRow>();
 
         AssetItem item = repository.loadAssetByUUID( uuid );
-        
+
     	if (Contexts.isSessionContextActive()) {
       	    Identity.instance().checkPermission("ignoredanyway", "read", item.getPackage().getUUID());
     	}
 
-      	
+
         AssetHistoryIterator it = item.getHistory();
 
 
@@ -533,7 +537,7 @@
     public TableDataResult loadArchivedAssets(int skip, int numRows) throws SerializableException {
         List<TableDataRow> result = new ArrayList<TableDataRow>();
     	RepositoryFilter filter = new AssetItemFilter();
-    	
+
         AssetItemIterator it = repository.findArchivedAssets();
         it.skip(skip);
         int count = 0;
@@ -623,11 +627,11 @@
     public PackageConfigData loadPackageConfig(String uuid) {
         PackageItem item = repository.loadPackageByUUID( uuid );
     	//the uuid passed in is the uuid of that deployment bundle, not the package uudi.
-        //we have to figure out the package name. 
+        //we have to figure out the package name.
     	if (Contexts.isSessionContextActive()) {
 		    Identity.instance().checkPermission("ignoredanyway", "read", item.getName());
     	}
-        
+
         PackageConfigData data = new PackageConfigData();
         data.uuid = item.getUUID();
         data.header = getDroolsHeader(item);
@@ -693,10 +697,10 @@
                                               int numRows,
                                               String tableConfig) throws SerializableException {
     	//TODO: This does not work for package snapshot. package snspshot's UUID is different
-    	//from its corresponding package. However we seem to expect to get same assets using the 
+    	//from its corresponding package. However we seem to expect to get same assets using the
     	//package snapshot UUID here
     	//Identity.instance().checkPermission("ignoredanyway", "read", uuid);
- 	
+
     	if (numRows == 0) {
     		throw new DetailedSerializableException("Unable to return zero results (bug)", "probably have the parameters around the wrong way, sigh...");
     	}
@@ -708,8 +712,52 @@
         return handler.loadRuleListTable( it, skip,  numRows );
     }
 
+    public TableDataResult queryFullText(String text, boolean seekArchived, int skip, int numRows) throws SerializableException {
+    	if (numRows == 0) {
+    		throw new DetailedSerializableException("Unable to return zero results (bug)", "probably have the parameters around the wrong way, sigh...");
+    	}
+    	AssetItemIterator it = repository.queryFullText(text, seekArchived);
+    	TableDisplayHandler handler = new TableDisplayHandler("searchresults");
+    	return handler.loadRuleListTable(it, skip, numRows);
+    }
 
-    @WebRemote
+    public TableDataResult queryMetaData(final MetaDataQuery[] qr, String createdAfter, String createdBefore, String modifiedAfter, String modifiedBefore,
+    		boolean seekArchived, int skip, int numRows) throws SerializableException {
+    	if (numRows == 0) {
+    		throw new DetailedSerializableException("Unable to return zero results (bug)", "probably have the parameters around the wrong way, sigh...");
+    	}
+    	Map<String, String[]> q = new HashMap<String, String[]>() {{
+    		for (int i = 0; i < qr.length; i++) {
+    			String vals = (qr[i].valueList == null) ? "" : qr[i].valueList.trim();
+    			if (vals.length() > 0) {
+    				put(qr[i].attribute, vals.split(",\\s?"));
+    			}
+			}
+    	}};
+
+    	DateQuery[] dates = new DateQuery[2];
+
+
+    	dates[0] = new DateQuery("jcr:created", isoDate(createdAfter), isoDate(createdBefore));
+    	dates[1] = new DateQuery(AssetItem.LAST_MODIFIED_PROPERTY_NAME, isoDate(modifiedAfter), isoDate(modifiedBefore));
+    	AssetItemIterator it = repository.query(q, seekArchived, dates);
+    	TableDisplayHandler handler = new TableDisplayHandler("searchresults");
+    	return handler.loadRuleListTable(it, skip, numRows);
+    }
+
+
+    private String isoDate(String ds) {
+    	if (ds != null && !ds.equals("")) {
+    		Calendar cal = Calendar.getInstance();
+    		cal.setTime( DateUtils.parseDate(ds));
+    		return ISO8601.format(cal);
+    	}
+		return null;
+	}
+
+
+
+	@WebRemote
     @Restrict("#{identity.loggedIn}")
     public String createState(String name) throws SerializableException {
         log.info( "USER:" + repository.getSession().getUserID() +
@@ -747,17 +795,17 @@
                                " CHANGING ASSET STATUS. Asset name, uuid: " +
                     "[" + asset.getName() + ", " +asset.getUUID() + "]"
                       +  " to [" + newState + "]");
-            
+
         	if (Contexts.isSessionContextActive()) {
            	    Identity.instance().checkPermission("ignoredanyway", "update", asset.getPackage().getUUID());
         	}
-          
+
             asset.updateState( newState );
         } else {
         	if (Contexts.isSessionContextActive()) {
         	    Identity.instance().checkPermission("ignoredanyway", "update", uuid);
         	}
-        	
+
             PackageItem pkg = repository.loadPackageByUUID( uuid );
             log.info( "USER:" + repository.getSession().getUserID() +
             " CHANGING Package STATUS. Asset name, uuid: " +
@@ -776,7 +824,7 @@
     	if (Contexts.isSessionContextActive()) {
     	    Identity.instance().checkPermission("ignoredanyway", "update", newPackage);
     	}
-    	
+
         log.info( "USER:" + repository.getSession().getUserID() +
                            " CHANGING PACKAGE OF asset: [" + uuid + "] to [" + newPackage + "]");
         repository.moveRuleItemPackage( newPackage, uuid, comment );
@@ -791,7 +839,7 @@
     	if (Contexts.isSessionContextActive()) {
     	    Identity.instance().checkPermission("ignoredanyway", "create", newPackage);
     	}
-   	
+
         return repository.copyAsset( assetUUID, newPackage, newName );
     }
 
@@ -824,7 +872,7 @@
     	if (Contexts.isSessionContextActive()) {
     		Identity.instance().checkPermission("ignoredanyway", "read", packageName);
     	}
-  	
+
         log.info( "USER:" + repository.getSession().getUserID() +
          " CREATING PACKAGE SNAPSHOT for package: [" + packageName + "] snapshot name: [" + snapshotName );
 
@@ -883,7 +931,7 @@
         long start = System.currentTimeMillis();
         AssetItemIterator it = repository.findAssetsByName( search, searchArchived ); // search for archived items
         log.debug("Search time: " + (System.currentTimeMillis() - start));
-        
+
         RepositoryFilter filter = new AssetItemFilter();
         for(int i = 0; i < max; i++) {
             if (!it.hasNext()) {
@@ -1029,7 +1077,7 @@
     	if (Contexts.isSessionContextActive()) {
     		Identity.instance().checkPermission("ignoredanyway", "read", packageUUID);
     	}
-       	
+
         PackageItem item = repository.loadPackageByUUID( packageUUID );
         ContentPackageAssembler asm = new ContentPackageAssembler(item, false);
         return asm.getDRL();
@@ -1041,7 +1089,7 @@
     	if (Contexts.isSessionContextActive()) {
     		Identity.instance().checkPermission("ignoredanyway", "read", asset.metaData.packageName);
     	}
-      	
+
         AssetItem item = repository.loadAssetByUUID( asset.uuid );
 
         ContentHandler handler = ContentManager.getHandler( item.getFormat() );//new AssetContentFormatHandler();
@@ -1070,7 +1118,7 @@
     	if (Contexts.isSessionContextActive()) {
     		Identity.instance().checkPermission("ignoredanyway", "read", asset.metaData.packageName);
     	}
-      	
+
     	try {
 
 	        AssetItem item = repository.loadAssetByUUID( asset.uuid );
@@ -1117,8 +1165,8 @@
             log.error( e );
             throw e;
         }
-        
-        //If we allow package owner to copy package, we will have to update the permission store 
+
+        //If we allow package owner to copy package, we will have to update the permission store
         //for the newly copied package.
         //Update permission store
 /*    	String copiedUuid = "";
@@ -1141,7 +1189,7 @@
     	if (Contexts.isSessionContextActive()) {
     		Identity.instance().checkPermission("ignoredanyway", "update", item.getPackage().getUUID());
     	}
-      	
+
         return repository.renameAsset( uuid, newName );
     }
 
@@ -1150,11 +1198,11 @@
     public void archiveAsset(String uuid, boolean value) {
         try {
             AssetItem item = repository.loadAssetByUUID( uuid );
-            
+
         	if (Contexts.isSessionContextActive()) {
         		Identity.instance().checkPermission("ignoredanyway", "update", item.getPackage().getUUID());
         	}
-        	
+
             item.archiveItem( value );
     		PackageItem pkg = item.getPackage();
     		pkg.updateBinaryUpToDate(false);
@@ -1175,7 +1223,7 @@
         	if (Contexts.isSessionContextActive()) {
         		Identity.instance().checkPermission("ignoredanyway", "delete", item.getPackage().getUUID());
         	}
-        	
+
             item.remove();
             repository.save();
         } catch (RulesRepositoryException e) {
@@ -1240,7 +1288,7 @@
     	if (Contexts.isSessionContextActive()) {
     		Identity.instance().checkPermission("ignoredanyway", "read", packageName);
     	}
-    	
+
     	PackageItem item = repository.loadPackage(packageName);
         ContentPackageAssembler asm = new ContentPackageAssembler(item, false);
         List<String> result = new ArrayList<String>();
@@ -1271,7 +1319,7 @@
     	if (Contexts.isSessionContextActive()) {
     		Identity.instance().checkPermission("ignoredanyway", "read", packageName);
     	}
-    	
+
     	PackageItem item = this.repository.loadPackage(packageName);
 
     	//nasty classloader needed to make sure we use the same tree the whole time.
@@ -1370,11 +1418,11 @@
     @WebRemote
     @Restrict("#{identity.loggedIn}")
 	public BulkTestRunResult runScenariosInPackage(String packageUUID)
-			throws SerializableException {    	
+			throws SerializableException {
     	if (Contexts.isSessionContextActive()) {
     		Identity.instance().checkPermission("ignoredanyway", "read", packageUUID);
     	}
-    	
+
 		PackageItem item = repository.loadPackageByUUID(packageUUID);
 
 		ClassLoader originalCL = Thread.currentThread().getContextClassLoader();
@@ -1467,7 +1515,7 @@
 		if (Contexts.isSessionContextActive()) {
 			Identity.instance().checkPermission("ignoredanyway", "read", packageUUID);
 		}
-    	
+
 		String drl = this.buildPackageSource(packageUUID);
 		VerifierRunner runner = new VerifierRunner();
 		try {
@@ -1484,7 +1532,7 @@
 		if (Contexts.isSessionContextActive()) {
 			Identity.instance().checkPermission("ignoredanyway", "read", packageUUID);
 		}
-    	
+
 		PackageItem pkg = this.repository.loadPackageByUUID(packageUUID);
 		List<String> res = new ArrayList<String>();
 		AssetItemIterator it = pkg.listAssetsByFormat(new String[] {AssetFormats.MODEL, AssetFormats.DRL_MODEL});

Added: labs/jbossrules/trunk/drools-guvnor/src/main/resources/searchresults.properties
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/resources/searchresults.properties	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/resources/searchresults.properties	2008-07-11 07:11:10 UTC (rev 21003)
@@ -0,0 +1,14 @@
+#
+# This is the configuration for the search screen.
+# It can access any field on the AssetItem object by the method name.
+# It will intelligently convert types as appropriate.
+#
+# If you wish to customise, you can put your own properties ahead of the
+# repository on the classpath.
+#
+# @author Michael Neale
+#
+*=getFormat
+Name=getName
+Description=getDescription
+Package Name=getPackageName
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-guvnor/src/main/resources/searchresults.properties
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java	2008-07-10 21:21:26 UTC (rev 21002)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java	2008-07-11 07:11:10 UTC (rev 21003)
@@ -50,6 +50,7 @@
 import org.drools.guvnor.client.rpc.BuilderResult;
 import org.drools.guvnor.client.rpc.BulkTestRunResult;
 import org.drools.guvnor.client.rpc.DetailedSerializableException;
+import org.drools.guvnor.client.rpc.MetaDataQuery;
 import org.drools.guvnor.client.rpc.PackageConfigData;
 import org.drools.guvnor.client.rpc.RepositoryService;
 import org.drools.guvnor.client.rpc.RuleAsset;
@@ -673,7 +674,39 @@
 
 	}
 
+	public void testTextSearch() throws Exception  {
+		ServiceImplementation impl = getService();
+		String cat = "testTextSearch";
+		impl.createCategory("/", cat, "qkfnd");
+		impl.createPackage("testTextSearch",
+				"for testing search.");
+		String uuid = impl.createNewRule("testTextRule1", "desc", cat, "testTextSearch", "drl");
+		TableDataResult res = impl.queryFullText("testTextRule1", false, 0, -1);
+		assertEquals(1, res.data.length);
+	}
 
+	public void testMetaDataSearch() throws Exception {
+		ServiceImplementation impl = getService();
+		PackageItem pkg = impl.repository.createPackage("testMetaDataSearch", "");
+
+		AssetItem asset = pkg.addAsset("testMetaDataSearchAsset", "");
+		asset.updateSubject("testMetaDataSearch");
+		asset.updateExternalSource("numberwang");
+		asset.checkin("");
+
+		MetaDataQuery[] qr = new MetaDataQuery[2];
+		qr[0] = new MetaDataQuery();
+		qr[0].attribute = AssetItem.SUBJECT_PROPERTY_NAME;
+		qr[0].valueList = "wang, testMetaDataSearch";
+		qr[1] = new MetaDataQuery();
+		qr[1].attribute = AssetItem.SOURCE_PROPERTY_NAME;
+		qr[1].valueList = "numberwang";
+		TableDataResult res = impl.queryMetaData(qr, "10-Jul-1974", null, null,null, false, 0, -1);
+		assertEquals(1, res.data.length);
+
+	}
+
+
 	public String[] arr(String s) {
 		return new String[] { s };
 	}




More information about the jboss-svn-commits mailing list