<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<main role="main">
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span><a id="line.1">/*</a>
<span class="sourceLineNo">002</span><a id="line.2"> * Licensed to the Apache Software Foundation (ASF) under one</a>
<span class="sourceLineNo">003</span><a id="line.3"> * or more contributor license agreements.  See the NOTICE file</a>
<span class="sourceLineNo">004</span><a id="line.4"> * distributed with this work for additional information</a>
<span class="sourceLineNo">005</span><a id="line.5"> * regarding copyright ownership.  The ASF licenses this file</a>
<span class="sourceLineNo">006</span><a id="line.6"> * to you under the Apache License, Version 2.0 (the</a>
<span class="sourceLineNo">007</span><a id="line.7"> * "License"); you may not use this file except in compliance</a>
<span class="sourceLineNo">008</span><a id="line.8"> * with the License.  You may obtain a copy of the License at</a>
<span class="sourceLineNo">009</span><a id="line.9"> *</a>
<span class="sourceLineNo">010</span><a id="line.10"> *     http://www.apache.org/licenses/LICENSE-2.0</a>
<span class="sourceLineNo">011</span><a id="line.11"> *</a>
<span class="sourceLineNo">012</span><a id="line.12"> * Unless required by applicable law or agreed to in writing,</a>
<span class="sourceLineNo">013</span><a id="line.13"> * software distributed under the License is distributed on an</a>
<span class="sourceLineNo">014</span><a id="line.14"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</a>
<span class="sourceLineNo">015</span><a id="line.15"> * KIND, either express or implied.  See the License for the</a>
<span class="sourceLineNo">016</span><a id="line.16"> * specific language governing permissions and limitations</a>
<span class="sourceLineNo">017</span><a id="line.17"> * under the License.</a>
<span class="sourceLineNo">018</span><a id="line.18"> */</a>
<span class="sourceLineNo">019</span><a id="line.19">package org.apache.shiro.session.mgt;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import org.apache.shiro.session.ExpiredSessionException;</a>
<span class="sourceLineNo">022</span><a id="line.22">import org.apache.shiro.session.InvalidSessionException;</a>
<span class="sourceLineNo">023</span><a id="line.23">import org.apache.shiro.session.StoppedSessionException;</a>
<span class="sourceLineNo">024</span><a id="line.24">import org.apache.shiro.util.CollectionUtils;</a>
<span class="sourceLineNo">025</span><a id="line.25">import org.slf4j.Logger;</a>
<span class="sourceLineNo">026</span><a id="line.26">import org.slf4j.LoggerFactory;</a>
<span class="sourceLineNo">027</span><a id="line.27"></a>
<span class="sourceLineNo">028</span><a id="line.28">import java.io.IOException;</a>
<span class="sourceLineNo">029</span><a id="line.29">import java.io.ObjectInputStream;</a>
<span class="sourceLineNo">030</span><a id="line.30">import java.io.ObjectOutputStream;</a>
<span class="sourceLineNo">031</span><a id="line.31">import java.io.Serializable;</a>
<span class="sourceLineNo">032</span><a id="line.32">import java.text.DateFormat;</a>
<span class="sourceLineNo">033</span><a id="line.33">import java.util.*;</a>
<span class="sourceLineNo">034</span><a id="line.34"></a>
<span class="sourceLineNo">035</span><a id="line.35"></a>
<span class="sourceLineNo">036</span><a id="line.36">/**</a>
<span class="sourceLineNo">037</span><a id="line.37"> * Simple {@link org.apache.shiro.session.Session} JavaBeans-compatible POJO implementation, intended to be used on the</a>
<span class="sourceLineNo">038</span><a id="line.38"> * business/server tier.</a>
<span class="sourceLineNo">039</span><a id="line.39"> *</a>
<span class="sourceLineNo">040</span><a id="line.40"> * @since 0.1</a>
<span class="sourceLineNo">041</span><a id="line.41"> */</a>
<span class="sourceLineNo">042</span><a id="line.42">public class SimpleSession implements ValidatingSession, Serializable {</a>
<span class="sourceLineNo">043</span><a id="line.43"></a>
<span class="sourceLineNo">044</span><a id="line.44">    // Serialization reminder:</a>
<span class="sourceLineNo">045</span><a id="line.45">    // You _MUST_ change this number if you introduce a change to this class</a>
<span class="sourceLineNo">046</span><a id="line.46">    // that is NOT serialization backwards compatible.  Serialization-compatible</a>
<span class="sourceLineNo">047</span><a id="line.47">    // changes do not require a change to this number.  If you need to generate</a>
<span class="sourceLineNo">048</span><a id="line.48">    // a new number in this case, use the JDK's 'serialver' program to generate it.</a>
<span class="sourceLineNo">049</span><a id="line.49">    private static final long serialVersionUID = -7125642695178165650L;</a>
<span class="sourceLineNo">050</span><a id="line.50"></a>
<span class="sourceLineNo">051</span><a id="line.51">    //TODO - complete JavaDoc</a>
<span class="sourceLineNo">052</span><a id="line.52">    private transient static final Logger log = LoggerFactory.getLogger(SimpleSession.class);</a>
<span class="sourceLineNo">053</span><a id="line.53"></a>
<span class="sourceLineNo">054</span><a id="line.54">    protected static final long MILLIS_PER_SECOND = 1000;</a>
<span class="sourceLineNo">055</span><a id="line.55">    protected static final long MILLIS_PER_MINUTE = 60 * MILLIS_PER_SECOND;</a>
<span class="sourceLineNo">056</span><a id="line.56">    protected static final long MILLIS_PER_HOUR = 60 * MILLIS_PER_MINUTE;</a>
<span class="sourceLineNo">057</span><a id="line.57"></a>
<span class="sourceLineNo">058</span><a id="line.58">    //serialization bitmask fields. DO NOT CHANGE THE ORDER THEY ARE DECLARED!</a>
<span class="sourceLineNo">059</span><a id="line.59">    static int bitIndexCounter = 0;</a>
<span class="sourceLineNo">060</span><a id="line.60">    private static final int ID_BIT_MASK = 1 &lt;&lt; bitIndexCounter++;</a>
<span class="sourceLineNo">061</span><a id="line.61">    private static final int START_TIMESTAMP_BIT_MASK = 1 &lt;&lt; bitIndexCounter++;</a>
<span class="sourceLineNo">062</span><a id="line.62">    private static final int STOP_TIMESTAMP_BIT_MASK = 1 &lt;&lt; bitIndexCounter++;</a>
<span class="sourceLineNo">063</span><a id="line.63">    private static final int LAST_ACCESS_TIME_BIT_MASK = 1 &lt;&lt; bitIndexCounter++;</a>
<span class="sourceLineNo">064</span><a id="line.64">    private static final int TIMEOUT_BIT_MASK = 1 &lt;&lt; bitIndexCounter++;</a>
<span class="sourceLineNo">065</span><a id="line.65">    private static final int EXPIRED_BIT_MASK = 1 &lt;&lt; bitIndexCounter++;</a>
<span class="sourceLineNo">066</span><a id="line.66">    private static final int HOST_BIT_MASK = 1 &lt;&lt; bitIndexCounter++;</a>
<span class="sourceLineNo">067</span><a id="line.67">    private static final int ATTRIBUTES_BIT_MASK = 1 &lt;&lt; bitIndexCounter++;</a>
<span class="sourceLineNo">068</span><a id="line.68"></a>
<span class="sourceLineNo">069</span><a id="line.69">    // ==============================================================</a>
<span class="sourceLineNo">070</span><a id="line.70">    // NOTICE:</a>
<span class="sourceLineNo">071</span><a id="line.71">    //</a>
<span class="sourceLineNo">072</span><a id="line.72">    // The following fields are marked as transient to avoid double-serialization.</a>
<span class="sourceLineNo">073</span><a id="line.73">    // They are in fact serialized (even though 'transient' usually indicates otherwise),</a>
<span class="sourceLineNo">074</span><a id="line.74">    // but they are serialized explicitly via the writeObject and readObject implementations</a>
<span class="sourceLineNo">075</span><a id="line.75">    // in this class.</a>
<span class="sourceLineNo">076</span><a id="line.76">    //</a>
<span class="sourceLineNo">077</span><a id="line.77">    // If we didn't declare them as transient, the out.defaultWriteObject(); call in writeObject would</a>
<span class="sourceLineNo">078</span><a id="line.78">    // serialize all non-transient fields as well, effectively doubly serializing the fields (also</a>
<span class="sourceLineNo">079</span><a id="line.79">    // doubling the serialization size).</a>
<span class="sourceLineNo">080</span><a id="line.80">    //</a>
<span class="sourceLineNo">081</span><a id="line.81">    // This finding, with discussion, was covered here:</a>
<span class="sourceLineNo">082</span><a id="line.82">    //</a>
<span class="sourceLineNo">083</span><a id="line.83">    // http://mail-archives.apache.org/mod_mbox/shiro-user/201109.mbox/%3C4E81BCBD.8060909@metaphysis.net%3E</a>
<span class="sourceLineNo">084</span><a id="line.84">    //</a>
<span class="sourceLineNo">085</span><a id="line.85">    // ==============================================================</a>
<span class="sourceLineNo">086</span><a id="line.86">    private transient Serializable id;</a>
<span class="sourceLineNo">087</span><a id="line.87">    private transient Date startTimestamp;</a>
<span class="sourceLineNo">088</span><a id="line.88">    private transient Date stopTimestamp;</a>
<span class="sourceLineNo">089</span><a id="line.89">    private transient Date lastAccessTime;</a>
<span class="sourceLineNo">090</span><a id="line.90">    private transient long timeout;</a>
<span class="sourceLineNo">091</span><a id="line.91">    private transient boolean expired;</a>
<span class="sourceLineNo">092</span><a id="line.92">    private transient String host;</a>
<span class="sourceLineNo">093</span><a id="line.93">    private transient Map&lt;Object, Object&gt; attributes;</a>
<span class="sourceLineNo">094</span><a id="line.94"></a>
<span class="sourceLineNo">095</span><a id="line.95">    public SimpleSession() {</a>
<span class="sourceLineNo">096</span><a id="line.96">        this.timeout = DefaultSessionManager.DEFAULT_GLOBAL_SESSION_TIMEOUT; //TODO - remove concrete reference to DefaultSessionManager</a>
<span class="sourceLineNo">097</span><a id="line.97">        this.startTimestamp = new Date();</a>
<span class="sourceLineNo">098</span><a id="line.98">        this.lastAccessTime = this.startTimestamp;</a>
<span class="sourceLineNo">099</span><a id="line.99">    }</a>
<span class="sourceLineNo">100</span><a id="line.100"></a>
<span class="sourceLineNo">101</span><a id="line.101">    public SimpleSession(String host) {</a>
<span class="sourceLineNo">102</span><a id="line.102">        this();</a>
<span class="sourceLineNo">103</span><a id="line.103">        this.host = host;</a>
<span class="sourceLineNo">104</span><a id="line.104">    }</a>
<span class="sourceLineNo">105</span><a id="line.105"></a>
<span class="sourceLineNo">106</span><a id="line.106">    public Serializable getId() {</a>
<span class="sourceLineNo">107</span><a id="line.107">        return this.id;</a>
<span class="sourceLineNo">108</span><a id="line.108">    }</a>
<span class="sourceLineNo">109</span><a id="line.109"></a>
<span class="sourceLineNo">110</span><a id="line.110">    public void setId(Serializable id) {</a>
<span class="sourceLineNo">111</span><a id="line.111">        this.id = id;</a>
<span class="sourceLineNo">112</span><a id="line.112">    }</a>
<span class="sourceLineNo">113</span><a id="line.113"></a>
<span class="sourceLineNo">114</span><a id="line.114">    public Date getStartTimestamp() {</a>
<span class="sourceLineNo">115</span><a id="line.115">        return startTimestamp;</a>
<span class="sourceLineNo">116</span><a id="line.116">    }</a>
<span class="sourceLineNo">117</span><a id="line.117"></a>
<span class="sourceLineNo">118</span><a id="line.118">    public void setStartTimestamp(Date startTimestamp) {</a>
<span class="sourceLineNo">119</span><a id="line.119">        this.startTimestamp = startTimestamp;</a>
<span class="sourceLineNo">120</span><a id="line.120">    }</a>
<span class="sourceLineNo">121</span><a id="line.121"></a>
<span class="sourceLineNo">122</span><a id="line.122">    /**</a>
<span class="sourceLineNo">123</span><a id="line.123">     * Returns the time the session was stopped, or &lt;tt&gt;null&lt;/tt&gt; if the session is still active.</a>
<span class="sourceLineNo">124</span><a id="line.124">     * &lt;p/&gt;</a>
<span class="sourceLineNo">125</span><a id="line.125">     * A session may become stopped under a number of conditions:</a>
<span class="sourceLineNo">126</span><a id="line.126">     * &lt;ul&gt;</a>
<span class="sourceLineNo">127</span><a id="line.127">     * &lt;li&gt;If the user logs out of the system, their current session is terminated (released).&lt;/li&gt;</a>
<span class="sourceLineNo">128</span><a id="line.128">     * &lt;li&gt;If the session expires&lt;/li&gt;</a>
<span class="sourceLineNo">129</span><a id="line.129">     * &lt;li&gt;The application explicitly calls {@link #stop()}&lt;/li&gt;</a>
<span class="sourceLineNo">130</span><a id="line.130">     * &lt;li&gt;If there is an internal system error and the session state can no longer accurately</a>
<span class="sourceLineNo">131</span><a id="line.131">     * reflect the user's behavior, such in the case of a system crash&lt;/li&gt;</a>
<span class="sourceLineNo">132</span><a id="line.132">     * &lt;/ul&gt;</a>
<span class="sourceLineNo">133</span><a id="line.133">     * &lt;p/&gt;</a>
<span class="sourceLineNo">134</span><a id="line.134">     * Once stopped, a session may no longer be used.  It is locked from all further activity.</a>
<span class="sourceLineNo">135</span><a id="line.135">     *</a>
<span class="sourceLineNo">136</span><a id="line.136">     * @return The time the session was stopped, or &lt;tt&gt;null&lt;/tt&gt; if the session is still</a>
<span class="sourceLineNo">137</span><a id="line.137">     *         active.</a>
<span class="sourceLineNo">138</span><a id="line.138">     */</a>
<span class="sourceLineNo">139</span><a id="line.139">    public Date getStopTimestamp() {</a>
<span class="sourceLineNo">140</span><a id="line.140">        return stopTimestamp;</a>
<span class="sourceLineNo">141</span><a id="line.141">    }</a>
<span class="sourceLineNo">142</span><a id="line.142"></a>
<span class="sourceLineNo">143</span><a id="line.143">    public void setStopTimestamp(Date stopTimestamp) {</a>
<span class="sourceLineNo">144</span><a id="line.144">        this.stopTimestamp = stopTimestamp;</a>
<span class="sourceLineNo">145</span><a id="line.145">    }</a>
<span class="sourceLineNo">146</span><a id="line.146"></a>
<span class="sourceLineNo">147</span><a id="line.147">    public Date getLastAccessTime() {</a>
<span class="sourceLineNo">148</span><a id="line.148">        return lastAccessTime;</a>
<span class="sourceLineNo">149</span><a id="line.149">    }</a>
<span class="sourceLineNo">150</span><a id="line.150"></a>
<span class="sourceLineNo">151</span><a id="line.151">    public void setLastAccessTime(Date lastAccessTime) {</a>
<span class="sourceLineNo">152</span><a id="line.152">        this.lastAccessTime = lastAccessTime;</a>
<span class="sourceLineNo">153</span><a id="line.153">    }</a>
<span class="sourceLineNo">154</span><a id="line.154"></a>
<span class="sourceLineNo">155</span><a id="line.155">    /**</a>
<span class="sourceLineNo">156</span><a id="line.156">     * Returns true if this session has expired, false otherwise.  If the session has</a>
<span class="sourceLineNo">157</span><a id="line.157">     * expired, no further user interaction with the system may be done under this session.</a>
<span class="sourceLineNo">158</span><a id="line.158">     *</a>
<span class="sourceLineNo">159</span><a id="line.159">     * @return true if this session has expired, false otherwise.</a>
<span class="sourceLineNo">160</span><a id="line.160">     */</a>
<span class="sourceLineNo">161</span><a id="line.161">    public boolean isExpired() {</a>
<span class="sourceLineNo">162</span><a id="line.162">        return expired;</a>
<span class="sourceLineNo">163</span><a id="line.163">    }</a>
<span class="sourceLineNo">164</span><a id="line.164"></a>
<span class="sourceLineNo">165</span><a id="line.165">    public void setExpired(boolean expired) {</a>
<span class="sourceLineNo">166</span><a id="line.166">        this.expired = expired;</a>
<span class="sourceLineNo">167</span><a id="line.167">    }</a>
<span class="sourceLineNo">168</span><a id="line.168"></a>
<span class="sourceLineNo">169</span><a id="line.169">    public long getTimeout() {</a>
<span class="sourceLineNo">170</span><a id="line.170">        return timeout;</a>
<span class="sourceLineNo">171</span><a id="line.171">    }</a>
<span class="sourceLineNo">172</span><a id="line.172"></a>
<span class="sourceLineNo">173</span><a id="line.173">    public void setTimeout(long timeout) {</a>
<span class="sourceLineNo">174</span><a id="line.174">        this.timeout = timeout;</a>
<span class="sourceLineNo">175</span><a id="line.175">    }</a>
<span class="sourceLineNo">176</span><a id="line.176"></a>
<span class="sourceLineNo">177</span><a id="line.177">    public String getHost() {</a>
<span class="sourceLineNo">178</span><a id="line.178">        return host;</a>
<span class="sourceLineNo">179</span><a id="line.179">    }</a>
<span class="sourceLineNo">180</span><a id="line.180"></a>
<span class="sourceLineNo">181</span><a id="line.181">    public void setHost(String host) {</a>
<span class="sourceLineNo">182</span><a id="line.182">        this.host = host;</a>
<span class="sourceLineNo">183</span><a id="line.183">    }</a>
<span class="sourceLineNo">184</span><a id="line.184"></a>
<span class="sourceLineNo">185</span><a id="line.185">    public Map&lt;Object, Object&gt; getAttributes() {</a>
<span class="sourceLineNo">186</span><a id="line.186">        return attributes;</a>
<span class="sourceLineNo">187</span><a id="line.187">    }</a>
<span class="sourceLineNo">188</span><a id="line.188"></a>
<span class="sourceLineNo">189</span><a id="line.189">    public void setAttributes(Map&lt;Object, Object&gt; attributes) {</a>
<span class="sourceLineNo">190</span><a id="line.190">        this.attributes = attributes;</a>
<span class="sourceLineNo">191</span><a id="line.191">    }</a>
<span class="sourceLineNo">192</span><a id="line.192"></a>
<span class="sourceLineNo">193</span><a id="line.193">    public void touch() {</a>
<span class="sourceLineNo">194</span><a id="line.194">        this.lastAccessTime = new Date();</a>
<span class="sourceLineNo">195</span><a id="line.195">    }</a>
<span class="sourceLineNo">196</span><a id="line.196"></a>
<span class="sourceLineNo">197</span><a id="line.197">    public void stop() {</a>
<span class="sourceLineNo">198</span><a id="line.198">        if (this.stopTimestamp == null) {</a>
<span class="sourceLineNo">199</span><a id="line.199">            this.stopTimestamp = new Date();</a>
<span class="sourceLineNo">200</span><a id="line.200">        }</a>
<span class="sourceLineNo">201</span><a id="line.201">    }</a>
<span class="sourceLineNo">202</span><a id="line.202"></a>
<span class="sourceLineNo">203</span><a id="line.203">    protected boolean isStopped() {</a>
<span class="sourceLineNo">204</span><a id="line.204">        return getStopTimestamp() != null;</a>
<span class="sourceLineNo">205</span><a id="line.205">    }</a>
<span class="sourceLineNo">206</span><a id="line.206"></a>
<span class="sourceLineNo">207</span><a id="line.207">    protected void expire() {</a>
<span class="sourceLineNo">208</span><a id="line.208">        stop();</a>
<span class="sourceLineNo">209</span><a id="line.209">        this.expired = true;</a>
<span class="sourceLineNo">210</span><a id="line.210">    }</a>
<span class="sourceLineNo">211</span><a id="line.211"></a>
<span class="sourceLineNo">212</span><a id="line.212">    /**</a>
<span class="sourceLineNo">213</span><a id="line.213">     * @since 0.9</a>
<span class="sourceLineNo">214</span><a id="line.214">     */</a>
<span class="sourceLineNo">215</span><a id="line.215">    public boolean isValid() {</a>
<span class="sourceLineNo">216</span><a id="line.216">        return !isStopped() &amp;&amp; !isExpired();</a>
<span class="sourceLineNo">217</span><a id="line.217">    }</a>
<span class="sourceLineNo">218</span><a id="line.218"></a>
<span class="sourceLineNo">219</span><a id="line.219">    /**</a>
<span class="sourceLineNo">220</span><a id="line.220">     * Determines if this session is expired.</a>
<span class="sourceLineNo">221</span><a id="line.221">     *</a>
<span class="sourceLineNo">222</span><a id="line.222">     * @return true if the specified session has expired, false otherwise.</a>
<span class="sourceLineNo">223</span><a id="line.223">     */</a>
<span class="sourceLineNo">224</span><a id="line.224">    protected boolean isTimedOut() {</a>
<span class="sourceLineNo">225</span><a id="line.225"></a>
<span class="sourceLineNo">226</span><a id="line.226">        if (isExpired()) {</a>
<span class="sourceLineNo">227</span><a id="line.227">            return true;</a>
<span class="sourceLineNo">228</span><a id="line.228">        }</a>
<span class="sourceLineNo">229</span><a id="line.229"></a>
<span class="sourceLineNo">230</span><a id="line.230">        long timeout = getTimeout();</a>
<span class="sourceLineNo">231</span><a id="line.231"></a>
<span class="sourceLineNo">232</span><a id="line.232">        if (timeout &gt;= 0l) {</a>
<span class="sourceLineNo">233</span><a id="line.233"></a>
<span class="sourceLineNo">234</span><a id="line.234">            Date lastAccessTime = getLastAccessTime();</a>
<span class="sourceLineNo">235</span><a id="line.235"></a>
<span class="sourceLineNo">236</span><a id="line.236">            if (lastAccessTime == null) {</a>
<span class="sourceLineNo">237</span><a id="line.237">                String msg = "session.lastAccessTime for session with id [" +</a>
<span class="sourceLineNo">238</span><a id="line.238">                        getId() + "] is null.  This value must be set at " +</a>
<span class="sourceLineNo">239</span><a id="line.239">                        "least once, preferably at least upon instantiation.  Please check the " +</a>
<span class="sourceLineNo">240</span><a id="line.240">                        getClass().getName() + " implementation and ensure " +</a>
<span class="sourceLineNo">241</span><a id="line.241">                        "this value will be set (perhaps in the constructor?)";</a>
<span class="sourceLineNo">242</span><a id="line.242">                throw new IllegalStateException(msg);</a>
<span class="sourceLineNo">243</span><a id="line.243">            }</a>
<span class="sourceLineNo">244</span><a id="line.244"></a>
<span class="sourceLineNo">245</span><a id="line.245">            // Calculate at what time a session would have been last accessed</a>
<span class="sourceLineNo">246</span><a id="line.246">            // for it to be expired at this point.  In other words, subtract</a>
<span class="sourceLineNo">247</span><a id="line.247">            // from the current time the amount of time that a session can</a>
<span class="sourceLineNo">248</span><a id="line.248">            // be inactive before expiring.  If the session was last accessed</a>
<span class="sourceLineNo">249</span><a id="line.249">            // before this time, it is expired.</a>
<span class="sourceLineNo">250</span><a id="line.250">            long expireTimeMillis = System.currentTimeMillis() - timeout;</a>
<span class="sourceLineNo">251</span><a id="line.251">            Date expireTime = new Date(expireTimeMillis);</a>
<span class="sourceLineNo">252</span><a id="line.252">            return lastAccessTime.before(expireTime);</a>
<span class="sourceLineNo">253</span><a id="line.253">        } else {</a>
<span class="sourceLineNo">254</span><a id="line.254">            if (log.isTraceEnabled()) {</a>
<span class="sourceLineNo">255</span><a id="line.255">                log.trace("No timeout for session with id [" + getId() +</a>
<span class="sourceLineNo">256</span><a id="line.256">                        "].  Session is not considered expired.");</a>
<span class="sourceLineNo">257</span><a id="line.257">            }</a>
<span class="sourceLineNo">258</span><a id="line.258">        }</a>
<span class="sourceLineNo">259</span><a id="line.259"></a>
<span class="sourceLineNo">260</span><a id="line.260">        return false;</a>
<span class="sourceLineNo">261</span><a id="line.261">    }</a>
<span class="sourceLineNo">262</span><a id="line.262"></a>
<span class="sourceLineNo">263</span><a id="line.263">    public void validate() throws InvalidSessionException {</a>
<span class="sourceLineNo">264</span><a id="line.264">        //check for stopped:</a>
<span class="sourceLineNo">265</span><a id="line.265">        if (isStopped()) {</a>
<span class="sourceLineNo">266</span><a id="line.266">            //timestamp is set, so the session is considered stopped:</a>
<span class="sourceLineNo">267</span><a id="line.267">            String msg = "Session with id [" + getId() + "] has been " +</a>
<span class="sourceLineNo">268</span><a id="line.268">                    "explicitly stopped.  No further interaction under this session is " +</a>
<span class="sourceLineNo">269</span><a id="line.269">                    "allowed.";</a>
<span class="sourceLineNo">270</span><a id="line.270">            throw new StoppedSessionException(msg);</a>
<span class="sourceLineNo">271</span><a id="line.271">        }</a>
<span class="sourceLineNo">272</span><a id="line.272"></a>
<span class="sourceLineNo">273</span><a id="line.273">        //check for expiration</a>
<span class="sourceLineNo">274</span><a id="line.274">        if (isTimedOut()) {</a>
<span class="sourceLineNo">275</span><a id="line.275">            expire();</a>
<span class="sourceLineNo">276</span><a id="line.276"></a>
<span class="sourceLineNo">277</span><a id="line.277">            //throw an exception explaining details of why it expired:</a>
<span class="sourceLineNo">278</span><a id="line.278">            Date lastAccessTime = getLastAccessTime();</a>
<span class="sourceLineNo">279</span><a id="line.279">            long timeout = getTimeout();</a>
<span class="sourceLineNo">280</span><a id="line.280"></a>
<span class="sourceLineNo">281</span><a id="line.281">            Serializable sessionId = getId();</a>
<span class="sourceLineNo">282</span><a id="line.282"></a>
<span class="sourceLineNo">283</span><a id="line.283">            DateFormat df = DateFormat.getInstance();</a>
<span class="sourceLineNo">284</span><a id="line.284">            String msg = "Session with id [" + sessionId + "] has expired. " +</a>
<span class="sourceLineNo">285</span><a id="line.285">                    "Last access time: " + df.format(lastAccessTime) +</a>
<span class="sourceLineNo">286</span><a id="line.286">                    ".  Current time: " + df.format(new Date()) +</a>
<span class="sourceLineNo">287</span><a id="line.287">                    ".  Session timeout is set to " + timeout / MILLIS_PER_SECOND + " seconds (" +</a>
<span class="sourceLineNo">288</span><a id="line.288">                    timeout / MILLIS_PER_MINUTE + " minutes)";</a>
<span class="sourceLineNo">289</span><a id="line.289">            if (log.isTraceEnabled()) {</a>
<span class="sourceLineNo">290</span><a id="line.290">                log.trace(msg);</a>
<span class="sourceLineNo">291</span><a id="line.291">            }</a>
<span class="sourceLineNo">292</span><a id="line.292">            throw new ExpiredSessionException(msg);</a>
<span class="sourceLineNo">293</span><a id="line.293">        }</a>
<span class="sourceLineNo">294</span><a id="line.294">    }</a>
<span class="sourceLineNo">295</span><a id="line.295"></a>
<span class="sourceLineNo">296</span><a id="line.296">    private Map&lt;Object, Object&gt; getAttributesLazy() {</a>
<span class="sourceLineNo">297</span><a id="line.297">        Map&lt;Object, Object&gt; attributes = getAttributes();</a>
<span class="sourceLineNo">298</span><a id="line.298">        if (attributes == null) {</a>
<span class="sourceLineNo">299</span><a id="line.299">            attributes = new HashMap&lt;Object, Object&gt;();</a>
<span class="sourceLineNo">300</span><a id="line.300">            setAttributes(attributes);</a>
<span class="sourceLineNo">301</span><a id="line.301">        }</a>
<span class="sourceLineNo">302</span><a id="line.302">        return attributes;</a>
<span class="sourceLineNo">303</span><a id="line.303">    }</a>
<span class="sourceLineNo">304</span><a id="line.304"></a>
<span class="sourceLineNo">305</span><a id="line.305">    public Collection&lt;Object&gt; getAttributeKeys() throws InvalidSessionException {</a>
<span class="sourceLineNo">306</span><a id="line.306">        Map&lt;Object, Object&gt; attributes = getAttributes();</a>
<span class="sourceLineNo">307</span><a id="line.307">        if (attributes == null) {</a>
<span class="sourceLineNo">308</span><a id="line.308">            return Collections.emptySet();</a>
<span class="sourceLineNo">309</span><a id="line.309">        }</a>
<span class="sourceLineNo">310</span><a id="line.310">        return attributes.keySet();</a>
<span class="sourceLineNo">311</span><a id="line.311">    }</a>
<span class="sourceLineNo">312</span><a id="line.312"></a>
<span class="sourceLineNo">313</span><a id="line.313">    public Object getAttribute(Object key) {</a>
<span class="sourceLineNo">314</span><a id="line.314">        Map&lt;Object, Object&gt; attributes = getAttributes();</a>
<span class="sourceLineNo">315</span><a id="line.315">        if (attributes == null) {</a>
<span class="sourceLineNo">316</span><a id="line.316">            return null;</a>
<span class="sourceLineNo">317</span><a id="line.317">        }</a>
<span class="sourceLineNo">318</span><a id="line.318">        return attributes.get(key);</a>
<span class="sourceLineNo">319</span><a id="line.319">    }</a>
<span class="sourceLineNo">320</span><a id="line.320"></a>
<span class="sourceLineNo">321</span><a id="line.321">    public void setAttribute(Object key, Object value) {</a>
<span class="sourceLineNo">322</span><a id="line.322">        if (value == null) {</a>
<span class="sourceLineNo">323</span><a id="line.323">            removeAttribute(key);</a>
<span class="sourceLineNo">324</span><a id="line.324">        } else {</a>
<span class="sourceLineNo">325</span><a id="line.325">            getAttributesLazy().put(key, value);</a>
<span class="sourceLineNo">326</span><a id="line.326">        }</a>
<span class="sourceLineNo">327</span><a id="line.327">    }</a>
<span class="sourceLineNo">328</span><a id="line.328"></a>
<span class="sourceLineNo">329</span><a id="line.329">    public Object removeAttribute(Object key) {</a>
<span class="sourceLineNo">330</span><a id="line.330">        Map&lt;Object, Object&gt; attributes = getAttributes();</a>
<span class="sourceLineNo">331</span><a id="line.331">        if (attributes == null) {</a>
<span class="sourceLineNo">332</span><a id="line.332">            return null;</a>
<span class="sourceLineNo">333</span><a id="line.333">        } else {</a>
<span class="sourceLineNo">334</span><a id="line.334">            return attributes.remove(key);</a>
<span class="sourceLineNo">335</span><a id="line.335">        }</a>
<span class="sourceLineNo">336</span><a id="line.336">    }</a>
<span class="sourceLineNo">337</span><a id="line.337"></a>
<span class="sourceLineNo">338</span><a id="line.338">    /**</a>
<span class="sourceLineNo">339</span><a id="line.339">     * Returns {@code true} if the specified argument is an {@code instanceof} {@code SimpleSession} and both</a>
<span class="sourceLineNo">340</span><a id="line.340">     * {@link #getId() id}s are equal.  If the argument is a {@code SimpleSession} and either 'this' or the argument</a>
<span class="sourceLineNo">341</span><a id="line.341">     * does not yet have an ID assigned, the value of {@link #onEquals(SimpleSession) onEquals} is returned, which</a>
<span class="sourceLineNo">342</span><a id="line.342">     * does a necessary attribute-based comparison when IDs are not available.</a>
<span class="sourceLineNo">343</span><a id="line.343">     * &lt;p/&gt;</a>
<span class="sourceLineNo">344</span><a id="line.344">     * Do your best to ensure {@code SimpleSession} instances receive an ID very early in their lifecycle to</a>
<span class="sourceLineNo">345</span><a id="line.345">     * avoid the more expensive attributes-based comparison.</a>
<span class="sourceLineNo">346</span><a id="line.346">     *</a>
<span class="sourceLineNo">347</span><a id="line.347">     * @param obj the object to compare with this one for equality.</a>
<span class="sourceLineNo">348</span><a id="line.348">     * @return {@code true} if this object is equivalent to the specified argument, {@code false} otherwise.</a>
<span class="sourceLineNo">349</span><a id="line.349">     */</a>
<span class="sourceLineNo">350</span><a id="line.350">    @Override</a>
<span class="sourceLineNo">351</span><a id="line.351">    public boolean equals(Object obj) {</a>
<span class="sourceLineNo">352</span><a id="line.352">        if (this == obj) {</a>
<span class="sourceLineNo">353</span><a id="line.353">            return true;</a>
<span class="sourceLineNo">354</span><a id="line.354">        }</a>
<span class="sourceLineNo">355</span><a id="line.355">        if (obj instanceof SimpleSession) {</a>
<span class="sourceLineNo">356</span><a id="line.356">            SimpleSession other = (SimpleSession) obj;</a>
<span class="sourceLineNo">357</span><a id="line.357">            Serializable thisId = getId();</a>
<span class="sourceLineNo">358</span><a id="line.358">            Serializable otherId = other.getId();</a>
<span class="sourceLineNo">359</span><a id="line.359">            if (thisId != null &amp;&amp; otherId != null) {</a>
<span class="sourceLineNo">360</span><a id="line.360">                return thisId.equals(otherId);</a>
<span class="sourceLineNo">361</span><a id="line.361">            } else {</a>
<span class="sourceLineNo">362</span><a id="line.362">                //fall back to an attribute based comparison:</a>
<span class="sourceLineNo">363</span><a id="line.363">                return onEquals(other);</a>
<span class="sourceLineNo">364</span><a id="line.364">            }</a>
<span class="sourceLineNo">365</span><a id="line.365">        }</a>
<span class="sourceLineNo">366</span><a id="line.366">        return false;</a>
<span class="sourceLineNo">367</span><a id="line.367">    }</a>
<span class="sourceLineNo">368</span><a id="line.368"></a>
<span class="sourceLineNo">369</span><a id="line.369">    /**</a>
<span class="sourceLineNo">370</span><a id="line.370">     * Provides an attribute-based comparison (no ID comparison) - incurred &lt;em&gt;only&lt;/em&gt; when 'this' or the</a>
<span class="sourceLineNo">371</span><a id="line.371">     * session object being compared for equality do not have a session id.</a>
<span class="sourceLineNo">372</span><a id="line.372">     *</a>
<span class="sourceLineNo">373</span><a id="line.373">     * @param ss the SimpleSession instance to compare for equality.</a>
<span class="sourceLineNo">374</span><a id="line.374">     * @return true if all the attributes, except the id, are equal to this object's attributes.</a>
<span class="sourceLineNo">375</span><a id="line.375">     * @since 1.0</a>
<span class="sourceLineNo">376</span><a id="line.376">     */</a>
<span class="sourceLineNo">377</span><a id="line.377">    protected boolean onEquals(SimpleSession ss) {</a>
<span class="sourceLineNo">378</span><a id="line.378">        return (getStartTimestamp() != null ? getStartTimestamp().equals(ss.getStartTimestamp()) : ss.getStartTimestamp() == null) &amp;&amp;</a>
<span class="sourceLineNo">379</span><a id="line.379">                (getStopTimestamp() != null ? getStopTimestamp().equals(ss.getStopTimestamp()) : ss.getStopTimestamp() == null) &amp;&amp;</a>
<span class="sourceLineNo">380</span><a id="line.380">                (getLastAccessTime() != null ? getLastAccessTime().equals(ss.getLastAccessTime()) : ss.getLastAccessTime() == null) &amp;&amp;</a>
<span class="sourceLineNo">381</span><a id="line.381">                (getTimeout() == ss.getTimeout()) &amp;&amp;</a>
<span class="sourceLineNo">382</span><a id="line.382">                (isExpired() == ss.isExpired()) &amp;&amp;</a>
<span class="sourceLineNo">383</span><a id="line.383">                (getHost() != null ? getHost().equals(ss.getHost()) : ss.getHost() == null) &amp;&amp;</a>
<span class="sourceLineNo">384</span><a id="line.384">                (getAttributes() != null ? getAttributes().equals(ss.getAttributes()) : ss.getAttributes() == null);</a>
<span class="sourceLineNo">385</span><a id="line.385">    }</a>
<span class="sourceLineNo">386</span><a id="line.386"></a>
<span class="sourceLineNo">387</span><a id="line.387">    /**</a>
<span class="sourceLineNo">388</span><a id="line.388">     * Returns the hashCode.  If the {@link #getId() id} is not {@code null}, its hashcode is returned immediately.</a>
<span class="sourceLineNo">389</span><a id="line.389">     * If it is {@code null}, an attributes-based hashCode will be calculated and returned.</a>
<span class="sourceLineNo">390</span><a id="line.390">     * &lt;p/&gt;</a>
<span class="sourceLineNo">391</span><a id="line.391">     * Do your best to ensure {@code SimpleSession} instances receive an ID very early in their lifecycle to</a>
<span class="sourceLineNo">392</span><a id="line.392">     * avoid the more expensive attributes-based calculation.</a>
<span class="sourceLineNo">393</span><a id="line.393">     *</a>
<span class="sourceLineNo">394</span><a id="line.394">     * @return this object's hashCode</a>
<span class="sourceLineNo">395</span><a id="line.395">     * @since 1.0</a>
<span class="sourceLineNo">396</span><a id="line.396">     */</a>
<span class="sourceLineNo">397</span><a id="line.397">    @Override</a>
<span class="sourceLineNo">398</span><a id="line.398">    public int hashCode() {</a>
<span class="sourceLineNo">399</span><a id="line.399">        Serializable id = getId();</a>
<span class="sourceLineNo">400</span><a id="line.400">        if (id != null) {</a>
<span class="sourceLineNo">401</span><a id="line.401">            return id.hashCode();</a>
<span class="sourceLineNo">402</span><a id="line.402">        }</a>
<span class="sourceLineNo">403</span><a id="line.403">        int hashCode = getStartTimestamp() != null ? getStartTimestamp().hashCode() : 0;</a>
<span class="sourceLineNo">404</span><a id="line.404">        hashCode = 31 * hashCode + (getStopTimestamp() != null ? getStopTimestamp().hashCode() : 0);</a>
<span class="sourceLineNo">405</span><a id="line.405">        hashCode = 31 * hashCode + (getLastAccessTime() != null ? getLastAccessTime().hashCode() : 0);</a>
<span class="sourceLineNo">406</span><a id="line.406">        hashCode = 31 * hashCode + Long.valueOf(Math.max(getTimeout(), 0)).hashCode();</a>
<span class="sourceLineNo">407</span><a id="line.407">        hashCode = 31 * hashCode + Boolean.valueOf(isExpired()).hashCode();</a>
<span class="sourceLineNo">408</span><a id="line.408">        hashCode = 31 * hashCode + (getHost() != null ? getHost().hashCode() : 0);</a>
<span class="sourceLineNo">409</span><a id="line.409">        hashCode = 31 * hashCode + (getAttributes() != null ? getAttributes().hashCode() : 0);</a>
<span class="sourceLineNo">410</span><a id="line.410">        return hashCode;</a>
<span class="sourceLineNo">411</span><a id="line.411">    }</a>
<span class="sourceLineNo">412</span><a id="line.412"></a>
<span class="sourceLineNo">413</span><a id="line.413">    /**</a>
<span class="sourceLineNo">414</span><a id="line.414">     * Returns the string representation of this SimpleSession, equal to</a>
<span class="sourceLineNo">415</span><a id="line.415">     * &lt;code&gt;getClass().getName() + &amp;quot;,id=&amp;quot; + getId()&lt;/code&gt;.</a>
<span class="sourceLineNo">416</span><a id="line.416">     *</a>
<span class="sourceLineNo">417</span><a id="line.417">     * @return the string representation of this SimpleSession, equal to</a>
<span class="sourceLineNo">418</span><a id="line.418">     *         &lt;code&gt;getClass().getName() + &amp;quot;,id=&amp;quot; + getId()&lt;/code&gt;.</a>
<span class="sourceLineNo">419</span><a id="line.419">     * @since 1.0</a>
<span class="sourceLineNo">420</span><a id="line.420">     */</a>
<span class="sourceLineNo">421</span><a id="line.421">    @Override</a>
<span class="sourceLineNo">422</span><a id="line.422">    public String toString() {</a>
<span class="sourceLineNo">423</span><a id="line.423">        StringBuilder sb = new StringBuilder();</a>
<span class="sourceLineNo">424</span><a id="line.424">        sb.append(getClass().getName()).append(",id=").append(getId());</a>
<span class="sourceLineNo">425</span><a id="line.425">        return sb.toString();</a>
<span class="sourceLineNo">426</span><a id="line.426">    }</a>
<span class="sourceLineNo">427</span><a id="line.427"></a>
<span class="sourceLineNo">428</span><a id="line.428">    /**</a>
<span class="sourceLineNo">429</span><a id="line.429">     * Serializes this object to the specified output stream for JDK Serialization.</a>
<span class="sourceLineNo">430</span><a id="line.430">     *</a>
<span class="sourceLineNo">431</span><a id="line.431">     * @param out output stream used for Object serialization.</a>
<span class="sourceLineNo">432</span><a id="line.432">     * @throws IOException if any of this object's fields cannot be written to the stream.</a>
<span class="sourceLineNo">433</span><a id="line.433">     * @since 1.0</a>
<span class="sourceLineNo">434</span><a id="line.434">     */</a>
<span class="sourceLineNo">435</span><a id="line.435">    private void writeObject(ObjectOutputStream out) throws IOException {</a>
<span class="sourceLineNo">436</span><a id="line.436">        out.defaultWriteObject();</a>
<span class="sourceLineNo">437</span><a id="line.437">        short alteredFieldsBitMask = getAlteredFieldsBitMask();</a>
<span class="sourceLineNo">438</span><a id="line.438">        out.writeShort(alteredFieldsBitMask);</a>
<span class="sourceLineNo">439</span><a id="line.439">        if (id != null) {</a>
<span class="sourceLineNo">440</span><a id="line.440">            out.writeObject(id);</a>
<span class="sourceLineNo">441</span><a id="line.441">        }</a>
<span class="sourceLineNo">442</span><a id="line.442">        if (startTimestamp != null) {</a>
<span class="sourceLineNo">443</span><a id="line.443">            out.writeObject(startTimestamp);</a>
<span class="sourceLineNo">444</span><a id="line.444">        }</a>
<span class="sourceLineNo">445</span><a id="line.445">        if (stopTimestamp != null) {</a>
<span class="sourceLineNo">446</span><a id="line.446">            out.writeObject(stopTimestamp);</a>
<span class="sourceLineNo">447</span><a id="line.447">        }</a>
<span class="sourceLineNo">448</span><a id="line.448">        if (lastAccessTime != null) {</a>
<span class="sourceLineNo">449</span><a id="line.449">            out.writeObject(lastAccessTime);</a>
<span class="sourceLineNo">450</span><a id="line.450">        }</a>
<span class="sourceLineNo">451</span><a id="line.451">        if (timeout != 0l) {</a>
<span class="sourceLineNo">452</span><a id="line.452">            out.writeLong(timeout);</a>
<span class="sourceLineNo">453</span><a id="line.453">        }</a>
<span class="sourceLineNo">454</span><a id="line.454">        if (expired) {</a>
<span class="sourceLineNo">455</span><a id="line.455">            out.writeBoolean(expired);</a>
<span class="sourceLineNo">456</span><a id="line.456">        }</a>
<span class="sourceLineNo">457</span><a id="line.457">        if (host != null) {</a>
<span class="sourceLineNo">458</span><a id="line.458">            out.writeUTF(host);</a>
<span class="sourceLineNo">459</span><a id="line.459">        }</a>
<span class="sourceLineNo">460</span><a id="line.460">        if (!CollectionUtils.isEmpty(attributes)) {</a>
<span class="sourceLineNo">461</span><a id="line.461">            out.writeObject(attributes);</a>
<span class="sourceLineNo">462</span><a id="line.462">        }</a>
<span class="sourceLineNo">463</span><a id="line.463">    }</a>
<span class="sourceLineNo">464</span><a id="line.464"></a>
<span class="sourceLineNo">465</span><a id="line.465">    /**</a>
<span class="sourceLineNo">466</span><a id="line.466">     * Reconstitutes this object based on the specified InputStream for JDK Serialization.</a>
<span class="sourceLineNo">467</span><a id="line.467">     *</a>
<span class="sourceLineNo">468</span><a id="line.468">     * @param in the input stream to use for reading data to populate this object.</a>
<span class="sourceLineNo">469</span><a id="line.469">     * @throws IOException            if the input stream cannot be used.</a>
<span class="sourceLineNo">470</span><a id="line.470">     * @throws ClassNotFoundException if a required class needed for instantiation is not available in the present JVM</a>
<span class="sourceLineNo">471</span><a id="line.471">     * @since 1.0</a>
<span class="sourceLineNo">472</span><a id="line.472">     */</a>
<span class="sourceLineNo">473</span><a id="line.473">    @SuppressWarnings({"unchecked"})</a>
<span class="sourceLineNo">474</span><a id="line.474">    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {</a>
<span class="sourceLineNo">475</span><a id="line.475">        in.defaultReadObject();</a>
<span class="sourceLineNo">476</span><a id="line.476">        short bitMask = in.readShort();</a>
<span class="sourceLineNo">477</span><a id="line.477"></a>
<span class="sourceLineNo">478</span><a id="line.478">        if (isFieldPresent(bitMask, ID_BIT_MASK)) {</a>
<span class="sourceLineNo">479</span><a id="line.479">            this.id = (Serializable) in.readObject();</a>
<span class="sourceLineNo">480</span><a id="line.480">        }</a>
<span class="sourceLineNo">481</span><a id="line.481">        if (isFieldPresent(bitMask, START_TIMESTAMP_BIT_MASK)) {</a>
<span class="sourceLineNo">482</span><a id="line.482">            this.startTimestamp = (Date) in.readObject();</a>
<span class="sourceLineNo">483</span><a id="line.483">        }</a>
<span class="sourceLineNo">484</span><a id="line.484">        if (isFieldPresent(bitMask, STOP_TIMESTAMP_BIT_MASK)) {</a>
<span class="sourceLineNo">485</span><a id="line.485">            this.stopTimestamp = (Date) in.readObject();</a>
<span class="sourceLineNo">486</span><a id="line.486">        }</a>
<span class="sourceLineNo">487</span><a id="line.487">        if (isFieldPresent(bitMask, LAST_ACCESS_TIME_BIT_MASK)) {</a>
<span class="sourceLineNo">488</span><a id="line.488">            this.lastAccessTime = (Date) in.readObject();</a>
<span class="sourceLineNo">489</span><a id="line.489">        }</a>
<span class="sourceLineNo">490</span><a id="line.490">        if (isFieldPresent(bitMask, TIMEOUT_BIT_MASK)) {</a>
<span class="sourceLineNo">491</span><a id="line.491">            this.timeout = in.readLong();</a>
<span class="sourceLineNo">492</span><a id="line.492">        }</a>
<span class="sourceLineNo">493</span><a id="line.493">        if (isFieldPresent(bitMask, EXPIRED_BIT_MASK)) {</a>
<span class="sourceLineNo">494</span><a id="line.494">            this.expired = in.readBoolean();</a>
<span class="sourceLineNo">495</span><a id="line.495">        }</a>
<span class="sourceLineNo">496</span><a id="line.496">        if (isFieldPresent(bitMask, HOST_BIT_MASK)) {</a>
<span class="sourceLineNo">497</span><a id="line.497">            this.host = in.readUTF();</a>
<span class="sourceLineNo">498</span><a id="line.498">        }</a>
<span class="sourceLineNo">499</span><a id="line.499">        if (isFieldPresent(bitMask, ATTRIBUTES_BIT_MASK)) {</a>
<span class="sourceLineNo">500</span><a id="line.500">            this.attributes = (Map&lt;Object, Object&gt;) in.readObject();</a>
<span class="sourceLineNo">501</span><a id="line.501">        }</a>
<span class="sourceLineNo">502</span><a id="line.502">    }</a>
<span class="sourceLineNo">503</span><a id="line.503"></a>
<span class="sourceLineNo">504</span><a id="line.504">    /**</a>
<span class="sourceLineNo">505</span><a id="line.505">     * Returns a bit mask used during serialization indicating which fields have been serialized. Fields that have been</a>
<span class="sourceLineNo">506</span><a id="line.506">     * altered (not null and/or not retaining the class defaults) will be serialized and have 1 in their respective</a>
<span class="sourceLineNo">507</span><a id="line.507">     * index, fields that are null and/or retain class default values have 0.</a>
<span class="sourceLineNo">508</span><a id="line.508">     *</a>
<span class="sourceLineNo">509</span><a id="line.509">     * @return a bit mask used during serialization indicating which fields have been serialized.</a>
<span class="sourceLineNo">510</span><a id="line.510">     * @since 1.0</a>
<span class="sourceLineNo">511</span><a id="line.511">     */</a>
<span class="sourceLineNo">512</span><a id="line.512">    private short getAlteredFieldsBitMask() {</a>
<span class="sourceLineNo">513</span><a id="line.513">        int bitMask = 0;</a>
<span class="sourceLineNo">514</span><a id="line.514">        bitMask = id != null ? bitMask | ID_BIT_MASK : bitMask;</a>
<span class="sourceLineNo">515</span><a id="line.515">        bitMask = startTimestamp != null ? bitMask | START_TIMESTAMP_BIT_MASK : bitMask;</a>
<span class="sourceLineNo">516</span><a id="line.516">        bitMask = stopTimestamp != null ? bitMask | STOP_TIMESTAMP_BIT_MASK : bitMask;</a>
<span class="sourceLineNo">517</span><a id="line.517">        bitMask = lastAccessTime != null ? bitMask | LAST_ACCESS_TIME_BIT_MASK : bitMask;</a>
<span class="sourceLineNo">518</span><a id="line.518">        bitMask = timeout != 0l ? bitMask | TIMEOUT_BIT_MASK : bitMask;</a>
<span class="sourceLineNo">519</span><a id="line.519">        bitMask = expired ? bitMask | EXPIRED_BIT_MASK : bitMask;</a>
<span class="sourceLineNo">520</span><a id="line.520">        bitMask = host != null ? bitMask | HOST_BIT_MASK : bitMask;</a>
<span class="sourceLineNo">521</span><a id="line.521">        bitMask = !CollectionUtils.isEmpty(attributes) ? bitMask | ATTRIBUTES_BIT_MASK : bitMask;</a>
<span class="sourceLineNo">522</span><a id="line.522">        return (short) bitMask;</a>
<span class="sourceLineNo">523</span><a id="line.523">    }</a>
<span class="sourceLineNo">524</span><a id="line.524"></a>
<span class="sourceLineNo">525</span><a id="line.525">    /**</a>
<span class="sourceLineNo">526</span><a id="line.526">     * Returns {@code true} if the given {@code bitMask} argument indicates that the specified field has been</a>
<span class="sourceLineNo">527</span><a id="line.527">     * serialized and therefore should be read during deserialization, {@code false} otherwise.</a>
<span class="sourceLineNo">528</span><a id="line.528">     *</a>
<span class="sourceLineNo">529</span><a id="line.529">     * @param bitMask      the aggregate bitmask for all fields that have been serialized.  Individual bits represent</a>
<span class="sourceLineNo">530</span><a id="line.530">     *                     the fields that have been serialized.  A bit set to 1 means that corresponding field has</a>
<span class="sourceLineNo">531</span><a id="line.531">     *                     been serialized, 0 means it hasn't been serialized.</a>
<span class="sourceLineNo">532</span><a id="line.532">     * @param fieldBitMask the field bit mask constant identifying which bit to inspect (corresponds to a class attribute).</a>
<span class="sourceLineNo">533</span><a id="line.533">     * @return {@code true} if the given {@code bitMask} argument indicates that the specified field has been</a>
<span class="sourceLineNo">534</span><a id="line.534">     *         serialized and therefore should be read during deserialization, {@code false} otherwise.</a>
<span class="sourceLineNo">535</span><a id="line.535">     * @since 1.0</a>
<span class="sourceLineNo">536</span><a id="line.536">     */</a>
<span class="sourceLineNo">537</span><a id="line.537">    private static boolean isFieldPresent(short bitMask, int fieldBitMask) {</a>
<span class="sourceLineNo">538</span><a id="line.538">        return (bitMask &amp; fieldBitMask) != 0;</a>
<span class="sourceLineNo">539</span><a id="line.539">    }</a>
<span class="sourceLineNo">540</span><a id="line.540"></a>
<span class="sourceLineNo">541</span><a id="line.541">}</a>




























































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