Author: bpoussin Date: 2013-09-23 17:02:45 +0200 (Mon, 23 Sep 2013) New Revision: 1575 Url: http://nuiton.org/projects/wikitty/repository/revisions/1575 Log: fixes #2855: Add new method to WikittyClient and BusinessHelper to remove extension easily Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/BusinessEntity.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/BusinessEntityImpl.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyUtilTest.java trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyDTOGenerator.java trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java 2013-09-23 13:32:53 UTC (rev 1574) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java 2013-09-23 15:02:45 UTC (rev 1575) @@ -1590,6 +1590,70 @@ } + /** + * Supprime les extensions specifique de l'objet metier passe en argument. + * L'objet ne peut donc plus etre du type passer en arguement, un wikitty + * generique est donc retourne (le wikitty est celui qui etait en interne + * de la classe metier). + * + * Le wikitty retourne doit etre sauve pour que la modification soit reelle + * + * @param e une entity dont on veut supprimer l'extension porter par le type + * metier + * @return un wikitty + * @since 3.10 + */ + public Wikitty removeExtension(BusinessEntity e) { + Wikitty result = castTo(Wikitty.class, e); + result.removeExtensions(e.getStaticExtensionNames()); + return result; + } + + /** + * Supprime les extensions specifique des objets metier passes en argument. + * L'objet ne peut donc plus etre du type passer en arguement, un wikitty + * generique est donc retourne (le wikitty est celui qui etait en interne + * de la classe metier). + * + * Le wikitty retourne doit etre sauve pour que la modification soit reelle + * + * @param e liste d'entity dont on veut supprimer l'extension porter par le type + * metier + * @return un liste de wikitty + * @since 3.10 + */ + public List<Wikitty> removeExtension(Collection<BusinessEntity> e) { + List<Wikitty> result = null; + if (e != null) { + result = new ArrayList<Wikitty>(e.size()); + for (BusinessEntity b : e) { + result.add(removeExtension(b)); + } + } + return result; + } + + /** + * Supprime les extensions specifique des objets metier passes en argument. + * L'objet ne peut donc plus etre du type passer en arguement, un wikitty + * generique est donc retourne (le wikitty est celui qui etait en interne + * de la classe metier). + * + * Le wikitty retourne doit etre sauve pour que la modification soit reelle + * + * @param e une ou plusieurs entity dont on veut supprimer l'extension porter par le type + * metier + * @return un tableau de wikitty + * @since 3.10 + */ + public Wikitty[] removeExtension(BusinessEntity ... e) { + Wikitty[] result = new Wikitty[e.length]; + for (int i=0; i<e.length; i++) { + result[i] = removeExtension(e[i]); + } + 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/entities/BusinessEntity.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/BusinessEntity.java 2013-09-23 13:32:53 UTC (rev 1574) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/BusinessEntity.java 2013-09-23 15:02:45 UTC (rev 1575) @@ -65,6 +65,14 @@ public void setWikittyVersion(String version); /** + * Return list of all extension name that this entity has by definition + * (design time) and not extension added during execution time + * @return static extension name + * @since 3.10 + */ + public Collection<String> getStaticExtensionNames(); + + /** * Return list of all extension for this object. * * @return extension names Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/BusinessEntityImpl.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/BusinessEntityImpl.java 2013-09-23 13:32:53 UTC (rev 1574) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/BusinessEntityImpl.java 2013-09-23 15:02:45 UTC (rev 1575) @@ -29,6 +29,7 @@ import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -168,6 +169,15 @@ } @Override + public Collection<String> getStaticExtensionNames() { + ArrayList<String> result = new ArrayList<String>(); + for (WikittyExtension ext : getStaticExtensions()) { + result.add(ext.getName()); + } + return result; + } + + @Override public boolean equals(Object obj) { if (obj == null) { return false; Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java 2013-09-23 13:32:53 UTC (rev 1574) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java 2013-09-23 15:02:45 UTC (rev 1575) @@ -194,13 +194,23 @@ * Remove extension in argument and all dependants extensions. * Fields of extension is removed too. * If extension in argument is not found, nothing is done - * + * * @param ext extension to remove * @since 3.9 */ void removeExtension(String ext); /** + * Remove extension in argument and all dependants extensions. + * Fields of extension is removed too. + * If extension in argument is not found, nothing is done + * + * @param exts extensions to remove + * @since 3.10 + */ + void removeExtensions(Collection<String> exts); + + /** * Check that the wikitty has a metaExtension about a given extension. * * @param metaExtensionName the metaExtension to be checked Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java 2013-09-23 13:32:53 UTC (rev 1574) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java 2013-09-23 15:02:45 UTC (rev 1575) @@ -31,6 +31,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -250,6 +251,7 @@ } } + @Override public void removeExtension(String ext) { if (target.getExtensionNames().contains(ext)) { substituteTargetWithCopy(); @@ -258,6 +260,14 @@ } @Override + public void removeExtensions(Collection<String> ext) { + if (CollectionUtils.containsAny(target.getExtensionNames(), ext)) { + substituteTargetWithCopy(); + target.removeExtensions(ext); + } + } + + @Override public boolean hasExtension(String extName) { return target.hasExtension(extName); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java 2013-09-23 13:32:53 UTC (rev 1574) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java 2013-09-23 15:02:45 UTC (rev 1575) @@ -415,6 +415,7 @@ } } + @Override public void removeExtension(String ext) { Collection<WikittyExtension> exts = getExtensionDependencies(ext, true); exts.add(extensions.get(ext)); @@ -427,6 +428,13 @@ } } + @Override + public void removeExtensions(Collection<String> exts) { + for (String e : exts) { + removeExtension(e); + } + } + /** * @see Wikitty#hasMetaExtension(String, String) */ Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyUtilTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyUtilTest.java 2013-09-23 13:32:53 UTC (rev 1574) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyUtilTest.java 2013-09-23 15:02:45 UTC (rev 1575) @@ -866,6 +866,11 @@ } @Override + public Collection<String> getStaticExtensionNames() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override public Collection<String> getExtensionNames() { throw new UnsupportedOperationException("Not supported yet."); } Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyDTOGenerator.java =================================================================== --- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyDTOGenerator.java 2013-09-23 13:32:53 UTC (rev 1574) +++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyDTOGenerator.java 2013-09-23 15:02:45 UTC (rev 1575) @@ -706,6 +706,15 @@ throw new UnsupportedOperationException("Not supported yet."); }*/); + //adding getStaticExtension method + ObjectModelOperation getStaticExtensionNames = addOperation(dtoClass, + "getStaticExtensionNames", "Collection<String>"); + addAnnotation(dtoClass, getStaticExtensionNames, "Override"); + setOperationBody(getStaticExtensionNames, "" +/*{ + throw new UnsupportedOperationException("Not supported yet."); +}*/); + //adding getField method ObjectModelOperation getField = addOperation(dtoClass, "getField", "Object"); addAnnotation(dtoClass, getField, "Override"); Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java =================================================================== --- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java 2013-09-23 13:32:53 UTC (rev 1574) +++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java 2013-09-23 15:02:45 UTC (rev 1575) @@ -475,6 +475,17 @@ } }*/); + + ObjectModelOperation removeExtension = addOperation(helper, "removeExtension", "void", ObjectModelModifier.STATIC); + addParameter(removeExtension, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty"); + setDocumentation(removeExtension, "supprime les extensions de cette classe au wikitty en argument"); + setOperationBody(removeExtension, "" +/*{ + for (WikittyExtension ext : <%=contractName%>.extensions) { + wikitty.removeExtension(ext.getName()); + } +}*/); + ObjectModelOperation toString = addOperation(helper, "toString", "String", ObjectModelModifier.STATIC); addParameter(toString, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty"); setDocumentation(toString,