Author: glandais Date: 2008-02-12 19:55:26 +0000 (Tue, 12 Feb 2008) New Revision: 875 Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java Log: Versioning business rules Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-12 19:54:32 UTC (rev 874) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-12 19:55:26 UTC (rev 875) @@ -561,18 +561,26 @@ */ protected boolean processVersionRules(String token, MetaData metaData) throws Exception { + // This one will always be the latest + metaData.setLatest(true); + // Check existing version in storage MetaData previousVersion = getStorageEngine().getMetadata(token, - metaData.getUuid(), metaData.getVersion()); + metaData.getUuid()); + // Version rules if (previousVersion != null) { previousVersion.setLatest(false); update(token, previousVersion.getUuid(), previousVersion .getVersion(), previousVersion); - metaData.setLatest(true); - metaData.setVersion(incrementVersion(previousVersion.getVersion()) - .toString()); + // Increment version only if needed + if (metaData.getVersion().compareTo( + incrementVersion(previousVersion.getVersion())) <= 0) { + metaData.setVersion(incrementVersion( + previousVersion.getVersion()).toString()); + } + return true; } return false; @@ -580,9 +588,20 @@ private boolean notExists(String token, MetaData metaData) throws Exception { MetaData previousVersion = getStorageEngine().getMetadata(token, - metaData.getUuid(), metaData.getVersion()); + metaData.getUuid()); + if (previousVersion != null && previousVersion.getHash().equals(metaData.getHash())) { + + if (metaData.getVersion().compareTo(previousVersion.getVersion()) < 0) { + metaData.setVersion(previousVersion.getVersion().toString()); + } else { + Version versionToUpgrade = previousVersion.getVersion().clone(); + previousVersion.setVersion(metaData.getVersion().toString()); + update(token, previousVersion.getUuid(), versionToUpgrade, + previousVersion); + } + return false; } return true;