KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > springframework > web > context > request > AbstractRequestAttributes


1 /*
2  * Copyright 2002-2006 the original author or authors.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package org.springframework.web.context.request;
18
19 import java.util.Iterator JavaDoc;
20 import java.util.Map JavaDoc;
21
22 import org.springframework.core.CollectionFactory;
23 import org.springframework.util.Assert;
24
25 /**
26  * Abstract support class for RequestAttributes implementations,
27  * offering a request completion mechanism for request-specific destruction
28  * callbacks and for updating accessed session attributes.
29  *
30  * @author Juergen Hoeller
31  * @since 2.0
32  * @see #requestCompleted()
33  */

34 public abstract class AbstractRequestAttributes implements RequestAttributes {
35
36     /** Map from attribute name String to destruction callback Runnable */
37     protected final Map JavaDoc requestDestructionCallbacks = CollectionFactory.createLinkedMapIfPossible(8);
38
39
40     /**
41      * Signal that the request has been completed.
42      * <p>Executes all request destruction callbacks and updates the
43      * session attributes that have been accessed during request processing.
44      */

45     public void requestCompleted() {
46         executeRequestDestructionCallbacks();
47         updateAccessedSessionAttributes();
48     }
49
50     /**
51      * Register the given callback as to be executed after request completion.
52      * @param name the name of the attribute to register the callback for
53      * @param callback the callback to be executed for destruction
54      */

55     protected final void registerRequestDestructionCallback(String JavaDoc name, Runnable JavaDoc callback) {
56         Assert.notNull(name, "Name must not be null");
57         Assert.notNull(callback, "Callback must not be null");
58         this.requestDestructionCallbacks.put(name, callback);
59     }
60
61     /**
62      * Remove the request destruction callback for the specified attribute, if any.
63      * @param name the name of the attribute to remove the callback for
64      */

65     protected final void removeRequestDestructionCallback(String JavaDoc name) {
66         Assert.notNull(name, "Name must not be null");
67         this.requestDestructionCallbacks.remove(name);
68     }
69
70     /**
71      * Execute all callbacks that have been registered for execution
72      * after request completion.
73      */

74     private void executeRequestDestructionCallbacks() {
75         for (Iterator JavaDoc it = this.requestDestructionCallbacks.values().iterator(); it.hasNext();) {
76             ((Runnable JavaDoc) it.next()).run();
77         }
78         this.requestDestructionCallbacks.clear();
79     }
80
81     /**
82      * Update all session attributes that have been accessed during request processing,
83      * to expose their potentially updated state to the underlying session manager.
84      */

85     protected abstract void updateAccessedSessionAttributes();
86
87 }
88
Popular Tags