r549 - in trunk/wikitty-api/src: main/java/org/nuiton/wikitty main/java/org/nuiton/wikitty/entities test/java/org/nuiton/wikitty/api
Author: sletellier Date: 2010-12-01 17:41:08 +0100 (Wed, 01 Dec 2010) New Revision: 549 Url: http://nuiton.org/repositories/revision/wikitty/549 Log: Modify clone methode to allow create a clone with a new wikittyId Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2010-12-01 15:32:39 UTC (rev 548) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2010-12-01 16:41:08 UTC (rev 549) @@ -812,6 +812,23 @@ } /** + * Clone wikitty with new id if {@code genId} is true + * + * @param wikittyToClone concerned + * @param genId true to generate new id + * @return cloned wikitty + * @throws CloneNotSupportedException if exception is thrown + */ + public static Wikitty clone(Wikitty wikittyToClone, boolean genId) throws CloneNotSupportedException { + if (genId) { + Wikitty w = new WikittyImpl(); + w.replaceWith(wikittyToClone, true); + return w; + } + return wikittyToClone.clone(); + } + + /** * SecurityToken is used like wikitty id and must begin with UUID_ * * @return SecurityToken that can be used like wikitty id Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java 2010-12-01 15:32:39 UTC (rev 548) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java 2010-12-01 16:41:08 UTC (rev 549) @@ -51,6 +51,13 @@ */ void replaceWith(Wikitty w); + /** + * Replace all field of current wikitty with field found in w. + * This two wikitty must have same id if force is false + * @param w wikitty where we take information + */ + void replaceWith(Wikitty w, boolean force); + String getId(); boolean isDeleted(); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java 2010-12-01 15:32:39 UTC (rev 548) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java 2010-12-01 16:41:08 UTC (rev 549) @@ -65,11 +65,16 @@ @Override public void replaceWith(Wikitty w) { + replaceWith(w, false); + } + + @Override + public void replaceWith(Wikitty w, boolean force) { if (this == w) { return; } substituteTargetWithCopy(); - target.replaceWith(w); + target.replaceWith(w, force); } public Wikitty getTarget() { Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java 2010-12-01 15:32:39 UTC (rev 548) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java 2010-12-01 16:41:08 UTC (rev 549) @@ -121,6 +121,19 @@ */ @Override public void replaceWith(Wikitty w) { + replaceWith(w, false); + } + + /** + * Replace all field of current wikitty with field found in w. + * This two wikitty must have same id if force is false. + * + * This method is used to clone Wikitty too + * + * @param w wikitty where we take information + */ + @Override + public void replaceWith(Wikitty w, boolean force) { // il faut que ce soit le meme objet mais pas la meme instance // car ca ne sert a rien de copier un objet sur lui meme if (this == w) { @@ -130,7 +143,7 @@ if (w instanceof WikittyCopyOnWrite) { replaceWith(((WikittyCopyOnWrite)w).getTarget()); } - if (this.getId().equals(w.getId())) { + if (force || this.getId().equals(w.getId())) { this.extensions.clear(); this.fieldValue.clear(); for (WikittyExtension ext : w.getExtensions()) { @@ -155,10 +168,13 @@ } } - // we must change version after field value copy, because - // copy increment version because it use setField method - this.version = w.getVersion(); - this.deleteDate = w.getDeleteDate(); + // Dont keep version if force + if (!force) { + // we must change version after field value copy, because + // copy increment version because it use setField method + this.version = w.getVersion(); + this.deleteDate = w.getDeleteDate(); + } clearDirty(); } else { Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java 2010-12-01 15:32:39 UTC (rev 548) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java 2010-12-01 16:41:08 UTC (rev 549) @@ -25,7 +25,6 @@ package org.nuiton.wikitty.api; -import org.nuiton.wikitty.entities.BusinessEntityImplTest; import java.beans.PropertyChangeListener; import java.math.BigDecimal; import java.text.ParseException; @@ -574,8 +573,44 @@ Assert.assertEquals(source.getWikittyVersion(), dest.getWikittyVersion()); Assert.assertEquals(source.getLabels(), dest.getLabels()); } + } + @Test + public void testClone() throws Exception { + { + WikittyLabel source = new WikittyLabelImpl(); + source.setWikittyVersion("1.0"); + source.addLabels("toto"); + source.addLabels("titi"); + Wikitty labelWikitty = WikittyUtil.getWikitty(null, null, source); + Wikitty cloned = WikittyUtil.clone(labelWikitty, false); + + WikittyLabelImpl labelCloned = new WikittyLabelImpl(cloned); + + Assert.assertTrue(labelWikitty.getId().equals(cloned.getId())); + Assert.assertEquals(labelWikitty.getVersion(), cloned.getVersion()); + Assert.assertTrue(source.getWikittyId().equals(labelCloned.getWikittyId())); + Assert.assertEquals(source.getWikittyVersion(), labelCloned.getWikittyVersion()); + Assert.assertEquals(source.getLabels(), labelCloned.getLabels()); + } + { + WikittyLabel source = new WikittyLabelImpl(); + source.setWikittyVersion("1.0"); + source.addLabels("toto"); + source.addLabels("titi"); + + Wikitty labelWikitty = WikittyUtil.getWikitty(null, null, source); + Wikitty cloned = WikittyUtil.clone(labelWikitty, true); + + WikittyLabelImpl labelCloned = new WikittyLabelImpl(cloned); + + Assert.assertFalse(labelWikitty.getId().equals(cloned.getId())); + Assert.assertNotSame(labelWikitty.getVersion(), cloned.getVersion()); + Assert.assertFalse(source.getWikittyId().equals(labelCloned.getWikittyId())); + Assert.assertNotSame(source.getWikittyVersion(), labelCloned.getWikittyVersion()); + Assert.assertEquals(source.getLabels(), labelCloned.getLabels()); + } } static public class LabelDTO implements WikittyLabel {
participants (1)
-
sletellier@users.nuiton.org