Author: echatellier Date: 2010-09-28 18:16:45 +0200 (Tue, 28 Sep 2010) New Revision: 366 Url: http://nuiton.org/repositories/revision/wikitty/366 Log: Fix creation of new wikitty with already existing wikittyid/version in database (0.x = creation) Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceInMemory.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceInMemory.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceInMemory.java 2010-09-28 16:00:45 UTC (rev 365) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceInMemory.java 2010-09-28 16:16:45 UTC (rev 366) @@ -83,7 +83,8 @@ newVersion = requestedVersion; } } else { //version in place is not null - if (requestedVersion == null) { //no version requested + if (requestedVersion == null || + requestedVersion.startsWith(WikittyUtil.DEFAULT_MAJOR_VERSION_PREFIX)) { //no version requested newVersion = WikittyUtil.incrementMajorRevision(actualVersion); } else if (WikittyUtil.versionEquals(actualVersion, requestedVersion)) { //same version // wikitty is not modified, do nothing Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2010-09-28 16:00:45 UTC (rev 365) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2010-09-28 16:16:45 UTC (rev 366) @@ -50,7 +50,10 @@ */ public class WikittyUtil { - public static final String DEFAULT_VERSION = "0.0"; + public static final String DEFAULT_MAJOR_VERSION = "0"; + public static final String DEFAULT_MINOR_VERSION = "0"; + public static final String DEFAULT_MAJOR_VERSION_PREFIX = DEFAULT_MAJOR_VERSION + "."; + public static final String DEFAULT_VERSION = DEFAULT_MAJOR_VERSION_PREFIX + DEFAULT_MINOR_VERSION; public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ'Z'"; public static final String[] DATE_FORMAT_ALLOWED = { Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java 2010-09-28 16:00:45 UTC (rev 365) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java 2010-09-28 16:16:45 UTC (rev 366) @@ -32,11 +32,13 @@ import org.nuiton.wikitty.WikittyException; import org.nuiton.wikitty.WikittyExtension; import org.nuiton.wikitty.WikittyImpl; +import org.nuiton.wikitty.WikittyObsoleteException; import org.nuiton.wikitty.WikittyProxy; import org.nuiton.wikitty.WikittyUtil; +import org.nuiton.wikitty.search.Element; import org.nuiton.wikitty.search.Search; -public class StorageTest extends AbstractTestConformance { +public abstract class StorageTest extends AbstractTestConformance { protected final static Log log = LogFactory.getLog(StorageTest.class); @@ -204,7 +206,6 @@ } @Test - // not in StorageTest because InMemory don't support find public void testStoreFindAll() throws Exception { // create some wikitty to permit search test @@ -244,8 +245,12 @@ assertEquals(wikitties.subList(0, 2), wikittyFind); } + /** + * Test ignored because WikittyServiceInMemory don't support facets. + * + * @throws Exception + */ @Test - // not in StorageTest because InMemory don't support find public void testStoreFindAllFacet() throws Exception { // create some wikitty to permit search test @@ -294,7 +299,6 @@ } @Test - // not in StorageTest because InMemory don't support find public void testStoreFindDelete() throws Exception { // create some wikitty to permit search test @@ -358,7 +362,7 @@ // test to find deleted wikitty // test if solr index is coherent with database - Criteria criteria1 = Search.query().eq("id", wikittySource.getId()).criteria(); + Criteria criteria1 = Search.query().eq(Element.ELT_ID, wikittySource.getId()).criteria(); Wikitty searchedWikitty1 = ws.findByCriteria(null, criteria1); Assert.assertNotNull(searchedWikitty1); @@ -368,13 +372,17 @@ // test to find deleted wikitty // test if solr index is coherent with database - Criteria criteria2 = Search.query().eq("id", wikittySource.getId()).criteria(); + Criteria criteria2 = Search.query().eq(Element.ELT_ID, wikittySource.getId()).criteria(); Wikitty searchedWikitty2 = ws.findByCriteria(null, criteria2); Assert.assertNull(searchedWikitty2); } + /** + * Test ignored because WikittyServiceInMemory don't support labels. + * + * @throws Exception + */ @Test - // not in StorageTest because InMemory don't support addLabel public void testStoreAndLabel() throws Exception { // create some wikitty to permit search test @@ -443,7 +451,7 @@ } - private void assign(Wikitty wikitty, TreeNodeImpl root, String path) { + protected void assign(Wikitty wikitty, TreeNodeImpl root, String path) { String[] nodeNames = path.split("/"); TreeNodeImpl currentNode = root; outerloop : for( String nodeName : nodeNames ) { @@ -509,4 +517,72 @@ Assert.assertFalse(labels.isEmpty()); Assert.assertEquals("toto", labels.get(0)); } + + /** + * Test les differents cas du forage de version lors du store. + */ + @Test + public void testStorageVersionForce() { + + // store 1 + Wikitty myWikitty = new WikittyImpl(); + myWikitty.addExtension(TreeNodeImpl.extensions); + myWikitty.setField(TreeNode.EXT_TREENODE, TreeNode.FIELD_TREENODE_NAME, "name"); + ws.store(null, myWikitty); + Assert.assertEquals("1.0", myWikitty.getVersion()); + + // store 2 : no modification + ws.store(null, myWikitty); + Assert.assertEquals("1.0", myWikitty.getVersion()); + + // store 3 : modification + myWikitty.setField(TreeNode.EXT_TREENODE, TreeNode.FIELD_TREENODE_NAME, "new name"); + ws.store(null, myWikitty); + Assert.assertEquals("2.0", myWikitty.getVersion()); + + // store 4 : new wikitty with same wikitty id (obsolete) + Wikitty myNewWikitty = new WikittyImpl(myWikitty.getId()); + myWikitty.setField(TreeNode.EXT_TREENODE, TreeNode.FIELD_TREENODE_NAME, "new wikitty"); + try { + ws.store(null, myNewWikitty); + Assert.fail("Test must throw WikittyObsoleteException"); + } + catch (WikittyObsoleteException ex) { + if (log.isTraceEnabled()) { + log.trace("Wikitty obsolete", ex); + } + } + + // store 4 : same but with force (increased by force) + ws.store(null, Collections.singletonList(myNewWikitty), true); + Assert.assertEquals("3.0", myNewWikitty.getVersion()); + + // store 5 : fix version (not increased by force) + myNewWikitty.setVersion("11.0"); + ws.store(null, Collections.singletonList(myNewWikitty), true); + Assert.assertEquals("11.0", myNewWikitty.getVersion()); + } + + /** + * Test qu'une sauvegarde de wikitty précédemment supprimé fonctionne. + */ + @Test + public void testStoragePreviouslyDeleted() { + + // store 1 + Wikitty myWikitty = new WikittyImpl(); + myWikitty.addExtension(TreeNodeImpl.extensions); + myWikitty.setField(TreeNode.EXT_TREENODE, TreeNode.FIELD_TREENODE_NAME, "name"); + ws.store(null, myWikitty); + + // delete + ws.delete(null, myWikitty.getId()); + Wikitty restoredWikitty = ws.restore(null, myWikitty.getId()); + Assert.assertNull(restoredWikitty); + + // store again + ws.store(null, myWikitty); + restoredWikitty = ws.restore(null, myWikitty.getId()); + Assert.assertNotNull(restoredWikitty); + } } Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java =================================================================== --- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java 2010-09-28 16:00:45 UTC (rev 365) +++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java 2010-09-28 16:16:45 UTC (rev 366) @@ -193,7 +193,8 @@ newVersion = requestedVersion; } } else { //version in place is not null - if (requestedVersion == null) { //no version requested + if (requestedVersion == null || //no version requested + requestedVersion.startsWith(WikittyUtil.DEFAULT_MAJOR_VERSION_PREFIX)) { // or 0.x version forced (creation) newVersion = WikittyUtil.incrementMajorRevision(actualVersion); } else if (WikittyUtil.versionEquals(actualVersion, requestedVersion) && deletionDate == null) { //same version // wikitty is not modified, do nothing