001: /* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
002: *
003: * Licensed under the Apache License, Version 2.0 (the "License");
004: * you may not use this file except in compliance with the License.
005: * You may obtain a copy of the License at
006: *
007: * http://www.apache.org/licenses/LICENSE-2.0
008: *
009: * Unless required by applicable law or agreed to in writing, software
010: * distributed under the License is distributed on an "AS IS" BASIS,
011: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012: * See the License for the specific language governing permissions and
013: * limitations under the License.
014: */
015:
016: package org.acegisecurity.intercept.web;
017:
018: import java.util.Iterator;
019: import java.util.List;
020:
021: import org.acegisecurity.ConfigAttributeDefinition;
022: import org.acegisecurity.SecurityConfig;
023:
024: /**
025: * <p>
026: * Decorator of {@link FilterInvocationDefinition} for easier configuration,
027: * using {@link FilterInvocationDefinitionSourceMapping}.
028: * </p>
029: *
030: * <p>
031: * Delegates all calls to decorated object set in constructor
032: * {@link #FilterInvocationDefinitionDecorator(FilterInvocationDefinition)} or
033: * by calling {@link #setDecorated(FilterInvocationDefinition)}
034: * </p>
035: *
036: * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
037: * @version $Id: FilterInvocationDefinitionDecorator.java 1570 2006-07-06 17:05:08Z carlossg $
038: * @since 1.1
039: */
040: public class FilterInvocationDefinitionDecorator implements
041: FilterInvocationDefinition {
042:
043: private FilterInvocationDefinition decorated;
044:
045: private List mappings;
046:
047: public FilterInvocationDefinitionDecorator() {
048: }
049:
050: public FilterInvocationDefinitionDecorator(
051: FilterInvocationDefinition decorated) {
052: this .setDecorated(decorated);
053: }
054:
055: /**
056: * Set the decorated object
057: *
058: * @param decorated
059: * the decorated {@link FilterInvocationDefinition}
060: */
061: public void setDecorated(FilterInvocationDefinition decorated) {
062: this .decorated = decorated;
063: }
064:
065: /**
066: * Get decorated object
067: *
068: * @return the decorated {@link FilterInvocationDefinition}
069: */
070: public FilterInvocationDefinition getDecorated() {
071: return decorated;
072: }
073:
074: /**
075: * Configures the decorated {@link FilterInvocationDefinitionMap} easier,
076: * using {@link FilterInvocationDefinitionSourceMapping}.
077: *
078: * @param mappings
079: * {@link List} of
080: * {@link FilterInvocationDefinitionSourceMapping} objects.
081: */
082: public void setMappings(List mappings) {
083:
084: if (decorated == null) {
085: throw new IllegalStateException(
086: "decorated object has not been set");
087: }
088:
089: this .mappings = mappings;
090: Iterator it = mappings.iterator();
091: while (it.hasNext()) {
092: FilterInvocationDefinitionSourceMapping mapping = (FilterInvocationDefinitionSourceMapping) it
093: .next();
094: ConfigAttributeDefinition configDefinition = new ConfigAttributeDefinition();
095:
096: Iterator configAttributesIt = mapping.getConfigAttributes()
097: .iterator();
098: while (configAttributesIt.hasNext()) {
099: String s = (String) configAttributesIt.next();
100: configDefinition.addConfigAttribute(new SecurityConfig(
101: s));
102: }
103:
104: decorated.addSecureUrl(mapping.getUrl(), configDefinition);
105: }
106: }
107:
108: /**
109: * Get the mappings used for configuration.
110: *
111: * @return {@link List} of {@link FilterInvocationDefinitionSourceMapping}
112: * objects.
113: */
114: public List getMappings() {
115: return mappings;
116: }
117:
118: /**
119: * Delegate to decorated object
120: */
121: public void addSecureUrl(String expression,
122: ConfigAttributeDefinition attr) {
123: getDecorated().addSecureUrl(expression, attr);
124: }
125:
126: /**
127: * Delegate to decorated object
128: */
129: public boolean isConvertUrlToLowercaseBeforeComparison() {
130: return getDecorated().isConvertUrlToLowercaseBeforeComparison();
131: }
132:
133: /**
134: * Delegate to decorated object
135: */
136: public void setConvertUrlToLowercaseBeforeComparison(
137: boolean convertUrlToLowercaseBeforeComparison) {
138: getDecorated().setConvertUrlToLowercaseBeforeComparison(
139: convertUrlToLowercaseBeforeComparison);
140: }
141:
142: /**
143: * Delegate to decorated object
144: */
145: public ConfigAttributeDefinition getAttributes(Object object)
146: throws IllegalArgumentException {
147: return getDecorated().getAttributes(object);
148: }
149:
150: /**
151: * Delegate to decorated object
152: */
153: public Iterator getConfigAttributeDefinitions() {
154: return getDecorated().getConfigAttributeDefinitions();
155: }
156:
157: /**
158: * Delegate to decorated object
159: */
160: public boolean supports(Class clazz) {
161: return getDecorated().supports(clazz);
162: }
163: }
|