<!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.concurrent;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import java.util.concurrent.*;</a>
<span class="sourceLineNo">022</span><a id="line.22"></a>
<span class="sourceLineNo">023</span><a id="line.23">/**</a>
<span class="sourceLineNo">024</span><a id="line.24"> * Same concept as the {@link SubjectAwareExecutorService} but additionally supports the</a>
<span class="sourceLineNo">025</span><a id="line.25"> * {@link ScheduledExecutorService} interface.</a>
<span class="sourceLineNo">026</span><a id="line.26"> */</a>
<span class="sourceLineNo">027</span><a id="line.27">public class SubjectAwareScheduledExecutorService extends SubjectAwareExecutorService implements ScheduledExecutorService {</a>
<span class="sourceLineNo">028</span><a id="line.28"></a>
<span class="sourceLineNo">029</span><a id="line.29">    private ScheduledExecutorService targetScheduledExecutorService;</a>
<span class="sourceLineNo">030</span><a id="line.30"></a>
<span class="sourceLineNo">031</span><a id="line.31">    public SubjectAwareScheduledExecutorService() {</a>
<span class="sourceLineNo">032</span><a id="line.32">    }</a>
<span class="sourceLineNo">033</span><a id="line.33"></a>
<span class="sourceLineNo">034</span><a id="line.34">    public SubjectAwareScheduledExecutorService(ScheduledExecutorService target) {</a>
<span class="sourceLineNo">035</span><a id="line.35">        setTargetScheduledExecutorService(target);</a>
<span class="sourceLineNo">036</span><a id="line.36">    }</a>
<span class="sourceLineNo">037</span><a id="line.37"></a>
<span class="sourceLineNo">038</span><a id="line.38">    public ScheduledExecutorService getTargetScheduledExecutorService() {</a>
<span class="sourceLineNo">039</span><a id="line.39">        return targetScheduledExecutorService;</a>
<span class="sourceLineNo">040</span><a id="line.40">    }</a>
<span class="sourceLineNo">041</span><a id="line.41"></a>
<span class="sourceLineNo">042</span><a id="line.42">    public void setTargetScheduledExecutorService(ScheduledExecutorService targetScheduledExecutorService) {</a>
<span class="sourceLineNo">043</span><a id="line.43">        super.setTargetExecutorService(targetScheduledExecutorService);</a>
<span class="sourceLineNo">044</span><a id="line.44">        this.targetScheduledExecutorService = targetScheduledExecutorService;</a>
<span class="sourceLineNo">045</span><a id="line.45">    }</a>
<span class="sourceLineNo">046</span><a id="line.46"></a>
<span class="sourceLineNo">047</span><a id="line.47">    @Override</a>
<span class="sourceLineNo">048</span><a id="line.48">    public void setTargetExecutor(Executor targetExecutor) {</a>
<span class="sourceLineNo">049</span><a id="line.49">        if (!(targetExecutor instanceof ScheduledExecutorService)) {</a>
<span class="sourceLineNo">050</span><a id="line.50">            String msg = "The " + getClass().getName() + " implementation only accepts " +</a>
<span class="sourceLineNo">051</span><a id="line.51">                    ScheduledExecutorService.class.getName() + " target instances.";</a>
<span class="sourceLineNo">052</span><a id="line.52">            throw new IllegalArgumentException(msg);</a>
<span class="sourceLineNo">053</span><a id="line.53">        }</a>
<span class="sourceLineNo">054</span><a id="line.54">        super.setTargetExecutorService((ScheduledExecutorService) targetExecutor);</a>
<span class="sourceLineNo">055</span><a id="line.55">    }</a>
<span class="sourceLineNo">056</span><a id="line.56"></a>
<span class="sourceLineNo">057</span><a id="line.57">    @Override</a>
<span class="sourceLineNo">058</span><a id="line.58">    public void setTargetExecutorService(ExecutorService targetExecutorService) {</a>
<span class="sourceLineNo">059</span><a id="line.59">        if (!(targetExecutorService instanceof ScheduledExecutorService)) {</a>
<span class="sourceLineNo">060</span><a id="line.60">            String msg = "The " + getClass().getName() + " implementation only accepts " +</a>
<span class="sourceLineNo">061</span><a id="line.61">                    ScheduledExecutorService.class.getName() + " target instances.";</a>
<span class="sourceLineNo">062</span><a id="line.62">            throw new IllegalArgumentException(msg);</a>
<span class="sourceLineNo">063</span><a id="line.63">        }</a>
<span class="sourceLineNo">064</span><a id="line.64">        super.setTargetExecutorService(targetExecutorService);</a>
<span class="sourceLineNo">065</span><a id="line.65">    }</a>
<span class="sourceLineNo">066</span><a id="line.66"></a>
<span class="sourceLineNo">067</span><a id="line.67">    public ScheduledFuture&lt;?&gt; schedule(Runnable command, long delay, TimeUnit unit) {</a>
<span class="sourceLineNo">068</span><a id="line.68">        Runnable work = associateWithSubject(command);</a>
<span class="sourceLineNo">069</span><a id="line.69">        return this.targetScheduledExecutorService.schedule(work, delay, unit);</a>
<span class="sourceLineNo">070</span><a id="line.70">    }</a>
<span class="sourceLineNo">071</span><a id="line.71"></a>
<span class="sourceLineNo">072</span><a id="line.72">    public &lt;V&gt; ScheduledFuture&lt;V&gt; schedule(Callable&lt;V&gt; callable, long delay, TimeUnit unit) {</a>
<span class="sourceLineNo">073</span><a id="line.73">        Callable&lt;V&gt; work = associateWithSubject(callable);</a>
<span class="sourceLineNo">074</span><a id="line.74">        return this.targetScheduledExecutorService.schedule(work, delay, unit);</a>
<span class="sourceLineNo">075</span><a id="line.75">    }</a>
<span class="sourceLineNo">076</span><a id="line.76"></a>
<span class="sourceLineNo">077</span><a id="line.77">    public ScheduledFuture&lt;?&gt; scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) {</a>
<span class="sourceLineNo">078</span><a id="line.78">        Runnable work = associateWithSubject(command);</a>
<span class="sourceLineNo">079</span><a id="line.79">        return this.targetScheduledExecutorService.scheduleAtFixedRate(work, initialDelay, period, unit);</a>
<span class="sourceLineNo">080</span><a id="line.80">    }</a>
<span class="sourceLineNo">081</span><a id="line.81"></a>
<span class="sourceLineNo">082</span><a id="line.82">    public ScheduledFuture&lt;?&gt; scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) {</a>
<span class="sourceLineNo">083</span><a id="line.83">        Runnable work = associateWithSubject(command);</a>
<span class="sourceLineNo">084</span><a id="line.84">        return this.targetScheduledExecutorService.scheduleWithFixedDelay(work, initialDelay, delay, unit);</a>
<span class="sourceLineNo">085</span><a id="line.85">    }</a>
<span class="sourceLineNo">086</span><a id="line.86">}</a>




























































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