View Javadoc

1   /* Copyright 2004 Acegi Technology Pty Limited
2    *
3    * Licensed under the Apache License, Version 2.0 (the "License");
4    * you may not use this file except in compliance with the License.
5    * You may obtain a copy of the License at
6    *
7    *     http://www.apache.org/licenses/LICENSE-2.0
8    *
9    * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  
16  package org.acegisecurity.intercept.web;
17  
18  import org.acegisecurity.ConfigAttributeDefinition;
19  
20  import org.apache.commons.logging.Log;
21  import org.apache.commons.logging.LogFactory;
22  
23  
24  /***
25   * Abstract implementation of <Code>FilterInvocationDefinitionSource</code>.
26   *
27   * @author Ben Alex
28   * @version $Id: AbstractFilterInvocationDefinitionSource.java,v 1.3 2005/11/17 00:55:50 benalex Exp $
29   */
30  public abstract class AbstractFilterInvocationDefinitionSource
31      implements FilterInvocationDefinitionSource {
32      //~ Static fields/initializers =============================================
33  
34      private static final Log logger = LogFactory.getLog(AbstractFilterInvocationDefinitionSource.class);
35  
36      //~ Methods ================================================================
37  
38      public ConfigAttributeDefinition getAttributes(Object object)
39          throws IllegalArgumentException {
40          if ((object == null) || !this.supports(object.getClass())) {
41              throw new IllegalArgumentException(
42                  "Object must be a FilterInvocation");
43          }
44  
45          String url = ((FilterInvocation) object).getRequestUrl();
46  
47          return this.lookupAttributes(url);
48      }
49  
50      /***
51       * Performs the actual lookup of the relevant
52       * <code>ConfigAttributeDefinition</code> for the specified
53       * <code>FilterInvocation</code>.
54       * 
55       * <P>
56       * Provided so subclasses need only to provide one basic method to properly
57       * interface with the <code>FilterInvocationDefinitionSource</code>.
58       * </p>
59       * 
60       * <P>
61       * Public visiblity so that tablibs or other view helper classes can access
62       * the <code>ConfigAttributeDefinition</code> applying to a given URI
63       * pattern without needing to construct a mock
64       * <code>FilterInvocation</code> and retrieving the attibutes via the
65       * {@link #getAttributes(Object)} method.
66       * </p>
67       *
68       * @param url the URI to retrieve configuration attributes for
69       *
70       * @return the <code>ConfigAttributeDefinition</code> that applies to the
71       *         specified <code>FilterInvocation</code>
72       */
73      public abstract ConfigAttributeDefinition lookupAttributes(String url);
74  
75      public boolean supports(Class clazz) {
76          if (FilterInvocation.class.isAssignableFrom(clazz)) {
77              return true;
78          } else {
79              return false;
80          }
81      }
82  }