import java.lang.reflect.Method;\r
import java.util.Collection;\r
import java.util.Iterator;\r
+import java.util.concurrent.ExecutorService;\r
+import java.util.concurrent.Executors;\r
\r
import javax.measure.quantity.Area;\r
import javax.measure.quantity.Length;\r
\r
public class Chart<X extends Quantity, Y extends Quantity> extends JPanel {\r
private static final long serialVersionUID = 1L;\r
+ \r
+ private static ExecutorService fast = Executors.newFixedThreadPool(2) ;\r
+ private static ExecutorService slow = Executors.newFixedThreadPool(2);\r
\r
public class IntervalDomain implements Iterable<Amount<X>>{\r
\r
}\r
}\r
\r
+\r
+ public void setDomain(final Iterable<Amount<X>> d) {\r
+ series.clear();\r
+ fill(d, 100);\r
+ fast.submit(new Thread(){\r
+ public void run(){\r
+ fill(d, 10);\r
+ }\r
+ });\r
+ slow.submit(new Thread(){\r
+ public void run(){\r
+ fill(d, 1);\r
+ }\r
+ });\r
+ }\r
+ \r
@SuppressWarnings("unchecked")\r
- public void setDomain(Iterable<Amount<X>> d) {\r
- int skip = 1;\r
+ private void fill(Iterable<Amount<X>> d, int skip) {\r
int sz = 0;\r
- if ( d instanceof Collection ){\r
- sz = ((Collection)d).size();\r
- if ( sz > 200 )\r
- skip = sz / 200;\r
+ if (d instanceof Collection) {\r
+ sz = ((Collection) d).size();\r
+ int sk2 = sz / 200;\r
+ if (skip < sk2)\r
+ skip = sk2;\r
}\r
- series.clear();\r
+ // series.clear();\r
int cnt = 0;\r
- for( Amount<X> ax: d){\r
- try {\r
- if ( cnt % skip == 0 || cnt == sz-1 ){\r
- Amount<Y> y = (Amount<Y>)f.invoke(source, ax);\r
+\r
+ try {\r
+ Amount<X> last = null;\r
+ for (Amount<X> ax : d) {\r
+ last = ax;\r
+ if (cnt % skip == 0) {\r
+ Amount<Y> y = (Amount<Y>) f.invoke(source, ax);\r
add(ax, y);\r
}\r
cnt++;\r
- } catch (IllegalArgumentException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- } catch (IllegalAccessException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- } catch (InvocationTargetException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
}\r
+ Amount<Y> y = (Amount<Y>) f.invoke(source, last);\r
+ add(last, y);\r
+ } catch (IllegalArgumentException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ } catch (IllegalAccessException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ } catch (InvocationTargetException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
}\r
}\r
\r