Author: mic...@jb... Date: 2006-01-07 00:03:43 -0500 (Sat, 07 Jan 2006) New Revision: 2013 Added: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryException.java 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/RuleSetAttachment.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/main/resources/org/drools/repository/RuleSetDef.hbm.xml trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java Log: Got versioning working Added: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryException.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryException.java 2006-01-07 04:19:02 UTC (rev 2012) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryException.java 2006-01-07 05:03:43 UTC (rev 2013) @@ -0,0 +1,13 @@ +package org.drools.repository; + +/** + * + * @author <a href="mailto:mic...@gm..."> Michael Neale</a> + */ +public class RepositoryException extends RuntimeException { + + public RepositoryException(String message) { + super(message); + } + +} Property changes on: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryException.java ___________________________________________________________________ Name: svn:eol-style + native 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 2006-01-07 04:19:02 UTC (rev 2012) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java 2006-01-07 05:03:43 UTC (rev 2013) @@ -126,12 +126,12 @@ public String getName(){ return name; } - public RuleDef setName(String name){ - this.name = name; - return this; + public void setName(String name){ + this.name = name; } - /** return a list of tags as Strings. Tags are stored as Tag objects, + /** + * Return a list of tags as Strings. Tags are stored as Tag objects, * but are essentially strings. */ public String[] listTags() { @@ -164,7 +164,7 @@ RuleDef copy() { RuleDef newVersion = new RuleDef(); newVersion.content = this.content; - newVersion.documentation = documentation; + newVersion.documentation = this.documentation; newVersion.effectiveDate = this.effectiveDate; newVersion.expiryDate = this.expiryDate; if (this.metaData != null) { Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetAttachment.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetAttachment.java 2006-01-07 04:19:02 UTC (rev 2012) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetAttachment.java 2006-01-07 05:03:43 UTC (rev 2013) @@ -17,9 +17,8 @@ public class RuleSetAttachment extends Persistent { - private static final long serialVersionUID = 7474038734785975202L; + private static final long serialVersionUID = 7474038734785975202L; - private byte[] content; private String originalFileName; 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 2006-01-07 04:19:02 UTC (rev 2012) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java 2006-01-07 05:03:43 UTC (rev 2013) @@ -30,6 +30,7 @@ this.tags = new HashSet(); this.rules = new HashSet(); this.attachments = new HashSet(); + this.versionHistory = new HashSet(); this.workingVersionNumber = 1; } @@ -117,6 +118,16 @@ return workingVersionNumber; } + /** + * This will only be set when loading the RuleSet from the repository. + * When you load a ruleset, a version number is specified. + * This property is not persistent, as multiple people could be working on different versions + * at the same time. + * + * DO NOT set this property. + * + * @param workingVersionNumber + */ public void setWorkingVersionNumber(long workingVersionNumber){ this.workingVersionNumber = workingVersionNumber; } @@ -145,6 +156,7 @@ * */ public void createNewVersion(String comment, String newStatus) { + this.workingVersionNumber++; RuleSetVersionInfo newVersion = new RuleSetVersionInfo(); newVersion.setStatus(newStatus); @@ -155,7 +167,7 @@ //will get a new identity, and have the new workingVersionNumber //now have to create new rules and add to the collection - createNewRuleVersions( comment ); + createNewRuleVersions( comment, this.workingVersionNumber ); // //create new attachment // for ( Iterator iter = this.attachments.iterator(); iter.hasNext(); ) { @@ -170,14 +182,19 @@ } - private void createNewRuleVersions(String comment){ + private void createNewRuleVersions(String comment, long newVersionNumber){ + Set newVersions = new HashSet(); for ( Iterator iter = this.rules.iterator(); iter.hasNext(); ) { RuleDef old = (RuleDef) iter.next(); - RuleDef clone = (RuleDef) old.copy(); - clone.setVersionComment(comment); - clone.setVersionNumber(this.workingVersionNumber); - this.rules.add(clone); + if (old.getVersionNumber() == newVersionNumber - 1) { + //we only want to clone rules that are for the version being cloned + RuleDef clone = old.copy(); + clone.setVersionComment(comment); + clone.setVersionNumber(newVersionNumber); + newVersions.add(clone); + } } + this.rules.addAll(newVersions); } public String toString() { 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 2006-01-07 04:19:02 UTC (rev 2012) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java 2006-01-07 05:03:43 UTC (rev 2013) @@ -71,12 +71,20 @@ return ruleSet; } - public RuleSetDef loadRuleSet(String ruleSetName) { + /** This loads a RuleSet with the appropriate workingVersionNumber applied to its assets. + */ + public RuleSetDef loadRuleSet(String ruleSetName, long workingVersionNumber) { Session session = getSession(); - session.beginTransaction(); + + session.beginTransaction(); + session.enableFilter("workingVersionFilter") + .setParameter("filteredVersionNumber", + new Long(workingVersionNumber)); RuleSetDef def = (RuleSetDef) session.createQuery("from RuleSetDef where name = :name") .setString("name", ruleSetName ).uniqueResult(); + def.setWorkingVersionNumber(workingVersionNumber); + session.disableFilter("workingVersionFilter"); session.getTransaction().commit(); return def; } 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 2006-01-07 04:19:02 UTC (rev 2012) +++ trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleDef.hbm.xml 2006-01-07 05:03:43 UTC (rev 2013) @@ -23,8 +23,6 @@ <property name="expiryDate" /> - <!-- want nothing to be lazy, no runtime proxies??? --> - <!-- tags to aid with searching and management of rules --> <set name="tags" table="RULE_TAGS" lazy="false" cascade="all"> <key column="RULE_ID"/> <one-to-many class="org.drools.repository.Tag" /> @@ -46,6 +44,10 @@ <property name="rights" /> </component> + + </class> + + </hibernate-mapping> \ No newline at end of file Modified: 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 2006-01-07 04:19:02 UTC (rev 2012) +++ trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml 2006-01-07 05:03:43 UTC (rev 2013) @@ -13,9 +13,7 @@ <property name="name" /> - <property name="workingVersionNumber" /> - <component name="metaData"> <property name="title" /> <property name="creator" /> @@ -43,6 +41,7 @@ <set name="rules" table="RULESET_RULES" lazy="false" cascade="all"> <key column="RULESET_ID"/> <one-to-many class="org.drools.repository.RuleDef"/> + <filter name="workingVersionFilter" condition=":filteredVersionNumber = versionNumber" /> </set> <set name="versionHistory" table="RULESET_VERSION_HISTORY" lazy="false" cascade="all"> @@ -58,5 +57,10 @@ </class> + + <!-- This magic allows us to have a view of working versions only --> + <filter-def name="workingVersionFilter"> + <filter-param name="filteredVersionNumber" type="long" /> + </filter-def> </hibernate-mapping> \ No newline at end of file Modified: trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java 2006-01-07 04:19:02 UTC (rev 2012) +++ trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java 2006-01-07 05:03:43 UTC (rev 2013) @@ -1,6 +1,7 @@ package org.drools.repository; import java.util.HashSet; +import java.util.Iterator; import java.util.Set; import org.drools.repository.AttachmentFile; @@ -24,7 +25,7 @@ RepositoryImpl repo = getRepo(); repo.save(def); - RuleSetDef def2 = repo.loadRuleSet("my ruleset"); + RuleSetDef def2 = repo.loadRuleSet("my ruleset", 1); assertEquals("my ruleset", def2.getName()); assertEquals("Michael Neale", def2.getMetaData().getCreator()); assertEquals(1, def2.getTags().size()); @@ -44,7 +45,7 @@ RepositoryImpl repo = getRepo(); repo.save(ruleSet); - RuleSetDef loaded = repo.loadRuleSet("Uber 1"); + RuleSetDef loaded = repo.loadRuleSet("Uber 1", 1); assertEquals(2, loaded.getRules().size()); } @@ -63,7 +64,7 @@ RepositoryImpl repo = getRepo(); repo.save(ruleSet); - RuleSetDef result = repo.loadRuleSet("Attachmate"); + RuleSetDef result = repo.loadRuleSet("Attachmate", 1); assertEquals(1, result.getAttachments().size()); RuleSetAttachment at2 = (RuleSetAttachment) result.getAttachments().iterator().next(); assertEquals("file.txt", at2.getOriginalFileName()); @@ -82,8 +83,47 @@ RepositoryImpl repo = getRepo(); repo.save(def); - RuleSetDef def2 = repo.loadRuleSet("WithHistory"); + RuleSetDef def2 = repo.loadRuleSet("WithHistory", 1); assertEquals(2, def2.getVersionHistory().size()); } + public void testNewVersionInMemory() { + RuleSetDef set = new RuleSetDef("InMemory", null); + RuleDef def1 = new RuleDef("Rule1", "blah"); + RuleDef def2 = new RuleDef("Rule2", "blah2"); + + def1.addTag("S").addTag("A"); + set.addRule(def1).addRule(def2); + + assertEquals(2, set.getRules().size()); + assertEquals(1, def1.getVersionNumber()); + assertEquals(1, def2.getVersionNumber()); + assertEquals(1, set.getWorkingVersionNumber()); + + set.createNewVersion("New version", "Draft"); + assertEquals(4, set.getRules().size()); + + assertEquals(1, def1.getVersionNumber()); + for ( Iterator iter = set.getRules().iterator(); iter.hasNext(); ) { + RuleDef rule = (RuleDef) iter.next(); + if (rule.getVersionNumber() == 2) { + assertEquals("New version", rule.getVersionComment()); + if (rule.getName().equals("Rule1")) { + assertEquals(2, rule.getTags().size()); + } + } + } + + RepositoryImpl repo = getRepo(); + repo.save(set); + + RuleSetDef loaded = repo.loadRuleSet("InMemory", 2); + assertEquals(2, loaded.getRules().size()); + + + + + + } + } |