Author: bpoussin Date: 2011-11-19 18:14:39 +0100 (Sat, 19 Nov 2011) New Revision: 1253 Url: http://nuiton.org/repositories/revision/wikitty/1253 Log: Evolution #1814: Add method on Proxy and Service to retrieve extensions and all dependencies Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyExtension.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceDelegator.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/AbstractWikittyFileService.java trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFallbackService.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2011-11-09 16:36:07 UTC (rev 1252) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2011-11-19 17:14:39 UTC (rev 1253) @@ -1331,6 +1331,23 @@ return extension; } + /** + * Search extension with name in last version. + * + * @param extensionNames extension name + * @return extension wanted with dependencies extensions at head of list + */ + public List<WikittyExtension> restoreExtensionAndDependenciesLastVesion(Collection<String> extensionNames) { + long start = TimeLog.getTime(); + List<WikittyExtension> result = + wikittyService.restoreExtensionAndDependenciesLastVesion( + securityToken, extensionNames); + + timeLog.log(start, "restoreExtensionAndDependenciesLastVesion"); + return result; + + } + public void deleteExtension(String extName) { long start = TimeLog.getTime(); wikittyService.deleteExtension(securityToken, extName); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2011-11-09 16:36:07 UTC (rev 1252) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2011-11-19 17:14:39 UTC (rev 1253) @@ -281,6 +281,15 @@ String securityToken, String name); /** + * Search extension with name in last version. + * + * @param extensionNames extension name + * @return extension wanted with dependencies extensions at head of list + */ + public List<WikittyExtension> restoreExtensionAndDependenciesLastVesion( + String securityToken, Collection<String> extensionNames); + + /** * Restore wikitty * * @param securityToken security token Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyExtension.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyExtension.java 2011-11-09 16:36:07 UTC (rev 1252) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyExtension.java 2011-11-19 17:14:39 UTC (rev 1253) @@ -74,9 +74,6 @@ /** * Name of others extensions needed to put this extension to object. - * - * Warning : Multiples extensions are not supported yet. - * */ protected List<String> requires; Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceDelegator.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceDelegator.java 2011-11-09 16:36:07 UTC (rev 1252) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceDelegator.java 2011-11-19 17:14:39 UTC (rev 1253) @@ -150,6 +150,12 @@ return delegate.restoreExtensionLastVersion(securityToken, name); } + public List<WikittyExtension> restoreExtensionAndDependenciesLastVesion( + String securityToken, Collection<String> extensionNames) { + return delegate.restoreExtensionAndDependenciesLastVesion( + securityToken, extensionNames); + } + @Override public List<Wikitty> restore(String securityToken, List<String> id) { return delegate.restore(securityToken, id); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java 2011-11-09 16:36:07 UTC (rev 1252) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java 2011-11-19 17:14:39 UTC (rev 1253) @@ -38,6 +38,7 @@ import java.util.Map; import java.util.Set; import java.util.LinkedHashSet; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -469,10 +470,57 @@ if (tx != null && tx.isStarted()) { tx.rollback(); } - throw new WikittyException("Can't store extensions", eee); + throw new WikittyException("Can't restore extensions", eee); } } + @Override + public List<WikittyExtension> restoreExtensionAndDependenciesLastVesion( + String securityToken, Collection<String> extensionNames) { + WikittyTransaction tx = WikittyTransaction.get(); + boolean txBeginHere = false; + try { + if (!tx.isStarted()) { + tx.begin(); + txBeginHere = true; + } + + List<WikittyExtension> result = new ArrayList<WikittyExtension>(); + + for (String extName : extensionNames) { + WikittyExtension ext = restoreExtensionLastVersion( + securityToken, extName); + if (ext != null) { + // on recherche les dependances de cette extension ... + List<String> requires = ext.getRequires(); + if (CollectionUtils.isNotEmpty(requires)) { + List<WikittyExtension> dependencies = + restoreExtensionAndDependenciesLastVesion( + securityToken, requires); + // ... et on les ajoute avant dans le resultat + result .addAll(dependencies); + } + result.add(ext); + } + } + + if (txBeginHere) { + tx.commit(); + } + return result; + } catch (WikittyException ex) { + if (tx != null && tx.isStarted()) { + tx.rollback(); + } + throw ex; + } catch (Exception eee) { + if (tx != null && tx.isStarted()) { + tx.rollback(); + } + throw new WikittyException("Can't restore extensions", eee); + } + } + /** * restore one wikitty * Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java 2011-11-09 16:36:07 UTC (rev 1252) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java 2011-11-19 17:14:39 UTC (rev 1253) @@ -28,12 +28,12 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.ApplicationConfig; @@ -248,6 +248,29 @@ } @Override + public List<WikittyExtension> restoreExtensionAndDependenciesLastVesion(String securityToken, Collection<String> extensionNames) { + List<WikittyExtension> result = new ArrayList<WikittyExtension>(); + + for (String extName : extensionNames) { + WikittyExtension ext = restoreExtensionLastVersion( + securityToken, extName); + if (ext != null) { + // on recherche les dependances de cette extension ... + List<String> requires = ext.getRequires(); + if (CollectionUtils.isNotEmpty(requires)) { + List<WikittyExtension> dependencies = + restoreExtensionAndDependenciesLastVesion( + securityToken, requires); + // ... et on les ajoute avant dans le resultat + result .addAll(dependencies); + } + result.add(ext); + } + } + return result; + } + + @Override public List<Wikitty> restore(String securityToken, List<String> ids) { List<Wikitty> resultWS = ws.restore(securityToken, ids); List<Wikitty> resultTx = tx.restore(securityToken, ids); Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/AbstractWikittyFileService.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/AbstractWikittyFileService.java 2011-11-09 16:36:07 UTC (rev 1252) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/AbstractWikittyFileService.java 2011-11-19 17:14:39 UTC (rev 1253) @@ -69,6 +69,7 @@ import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.commons.collections.CollectionUtils; /** @@ -589,5 +590,28 @@ return null; } + @Override + public List<WikittyExtension> restoreExtensionAndDependenciesLastVesion(String securityToken, Collection<String> extensionNames) { + List<WikittyExtension> result = new ArrayList<WikittyExtension>(); + + for (String extName : extensionNames) { + WikittyExtension ext = restoreExtensionLastVersion( + securityToken, extName); + if (ext != null) { + // on recherche les dependances de cette extension ... + List<String> requires = ext.getRequires(); + if (CollectionUtils.isNotEmpty(requires)) { + List<WikittyExtension> dependencies = + restoreExtensionAndDependenciesLastVesion( + securityToken, requires); + // ... et on les ajoute avant dans le resultat + result .addAll(dependencies); + } + result.add(ext); + } + } + return result; + } + } \ No newline at end of file Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFallbackService.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFallbackService.java 2011-11-09 16:36:07 UTC (rev 1252) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFallbackService.java 2011-11-19 17:14:39 UTC (rev 1253) @@ -43,6 +43,7 @@ import java.util.Collection; import java.util.LinkedList; import java.util.List; +import org.apache.commons.collections.CollectionUtils; /** * class meant to handle multicontext for wikitty publication. If want to use @@ -247,6 +248,29 @@ return result; } + @Override + public List<WikittyExtension> restoreExtensionAndDependenciesLastVesion(String securityToken, Collection<String> extensionNames) { + List<WikittyExtension> result = new ArrayList<WikittyExtension>(); + + for (String extName : extensionNames) { + WikittyExtension ext = restoreExtensionLastVersion( + securityToken, extName); + if (ext != null) { + // on recherche les dependances de cette extension ... + List<String> requires = ext.getRequires(); + if (CollectionUtils.isNotEmpty(requires)) { + List<WikittyExtension> dependencies = + restoreExtensionAndDependenciesLastVesion( + securityToken, requires); + // ... et on les ajoute avant dans le resultat + result .addAll(dependencies); + } + result.add(ext); + } + } + return result; + } + public List<Wikitty> restore(String securityToken, List<String> id) { List<Wikitty> result = new LinkedList<Wikitty>();