Repository: geode Updated Branches: refs/heads/develop 0fe0a1061 -> 5ab4a6937
GEODE-2950: Updated error messages * Different error messages are displayed when validating region names versus indexes. * Added flexible enum allowing for expanded error messages and name validation. This closes #540 Project: http://git-wip-us.apache.org/repos/asf/geode/repo Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/5ab4a693 Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/5ab4a693 Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/5ab4a693 Branch: refs/heads/develop Commit: 5ab4a69378c697fdf050048165e2945a4b028eb7 Parents: 0fe0a10 Author: David Anuta <david.r.an...@gmail.com> Authored: Thu May 25 15:18:40 2017 -0700 Committer: nabarun <n...@pivotal.io> Committed: Thu May 25 16:14:30 2017 -0700 ---------------------------------------------------------------------- .../lucene/internal/LuceneServiceImpl.java | 58 +++++++++++--------- .../functions/LuceneCreateIndexFunction.java | 7 ++- .../cli/LuceneIndexCommandsDUnitTest.java | 10 ++-- 3 files changed, 43 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/geode/blob/5ab4a693/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java ---------------------------------------------------------------------- diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java index c0d6266..23b6925 100644 --- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java +++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java @@ -128,34 +128,42 @@ public class LuceneServiceImpl implements InternalLuceneService { return getUniqueIndexName(indexName, regionPath) + regionSuffix; } - public static void validateCreateIndexCommandParams(String name, boolean isRegionPath) { - if (name == null) { - throw new IllegalArgumentException( - LocalizedStrings.LocalRegion_NAME_CANNOT_BE_NULL.toLocalizedString()); - } - if (name.isEmpty()) { - throw new IllegalArgumentException( - LocalizedStrings.LocalRegion_NAME_CANNOT_BE_EMPTY.toLocalizedString()); - } + public enum validateCommandParameters { + REGION_PATH, INDEX_NAME; - if (name.startsWith("__")) { - throw new IllegalArgumentException( - "Parameter names may not begin with a double-underscore: " + name); - } + public void validateName(String name) { + if (name == null) { + throw new IllegalArgumentException( + LocalizedStrings.LocalRegion_NAME_CANNOT_BE_NULL.toLocalizedString()); + } + if (name.isEmpty()) { + throw new IllegalArgumentException( + LocalizedStrings.LocalRegion_NAME_CANNOT_BE_EMPTY.toLocalizedString()); + } - final Pattern NAME_PATTERN; - if (isRegionPath) { - NAME_PATTERN = Pattern.compile("[aA-zZ0-9-_./]+"); - } else { - NAME_PATTERN = Pattern.compile("[aA-zZ0-9-_.]+"); - } + boolean iae = false; + String msg = + " names may only be alphanumeric, must not begin with double-underscores, but can contain hyphens"; + Matcher matcher = null; + switch (this) { + case REGION_PATH: + matcher = Pattern.compile("[aA-zZ0-9-_./]+").matcher(name); + msg = "Region" + msg + ", underscores, or forward slashes: "; + iae = name.startsWith("__") || !matcher.matches(); + break; + case INDEX_NAME: + matcher = Pattern.compile("[aA-zZ0-9-_.]+").matcher(name); + msg = "Index" + msg + " or underscores: "; + iae = name.startsWith("__") || !matcher.matches(); + break; + default: + throw new IllegalArgumentException("Illegal option for validateName function"); + } - // Ensure the region only contains valid characters - Matcher matcher = NAME_PATTERN.matcher(name); - if (!matcher.matches()) { - throw new IllegalArgumentException( - "Parameter names may only be alphanumeric, though they can contain hyphens or underscores: " - + name); + // Ensure the region only contains valid characters + if (iae) { + throw new IllegalArgumentException(msg + name); + } } } http://git-wip-us.apache.org/repos/asf/geode/blob/5ab4a693/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunction.java ---------------------------------------------------------------------- diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunction.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunction.java index 26ac0e2..d49f7f9 100644 --- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunction.java +++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunction.java @@ -15,7 +15,8 @@ package org.apache.geode.cache.lucene.internal.cli.functions; -import static org.apache.geode.cache.lucene.internal.LuceneServiceImpl.validateCreateIndexCommandParams; +import static org.apache.geode.cache.lucene.internal.LuceneServiceImpl.validateCommandParameters.INDEX_NAME; +import static org.apache.geode.cache.lucene.internal.LuceneServiceImpl.validateCommandParameters.REGION_PATH; import org.apache.commons.lang.StringUtils; import org.apache.geode.cache.Cache; @@ -67,7 +68,7 @@ public class LuceneCreateIndexFunction extends FunctionAdapter implements Intern memberId = cache.getDistributedSystem().getDistributedMember().getId(); LuceneService service = LuceneServiceProvider.get(cache); - validateCreateIndexCommandParams(indexInfo.getIndexName(), false); + INDEX_NAME.validateName(indexInfo.getIndexName()); String[] fields = indexInfo.getSearchableFieldNames(); String[] analyzerName = indexInfo.getFieldAnalyzers(); @@ -86,7 +87,7 @@ public class LuceneCreateIndexFunction extends FunctionAdapter implements Intern } } - validateCreateIndexCommandParams(indexInfo.getRegionPath(), true); + REGION_PATH.validateName(indexInfo.getRegionPath()); indexFactory.create(indexInfo.getIndexName(), indexInfo.getRegionPath()); // TODO - update cluster configuration by returning a valid XmlEntity http://git-wip-us.apache.org/repos/asf/geode/blob/5ab4a693/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommandsDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommandsDUnitTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommandsDUnitTest.java index 5e9c4f9..5cbe31c 100755 --- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommandsDUnitTest.java +++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommandsDUnitTest.java @@ -210,7 +210,8 @@ public class LuceneIndexCommandsDUnitTest extends CliCommandTestBase { csb.addOption(LuceneCliStrings.LUCENE_CREATE_INDEX__FIELD, "field1,field2,field3"); String resultAsString = executeCommandAndLogResult(csb); - assertTrue(resultAsString.contains("Parameter names may not begin with a double-underscore:")); + assertTrue(resultAsString.contains( + "Region names may only be alphanumeric, must not begin with double-underscores, but can contain hyphens, underscores, or forward slashes:")); csb = new CommandStringBuilder(LuceneCliStrings.LUCENE_CREATE_INDEX); csb.addOption(LuceneCliStrings.LUCENE__INDEX_NAME, INDEX_NAME); @@ -219,7 +220,7 @@ public class LuceneIndexCommandsDUnitTest extends CliCommandTestBase { resultAsString = executeCommandAndLogResult(csb); assertTrue(resultAsString.contains( - "Parameter names may only be alphanumeric, though they can contain hyphens or underscores:")); + "Region names may only be alphanumeric, must not begin with double-underscores, but can contain hyphens, underscores, or forward slashes:")); csb = new CommandStringBuilder(LuceneCliStrings.LUCENE_CREATE_INDEX); csb.addOption(LuceneCliStrings.LUCENE__INDEX_NAME, "\'__\'"); @@ -227,7 +228,8 @@ public class LuceneIndexCommandsDUnitTest extends CliCommandTestBase { csb.addOption(LuceneCliStrings.LUCENE_CREATE_INDEX__FIELD, "field1,field2,field3"); resultAsString = executeCommandAndLogResult(csb); - assertTrue(resultAsString.contains("Parameter names may not begin with a double-underscore:")); + assertTrue(resultAsString.contains( + "Index names may only be alphanumeric, must not begin with double-underscores, but can contain hyphens or underscores:")); csb = new CommandStringBuilder(LuceneCliStrings.LUCENE_CREATE_INDEX); csb.addOption(LuceneCliStrings.LUCENE__INDEX_NAME, "\' @@@*%\'"); @@ -236,7 +238,7 @@ public class LuceneIndexCommandsDUnitTest extends CliCommandTestBase { resultAsString = executeCommandAndLogResult(csb); assertTrue(resultAsString.contains( - "Parameter names may only be alphanumeric, though they can contain hyphens or underscores:")); + "Index names may only be alphanumeric, must not begin with double-underscores, but can contain hyphens or underscores:")); } @Test