Author: bpoussin Date: 2010-12-17 16:14:14 +0100 (Fri, 17 Dec 2010) New Revision: 618 Url: http://nuiton.org/repositories/revision/wikitty/618 Log: - fix bug in incremation version for force store call - add javadoc to explain it - fix test for that Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittyStorage.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/storage/WikittyStorage.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittyStorage.java 2010-12-17 15:12:52 UTC (rev 617) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittyStorage.java 2010-12-17 15:14:14 UTC (rev 618) @@ -44,6 +44,17 @@ /** * Store wikitty in storage. + * + * if force is true, wikitty in argument is all time stored. + * if wikitty already stored and deleted, wikitty is born again + * + * new version is computed as follow: + * <pre> + * if version in wikitty > version in database + * newversion = version in wikitty + * else + * newversion = version in database + 1 + * </pre> * * @param transaction transaction * @param wikitties wikitty collection 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-12-17 15:12:52 UTC (rev 617) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java 2010-12-17 15:14:14 UTC (rev 618) @@ -614,12 +614,16 @@ } // store 4 : same but with force (increased by force) - getWikittyService().store(null, Collections.singletonList(myNewWikitty), true); - Assert.assertEquals("3.0", myNewWikitty.getVersion()); + WikittyEvent event = getWikittyService().store( + null, Collections.singletonList(myWikitty), true); + event.update(myWikitty); + Assert.assertEquals("3.0", myWikitty.getVersion()); // store 5 : fix version (not increased by force) myNewWikitty.setVersion("11.0"); - getWikittyService().store(null, Collections.singletonList(myNewWikitty), true); + event = getWikittyService().store( + null, Collections.singletonList(myNewWikitty), true); + event.update(myNewWikitty); Assert.assertEquals("11.0", myNewWikitty.getVersion()); } 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-12-17 15:12:52 UTC (rev 617) +++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java 2010-12-17 15:14:14 UTC (rev 618) @@ -241,27 +241,15 @@ // compute new version, but not change wikitty String newVersion = null; if (force) { - if (actualVersion == null) { //no version in place - if (requestedVersion == null) { //no version requested - newVersion = WikittyUtil.DEFAULT_VERSION; - } else { //version requested - newVersion = requestedVersion; - } - } else { //version in place is not null - 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 - continue; - } else if (WikittyUtil.versionGreaterThan(requestedVersion, actualVersion)) { //requested version is newer - newVersion = requestedVersion; - } else { //requested version is obsolete -// FIXME poussin 20101118 pourquoi lorsqu'on demande un force il peut y avoir un "Wikitty is obsolete" -// ce qui ne permet pas de rejouer plusieurs fois les events pour les besoins du slave :( - throw new WikittyObsoleteException(String.format( - "Your wikitty '%s' is obsolete (saving: '%s'; existing: '%s')", wikitty.getId(), requestedVersion, actualVersion)); - } + // requestedVersion is never null + // versionGreaterThan support null for actualVersion + // and in this case return true + // see javadoc for more explanation + if (WikittyUtil.versionGreaterThan(requestedVersion, actualVersion)) { + newVersion = requestedVersion; + } else { + // else take actualVersion as base version + newVersion = WikittyUtil.incrementMajorRevision(actualVersion); } } else { if (WikittyUtil.versionEquals(actualVersion, requestedVersion) && deletionDate == null) { @@ -339,6 +327,7 @@ } // update extensions in wikitty object + // force all time deletion date to null String q = jdbcQuery.getProperty(QUERY_UPDATE_WIKITTY_ADMIN); WikittyJDBCUtil.doQuery(connection, q, newVersion, extensionList, null, wikitty.getId()); @@ -351,6 +340,8 @@ } return result; + } catch (WikittyException eee) { + throw eee; } catch (Exception eee) { throw new WikittyException("Can't store wikitty", eee); } finally {