--- /dev/null
+/*
+ * Copyright 2005 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.wamblee.security.authorization;
+
+import static org.wamblee.security.authorization.AuthorizationResult.DENIED;
+import static org.wamblee.security.authorization.AuthorizationResult.GRANTED;
+
+import org.wamblee.usermgt.User;
+
+/**
+ * Test authorization rule that also counts the number of times the rule matches.
+ */
+public class TestAuthorizationRule extends UrlAuthorizationRule {
+
+ /**
+ * Counts the number of matches.
+ */
+ private int _matches = 0;
+
+ public TestAuthorizationRule( AuthorizationResult aResult, String aGroup,
+ String aPath, Class<? extends Operation> aOperation) {
+ super(aResult, new GroupUserCondition(aGroup),
+ new StartsWithPathCondition(aPath), TestResource.class, new IsaOperationCondition(aOperation));
+ }
+
+ protected TestAuthorizationRule() {
+ super();
+ }
+
+ /* (non-Javadoc)
+ * @see org.wamblee.security.authorization.UrlAuthorizationRule#getPath(java.lang.Object)
+ */
+ @Override
+ protected String getResourcePath(Object aResource) {
+ return ((TestResource)aResource).getPath();
+ }
+
+ /* (non-Javadoc)
+ * @see org.wamblee.security.authorization.UrlAuthorizationRule#isAllowed(java.lang.Object, org.wamblee.security.authorization.Operation, org.wamblee.usermgt.UserAccessor)
+ */
+ @Override
+ public AuthorizationResult isAllowed(Object aResource, Operation anOperation, User aUser) {
+
+ AuthorizationResult result = super.isAllowed(aResource, anOperation, aUser);
+ if ( result.equals(GRANTED) || result.equals(DENIED)) {
+ _matches++;
+ }
+ return result;
+ }
+
+ public int getMatchCount() {
+ return _matches;
+ }
+
+ public void reset() {
+ _matches = 0;
+ }
+
+}