This is an automated email from the ASF dual-hosted git repository. dlmarion pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/accumulo-access.git
The following commit(s) were added to refs/heads/main by this push: new f5c5785 Renamed IllegalAccessExpressionException to InvalidAccessExpressionException (#74) f5c5785 is described below commit f5c5785184c1c8253e6f2df3ced490dc592fc42d Author: Dave Marion <dlmar...@apache.org> AuthorDate: Mon Jul 8 13:49:23 2024 -0400 Renamed IllegalAccessExpressionException to InvalidAccessExpressionException (#74) Closes #59 --- .gitignore | 8 ++-- README.md | 2 +- pom.xml | 2 +- src/build/ci/find-unapproved-public.sh | 2 +- src/it/antlr4-example/.gitignore | 1 + .../antlr/AccessExpressionAntlrEvaluator.java | 4 +- .../grammar/antlr/AccessExpressionAntlrParser.java | 10 ++--- .../accumulo/access/grammar/antlr/Antlr4Tests.java | 20 +++++----- .../apache/accumulo/access/AccessEvaluator.java | 8 ++-- .../accumulo/access/AccessEvaluatorImpl.java | 6 +-- .../apache/accumulo/access/AccessExpression.java | 20 +++++----- .../accumulo/access/AccessExpressionImpl.java | 8 ++-- ....java => InvalidAccessExpressionException.java} | 44 ++++++++++++++++++++-- .../java/org/apache/accumulo/access/Tokenizer.java | 2 +- .../accumulo/access/AccessEvaluatorTest.java | 20 +++++----- .../accumulo/access/AccessExpressionTest.java | 2 +- 16 files changed, 99 insertions(+), 60 deletions(-) diff --git a/.gitignore b/.gitignore index 35f9301..44790d8 100644 --- a/.gitignore +++ b/.gitignore @@ -18,12 +18,12 @@ # # Maven ignores -/target/ +**/target/ # IDE ignores -/.settings/ -/.project -/.classpath +**/.settings/ +**/.project +**/.classpath /.pydevproject /.idea /*.iml diff --git a/README.md b/README.md index db008ae..7b87bb5 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ section](#getting-started) for an example of how to use this java library. The following types constitute the public API of this library. All other types are package private and are not part of the public API. - * [IllegalAccessExpressionException](src/main/java/org/apache/accumulo/access/IllegalAccessExpressionException.java). + * [InvalidAccessExpressionException](src/main/java/org/apache/accumulo/access/InvalidAccessExpressionException.java). * [AccessEvaluator](src/main/java/org/apache/accumulo/access/AccessEvaluator.java). * [AccessExpression](src/main/java/org/apache/accumulo/access/AccessExpression.java). * [Authorizations](src/main/java/org/apache/accumulo/access/Authorizations.java). diff --git a/pom.xml b/pom.xml index a7ca5b9..f4ecfe7 100644 --- a/pom.xml +++ b/pom.xml @@ -251,7 +251,7 @@ </goals> <configuration> <includes> - <include>org[.]apache[.]accumulo[.]access[.]IllegalAccessExpressionException</include> + <include>org[.]apache[.]accumulo[.]access[.]InvalidAccessExpressionException</include> <include>org[.]apache[.]accumulo[.]access[.]AccessExpression</include> <include>org[.]apache[.]accumulo[.]access[.]AccessEvaluator</include> <include>org[.]apache[.]accumulo[.]access[.]Authorizations</include> diff --git a/src/build/ci/find-unapproved-public.sh b/src/build/ci/find-unapproved-public.sh index 7dca0f6..a0dca7c 100755 --- a/src/build/ci/find-unapproved-public.sh +++ b/src/build/ci/find-unapproved-public.sh @@ -22,7 +22,7 @@ count=$(grep -E "public.*(class|interface|enum|record)" src/main/java/org/apache grep -v AccessEvaluator | grep -v AccessExpression | grep -v Authorizations | - grep -c -v IllegalAccessExpressionException) + grep -c -v InvalidAccessExpressionException) if [[ 0 -ne $count ]]; then echo "$count unapproved public classes found" diff --git a/src/it/antlr4-example/.gitignore b/src/it/antlr4-example/.gitignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/src/it/antlr4-example/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/AccessExpressionAntlrEvaluator.java b/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/AccessExpressionAntlrEvaluator.java index a3ddc29..5d20d8b 100644 --- a/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/AccessExpressionAntlrEvaluator.java +++ b/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/AccessExpressionAntlrEvaluator.java @@ -28,7 +28,7 @@ import org.antlr.v4.runtime.tree.TerminalNode; import org.apache.accumulo.access.AccessEvaluator; import org.apache.accumulo.access.AccessExpression; import org.apache.accumulo.access.Authorizations; -import org.apache.accumulo.access.IllegalAccessExpressionException; +import org.apache.accumulo.access.InvalidAccessExpressionException; import org.apache.accumulo.access.grammars.AccessExpressionParser.Access_expressionContext; import org.apache.accumulo.access.grammars.AccessExpressionParser.Access_tokenContext; import org.apache.accumulo.access.grammars.AccessExpressionParser.And_expressionContext; @@ -70,7 +70,7 @@ public class AccessExpressionAntlrEvaluator implements AccessEvaluator { } } - public boolean canAccess(byte[] accessExpression) throws IllegalAccessExpressionException { + public boolean canAccess(byte[] accessExpression) throws InvalidAccessExpressionException { return canAccess(AccessExpression.of(accessExpression)); } diff --git a/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/AccessExpressionAntlrParser.java b/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/AccessExpressionAntlrParser.java index 95f5898..8c2995e 100644 --- a/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/AccessExpressionAntlrParser.java +++ b/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/AccessExpressionAntlrParser.java @@ -29,7 +29,7 @@ import org.antlr.v4.runtime.ConsoleErrorListener; import org.antlr.v4.runtime.LexerNoViableAltException; import org.antlr.v4.runtime.RecognitionException; import org.antlr.v4.runtime.Recognizer; -import org.apache.accumulo.access.IllegalAccessExpressionException; +import org.apache.accumulo.access.InvalidAccessExpressionException; import org.apache.accumulo.access.grammars.AccessExpressionLexer; import org.apache.accumulo.access.grammars.AccessExpressionParser; import org.apache.accumulo.access.grammars.AccessExpressionParser.Access_expressionContext; @@ -84,12 +84,12 @@ public class AccessExpressionAntlrParser { } public static Access_expressionContext parseAccessExpression(byte[] accessExpression) - throws IllegalAccessExpressionException { + throws InvalidAccessExpressionException { return parseAccessExpression(new String(accessExpression, StandardCharsets.UTF_8)); } public static Access_expressionContext parseAccessExpression(String accessExpression) - throws IllegalAccessExpressionException { + throws InvalidAccessExpressionException { CodePointCharStream input = CharStreams.fromString(accessExpression); AccessExpressionLexerWithErrors lexer = new AccessExpressionLexerWithErrors(input); AccessExpressionParser parser = new AccessExpressionParser(new CommonTokenStream(lexer)); @@ -103,11 +103,11 @@ public class AccessExpressionAntlrParser { errors = lexer.getErrorCount(); errors += errorListener.getErrorCount(); if (errors > 0 || parser.getNumberOfSyntaxErrors() > 0 || ctx.exception != null) { - throw new IllegalAccessExpressionException("Parse error", "", 0); + throw new InvalidAccessExpressionException("Parse error", "", 0); } return ctx; } catch (RuntimeException e1) { - throw new IllegalAccessExpressionException(e1.getMessage(), "", 0); + throw new InvalidAccessExpressionException(e1.getMessage(), "", 0); } } diff --git a/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/Antlr4Tests.java b/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/Antlr4Tests.java index 09870ae..b499238 100644 --- a/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/Antlr4Tests.java +++ b/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/Antlr4Tests.java @@ -42,7 +42,7 @@ import org.antlr.v4.runtime.Recognizer; import org.apache.accumulo.access.AccessEvaluator; import org.apache.accumulo.access.AccessExpression; import org.apache.accumulo.access.Authorizations; -import org.apache.accumulo.access.IllegalAccessExpressionException; +import org.apache.accumulo.access.InvalidAccessExpressionException; import org.apache.accumulo.access.antlr.TestDataLoader; import org.apache.accumulo.access.antlr.TestDataLoader.ExpectedResult; import org.apache.accumulo.access.antlr.TestDataLoader.TestDataSet; @@ -107,7 +107,7 @@ public class Antlr4Tests { ExpectedResult result = test.expectedResult; for (String cv : test.expressions) { if (result == ExpectedResult.ERROR) { - assertThrows(IllegalAccessExpressionException.class, () -> AccessExpression.of(cv)); + assertThrows(InvalidAccessExpressionException.class, () -> AccessExpression.of(cv)); assertThrows(AssertionError.class, () -> testParse(cv)); } else { AccessExpression.of(cv); @@ -188,23 +188,23 @@ public class Antlr4Tests { break; case ERROR: - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> evaluator.canAccess(expression), expression); - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> evaluator.canAccess(expression.getBytes(UTF_8)), expression); - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> evaluator.canAccess(AccessExpression.of(expression)), expression); - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> evaluator.canAccess(AccessExpression.of(expression.getBytes(UTF_8))), expression); - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> antlr.canAccess(expression), expression); - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> antlr.canAccess(expression.getBytes(UTF_8)), expression); - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> antlr.canAccess(AccessExpression.of(expression)), expression); - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> antlr.canAccess(AccessExpression.of(expression.getBytes(UTF_8))), expression); break; diff --git a/src/main/java/org/apache/accumulo/access/AccessEvaluator.java b/src/main/java/org/apache/accumulo/access/AccessEvaluator.java index 3eff0d1..b3199bc 100644 --- a/src/main/java/org/apache/accumulo/access/AccessEvaluator.java +++ b/src/main/java/org/apache/accumulo/access/AccessEvaluator.java @@ -58,17 +58,17 @@ public interface AccessEvaluator { * @param accessExpression for this parameter a valid access expression is expected. * @return true if the expression is visible using the authorizations supplied at creation, false * otherwise - * @throws IllegalAccessExpressionException when the expression is not valid + * @throws InvalidAccessExpressionException when the expression is not valid */ - boolean canAccess(String accessExpression) throws IllegalAccessExpressionException; + boolean canAccess(String accessExpression) throws InvalidAccessExpressionException; /** * @param accessExpression for this parameter a valid access expression is expected. * @return true if the expression is visible using the authorizations supplied at creation, false * otherwise - * @throws IllegalAccessExpressionException when the expression is not valid + * @throws InvalidAccessExpressionException when the expression is not valid */ - boolean canAccess(byte[] accessExpression) throws IllegalAccessExpressionException; + boolean canAccess(byte[] accessExpression) throws InvalidAccessExpressionException; /** * @param accessExpression previously validated access expression diff --git a/src/main/java/org/apache/accumulo/access/AccessEvaluatorImpl.java b/src/main/java/org/apache/accumulo/access/AccessEvaluatorImpl.java index 7fe6077..6c5daed 100644 --- a/src/main/java/org/apache/accumulo/access/AccessEvaluatorImpl.java +++ b/src/main/java/org/apache/accumulo/access/AccessEvaluatorImpl.java @@ -177,16 +177,16 @@ final class AccessEvaluatorImpl implements AccessEvaluator { } @Override - public boolean canAccess(String expression) throws IllegalAccessExpressionException { + public boolean canAccess(String expression) throws InvalidAccessExpressionException { return evaluate(expression.getBytes(UTF_8)); } @Override - public boolean canAccess(byte[] expression) throws IllegalAccessExpressionException { + public boolean canAccess(byte[] expression) throws InvalidAccessExpressionException { return evaluate(expression); } - boolean evaluate(byte[] accessExpression) throws IllegalAccessExpressionException { + boolean evaluate(byte[] accessExpression) throws InvalidAccessExpressionException { var bytesWrapper = lookupWrappers.get(); var tokenizer = tokenizers.get(); diff --git a/src/main/java/org/apache/accumulo/access/AccessExpression.java b/src/main/java/org/apache/accumulo/access/AccessExpression.java index 360fc7f..2308bd8 100644 --- a/src/main/java/org/apache/accumulo/access/AccessExpression.java +++ b/src/main/java/org/apache/accumulo/access/AccessExpression.java @@ -61,7 +61,7 @@ import java.io.Serializable; * [🦖, CAT, 🦕] * </pre> * - * The following code will throw an {@link IllegalAccessExpressionException} because the expression + * The following code will throw an {@link InvalidAccessExpressionException} because the expression * is not valid. * * <pre> @@ -95,7 +95,7 @@ public interface AccessExpression extends Serializable { /** * This is equivalent to calling {@code AccessExpression.of(expression, false);} */ - static AccessExpression of(String expression) throws IllegalAccessExpressionException { + static AccessExpression of(String expression) throws InvalidAccessExpressionException { return new AccessExpressionImpl(expression, false); } @@ -125,10 +125,10 @@ public interface AccessExpression extends Serializable { * normalizing expressions, consider using a cache that maps un-normalized expressions to * normalized ones. Since the normalization process is deterministic, the computation can * be cached. - * @throws IllegalAccessExpressionException when the expression is not valid. + * @throws InvalidAccessExpressionException when the expression is not valid. */ static AccessExpression of(String expression, boolean normalize) - throws IllegalAccessExpressionException { + throws InvalidAccessExpressionException { return new AccessExpressionImpl(expression, normalize); } @@ -136,7 +136,7 @@ public interface AccessExpression extends Serializable { * <p> * This is equivalent to calling {@code AccessExpression.of(expression, false);} */ - static AccessExpression of(byte[] expression) throws IllegalAccessExpressionException { + static AccessExpression of(byte[] expression) throws InvalidAccessExpressionException { return new AccessExpressionImpl(expression, false); } @@ -153,10 +153,10 @@ public interface AccessExpression extends Serializable { * @param expression an access expression that is expected to be encoded using UTF-8 * @param normalize If true then the expression will be normalized, if false the expression will * only be validated. Normalization is expensive so only use when needed. - * @throws IllegalAccessExpressionException when the expression is not valid. + * @throws InvalidAccessExpressionException when the expression is not valid. */ static AccessExpression of(byte[] expression, boolean normalize) - throws IllegalAccessExpressionException { + throws InvalidAccessExpressionException { return new AccessExpressionImpl(expression, normalize); } @@ -171,16 +171,16 @@ public interface AccessExpression extends Serializable { * Quickly validates that an access expression is properly formed. * * @param expression a potential access expression that is expected to be encoded using UTF-8 - * @throws IllegalAccessExpressionException if the given expression is not valid + * @throws InvalidAccessExpressionException if the given expression is not valid */ - static void validate(byte[] expression) throws IllegalAccessExpressionException { + static void validate(byte[] expression) throws InvalidAccessExpressionException { AccessExpressionImpl.validate(expression); } /** * @see #validate(byte[]) */ - static void validate(String expression) throws IllegalAccessExpressionException { + static void validate(String expression) throws InvalidAccessExpressionException { AccessExpressionImpl.validate(expression); } diff --git a/src/main/java/org/apache/accumulo/access/AccessExpressionImpl.java b/src/main/java/org/apache/accumulo/access/AccessExpressionImpl.java index d91c388..0d0a7d7 100644 --- a/src/main/java/org/apache/accumulo/access/AccessExpressionImpl.java +++ b/src/main/java/org/apache/accumulo/access/AccessExpressionImpl.java @@ -123,22 +123,22 @@ final class AccessExpressionImpl implements AccessExpression { return AccessEvaluatorImpl.escape(term, true); } - static void validate(byte[] expression) throws IllegalAccessExpressionException { + static void validate(byte[] expression) throws InvalidAccessExpressionException { Tokenizer tokenizer = new Tokenizer(expression); Predicate<Tokenizer.AuthorizationToken> atp = authToken -> true; ParserEvaluator.parseAccessExpression(tokenizer, atp, atp); } - static void validate(String expression) throws IllegalAccessExpressionException { + static void validate(String expression) throws InvalidAccessExpressionException { validate(expression.getBytes(UTF_8)); } - static String normalize(String expression) throws IllegalAccessExpressionException { + static String normalize(String expression) throws InvalidAccessExpressionException { Tokenizer tokenizer = new Tokenizer(expression.getBytes(UTF_8)); return Normalizer.normalize(tokenizer); } - static String normalize(byte[] expression) throws IllegalAccessExpressionException { + static String normalize(byte[] expression) throws InvalidAccessExpressionException { Tokenizer tokenizer = new Tokenizer(expression); return Normalizer.normalize(tokenizer); } diff --git a/src/main/java/org/apache/accumulo/access/IllegalAccessExpressionException.java b/src/main/java/org/apache/accumulo/access/InvalidAccessExpressionException.java similarity index 52% rename from src/main/java/org/apache/accumulo/access/IllegalAccessExpressionException.java rename to src/main/java/org/apache/accumulo/access/InvalidAccessExpressionException.java index 180c844..71aeb8c 100644 --- a/src/main/java/org/apache/accumulo/access/IllegalAccessExpressionException.java +++ b/src/main/java/org/apache/accumulo/access/InvalidAccessExpressionException.java @@ -25,10 +25,48 @@ import java.util.regex.PatternSyntaxException; * * @since 1.0.0 */ -public final class IllegalAccessExpressionException extends PatternSyntaxException { +public final class InvalidAccessExpressionException extends IllegalArgumentException { + private static final long serialVersionUID = 1L; - public IllegalAccessExpressionException(String desc, String badarg, int index) { - super(desc, badarg, index); + private final PatternSyntaxException delegate; + + public InvalidAccessExpressionException(String desc, String badarg, int index) { + super(); + delegate = new PatternSyntaxException(desc, badarg, index); + } + + @Override + public String getMessage() { + return delegate.getMessage(); + } + + /** + * Retrieves the error index. + * + * @return The approximate index in the pattern of the error, or {@code -1} if the index is not + * known + */ + public int getIndex() { + return delegate.getIndex(); } + + /** + * Retrieves the description of the error. + * + * @return The description of the error + */ + public String getDescription() { + return delegate.getDescription(); + } + + /** + * Retrieves the erroneous regular-expression pattern. + * + * @return The erroneous pattern + */ + public String getPattern() { + return delegate.getPattern(); + } + } diff --git a/src/main/java/org/apache/accumulo/access/Tokenizer.java b/src/main/java/org/apache/accumulo/access/Tokenizer.java index 1f44975..1d3e21d 100644 --- a/src/main/java/org/apache/accumulo/access/Tokenizer.java +++ b/src/main/java/org/apache/accumulo/access/Tokenizer.java @@ -95,7 +95,7 @@ final class Tokenizer { } public void error(String msg, int idx) { - throw new IllegalAccessExpressionException(msg, new String(expression, UTF_8), idx); + throw new InvalidAccessExpressionException(msg, new String(expression, UTF_8), idx); } byte peek() { diff --git a/src/test/java/org/apache/accumulo/access/AccessEvaluatorTest.java b/src/test/java/org/apache/accumulo/access/AccessEvaluatorTest.java index bcba1fc..9f601ac 100644 --- a/src/test/java/org/apache/accumulo/access/AccessEvaluatorTest.java +++ b/src/test/java/org/apache/accumulo/access/AccessEvaluatorTest.java @@ -154,25 +154,25 @@ public class AccessEvaluatorTest { expression); break; case ERROR: - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> evaluator.canAccess(expression), expression); - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> evaluator.canAccess(expression.getBytes(UTF_8)), expression); - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> AccessExpression.validate(expression), expression); - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> AccessExpression.validate(expression.getBytes(UTF_8)), expression); - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> AccessExpression.of(expression), expression); - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> AccessExpression.of(expression, false), expression); - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> AccessExpression.of(expression, true), expression); - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> AccessExpression.of(expression.getBytes(UTF_8)), expression); - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> AccessExpression.of(expression.getBytes(UTF_8), false), expression); - assertThrows(IllegalAccessExpressionException.class, + assertThrows(InvalidAccessExpressionException.class, () -> AccessExpression.of(expression.getBytes(UTF_8), true), expression); break; default: diff --git a/src/test/java/org/apache/accumulo/access/AccessExpressionTest.java b/src/test/java/org/apache/accumulo/access/AccessExpressionTest.java index c41fdd8..2ec6275 100644 --- a/src/test/java/org/apache/accumulo/access/AccessExpressionTest.java +++ b/src/test/java/org/apache/accumulo/access/AccessExpressionTest.java @@ -145,7 +145,7 @@ public class AccessExpressionTest { } void checkError(Executable executable, String expected, int index) { - var exception = assertThrows(IllegalAccessExpressionException.class, executable); + var exception = assertThrows(InvalidAccessExpressionException.class, executable); assertTrue(exception.getMessage().contains(expected)); assertEquals(index, exception.getIndex()); }