Author: bpoussin Date: 2011-11-20 14:38:48 +0100 (Sun, 20 Nov 2011) New Revision: 1254 Url: http://nuiton.org/repositories/revision/wikitty/1254 Log: Evolution #1815: Better support of toString representation for extension many small correction in tagValue support for extension Modified: trunk/wikitty-api/pom.xml trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportXML.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/ExtensionFactory.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/WikittyExtension.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/CommonTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/AbstractTestConformance.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/memory/InMemoryStorageTest.java trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java Modified: trunk/wikitty-api/pom.xml =================================================================== --- trunk/wikitty-api/pom.xml 2011-11-19 17:14:39 UTC (rev 1253) +++ trunk/wikitty-api/pom.xml 2011-11-20 13:38:48 UTC (rev 1254) @@ -19,6 +19,14 @@ <!-- COMPILE --> + + <!-- needed to mutualise some util method (tagValueToString) --> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>wikitty-generators</artifactId> + <version>${project.version}</version> + </dependency> + <!-- pour la communication client/serveur et la notification sur protocole cajo --> <dependency> <groupId>gnu.cajo</groupId> Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2011-11-19 17:14:39 UTC (rev 1253) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2011-11-20 13:38:48 UTC (rev 1254) @@ -57,6 +57,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import java.util.TimeZone; import java.util.UUID; import java.util.regex.Matcher; @@ -64,11 +65,13 @@ import net.iharder.Base64; import org.apache.commons.beanutils.BeanUtilsBean; import org.apache.commons.beanutils.converters.DateTimeConverter; +import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.time.DateUtils; import org.apache.commons.lang.time.FastDateFormat; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.wikitty.generator.WikittyTransformerUtil; /** * Util static method for wikitty. @@ -229,16 +232,7 @@ * @return string represent tagValues */ public static String tagValuesToString(Map<String, String> tagValues) { - String result = ""; - if(tagValues != null) { - for (String tag : tagValues.keySet()) { - String value = tagValues.get(tag); - // replaceWith " in string with \" - value = value.replaceAll("\"", "\\\\\""); - // quote value with "..." - result += " " + tag + "=\"" + tagValues.get(tag) +"\""; - } - } + String result = WikittyTransformerUtil.tagValuesToString(tagValues); return result; } @@ -259,7 +253,7 @@ // delete start and end " value = value.substring(1, value.length() - 1); // if value is between ", then inners " are quoted - value = value.replaceAll("\\\\\"", "\""); + value = StringEscapeUtils.unescapeJava(value); } result.put(tag, value); } @@ -393,7 +387,45 @@ return result; } + /** Pattern de recherche des field dans les chaines de formatage */ + static protected Pattern formatMatcher = + Pattern.compile("%[^0-9][^|$]*(\\|(.*?))?\\$[0-9]*?[a-zA-Z]"); /** + * Format wikitty for string representation. + * exemple: + * <li> "%Person.lastName$s %Person.firstName$s: %Person.birthday$tm %Person.birthday$te,%Person.birthday$tY" + * <li> "Hello %Person.firstName|unknow$s" if firstName field doesn't exist, unknow is used + * + * @param format format as {@link http://download.oracle.com/javase/6/docs/api/java/util/Formatter.html#syntax} + * execpt that position is replace with fq field name. + * @param w wikitty to format + * @return String that represent the wikitty + */ + static public String format(String formatWikitty, Wikitty w) { + Set<String> fields = w.getAllFieldNames(); + Object[] values = new Object[fields.size()]; + + String format = formatWikitty; + // convert Map field to array + int i = 0; + for (String field : fields) { + values[i++] = w.getFqField(field); + // i is incremented before replace, because String.format start at 1 not 0 + format = format.replaceAll("%"+Pattern.quote(field)+"\\$", "\\%"+i+"\\$"); + } + + // on remplace tous les champs non trouve + format = formatMatcher.matcher(format).replaceAll("$2"); + if (log.isDebugEnabled()) { + log.debug(String.format("%s -> %s (with %s)", formatWikitty, format, fields)); + } + + // use standard String.format + String result = String.format(format, values); + return result; + } + + /** * Get value as Binary. * * @param value null and empty return empty byte[] Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportXML.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportXML.java 2011-11-19 17:14:39 UTC (rev 1253) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportXML.java 2011-11-20 13:38:48 UTC (rev 1254) @@ -90,7 +90,8 @@ String extName = xpp.getAttributeValue(null, "name"); String version = xpp.getAttributeValue(null, "version"); String requires = xpp.getAttributeValue(null, "requires"); - ext = new WikittyExtension(extName, version, requires, + // FIXME poussin 20111120 il faut aussi avoir les tagValues de l'extension + ext = new WikittyExtension(extName, version, null, requires, new LinkedHashMap<String, FieldType>()); } else if ("object".equals(name)) { String id = xpp.getAttributeValue(null, "id"); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/ExtensionFactory.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/ExtensionFactory.java 2011-11-19 17:14:39 UTC (rev 1253) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/ExtensionFactory.java 2011-11-20 13:38:48 UTC (rev 1254) @@ -24,7 +24,10 @@ */ package org.nuiton.wikitty.entities; +import java.util.HashMap; import java.util.LinkedHashMap; +import java.util.Map; +import org.nuiton.wikitty.WikittyUtil; import org.nuiton.wikitty.entities.FieldType.TYPE; @@ -32,6 +35,7 @@ protected String name; protected String version; + protected Map<String, String> tagValues; protected String requiredExtension; protected LinkedHashMap<String, FieldType> fields; @@ -51,10 +55,28 @@ } public WikittyExtension extension() { - WikittyExtension ext = new WikittyExtension(name, version, requiredExtension, fields); + WikittyExtension ext = new WikittyExtension( + name, version, tagValues, requiredExtension, fields); return ext; } - + + public ExtensionFactory addTagValues(Map<String, String> tagValues) { + if (this.tagValues == null) { + this.tagValues = new HashMap<String, String>(); + } + this.tagValues.putAll(tagValues); + return this; + } + + public ExtensionFactory addTagValues(String tagValues) { + if (this.tagValues == null) { + this.tagValues = new HashMap<String, String>(); + } + Map<String, String> tv = WikittyUtil.tagValuesToMap(tagValues); + this.tagValues.putAll(tv); + return this; + } + protected void add(String fieldName, FieldType fieldType) { fields.put(fieldName, fieldType); } 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 2011-11-19 17:14:39 UTC (rev 1253) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/Wikitty.java 2011-11-20 13:38:48 UTC (rev 1254) @@ -323,7 +323,7 @@ Map<String, Object> getFieldValue(); /** - * Return all fieldName available in all extension + * Return all fieldName available in all extension. Field is fq. * @return * * @since 3.1 @@ -368,4 +368,11 @@ */ Wikitty clone() throws CloneNotSupportedException; + /** + * Return String representation of this wikitty with toString specific + * format of extension passed in argument. If this extension doesn't have + * specifique toString, normal toString is called {@link #toString()} + */ + public String toString(String extName); + } \ No newline at end of file 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 2011-11-19 17:14:39 UTC (rev 1253) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyCopyOnWrite.java 2011-11-20 13:38:48 UTC (rev 1254) @@ -103,7 +103,7 @@ } /** - * ATTENTION, la condition d'egalite n'est pas faire sur le type d'objet, + * ATTENTION, la condition d'egalite n'est pas faite sur le type d'objet, * mais seulement sur le contenu des donnees. Le equals repond a la question * "Est-ce qu'on represente le meme wikitty ?". * @@ -116,6 +116,11 @@ } @Override + public String toString(String extName) { + return target.toString(extName); + } + + @Override public int hashCode() { return target.hashCode(); } 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-19 17:14:39 UTC (rev 1253) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyExtension.java 2011-11-20 13:38:48 UTC (rev 1254) @@ -42,6 +42,7 @@ import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.nuiton.wikitty.WikittyUtil; +import org.nuiton.wikitty.generator.WikittyTransformerUtil; /** * @@ -108,22 +109,22 @@ public WikittyExtension(String name, String version, LinkedHashMap<String, FieldType> fields) { - this(name, version, (List)null, fields); + this(name, version, (Map)null, (List)null, fields); } - public WikittyExtension(String name, String version, + public WikittyExtension(String name, String version, Map<String, String> tagValues, String requires, LinkedHashMap<String, FieldType> fields) { - this(name, version, StringUtils.split(requires, ","), fields); + this(name, version, tagValues, StringUtils.split(requires, ","), fields); } - public WikittyExtension(String name, String version, + public WikittyExtension(String name, String version, Map<String, String> tagValues, String[] requires, LinkedHashMap<String, FieldType> fields) { - this(name, version, + this(name, version, tagValues, ArrayUtils.isEmpty(requires)?(List)null:Arrays.asList(requires), fields); } - public WikittyExtension(String name, String version, + public WikittyExtension(String name, String version, Map<String, String> tagValues, List<String> requires, LinkedHashMap<String, FieldType> fields) { if (version == null) { throw new IllegalArgumentException("Version must not be null"); @@ -131,6 +132,7 @@ setName(name); this.version = WikittyUtil.normalizeVersion(version); setRequires(requires); + setTagValues(tagValues); if (fields != null) { for (Map.Entry<String, FieldType> entry : fields.entrySet()) { String fieldName = entry.getKey(); @@ -186,7 +188,8 @@ } } - WikittyExtension result = new WikittyExtension(name, nextRevision, requires, nextFields); + WikittyExtension result = new WikittyExtension( + name, nextRevision, tagValues, requires, nextFields); return result; } @@ -403,4 +406,21 @@ return result; } + /** + * Return toString representation. Use tagValue 'toString' format if exist, + * else standard Wikitty.toString is call + * + * @param wikitty + * @return + */ + public String toString(Wikitty wikitty) { + String result; + String format = getTagValue(WikittyTransformerUtil.TAG_TO_STRING); + if (StringUtils.isNotBlank(format)) { + result = WikittyUtil.format(format, wikitty); + } else { + result = wikitty.toString(); + } + return result; + } } 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 2011-11-19 17:14:39 UTC (rev 1253) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyImpl.java 2011-11-20 13:38:48 UTC (rev 1254) @@ -958,6 +958,18 @@ } /** + * Return String representation of this wikitty with toString specific + * format of extension passed in argument. If this extension doesn't have + * specifique toString, normal toString is called {@link #toString()} + */ + @Override + public String toString(String extName) { + WikittyExtension ext = getExtension(extName); + String result = ext.toString(this); + return result; + } + + /** * Clone is deep for extension and values * @return * @throws CloneNotSupportedException Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/CommonTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/CommonTest.java 2011-11-19 17:14:39 UTC (rev 1253) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/CommonTest.java 2011-11-20 13:38:48 UTC (rev 1254) @@ -93,11 +93,11 @@ wikitty.addExtension(ext); Assert.assertTrue( wikitty.hasExtension("master") ); - ext = new WikittyExtension( "slave", "1", "master", null); + ext = new WikittyExtension( "slave", "1", null, "master", null); wikitty.addExtension(ext); Assert.assertTrue( wikitty.hasExtension("slave") ); - ext = new WikittyExtension("badslave", "1", "nomaster", null); + ext = new WikittyExtension("badslave", "1", null, "nomaster", null); try { wikitty.addExtension(ext); Assert.assertFalse(true); Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java 2011-11-19 17:14:39 UTC (rev 1253) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java 2011-11-20 13:38:48 UTC (rev 1254) @@ -31,7 +31,6 @@ import java.util.Collection; import java.util.Collections; import java.util.Date; -import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -53,6 +52,7 @@ import org.nuiton.wikitty.entities.WikittyLabelImpl; import org.nuiton.wikitty.entities.WikittyExtension; import org.nuiton.wikitty.WikittyUtil; +import org.nuiton.wikitty.entities.WikittyGroupImpl; import org.nuiton.wikitty.services.WikittyServiceInMemory; /** @@ -63,6 +63,49 @@ static private Log log = LogFactory.getLog(WikittyUtilTest.class); + @Test + public void testFormat() { + WikittyGroupImpl group = new WikittyGroupImpl(); + group.setName("Mon Groupe"); + + // test un cas passant + String result = WikittyUtil.format( + "Group Name = %"+WikittyGroupImpl.FQ_FIELD_WIKITTYGROUP_NAME+"$s", + group.getWikitty()); + Assert.assertEquals("Group Name = Mon Groupe", result); + + // test un cas passant avec deux fois le meme champs + result = WikittyUtil.format( + "Group Name = %"+WikittyGroupImpl.FQ_FIELD_WIKITTYGROUP_NAME+"$s(%"+WikittyGroupImpl.FQ_FIELD_WIKITTYGROUP_NAME+"$s)", + group.getWikitty()); + Assert.assertEquals("Group Name = Mon Groupe(Mon Groupe)", result); + + // test un cas ou le champs demande n'existe pas dans le wikitty (sans remplacement) + result = WikittyUtil.format( + "Group Name = %"+WikittyGroupImpl.FQ_FIELD_WIKITTYGROUP_NAME+"toto$s", + group.getWikitty()); + Assert.assertEquals("Group Name = ", result); + + // test un cas ou le champs demande n'existe pas dans le wikitty (sans remplacement) + // avec deux fois le meme champs + result = WikittyUtil.format( + "Group Name = %"+WikittyGroupImpl.FQ_FIELD_WIKITTYGROUP_NAME+"toto$s(%"+WikittyGroupImpl.FQ_FIELD_WIKITTYGROUP_NAME+"tata$s)", + group.getWikitty()); + Assert.assertEquals("Group Name = ()", result); + + // test un cas ou le champs demande n'existe pas dans le wikitty (sans remplacement) + result = WikittyUtil.format( + "Group Name = %"+WikittyGroupImpl.FQ_FIELD_WIKITTYGROUP_NAME+"toto|$s", + group.getWikitty()); + Assert.assertEquals("Group Name = ", result); + + // test un cas ou le champs demande n'existe pas dans le wikitty (avec remplacement + result = WikittyUtil.format( + "Group Name = %"+WikittyGroupImpl.FQ_FIELD_WIKITTYGROUP_NAME+"toto|noname$s", + group.getWikitty()); + Assert.assertEquals("Group Name = noname", result); + } + /** * Test of normalizeVersion method, of class WikittyUtil. */ Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/AbstractTestConformance.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/AbstractTestConformance.java 2011-11-19 17:14:39 UTC (rev 1253) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/AbstractTestConformance.java 2011-11-20 13:38:48 UTC (rev 1254) @@ -113,7 +113,7 @@ for ( int i = 0; i < types.length; i++ ) { fieldsMap.put( "fieldName" + i, types[i] ); } - return new WikittyExtension(extName, "1", requires, fieldsMap); + return new WikittyExtension(extName, "1", null, requires, fieldsMap); } public static String format(String dateTestFormat) { Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/memory/InMemoryStorageTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/memory/InMemoryStorageTest.java 2011-11-19 17:14:39 UTC (rev 1253) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/memory/InMemoryStorageTest.java 2011-11-20 13:38:48 UTC (rev 1254) @@ -128,11 +128,11 @@ public void testRequire() throws Exception { WikittyExtension extension = new WikittyExtension("Extension", "1", WikittyUtil.buildFieldMapExtension("String value")); - WikittyExtension extension1 = new WikittyExtension("Extension1", "1", "Extension", + WikittyExtension extension1 = new WikittyExtension("Extension1", "1", null, "Extension", WikittyUtil.buildFieldMapExtension("String value")); - WikittyExtension extension11 = new WikittyExtension("Extension11", "1", "Extension1", + WikittyExtension extension11 = new WikittyExtension("Extension11", "1", null, "Extension1", WikittyUtil.buildFieldMapExtension("String value")); - WikittyExtension extension2 = new WikittyExtension("Extension2", "1", "Extension", + WikittyExtension extension2 = new WikittyExtension("Extension2", "1", null, "Extension", WikittyUtil.buildFieldMapExtension("String value")); Wikitty wikitty = createWikitty("Extension.value = 123", Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java =================================================================== --- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java 2011-11-19 17:14:39 UTC (rev 1253) +++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java 2011-11-20 13:38:48 UTC (rev 1254) @@ -45,8 +45,6 @@ import java.util.Map; import java.util.Random; import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; /*{generator option: writeString = }*/ /*{generator option: parentheses = false}*/ @@ -63,12 +61,6 @@ protected Map<ObjectModelClass, ObjectModelClass> processedClasses = new HashMap<ObjectModelClass, ObjectModelClass>(); - /** pattern to parse toString tagValue - * for the string "abc{foo|bar}defrzeg{uvw|xyz}oeira" - * will match {foo|bar} and {uvw|xyz} with groups for foo, bar, uvw and xyz - */ - protected Pattern toStringTagValuePattern = Pattern.compile("\\{(([^|}])*)(?:\\|([^}]*))?\\}"); - /** map "Client.name" to "getName()" or any getter to read this attribute * those getter names are stored while generating in order to be found * later when generating toString() */ @@ -284,13 +276,18 @@ requires = "(List)null"; } - String buildFieldMapExtensionParametersInLine = StringUtils.join(buildFieldMapExtensionParameters, ", \n"); - String extensionVariableName = WikittyTransformerUtil.classToExtensionVariableName(businessEntity, false); + String tagValues = StringEscapeUtils.escapeJava( + WikittyTransformerUtil.tagValuesToString(businessEntity.getTagValues())); + String buildFieldMapExtensionParametersInLine = + StringUtils.join(buildFieldMapExtensionParameters, ", \n"); + String extensionVariableName = + WikittyTransformerUtil.classToExtensionVariableName(businessEntity, false); String staticInitializationBody = "" /*{ extension<%=businessEntity.getName()%> = new WikittyExtension(<%=extensionVariableName%>, "<%=extensionVersion%>", // version + WikittyUtil.tagValuesToMap("<%=tagValues%>"), // tag/values <%= requires %>, WikittyUtil.buildFieldMapExtension( // building field map <%=buildFieldMapExtensionParametersInLine%>)); @@ -521,66 +518,34 @@ } } - /** add a toString method + /** + * add a toString method. * if a toString is tagValue is attached to businessEntity, it will be used * to generate a toString as this : - * - * given "hello {Person.name|unknow}" - * - * will try to replace first {...} by name field value for extension Person. + * <pre> + * given "hello %Person.name|unknow$s" + * </pre> + * will try to replace field name by field value for extension Person. * if this information is not available, will do unknow. + * <p> + * use same syntaxe that {@link http://download.oracle.com/javase/6/docs/api/java/util/Formatter.html#syntax} + * * @param businessEntity * @param abstractClass */ protected void addToString(ObjectModelClass businessEntity, ObjectModelClass abstractClass) { - - String toStringOperationBody = null; - - if (businessEntity.hasTagValue(WikittyTransformerUtil.TAG_TO_STRING)) { - String toStringPattern = businessEntity.getTagValue(WikittyTransformerUtil.TAG_TO_STRING); - - // toStringPattern is something like - // "hello {Person.name|unknow} employe of {Company.name|unknow}" - // - - Matcher matcher = toStringTagValuePattern.matcher(toStringPattern); - - while (matcher.find()) { - String wholeMatch = matcher.group(0); // "{foo|bar}" - String variableName = matcher.group(1); // "foo" - String defaultValue = matcher.group(3); // "bar", may be null - - if (defaultValue == null) { - defaultValue = ""; - } - - if (attributeToGetterName.containsKey(variableName)) { - String getterName = attributeToGetterName.get(variableName); - toStringPattern = toStringPattern.replace(wholeMatch, "" -/*{" - + <%=getterName%>().toString() + - "}*/); - } else { - log.warn("no field " + variableName + " in " + businessEntity.getQualifiedName()); - toStringPattern = toStringPattern.replace(wholeMatch, defaultValue); - } - } - - toStringOperationBody = "" -/*{ - return "<%=toStringPattern%>"; -}*/; - } else { - // no toString tagValue provided, generating a default toString - toStringOperationBody = "" -/*{ - return getWikitty().toString(); -}*/; - } - + String helperClassName = WikittyTransformerUtil.businessEntityToHelperName(businessEntity); ObjectModelOperation toString = addOperation(abstractClass, "toString", "String"); + setDocumentation(toString, + "Return toString representation. Use tagValue '" + + WikittyTransformerUtil.TAG_TO_STRING + + "' format, if exist, else standard toString is call"); addAnnotation(abstractClass, toString, "Override"); - setOperationBody(toString, toStringOperationBody); + setOperationBody(toString, "" +/*{ + + return <%=helperClassName%>.toString(getWikitty()); +}*/); } protected void addMetaExtensionOperations(ObjectModelClass metaExtension, 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 2011-11-19 17:14:39 UTC (rev 1253) +++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java 2011-11-20 13:38:48 UTC (rev 1254) @@ -285,6 +285,18 @@ wikitty.addExtension(ext); } }*/); + + ObjectModelOperation toString = addOperation(helper, "toString", "String", ObjectModelModifier.STATIC); + addParameter(toString, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty"); + setDocumentation(toString, + "Return toString representation. Use tagValue '" + + WikittyTransformerUtil.TAG_TO_STRING + + "' format, if exist, else standard toString is call"); + setOperationBody(toString, "" +/*{ + + return wikitty.toString(<%=extensionVariableName%>); +}*/); } /** Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java =================================================================== --- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java 2011-11-19 17:14:39 UTC (rev 1253) +++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java 2011-11-20 13:38:48 UTC (rev 1254) @@ -27,7 +27,9 @@ import java.util.Date; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; +import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; import org.nuiton.eugene.models.object.ObjectModelAttribute; @@ -51,7 +53,7 @@ protected static final String TAG_VERSION = "version"; protected static final String TAG_ALTERNATIVE_NAME = "alternativeName"; - protected static final String TAG_TO_STRING = "toString"; + public static final String TAG_TO_STRING = "toString"; protected static final String TAG_DOCUMENTATION = "documentation"; /** @deprecated name change : see ticket #798. use BUSINESS_ENTITY_STEREOTYPE_NAME */ @@ -261,4 +263,18 @@ public static String businessEntityToHelperName(ObjectModelClass clazz) { return clazz.getName() + "Helper"; } + + public static String tagValuesToString(Map<String, String> tagValues) { + String result = ""; + if(tagValues != null) { + for (String tag : tagValues.keySet()) { + String value = tagValues.get(tag); + // replaceWith " in string with \" + value = StringEscapeUtils.escapeJava(value); + // quote value with "..." + result += " " + tag + "=\"" + value +"\""; + } + } + return result; + } } Modified: trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java =================================================================== --- trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2011-11-19 17:14:39 UTC (rev 1253) +++ trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2011-11-20 13:38:48 UTC (rev 1254) @@ -378,12 +378,12 @@ fieldTypes.put(fieldName, fieldType); } + String extTagValues = adminResultSet.getString(COL_TAGVALUES); + Map<String, String> tagValues = WikittyUtil.tagValuesToMap(extTagValues); String extRequires = adminResultSet.getString(COL_REQUIRES); - result = new WikittyExtension(extName, extVersion, extRequires, fieldTypes); + result = new WikittyExtension( + extName, extVersion, tagValues, extRequires, fieldTypes); - String extTagValues = adminResultSet.getString(COL_TAGVALUES); - result.setTagValues(WikittyUtil.tagValuesToMap(extTagValues)); - // synchronisation pour supporter le multithreading synchronized (extensionCache) { // FIXME poussin 20100114 put that in abstractService after commit, because must in cache only when tx is commited