<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> *  Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> *  or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> *  distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> *  regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> *  to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> *  "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> *  with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *    http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> *  Unless required by applicable law or agreed to in writing,<a name="line.12"></a>
<span class="sourceLineNo">013</span> *  software distributed under the License is distributed on an<a name="line.13"></a>
<span class="sourceLineNo">014</span> *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.14"></a>
<span class="sourceLineNo">015</span> *  KIND, either express or implied.  See the License for the<a name="line.15"></a>
<span class="sourceLineNo">016</span> *  specific language governing permissions and limitations<a name="line.16"></a>
<span class="sourceLineNo">017</span> *  under the License.<a name="line.17"></a>
<span class="sourceLineNo">018</span> *<a name="line.18"></a>
<span class="sourceLineNo">019</span> */<a name="line.19"></a>
<span class="sourceLineNo">020</span>package org.apache.mina.filter.util;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.util.Map;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.util.Set;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.24"></a>
<span class="sourceLineNo">025</span><a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.mina.core.filterchain.IoFilter;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.mina.core.filterchain.IoFilterAdapter;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.mina.core.session.IoSession;<a name="line.28"></a>
<span class="sourceLineNo">029</span><a name="line.29"></a>
<span class="sourceLineNo">030</span>/**<a name="line.30"></a>
<span class="sourceLineNo">031</span> * An {@link IoFilter} that sets initial attributes when a new<a name="line.31"></a>
<span class="sourceLineNo">032</span> * {@link IoSession} is created.  By default, the attribute map is empty when<a name="line.32"></a>
<span class="sourceLineNo">033</span> * an {@link IoSession} is newly created.  Inserting this filter will make<a name="line.33"></a>
<span class="sourceLineNo">034</span> * the pre-configured attributes available after this filter executes the<a name="line.34"></a>
<span class="sourceLineNo">035</span> * &lt;tt&gt;sessionCreated&lt;/tt&gt; event.<a name="line.35"></a>
<span class="sourceLineNo">036</span> *<a name="line.36"></a>
<span class="sourceLineNo">037</span> * @author &lt;a href="http://mina.apache.org"&gt;Apache MINA Project&lt;/a&gt;<a name="line.37"></a>
<span class="sourceLineNo">038</span> * @org.apache.xbean.XBean<a name="line.38"></a>
<span class="sourceLineNo">039</span> */<a name="line.39"></a>
<span class="sourceLineNo">040</span>public class SessionAttributeInitializingFilter extends IoFilterAdapter {<a name="line.40"></a>
<span class="sourceLineNo">041</span>    private final Map&lt;String, Object&gt; attributes = new ConcurrentHashMap&lt;String, Object&gt;();<a name="line.41"></a>
<span class="sourceLineNo">042</span><a name="line.42"></a>
<span class="sourceLineNo">043</span>    /**<a name="line.43"></a>
<span class="sourceLineNo">044</span>     * Creates a new instance with no default attributes.  You can set<a name="line.44"></a>
<span class="sourceLineNo">045</span>     * the additional attributes by calling methods such as<a name="line.45"></a>
<span class="sourceLineNo">046</span>     * {@link #setAttribute(String, Object)} and {@link #setAttributes(Map)}.<a name="line.46"></a>
<span class="sourceLineNo">047</span>     */<a name="line.47"></a>
<span class="sourceLineNo">048</span>    public SessionAttributeInitializingFilter() {<a name="line.48"></a>
<span class="sourceLineNo">049</span>        // Do nothing<a name="line.49"></a>
<span class="sourceLineNo">050</span>    }<a name="line.50"></a>
<span class="sourceLineNo">051</span><a name="line.51"></a>
<span class="sourceLineNo">052</span>    /**<a name="line.52"></a>
<span class="sourceLineNo">053</span>     * Creates a new instance with the specified default attributes.  You can<a name="line.53"></a>
<span class="sourceLineNo">054</span>     * set the additional attributes by calling methods such as<a name="line.54"></a>
<span class="sourceLineNo">055</span>     * {@link #setAttribute(String, Object)} and {@link #setAttributes(Map)}.<a name="line.55"></a>
<span class="sourceLineNo">056</span>     */<a name="line.56"></a>
<span class="sourceLineNo">057</span>    public SessionAttributeInitializingFilter(Map&lt;String, ? extends Object&gt; attributes) {<a name="line.57"></a>
<span class="sourceLineNo">058</span>        setAttributes(attributes);<a name="line.58"></a>
<span class="sourceLineNo">059</span>    }<a name="line.59"></a>
<span class="sourceLineNo">060</span><a name="line.60"></a>
<span class="sourceLineNo">061</span>    /**<a name="line.61"></a>
<span class="sourceLineNo">062</span>     * Returns the value of user-defined attribute.<a name="line.62"></a>
<span class="sourceLineNo">063</span>     *<a name="line.63"></a>
<span class="sourceLineNo">064</span>     * @param key the key of the attribute<a name="line.64"></a>
<span class="sourceLineNo">065</span>     * @return &lt;tt&gt;null&lt;/tt&gt; if there is no attribute with the specified key<a name="line.65"></a>
<span class="sourceLineNo">066</span>     */<a name="line.66"></a>
<span class="sourceLineNo">067</span>    public Object getAttribute(String key) {<a name="line.67"></a>
<span class="sourceLineNo">068</span>        return attributes.get(key);<a name="line.68"></a>
<span class="sourceLineNo">069</span>    }<a name="line.69"></a>
<span class="sourceLineNo">070</span><a name="line.70"></a>
<span class="sourceLineNo">071</span>    /**<a name="line.71"></a>
<span class="sourceLineNo">072</span>     * Sets a user-defined attribute.<a name="line.72"></a>
<span class="sourceLineNo">073</span>     *<a name="line.73"></a>
<span class="sourceLineNo">074</span>     * @param key the key of the attribute<a name="line.74"></a>
<span class="sourceLineNo">075</span>     * @param value the value of the attribute<a name="line.75"></a>
<span class="sourceLineNo">076</span>     * @return The old value of the attribute.  &lt;tt&gt;null&lt;/tt&gt; if it is new.<a name="line.76"></a>
<span class="sourceLineNo">077</span>     */<a name="line.77"></a>
<span class="sourceLineNo">078</span>    public Object setAttribute(String key, Object value) {<a name="line.78"></a>
<span class="sourceLineNo">079</span>        if (value == null) {<a name="line.79"></a>
<span class="sourceLineNo">080</span>            return removeAttribute(key);<a name="line.80"></a>
<span class="sourceLineNo">081</span>        }<a name="line.81"></a>
<span class="sourceLineNo">082</span><a name="line.82"></a>
<span class="sourceLineNo">083</span>        return attributes.put(key, value);<a name="line.83"></a>
<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
<span class="sourceLineNo">085</span><a name="line.85"></a>
<span class="sourceLineNo">086</span>    /**<a name="line.86"></a>
<span class="sourceLineNo">087</span>     * Sets a user defined attribute without a value.  This is useful when<a name="line.87"></a>
<span class="sourceLineNo">088</span>     * you just want to put a 'mark' attribute.  Its value is set to<a name="line.88"></a>
<span class="sourceLineNo">089</span>     * {@link Boolean#TRUE}.<a name="line.89"></a>
<span class="sourceLineNo">090</span>     *<a name="line.90"></a>
<span class="sourceLineNo">091</span>     * @param key the key of the attribute<a name="line.91"></a>
<span class="sourceLineNo">092</span>     * @return The old value of the attribute.  &lt;tt&gt;null&lt;/tt&gt; if it is new.<a name="line.92"></a>
<span class="sourceLineNo">093</span>     */<a name="line.93"></a>
<span class="sourceLineNo">094</span>    public Object setAttribute(String key) {<a name="line.94"></a>
<span class="sourceLineNo">095</span>        return attributes.put(key, Boolean.TRUE);<a name="line.95"></a>
<span class="sourceLineNo">096</span>    }<a name="line.96"></a>
<span class="sourceLineNo">097</span><a name="line.97"></a>
<span class="sourceLineNo">098</span>    /**<a name="line.98"></a>
<span class="sourceLineNo">099</span>     * Removes a user-defined attribute with the specified key.<a name="line.99"></a>
<span class="sourceLineNo">100</span>     *<a name="line.100"></a>
<span class="sourceLineNo">101</span>     * @return The old value of the attribute.  &lt;tt&gt;null&lt;/tt&gt; if not found.<a name="line.101"></a>
<span class="sourceLineNo">102</span>     */<a name="line.102"></a>
<span class="sourceLineNo">103</span>    public Object removeAttribute(String key) {<a name="line.103"></a>
<span class="sourceLineNo">104</span>        return attributes.remove(key);<a name="line.104"></a>
<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
<span class="sourceLineNo">106</span><a name="line.106"></a>
<span class="sourceLineNo">107</span>    /**<a name="line.107"></a>
<span class="sourceLineNo">108</span>     * Returns &lt;tt&gt;true&lt;/tt&gt; if this session contains the attribute with<a name="line.108"></a>
<span class="sourceLineNo">109</span>     * the specified &lt;tt&gt;key&lt;/tt&gt;.<a name="line.109"></a>
<span class="sourceLineNo">110</span>     */<a name="line.110"></a>
<span class="sourceLineNo">111</span>    boolean containsAttribute(String key) {<a name="line.111"></a>
<span class="sourceLineNo">112</span>        return attributes.containsKey(key);<a name="line.112"></a>
<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
<span class="sourceLineNo">114</span><a name="line.114"></a>
<span class="sourceLineNo">115</span>    /**<a name="line.115"></a>
<span class="sourceLineNo">116</span>     * Returns the set of keys of all user-defined attributes.<a name="line.116"></a>
<span class="sourceLineNo">117</span>     */<a name="line.117"></a>
<span class="sourceLineNo">118</span>    public Set&lt;String&gt; getAttributeKeys() {<a name="line.118"></a>
<span class="sourceLineNo">119</span>        return attributes.keySet();<a name="line.119"></a>
<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
<span class="sourceLineNo">121</span><a name="line.121"></a>
<span class="sourceLineNo">122</span>    /**<a name="line.122"></a>
<span class="sourceLineNo">123</span>     * Sets the attribute map.  The specified attributes are copied into the<a name="line.123"></a>
<span class="sourceLineNo">124</span>     * underlying map, so modifying the specified attributes parameter after<a name="line.124"></a>
<span class="sourceLineNo">125</span>     * the call won't change the internal state.<a name="line.125"></a>
<span class="sourceLineNo">126</span>     */<a name="line.126"></a>
<span class="sourceLineNo">127</span>    public void setAttributes(Map&lt;String, ? extends Object&gt; attributes) {<a name="line.127"></a>
<span class="sourceLineNo">128</span>        if (attributes == null) {<a name="line.128"></a>
<span class="sourceLineNo">129</span>            attributes = new ConcurrentHashMap&lt;String, Object&gt;();<a name="line.129"></a>
<span class="sourceLineNo">130</span>        }<a name="line.130"></a>
<span class="sourceLineNo">131</span><a name="line.131"></a>
<span class="sourceLineNo">132</span>        this.attributes.clear();<a name="line.132"></a>
<span class="sourceLineNo">133</span>        this.attributes.putAll(attributes);<a name="line.133"></a>
<span class="sourceLineNo">134</span>    }<a name="line.134"></a>
<span class="sourceLineNo">135</span><a name="line.135"></a>
<span class="sourceLineNo">136</span>    /**<a name="line.136"></a>
<span class="sourceLineNo">137</span>     * Puts all pre-configured attributes into the actual session attribute<a name="line.137"></a>
<span class="sourceLineNo">138</span>     * map and forward the event to the next filter.<a name="line.138"></a>
<span class="sourceLineNo">139</span>     */<a name="line.139"></a>
<span class="sourceLineNo">140</span>    @Override<a name="line.140"></a>
<span class="sourceLineNo">141</span>    public void sessionCreated(NextFilter nextFilter, IoSession session) throws Exception {<a name="line.141"></a>
<span class="sourceLineNo">142</span>        for (Map.Entry&lt;String, Object&gt; e : attributes.entrySet()) {<a name="line.142"></a>
<span class="sourceLineNo">143</span>            session.setAttribute(e.getKey(), e.getValue());<a name="line.143"></a>
<span class="sourceLineNo">144</span>        }<a name="line.144"></a>
<span class="sourceLineNo">145</span><a name="line.145"></a>
<span class="sourceLineNo">146</span>        nextFilter.sessionCreated(session);<a name="line.146"></a>
<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
<span class="sourceLineNo">148</span>}<a name="line.148"></a>




























































</pre>
</div>
</body>
</html>
