View Javadoc

1   /*
2    * Copyright (c) 2003-2008 by Cosylab d. d.
3    *
4    * This file is part of CosyBeans.
5    *
6    * CosyBeans is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU General Public License as published by
8    * the Free Software Foundation, either version 3 of the License, or
9    * (at your option) any later version.
10   *
11   * CosyBeans is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU General Public License for more details.
15   *
16   * You should have received a copy of the GNU General Public License
17   * along with CosyBeans.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  
20  package com.cosylab.gui.adapters;
21  
22  import java.util.Map;
23  
24  import com.cosylab.gui.displayers.AsynchronousNumberConsumer;
25  import com.cosylab.gui.displayers.AsynchronousObjectConsumer;
26  import com.cosylab.gui.displayers.AsynchronousStringConsumer;
27  import com.cosylab.gui.displayers.DataConsumer;
28  import com.cosylab.gui.displayers.DataState;
29  import com.cosylab.gui.displayers.NonblockingNumberConsumer;
30  import com.cosylab.gui.displayers.NonblockingObjectConsumer;
31  import com.cosylab.gui.displayers.NonblockingStringConsumer;
32  import com.cosylab.gui.displayers.SynchronousNumberConsumer;
33  import com.cosylab.gui.displayers.SynchronousObjectConsumer;
34  import com.cosylab.gui.displayers.SynchronousStringConsumer;
35  import com.cosylab.gui.displayers.UpdateRequest;
36  import com.cosylab.util.CommonException;
37  
38  
39  /**
40   * <code>FeedbackConsumerSupport</code> is support class fo all implementators
41   * who want to implement consumer, which receives requests for data change
42   * from data consumers and displayers.
43   *
44   * @author <a href="mailto:igor.kriznar@cosylab.com">Igor Kriznar</a>
45   * @version $Id: FeedbackConsumerSupport.java,v 1.4 2008-04-22 12:31:02 jbobnar Exp $
46   *
47   * @see com.cosylab.gui.displayers.CommonDisplayer
48   * @since Apr 7, 2004.
49   */
50  public class FeedbackConsumerSupport implements AsynchronousNumberConsumer,
51  	AsynchronousObjectConsumer, AsynchronousStringConsumer,
52  	SynchronousNumberConsumer, SynchronousObjectConsumer,
53  	SynchronousStringConsumer, NonblockingNumberConsumer,
54  	NonblockingObjectConsumer, NonblockingStringConsumer
55  {
56  	protected String name = "FeedbackConsumerSupport";
57  	private static final Class[] supported = {
58  		AsynchronousNumberConsumer.class, AsynchronousObjectConsumer.class,
59  		AsynchronousStringConsumer.class, SynchronousNumberConsumer.class,
60  		SynchronousObjectConsumer.class, SynchronousStringConsumer.class,
61  		NonblockingNumberConsumer.class, NonblockingObjectConsumer.class,
62  		NonblockingStringConsumer.class
63  	};
64  
65  	/**
66  	 * Creates new instance.
67  	 */
68  	public FeedbackConsumerSupport()
69  	{
70  		super();
71  	}
72  
73  	/**
74  	 * Forwards call to <code>updateRequest()</code> and replays to request
75  	 * when update finishes.
76  	 *
77  	 * @see com.cosylab.gui.displayers.AsynchronousStringConsumer#updateAcynchronously(com.cosylab.gui.displayers.UpdateRequest)
78  	 */
79  	public void updateAcynchronously(UpdateRequest request)
80  		throws CommonException
81  	{
82  		try {
83  			Object o = request.getNewTargetValue();
84  
85  			if (o instanceof Number) {
86  				updateRequest(request.getTimestamp(), (Number)o);
87  			} else if (o instanceof String) {
88  				updateRequest(request.getTimestamp(), (String)o);
89  			} else {
90  				updateRequest(request.getTimestamp(), o);
91  			}
92  
93  			request.reply(o, true, null);
94  		} catch (Exception e) {
95  			request.reply(request.getNewTargetValue(), false, e);
96  		}
97  	}
98  
99  	/**
100 	 * Forwards call to <code>updateRequest()</code>.
101 	 *
102 	 * @see com.cosylab.gui.displayers.SynchronousNumberConsumer#updateSynchronously(long,
103 	 *      java.lang.Number)
104 	 */
105 	public void updateSynchronously(long timestamp, Number value)
106 		throws CommonException
107 	{
108 		updateRequest(timestamp, value);
109 	}
110 
111 	/**
112 	 * Forwards call to <code>updateRequest()</code>.
113 	 *
114 	 * @see com.cosylab.gui.displayers.SynchronousObjectConsumer#updateSynchronously(long,
115 	 *      java.lang.Object)
116 	 */
117 	public void updateSynchronously(long timestamp, Object value)
118 		throws CommonException
119 	{
120 		updateRequest(timestamp, value);
121 	}
122 
123 	/**
124 	 * Forwards call to <code>updateRequest()</code>.
125 	 *
126 	 * @see com.cosylab.gui.displayers.SynchronousStringConsumer#updateSynchronously(long,
127 	 *      java.lang.String)
128 	 */
129 	public void updateSynchronously(long timestamp, String value)
130 		throws CommonException
131 	{
132 		updateRequest(timestamp, value);
133 	}
134 
135 	/**
136 	 * Forwards call to <code>updateRequest()</code>.
137 	 *
138 	 * @see com.cosylab.gui.displayers.NonblockingNumberConsumer#updateNonblocking(java.lang.Number)
139 	 */
140 	public void updateNonblocking(Number value)
141 	{
142 		updateRequest(System.currentTimeMillis(), value);
143 	}
144 
145 	/**
146 	 * Forwards call to <code>updateRequest()</code>.
147 	 *
148 	 * @see com.cosylab.gui.displayers.NonblockingObjectConsumer#updateNonblocking(java.lang.Object)
149 	 */
150 	public void updateNonblocking(Object value)
151 	{
152 		updateRequest(System.currentTimeMillis(), value);
153 	}
154 
155 	/**
156 	 * Forwards call to <code>updateRequest()</code>.
157 	 *
158 	 * @see com.cosylab.gui.displayers.NonblockingStringConsumer#updateNonblocking(java.lang.String)
159 	 */
160 	public void updateNonblocking(String value)
161 	{
162 		updateRequest(System.currentTimeMillis(), value);
163 	}
164 
165 	/* (non-Javadoc)
166 	 * @see com.cosylab.gui.displayers.DataConsumer#getDataConsumer(java.lang.Class)
167 	 */
168 	public DataConsumer getDataConsumer(Class type)
169 	{
170 		if (type.isAssignableFrom(this.getClass())) {
171 			return this;
172 		}
173 
174 		return null;
175 	}
176 
177 	/* (non-Javadoc)
178 	 * @see com.cosylab.gui.displayers.DataConsumer#getDefaultDataConsumer()
179 	 */
180 	public DataConsumer getDefaultDataConsumer()
181 	{
182 		return this;
183 	}
184 
185 	/* (non-Javadoc)
186 	 * @see com.cosylab.gui.displayers.DataConsumer#updateDataState(com.cosylab.gui.displayers.DataState)
187 	 */
188 	public void updateDataState(DataState state)
189 	{
190 	}
191 
192 	/* (non-Javadoc)
193 	 * @see com.cosylab.gui.displayers.DataConsumer#setCharacteristics(java.util.Map)
194 	 */
195 	public void setCharacteristics(Map characteristics)
196 	{
197 	}
198 
199 	/* (non-Javadoc)
200 	 * @see com.cosylab.gui.displayers.DataConsumer#getName()
201 	 */
202 	public String getName()
203 	{
204 		return name;
205 	}
206 
207 	/* (non-Javadoc)
208 	 * @see com.cosylab.gui.displayers.DataConsumer#getSupportedCharacteristics()
209 	 */
210 	public String[] getSupportedCharacteristics()
211 	{
212 		return null;
213 	}
214 
215 	/* (non-Javadoc)
216 	 * @see com.cosylab.gui.displayers.DataConsumer#getSupportedConsumerTypes()
217 	 */
218 	public Class[] getSupportedConsumerTypes()
219 	{
220 		return supported;
221 	}
222 
223 	/**
224 	 * This method is called whenever any of number updates is called.
225 	 *
226 	 * @param timestamp
227 	 * @param value
228 	 */
229 	protected void updateRequest(long timestamp, Number value)
230 	{
231 	}
232 
233 	/**
234 	 * This method is called whenever any of Object updates is called.
235 	 *
236 	 * @param timestamp
237 	 * @param value
238 	 */
239 	protected void updateRequest(long timestamp, Object value)
240 	{
241 	}
242 
243 	/**
244 	 * This method is called whenever any of String updates is called.
245 	 *
246 	 * @param timestamp
247 	 * @param value
248 	 */
249 	protected void updateRequest(long timestamp, String value)
250 	{
251 	}
252 }
253 
254 /* __oOo__ */