Author: jruchaud Date: 2010-09-08 17:54:56 +0200 (Wed, 08 Sep 2010) New Revision: 286 Url: http://nuiton.org/repositories/revision/wikitty/286 Log: Add check on field name for extension Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyExtension.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/CommonTest.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyExtension.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyExtension.java 2010-09-08 13:16:09 UTC (rev 285) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyExtension.java 2010-09-08 15:54:56 UTC (rev 286) @@ -25,6 +25,8 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * @@ -39,6 +41,9 @@ /** serialVersionUID. */ private static final long serialVersionUID = -3598621577607442972L; + /** Field name pattern only word character [a-zA-Z_0-9] is accepted */ + static protected Pattern fieldNamePattern = Pattern.compile("^\\w+$"); + /** * Property change support. * @@ -102,7 +107,11 @@ this.version = WikittyUtil.normalizeVersion(version); this.requires = requires; if (fields != null) { - this.fields = fields; + for (Map.Entry<String, FieldType> entry : fields.entrySet()) { + String fieldName = entry.getKey(); + FieldType fieldType = entry.getValue(); + addField(fieldName, fieldType); + } } } @@ -215,9 +224,14 @@ } public void addField(String fieldName, FieldType type) { - fields.put(fieldName, type); - // TODO EC20100610 null for old value - getPropertyChangeSupport().firePropertyChange("fields", null, fields); + Matcher matcher = fieldNamePattern.matcher(fieldName); + if(matcher.find()) { + fields.put(fieldName, type); + // TODO EC20100610 null for old value + getPropertyChangeSupport().firePropertyChange("fields", null, fields); + } else { + throw new IllegalArgumentException("For field name [" + fieldName +"], only word character [a-zA-Z_0-9] is accepted"); + } } public void removeField(String fieldName) { 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 2010-09-08 13:16:09 UTC (rev 285) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/CommonTest.java 2010-09-08 15:54:56 UTC (rev 286) @@ -27,6 +27,7 @@ import org.nuiton.wikitty.WikittyImpl; import org.nuiton.wikitty.WikittyUtil; import org.nuiton.wikitty.conform.StorageTest; +import org.springframework.test.annotation.ExpectedException; /** * Test Wikitty, Extensions, Field and FieldType through the Wikitty Object @@ -125,6 +126,19 @@ } @Test + public void testWikittyExtensionCorrectFieldName() throws Exception { + ExtensionFactory.create("correctExtension", "1") + .addField("correctFieldName", TYPE.NUMERIC).extension(); + } + + // Throw IllegalArgumentException because invalid character in field name + @Test(expected = IllegalArgumentException.class) + public void testWikittyExtensionIncorrectFieldName() throws Exception { + ExtensionFactory.create("incorrectExtension", "1") + .addField("incorrectFieldName#", TYPE.NUMERIC).extension(); + } + + @Test public void testFieldAssigment() throws Exception { Wikitty w = createBasicWikitty();