r13 - trunk/wikitty-api/src/main/java/org/sharengo/wikitty
Author: echatellier Date: 2010-04-22 18:01:46 +0200 (Thu, 22 Apr 2010) New Revision: 13 Log: Fix extension migration (manage extension order changes) Modified: trunk/wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java trunk/wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtensionMigration.java trunk/wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtensionMigrationRename.java Modified: trunk/wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java =================================================================== --- trunk/wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java 2010-04-22 09:07:59 UTC (rev 12) +++ trunk/wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java 2010-04-22 16:01:46 UTC (rev 13) @@ -409,7 +409,7 @@ // Test if extension is never use in this version if(nextExtension != null) { - result = migration.migrate(result, currentExtension, nextExtension); + result = migration.migrate(this, result, currentExtension, nextExtension); currentExtension = nextExtension; } Modified: trunk/wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtensionMigration.java =================================================================== --- trunk/wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtensionMigration.java 2010-04-22 09:07:59 UTC (rev 12) +++ trunk/wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtensionMigration.java 2010-04-22 16:01:46 UTC (rev 13) @@ -42,7 +42,9 @@ new HashMap<String, WikittyExtensionMigration>(); /** - * Migrate wikitty data from oldExt version to newExt + * Migrate wikitty data from oldExt version to newExt. + * + * @param service Wikitty service that do migration * @param wikitty Wikitty object that contains data in old version * extension format * @param oldExt old extension definition @@ -50,7 +52,7 @@ * @return same wikitty as argument if nothing to do, or new wikitty * if some modification is done */ - public Wikitty migrate(Wikitty wikitty, + public Wikitty migrate(WikittyService service, Wikitty wikitty, WikittyExtension oldExt, WikittyExtension newExt); } Modified: trunk/wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtensionMigrationRename.java =================================================================== --- trunk/wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtensionMigrationRename.java 2010-04-22 09:07:59 UTC (rev 12) +++ trunk/wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtensionMigrationRename.java 2010-04-22 16:01:46 UTC (rev 13) @@ -17,9 +17,7 @@ package org.sharengo.wikitty; -import java.util.ArrayList; import java.util.Collection; -import java.util.List; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -29,6 +27,8 @@ * rename, not creation a new field, you should use tag value "renameFrom" with * name of use in before extension. * + * Since 1.5, this class also take care about extension order. + * * @author ruchaud */ public class WikittyExtensionMigrationRename implements WikittyExtensionMigration { @@ -37,8 +37,28 @@ public static String TAG_RENAME = "renameFrom"; + /** + * Recursively add extension with requires ones (orderer). + * + * @param service service + * @param wikitty wikitty to add extension to + * @param newExt extension to add + */ + protected void addExtension(WikittyService service, Wikitty wikitty, WikittyExtension newExt) { + + // manage requires before current + String requires = newExt.getRequires(); + for (String require : requires.split(",")) { + WikittyExtension newRequireExt = service.restoreExtensionLastVersion(require); + addExtension(service, wikitty, newRequireExt); + } + + // add current extension + wikitty.addExtension(newExt); + } + @Override - public Wikitty migrate(Wikitty wikitty, WikittyExtension oldExt, WikittyExtension newExt) { + public Wikitty migrate(WikittyService service, Wikitty wikitty, WikittyExtension oldExt, WikittyExtension newExt) { String wikittyId = wikitty.getId(); String wikittyVersion = wikitty.getVersion(); @@ -47,10 +67,11 @@ result.setVersion(wikittyVersion); // Add all extension and replace old by the new - List<WikittyExtension> extensions = - new ArrayList<WikittyExtension>(wikitty.getExtensions()); - result.addExtension(extensions); - result.addExtension(newExt); + for (WikittyExtension extension : wikitty.getExtensions()) { + // add one by one to manage require + addExtension(service, result, extension); + } + addExtension(service, result, newExt); // Copy other values Set<String> fqFieldNames = wikitty.fieldNames();
participants (1)
-
echatellier@users.nuiton.org