Author: mic...@jb... Date: 2005-12-30 05:42:30 -0500 (Fri, 30 Dec 2005) New Revision: 1961 Added: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/Tag.java trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/Tag.hbm.xml trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/db/PersistCase.java trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/db/RuleSetPersistenceTest.java Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/MetaData.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleDef.hbm.xml trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/db/RepositoryImplTest.java trunk/labs/jbossrules/drools-repository/src/test/resources/hibernate.cfg.xml Log: pre new years eve Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/MetaData.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/MetaData.java 2005-12-30 06:39:52 UTC (rev 1960) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/MetaData.java 2005-12-30 10:42:30 UTC (rev 1961) @@ -4,32 +4,34 @@ import java.util.Date; /** - * This is based on the <a href="http://dublincore.org/documents/dces/"> - * Dublin Core</a> specification, plus a little bit more, and a little bit - * less. Not all of these fields will be used. + * This is based on the <a href="http://dublincore.org/documents/dces/"> Dublin + * Core</a> specification. Not + * all of these fields will be used by everyone. They should only be used for classification. */ -public class MetaData implements Serializable { +public class MetaData + implements + Serializable { - private String title; - private String creator; - private String subject; - private String description; - private String publisher; - private String contributor; - private Date dateCreated = new Date(); - private String format; - private String source; - private String language; - private String relation; - private String coverage; - private String rights; + private String title; + private String creator; + private String subject; + private String description; + private String publisher; + private String contributor; + private Date dateCreated = new Date(); + private String format; + private String source; + private String language; + private String relation; + private String coverage; + private String rights; public String getContributor(){ return contributor; } public void setContributor(String contributor){ - this.contributor = contributor; + this.contributor = contributor; } public String getCoverage(){ Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java 2005-12-30 06:39:52 UTC (rev 1960) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java 2005-12-30 10:42:30 UTC (rev 1961) @@ -1,6 +1,8 @@ package org.drools.repository; import java.util.Date; +import java.util.HashSet; +import java.util.Iterator; import java.util.Set; public class RuleDef extends Persistent { @@ -16,16 +18,35 @@ private Set tags; private String documentation; private Date effectiveDate; - private Date expiryDate; - private Date dateCreated; + private Date expiryDate; + private boolean deleted; + - public Date getDateCreated(){ - return dateCreated; + public boolean isDeleted(){ + return deleted; } - private void setDateCreated(Date dateCreated){ - this.dateCreated = dateCreated; + + + + public void setDeleted(boolean deleted){ + this.deleted = deleted; } + + + + /** + * Use tagging to aid with searching and sorting of large numbers of rules. + * Tags should not effect the versioning of the rules. + * + * + */ + public RuleDef addTag(String tag) { + this.tags.add(new Tag(tag)); + return this; + } + + public RuleDef() {} /** @@ -37,8 +58,8 @@ this.name = name; this.content = content; this.versionNumber = 1; - this.head = true; - this.dateCreated = new Date(); + this.head = true; + this.tags = new HashSet(); } /** * This little cheat tells the repo that this @@ -106,7 +127,7 @@ public Set getTags(){ return tags; } - public void setTags(Set tags){ + private void setTags(Set tags){ this.tags = tags; } public Date getEffectiveDate(){ @@ -129,6 +150,18 @@ return this; } + /** return a list of tags */ + public String[] listTags() { + + String[] tagList = new String[tags.size()]; + int i = 0; + for ( Iterator iter = tags.iterator(); iter.hasNext(); ) { + Tag tag = (Tag) iter.next(); + tagList[i] = tag.getTag(); + i++; + } + return tagList; + } } Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java 2005-12-30 06:39:52 UTC (rev 1960) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java 2005-12-30 10:42:30 UTC (rev 1961) @@ -1,12 +1,38 @@ package org.drools.repository; +import java.util.HashSet; import java.util.List; +import java.util.Set; public class RuleSetDef extends Persistent { private String name; private MetaData metaData; private List rules; + private long versionNumber; + private Set tags; + + public RuleSetDef(String name, MetaData meta) { + this.name = name; + this.metaData = meta; + this.versionNumber = 1; + this.tags = new HashSet(); + } + + /** + * This is not for public consumption. Use the + * proper constructor instead. + */ + public RuleSetDef() { + } + + + public long getVersionNumber(){ + return versionNumber; + } + private void setVersionNumber(long versionNumber){ + this.versionNumber = versionNumber; + } public MetaData getMetaData(){ return metaData; } @@ -25,7 +51,20 @@ public void setName(String name){ this.name = name; } + + public Set getTags(){ + return tags; + } + + private void setTags(Set tags){ + this.tags = tags; + } + public RuleSetDef addTag(String tag) { + this.tags.add(new Tag(tag)); + return this; + } + } Added: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/Tag.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/Tag.java 2005-12-30 06:39:52 UTC (rev 1960) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/Tag.java 2005-12-30 10:42:30 UTC (rev 1961) @@ -0,0 +1,47 @@ +package org.drools.repository; + +import java.io.Serializable; + +/** + * This represents a users tag for a rule, ruleset. + * This aids with classification of rules in an ad-hoc fashion. + * + * A tag it its own entity as tags should be shared as much as possible. + * + * @author <a href="mailto:mic...@gm..."> Michael Neale</a> + * + */ +public class Tag implements Serializable { + + private String tag; + + public Tag(String tag) { + this.tag = tag; + } + + private Tag() {} + + public String getTag(){ + return tag; + } + + public void setTag(String tag){ + this.tag = tag; + } + + public String toString(){ + return tag; + } + + public boolean equals(Object arg0){ + return tag.equals( arg0 ); + } + + public int hashCode(){ + return tag.hashCode(); + } + + + + +} Property changes on: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/Tag.java ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java 2005-12-30 06:39:52 UTC (rev 1960) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java 2005-12-30 10:42:30 UTC (rev 1961) @@ -1,9 +1,13 @@ package org.drools.repository.db; +import java.util.Iterator; import java.util.List; +import java.util.Set; import org.drools.repository.Repository; import org.drools.repository.RuleDef; +import org.drools.repository.RuleSetDef; +import org.drools.repository.Tag; import org.hibernate.Query; import org.hibernate.Session; @@ -11,19 +15,31 @@ public class RepositoryImpl implements Repository { - public RuleDef addNewRule(String ruleName, String content, String comment) { + public RuleDef addNewRule(RuleDef newRule) { Session session = getSession(); session.beginTransaction(); - RuleDef ruleDef = new RuleDef(ruleName, content); - session.save(ruleDef); + Set tags = newRule.getTags(); + saveTags( session, + tags ); + + session.save(newRule); session.getTransaction().commit(); - return ruleDef; + return newRule; } + + private void saveTags(Session session, + Set tags){ + for ( Iterator iter = tags.iterator(); iter.hasNext(); ) { + Tag tag = (Tag) iter.next(); + session.saveOrUpdate(tag); + } + } + - public List listRules(boolean head) { + public List listAllRules(boolean head) { Session session = getSession(); session.beginTransaction(); List results = session @@ -34,6 +50,50 @@ return results; } + public RuleDef retrieveRule(String ruleName, long versionNumber) { + Session session = getSession(); + session.beginTransaction(); + + RuleDef result = (RuleDef) session.createQuery("from RuleDef where name = :name and versionNumber = :version") + .setString("name", ruleName) + .setLong("version", versionNumber).uniqueResult(); + + session.getTransaction().commit(); + return result; + } + + public List findRulesByTag(String tag) { + Session session = getSession(); + session.beginTransaction(); + List result = session.createQuery("from RuleDef as rule where rule.tags.tag = :tag") + .setString("tag", tag) + .list(); + session.getTransaction().commit(); + return result; + } + + + + public RuleSetDef saveRuleSet(RuleSetDef ruleSet) { + Session session = getSession(); + session.beginTransaction(); + saveTags(session, ruleSet.getTags()); + session.saveOrUpdate(ruleSet); + session.getTransaction().commit(); + return ruleSet; + } + + public RuleSetDef retrieveRuleSet(String ruleSetName, long versionNumber) { + Session session = getSession(); + session.beginTransaction(); + RuleSetDef def = (RuleSetDef) + session.createQuery("from RuleSetDef where name = :name and versionNumber = :versionNumber") + .setString("name", ruleSetName ) + .setLong("versionNumber", versionNumber).uniqueResult(); + session.getTransaction().commit(); + return def; + } + private Session getSession(){ Session session = HibernateUtil.getSessionFactory().getCurrentSession(); return session; Modified: trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleDef.hbm.xml =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleDef.hbm.xml 2005-12-30 06:39:52 UTC (rev 1960) +++ trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleDef.hbm.xml 2005-12-30 10:42:30 UTC (rev 1961) @@ -10,10 +10,10 @@ <id name="id" column="RULE_ID"> <generator class="native"/> </id> - <natural-id> +<!-- <natural-id> --> <property name="name"/> <property name="versionNumber" /> - </natural-id> +<!-- </natural-id> --> <property name="content" /> <property name="status" /> @@ -23,8 +23,14 @@ <property name="documentation" /> <property name="effectiveDate" /> <property name="expiryDate" /> - <property name="dateCreated" type="timestamp" column="DATE_CREATED"/> <property name="head" /> + <property name="deleted" /> + + <!-- tags to aid with searching and management of rules --> + <set name="tags" table="RULE_TAGS" lazy="false"> + <key column="RULE_ID"/> + <many-to-many column="TAG_ID" class="org.drools.repository.Tag"/> + </set> </class> Added: trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml 2005-12-30 06:39:52 UTC (rev 1960) +++ trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml 2005-12-30 10:42:30 UTC (rev 1961) @@ -0,0 +1,44 @@ +<?xml version="1.0"?> +<!DOCTYPE hibernate-mapping PUBLIC + "-//Hibernate/Hibernate Mapping DTD 3.0//EN" + "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + + +<hibernate-mapping> + + <class name="org.drools.repository.RuleSetDef" table="RULESET_DEFINITIONS"> + <id name="id" column="RULESET_ID"> + <generator class="native"/> + </id> + + <natural-id> + <property name="name" /> + <property name="versionNumber" /> + </natural-id> + + <component name="metaData"> + <property name="title" /> + <property name="creator" /> + <property name="subject" /> + <property name="description" /> + <property name="publisher" /> + <property name="contributor" /> + <property name="dateCreated" /> + <property name="format" /> + <property name="source" /> + <property name="language" /> + <property name="relation" /> + <property name="coverage" /> + <property name="rights" /> + </component> + + + <!-- tags to aid with searching and management of rules --> + <set name="tags" table="RULESET_TAGS" lazy="false"> + <key column="RULESET_ID"/> + <many-to-many column="TAG_ID" class="org.drools.repository.Tag"/> + </set> + + </class> + +</hibernate-mapping> \ No newline at end of file Property changes on: trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/Tag.hbm.xml =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/Tag.hbm.xml 2005-12-30 06:39:52 UTC (rev 1960) +++ trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/Tag.hbm.xml 2005-12-30 10:42:30 UTC (rev 1961) @@ -0,0 +1,13 @@ +<?xml version="1.0"?> +<!DOCTYPE hibernate-mapping PUBLIC + "-//Hibernate/Hibernate Mapping DTD 3.0//EN" + "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + + +<hibernate-mapping> + + <class name="org.drools.repository.Tag" table="DROOLS_TAGS"> + <id name="tag" column="TAG_VALUE"/> + </class> + +</hibernate-mapping> \ No newline at end of file Property changes on: trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/Tag.hbm.xml ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/db/PersistCase.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/db/PersistCase.java 2005-12-30 06:39:52 UTC (rev 1960) +++ trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/db/PersistCase.java 2005-12-30 10:42:30 UTC (rev 1961) @@ -0,0 +1,14 @@ +package org.drools.repository.db; + +import junit.framework.TestCase; + +public class PersistCase extends TestCase { + + + public RepositoryImpl getRepo() { + RepositoryImpl repo = new RepositoryImpl(); + return repo; + } + + +} Property changes on: trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/db/PersistCase.java ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/db/RepositoryImplTest.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/db/RepositoryImplTest.java 2005-12-30 06:39:52 UTC (rev 1960) +++ trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/db/RepositoryImplTest.java 2005-12-30 10:42:30 UTC (rev 1961) @@ -1,40 +1,53 @@ package org.drools.repository.db; import java.util.List; +import java.util.Set; +import junit.framework.TestCase; + import org.drools.repository.RuleDef; -import junit.framework.TestCase; +public class RepositoryImplTest extends PersistCase { -public class RepositoryImplTest extends TestCase { - public void testStoreNewRuleDef() throws Exception { RepositoryImpl repo = getRepo(); - RuleDef def = repo.addNewRule("myRule", "A rule", "some comment"); + RuleDef def = repo.addNewRule(new RuleDef("myRule", "A rule")); assertNotNull(def.getId()); - System.out.println(def.getId()); - - - def = repo.addNewRule("myRule2", "A rule2", "some comment"); - System.out.println(def.getId()); - - def = repo.addNewRule("myRule3", "A rule3", "some comment"); - assertNotNull(def.getDateCreated()); + def = repo.addNewRule(new RuleDef("myRule2", "A rule2")); + def = new RuleDef("myRule3", "A rule3"); + def.addTag("tag1").addTag("tag2").addTag("HR"); + def = repo.addNewRule(def); + assertNotNull(def.getId()); } public void testListRules() { RepositoryImpl repo = getRepo(); - repo.addNewRule("blah", "blah", "yeah"); - List list = repo.listRules(true); + repo.addNewRule(new RuleDef("blah", "blah")); + List list = repo.listAllRules(true); assertTrue(list.size() > 0); } + public void testRetreieveRuleWithTags() { + RepositoryImpl repo = getRepo(); + RuleDef newRule = new RuleDef("my rule", "content"); + newRule.addTag("HR").addTag("SALARY"); + repo.addNewRule(newRule); + + RuleDef rule = repo.retrieveRule("my rule", 1); + assertNotNull(rule); + assertEquals("my rule", rule.getName()); + + Set tags = rule.getTags(); + assertEquals(2, tags.size()); + String[] tagList = rule.listTags(); + assertTrue(tagList[0].equals("HR") || tagList[0].equals("SALARY")); + + List rules = repo.findRulesByTag("HR"); + assertTrue(rules.size() > 0); + + } - private RepositoryImpl getRepo() { - RepositoryImpl repo = new RepositoryImpl(); - return repo; - } + - } Added: trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/db/RuleSetPersistenceTest.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/db/RuleSetPersistenceTest.java 2005-12-30 06:39:52 UTC (rev 1960) +++ trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/db/RuleSetPersistenceTest.java 2005-12-30 10:42:30 UTC (rev 1961) @@ -0,0 +1,29 @@ +package org.drools.repository.db; + +import org.drools.repository.MetaData; +import org.drools.repository.RuleSetDef; + + + +import junit.framework.TestCase; + +public class RuleSetPersistenceTest extends PersistCase { + + public void testLoadSaveRuleSet() { + MetaData meta = new MetaData(); + meta.setCreator("Michael Neale"); + meta.setRights("Unlimited"); + + RuleSetDef def = new RuleSetDef("my ruleset", meta); + def.addTag("ME"); + RepositoryImpl repo = getRepo(); + repo.saveRuleSet(def); + + RuleSetDef def2 = repo.retrieveRuleSet("my ruleset", 1); + assertEquals("my ruleset", def2.getName()); + assertEquals("Michael Neale", def2.getMetaData().getCreator()); + assertEquals(1, def2.getTags().size()); + + } + +} Property changes on: trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/db/RuleSetPersistenceTest.java ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/labs/jbossrules/drools-repository/src/test/resources/hibernate.cfg.xml =================================================================== --- trunk/labs/jbossrules/drools-repository/src/test/resources/hibernate.cfg.xml 2005-12-30 06:39:52 UTC (rev 1960) +++ trunk/labs/jbossrules/drools-repository/src/test/resources/hibernate.cfg.xml 2005-12-30 10:42:30 UTC (rev 1961) @@ -32,8 +32,13 @@ <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">create</property> + <!-- add in all the objects below --> <mapping resource="org/drools/repository/RuleDef.hbm.xml"/> + <mapping resource="org/drools/repository/Tag.hbm.xml"/> + <mapping resource="org/drools/repository/RuleSetDef.hbm.xml"/> + + </session-factory> </hibernate-configuration> \ No newline at end of file |