Author: mic...@jb... Date: 2006-01-19 06:59:00 -0500 (Thu, 19 Jan 2006) New Revision: 2141 Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/FunctionDef.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryManager.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryManagerImpl.java trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/FunctionDef.hbm.xml trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/IntegrationTest.java Log: added generic query API, and made functions optimistic lock Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/FunctionDef.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/FunctionDef.java 2006-01-19 11:22:26 UTC (rev 2140) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/FunctionDef.java 2006-01-19 11:59:00 UTC (rev 2141) @@ -20,6 +20,7 @@ private String functionContent; private String description; private String semantic; + private int lockingVersion = 0; public String getSemantic(){ return semantic; @@ -79,5 +80,13 @@ public String getVersionComment(){ return this.versionComment; } + + private int getLockingVersion() { + return lockingVersion; + } + private void setLockingVersion(int lockingVersion) { + this.lockingVersion = lockingVersion; + } + } Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryManager.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryManager.java 2006-01-19 11:22:26 UTC (rev 2140) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryManager.java 2006-01-19 11:59:00 UTC (rev 2141) @@ -1,6 +1,8 @@ package org.drools.repository; import java.util.List; +import java.util.Map; +import java.util.Properties; import org.drools.repository.db.Asset; import org.drools.repository.db.ISaveHistory; @@ -131,4 +133,30 @@ /** This is only required for stateful Repository session. It will be ignored for stateless ones. */ public abstract void close(); + + /** + * A very powerful generic query utility. + * This allows you to query the entire repository, and return lists of object, fields etc. + * Even individual objects. + * + * The Query language is HQL (hibernate query language). + * + * The properties should be (key, value) where value is the appropriate type of the field to query on. + * The key maps to a " :key" item in your query string. + * + * For instance, <code>query = "from RuleDef where versionNumber > :max and name = :name";</code> + * will have a map: + * <code> + * map.put("max", new Long(42)); + * map.put("name", "This is a String"); + * //note the appropriate type to match the properties you want to search ! + * </code> + * + * @param query HQL query. Can be of the format "from ClassName where propertyName = :variableInMap" + * You can also do "select name from RuleSetDef where ..." and so on. It will then return a list + * of strings. If you do "select name, Id from RuleDef .." it will return a list of Object[] "tuples". + * @param parameters A map of name => value (in appropriate type) to mix in with the query. + * + */ + public abstract List query(String query, Map parameters); } \ No newline at end of file Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryManagerImpl.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryManagerImpl.java 2006-01-19 11:22:26 UTC (rev 2140) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryManagerImpl.java 2006-01-19 11:59:00 UTC (rev 2141) @@ -1,10 +1,15 @@ package org.drools.repository; +import java.util.Enumeration; +import java.util.Iterator; import java.util.List; +import java.util.Map; +import java.util.Properties; import org.drools.repository.db.Asset; import org.drools.repository.db.ISaveHistory; +import org.hibernate.Query; import org.hibernate.Session; /** @@ -227,6 +232,20 @@ } + + public List query(String query, + Map parameters) { + Query q = session.createQuery(query); + + for ( Iterator iter = parameters.keySet().iterator(); iter.hasNext(); ) { + String key = (String) iter.next(); + q.setParameter(key, parameters.get(key)); + } + + return q.list(); + } + + Modified: trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/FunctionDef.hbm.xml =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/FunctionDef.hbm.xml 2006-01-19 11:22:26 UTC (rev 2140) +++ trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/FunctionDef.hbm.xml 2006-01-19 11:59:00 UTC (rev 2141) @@ -4,10 +4,13 @@ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> - <class name="org.drools.repository.FunctionDef" table="FUNCTION_DEFINITIONS" select-before-update="true"> + <class name="org.drools.repository.FunctionDef" table="FUNCTION_DEFINITIONS" + optimistic-lock="version" + select-before-update="true"> <id name="id" column="FUNCTION_ID"> <generator class="native"/> </id> + <version name="lockingVersion" column="LOCKING_VERSION" /> <property name="description" column="DESCRIPTION" length="256" /> <property name="functionContent" column="FUNCTION_CONTENT" type="text"/> <property name="semantic" column="SEMANTIC" length="32" /> Modified: trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/IntegrationTest.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/IntegrationTest.java 2006-01-19 11:22:26 UTC (rev 2140) +++ trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/IntegrationTest.java 2006-01-19 11:59:00 UTC (rev 2141) @@ -1,7 +1,9 @@ package org.drools.repository; +import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Random; import org.hibernate.StaleObjectStateException; @@ -309,8 +311,20 @@ //ooh look, the new one has 3, and they are all different rules ! assertEquals(3, repo.loadRuleSet("Integration ruleset 1", 2).getRules().size()); + runTestQueryAPI( repo ); + repo.close(); } + + + private void runTestQueryAPI(RepositoryManager repo) { + Map params = new HashMap(); + params.put("fragment", "%Integration%"); + params.put("version", new Long(1)); + List query = repo.query("from RuleDef where name like :fragment and versionNumber = :version", params); + assertNotNull(query); + assertTrue(query.size() > 0); + } /** |