KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > icesoft > faces > async > render > IntervalRenderer


1 /*
2  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3  *
4  * "The contents of this file are subject to the Mozilla Public License
5  * Version 1.1 (the "License"); you may not use this file except in
6  * compliance with the License. You may obtain a copy of the License at
7  * http://www.mozilla.org/MPL/
8  *
9  * Software distributed under the License is distributed on an "AS IS"
10  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
11  * License for the specific language governing rights and limitations under
12  * the License.
13  *
14  * The Original Code is ICEfaces 1.5 open source software code, released
15  * November 5, 2006. The Initial Developer of the Original Code is ICEsoft
16  * Technologies Canada, Corp. Portions created by ICEsoft are Copyright (C)
17  * 2004-2006 ICEsoft Technologies Canada, Corp. All Rights Reserved.
18  *
19  * Contributor(s): _____________________.
20  *
21  * Alternatively, the contents of this file may be used under the terms of
22  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"
23  * License), in which case the provisions of the LGPL License are
24  * applicable instead of those above. If you wish to allow use of your
25  * version of this file only under the terms of the LGPL License and not to
26  * allow others to use your version of this file under the MPL, indicate
27  * your decision by deleting the provisions above and replace them with
28  * the notice and other provisions required by the LGPL License. If you do
29  * not delete the provisions above, a recipient may use your version of
30  * this file under either the MPL or the LGPL License."
31  *
32  */

33
34 package com.icesoft.faces.async.render;
35
36 import edu.emory.mathcs.backport.java.util.concurrent.ScheduledExecutorService;
37 import edu.emory.mathcs.backport.java.util.concurrent.ScheduledFuture;
38 import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit;
39 import org.apache.commons.logging.Log;
40 import org.apache.commons.logging.LogFactory;
41
42 /**
43  * The IntervalRenderer is type of {@link GroupAsyncRenderer} that is used to
44  * request a single render pass on a group of Renderables. The render pass is
45  * executed repeatedly on a set interval. The interval is measured from the
46  * start of one render pass to the start of the next render pass so does not
47  * take the time to complete the render pass into account. If the time to
48  * complete the render pass exceeds the interval then the next render pass is
49  * done on a best effort basis. IntervalRenderers can be created and used
50  * directly but it is recommended to use the RenderManager to create and managed
51  * named render groups.
52  *
53  * @author ICEsoft Technologies, Inc.
54  * @see RenderManager, GroupAsyncRenderer
55  */

56 public class IntervalRenderer extends OnDemandRenderer implements Runnable JavaDoc {
57
58     private static Log log = LogFactory.getLog(IntervalRenderer.class);
59
60     private long interval = 60000;
61     private boolean isStarted = false;
62     private ScheduledFuture future;
63
64     /**
65      * Get the currently specified interval. If no interval has been explicitly
66      * set, then the default interval value (60000 ms) is used.
67      *
68      * @return The current interval value in ms.
69      */

70     public long getInterval() {
71         return interval;
72     }
73
74     /**
75      * Set the interval to wait before executing the next render pass. Once the
76      * rendering has been started, setting the interval has no effect.
77      *
78      * @param interval The time in ms to wait before starting the next render
79      * pass.
80      */

81     public void setInterval(long interval) {
82         this.interval = interval;
83     }
84
85     /**
86      * Schedules a render pass on the group of Renderables using the interval
87      * value specified using {@link #setInterval}.
88      */

89     public void requestRender() {
90
91         if (isStarted) {
92             return;
93         }
94
95         isStarted = true;
96
97         ScheduledExecutorService scheduleService =
98                 renderManager.getScheduledService();
99         future = scheduleService.scheduleAtFixedRate(this, interval, interval,
100                                                      TimeUnit.MILLISECONDS);
101
102         if (log.isDebugEnabled()) {
103             log.debug(
104                     "interval render started: interval is " + interval + " ms");
105         }
106     }
107
108     public void requestStop() {
109         super.requestStop();
110         if (future != null && !future.isDone()) {
111             future.cancel(false);
112         }
113         isStarted = false;
114     }
115
116     public void run() {
117         super.requestRender();
118     }
119
120     public void dispose() {
121         super.dispose();
122         future = null;
123     }
124 }
125
126
Popular Tags